From f3d1fadf7e14d7446c3e80e31ac6d1c4eba62624 Mon Sep 17 00:00:00 2001
From: “linengliang” <vanSuperEnergy@163.com>
Date: 星期四, 14 十二月 2023 15:27:22 +0800
Subject: [PATCH] xiaobug
---
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java | 1101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 1,065 insertions(+), 36 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 2fca558..5d64d87 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
@@ -5,16 +5,11 @@
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.modules.mdc.dto.*;
-import org.jeecg.modules.mdc.entity.MdcEquipment;
-import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo;
-import org.jeecg.modules.mdc.entity.MdcShiftSub;
-import org.jeecg.modules.mdc.entity.MdcUtilizationRate;
+import org.jeecg.modules.mdc.entity.*;
import org.jeecg.modules.mdc.mapper.MdcEfficiencyReportMapper;
-import org.jeecg.modules.mdc.service.IMdcEquipmentService;
-import org.jeecg.modules.mdc.service.IMdcShiftSubService;
-import org.jeecg.modules.mdc.service.IMdcUtilizationRateService;
-import org.jeecg.modules.mdc.service.MdcEfficiencyReportService;
+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;
@@ -24,6 +19,10 @@
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.stream.Collectors;
@@ -51,6 +50,9 @@
@Resource
private IMdcShiftSubService mdcShiftSubService;
+
+ @Resource
+ private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService;
/**
* 鍒╃敤鐜囨姤琛�
@@ -92,20 +94,29 @@
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 {
+ if (StringUtils.isNotEmpty(vo.getEquipmentType())) {
+ List<String> equipmentList = mdcEquipmentService.listEquipmentId(vo.getEquipmentType(), vo.getEquipmentIdList());
+ if (equipmentList != null && !equipmentList.isEmpty()) {
+ vo.setEquipmentIdList(equipmentList);
+ } else {
+ result.setMdcEfficiencyList(listDtos);
+ return result;
+ }
+ }
// 鏌ヨ鍒╃敤鐜囨暟鎹�
List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo);
- // 鍒╃敤鐜囩瓑绾�
- List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
-
// 灏佽缁撴灉
if ("2".equals(vo.getTypeTree())) {
// 閮ㄩ棬灞傜骇
List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
// 鏌ヨ鎵�鏈夐儴闂ㄤ俊鎭�
- List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+ List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartOrder));
for (MdcEquDepDto mdcEquDepDto : equipmentList) {
MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
@@ -157,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);
}
@@ -167,7 +205,7 @@
// 浜х嚎灞傜骇
List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
// 鏌ヨ鎵�鏈変骇绾夸俊鎭�
- List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+ List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder));
for (MdcEquProDto mdcEquProDto : equipmentList) {
MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
@@ -218,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);
}
}
-
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;
}
@@ -272,20 +442,30 @@
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 {
+ if (StringUtils.isNotEmpty(vo.getEquipmentType())) {
+ List<String> equipmentList = mdcEquipmentService.listEquipmentId(vo.getEquipmentType(), vo.getEquipmentIdList());
+ if (equipmentList != null && !equipmentList.isEmpty()) {
+ vo.setEquipmentIdList(equipmentList);
+ } else {
+ result.setMdcEfficiencyList(listDtos);
+ return result;
+ }
+ }
// 鏌ヨ鍒╃敤鐜囨暟鎹�
List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyPOList(vo);
- // 鍒╃敤鐜囩瓑绾�
- List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("kdl");
// 灏佽缁撴灉
if ("2".equals(vo.getTypeTree())) {
// 閮ㄩ棬灞傜骇
List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
// 鏌ヨ鎵�鏈夐儴闂ㄤ俊鎭�
- List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+ List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartOrder));
for (MdcEquDepDto mdcEquDepDto : equipmentList) {
MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
@@ -337,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);
}
@@ -347,7 +554,7 @@
// 浜х嚎灞傜骇
List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
// 鏌ヨ鎵�鏈変骇绾夸俊鎭�
- List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+ List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder));
for (MdcEquProDto mdcEquProDto : equipmentList) {
MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
@@ -398,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);
}
}
-
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;
}
@@ -449,14 +788,25 @@
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);
if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
result.setMdcEfficiencyList(listDtos);
} else {
- // 鐝鍒╃敤鐜囩瓑绾�
- List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("bclyl");
+ if (StringUtils.isNotEmpty(vo.getEquipmentType())) {
+ List<String> equipmentList = mdcEquipmentService.listEquipmentId(vo.getEquipmentType(), vo.getEquipmentIdList());
+ if (equipmentList != null && !equipmentList.isEmpty()) {
+ vo.setEquipmentIdList(equipmentList);
+ } else {
+ result.setMdcEfficiencyList(listDtos);
+ return result;
+ }
+ }
+
// 鐝鍒╃敤鐜囨暟鎹�
List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList = mdcEfficiencyReportMapper.efficiencyShiftSumList(vo);
@@ -465,7 +815,7 @@
// 閮ㄩ棬灞傜骇
List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
// 鏌ヨ鎵�鏈夐儴闂ㄤ俊鎭�
- List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+ List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartOrder));
// 鐝鍚嶇О鏄剧ず澶勭悊
String shiftSubName = "";
if (StringUtils.isBlank(vo.getShiftId())) {
@@ -538,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);
}
@@ -548,7 +925,7 @@
// 浜х嚎灞傜骇
List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
// 鏌ヨ鎵�鏈変骇绾夸俊鎭�
- List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+ List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder));
// 鐝鍚嶇О鏄剧ず澶勭悊
String shiftSubName = "";
@@ -621,20 +998,154 @@
}
}
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);
}
}
+// 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) {
@@ -646,8 +1157,9 @@
mdcEfficiencyShiftResultDto.setOpenLong(equipmentStatisticalShiftInfo.getOpenLong());
mdcEfficiencyShiftResultDto.setWaitLong(equipmentStatisticalShiftInfo.getWaitLong());
mdcEfficiencyShiftResultDto.setOpenRate(equipmentStatisticalShiftInfo.getOpenLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, BigDecimal.ROUND_HALF_UP));
+ long rate = mdcEfficiencyShiftResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
- if (mdcEfficiencyShiftResultDto.getUtilizationRate().longValue() * 100 >= mdcUtilizationRate.getMinimumRange() && mdcEfficiencyShiftResultDto.getUtilizationRate().longValue() * 100 < mdcUtilizationRate.getMaximumRange()) {
+ if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
}
}
@@ -668,6 +1180,28 @@
}
}
}
+ 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;
}
@@ -687,6 +1221,7 @@
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);
}
@@ -747,15 +1282,487 @@
}
result = this.efficiencyStatisticalRate(efficiencyList);
if (result.getOpenRate().compareTo(new BigDecimal("0")) > 0) {
- result.setOpenRate(result.getOpenRate().multiply(new BigDecimal("100")).divide(new BigDecimal(equipmentIds.size()), 2, BigDecimal.ROUND_HALF_UP));
+ 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(equipmentIds.size()), 2, BigDecimal.ROUND_HALF_UP));
+ 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<String> 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<MdcComAnaDto> resultDtos = mdcEfficiencyReportMapper.comparativeAnalysis(vo);
+ if (resultDtos != null && !resultDtos.isEmpty()) {
+ // 缁勮鍥惧舰鍜屼华琛ㄦ暟鎹�
+ List<GraphicsDto> 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<UtilizationRateDto> tops = new ArrayList<>();
+ List<UtilizationRateDto> 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<String> 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<MdcEquipment>().eq(MdcEquipment::getEquipmentId, vo.getEquipmentId()));
+ result.setEquipmentName(mdcEquipment.getEquipmentName());
+ List<String> 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<DayRateDto> 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<MdcEquipmentRunningSection> 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<String> 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<MdcEquipment>().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<String> dateList = DateUtils.getDatesStringLists(start, end);
+ result.setDateList(dateList);
+ List<String> datesStringList = DateUtils.getDatesStringList(start, end);
+ List<DayRateDto> 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<MdcEquipmentRunningSection> 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<MdcUtilizationRateListDto> listDtos = new ArrayList<>();
+ List<String> 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<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartDate()), DateUtils.getShortDate2(vo.getEndDate()));
+ List<String> 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<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
+
+ if ("2".equals(vo.getTypeTree())) {
+ // 閮ㄩ棬灞傜骇
+ List<MdcEquDepDto> 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<MdcUtilizationResultDto> 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<MdcEquProDto> 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<MdcUtilizationResultDto> 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<MdcUtilizationRateListDto> listDtos = new ArrayList<>();
+ List<String> 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<String> 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<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
+ if ("2".equals(vo.getTypeTree())) {
+ // 閮ㄩ棬灞傜骇
+ List<MdcEquDepDto> 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<MdcUtilizationResultDto> list = new ArrayList<>();
+ for (String date : dateList) {
+ Date startTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
+ Date endTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
+ endTime = DateUtils.addDays(endTime, 1);
+ list.add(this.utilizationRate(mdcEquDepDto.getEquipmentId(), mdcEquDepDto.getEquipmentName(), mdcEquDepDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList));
+ }
+ mdcEfficiencyListDto.setDataList(list);
+ listDtos.add(mdcEfficiencyListDto);
+ }
+
+ } else {
+ // 浜х嚎灞傜骇
+ List<MdcEquProDto> 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<MdcUtilizationResultDto> list = new ArrayList<>();
+ for (String date : dateList) {
+ Date startTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
+ Date endTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
+ endTime = DateUtils.addDays(endTime, 1);
+ list.add(this.utilizationRate(mdcEquProDto.getEquipmentId(), mdcEquProDto.getEquipmentName(), mdcEquProDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList));
+ }
+ mdcEfficiencyListDto.setDataList(list);
+ listDtos.add(mdcEfficiencyListDto);
+ }
+ }
+ result.setMdcEfficiencyList(listDtos);
+ }
+
+ return result;
+ }
+
+ 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);
+ dto.setEquipmentName(equipmentName);
+ dto.setEquipmentType(equipmentType);
+ dto.setTheDate(date);
+ List<MdcEquipmentRunningSection> 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, BigDecimal.ROUND_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<MdcEfficiencyDto> efficiencyList) {
@@ -771,7 +1778,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) {
@@ -784,8 +1791,9 @@
mdcEfficiencyResultDto.setOpenLong(efficiencyDto.getOpenLong());
mdcEfficiencyResultDto.setWaitLong(efficiencyDto.getWaitLong());
mdcEfficiencyResultDto.setCloseLong(efficiencyDto.getCloseLong());
+ long rate = efficiencyDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
- if (efficiencyDto.getUtilizationRate().longValue() * 100 >= mdcUtilizationRate.getMinimumRange() && efficiencyDto.getUtilizationRate().longValue() * 100 < mdcUtilizationRate.getMaximumRange()) {
+ if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
}
}
@@ -806,7 +1814,28 @@
}
}
}
-
+ 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"));
+ 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()));
return mdcEfficiencyResultDto;
}
--
Gitblit v1.9.3