zhangherong
2025-03-06 30b79b62791127b3c432ab499bfda14b97703566
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
@@ -15,6 +15,7 @@
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.service.IMdcProductionService;
import org.jeecg.modules.system.service.ISysDepartService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -53,6 +54,9 @@
    @Resource
    private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService;
    @Resource
    private IMdcEquipmentStatisticalInfoService mdcEquipmentStatisticalInfoService;
    /**
     * 利用率报表
@@ -100,15 +104,15 @@
        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
            result.setMdcEfficiencyList(listDtos);
        } else {
            if (StringUtils.isNotEmpty(vo.getEquipmentType())) {
                List<String> equipmentList = mdcEquipmentService.listEquipmentId(vo.getEquipmentType(), vo.getEquipmentIdList());
                if (equipmentList != null && !equipmentList.isEmpty()) {
                    vo.setEquipmentIdList(equipmentList);
                } else {
                    result.setMdcEfficiencyList(listDtos);
                    return result;
                }
            List<String> equipmentIdList = mdcEquipmentService.listEquipmentId(vo);
            if (equipmentIdList != null && !equipmentIdList.isEmpty()) {
                vo.setEquipmentIdList(equipmentIdList);
            } else {
                result.setMdcEfficiencyList(listDtos);
                return result;
            }
            // 查询利用率数据
            List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo);
            // 封装结果
@@ -123,6 +127,7 @@
                    mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
                    mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
                    mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
                    mdcEfficiencyListDto.setEquipmentModel(mdcEquDepDto.getEquipmentModel());
                    switch (mdcEquDepDto.getOrgType()) {
                        case "1":
                            mdcEfficiencyListDto.setLevel1(mdcEquDepDto.getDepartName());
@@ -212,6 +217,7 @@
                    mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
                    mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
                    mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
                    mdcEfficiencyListDto.setEquipmentModel(mdcEquProDto.getEquipmentModel());
                    switch (mdcEquProDto.getOrgType()) {
                        case "1":
                            mdcEfficiencyListDto.setLevel1(mdcEquProDto.getProductionName());
@@ -448,14 +454,13 @@
        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
            result.setMdcEfficiencyList(listDtos);
        } else {
            if (StringUtils.isNotEmpty(vo.getEquipmentType())) {
                List<String> equipmentList = mdcEquipmentService.listEquipmentId(vo.getEquipmentType(), vo.getEquipmentIdList());
                if (equipmentList != null && !equipmentList.isEmpty()) {
                    vo.setEquipmentIdList(equipmentList);
                } else {
                    result.setMdcEfficiencyList(listDtos);
                    return result;
                }
            List<String> equipmentIdList = mdcEquipmentService.listEquipmentId(vo);
            if (equipmentIdList != null && !equipmentIdList.isEmpty()) {
                vo.setEquipmentIdList(equipmentIdList);
            } else {
                result.setMdcEfficiencyList(listDtos);
                return result;
            }
            // 查询利用率数据
            List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyPOList(vo);
@@ -472,6 +477,7 @@
                    mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
                    mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
                    mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
                    mdcEfficiencyListDto.setEquipmentModel(mdcEquDepDto.getEquipmentModel());
                    switch (mdcEquDepDto.getOrgType()) {
                        case "1":
                            mdcEfficiencyListDto.setLevel1(mdcEquDepDto.getDepartName());
@@ -561,6 +567,7 @@
                    mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
                    mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
                    mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
                    mdcEfficiencyListDto.setEquipmentModel(mdcEquProDto.getEquipmentModel());
                    switch (mdcEquProDto.getOrgType()) {
                        case "1":
                            mdcEfficiencyListDto.setLevel1(mdcEquProDto.getProductionName());
@@ -797,15 +804,15 @@
        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
            result.setMdcEfficiencyList(listDtos);
        } else {
            if (StringUtils.isNotEmpty(vo.getEquipmentType())) {
                List<String> equipmentList = mdcEquipmentService.listEquipmentId(vo.getEquipmentType(), vo.getEquipmentIdList());
                if (equipmentList != null && !equipmentList.isEmpty()) {
                    vo.setEquipmentIdList(equipmentList);
                } else {
                    result.setMdcEfficiencyList(listDtos);
                    return result;
                }
            List<String> equipmentIdList = mdcEquipmentService.listEquipmentIdShift(vo);
            if (equipmentIdList != null && !equipmentIdList.isEmpty()) {
                vo.setEquipmentIdList(equipmentIdList);
            } else {
                result.setMdcEfficiencyList(listDtos);
                return result;
            }
            // 班次利用率数据
            List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList = mdcEfficiencyReportMapper.efficiencyShiftSumList(vo);
@@ -842,6 +849,7 @@
                    mdcEfficiencyShiftListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
                    mdcEfficiencyShiftListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
                    mdcEfficiencyShiftListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
                    mdcEfficiencyShiftListDto.setEquipmentModel(mdcEquDepDto.getEquipmentModel());
                    mdcEfficiencyShiftListDto.setShiftSubName(shiftSubName);
                    switch (mdcEquDepDto.getOrgType()) {
                        case "1":
@@ -953,6 +961,7 @@
                    mdcEfficiencyShiftListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
                    mdcEfficiencyShiftListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
                    mdcEfficiencyShiftListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
                    mdcEfficiencyShiftListDto.setEquipmentModel(mdcEquProDto.getEquipmentModel());
                    mdcEfficiencyShiftListDto.setShiftSubName(shiftSubName);
                    switch (mdcEquProDto.getOrgType()) {
                        case "1":
@@ -1160,8 +1169,11 @@
                    mdcEfficiencyShiftResultDto.setCloseLong(equipmentStatisticalShiftInfo.getCloseLong());
                    mdcEfficiencyShiftResultDto.setOpenLong(equipmentStatisticalShiftInfo.getOpenLong());
                    mdcEfficiencyShiftResultDto.setWaitLong(equipmentStatisticalShiftInfo.getWaitLong());
                    mdcEfficiencyShiftResultDto.setOpenRate(equipmentStatisticalShiftInfo.getOpenLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, RoundingMode.HALF_UP));
                    if (equipmentStatisticalShiftInfo.getTotalLong().compareTo(BigDecimal.ZERO) == 0) {
                        mdcEfficiencyShiftResultDto.setOpenRate(BigDecimal.ZERO);
                    } else {
                        mdcEfficiencyShiftResultDto.setOpenRate(equipmentStatisticalShiftInfo.getOpenLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, RoundingMode.HALF_UP));
                    }
                    long rate = mdcEfficiencyShiftResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
                    for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                        if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
@@ -1332,6 +1344,10 @@
        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
            return result;
        }
        vo.setDeviceCategoryList(Arrays.asList(vo.getDeviceCategory().split(",")));
        vo.setDeviceLevelList(Arrays.asList(vo.getDeviceLevel().split(",")));
        vo.setDriveTypeList(Arrays.asList(vo.getDriveType().split(",")));
        vo.setEquipmentTypeList(Arrays.asList(vo.getEquipmentType().split(",")));
        // 查询原始数据
        List<MdcComAnaDto> resultDtos = mdcEfficiencyReportMapper.comparativeAnalysis(vo);
@@ -1588,6 +1604,17 @@
        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
            result.setMdcEfficiencyList(listDtos);
        } else {
            MdcEfficiencyReportQueryVo vo1 = new MdcEfficiencyReportQueryVo();
            BeanUtils.copyProperties(vo, vo1);
            List<String> equipmentIdList = mdcEquipmentService.listEquipmentId(vo1);
            if (equipmentIdList != null && !equipmentIdList.isEmpty()) {
                vo.setEquipmentIdList(equipmentIdList);
            } else {
                result.setMdcEfficiencyList(listDtos);
                return result;
            }
            // 利用率等级
            List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
@@ -1680,6 +1707,16 @@
        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
            result.setMdcEfficiencyList(listDtos);
        } else {
            MdcEfficiencyReportQueryVo vo1 = new MdcEfficiencyReportQueryVo();
            BeanUtils.copyProperties(vo, vo1);
            List<String> equipmentIdList = mdcEquipmentService.listEquipmentId(vo1);
            if (equipmentIdList != null && !equipmentIdList.isEmpty()) {
                vo.setEquipmentIdList(equipmentIdList);
            } else {
                result.setMdcEfficiencyList(listDtos);
                return result;
            }
            // 利用率等级
            List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
            if ("2".equals(vo.getTypeTree())) {
@@ -1694,10 +1731,11 @@
                    List<MdcUtilizationResultDto> list = new ArrayList<>();
                    for (String date : dateList) {
                        Date startTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
                        Date endTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
                        endTime = DateUtils.addDays(endTime, 1);
                        list.add(this.utilizationRate(mdcEquDepDto.getEquipmentId(), mdcEquDepDto.getEquipmentName(), mdcEquDepDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList));
//                        Date startTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
//                        Date endTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
//                        endTime = DateUtils.addDays(endTime, 1);
//                        list.add(this.utilizationRate(mdcEquDepDto.getEquipmentId(), mdcEquDepDto.getEquipmentName(), mdcEquDepDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList));
                        list.add(this.utilizationRateTrend(mdcEquDepDto.getEquipmentId(), mdcEquDepDto.getEquipmentName(), mdcEquDepDto.getEquipmentType(), date, mdcUtilizationRateList));
                    }
                    mdcEfficiencyListDto.setDataList(list);
                    listDtos.add(mdcEfficiencyListDto);
@@ -1714,10 +1752,7 @@
                    mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
                    List<MdcUtilizationResultDto> list = new ArrayList<>();
                    for (String date : dateList) {
                        Date startTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
                        Date endTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
                        endTime = DateUtils.addDays(endTime, 1);
                        list.add(this.utilizationRate(mdcEquProDto.getEquipmentId(), mdcEquProDto.getEquipmentName(), mdcEquProDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList));
                        list.add(this.utilizationRateTrend(mdcEquProDto.getEquipmentId(), mdcEquProDto.getEquipmentName(), mdcEquProDto.getEquipmentType(), date, mdcUtilizationRateList));
                    }
                    mdcEfficiencyListDto.setDataList(list);
                    listDtos.add(mdcEfficiencyListDto);
@@ -1729,6 +1764,35 @@
        return result;
    }
    private MdcUtilizationResultDto utilizationRateTrend(String equipmentId, String equipmentName, String equipmentType, String date, List<MdcUtilizationRate> mdcUtilizationRateList) {
        MdcUtilizationResultDto dto = new MdcUtilizationResultDto();
        dto.setEquipmentId(equipmentId);
        dto.setEquipmentName(equipmentName);
        dto.setEquipmentType(equipmentType);
        dto.setTheDate(date);
        MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findMdcEquipmentStatisticalInfo(equipmentId, date);
        if (mdcEquipmentStatisticalInfo != null) {
            dto.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("86400"), 6, RoundingMode.HALF_UP));
        } else {
            dto.setUtilizationRate(new BigDecimal("0"));
        }
        long rate = dto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
        for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
            if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                dto.setColor(mdcUtilizationRate.getRateParameterColor());
            }
        }
        if (StringUtils.isBlank(dto.getColor())) {
            dto.setColor(mdcUtilizationRateList.get(mdcUtilizationRateList.size() - 1).getRateParameterColor());
        }
        return dto;
    }
    @Override
    public List<BigDecimal> getEfficiencyRate(String equipmentId, String date) {
        return mdcEfficiencyReportMapper.getEfficiencyRate(equipmentId, date);
    }
    private MdcUtilizationResultDto utilizationRate(String equipmentId, String equipmentName, String equipmentType, Date startTime, Date endTime, String date, List<MdcUtilizationRate> mdcUtilizationRateList) {
        MdcUtilizationResultDto dto = new MdcUtilizationResultDto();
        dto.setEquipmentId(equipmentId);