hyingbo
2025-06-04 9db215895121e5bedee61cfe1ce1cca5cf8888f9
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcBoardServiceImpl.java
@@ -2,24 +2,34 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.sun.org.apache.bcel.internal.generic.NEW;
import org.jeecg.common.api.CommonAPI;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.util.TranslateDictTextUtils;
import org.jeecg.modules.eam.constant.EquipmentMaintenanceStatus;
import org.jeecg.modules.eam.constant.EquipmentOperationTagEnum;
import org.jeecg.modules.eam.constant.EquipmentRepairStatus;
import org.jeecg.modules.eam.constant.MaintenanceCategoryEnum;
import org.jeecg.modules.mdc.constant.MdcConstant;
import org.jeecg.modules.mdc.entity.Equipment;
import org.jeecg.modules.mdc.entity.MdcEquipment;
import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo;
import org.jeecg.modules.mdc.dto.EamEquipmentExtendDto;
import org.jeecg.modules.mdc.entity.*;
import org.jeecg.modules.mdc.mapper.MdcBoardMapper;
import org.jeecg.modules.mdc.service.*;
import org.jeecg.modules.mdc.util.DateUtils;
import org.jeecg.modules.mdc.vo.MdcBoardEquRealTImeVo;
import org.jeecg.modules.mdc.vo.MdcBoardRateVo;
import org.jeecg.modules.mdc.vo.MdcEquipmentStatusVo;
import org.jeecg.modules.mdcJc.service.IMdcJcRcJobreportService;
import org.jeecg.modules.system.entity.MdcProduction;
import org.jeecg.modules.system.service.IMdcProductionService;
import org.joda.time.LocalDateTime;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@@ -49,6 +59,21 @@
    @Resource
    private IMdcJcRcJobreportService mdcJcRcJobreportService;
    @Resource
    private CommonAPI commonAPI;
    @Resource
    private IEquipmentLogService equipmentLogService;
    @Resource
    private IEquipmentWorkLineService equipmentWorkLineService;
    @Resource
    private MdcBoardMapper mdcBoardMapper;
    @Resource
    private IMdcDeviceCalendarService mdcDeviceCalendarService;
    /**
     * 设备状态
     */
@@ -58,10 +83,6 @@
        if (StringUtils.isBlank(productionId)) {
            MdcProduction mdcProduction = mdcProductionService.getOne(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getParentId, ""));
            productionId = mdcProduction.getId();
            result.put("productionName", mdcProduction.getProductionName());
        } else {
            MdcProduction mdcProduction = mdcProductionService.getById(productionId);
            result.put("productionName", mdcProduction.getProductionName());
        }
        List<String> proIds = mdcProductionService.findChildByProId(productionId);
        if (proIds == null || proIds.isEmpty()) {
@@ -132,29 +153,50 @@
        LocalDate now = LocalDate.now();
        Date startDate = DateUtils.toDate(now.plusDays(-15).toString(), DateUtils.STR_DATE);
        Date endDate = DateUtils.toDate(now.plusDays(-1).toString(), DateUtils.STR_DATE);
        String start = DateUtils.format(startDate, DateUtils.STR_DATE);
        String end = DateUtils.format(endDate, DateUtils.STR_DATE);
        List<String> dateList = DateUtils.getDatesStringList(startDate, endDate);
        List<String> dates = new ArrayList<>();
        List<MdcBoardRateVo> dataList = new ArrayList<>();
        for (String date : dateList) {
            MdcBoardRateVo mdcBoardRateVo = new MdcBoardRateVo();
            String s = date.substring(5, 10);
            dates.add(s);
            mdcBoardRateVo.setDate(s);
            // TEEP 开机率 开动率
            MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findByEquipmentAndDate(equipmentIdList, date.replaceAll("-", ""));
            mdcBoardRateVo.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP));
            mdcBoardRateVo.setOpenRate(mdcEquipmentStatisticalInfo.getOpenLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP));
            if (mdcEquipmentStatisticalInfo.getOpenLong().compareTo(BigDecimal.ZERO) > 0) {
                mdcBoardRateVo.setStartRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(mdcEquipmentStatisticalInfo.getOpenLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
            }
            // OEE
            BigDecimal oee = mdcOeeInfoService.findByEquIdsAndDate(equipmentIdList, date);
            if (oee != null) {
                mdcBoardRateVo.setOee(oee.setScale(2, RoundingMode.HALF_UP));
            }
            dataList.add(mdcBoardRateVo);
        }
        List<String> dates = dateList.stream().map(date -> date.substring(5, 10)).collect(Collectors.toList());
        result.put("dateList", dates);
        Map<String, MdcBoardRateVo> statisticsMap = new LinkedHashMap<>();
        dateList.forEach(date -> {
            statisticsMap.put(date, new MdcBoardRateVo(date.substring(5, 10)));
        });
        // TEEP 开机率 开动率
        List<MdcEquipmentStatisticalInfo> mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findByEquipmentAndDate(equipmentIdList, start.replaceAll("-", ""), end.replaceAll("-", ""));
        if (mdcEquipmentStatisticalInfo != null && !mdcEquipmentStatisticalInfo.isEmpty()) {
            mdcEquipmentStatisticalInfo.forEach(equipmentStatisticalInfo -> {
                String date = DateUtils.format(DateUtils.toDate(equipmentStatisticalInfo.getTheDate(), DateUtils.STRDATE), DateUtils.STR_DATE);
                if (statisticsMap.containsKey(date)) {
                    MdcBoardRateVo mdcBoardRateVo = statisticsMap.get(date);
                    if (equipmentStatisticalInfo.getProcessLong().compareTo(BigDecimal.ZERO) > 0) {
                        mdcBoardRateVo.setUtilizationRate(equipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP));
                    }
                    if (equipmentStatisticalInfo.getOpenLong().compareTo(BigDecimal.ZERO) > 0) {
                        mdcBoardRateVo.setOpenRate(equipmentStatisticalInfo.getOpenLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP));
                    }
                    if (equipmentStatisticalInfo.getOpenLong().compareTo(BigDecimal.ZERO) > 0) {
                        mdcBoardRateVo.setStartRate(equipmentStatisticalInfo.getProcessLong().multiply(new BigDecimal("100")).divide(equipmentStatisticalInfo.getOpenLong(), 2, RoundingMode.HALF_UP));
                    }
                    statisticsMap.put(date, mdcBoardRateVo);
                }
            });
        }
        // OEE
        List<MdcOeeInfo> oeeInfo = mdcOeeInfoService.findByEquIdsAndDate(equipmentIdList, start, end);
        if (oeeInfo != null && !oeeInfo.isEmpty()) {
            oeeInfo.forEach(mdcOeeInfo -> {
                if (statisticsMap.containsKey(mdcOeeInfo.getTheDate())) {
                    MdcBoardRateVo mdcBoardRateVo = statisticsMap.get(mdcOeeInfo.getTheDate());
                    if (mdcOeeInfo.getOee().compareTo(BigDecimal.ZERO) > 0) {
                        mdcBoardRateVo.setOee(mdcOeeInfo.getOee().setScale(2, RoundingMode.HALF_UP));
                    }
                    statisticsMap.put(mdcOeeInfo.getTheDate(), mdcBoardRateVo);
                }
            });
        }
        List<MdcBoardRateVo> dataList = new ArrayList<>(statisticsMap.values());
        result.put("dataList", dataList);
        return result;
    }
@@ -180,25 +222,44 @@
        LocalDate now = LocalDate.now();
        Date startDate = DateUtils.toDate(now.plusDays(-7).toString(), DateUtils.STR_DATE);
        Date endDate = DateUtils.toDate(now.plusDays(-1).toString(), DateUtils.STR_DATE);
        String start = DateUtils.format(startDate, DateUtils.STR_DATE);
        String end = DateUtils.format(endDate, DateUtils.STR_DATE);
        List<String> dayBetween = DateUtils.getDatesStringList(startDate, endDate);
        List<String> dateList = new ArrayList<>();
        List<MdcBoardRateVo> dataList = new ArrayList<>();
        for (String date : dayBetween) {
            MdcBoardRateVo mdcBoardRateVo = new MdcBoardRateVo();
            String s = date.substring(5, 10);
            dateList.add(s);
            mdcBoardRateVo.setDate(s);
            // TEEP
            MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findByEquIdAndDate(equipmentId, date.replaceAll("-", ""));
            mdcBoardRateVo.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP));
            // OEE
            BigDecimal oee = mdcOeeInfoService.findByEquIdAndDate(equipmentId, date);
            if (oee != null) {
                mdcBoardRateVo.setOee(oee.setScale(2, RoundingMode.HALF_UP));
            }
            dataList.add(mdcBoardRateVo);
        }
        List<String> dateList = dayBetween.stream().map(date -> date.substring(5, 10)).collect(Collectors.toList());
        result.put("dateList", dateList);
        Map<String, MdcBoardRateVo> statisticsMap = new LinkedHashMap<>();
        dayBetween.forEach(date -> {
            statisticsMap.put(date, new MdcBoardRateVo(date.substring(5, 10)));
        });
        // TEEP
        List<MdcEquipmentStatisticalInfo> mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findByEquIdAndDate(equipmentId, start.replaceAll("-", ""), end.replaceAll("-", ""));
        if (mdcEquipmentStatisticalInfo != null && !mdcEquipmentStatisticalInfo.isEmpty()) {
            mdcEquipmentStatisticalInfo.forEach(equipmentStatisticalInfo -> {
                String date = DateUtils.format(DateUtils.toDate(equipmentStatisticalInfo.getTheDate(), DateUtils.STRDATE), DateUtils.STR_DATE);
                if (statisticsMap.containsKey(date)) {
                    MdcBoardRateVo mdcBoardRateVo = statisticsMap.get(date);
                    if (equipmentStatisticalInfo.getProcessLong().compareTo(BigDecimal.ZERO) > 0) {
                        mdcBoardRateVo.setUtilizationRate(equipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP));
                    }
                    statisticsMap.put(date, mdcBoardRateVo);
                }
            });
        }
        // OEE
        List<MdcOeeInfo> oeeInfo = mdcOeeInfoService.findByEquIdAndDate(equipmentId, start, end);
        if (oeeInfo != null && !oeeInfo.isEmpty()) {
            oeeInfo.forEach(mdcOeeInfo -> {
                if (statisticsMap.containsKey(mdcOeeInfo.getTheDate())) {
                    MdcBoardRateVo mdcBoardRateVo = statisticsMap.get(mdcOeeInfo.getTheDate());
                    if (mdcOeeInfo.getOee().compareTo(BigDecimal.ZERO) > 0) {
                        mdcBoardRateVo.setOee(mdcOeeInfo.getOee().setScale(2, RoundingMode.HALF_UP));
                    }
                    statisticsMap.put(mdcOeeInfo.getTheDate(), mdcBoardRateVo);
                }
            });
        }
        List<MdcBoardRateVo> dataList = new ArrayList<>(statisticsMap.values());
        result.put("dataList", dataList);
        return result;
    }
@@ -242,24 +303,106 @@
        return result;
    }
//    /**
//     * 设备产品合格率
//     */
//    @Override
//    public Map<String, Object> passRate(String equipmentId) {
//        Map<String, Object> result = new HashMap<>();
//        LocalDate now = LocalDate.now();
//        Date start = DateUtils.toDate(now.plusMonths(-6).toString(), DateUtils.STR_DATE);
//        Date end = DateUtils.toDate(now.plusMonths(-1).toString(), DateUtils.STR_DATE);
//        List<String> monthBetween = DateUtils.getMonthBetween(start, end);
//        List<String> dateList = new ArrayList<>();
//        for (String month : monthBetween) {
//            String name = month.substring(month.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "月";
//            dateList.add(name);
//            MdcBoardRateVo mdcBoardRateVo = new MdcBoardRateVo();
//            // 合格率
//
//        }
//        return result;
//    }
    /**
     * 设备实时信息
     */
    @Override
    public MdcBoardEquRealTImeVo equipmentRealTimeDetail(String equipmentId) {
        MdcBoardEquRealTImeVo mdcBoardEquRealTImeVo = mdcEquipmentService.getByEquipmentId(equipmentId);
        if (mdcBoardEquRealTImeVo == null) {
            return new MdcBoardEquRealTImeVo();
        }
        //设备管理员翻译
        String realName = commonAPI.translateDictFromTable("sys_user", "realname", "username", mdcBoardEquRealTImeVo.getEquipmentManager());
        mdcBoardEquRealTImeVo.setEquipmentManager(realName);
        mdcBoardEquRealTImeVo.setAlarm("无");
        if (mdcBoardEquRealTImeVo.getOperation() != null) {
            switch (mdcBoardEquRealTImeVo.getOperation()) {
                case 1:
                case 2:
                    mdcBoardEquRealTImeVo.setOporationDict("待机");
                    break;
                case 3:
                    mdcBoardEquRealTImeVo.setOporationDict("运行");
                    break;
                case 22:
                    mdcBoardEquRealTImeVo.setOporationDict("报警");
                    // 查询报警号
                    EquipmentLog equipmentLog = equipmentLogService.findAlarmByEquId(equipmentId);
                    if (equipmentLog != null && StringUtils.isNotBlank(equipmentLog.getAlarm())) {
                        mdcBoardEquRealTImeVo.setAlarm(equipmentLog.getAlarm());
                    }
                    break;
                default:
                    mdcBoardEquRealTImeVo.setOporationDict("关机");
                    break;
            }
        } else {
            mdcBoardEquRealTImeVo.setOporationDict("关机");
            mdcBoardEquRealTImeVo.setOperation(0);
        }
        //设备运行数据
        Map<String, Object> mapData = equipmentWorkLineService.getDataList(mdcBoardEquRealTImeVo.getSaveTableName());
        if (mapData != null) {
            if (mapData.containsKey("Sequencenumber")) {
                Object object = mapData.get("Sequencenumber");
                mdcBoardEquRealTImeVo.setSequenceNumber(object == null || "关机".equals(mdcBoardEquRealTImeVo.getOporationDict()) ? "" : object.toString());
            }
            if (mapData.containsKey("spindlespeed")) {
                Object object = mapData.get("spindlespeed");
                mdcBoardEquRealTImeVo.setSpindleSpeed(object == null || "关机".equals(mdcBoardEquRealTImeVo.getOporationDict()) ? "" : object.toString());
            }
            if (mapData.containsKey("spindleload")) {
                Object object = mapData.get("spindleload");
                mdcBoardEquRealTImeVo.setSpindleLoad(object == null || "关机".equals(mdcBoardEquRealTImeVo.getOporationDict()) ? "" : object.toString());
            }
            if (mapData.containsKey("spindlebeilv")) {
                Object object = mapData.get("spindlebeilv");
                mdcBoardEquRealTImeVo.setSpindlebeilv(object == null || "关机".equals(mdcBoardEquRealTImeVo.getOporationDict()) ? "" : object.toString());
            }
            if (mapData.containsKey("feedbeilv")) {
                Object object = mapData.get("feedbeilv");
                mdcBoardEquRealTImeVo.setFeedbeilv(object == null || "关机".equals(mdcBoardEquRealTImeVo.getOporationDict()) ? "" : object.toString());
            }
        }
        // 维保状态
        EamEquipmentExtendDto eamEquipmentExtendDto = mdcBoardMapper.findEquExtend(equipmentId);
        mdcBoardEquRealTImeVo.setMaintenanceStatus("正常");
        mdcBoardEquRealTImeVo.setReportRepairStatus("无");
        if (eamEquipmentExtendDto != null) {
            if (!EquipmentRepairStatus.NORMAL.name().equals(eamEquipmentExtendDto.getRepairStatus())) {
                mdcBoardEquRealTImeVo.setMaintenanceStatus("维修");
            } else {
                if (EquipmentMaintenanceStatus.UNDER_INSPECTION.name().equals(eamEquipmentExtendDto.getMaintenanceStatus()) || EquipmentMaintenanceStatus.INSPECTION_CONFIRM.name().equals(eamEquipmentExtendDto.getMaintenanceStatus())) {
                    mdcBoardEquRealTImeVo.setMaintenanceStatus("点检");
                } else if (EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name().equals(eamEquipmentExtendDto.getMaintenanceStatus()) || EquipmentMaintenanceStatus.WAIT_CONFIRM.name().equals(eamEquipmentExtendDto.getMaintenanceStatus())) {
                    mdcBoardEquRealTImeVo.setMaintenanceStatus("周报");
                }
            }
        }
        // 报修情况
        String repairStatus =  mdcBoardMapper.findReportRepairStatus(equipmentId);
        if (repairStatus != null) {
            String reportRepair = commonAPI.translateDict("report_repair_status", repairStatus);
            mdcBoardEquRealTImeVo.setReportRepairStatus(reportRepair);
        } else {
            mdcBoardEquRealTImeVo.setReportRepairStatus("无");
        }
        // 班次
        String shift = mdcDeviceCalendarService.findShiftByEquId(equipmentId);
        if (StringUtils.isNotBlank(shift)) {
            mdcBoardEquRealTImeVo.setShift(shift);
        }
        // 点检  保养
        Date nextInspection = mdcBoardMapper.findInsOrMain(equipmentId, MaintenanceCategoryEnum.POINT_INSPECTION.name());
        if (nextInspection != null) {
            mdcBoardEquRealTImeVo.setNextInspection(nextInspection);
        }
        Date nextMaintenance = mdcBoardMapper.findInsOrMain(equipmentId, MaintenanceCategoryEnum.WEEK_MAINTENANCE.name());
        if (nextMaintenance != null) {
            mdcBoardEquRealTImeVo.setNextMaintenance(nextMaintenance);
        }
        return mdcBoardEquRealTImeVo;
    }
}