From cf89583e4dd54632a0f11c06b859315c03958820 Mon Sep 17 00:00:00 2001 From: Lius <Lius2225@163.com> Date: 星期三, 17 一月 2024 17:36:41 +0800 Subject: [PATCH] 设备运行状态及利用率预警任务 --- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java | 544 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 525 insertions(+), 19 deletions(-) diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java index 94e7a96..5ba142f 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java @@ -19,6 +19,7 @@ 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; @@ -93,6 +94,9 @@ List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime())); result.setDates(dates); + // 鍒╃敤鐜囩瓑绾� + List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl"); + if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { result.setMdcEfficiencyList(listDtos); } else { @@ -107,9 +111,6 @@ } // 鏌ヨ鍒╃敤鐜囨暟鎹� List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo); - // 鍒╃敤鐜囩瓑绾� - List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl"); - // 灏佽缁撴灉 if ("2".equals(vo.getTypeTree())) { // 閮ㄩ棬灞傜骇 @@ -167,9 +168,36 @@ } } List<MdcEfficiencyResultDto> 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)); + 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.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); } @@ -228,17 +256,149 @@ } } List<MdcEfficiencyResultDto> 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)); + 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.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); } } - //listDtos.sort(((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getLevel3(), o2.getLevel3()))); 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<MdcEfficiencyResultDto> calculateAverage(List<MdcEfficiencyListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) { + List<MdcEfficiencyResultDto> result = new ArrayList<>(); + List<MdcEfficiencyResultDto> 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()))).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<MdcEfficiencyResultDto> calculateTotal(List<MdcEfficiencyListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) { + List<MdcEfficiencyResultDto> result = new ArrayList<>(); + List<MdcEfficiencyResultDto> 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()))).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; } @@ -282,6 +442,9 @@ List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime())); result.setDates(dates); + // 鍒╃敤鐜囩瓑绾� + List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("kdl"); + if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { result.setMdcEfficiencyList(listDtos); } else { @@ -296,8 +459,6 @@ } // 鏌ヨ鍒╃敤鐜囨暟鎹� List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyPOList(vo); - // 鍒╃敤鐜囩瓑绾� - List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("kdl"); // 灏佽缁撴灉 if ("2".equals(vo.getTypeTree())) { @@ -356,9 +517,36 @@ } } List<MdcEfficiencyResultDto> 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)); + 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); } @@ -417,17 +605,149 @@ } } List<MdcEfficiencyResultDto> 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)); + 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); } } -// listDtos.sort(((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getLevel3(), o2.getLevel3()))); 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<MdcEfficiencyResultDto> calculateOpenAverage(List<MdcEfficiencyListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) { + List<MdcEfficiencyResultDto> result = new ArrayList<>(); + List<MdcEfficiencyResultDto> 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()))).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.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<MdcEfficiencyResultDto> calculateOpenTotal(List<MdcEfficiencyListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) { + List<MdcEfficiencyResultDto> result = new ArrayList<>(); + List<MdcEfficiencyResultDto> 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()))).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.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; } @@ -468,6 +788,9 @@ vo.setEquipmentIdList(equipmentIds); } + // 鐝鍒╃敤鐜囩瓑绾� + List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("bclyl"); + List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime())); result.setDates(dates); @@ -483,8 +806,7 @@ return result; } } - // 鐝鍒╃敤鐜囩瓑绾� - List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("bclyl"); + // 鐝鍒╃敤鐜囨暟鎹� List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList = mdcEfficiencyReportMapper.efficiencyShiftSumList(vo); @@ -566,9 +888,36 @@ } } List<MdcEfficiencyShiftResultDto> 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)); + 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); } @@ -649,9 +998,36 @@ } } List<MdcEfficiencyShiftResultDto> 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)); + 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); } @@ -659,22 +1035,133 @@ // 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<MdcEfficiencyShiftResultDto> calculateShiftAverage(List<MdcEfficiencyShiftListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) { + List<MdcEfficiencyShiftResultDto> result = new ArrayList<>(); + List<MdcEfficiencyShiftResultDto> 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<MdcEfficiencyShiftResultDto> calculateShiftTotal(List<MdcEfficiencyShiftListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) { + List<MdcEfficiencyShiftResultDto> result = new ArrayList<>(); + List<MdcEfficiencyShiftResultDto> 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<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList) { + private MdcEfficiencyShiftResultDto efficiencyShiftRate(List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList, String date, String equipmentId, List<MdcUtilizationRate> 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()); - mdcEfficiencyShiftResultDto.setUtilizationRate(equipmentStatisticalShiftInfo.getProcessLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, BigDecimal.ROUND_HALF_UP)); + 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()); - mdcEfficiencyShiftResultDto.setOpenRate(equipmentStatisticalShiftInfo.getOpenLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, BigDecimal.ROUND_HALF_UP)); + + 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()) { @@ -713,6 +1200,13 @@ } } } + 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; } @@ -1235,6 +1729,11 @@ return result; } + @Override + public List<BigDecimal> getEfficiencyRate(String equipmentId, String date) { + return mdcEfficiencyReportMapper.getEfficiencyRate(equipmentId, date); + } + private MdcUtilizationResultDto utilizationRate(String equipmentId, String equipmentName, String equipmentType, Date startTime, Date endTime, String date, List<MdcUtilizationRate> mdcUtilizationRateList) { MdcUtilizationResultDto dto = new MdcUtilizationResultDto(); dto.setEquipmentId(equipmentId); @@ -1289,7 +1788,7 @@ return vo; } - private MdcEfficiencyResultDto efficiencyRate(List<MdcEfficiencyDto> efficiencyList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList) { + private MdcEfficiencyResultDto efficiencyRate(List<MdcEfficiencyDto> efficiencyList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList, MdcEfficiencyResultDto efficiencyResultDto) { MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto(); if (efficiencyList != null && !efficiencyList.isEmpty()) { for (MdcEfficiencyDto efficiencyDto : efficiencyList) { @@ -1340,6 +1839,13 @@ } } } + 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())); return mdcEfficiencyResultDto; } -- Gitblit v1.9.3