package org.jeecg.modules.mdc.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.DictModel; import org.jeecg.modules.mdc.dto.*; import org.jeecg.modules.mdc.entity.*; import org.jeecg.modules.mdc.mapper.MdcEfficiencyReportMapper; import org.jeecg.modules.mdc.service.*; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.mdc.vo.MdcUtilizationRateDto; import org.jeecg.modules.mdc.vo.*; import org.jeecg.modules.system.entity.MdcProduction; import org.jeecg.modules.system.entity.SysDepart; import org.jeecg.modules.system.service.IMdcProductionService; import org.jeecg.modules.system.service.ISysDepartService; import org.jeecg.modules.system.service.ISysDictService; import org.jeecg.modules.system.vo.MdcProOptionsVo; 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.time.temporal.ChronoUnit; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; /** * @author: LiuS * @create: 2023-06-16 09:52 */ @Service public class MdcEfficiencyReportServiceImpl implements MdcEfficiencyReportService { @Resource private IMdcEquipmentService mdcEquipmentService; @Resource private MdcEfficiencyReportMapper mdcEfficiencyReportMapper; @Resource private IMdcUtilizationRateService mdcUtilizationRateService; @Resource private ISysDepartService sysDepartService; @Resource private IMdcProductionService mdcProductionService; @Resource private IMdcShiftSubService mdcShiftSubService; @Resource private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService; @Resource private ISysDictService sysDictService; /** * 利用率报表 * * @param userId * @param vo * @return */ @Override public MdcEfficiencyVo efficiencyList(String userId, MdcEfficiencyReportQueryVo vo) { MdcEfficiencyVo result = new MdcEfficiencyVo(); List listDtos = new ArrayList<>(); List equipmentIds = new ArrayList<>(); if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); } } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { // 单台设备信息 vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId())); } else { // 查询用户拥有的所有设备信息 if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); } } if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { vo.setEquipmentIdList(equipmentIds); } List dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime())); result.setDates(dates); // 利用率等级 List mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl"); if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { result.setMdcEfficiencyList(listDtos); } else { List equipmentIdList = mdcEquipmentService.listEquipmentId(vo); if (equipmentIdList != null && !equipmentIdList.isEmpty()) { vo.setEquipmentIdList(equipmentIdList); } else { result.setMdcEfficiencyList(listDtos); return result; } // 查询利用率数据 List efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo); // 封装结果 if ("2".equals(vo.getTypeTree())) { // 部门层级 List equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList()); // 查询所有部门信息 List departList = sysDepartService.list(new LambdaQueryWrapper().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartOrder)); for (MdcEquDepDto mdcEquDepDto : equipmentList) { MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto(); mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId()); mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName()); mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType()); switch (mdcEquDepDto.getOrgType()) { case "1": mdcEfficiencyListDto.setLevel1(mdcEquDepDto.getDepartName()); break; case "2": mdcEfficiencyListDto.setLevel2(mdcEquDepDto.getDepartName()); break; case "3": mdcEfficiencyListDto.setLevel3(mdcEquDepDto.getDepartName()); break; default: } SysDepart sysDepart = departList.stream().filter(depart -> depart.getId().equals(mdcEquDepDto.getParentId())).findAny().orElse(null); if (sysDepart != null) { switch (sysDepart.getOrgType()) { case "1": mdcEfficiencyListDto.setLevel1(sysDepart.getDepartName()); break; case "2": mdcEfficiencyListDto.setLevel2(sysDepart.getDepartName()); break; case "3": mdcEfficiencyListDto.setLevel3(sysDepart.getDepartName()); break; default: } if (StringUtils.isNotEmpty(sysDepart.getParentId())) { departList.stream().filter(depart -> depart.getId().equals(sysDepart.getParentId())).findAny().ifPresent(depart1 -> { switch (depart1.getOrgType()) { case "1": mdcEfficiencyListDto.setLevel1(depart1.getDepartName()); break; case "2": mdcEfficiencyListDto.setLevel2(depart1.getDepartName()); break; case "3": mdcEfficiencyListDto.setLevel3(depart1.getDepartName()); break; default: } }); } } List list = new ArrayList<>(); MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto(); MdcEfficiencyResultDto mdcEfficiencyResultDto1 = new MdcEfficiencyResultDto(); mdcEfficiencyResultDto1.setTheDate("合计"); mdcEfficiencyResultDto.setTheDate("平均值"); for (String date : dates) { list.add(this.efficiencyRate(efficiencyList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyResultDto)); } mdcEfficiencyResultDto1.setProcessLong(mdcEfficiencyResultDto.getProcessLong()); mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate()); mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setStartRate(mdcEfficiencyResultDto.getStartRate()); mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setOpenRate(mdcEfficiencyResultDto.getOpenRate()); mdcEfficiencyResultDto1.setOpenLong(mdcEfficiencyResultDto.getOpenLong()); mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setWaitLong(mdcEfficiencyResultDto.getWaitLong()); mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong()); mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setFaultLong(mdcEfficiencyResultDto.getFaultLong()); mdcEfficiencyResultDto.setFaultLong(mdcEfficiencyResultDto.getFaultLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setFaultRate(mdcEfficiencyResultDto.getFaultRate()); mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong()); mdcEfficiencyResultDto.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); mdcEfficiencyResultDto1.setColor(mdcUtilizationRate.getRateParameterColor()); } } list.add(mdcEfficiencyResultDto1); list.add(mdcEfficiencyResultDto); mdcEfficiencyListDto.setDataList(list); listDtos.add(mdcEfficiencyListDto); } } else { // 产线层级 List equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList()); // 查询所有产线信息 List productionList = mdcProductionService.list(new LambdaQueryWrapper().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder)); for (MdcEquProDto mdcEquProDto : equipmentList) { MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto(); mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId()); mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName()); mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType()); switch (mdcEquProDto.getOrgType()) { case "1": mdcEfficiencyListDto.setLevel1(mdcEquProDto.getProductionName()); break; case "2": mdcEfficiencyListDto.setLevel2(mdcEquProDto.getProductionName()); break; case "3": mdcEfficiencyListDto.setLevel3(mdcEquProDto.getProductionName()); break; default: } MdcProduction mdcProduction = productionList.stream().filter(production -> production.getId().equals(mdcEquProDto.getParentId())).findAny().orElse(null); if (mdcProduction != null) { switch (mdcProduction.getOrgType()) { case "1": mdcEfficiencyListDto.setLevel1(mdcProduction.getProductionName()); break; case "2": mdcEfficiencyListDto.setLevel2(mdcProduction.getProductionName()); break; case "3": mdcEfficiencyListDto.setLevel3(mdcProduction.getProductionName()); break; default: } if (StringUtils.isNotEmpty(mdcProduction.getParentId())) { productionList.stream().filter(production -> production.getId().equals(mdcProduction.getParentId())).findAny().ifPresent(production1 -> { switch (production1.getOrgType()) { case "1": mdcEfficiencyListDto.setLevel1(production1.getProductionName()); break; case "2": mdcEfficiencyListDto.setLevel2(production1.getProductionName()); break; case "3": mdcEfficiencyListDto.setLevel3(production1.getProductionName()); break; default: } }); } } List list = new ArrayList<>(); MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto(); MdcEfficiencyResultDto mdcEfficiencyResultDto1 = new MdcEfficiencyResultDto(); mdcEfficiencyResultDto1.setTheDate("合计"); mdcEfficiencyResultDto.setTheDate("平均值"); for (String date : dates) { list.add(this.efficiencyRate(efficiencyList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyResultDto)); } mdcEfficiencyResultDto1.setProcessLong(mdcEfficiencyResultDto.getProcessLong()); mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate()); mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setStartRate(mdcEfficiencyResultDto.getStartRate()); mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setOpenRate(mdcEfficiencyResultDto.getOpenRate()); mdcEfficiencyResultDto1.setOpenLong(mdcEfficiencyResultDto.getOpenLong()); mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setWaitLong(mdcEfficiencyResultDto.getWaitLong()); mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong()); mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setFaultLong(mdcEfficiencyResultDto.getFaultLong()); mdcEfficiencyResultDto.setFaultLong(mdcEfficiencyResultDto.getFaultLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setFaultRate(mdcEfficiencyResultDto.getFaultRate()); mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong()); mdcEfficiencyResultDto.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); mdcEfficiencyResultDto1.setColor(mdcUtilizationRate.getRateParameterColor()); } } list.add(mdcEfficiencyResultDto1); list.add(mdcEfficiencyResultDto); mdcEfficiencyListDto.setDataList(list); listDtos.add(mdcEfficiencyListDto); } } result.setMdcEfficiencyList(listDtos); } // 添加合计值和平均值 result.getDates().add("合计"); result.getDates().add("平均值"); MdcEfficiencyListDto sum = new MdcEfficiencyListDto(); sum.setLevel1("合计"); sum.setLevel2("合计"); sum.setLevel3("合计"); sum.setEquipmentId("合计"); sum.setEquipmentName("合计"); sum.setEquipmentType("合计"); //计算合计值 sum.setDataList(this.calculateTotal(result.getMdcEfficiencyList(), mdcUtilizationRateList)); MdcEfficiencyListDto avg = new MdcEfficiencyListDto(); avg.setLevel1("平均值"); avg.setLevel2("平均值"); avg.setLevel3("平均值"); avg.setEquipmentId("平均值"); avg.setEquipmentName("平均值"); avg.setEquipmentType("平均值"); //计算平均值 avg.setDataList(this.calculateAverage(result.getMdcEfficiencyList(), mdcUtilizationRateList)); result.getMdcEfficiencyList().add(sum); result.getMdcEfficiencyList().add(avg); return result; } /** * 计算平均值 * * @param mdcEfficiencyList * @param mdcUtilizationRateList * @return */ private List calculateAverage(List mdcEfficiencyList, List mdcUtilizationRateList) { List result = new ArrayList<>(); List dataList = new ArrayList<>(); for (MdcEfficiencyListDto mdcEfficiencyListDto : mdcEfficiencyList) { dataList.addAll(mdcEfficiencyListDto.getDataList()); } dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyResultDto::getTheDate, Collectors.toList())) .forEach((theDate, mert) -> { mert.stream().reduce((a, b) -> new MdcEfficiencyResultDto( a.getTheDate(), a.getProcessLong().add(b.getProcessLong()), a.getUtilizationRate().add(b.getUtilizationRate()), a.getStartRate().add(b.getStartRate()), a.getOpenRate().add(b.getOpenRate()), a.getOpenLong().add(b.getOpenLong()), a.getWaitLong().add(b.getWaitLong()), a.getCloseLong().add(b.getCloseLong()), a.getFaultLong().add(b.getFaultLong()), a.getFaultRate().add(b.getFaultRate()), a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add); }); for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) { mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); } } } result.sort(Comparator.comparing(MdcEfficiencyResultDto::getTheDate)); return result; } /** * 计算合计值 * * @param mdcEfficiencyList * @return */ private List calculateTotal(List mdcEfficiencyList, List mdcUtilizationRateList) { List result = new ArrayList<>(); List dataList = new ArrayList<>(); for (MdcEfficiencyListDto mdcEfficiencyListDto : mdcEfficiencyList) { dataList.addAll(mdcEfficiencyListDto.getDataList()); } dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyResultDto::getTheDate, Collectors.toList())) .forEach((theDate, mert) -> { mert.stream().reduce((a, b) -> new MdcEfficiencyResultDto( a.getTheDate(), a.getProcessLong().add(b.getProcessLong()), a.getUtilizationRate().add(b.getUtilizationRate()), a.getStartRate().add(b.getStartRate()), a.getOpenRate().add(b.getOpenRate()), a.getOpenLong().add(b.getOpenLong()), a.getWaitLong().add(b.getWaitLong()), a.getCloseLong().add(b.getCloseLong()), a.getFaultLong().add(b.getFaultLong()), a.getFaultRate().add(b.getFaultRate()), a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add); }); for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) { mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); } } } result.sort(Comparator.comparing(MdcEfficiencyResultDto::getTheDate)); return result; } /** * 开机率报表 * * @param userId * @param vo * @return */ @Override public MdcEfficiencyVo efficiencyPOList(String userId, MdcEfficiencyReportQueryVo vo) { MdcEfficiencyVo result = new MdcEfficiencyVo(); List listDtos = new ArrayList<>(); List equipmentIds = new ArrayList<>(); if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); } } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { // 单台设备信息 vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId())); } else { // 查询用户拥有的所有设备信息 if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); } } if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { vo.setEquipmentIdList(equipmentIds); } List dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime())); result.setDates(dates); // 利用率等级 List mdcUtilizationRateList = mdcUtilizationRateService.listByType("kdl"); if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { result.setMdcEfficiencyList(listDtos); } else { List equipmentIdList = mdcEquipmentService.listEquipmentId(vo); if (equipmentIdList != null && !equipmentIdList.isEmpty()) { vo.setEquipmentIdList(equipmentIdList); } else { result.setMdcEfficiencyList(listDtos); return result; } // 查询利用率数据 List efficiencyList = mdcEfficiencyReportMapper.efficiencyPOList(vo); // 封装结果 if ("2".equals(vo.getTypeTree())) { // 部门层级 List equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList()); // 查询所有部门信息 List departList = sysDepartService.list(new LambdaQueryWrapper().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartOrder)); for (MdcEquDepDto mdcEquDepDto : equipmentList) { MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto(); mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId()); mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName()); mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType()); switch (mdcEquDepDto.getOrgType()) { case "1": mdcEfficiencyListDto.setLevel1(mdcEquDepDto.getDepartName()); break; case "2": mdcEfficiencyListDto.setLevel2(mdcEquDepDto.getDepartName()); break; case "3": mdcEfficiencyListDto.setLevel3(mdcEquDepDto.getDepartName()); break; default: } SysDepart sysDepart = departList.stream().filter(depart -> depart.getId().equals(mdcEquDepDto.getParentId())).findAny().orElse(null); if (sysDepart != null) { switch (sysDepart.getOrgType()) { case "1": mdcEfficiencyListDto.setLevel1(sysDepart.getDepartName()); break; case "2": mdcEfficiencyListDto.setLevel2(sysDepart.getDepartName()); break; case "3": mdcEfficiencyListDto.setLevel3(sysDepart.getDepartName()); break; default: } if (StringUtils.isNotEmpty(sysDepart.getParentId())) { departList.stream().filter(depart -> depart.getId().equals(sysDepart.getParentId())).findAny().ifPresent(depart1 -> { switch (depart1.getOrgType()) { case "1": mdcEfficiencyListDto.setLevel1(depart1.getDepartName()); break; case "2": mdcEfficiencyListDto.setLevel2(depart1.getDepartName()); break; case "3": mdcEfficiencyListDto.setLevel3(depart1.getDepartName()); break; default: } }); } } List list = new ArrayList<>(); MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto(); MdcEfficiencyResultDto mdcEfficiencyResultDto1 = new MdcEfficiencyResultDto(); mdcEfficiencyResultDto1.setTheDate("合计"); mdcEfficiencyResultDto.setTheDate("平均值"); for (String date : dates) { list.add(this.efficiencyRate(efficiencyList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyResultDto)); } mdcEfficiencyResultDto1.setProcessLong(mdcEfficiencyResultDto.getProcessLong()); mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate()); mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setStartRate(mdcEfficiencyResultDto.getStartRate()); mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setOpenRate(mdcEfficiencyResultDto.getOpenRate()); mdcEfficiencyResultDto1.setOpenLong(mdcEfficiencyResultDto.getOpenLong()); mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setWaitLong(mdcEfficiencyResultDto.getWaitLong()); mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong()); mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); mdcEfficiencyResultDto1.setColor(mdcUtilizationRate.getRateParameterColor()); } } list.add(mdcEfficiencyResultDto1); list.add(mdcEfficiencyResultDto); mdcEfficiencyListDto.setDataList(list); listDtos.add(mdcEfficiencyListDto); } } else { // 产线层级 List equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList()); // 查询所有产线信息 List productionList = mdcProductionService.list(new LambdaQueryWrapper().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder)); for (MdcEquProDto mdcEquProDto : equipmentList) { MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto(); mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId()); mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName()); mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType()); switch (mdcEquProDto.getOrgType()) { case "1": mdcEfficiencyListDto.setLevel1(mdcEquProDto.getProductionName()); break; case "2": mdcEfficiencyListDto.setLevel2(mdcEquProDto.getProductionName()); break; case "3": mdcEfficiencyListDto.setLevel3(mdcEquProDto.getProductionName()); break; default: } MdcProduction mdcProduction = productionList.stream().filter(production -> production.getId().equals(mdcEquProDto.getParentId())).findAny().orElse(null); if (mdcProduction != null) { switch (mdcProduction.getOrgType()) { case "1": mdcEfficiencyListDto.setLevel1(mdcProduction.getProductionName()); break; case "2": mdcEfficiencyListDto.setLevel2(mdcProduction.getProductionName()); break; case "3": mdcEfficiencyListDto.setLevel3(mdcProduction.getProductionName()); break; default: } if (StringUtils.isNotEmpty(mdcProduction.getParentId())) { productionList.stream().filter(production -> production.getId().equals(mdcProduction.getParentId())).findAny().ifPresent(production1 -> { switch (production1.getOrgType()) { case "1": mdcEfficiencyListDto.setLevel1(production1.getProductionName()); break; case "2": mdcEfficiencyListDto.setLevel2(production1.getProductionName()); break; case "3": mdcEfficiencyListDto.setLevel3(production1.getProductionName()); break; default: } }); } } List list = new ArrayList<>(); MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto(); MdcEfficiencyResultDto mdcEfficiencyResultDto1 = new MdcEfficiencyResultDto(); mdcEfficiencyResultDto1.setTheDate("合计"); mdcEfficiencyResultDto.setTheDate("平均值"); for (String date : dates) { list.add(this.efficiencyRate(efficiencyList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyResultDto)); } mdcEfficiencyResultDto1.setProcessLong(mdcEfficiencyResultDto.getProcessLong()); mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate()); mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setStartRate(mdcEfficiencyResultDto.getStartRate()); mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setOpenRate(mdcEfficiencyResultDto.getOpenRate()); mdcEfficiencyResultDto1.setOpenLong(mdcEfficiencyResultDto.getOpenLong()); mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setWaitLong(mdcEfficiencyResultDto.getWaitLong()); mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong()); mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); mdcEfficiencyResultDto1.setColor(mdcUtilizationRate.getRateParameterColor()); } } list.add(mdcEfficiencyResultDto1); list.add(mdcEfficiencyResultDto); mdcEfficiencyListDto.setDataList(list); listDtos.add(mdcEfficiencyListDto); } } result.setMdcEfficiencyList(listDtos); } result.getDates().add("合计"); result.getDates().add("平均值"); MdcEfficiencyListDto sum = new MdcEfficiencyListDto(); sum.setLevel1("合计"); sum.setLevel2("合计"); sum.setLevel3("合计"); sum.setEquipmentId("合计"); sum.setEquipmentName("合计"); sum.setEquipmentType("合计"); //计算合计值 sum.setDataList(this.calculateOpenTotal(result.getMdcEfficiencyList(), mdcUtilizationRateList)); MdcEfficiencyListDto avg = new MdcEfficiencyListDto(); avg.setLevel1("平均值"); avg.setLevel2("平均值"); avg.setLevel3("平均值"); avg.setEquipmentId("平均值"); avg.setEquipmentName("平均值"); avg.setEquipmentType("平均值"); //计算平均值 avg.setDataList(this.calculateOpenAverage(result.getMdcEfficiencyList(), mdcUtilizationRateList)); result.getMdcEfficiencyList().add(sum); result.getMdcEfficiencyList().add(avg); return result; } /** * 计算平均值 * * @param mdcEfficiencyList * @param mdcUtilizationRateList * @return */ private List calculateOpenAverage(List mdcEfficiencyList, List mdcUtilizationRateList) { List result = new ArrayList<>(); List dataList = new ArrayList<>(); for (MdcEfficiencyListDto mdcEfficiencyListDto : mdcEfficiencyList) { dataList.addAll(mdcEfficiencyListDto.getDataList()); } dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyResultDto::getTheDate, Collectors.toList())) .forEach((theDate, mert) -> { mert.stream().reduce((a, b) -> new MdcEfficiencyResultDto( a.getTheDate(), a.getProcessLong().add(b.getProcessLong()), a.getUtilizationRate().add(b.getUtilizationRate()), a.getStartRate().add(b.getStartRate()), a.getOpenRate().add(b.getOpenRate()), a.getOpenLong().add(b.getOpenLong()), a.getWaitLong().add(b.getWaitLong()), a.getCloseLong().add(b.getCloseLong()), a.getFaultLong().add(b.getFaultLong()), a.getFaultRate().add(b.getFaultRate()), a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add); }); for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) { mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setFaultLong(mdcEfficiencyResultDto.getFaultLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setRemoveFaultRunLong(mdcEfficiencyResultDto.getRemoveFaultRunLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); } } } result.sort(Comparator.comparing(MdcEfficiencyResultDto::getTheDate)); return result; } /** * 计算合计值 * * @param mdcEfficiencyList * @param mdcUtilizationRateList * @return */ private List calculateOpenTotal(List mdcEfficiencyList, List mdcUtilizationRateList) { List result = new ArrayList<>(); List dataList = new ArrayList<>(); for (MdcEfficiencyListDto mdcEfficiencyListDto : mdcEfficiencyList) { dataList.addAll(mdcEfficiencyListDto.getDataList()); } dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyResultDto::getTheDate, Collectors.toList())) .forEach((theDate, mert) -> { mert.stream().reduce((a, b) -> new MdcEfficiencyResultDto( a.getTheDate(), a.getProcessLong().add(b.getProcessLong()), a.getUtilizationRate().add(b.getUtilizationRate()), a.getStartRate().add(b.getStartRate()), a.getOpenRate().add(b.getOpenRate()), a.getOpenLong().add(b.getOpenLong()), a.getWaitLong().add(b.getWaitLong()), a.getCloseLong().add(b.getCloseLong()), a.getFaultLong().add(b.getFaultLong()), a.getFaultRate().add(b.getFaultRate()), a.getRemoveFaultRunLong().add(b.getRemoveFaultRunLong()))).ifPresent(result::add); }); for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) { mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyResultDto.setFaultRate(mdcEfficiencyResultDto.getFaultRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); } } } result.sort(Comparator.comparing(MdcEfficiencyResultDto::getTheDate)); return result; } /** * 班次利用率报表 * * @param userId * @param vo * @return */ @Override public MdcEfficiencyShiftVo efficiencyShiftList(String userId, MdcEfficiencyReportShiftQueryVo vo) { MdcEfficiencyShiftVo result = new MdcEfficiencyShiftVo(); List listDtos = new ArrayList<>(); List equipmentIds = new ArrayList<>(); if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); } } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { // 单台设备信息 vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId())); } else { // 查询用户拥有的所有设备信息 if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); } } if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { vo.setEquipmentIdList(equipmentIds); } // 班次利用率等级 List mdcUtilizationRateList = mdcUtilizationRateService.listByType("bclyl"); List dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime())); result.setDates(dates); if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { result.setMdcEfficiencyList(listDtos); } else { List equipmentIdList = mdcEquipmentService.listEquipmentIdShift(vo); if (equipmentIdList != null && !equipmentIdList.isEmpty()) { vo.setEquipmentIdList(equipmentIdList); } else { result.setMdcEfficiencyList(listDtos); return result; } // 班次利用率数据 List mdcEquipmentStatisticalShiftInfoList = mdcEfficiencyReportMapper.efficiencyShiftSumList(vo); // 封装结果 if ("2".equals(vo.getTypeTree())) { // 部门层级 List equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList()); // 查询所有部门信息 List departList = sysDepartService.list(new LambdaQueryWrapper().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartOrder)); // 班次名称显示处理 String shiftSubName = ""; if (StringUtils.isBlank(vo.getShiftId())) { // 合并设备每天所有班次的数据 shiftSubName = "全部"; } else { List mdcShiftSubList = new ArrayList<>(); if (StringUtils.isBlank(vo.getShiftSubId())) { // 拼接所选班制下的所有班次名称 mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper().eq(MdcShiftSub::getShiftId, vo.getShiftId()).eq(MdcShiftSub::getShiftSubStatus, "1")); mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId())).collect(Collectors.toList()); } else { // 设置当前选择的班次名称 mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper().eq(MdcShiftSub::getId, vo.getShiftSubId()).eq(MdcShiftSub::getShiftSubStatus, "1")); mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId()) && mdcEquipmentShiftRateVo.getShiftSubId().equals(vo.getShiftSubId())).collect(Collectors.toList()); } List shiftSubNames = mdcShiftSubList.stream().map(MdcShiftSub::getShiftSubName).collect(Collectors.toList()); shiftSubName = String.join(",", shiftSubNames); } // 合并同一天多班次数据 mdcEquipmentStatisticalShiftInfoList = this.handleEfficiencyShiftList(mdcEquipmentStatisticalShiftInfoList); for (MdcEquDepDto mdcEquDepDto : equipmentList) { MdcEfficiencyShiftListDto mdcEfficiencyShiftListDto = new MdcEfficiencyShiftListDto(); mdcEfficiencyShiftListDto.setEquipmentId(mdcEquDepDto.getEquipmentId()); mdcEfficiencyShiftListDto.setEquipmentName(mdcEquDepDto.getEquipmentName()); mdcEfficiencyShiftListDto.setEquipmentType(mdcEquDepDto.getEquipmentType()); mdcEfficiencyShiftListDto.setShiftSubName(shiftSubName); switch (mdcEquDepDto.getOrgType()) { case "1": mdcEfficiencyShiftListDto.setLevel1(mdcEquDepDto.getDepartName()); break; case "2": mdcEfficiencyShiftListDto.setLevel2(mdcEquDepDto.getDepartName()); break; case "3": mdcEfficiencyShiftListDto.setLevel3(mdcEquDepDto.getDepartName()); break; default: } SysDepart sysDepart = departList.stream().filter(depart -> depart.getId().equals(mdcEquDepDto.getParentId())).findAny().orElse(null); if (sysDepart != null) { switch (sysDepart.getOrgType()) { case "1": mdcEfficiencyShiftListDto.setLevel1(sysDepart.getDepartName()); break; case "2": mdcEfficiencyShiftListDto.setLevel2(sysDepart.getDepartName()); break; case "3": mdcEfficiencyShiftListDto.setLevel3(sysDepart.getDepartName()); break; default: } if (StringUtils.isNotEmpty(sysDepart.getParentId())) { departList.stream().filter(depart -> depart.getId().equals(sysDepart.getParentId())).findAny().ifPresent(depart1 -> { switch (depart1.getOrgType()) { case "1": mdcEfficiencyShiftListDto.setLevel1(depart1.getDepartName()); break; case "2": mdcEfficiencyShiftListDto.setLevel2(depart1.getDepartName()); break; case "3": mdcEfficiencyShiftListDto.setLevel3(depart1.getDepartName()); break; default: } }); } } List list = new ArrayList<>(); MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto = new MdcEfficiencyShiftResultDto(); MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto1 = new MdcEfficiencyShiftResultDto(); mdcEfficiencyShiftResultDto.setTheDate("平均值"); mdcEfficiencyShiftResultDto1.setTheDate("合计"); for (String date : dates) { list.add(this.efficiencyShiftRate(mdcEquipmentStatisticalShiftInfoList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyShiftResultDto)); } mdcEfficiencyShiftResultDto1.setProcessLong(mdcEfficiencyShiftResultDto.getProcessLong()); mdcEfficiencyShiftResultDto.setProcessLong(mdcEfficiencyShiftResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto1.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate()); mdcEfficiencyShiftResultDto.setStartRate(mdcEfficiencyShiftResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto1.setStartRate(mdcEfficiencyShiftResultDto.getStartRate()); mdcEfficiencyShiftResultDto.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto1.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate()); mdcEfficiencyShiftResultDto1.setOpenLong(mdcEfficiencyShiftResultDto.getOpenLong()); mdcEfficiencyShiftResultDto.setOpenLong(mdcEfficiencyShiftResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto1.setWaitLong(mdcEfficiencyShiftResultDto.getWaitLong()); mdcEfficiencyShiftResultDto.setWaitLong(mdcEfficiencyShiftResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto1.setCloseLong(mdcEfficiencyShiftResultDto.getCloseLong()); mdcEfficiencyShiftResultDto.setCloseLong(mdcEfficiencyShiftResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); long rate = mdcEfficiencyShiftResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); mdcEfficiencyShiftResultDto1.setColor(mdcUtilizationRate.getRateParameterColor()); } } list.add(mdcEfficiencyShiftResultDto1); list.add(mdcEfficiencyShiftResultDto); mdcEfficiencyShiftListDto.setDataList(list); listDtos.add(mdcEfficiencyShiftListDto); } } else { // 产线层级 List equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList()); // 查询所有产线信息 List productionList = mdcProductionService.list(new LambdaQueryWrapper().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder)); // 班次名称显示处理 String shiftSubName = ""; if (StringUtils.isBlank(vo.getShiftId())) { // 合并设备每天所有班次的数据 shiftSubName = "全部"; } else { List mdcShiftSubList = new ArrayList<>(); if (StringUtils.isBlank(vo.getShiftSubId())) { // 拼接所选班制下的所有班次名称 mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper().eq(MdcShiftSub::getShiftId, vo.getShiftId()).eq(MdcShiftSub::getShiftSubStatus, "1")); mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId())).collect(Collectors.toList()); } else { // 设置当前选择的班次名称 mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper().eq(MdcShiftSub::getId, vo.getShiftSubId()).eq(MdcShiftSub::getShiftSubStatus, "1")); mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId()) && mdcEquipmentShiftRateVo.getShiftSubId().equals(vo.getShiftSubId())).collect(Collectors.toList()); } List shiftSubNames = mdcShiftSubList.stream().map(MdcShiftSub::getShiftSubName).collect(Collectors.toList()); shiftSubName = String.join(",", shiftSubNames); } // 合并同一天多班次数据 mdcEquipmentStatisticalShiftInfoList = this.handleEfficiencyShiftList(mdcEquipmentStatisticalShiftInfoList); for (MdcEquProDto mdcEquProDto : equipmentList) { MdcEfficiencyShiftListDto mdcEfficiencyShiftListDto = new MdcEfficiencyShiftListDto(); mdcEfficiencyShiftListDto.setEquipmentId(mdcEquProDto.getEquipmentId()); mdcEfficiencyShiftListDto.setEquipmentName(mdcEquProDto.getEquipmentName()); mdcEfficiencyShiftListDto.setEquipmentType(mdcEquProDto.getEquipmentType()); mdcEfficiencyShiftListDto.setShiftSubName(shiftSubName); switch (mdcEquProDto.getOrgType()) { case "1": mdcEfficiencyShiftListDto.setLevel1(mdcEquProDto.getProductionName()); break; case "2": mdcEfficiencyShiftListDto.setLevel2(mdcEquProDto.getProductionName()); break; case "3": mdcEfficiencyShiftListDto.setLevel3(mdcEquProDto.getProductionName()); break; default: } MdcProduction mdcProduction = productionList.stream().filter(production -> production.getId().equals(mdcEquProDto.getParentId())).findAny().orElse(null); if (mdcProduction != null) { switch (mdcProduction.getOrgType()) { case "1": mdcEfficiencyShiftListDto.setLevel1(mdcProduction.getProductionName()); break; case "2": mdcEfficiencyShiftListDto.setLevel2(mdcProduction.getProductionName()); break; case "3": mdcEfficiencyShiftListDto.setLevel3(mdcProduction.getProductionName()); break; default: } if (StringUtils.isNotEmpty(mdcProduction.getParentId())) { productionList.stream().filter(production -> production.getId().equals(mdcProduction.getParentId())).findAny().ifPresent(production1 -> { switch (production1.getOrgType()) { case "1": mdcEfficiencyShiftListDto.setLevel1(production1.getProductionName()); break; case "2": mdcEfficiencyShiftListDto.setLevel2(production1.getProductionName()); break; case "3": mdcEfficiencyShiftListDto.setLevel3(production1.getProductionName()); break; default: } }); } } List list = new ArrayList<>(); MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto = new MdcEfficiencyShiftResultDto(); MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto1 = new MdcEfficiencyShiftResultDto(); mdcEfficiencyShiftResultDto.setTheDate("平均值"); mdcEfficiencyShiftResultDto1.setTheDate("合计"); for (String date : dates) { list.add(this.efficiencyShiftRate(mdcEquipmentStatisticalShiftInfoList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyShiftResultDto)); } mdcEfficiencyShiftResultDto1.setProcessLong(mdcEfficiencyShiftResultDto.getProcessLong()); mdcEfficiencyShiftResultDto.setProcessLong(mdcEfficiencyShiftResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto1.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate()); mdcEfficiencyShiftResultDto.setStartRate(mdcEfficiencyShiftResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto1.setStartRate(mdcEfficiencyShiftResultDto.getStartRate()); mdcEfficiencyShiftResultDto.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto1.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate()); mdcEfficiencyShiftResultDto1.setOpenLong(mdcEfficiencyShiftResultDto.getOpenLong()); mdcEfficiencyShiftResultDto.setOpenLong(mdcEfficiencyShiftResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto1.setWaitLong(mdcEfficiencyShiftResultDto.getWaitLong()); mdcEfficiencyShiftResultDto.setWaitLong(mdcEfficiencyShiftResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto1.setCloseLong(mdcEfficiencyShiftResultDto.getCloseLong()); mdcEfficiencyShiftResultDto.setCloseLong(mdcEfficiencyShiftResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP)); long rate = mdcEfficiencyShiftResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); mdcEfficiencyShiftResultDto1.setColor(mdcUtilizationRate.getRateParameterColor()); } } list.add(mdcEfficiencyShiftResultDto1); list.add(mdcEfficiencyShiftResultDto); mdcEfficiencyShiftListDto.setDataList(list); listDtos.add(mdcEfficiencyShiftListDto); } } // listDtos.sort(((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getLevel3(), o2.getLevel3()))); result.setMdcEfficiencyList(listDtos); } result.getDates().add("合计"); result.getDates().add("平均值"); MdcEfficiencyShiftListDto sum = new MdcEfficiencyShiftListDto(); sum.setLevel1("合计"); sum.setLevel2("合计"); sum.setLevel3("合计"); sum.setEquipmentId("合计"); sum.setEquipmentName("合计"); sum.setEquipmentType("合计"); sum.setShiftSubName("合计"); sum.setDataList(this.calculateShiftTotal(result.getMdcEfficiencyList(), mdcUtilizationRateList)); MdcEfficiencyShiftListDto avg = new MdcEfficiencyShiftListDto(); avg.setLevel1("平均值"); avg.setLevel2("平均值"); avg.setLevel3("平均值"); avg.setEquipmentId("平均值"); avg.setEquipmentName("平均值"); avg.setEquipmentType("平均值"); avg.setShiftSubName("平均值"); avg.setDataList(this.calculateShiftAverage(result.getMdcEfficiencyList(), mdcUtilizationRateList)); result.getMdcEfficiencyList().add(sum); result.getMdcEfficiencyList().add(avg); return result; } /** * 计算平均值 * * @param mdcEfficiencyList * @param mdcUtilizationRateList * @return */ private List calculateShiftAverage(List mdcEfficiencyList, List mdcUtilizationRateList) { List result = new ArrayList<>(); List dataList = new ArrayList<>(); for (MdcEfficiencyShiftListDto mdcEfficiencyShiftListDto : mdcEfficiencyList) { dataList.addAll(mdcEfficiencyShiftListDto.getDataList()); } dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyShiftResultDto::getTheDate, Collectors.toList())) .forEach((theDate, mert) -> { mert.stream().reduce((a, b) -> new MdcEfficiencyShiftResultDto( a.getTheDate(), a.getProcessLong().add(b.getProcessLong()), a.getUtilizationRate().add(b.getUtilizationRate()), a.getStartRate().add(b.getStartRate()), a.getOpenRate().add(b.getOpenRate()), a.getOpenLong().add(b.getOpenLong()), a.getWaitLong().add(b.getWaitLong()), a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add); }); for (MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto : result) { mdcEfficiencyShiftResultDto.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto.setStartRate(mdcEfficiencyShiftResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto.setCloseLong(mdcEfficiencyShiftResultDto.getCloseLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto.setWaitLong(mdcEfficiencyShiftResultDto.getWaitLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto.setOpenLong(mdcEfficiencyShiftResultDto.getOpenLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto.setProcessLong(mdcEfficiencyShiftResultDto.getProcessLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP)); long rate = mdcEfficiencyShiftResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); } } } result.sort(Comparator.comparing(MdcEfficiencyShiftResultDto::getTheDate)); return result; } /** * 计算合计值 * * @param mdcEfficiencyList * @param mdcUtilizationRateList * @return */ private List calculateShiftTotal(List mdcEfficiencyList, List mdcUtilizationRateList) { List result = new ArrayList<>(); List dataList = new ArrayList<>(); for (MdcEfficiencyShiftListDto mdcEfficiencyShiftListDto : mdcEfficiencyList) { dataList.addAll(mdcEfficiencyShiftListDto.getDataList()); } dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyShiftResultDto::getTheDate, Collectors.toList())) .forEach((theDate, mert) -> { mert.stream().reduce((a, b) -> new MdcEfficiencyShiftResultDto( a.getTheDate(), a.getProcessLong().add(b.getProcessLong()), a.getUtilizationRate().add(b.getUtilizationRate()), a.getStartRate().add(b.getStartRate()), a.getOpenRate().add(b.getOpenRate()), a.getOpenLong().add(b.getOpenLong()), a.getWaitLong().add(b.getWaitLong()), a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add); }); for (MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto : result) { mdcEfficiencyShiftResultDto.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); mdcEfficiencyShiftResultDto.setStartRate(mdcEfficiencyShiftResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP)); long rate = mdcEfficiencyShiftResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); } } } result.sort(Comparator.comparing(MdcEfficiencyShiftResultDto::getTheDate)); return result; } private MdcEfficiencyShiftResultDto efficiencyShiftRate(List mdcEquipmentStatisticalShiftInfoList, String date, String equipmentId, List mdcUtilizationRateList, MdcEfficiencyShiftResultDto efficiencyShiftResultDto) { MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto = new MdcEfficiencyShiftResultDto(); if (mdcEquipmentStatisticalShiftInfoList != null && !mdcEquipmentStatisticalShiftInfoList.isEmpty()) { for (MdcEquipmentStatisticalShiftInfo equipmentStatisticalShiftInfo : mdcEquipmentStatisticalShiftInfoList) { if (date.equals(equipmentStatisticalShiftInfo.getTheDate()) && equipmentStatisticalShiftInfo.getEquipmentId().equals(equipmentId)) { mdcEfficiencyShiftResultDto.setTheDate(equipmentStatisticalShiftInfo.getTheDate()); mdcEfficiencyShiftResultDto.setProcessLong(equipmentStatisticalShiftInfo.getProcessLong()); if (equipmentStatisticalShiftInfo.getTotalLong().compareTo(BigDecimal.ZERO) == 0) { mdcEfficiencyShiftResultDto.setUtilizationRate(BigDecimal.ZERO); } else { mdcEfficiencyShiftResultDto.setUtilizationRate(equipmentStatisticalShiftInfo.getProcessLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, RoundingMode.HALF_UP)); } mdcEfficiencyShiftResultDto.setCloseLong(equipmentStatisticalShiftInfo.getCloseLong()); mdcEfficiencyShiftResultDto.setOpenLong(equipmentStatisticalShiftInfo.getOpenLong()); mdcEfficiencyShiftResultDto.setWaitLong(equipmentStatisticalShiftInfo.getWaitLong()); 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()) { mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); } } } } } else { mdcEfficiencyShiftResultDto.setTheDate(date); mdcEfficiencyShiftResultDto.setProcessLong(new BigDecimal("0")); mdcEfficiencyShiftResultDto.setUtilizationRate(new BigDecimal("0")); mdcEfficiencyShiftResultDto.setStartRate(new BigDecimal("0")); mdcEfficiencyShiftResultDto.setOpenRate(new BigDecimal("0")); mdcEfficiencyShiftResultDto.setOpenLong(new BigDecimal("0")); mdcEfficiencyShiftResultDto.setWaitLong(new BigDecimal("0")); mdcEfficiencyShiftResultDto.setCloseLong(new BigDecimal("0")); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); } } } if (StringUtils.isBlank(mdcEfficiencyShiftResultDto.getColor())) { mdcEfficiencyShiftResultDto.setTheDate(date); mdcEfficiencyShiftResultDto.setProcessLong(new BigDecimal("0")); mdcEfficiencyShiftResultDto.setUtilizationRate(new BigDecimal("0")); mdcEfficiencyShiftResultDto.setStartRate(new BigDecimal("0")); mdcEfficiencyShiftResultDto.setOpenRate(new BigDecimal("0")); mdcEfficiencyShiftResultDto.setOpenLong(new BigDecimal("0")); mdcEfficiencyShiftResultDto.setWaitLong(new BigDecimal("0")); mdcEfficiencyShiftResultDto.setCloseLong(new BigDecimal("0")); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); } } } efficiencyShiftResultDto.setProcessLong(efficiencyShiftResultDto.getProcessLong().add(mdcEfficiencyShiftResultDto.getProcessLong())); efficiencyShiftResultDto.setUtilizationRate(efficiencyShiftResultDto.getUtilizationRate().add(mdcEfficiencyShiftResultDto.getUtilizationRate())); efficiencyShiftResultDto.setStartRate(efficiencyShiftResultDto.getStartRate().add(mdcEfficiencyShiftResultDto.getStartRate())); efficiencyShiftResultDto.setOpenRate(efficiencyShiftResultDto.getOpenRate().add(mdcEfficiencyShiftResultDto.getOpenRate())); efficiencyShiftResultDto.setOpenLong(efficiencyShiftResultDto.getOpenLong().add(mdcEfficiencyShiftResultDto.getOpenLong())); efficiencyShiftResultDto.setWaitLong(efficiencyShiftResultDto.getWaitLong().add(mdcEfficiencyShiftResultDto.getWaitLong())); efficiencyShiftResultDto.setCloseLong(efficiencyShiftResultDto.getCloseLong().add(mdcEfficiencyShiftResultDto.getCloseLong())); return mdcEfficiencyShiftResultDto; } /** * 合并同一天同班次数据 * * @param mdcEquipmentStatisticalShiftInfoList * @return */ private List handleEfficiencyShiftList(List mdcEquipmentStatisticalShiftInfoList) { List result = new ArrayList<>(); Map map = new HashMap<>(); for (MdcEquipmentStatisticalShiftInfo equipmentStatisticalShiftInfo : mdcEquipmentStatisticalShiftInfoList) { if (map.containsKey(equipmentStatisticalShiftInfo.getEquipmentId() + "_" + equipmentStatisticalShiftInfo.getTheDate())) { MdcEquipmentStatisticalShiftInfo vo = map.get(equipmentStatisticalShiftInfo.getEquipmentId() + "_" + equipmentStatisticalShiftInfo.getTheDate()); vo.setProcessLong(vo.getProcessLong().add(equipmentStatisticalShiftInfo.getProcessLong())); vo.setOpenLong(vo.getOpenLong().add(equipmentStatisticalShiftInfo.getOpenLong())); vo.setWaitLong(vo.getWaitLong().add(equipmentStatisticalShiftInfo.getWaitLong())); vo.setCloseLong(vo.getCloseLong().add(equipmentStatisticalShiftInfo.getCloseLong())); vo.setTotalLong(vo.getTotalLong().add(equipmentStatisticalShiftInfo.getTotalLong())); } else { map.put(equipmentStatisticalShiftInfo.getEquipmentId() + "_" + equipmentStatisticalShiftInfo.getTheDate(), equipmentStatisticalShiftInfo); } } for (String s : map.keySet()) { result.add(map.get(s)); } return result; } /** * 统计分析列表 * * @param userId * @param vo * @return */ @Override public StatisticalAnalysisVo dayStatisticalRate(String userId, MdcEfficiencyReportQueryVo vo) { StatisticalAnalysisVo result = new StatisticalAnalysisVo(); List equipmentIds = new ArrayList<>(); if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); } } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { // 单台设备信息 vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId())); } else { // 查询用户拥有的所有设备信息 if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); } } if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { vo.setEquipmentIdList(equipmentIds); } if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { return result; } if (!StringUtils.isNotEmpty(vo.getDateTime())) { throw new JeecgBootException("请输入查询条件时间"); } vo.setStartTime(vo.getDateTime()); vo.setEndTime(vo.getDateTime()); List efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo); if (efficiencyList == null || efficiencyList.isEmpty()) { return result; } result = this.efficiencyStatisticalRate(efficiencyList); if (result.getOpenRate().compareTo(new BigDecimal("0")) > 0) { result.setOpenRate(result.getOpenRate().multiply(new BigDecimal("100")).divide(new BigDecimal(vo.getEquipmentIdList().size()), 2, BigDecimal.ROUND_HALF_UP)); } if (result.getUtilizationRate().compareTo(new BigDecimal("0")) > 0) { result.setUtilizationRate(result.getUtilizationRate().multiply(new BigDecimal(100)).divide(new BigDecimal(vo.getEquipmentIdList().size()), 2, BigDecimal.ROUND_HALF_UP)); } if (result.getOpenLong().compareTo(new BigDecimal(0)) > 0 && result.getProcessLong().compareTo(new BigDecimal(0)) > 0) { result.setUsedOpenRate(result.getProcessLong().divide(result.getOpenLong(), 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100))); } return result; } /** * 对比分析 */ @Override public ComparativeAnalysisDto comparativeAnalysis(String userId, ComparativeAnalysisQueryVo vo) { ComparativeAnalysisDto result = new ComparativeAnalysisDto(); List equipmentIds = new ArrayList<>(); if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); } } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { // 单台设备信息 vo.setEquipmentIdList(Arrays.asList(vo.getEquipmentId().split(","))); } else { // 查询用户拥有的所有设备信息 if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); } } if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { vo.setEquipmentIdList(equipmentIds); } if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { return result; } // 查询原始数据 List resultDtos = mdcEfficiencyReportMapper.comparativeAnalysis(vo); if (resultDtos != null && !resultDtos.isEmpty()) { // 组装图形和仪表数据 List graphicsDtos = new ArrayList<>(); // 获取天数 long days = ChronoUnit.DAYS.between(LocalDate.parse(vo.getStartTime(), DateTimeFormatter.ofPattern("yyyyMMdd")), LocalDate.parse(vo.getEndTime(), DateTimeFormatter.ofPattern("yyyyMMdd"))) + 1; BigDecimal time = new BigDecimal("24").multiply(new BigDecimal(days)).multiply(new BigDecimal("60")).multiply(new BigDecimal("60")); for (MdcComAnaDto mdcComAnaDto : resultDtos) { GraphicsDto graphicsDto = new GraphicsDto(); graphicsDto.setEquipmentId(mdcComAnaDto.getEquipmentId()); graphicsDto.setCloseLong(mdcComAnaDto.getCloseLong()); graphicsDto.setOpenLong(mdcComAnaDto.getOpenLong()); // 24小时利用率 = 加工时间/24 graphicsDto.setUtilizationRate(mdcComAnaDto.getProcessLong().divide(time, 6, BigDecimal.ROUND_HALF_UP)); // 开机率 = 开机时间 / 24 graphicsDto.setOpenRate(mdcComAnaDto.getOpenLong().divide(time, 6, BigDecimal.ROUND_HALF_UP)); graphicsDtos.add(graphicsDto); } result.setGraphics(graphicsDtos); List tops = new ArrayList<>(); List lasts = new ArrayList<>(); graphicsDtos.stream().sorted(Comparator.comparing(GraphicsDto::getUtilizationRate)).limit(5).forEach(graphicsDto -> { UtilizationRateDto utilizationRateDto = new UtilizationRateDto(); utilizationRateDto.setEquipmentId(graphicsDto.getEquipmentId()); utilizationRateDto.setUtilizationRate(graphicsDto.getUtilizationRate()); lasts.add(utilizationRateDto); }); graphicsDtos.stream().sorted(Comparator.comparing(GraphicsDto::getUtilizationRate).reversed()).limit(5).forEach(graphicsDto -> { UtilizationRateDto utilizationRateDto = new UtilizationRateDto(); utilizationRateDto.setEquipmentId(graphicsDto.getEquipmentId()); utilizationRateDto.setUtilizationRate(graphicsDto.getUtilizationRate()); tops.add(utilizationRateDto); }); MeterDto meterDto = new MeterDto(); meterDto.setTops(tops); meterDto.setLasts(lasts); result.setMeters(meterDto); // 组装饼图数据 PieChartDto pieChartDto = new PieChartDto(); BigDecimal openLong = new BigDecimal("0"); BigDecimal closeLong = new BigDecimal("0"); BigDecimal waitLong = new BigDecimal("0"); BigDecimal processLong = new BigDecimal("0"); for (MdcComAnaDto resultDto : resultDtos) { openLong = openLong.add(resultDto.getOpenLong()); closeLong = closeLong.add(resultDto.getCloseLong()); waitLong = waitLong.add(resultDto.getWaitLong()); processLong = processLong.add(resultDto.getProcessLong()); } // 开机率 = 开机时长 / (24 × 天数 × 个数) pieChartDto.setOpenRate(openLong.divide(time.multiply(new BigDecimal(resultDtos.size())), 6, BigDecimal.ROUND_HALF_UP)); // 关机率 = 1 - 开机率 pieChartDto.setCloseRate(new BigDecimal("1").subtract(pieChartDto.getOpenRate())); // 加工率 = 加工时间 / (24 × 天数 × 个数) pieChartDto.setProcessRate(processLong.divide(time.multiply(new BigDecimal(resultDtos.size())), 6, BigDecimal.ROUND_HALF_UP)); // 待机率 = 开机率 - 加工率 pieChartDto.setWaitRate(pieChartDto.getOpenRate().subtract(pieChartDto.getProcessRate())); result.setPieCharts(pieChartDto); } return result; } /** * 设备日利用率 * * @param vo * @return */ @Override public DayUtilizationRateDto dayUtilizationRate(String userId, DayUtilizationRateQueryVo vo) { DayUtilizationRateDto result = new DayUtilizationRateDto(); if (StringUtils.isBlank(vo.getEquipmentId())) { List equipmentIds; // 获取用户拥有设备权限 if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); } if (equipmentIds != null && !equipmentIds.isEmpty()) { vo.setEquipmentId(equipmentIds.get(0)); } } result.setEquipmentId(vo.getEquipmentId()); MdcEquipment mdcEquipment = mdcEquipmentService.getOne(new LambdaQueryWrapper().eq(MdcEquipment::getEquipmentId, vo.getEquipmentId())); result.setEquipmentName(mdcEquipment.getEquipmentName()); List dateList = new ArrayList<>(); for (int i = 1; i <= 24 / vo.getTimeType(); i++) { if (i * vo.getTimeType() < 10) { dateList.add("0" + i * vo.getTimeType() + ":00"); } else { dateList.add(i * vo.getTimeType() + ":00"); } } dateList.add(0, "00:00"); List dayRateDtoList = new ArrayList<>(); for (int i = 0; i < dateList.size() - 1; i++) { DayRateDto dayRateDto = new DayRateDto(); dayRateDto.setDateTime(dateList.get(i + 1)); String dateTime = DateUtils.dateConvertion(vo.getDateTime()); Date startTime = DateUtils.toDate(dateTime + " " + dateList.get(i) + ":00", DateUtils.STR_DATE_TIME_SMALL); Date endTime = DateUtils.toDate(dateTime + " " + dateList.get(i + 1) + ":00", DateUtils.STR_DATE_TIME_SMALL); List runningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSection(vo.getEquipmentId(), startTime.getTime(), endTime.getTime()); if (runningSections != null && !runningSections.isEmpty()) { // 时间修正 runningSections.get(0).setStartTime(startTime); if (runningSections.size() > 1) { runningSections.get(runningSections.size() - 1).setEndTime(endTime); } else { runningSections.get(0).setEndTime(endTime); } // 利用率计算 BigDecimal processLong = new BigDecimal("0"); for (MdcEquipmentRunningSection runningSection : runningSections) { if (runningSection.getStatus() == 3) { long duration = DateUtils.differentSecond(runningSection.getStartTime(), runningSection.getEndTime()); processLong = processLong.add(new BigDecimal(duration)); } } BigDecimal totalLong = new BigDecimal(vo.getTimeType()).multiply(new BigDecimal("60")).multiply(new BigDecimal("60")); BigDecimal utilizationRate = processLong.divide(totalLong, 6, BigDecimal.ROUND_HALF_UP); dayRateDto.setUtilizationRate(utilizationRate); } else { dayRateDto.setUtilizationRate(new BigDecimal("0")); } dayRateDtoList.add(dayRateDto); } dateList.remove(0); result.setDateList(dateList); result.setDayRateDto(dayRateDtoList); return result; } /** * 设备日利用率对比分析 * * @param userId * @param vo * @return */ @Override public DayUtilizationRateDto dayUtilizationRateContrast(String userId, DayUtilizationRateContrastQueryVo vo) { DayUtilizationRateDto result = new DayUtilizationRateDto(); if (StringUtils.isBlank(vo.getEquipmentId())) { List equipmentIds; // 获取用户拥有设备权限 if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); } if (equipmentIds != null && !equipmentIds.isEmpty()) { vo.setEquipmentId(equipmentIds.get(0)); } } result.setEquipmentId(vo.getEquipmentId()); MdcEquipment mdcEquipment = mdcEquipmentService.getOne(new LambdaQueryWrapper().eq(MdcEquipment::getEquipmentId, vo.getEquipmentId())); result.setEquipmentName(mdcEquipment.getEquipmentName()); Date start = DateUtils.toDate(vo.getStartDate(), DateUtils.STRDATE); Date end = DateUtils.toDate(vo.getEndDate(), DateUtils.STRDATE); List dateList = DateUtils.getDatesStringLists(start, end); result.setDateList(dateList); List datesStringList = DateUtils.getDatesStringList(start, end); List dayRateDtoList = new ArrayList<>(); for (String date : datesStringList) { DayRateDto dayRateDto = new DayRateDto(); String format = DateUtils.format(DateUtils.toDate(date, DateUtils.STR_DATE), DateUtils.STR_MMDD); dayRateDto.setDateTime(format); Date startTime = DateUtils.toDate(date + " " + vo.getStartTime() + ":00", DateUtils.STR_DATE_TIME_SMALL); Date endTime = DateUtils.toDate(date + " " + vo.getEndTime() + ":00", DateUtils.STR_DATE_TIME_SMALL); List runningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSection(vo.getEquipmentId(), startTime.getTime(), endTime.getTime()); if (runningSections != null && !runningSections.isEmpty()) { //时间修正 runningSections.get(0).setStartTime(startTime); if (runningSections.size() > 1) { runningSections.get(runningSections.size() - 1).setEndTime(endTime); } else { runningSections.get(0).setEndTime(endTime); } // 利用率计算 BigDecimal processLong = new BigDecimal("0"); for (MdcEquipmentRunningSection runningSection : runningSections) { if (runningSection.getStatus() == 3) { long duration = DateUtils.differentSecond(runningSection.getStartTime(), runningSection.getEndTime()); processLong = processLong.add(new BigDecimal(duration)); } } BigDecimal totalLong = new BigDecimal(DateUtils.differentSecond(startTime, endTime)); BigDecimal utilizationRate = processLong.divide(totalLong, 6, BigDecimal.ROUND_HALF_UP); dayRateDto.setUtilizationRate(utilizationRate); } else { dayRateDto.setUtilizationRate(new BigDecimal("0")); } dayRateDtoList.add(dayRateDto); } result.setDayRateDto(dayRateDtoList); return result; } /** * 设备利用率分段分析 * * @param userId * @param vo * @return */ @Override public MdcUtilizationRateDto utilizationRateSectionAnalyze(String userId, DayUtilizationRateContrastQueryVo vo) { MdcUtilizationRateDto result = new MdcUtilizationRateDto(); List listDtos = new ArrayList<>(); List equipmentIds = new ArrayList<>(); if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); } } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { // 单台设备信息 vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId())); } else { // 查询用户拥有的所有设备信息 if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); } } if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { vo.setEquipmentIdList(equipmentIds); } List dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartDate()), DateUtils.getShortDate2(vo.getEndDate())); List dateList = DateUtils.getDatesStringList(DateUtils.getShortDate2(vo.getStartDate()), DateUtils.getShortDate2(vo.getEndDate())); result.setDates(dates); String startString = vo.getStartTime(); String endString = vo.getEndTime(); if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { result.setMdcEfficiencyList(listDtos); } else { // 利用率等级 List mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl"); if ("2".equals(vo.getTypeTree())) { // 部门层级 List equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList()); for (MdcEquDepDto mdcEquDepDto : equipmentList) { MdcUtilizationRateListDto mdcUtilizationRateListDto = new MdcUtilizationRateListDto(); mdcUtilizationRateListDto.setEquipmentId(mdcEquDepDto.getEquipmentId()); mdcUtilizationRateListDto.setEquipmentName(mdcEquDepDto.getEquipmentName()); mdcUtilizationRateListDto.setEquipmentType(mdcEquDepDto.getEquipmentType()); // List list = new ArrayList<>(); for (String date : dateList) { Date startTime = DateUtils.toDate(date + " " + startString + ":00", DateUtils.STR_DATE_TIME_SMALL); Date endTime = DateUtils.toDate(date + " " + endString + ":00", DateUtils.STR_DATE_TIME_SMALL); list.add(this.utilizationRate(mdcEquDepDto.getEquipmentId(), mdcEquDepDto.getEquipmentName(), mdcEquDepDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList)); } mdcUtilizationRateListDto.setDataList(list); listDtos.add(mdcUtilizationRateListDto); } } else { // 产线层级 List equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList()); for (MdcEquProDto mdcEquProDto : equipmentList) { MdcUtilizationRateListDto mdcEfficiencyListDto = new MdcUtilizationRateListDto(); mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId()); mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName()); mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType()); // List list = new ArrayList<>(); for (String date : dateList) { Date startTime = DateUtils.toDate(date + " " + startString + ":00", DateUtils.STR_DATE_TIME_SMALL); Date endTime = DateUtils.toDate(date + " " + endString + ":00", DateUtils.STR_DATE_TIME_SMALL); list.add(this.utilizationRate(mdcEquProDto.getEquipmentId(), mdcEquProDto.getEquipmentName(), mdcEquProDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList)); } mdcEfficiencyListDto.setDataList(list); listDtos.add(mdcEfficiencyListDto); } } result.setMdcEfficiencyList(listDtos); } return result; } /** * 设备利用率走势分析 * * @param userId * @param vo * @return */ @Override public MdcUtilizationRateDto utilizationRateTrendAnalyze(String userId, DayUtilizationRateContrastQueryVo vo) { MdcUtilizationRateDto result = new MdcUtilizationRateDto(); List listDtos = new ArrayList<>(); List equipmentIds = new ArrayList<>(); if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); } } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { // 单台设备信息 vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId())); } else { // 查询用户拥有的所有设备信息 if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); } } if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { vo.setEquipmentIdList(equipmentIds); } List dateList = DateUtils.getDatesStringList(DateUtils.getShortDate2(vo.getStartDate()), DateUtils.getShortDate2(vo.getEndDate())); result.setDates(dateList); if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { result.setMdcEfficiencyList(listDtos); } else { // 利用率等级 List mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl"); if ("2".equals(vo.getTypeTree())) { // 部门层级 List equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList()); for (MdcEquDepDto mdcEquDepDto : equipmentList) { MdcUtilizationRateListDto mdcEfficiencyListDto = new MdcUtilizationRateListDto(); mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId()); mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName()); mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType()); List 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)); } mdcEfficiencyListDto.setDataList(list); listDtos.add(mdcEfficiencyListDto); } } else { // 产线层级 List equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList()); for (MdcEquProDto mdcEquProDto : equipmentList) { MdcUtilizationRateListDto mdcEfficiencyListDto = new MdcUtilizationRateListDto(); mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId()); mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName()); mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType()); List 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)); } mdcEfficiencyListDto.setDataList(list); listDtos.add(mdcEfficiencyListDto); } } result.setMdcEfficiencyList(listDtos); } return result; } @Override public List getEfficiencyRate(String equipmentId, String date) { return mdcEfficiencyReportMapper.getEfficiencyRate(equipmentId, date); } /** * 班组各设备综合利用率 * * @param equEffVo * @return */ @Override public Map equipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo) { Map result = new HashMap<>(); List mdcProductionIds = new ArrayList<>(); if (StringUtils.isBlank(equEffVo.getProductionIds())) { mdcProductionIds.add(equEffVo.getProductionId()); } else { mdcProductionIds.addAll(Arrays.asList(equEffVo.getProductionIds().split(","))); } List allProductionIds = mdcProductionService.findChildren(mdcProductionIds); //数据权限过滤 allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds); List equipmentList = mdcEquipmentService.findByProductionIds(allProductionIds); if (equipmentList != null && !equipmentList.isEmpty()) { List equipmentIdList = equipmentList.stream().map(MdcEquipment::getEquipmentId).collect(Collectors.toList()); List dataList = mdcEfficiencyReportMapper.equipmentEfficiencyAnalyze(equipmentIdList, equEffVo.getMonth()); result.put("dataList", dataList); List equipmentNameList = dataList.stream().map(EquipmentEfficiencyAnalyzeDto::getEquipmentId).collect(Collectors.toList()); result.put("equipmentNameList", equipmentNameList); } return result; } @Override public Map teamEquipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo) { Map result = new HashMap<>(); // 1. 处理生产ID List mdcProductionIds = StringUtils.isBlank(equEffVo.getProductionIds()) ? Collections.singletonList(equEffVo.getProductionId()) : Arrays.asList(equEffVo.getProductionIds().split(",")); List allProductionIds = mdcProductionService.findChildren(mdcProductionIds); if (allProductionIds.isEmpty()) { return result; // 提前返回空结果 } //数据权限过滤 allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds); // 2. 获取设备列表 List equipmentList = StringUtils.isNotBlank(equEffVo.getTeamCodes()) ? mdcEquipmentService.findByProIdsAndTeamCode(allProductionIds, Arrays.asList(equEffVo.getTeamCodes().split(","))) : mdcEquipmentService.findByProductionIds(allProductionIds); if (equipmentList.isEmpty()) { return result; } // 3. 数据处理 List equipmentIdList = equipmentList.stream() .map(MdcEquipment::getEquipmentId) .collect(Collectors.toList()); List dataList = mdcEfficiencyReportMapper .teamEquipmentEfficiencyAnalyze(equipmentIdList, equEffVo.getMonth()); if (dataList.isEmpty()) { return result; } // 4. 分组计算平均值 Map grouped = dataList.stream() .collect(Collectors.groupingBy( TeamEquEffDto::getTeamCode, Collectors.collectingAndThen( Collectors.toList(), this::calculateAverages // 提取计算方法 ))); // 5. 字典转换 Map dictMap = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_MDC_STAFF_TEAM) .stream() .collect(Collectors.toMap(DictModel::getValue, DictModel::getText)); List resultList = grouped.entrySet().stream() .map(entry -> buildResultDto(entry, dictMap))// 提取构建方法 .sorted(Comparator.comparing(TeamEquEffDto::getUtilizationRate).reversed()) .collect(Collectors.toList()); result.put("dataList", resultList); result.put("teamCodeList", resultList.stream() .map(TeamEquEffDto::getTeamCode) .collect(Collectors.toList())); return result; } @Override public Map teamEfficiencyAnalyzeByMonth(String userId, EquEffVo equEffVo) { Map result = new HashMap<>(); // 1. 日期处理 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 monthBetween = DateUtils.getMonthBetween(start, end); List dateList = monthBetween.stream() .map(date -> date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "月") .collect(Collectors.toList()); result.put("dateList", dateList); // 2. 获取产线数据 List mdcProductions = mdcProductionService.findMdcPros(userId, equEffVo.getProductionId()); // 3. 初始化结果集 List utilizationRateList = new ArrayList<>(); List shiftUtilizationRateList = new ArrayList<>(); List amendUtilizationRateList = new ArrayList<>(); // 4. 处理每个产线 mdcProductions.forEach(mdcProduction -> { // 4.1 获取下级产线并过滤 List allProductionIds = mdcProductionService.recursionChildren(mdcProduction.getId()); // 数据权限过滤 allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds); // 4.2 获取设备列表 List equipmentList = mdcEquipmentService.findByProductionIds(allProductionIds); if (equipmentList == null || equipmentList.isEmpty()) { return; } //提取id集合 List equipmentIdList = equipmentList.stream() .map(MdcEquipment::getEquipmentId) .collect(Collectors.toList()); TeamEquEffMonthDto urDto = new TeamEquEffMonthDto(); TeamEquEffMonthDto surDto = new TeamEquEffMonthDto(); TeamEquEffMonthDto aurDto = new TeamEquEffMonthDto(); urDto.setProductionName(mdcProduction.getProductionName()); surDto.setProductionName(mdcProduction.getProductionName()); aurDto.setProductionName(mdcProduction.getProductionName()); List urDataList = new ArrayList<>(); List surDataList = new ArrayList<>(); List aurDataList = new ArrayList<>(); monthBetween.forEach(date -> { TeamEquEffMonthChildDto urCDto = new TeamEquEffMonthChildDto(); TeamEquEffMonthChildDto surCDto = new TeamEquEffMonthChildDto(); TeamEquEffMonthChildDto aurCDto = new TeamEquEffMonthChildDto(); String month = date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "月"; urCDto.setMonth(month); surCDto.setMonth(month); aurCDto.setMonth(month); List dataList = mdcEfficiencyReportMapper.teamEquipmentEfficiencyAnalyze(equipmentIdList, date.replaceAll("-", "")); if (dataList != null && !dataList.isEmpty()) { // 计算平均值 BigDecimal ur = dataList.stream() .map(TeamEquEffDto::getUtilizationRate) .reduce(BigDecimal.ZERO, BigDecimal::add) .divide(BigDecimal.valueOf(dataList.size()), 2, RoundingMode.HALF_UP); //利用率 urCDto.setUtilizationRate(ur); //班次利用率 BigDecimal sur = dataList.stream() .map(TeamEquEffDto::getShiftUtilizationRate) .reduce(BigDecimal.ZERO, BigDecimal::add) .divide(BigDecimal.valueOf(dataList.size()), 2, RoundingMode.HALF_UP); surCDto.setUtilizationRate(sur); //去除故障24小时利用率 BigDecimal aur = dataList.stream() .map(TeamEquEffDto::getAmendUtilizationRate) .reduce(BigDecimal.ZERO, BigDecimal::add) .divide(BigDecimal.valueOf(dataList.size()), 2, RoundingMode.HALF_UP); aurCDto.setUtilizationRate(aur); } urDataList.add(urCDto); surDataList.add(surCDto); aurDataList.add(aurCDto); }); urDto.setDataList(urDataList); surDto.setDataList(surDataList); aurDto.setDataList(aurDataList); utilizationRateList.add(urDto); shiftUtilizationRateList.add(surDto); amendUtilizationRateList.add(aurDto); }); result.put("utilizationRateList", utilizationRateList); result.put("shiftUtilizationRateList", shiftUtilizationRateList); result.put("amendUtilizationRateList", amendUtilizationRateList); return result; } @Override public Map comprehensiveRateAnalyze(String userId, EquEffVo vo) { Map result = new HashMap<>(); // 1. 日期处理 LocalDate now = LocalDate.now(); Date start = DateUtils.toDate(now.plusMonths(-12).toString(), DateUtils.STR_DATE); Date end = DateUtils.toDate(now.plusMonths(-1).toString(), DateUtils.STR_DATE); List monthBetween = DateUtils.getMonthBetween(start, end); List dateList = monthBetween.stream() .map(date -> date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "月") .collect(Collectors.toList()); result.put("dateList", dateList); // 1. 处理生产ID List mdcProductionIds = StringUtils.isBlank(vo.getProductionIds()) ? Collections.singletonList(vo.getProductionId()) : Arrays.asList(vo.getProductionIds().split(",")); List allProductionIds = mdcProductionService.findChildren(mdcProductionIds); if (allProductionIds.isEmpty()) { return result; // 提前返回空结果 } //数据权限过滤 allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds); // 2. 获取设备列表 List equipmentList = StringUtils.isNotBlank(vo.getEquipmentType()) ? mdcEquipmentService.findByProIdsAndType(allProductionIds, Arrays.asList(vo.getEquipmentType().split(","))) : mdcEquipmentService.findByProductionIds(allProductionIds); if (equipmentList.isEmpty()) { return result; } // 3. 数据处理 List equipmentIdList = equipmentList.stream() .map(MdcEquipment::getEquipmentId) .collect(Collectors.toList()); String startStr = monthBetween.get(0).replaceAll("-", ""); String endStr = monthBetween.get(monthBetween.size() - 1).replaceAll("-", ""); List comRateDtoList = mdcEfficiencyReportMapper.comprehensiveRateAnalyze(equipmentIdList, startStr, endStr); if (comRateDtoList.isEmpty()) { return result; // 提前返回空结果 } List dataList = new ArrayList<>(); Map map = comRateDtoList.stream().collect(Collectors.toMap(ComRateDto::getTheMonth, comRateDto -> comRateDto)); monthBetween.forEach(date -> { String d = date.replaceAll("-", ""); String month = date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "月"; if (map.containsKey(d)) { ComRateDto comRateDto = map.get(d); comRateDto.setTheMonth(month); comRateDto.setUtilizationRate(comRateDto.getUtilizationRate().setScale(2, RoundingMode.HALF_UP)); comRateDto.setShiftUtilizationRate(comRateDto.getShiftUtilizationRate() != null ? comRateDto.getShiftUtilizationRate().setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO); comRateDto.setAmendUtilizationRate(comRateDto.getAmendUtilizationRate().setScale(2, RoundingMode.HALF_UP)); comRateDto.setProcessLong(comRateDto.getProcessLong().divide(new BigDecimal("3600"), 2, RoundingMode.HALF_UP)); dataList.add(comRateDto); } else { ComRateDto comRateDto = new ComRateDto(); comRateDto.setTheMonth(month); dataList.add(comRateDto); } }); result.put("dataList", dataList); if (StringUtils.isNotBlank(vo.getShiftId())) { List shiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper().eq(MdcShiftSub::getShiftId, vo.getShiftId())); if (shiftSubList == null || shiftSubList.isEmpty()) { return result; } List shiftSubNameList = shiftSubList.stream().map(MdcShiftSub::getShiftSubName).collect(Collectors.toList()); result.put("shiftSubList", shiftSubNameList); List comShiftRateDtoList = mdcEfficiencyReportMapper.comprehensiveShiftRateAnalyze(equipmentIdList, startStr, endStr, vo.getShiftId()); Map> groupMap; if (comShiftRateDtoList != null && !comShiftRateDtoList.isEmpty()) { groupMap = comShiftRateDtoList.stream().collect(Collectors.groupingBy(ComShiftRateDto::getShiftSub)); } else { groupMap = new HashMap<>(); } List shiftDataList = new ArrayList<>(); shiftSubList.forEach(mdcShiftSub -> { ComShiftDto comShiftDto = new ComShiftDto(); comShiftDto.setShiftSubName(mdcShiftSub.getShiftSubName()); if (groupMap.containsKey(mdcShiftSub.getId())) { List csrd = groupMap.get(mdcShiftSub.getId()); Map collect = csrd.stream().collect(Collectors.toMap(ComShiftRateDto::getTheMonth, comShiftRateDto -> comShiftRateDto)); List comShiftChildDtoList = new ArrayList<>(); monthBetween.forEach(date -> { String d = date.replaceAll("-", ""); String month = date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "月"; if (collect.containsKey(d)) { ComShiftRateDto comShiftRateDto = collect.get(d); ComShiftChildDto comShiftChildDto = new ComShiftChildDto(); comShiftChildDto.setMonth(month); comShiftChildDto.setUtilizationRate(comShiftRateDto.getUtilizationRate().setScale(2, RoundingMode.HALF_UP)); comShiftChildDtoList.add(comShiftChildDto); } else { ComShiftChildDto comShiftChildDto = new ComShiftChildDto(); comShiftChildDto.setMonth(month); comShiftChildDtoList.add(comShiftChildDto); } }); comShiftDto.setDataList(comShiftChildDtoList); } else { List comShiftChildDtoList = new ArrayList<>(); monthBetween.forEach(date -> { String month = date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "月"; ComShiftChildDto comShiftChildDto = new ComShiftChildDto(); comShiftChildDto.setMonth(month); comShiftChildDtoList.add(comShiftChildDto); }); comShiftDto.setDataList(comShiftChildDtoList); } shiftDataList.add(comShiftDto); }); result.put("shiftDataList", shiftDataList); } return result; } // 提取的平均值计算方法 private TeamEquEffDto calculateAverages(List items) { BigDecimal size = new BigDecimal(items.size()); return new TeamEquEffDto( calculateAverage(items, TeamEquEffDto::getUtilizationRate, size), calculateAverage(items, TeamEquEffDto::getShiftUtilizationRate, size), calculateAverage(items, TeamEquEffDto::getAmendUtilizationRate, size) ); } // 通用的平均值计算 private BigDecimal calculateAverage(List items, Function mapper, BigDecimal size) { return items.stream() .map(mapper) .reduce(BigDecimal.ZERO, BigDecimal::add) .divide(size, 2, RoundingMode.HALF_UP); } // 构建结果DTO private TeamEquEffDto buildResultDto(Map.Entry entry, Map dictMap) { TeamEquEffDto dto = entry.getValue(); dto.setTeamCode(dictMap.getOrDefault(entry.getKey(), entry.getKey())); return dto; } private MdcUtilizationResultDto utilizationRate(String equipmentId, String equipmentName, String equipmentType, Date startTime, Date endTime, String date, List mdcUtilizationRateList) { MdcUtilizationResultDto dto = new MdcUtilizationResultDto(); dto.setEquipmentId(equipmentId); dto.setEquipmentName(equipmentName); dto.setEquipmentType(equipmentType); dto.setTheDate(date); List runningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSection(equipmentId, startTime.getTime(), endTime.getTime()); if (runningSections != null && !runningSections.isEmpty()) { // 时间修正 runningSections.get(0).setStartTime(startTime); if (runningSections.size() > 1) { runningSections.get(runningSections.size() - 1).setEndTime(endTime); } else { runningSections.get(0).setEndTime(endTime); } // 利用率计算 BigDecimal processLong = new BigDecimal("0"); for (MdcEquipmentRunningSection runningSection : runningSections) { if (runningSection.getStatus() == 3) { long duration = DateUtils.differentSecond(runningSection.getStartTime(), runningSection.getEndTime()); processLong = processLong.add(new BigDecimal(duration)); } } BigDecimal totalLong = new BigDecimal(DateUtils.differentSecond(startTime, endTime)); BigDecimal utilizationRate = processLong.divide(totalLong, 6, RoundingMode.HALF_UP); dto.setUtilizationRate(utilizationRate); } 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; } private StatisticalAnalysisVo efficiencyStatisticalRate(List efficiencyList) { StatisticalAnalysisVo vo = new StatisticalAnalysisVo(); for (MdcEfficiencyDto mdcEfficiencyDto : efficiencyList) { vo.setUtilizationRate(vo.getUtilizationRate().add(mdcEfficiencyDto.getUtilizationRate())); vo.setOpenRate(vo.getOpenRate().add(mdcEfficiencyDto.getOpenRate())); vo.setOpenLong(vo.getOpenLong().add(mdcEfficiencyDto.getOpenLong())); vo.setProcessLong(vo.getProcessLong().add(mdcEfficiencyDto.getProcessLong())); vo.setWaitLong(vo.getWaitLong().add(mdcEfficiencyDto.getWaitLong())); vo.setCloseLong(vo.getCloseLong().add(mdcEfficiencyDto.getCloseLong())); } return vo; } private MdcEfficiencyResultDto efficiencyRate(List efficiencyList, String date, String equipmentId, List mdcUtilizationRateList, MdcEfficiencyResultDto efficiencyResultDto) { MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto(); if (efficiencyList != null && !efficiencyList.isEmpty()) { for (MdcEfficiencyDto efficiencyDto : efficiencyList) { if (date.equals(efficiencyDto.getTheDate()) && efficiencyDto.getEquipmentId().equals(equipmentId)) { mdcEfficiencyResultDto.setTheDate(efficiencyDto.getTheDate()); mdcEfficiencyResultDto.setProcessLong(efficiencyDto.getProcessLong()); mdcEfficiencyResultDto.setUtilizationRate(efficiencyDto.getUtilizationRate()); mdcEfficiencyResultDto.setStartRate(efficiencyDto.getStartRate()); mdcEfficiencyResultDto.setOpenRate(efficiencyDto.getOpenRate()); mdcEfficiencyResultDto.setOpenLong(efficiencyDto.getOpenLong()); mdcEfficiencyResultDto.setWaitLong(efficiencyDto.getWaitLong()); mdcEfficiencyResultDto.setCloseLong(efficiencyDto.getCloseLong()); mdcEfficiencyResultDto.setFaultLong(efficiencyDto.getFaultLong()); mdcEfficiencyResultDto.setFaultRate(efficiencyDto.getFaultRate()); mdcEfficiencyResultDto.setRemoveFaultRunLong(efficiencyDto.getRemoveFaultRunLong()); long rate = efficiencyDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue(); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); } } } } } else { mdcEfficiencyResultDto.setTheDate(date); mdcEfficiencyResultDto.setProcessLong(new BigDecimal("0")); mdcEfficiencyResultDto.setUtilizationRate(new BigDecimal("0")); mdcEfficiencyResultDto.setStartRate(new BigDecimal("0")); mdcEfficiencyResultDto.setOpenRate(new BigDecimal("0")); mdcEfficiencyResultDto.setOpenLong(new BigDecimal("0")); mdcEfficiencyResultDto.setWaitLong(new BigDecimal("0")); mdcEfficiencyResultDto.setCloseLong(new BigDecimal("0")); mdcEfficiencyResultDto.setFaultLong(new BigDecimal("0")); mdcEfficiencyResultDto.setFaultRate(new BigDecimal("0")); mdcEfficiencyResultDto.setRemoveFaultRunLong(new BigDecimal("0")); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); } } } if (StringUtils.isBlank(mdcEfficiencyResultDto.getColor())) { mdcEfficiencyResultDto.setTheDate(date); mdcEfficiencyResultDto.setProcessLong(new BigDecimal("0")); mdcEfficiencyResultDto.setUtilizationRate(new BigDecimal("0")); mdcEfficiencyResultDto.setStartRate(new BigDecimal("0")); mdcEfficiencyResultDto.setOpenRate(new BigDecimal("0")); mdcEfficiencyResultDto.setOpenLong(new BigDecimal("0")); mdcEfficiencyResultDto.setWaitLong(new BigDecimal("0")); mdcEfficiencyResultDto.setCloseLong(new BigDecimal("0")); mdcEfficiencyResultDto.setFaultLong(new BigDecimal("0")); mdcEfficiencyResultDto.setFaultRate(new BigDecimal("0")); mdcEfficiencyResultDto.setRemoveFaultRunLong(new BigDecimal("0")); for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) { if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) { mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor()); } } } efficiencyResultDto.setProcessLong(efficiencyResultDto.getProcessLong().add(mdcEfficiencyResultDto.getProcessLong())); efficiencyResultDto.setUtilizationRate(efficiencyResultDto.getUtilizationRate().add(mdcEfficiencyResultDto.getUtilizationRate())); efficiencyResultDto.setStartRate(efficiencyResultDto.getStartRate().add(mdcEfficiencyResultDto.getStartRate())); efficiencyResultDto.setOpenRate(efficiencyResultDto.getOpenRate().add(mdcEfficiencyResultDto.getOpenRate())); efficiencyResultDto.setOpenLong(efficiencyResultDto.getOpenLong().add(mdcEfficiencyResultDto.getOpenLong())); efficiencyResultDto.setWaitLong(efficiencyResultDto.getWaitLong().add(mdcEfficiencyResultDto.getWaitLong())); efficiencyResultDto.setCloseLong(efficiencyResultDto.getCloseLong().add(mdcEfficiencyResultDto.getCloseLong())); efficiencyResultDto.setFaultLong(efficiencyResultDto.getFaultLong().add(mdcEfficiencyResultDto.getFaultLong())); efficiencyResultDto.setFaultRate(efficiencyResultDto.getFaultRate().add(mdcEfficiencyResultDto.getFaultRate())); efficiencyResultDto.setRemoveFaultRunLong(efficiencyResultDto.getRemoveFaultRunLong().add(mdcEfficiencyResultDto.getRemoveFaultRunLong())); return mdcEfficiencyResultDto; } }