Lius
2023-11-21 80e505b03b3be711aa49662ba2ce35b4fcf516e4
OEE设备综合效率算法调整
已修改18个文件
292 ■■■■ 文件已修改
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/constant/MdcConstant.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcOverallEquipmentEfficiency.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDeviceCalendarMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentOvertimeMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalShiftInfoMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDeviceCalendarMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentOvertimeMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalShiftInfoMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcOverallEquipmentEfficiencyMapper.xml 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDeviceCalendarService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentOvertimeService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalShiftInfoService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcPlanCloseService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentOvertimeServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java 185 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcPlanCloseServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/constant/MdcConstant.java
@@ -51,4 +51,10 @@
     */
    public static final String OTHER_REST = "休息用餐,预防性维修";
    public static final String DAY = "天";
    public static final String WEEK = "周";
    public static final String MONTH = "月";
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcOverallEquipmentEfficiency.java
@@ -50,10 +50,10 @@
    @ApiModelProperty(value = "有效日期")
    private String validDate;
    /**
     * 班次id
     * 班次
     */
    @ApiModelProperty(value = "班次id")
    private String shiftSubId;
    @ApiModelProperty(value = "班次")
    private String shift;
    /**
     * 每班小时
     */
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDeviceCalendarMapper.java
@@ -23,9 +23,9 @@
    List<MdcDeviceCalendarVo> findAcquiesceShift();
    List<String> computeActualWorkDayCount(@Param("shiftSubId") String shiftSubId, @Param("equipmentId") String equipmentId, @Param("validDate") String validDate);
    List<String> computeActualWorkDayCount(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate);
    List<String> findShiftSort(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate);
    Integer computeShiftTimeCount(@Param("shiftSubId") String shiftSubId, @Param("equipmentId") String equipmentId, @Param("validDate") String validDate);
    Integer computeShiftTimeCount(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentOvertimeMapper.java
@@ -40,5 +40,5 @@
     * @param validDate
     * @return
     */
    List<MdcEquipmentOvertime> computeOvertime(@Param("shiftSubId") String shiftSubId, @Param("equipmentId") String equipmentId, @Param("validDate") String validDate);
    List<MdcEquipmentOvertime> computeOvertime(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalShiftInfoMapper.java
@@ -20,5 +20,5 @@
     */
    MdcEquipmentStatisticalShiftInfo getMaxStaticsData(@Param("equipmentId") String equipmentid);
    BigDecimal findSpindleRunDuration(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate, @Param("shiftSubId") String shiftSubId);
    BigDecimal findSpindleRunDuration(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDeviceCalendarMapper.xml
@@ -93,18 +93,17 @@
        WHERE
            effective_date LIKE CONCAT(#{ validDate }, '%')
            AND equipment_id = #{ equipmentId }
            AND shift_sub_id = #{ shiftSubId }
    </select>
    <!--查询班次分类-->
    <select id="findShiftSort" resultType="java.lang.String">
        SELECT
            DISTINCT shift_sub_id
        SELECT DISTINCT
            t2.shift_name
        FROM
            mdc_device_calendar
            mdc_device_calendar t1 LEFT JOIN mdc_shift t2 ON t1.shift_id = t2.id
        WHERE
            effective_date LIKE CONCAT(#{ validDate }, '%')
            AND equipment_id = #{ equipmentId }
            t1.effective_date LIKE CONCAT(#{ validDate }, '%')
            AND t1.equipment_id = #{ equipmentId }
    </select>
    <!--查询班次数量-->
@@ -116,7 +115,6 @@
        WHERE
            effective_date LIKE CONCAT(#{ validDate }, '%')
            AND equipment_id = #{ equipmentId }
            AND shift_sub_id = #{ shiftSubId }
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentOvertimeMapper.xml
@@ -88,6 +88,5 @@
        WHERE
            mdc.effective_date LIKE CONCAT(#{ validDate }, '%')
            AND mdc.equipment_id = #{ equipmentId }
            AND mdc.shift_sub_id = #{ shiftSubId }
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalShiftInfoMapper.xml
@@ -15,7 +15,6 @@
            mdc_equipment_statistical_shift_info
        WHERE
            equipment_id = #{ equipmentId }
            AND shift_sub_id = #{ shiftSubId }
            AND the_date LIKE CONCAT(#{ validDate },'%')
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcOverallEquipmentEfficiencyMapper.xml
@@ -10,7 +10,7 @@
            t1.equipment_name,
            t1.equipment_model,
            t1.valid_date,
            t2.shift_sub_name shiftSubId,
            t1.shift,
            t1.shift_time_count,
            t1.overtime,
            t1.actual_work_day_count,
@@ -37,17 +37,10 @@
            t1.update_by,
            t1.update_time
        FROM
            mdc_overall_equipment_efficiency t1 LEFT JOIN mdc_shift_sub t2 ON t1.shift_sub_id = t2.id
            LEFT JOIN mdc_shift t3 ON t2.shift_id = t3.id
            mdc_overall_equipment_efficiency t1
        <where>
            <if test="mdcOverallEquipmentEfficiency.startTime != null and mdcOverallEquipmentEfficiency.startTime != '' and mdcOverallEquipmentEfficiency.endTime != null and mdcOverallEquipmentEfficiency.endTime != ''">
                AND t1.valid_date BETWEEN #{ mdcOverallEquipmentEfficiency.startTime } AND #{ mdcOverallEquipmentEfficiency.endTime }
            </if>
            <if test="mdcOverallEquipmentEfficiency.shiftId != null and mdcOverallEquipmentEfficiency.shiftId != ''">
                AND t3.id = #{ mdcOverallEquipmentEfficiency.shiftId }
            </if>
            <if test="mdcOverallEquipmentEfficiency.shiftSubId != null and mdcOverallEquipmentEfficiency.shiftSubId != ''">
                AND t1.shift_sub_id = #{ mdcOverallEquipmentEfficiency.shiftSubId }
            </if>
            <if test="mdcOverallEquipmentEfficiency.equipmentIdList != null and mdcOverallEquipmentEfficiency.equipmentIdList.size() > 0 ">
                AND t1.equipment_id IN
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDeviceCalendarService.java
@@ -41,12 +41,11 @@
    /**
     * 计算实际班产天数
     *
     * @param shiftSubId
     * @param equipmentId
     * @param validDate
     * @return
     */
    BigDecimal computeActualWorkDayCount(String shiftSubId, String equipmentId, String validDate);
    BigDecimal computeActualWorkDayCount(String equipmentId, String validDate);
    /**
     * 查询班次分类
@@ -60,12 +59,11 @@
    /**
     * 计算班次时间
     *
     * @param shiftSubId
     * @param equipmentId
     * @param validDate
     * @return
     */
    BigDecimal computeShiftTimeCount(String shiftSubId, String equipmentId, String validDate);
    BigDecimal computeShiftTimeCount(String equipmentId, String validDate);
    /**
     * 生成设备工作日历
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentOvertimeService.java
@@ -41,10 +41,9 @@
    /**
     * 计算加班时间
     *
     * @param shiftSubId
     * @param equipmentId
     * @param validDate
     * @return
     */
    BigDecimal computeOvertime(String shiftSubId, String equipmentId, String validDate);
    BigDecimal computeOvertime(String equipmentId, String validDate);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalShiftInfoService.java
@@ -24,9 +24,8 @@
     *
     * @param equipmentId
     * @param validDate
     * @param shiftSubId
     * @return
     */
    BigDecimal findSpindleRunDuration(String equipmentId, String validDate, String shiftSubId);
    BigDecimal findSpindleRunDuration(String equipmentId, String validDate);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcPlanCloseService.java
@@ -3,6 +3,8 @@
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.mdc.entity.MdcPlanClose;
import java.math.BigDecimal;
/**
 * @Description: mdc计划停机维护表
 * @Author: Lius
@@ -11,4 +13,5 @@
 */
public interface IMdcPlanCloseService extends IService<MdcPlanClose> {
    BigDecimal findPlanTimeDuration(BigDecimal actualWorkDayCount, String planCloseType);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java
@@ -146,15 +146,14 @@
    /**
     * 计算实际班产天数
     *
     * @param shiftSubId
     * @param equipmentId
     * @param validDate
     * @return
     */
    @Override
    public BigDecimal computeActualWorkDayCount(String shiftSubId, String equipmentId, String validDate) {
    public BigDecimal computeActualWorkDayCount(String equipmentId, String validDate) {
        validDate = validDate.replaceAll("-", "");
        List<String> validDateList = this.baseMapper.computeActualWorkDayCount(shiftSubId, equipmentId, validDate);
        List<String> validDateList = this.baseMapper.computeActualWorkDayCount(equipmentId, validDate);
        return new BigDecimal(validDateList.size());
    }
@@ -174,14 +173,13 @@
    /**
     * 计算班次时间
     *
     * @param shiftSubId
     * @param equipmentId
     * @param validDate
     * @return
     */
    @Override
    public BigDecimal computeShiftTimeCount(String shiftSubId, String equipmentId, String validDate) {
        Integer shiftCount = this.baseMapper.computeShiftTimeCount(shiftSubId, equipmentId, validDate);
    public BigDecimal computeShiftTimeCount(String equipmentId, String validDate) {
        Integer shiftCount = this.baseMapper.computeShiftTimeCount(equipmentId, validDate);
        return new BigDecimal(shiftCount).multiply(new BigDecimal("8")).multiply(new BigDecimal("60"));
    }
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentOvertimeServiceImpl.java
@@ -132,14 +132,13 @@
    /**
     * 计算加班时间(分钟)
     *
     * @param shiftSubId
     * @param equipmentId
     * @param validDate
     * @return
     */
    @Override
    public BigDecimal computeOvertime(String shiftSubId, String equipmentId, String validDate) {
        List<MdcEquipmentOvertime> list = this.baseMapper.computeOvertime(shiftSubId, equipmentId, validDate);
    public BigDecimal computeOvertime(String equipmentId, String validDate) {
        List<MdcEquipmentOvertime> list = this.baseMapper.computeOvertime(equipmentId, validDate);
        BigDecimal result = new BigDecimal("0");
        if (list != null && !list.isEmpty()) {
            for (MdcEquipmentOvertime equipmentOvertime : list) {
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java
@@ -84,9 +84,9 @@
     * @return
     */
    @Override
    public BigDecimal findSpindleRunDuration(String equipmentId, String validDate, String shiftSubId) {
    public BigDecimal findSpindleRunDuration(String equipmentId, String validDate) {
        validDate = validDate.replaceAll("-", "");
        BigDecimal duration = this.baseMapper.findSpindleRunDuration(equipmentId, validDate, shiftSubId);
        BigDecimal duration = this.baseMapper.findSpindleRunDuration(equipmentId, validDate);
        if (duration != null && duration.compareTo(BigDecimal.ZERO) != 0) {
            return duration.divide(new BigDecimal("60"), 0, RoundingMode.HALF_UP);
        } else {
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java
@@ -76,117 +76,114 @@
        List<MdcEquipment> equipmentList = mdcEquipmentService.list();
        for (MdcEquipment mdcEquipment : equipmentList) {
            String equipmentId = mdcEquipment.getEquipmentId();
            // 查询班次分类
            MdcOverallEquipmentEfficiency mdcOverallEquipmentEfficiency = new MdcOverallEquipmentEfficiency();
            // 时间开动率计算
            mdcOverallEquipmentEfficiency.setEquipmentId(equipmentId);
            mdcOverallEquipmentEfficiency.setEquipmentName(mdcEquipment.getEquipmentName());
            mdcOverallEquipmentEfficiency.setEquipmentModel(mdcEquipment.getEquipmentModel());
            mdcOverallEquipmentEfficiency.setValidDate(validDate);
            // 查询班制分类
            List<String> shiftSubIdList = mdcDeviceCalendarService.findShiftSort(equipmentId, validDate);
            if (shiftSubIdList != null && !shiftSubIdList.isEmpty()) {
                String shift = String.join(",", shiftSubIdList);
                mdcOverallEquipmentEfficiency.setShift(shift);
            }
            BigDecimal shiftTimeCount = mdcDeviceCalendarService.computeShiftTimeCount(equipmentId, validDate);
            mdcOverallEquipmentEfficiency.setShiftTimeCount(shiftTimeCount);
            // 计算加班时间
            BigDecimal overtime = mdcEquipmentOvertimeService.computeOvertime(equipmentId, validDate);
            mdcOverallEquipmentEfficiency.setOvertime(overtime);
            // 计算实际班产天数
            BigDecimal actualWorkDayCount = mdcDeviceCalendarService.computeActualWorkDayCount(equipmentId, validDate);
            mdcOverallEquipmentEfficiency.setActualWorkDayCount(actualWorkDayCount);
            // 月度实际班产总时间(分钟)
            mdcOverallEquipmentEfficiency.setMonthActualWorkDayTimeCount(mdcOverallEquipmentEfficiency.getShiftTimeCount().add(overtime));
            // 故障停机时长统计(分钟)
            BigDecimal breakdownDownDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.BREAKDOWN_DOWN);
            mdcOverallEquipmentEfficiency.setBreakdownDownDuration(breakdownDownDuration);
            // 换型调试时长统计(分钟)
            BigDecimal conversionDebugDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.CONVERSION_DEBUG);
            mdcOverallEquipmentEfficiency.setConversionDebugDuration(conversionDebugDuration);
            // 物料短缺时长统计(分钟)
            BigDecimal materialShortageDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.MATERIAL_SHORTAGE);
            mdcOverallEquipmentEfficiency.setMaterialShortageDuration(materialShortageDuration);
            // 计划等任务时长统计(分钟)
            BigDecimal plannedTaskDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.PLANNED_TASK);
            mdcOverallEquipmentEfficiency.setPlannedTaskDuration(plannedTaskDuration);
            // 检验时长统计(分钟)
            BigDecimal inspectDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.INSPECT);
            mdcOverallEquipmentEfficiency.setInspectDuration(inspectDuration);
            // 其他时长统计(分钟)
            BigDecimal otherDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.OTHER);
            mdcOverallEquipmentEfficiency.setOtherDuration(otherDuration);
            // 计划保养时长统计(分钟)
            BigDecimal plannedMaintenanceDuration = new BigDecimal("0");
            BigDecimal plannedMaintenanceDuration = mdcPlanCloseService.findPlanTimeDuration(actualWorkDayCount, MdcConstant.PLANNED_MAINTENANCE);
            mdcOverallEquipmentEfficiency.setPlannedMaintenanceDuration(plannedMaintenanceDuration);
            // 会议/培训时长统计(分钟)
            BigDecimal conferenceTrainingDuration = new BigDecimal("0");
            BigDecimal conferenceTrainingDuration = mdcPlanCloseService.findPlanTimeDuration(actualWorkDayCount, MdcConstant.CONFERENCE_TRAINING);
            mdcOverallEquipmentEfficiency.setConferenceTrainingDuration(conferenceTrainingDuration);
            // 其它休息时长统计(分钟)
            BigDecimal otherRestDuration = new BigDecimal("0");
            if (shiftSubIdList != null && !shiftSubIdList.isEmpty()) {
                for (String shiftSubId : shiftSubIdList) {
                    MdcOverallEquipmentEfficiency mdcOverallEquipmentEfficiency = new MdcOverallEquipmentEfficiency();
                    // 时间开动率计算
                    mdcOverallEquipmentEfficiency.setEquipmentId(equipmentId);
                    mdcOverallEquipmentEfficiency.setEquipmentName(mdcEquipment.getEquipmentName());
                    mdcOverallEquipmentEfficiency.setEquipmentModel(mdcEquipment.getEquipmentModel());
                    mdcOverallEquipmentEfficiency.setValidDate(validDate);
                    // 班次  班次时间
                    mdcOverallEquipmentEfficiency.setShiftSubId(shiftSubId);
                    BigDecimal shiftTimeCount = mdcDeviceCalendarService.computeShiftTimeCount(shiftSubId, equipmentId, validDate);
                    mdcOverallEquipmentEfficiency.setShiftTimeCount(shiftTimeCount);
                    // 计算加班时间
                    BigDecimal overtime = mdcEquipmentOvertimeService.computeOvertime(shiftSubId, equipmentId, validDate);
                    mdcOverallEquipmentEfficiency.setOvertime(overtime);
                    // 计算实际班产天数
                    BigDecimal actualWorkDayCount = mdcDeviceCalendarService.computeActualWorkDayCount(shiftSubId, equipmentId, validDate);
                    mdcOverallEquipmentEfficiency.setActualWorkDayCount(actualWorkDayCount);
                    // 月度实际班产总时间(分钟)
                    mdcOverallEquipmentEfficiency.setMonthActualWorkDayTimeCount(mdcOverallEquipmentEfficiency.getShiftTimeCount().add(overtime));
                    // 故障停机时长统计(分钟)
                    mdcOverallEquipmentEfficiency.setBreakdownDownDuration(breakdownDownDuration);
                    // 换型调试时长统计(分钟)
                    mdcOverallEquipmentEfficiency.setConversionDebugDuration(conversionDebugDuration);
                    // 物料短缺时长统计(分钟)
                    mdcOverallEquipmentEfficiency.setMaterialShortageDuration(materialShortageDuration);
                    // 计划等任务时长统计(分钟)
                    mdcOverallEquipmentEfficiency.setPlannedTaskDuration(plannedTaskDuration);
                    // 检验时长统计(分钟)
                    mdcOverallEquipmentEfficiency.setInspectDuration(inspectDuration);
                    // 其他时长统计(分钟)
                    mdcOverallEquipmentEfficiency.setOtherDuration(otherDuration);
                    // 计划保养时长统计(分钟)
                    mdcOverallEquipmentEfficiency.setPlannedMaintenanceDuration(plannedMaintenanceDuration);
                    // 会议/培训时长统计(分钟)
                    mdcOverallEquipmentEfficiency.setConferenceTrainingDuration(conferenceTrainingDuration);
                    // 其它休息时长统计(分钟)
                    mdcOverallEquipmentEfficiency.setOtherRestDuration(otherRestDuration);
                    /*
                        负荷时间(小时) = 工作日历时间 - 计划停机时间
                        工作日历时间 = 日历时间 - 法定假日 - 双休日 + 加班时间
                        计划停机时间 = 计划保养时长 + 会议/培训时长 + 会议/培训时长
                     */
                    // mdcOverallEquipmentEfficiency.getShiftTimeCount() - plannedMaintenanceDuration - conferenceTrainingDuration - otherRestDuration
                    // 负荷时间(分钟)
                    BigDecimal loadTime = mdcOverallEquipmentEfficiency.getShiftTimeCount().subtract(plannedMaintenanceDuration).subtract(conferenceTrainingDuration).subtract(otherRestDuration);
                    mdcOverallEquipmentEfficiency.setLoadTime(loadTime.divide(new BigDecimal("60"), 1, RoundingMode.HALF_UP));
                    // 时间开动率
                    BigDecimal timeActuationRate = BigDecimal.ZERO;
                    if (loadTime.compareTo(BigDecimal.ZERO) == 0) {
                        mdcOverallEquipmentEfficiency.setTimeActuationRate(BigDecimal.ZERO);
                    } else {
                        timeActuationRate = (loadTime.subtract(breakdownDownDuration).subtract(conversionDebugDuration).subtract(materialShortageDuration).subtract(plannedTaskDuration).subtract(inspectDuration).subtract(otherDuration)).divide(loadTime, 4, RoundingMode.HALF_UP);
                        mdcOverallEquipmentEfficiency.setTimeActuationRate(timeActuationRate);
                    }
                    // 加工零件数(件)  processQuantity
                    BigDecimal processQuantity = mdcPassRateService.findProcessQuantity(equipmentId, validDate);
                    mdcOverallEquipmentEfficiency.setProcessQuantity(processQuantity);
                    // 标准加工时间(分钟)
                    MdcStandardProcessDuration mdcStandardProcessDuration = mdcStandardProcessDurationService.getOne(new LambdaQueryWrapper<MdcStandardProcessDuration>().eq(MdcStandardProcessDuration::getEquipmentId, equipmentId));
                    if (mdcStandardProcessDuration != null) {
                        mdcOverallEquipmentEfficiency.setStandardProcessDuration(new BigDecimal(mdcStandardProcessDuration.getDuration()).multiply(processQuantity));
                    } else {
                        mdcOverallEquipmentEfficiency.setStandardProcessDuration(BigDecimal.ZERO);
                    }
                    // 性能开动率 = 主轴运行时间/负荷时间
                    // 查询主轴运行时间(分钟)
                    BigDecimal spindleRunDuration = mdcEquipmentStatisticalShiftInfoService.findSpindleRunDuration(equipmentId, validDate, shiftSubId);
                    if (loadTime.compareTo(BigDecimal.ZERO) != 0) {
                        mdcOverallEquipmentEfficiency.setPerformanceRate(spindleRunDuration.divide(loadTime, 4, RoundingMode.HALF_UP));
                    } else {
                        mdcOverallEquipmentEfficiency.setPerformanceRate(BigDecimal.ZERO);
                    }
                    // 废品数 unqualifiedQuantity
                    BigDecimal unqualifiedQuantity = mdcPassRateService.findUnqualifiedQuantity(equipmentId, validDate);
                    mdcOverallEquipmentEfficiency.setUnqualifiedQuantity(unqualifiedQuantity);
                    // 合格率
                    if (processQuantity.compareTo(BigDecimal.ZERO) == 0) {
                        mdcOverallEquipmentEfficiency.setPassRate(BigDecimal.ONE);
                    } else {
                        mdcOverallEquipmentEfficiency.setPassRate((processQuantity.subtract(unqualifiedQuantity)).divide(processQuantity, 4, RoundingMode.HALF_UP));
                    }
                    // 设备综合效率 = 时间开动率 × 性能开动率 × 合格品率
                    mdcOverallEquipmentEfficiency.setOverallEquipmentEfficiency(timeActuationRate.multiply(mdcOverallEquipmentEfficiency.getPerformanceRate()).multiply(mdcOverallEquipmentEfficiency.getPassRate()));
                    if (mdcOverallEquipmentEfficiency.getOverallEquipmentEfficiency().compareTo(BigDecimal.ZERO) == 0) {
                        mdcOverallEquipmentEfficiency.setOverallEquipmentEfficiency(BigDecimal.ONE);
                    }
                    result.add(mdcOverallEquipmentEfficiency);
                }
            BigDecimal otherRestDuration = mdcPlanCloseService.findPlanTimeDuration(actualWorkDayCount, MdcConstant.OTHER_REST);
            mdcOverallEquipmentEfficiency.setOtherRestDuration(otherRestDuration);
            /*
                负荷时间(小时) = 工作日历时间 - 计划停机时间
                工作日历时间 = 日历时间 - 法定假日 - 双休日 + 加班时间
                计划停机时间 = 计划保养时长 + 会议/培训时长 + 会议/培训时长
             */
            // mdcOverallEquipmentEfficiency.getShiftTimeCount() - plannedMaintenanceDuration - conferenceTrainingDuration - otherRestDuration
            // 负荷时间(分钟)
            BigDecimal loadTime = mdcOverallEquipmentEfficiency.getShiftTimeCount().subtract(plannedMaintenanceDuration).subtract(conferenceTrainingDuration).subtract(otherRestDuration);
            mdcOverallEquipmentEfficiency.setLoadTime(loadTime.divide(new BigDecimal("60"), 1, RoundingMode.HALF_UP));
            // 时间开动率
            BigDecimal timeActuationRate = BigDecimal.ZERO;
            if (loadTime.compareTo(BigDecimal.ZERO) == 0) {
                mdcOverallEquipmentEfficiency.setTimeActuationRate(BigDecimal.ZERO);
            } else {
                timeActuationRate = (loadTime.subtract(breakdownDownDuration).subtract(conversionDebugDuration).subtract(materialShortageDuration).subtract(plannedTaskDuration).subtract(inspectDuration).subtract(otherDuration)).divide(loadTime, 4, RoundingMode.HALF_UP);
                mdcOverallEquipmentEfficiency.setTimeActuationRate(timeActuationRate);
            }
            // 加工零件数(件)  processQuantity
            BigDecimal processQuantity = mdcPassRateService.findProcessQuantity(equipmentId, validDate);
            mdcOverallEquipmentEfficiency.setProcessQuantity(processQuantity);
            // 标准加工时间(分钟)
            MdcStandardProcessDuration mdcStandardProcessDuration = mdcStandardProcessDurationService.getOne(new LambdaQueryWrapper<MdcStandardProcessDuration>().eq(MdcStandardProcessDuration::getEquipmentId, equipmentId));
            if (mdcStandardProcessDuration != null) {
                mdcOverallEquipmentEfficiency.setStandardProcessDuration(new BigDecimal(mdcStandardProcessDuration.getDuration()).multiply(processQuantity));
            } else {
                mdcOverallEquipmentEfficiency.setStandardProcessDuration(BigDecimal.ZERO);
            }
            // 性能开动率 = 主轴运行时间/负荷时间
            // 查询主轴运行时间(分钟)
            BigDecimal spindleRunDuration = mdcEquipmentStatisticalShiftInfoService.findSpindleRunDuration(equipmentId, validDate);
            if (loadTime.compareTo(BigDecimal.ZERO) != 0) {
                mdcOverallEquipmentEfficiency.setPerformanceRate(spindleRunDuration.divide(loadTime, 4, RoundingMode.HALF_UP));
            } else {
                mdcOverallEquipmentEfficiency.setPerformanceRate(BigDecimal.ZERO);
            }
            // 废品数 unqualifiedQuantity
            BigDecimal unqualifiedQuantity = mdcPassRateService.findUnqualifiedQuantity(equipmentId, validDate);
            mdcOverallEquipmentEfficiency.setUnqualifiedQuantity(unqualifiedQuantity);
            // 合格率
            if (processQuantity.compareTo(BigDecimal.ZERO) == 0) {
                mdcOverallEquipmentEfficiency.setPassRate(BigDecimal.ONE);
            } else {
                mdcOverallEquipmentEfficiency.setPassRate((processQuantity.subtract(unqualifiedQuantity)).divide(processQuantity, 4, RoundingMode.HALF_UP));
            }
            // 设备综合效率 = 时间开动率 × 性能开动率 × 合格品率
            mdcOverallEquipmentEfficiency.setOverallEquipmentEfficiency(timeActuationRate.multiply(mdcOverallEquipmentEfficiency.getPerformanceRate()).multiply(mdcOverallEquipmentEfficiency.getPassRate()));
            if (mdcOverallEquipmentEfficiency.getOverallEquipmentEfficiency().compareTo(BigDecimal.ZERO) == 0) {
                mdcOverallEquipmentEfficiency.setOverallEquipmentEfficiency(BigDecimal.ONE);
            }
            result.add(mdcOverallEquipmentEfficiency);
        }
        super.saveBatch(result);
    }
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcPlanCloseServiceImpl.java
@@ -1,11 +1,16 @@
package org.jeecg.modules.mdc.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.mdc.entity.MdcPlanClose;
import org.jeecg.modules.mdc.mapper.MdcPlanCloseMapper;
import org.jeecg.modules.mdc.service.IMdcPlanCloseService;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
/**
@@ -17,4 +22,27 @@
@Service
public class MdcPlanCloseServiceImpl extends ServiceImpl<MdcPlanCloseMapper, MdcPlanClose> implements IMdcPlanCloseService {
    @Override
    public BigDecimal findPlanTimeDuration(BigDecimal actualWorkDayCount, String planCloseType) {
        BigDecimal result = new BigDecimal("0");
        List<MdcPlanClose> mdcPlanCloses = this.baseMapper.selectList(new LambdaQueryWrapper<MdcPlanClose>().in(MdcPlanClose::getPlanCloseType, Collections.singletonList(planCloseType)));
        if (mdcPlanCloses != null && !mdcPlanCloses.isEmpty()) {
            for (MdcPlanClose mdcPlanClose : mdcPlanCloses) {
                switch (mdcPlanClose.getPlanCloseTimeType()) {
                    case "天":
                        result = result.add(actualWorkDayCount.multiply(new BigDecimal(mdcPlanClose.getPlanCloseTimeLong())));
                        break;
                    case "周":
                        result = result.add(new BigDecimal("4").multiply(new BigDecimal(mdcPlanClose.getPlanCloseTimeLong())));
                        break;
                    case "月":
                        result = result.add(new BigDecimal(mdcPlanClose.getPlanCloseTimeLong()));
                        break;
                    default:
                        break;
                }
            }
        }
        return result;
    }
}