From 67696c754ea8799a9f0de646bba61e55d8981833 Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期一, 14 七月 2025 11:59:33 +0800
Subject: [PATCH] art:技术状态鉴定工单,查询,新增接口添加
---
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java | 1412 ++++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 1,211 insertions(+), 201 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..f0fb0db 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
@@ -2,12 +2,18 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.shiro.SecurityUtils;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.mdc.dto.*;
import org.jeecg.modules.mdc.entity.*;
import org.jeecg.modules.mdc.mapper.MdcEfficiencyReportMapper;
import org.jeecg.modules.mdc.service.*;
+import org.jeecg.modules.mdc.util.CustomExcelView;
import org.jeecg.modules.mdc.util.DateUtils;
import org.jeecg.modules.mdc.vo.MdcUtilizationRateDto;
import org.jeecg.modules.mdc.vo.*;
@@ -15,10 +21,15 @@
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.service.IMdcProductionService;
import org.jeecg.modules.system.service.ISysDepartService;
+import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
+import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
@@ -53,6 +64,9 @@
@Resource
private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService;
+ @Resource
+ private IMdcEquipmentStatisticalInfoService mdcEquipmentStatisticalInfoService;
+
/**
* 鍒╃敤鐜囨姤琛�
*
@@ -64,181 +78,375 @@
public MdcEfficiencyVo efficiencyList(String userId, MdcEfficiencyReportQueryVo vo) {
MdcEfficiencyVo result = new MdcEfficiencyVo();
List<MdcEfficiencyListDto> 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);
- }
- }
+
+ // 鑾峰彇璁惧 ID 鍒楄〃
+ List<String> equipmentIds = getEquipmentIds(userId, vo);
if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
vo.setEquipmentIdList(equipmentIds);
}
+ // 鑾峰彇鏃ユ湡鍒楄〃
List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime()));
result.setDates(dates);
+ // 鑾峰彇璁惧鍒╃敤鐜囧垪琛�
+ List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
+
+ // 濡傛灉璁惧 ID 鍒楄〃涓虹┖锛岀洿鎺ヨ繑鍥�
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()).orderByAsc(SysDepart::getDepartOrder));
-
- for (MdcEquDepDto mdcEquDepDto : equipmentList) {
- MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
- mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
- mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
- mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
- switch (mdcEquDepDto.getOrgType()) {
- case "1":
- mdcEfficiencyListDto.setLevel1(mdcEquDepDto.getDepartName());
- break;
- case "2":
- mdcEfficiencyListDto.setLevel2(mdcEquDepDto.getDepartName());
- break;
- case "3":
- mdcEfficiencyListDto.setLevel3(mdcEquDepDto.getDepartName());
- break;
- default:
- }
-
- SysDepart sysDepart = departList.stream().filter(depart -> depart.getId().equals(mdcEquDepDto.getParentId())).findAny().orElse(null);
- if (sysDepart != null) {
- switch (sysDepart.getOrgType()) {
- case "1":
- mdcEfficiencyListDto.setLevel1(sysDepart.getDepartName());
- break;
- case "2":
- mdcEfficiencyListDto.setLevel2(sysDepart.getDepartName());
- break;
- case "3":
- mdcEfficiencyListDto.setLevel3(sysDepart.getDepartName());
- break;
- default:
- }
- if (StringUtils.isNotEmpty(sysDepart.getParentId())) {
- departList.stream().filter(depart -> depart.getId().equals(sysDepart.getParentId())).findAny().ifPresent(depart1 -> {
- switch (depart1.getOrgType()) {
- case "1":
- mdcEfficiencyListDto.setLevel1(depart1.getDepartName());
- break;
- case "2":
- mdcEfficiencyListDto.setLevel2(depart1.getDepartName());
- break;
- case "3":
- mdcEfficiencyListDto.setLevel3(depart1.getDepartName());
- break;
- default:
- }
- });
- }
- }
- List<MdcEfficiencyResultDto> list = new ArrayList<>();
- for (String date : dates) {
- list.add(this.efficiencyRate(efficiencyList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList));
- }
- mdcEfficiencyListDto.setDataList(list);
- listDtos.add(mdcEfficiencyListDto);
- }
- } else {
- // 浜х嚎灞傜骇
- List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
- // 鏌ヨ鎵�鏈変骇绾夸俊鎭�
- 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();
- mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
- mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
- mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
- switch (mdcEquProDto.getOrgType()) {
- case "1":
- mdcEfficiencyListDto.setLevel1(mdcEquProDto.getProductionName());
- break;
- case "2":
- mdcEfficiencyListDto.setLevel2(mdcEquProDto.getProductionName());
- break;
- case "3":
- mdcEfficiencyListDto.setLevel3(mdcEquProDto.getProductionName());
- break;
- default:
- }
- MdcProduction mdcProduction = productionList.stream().filter(production -> production.getId().equals(mdcEquProDto.getParentId())).findAny().orElse(null);
- if (mdcProduction != null) {
- switch (mdcProduction.getOrgType()) {
- case "1":
- mdcEfficiencyListDto.setLevel1(mdcProduction.getProductionName());
- break;
- case "2":
- mdcEfficiencyListDto.setLevel2(mdcProduction.getProductionName());
- break;
- case "3":
- mdcEfficiencyListDto.setLevel3(mdcProduction.getProductionName());
- break;
- default:
- }
- if (StringUtils.isNotEmpty(mdcProduction.getParentId())) {
- productionList.stream().filter(production -> production.getId().equals(mdcProduction.getParentId())).findAny().ifPresent(production1 -> {
- switch (production1.getOrgType()) {
- case "1":
- mdcEfficiencyListDto.setLevel1(production1.getProductionName());
- break;
- case "2":
- mdcEfficiencyListDto.setLevel2(production1.getProductionName());
- break;
- case "3":
- mdcEfficiencyListDto.setLevel3(production1.getProductionName());
- break;
- default:
- }
- });
- }
- }
- List<MdcEfficiencyResultDto> list = new ArrayList<>();
- for (String date : dates) {
- list.add(this.efficiencyRate(efficiencyList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList));
- }
- mdcEfficiencyListDto.setDataList(list);
- listDtos.add(mdcEfficiencyListDto);
- }
- }
- //listDtos.sort(((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getLevel3(), o2.getLevel3())));
- result.setMdcEfficiencyList(listDtos);
+ return result;
}
+ // 鑾峰彇璁惧 ID 鍒楄〃
+ List<String> equipmentIdList = mdcEquipmentService.listEquipmentId(vo);
+ if (equipmentIdList == null || equipmentIdList.isEmpty()) {
+ result.setMdcEfficiencyList(listDtos);
+ return result;
+ }
+
+ vo.setEquipmentIdList(equipmentIdList);
+
+ // 鏌ヨ璁惧鏁堢巼鏁版嵁
+ List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo);
+
+ // 鏍规嵁绫诲瀷鏍戝鐞嗕笉鍚岀殑灞傜骇
+ if ("2".equals(vo.getTypeTree())) {
+ // 閮ㄩ棬灞傜骇
+ listDtos = processDepartmentLevel(vo, efficiencyList, dates, mdcUtilizationRateList);
+ } else {
+ // 浜х嚎灞傜骇
+ listDtos = processProductionLevel(vo, efficiencyList, dates, mdcUtilizationRateList);
+ }
+
+ result.setMdcEfficiencyList(listDtos);
+
+ // 娣诲姞鍚堣鍊煎拰骞冲潎鍊�
+ addSummaryAndAverage(result, listDtos, mdcUtilizationRateList);
+
+ return result;
+ }
+
+ /**
+ * 鑾峰彇璁惧 ID 鍒楄〃
+ */
+ private List<String> getEquipmentIds(String userId, MdcEfficiencyReportQueryVo vo) {
+ if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) {
+ return "2".equals(vo.getTypeTree())
+ ? mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId())
+ : mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId());
+ } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) {
+ vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId()));
+ return Collections.emptyList();
+ } else {
+ return "2".equals(vo.getTypeTree())
+ ? mdcEquipmentService.getEquipmentIdsByDepart(userId, null)
+ : mdcEquipmentService.getEquipmentIdsProduction(userId, null);
+ }
+ }
+
+ /**
+ * 澶勭悊閮ㄩ棬灞傜骇
+ */
+ private List<MdcEfficiencyListDto> processDepartmentLevel(MdcEfficiencyReportQueryVo vo, List<MdcEfficiencyDto> efficiencyList, List<String> dates, List<MdcUtilizationRate> mdcUtilizationRateList) {
+ List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
+ List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>()
+ .ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString())
+ .orderByAsc(SysDepart::getDepartOrder));
+
+ return equipmentList.stream().map(mdcEquDepDto -> {
+ MdcEfficiencyListDto mdcEfficiencyListDto = createEfficiencyListDto(mdcEquDepDto);
+ setDepartmentLevels(mdcEfficiencyListDto, mdcEquDepDto, departList);
+ mdcEfficiencyListDto.setDataList(processEfficiencyData(efficiencyList, dates, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList));
+ return mdcEfficiencyListDto;
+ }).collect(Collectors.toList());
+ }
+
+ /**
+ * 澶勭悊浜х嚎灞傜骇
+ */
+ private List<MdcEfficiencyListDto> processProductionLevel(MdcEfficiencyReportQueryVo vo, List<MdcEfficiencyDto> efficiencyList, List<String> dates, List<MdcUtilizationRate> mdcUtilizationRateList) {
+ List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
+ List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>()
+ .ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString())
+ .orderByAsc(MdcProduction::getProductionOrder));
+
+ return equipmentList.stream().map(mdcEquProDto -> {
+ MdcEfficiencyListDto mdcEfficiencyListDto = createEfficiencyListDto(mdcEquProDto);
+ setProductionLevels(mdcEfficiencyListDto, mdcEquProDto, productionList);
+ mdcEfficiencyListDto.setDataList(processEfficiencyData(efficiencyList, dates, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList));
+ return mdcEfficiencyListDto;
+ }).collect(Collectors.toList());
+ }
+
+ /**
+ * 鍒涘缓 MdcEfficiencyListDto 瀵硅薄
+ */
+ private MdcEfficiencyListDto createEfficiencyListDto(MdcEquDepDto mdcEquDepDto) {
+ MdcEfficiencyListDto dto = new MdcEfficiencyListDto();
+ dto.setEquipmentId(mdcEquDepDto.getEquipmentId());
+ dto.setEquipmentName(mdcEquDepDto.getEquipmentName());
+ dto.setEquipmentType(mdcEquDepDto.getEquipmentType());
+ dto.setEquipmentModel(mdcEquDepDto.getEquipmentModel());
+ return dto;
+ }
+
+ private MdcEfficiencyListDto createEfficiencyListDto(MdcEquProDto mdcEquProDto) {
+ MdcEfficiencyListDto dto = new MdcEfficiencyListDto();
+ dto.setEquipmentId(mdcEquProDto.getEquipmentId());
+ dto.setEquipmentName(mdcEquProDto.getEquipmentName());
+ dto.setEquipmentType(mdcEquProDto.getEquipmentType());
+ dto.setEquipmentModel(mdcEquProDto.getEquipmentModel());
+ return dto;
+ }
+
+ /**
+ * 璁剧疆閮ㄩ棬灞傜骇淇℃伅
+ */
+ private void setDepartmentLevels(MdcEfficiencyListDto dto, MdcEquDepDto mdcEquDepDto, List<SysDepart> departList) {
+ switch (mdcEquDepDto.getOrgType()) {
+ case "1":
+ dto.setLevel1(mdcEquDepDto.getDepartName());
+ break;
+ case "2":
+ dto.setLevel2(mdcEquDepDto.getDepartName());
+ break;
+ case "3":
+ dto.setLevel3(mdcEquDepDto.getDepartName());
+ break;
+ }
+
+ Optional<SysDepart> sysDepart = departList.stream().filter(depart -> depart.getId().equals(mdcEquDepDto.getParentId())).findAny();
+ sysDepart.ifPresent(depart -> {
+ switch (depart.getOrgType()) {
+ case "1":
+ dto.setLevel1(depart.getDepartName());
+ break;
+ case "2":
+ dto.setLevel2(depart.getDepartName());
+ break;
+ case "3":
+ dto.setLevel3(depart.getDepartName());
+ break;
+ }
+ if (StringUtils.isNotEmpty(depart.getParentId())) {
+ departList.stream().filter(d -> d.getId().equals(depart.getParentId())).findAny().ifPresent(parent -> {
+ switch (parent.getOrgType()) {
+ case "1":
+ dto.setLevel1(parent.getDepartName());
+ break;
+ case "2":
+ dto.setLevel2(parent.getDepartName());
+ break;
+ case "3":
+ dto.setLevel3(parent.getDepartName());
+ break;
+ }
+ });
+ }
+ });
+ }
+
+ /**
+ * 璁剧疆閮ㄩ棬灞傜骇淇℃伅
+ */
+ private void setProductionLevels(MdcEfficiencyListDto dto, MdcEquProDto mdcEquProDto, List<MdcProduction> productionList) {
+ switch (mdcEquProDto.getOrgType()) {
+ case "1":
+ dto.setLevel1(mdcEquProDto.getProductionName());
+ break;
+ case "2":
+ dto.setLevel2(mdcEquProDto.getProductionName());
+ break;
+ case "3":
+ dto.setLevel3(mdcEquProDto.getProductionName());
+ break;
+ }
+
+ Optional<MdcProduction> mdcProduction = productionList.stream().filter(production -> production.getId().equals(mdcEquProDto.getParentId())).findAny();
+ mdcProduction.ifPresent(production -> {
+ switch (production.getOrgType()) {
+ case "1":
+ dto.setLevel1(production.getProductionName());
+ break;
+ case "2":
+ dto.setLevel2(production.getProductionName());
+ break;
+ case "3":
+ dto.setLevel3(production.getProductionName());
+ break;
+ }
+ if (StringUtils.isNotEmpty(production.getParentId())) {
+ productionList.stream().filter(p -> p.getId().equals(production.getParentId())).findAny().ifPresent(parent -> {
+ switch (parent.getOrgType()) {
+ case "1":
+ dto.setLevel1(parent.getProductionName());
+ break;
+ case "2":
+ dto.setLevel2(parent.getProductionName());
+ break;
+ case "3":
+ dto.setLevel3(parent.getProductionName());
+ break;
+ }
+ });
+ }
+ });
+ }
+
+ /**
+ * 澶勭悊璁惧鏁堢巼鏁版嵁
+ */
+ private List<MdcEfficiencyResultDto> processEfficiencyData(List<MdcEfficiencyDto> efficiencyList, List<String> dates, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList) {
+ List<MdcEfficiencyResultDto> list = new ArrayList<>();
+ MdcEfficiencyResultDto avgDto = new MdcEfficiencyResultDto();
+ avgDto.setTheDate("骞冲潎鍊�");
+ MdcEfficiencyResultDto sumDto = new MdcEfficiencyResultDto();
+ sumDto.setTheDate("鍚堣");
+
+ for (String date : dates) {
+ MdcEfficiencyResultDto dto = efficiencyRate(efficiencyList, date, equipmentId, mdcUtilizationRateList, avgDto);
+ list.add(dto);
+ }
+
+ sumDto.setProcessLong(avgDto.getProcessLong());
+ avgDto.setProcessLong(avgDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+ avgDto.setUtilizationRate(avgDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+ sumDto.setUtilizationRate(avgDto.getUtilizationRate());
+ avgDto.setStartRate(avgDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+ sumDto.setStartRate(avgDto.getStartRate());
+ avgDto.setOpenRate(avgDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+ sumDto.setOpenRate(avgDto.getOpenRate());
+ sumDto.setOpenLong(avgDto.getOpenLong());
+ avgDto.setOpenLong(avgDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+ sumDto.setWaitLong(avgDto.getWaitLong());
+ avgDto.setWaitLong(avgDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+ sumDto.setCloseLong(avgDto.getCloseLong());
+ avgDto.setCloseLong(avgDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+
+ long rate = avgDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
+ for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
+ if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
+ avgDto.setColor(mdcUtilizationRate.getRateParameterColor());
+ sumDto.setColor(mdcUtilizationRate.getRateParameterColor());
+ }
+ }
+
+ list.add(sumDto);
+ list.add(avgDto);
+ return list;
+ }
+
+ /**
+ * 娣诲姞鍚堣鍊煎拰骞冲潎鍊�
+ */
+ private void addSummaryAndAverage(MdcEfficiencyVo result, List<MdcEfficiencyListDto> listDtos, List<MdcUtilizationRate> mdcUtilizationRateList) {
+ result.getDates().add("鍚堣");
+ result.getDates().add("骞冲潎鍊�");
+
+ MdcEfficiencyListDto sum = new MdcEfficiencyListDto();
+ sum.setLevel1("鍚堣");
+ sum.setLevel2("鍚堣");
+ sum.setLevel3("鍚堣");
+ sum.setEquipmentId("鍚堣");
+ sum.setEquipmentName("鍚堣");
+ sum.setEquipmentType("鍚堣");
+ sum.setDataList(calculateTotal(listDtos, mdcUtilizationRateList));
+
+ MdcEfficiencyListDto avg = new MdcEfficiencyListDto();
+ avg.setLevel1("骞冲潎鍊�");
+ avg.setLevel2("骞冲潎鍊�");
+ avg.setLevel3("骞冲潎鍊�");
+ avg.setEquipmentId("骞冲潎鍊�");
+ avg.setEquipmentName("骞冲潎鍊�");
+ avg.setEquipmentType("骞冲潎鍊�");
+ avg.setDataList(calculateAverage(listDtos, mdcUtilizationRateList));
+
+ result.getMdcEfficiencyList().add(sum);
+ result.getMdcEfficiencyList().add(avg);
+ }
+
+
+ /**
+ * 璁$畻骞冲潎鍊�
+ *
+ * @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,22 +490,22 @@
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<String> equipmentIdList = mdcEquipmentService.listEquipmentId(vo);
+ if (equipmentIdList != null && !equipmentIdList.isEmpty()) {
+ vo.setEquipmentIdList(equipmentIdList);
+ } else {
+ result.setMdcEfficiencyList(listDtos);
+ return result;
}
// 鏌ヨ鍒╃敤鐜囨暟鎹�
List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyPOList(vo);
- // 鍒╃敤鐜囩瓑绾�
- List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("kdl");
// 灏佽缁撴灉
if ("2".equals(vo.getTypeTree())) {
@@ -311,6 +519,7 @@
mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
+ mdcEfficiencyListDto.setEquipmentModel(mdcEquDepDto.getEquipmentModel());
switch (mdcEquDepDto.getOrgType()) {
case "1":
mdcEfficiencyListDto.setLevel1(mdcEquDepDto.getDepartName());
@@ -356,9 +565,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);
}
@@ -373,6 +609,7 @@
mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
+ mdcEfficiencyListDto.setEquipmentModel(mdcEquProDto.getEquipmentModel());
switch (mdcEquProDto.getOrgType()) {
case "1":
mdcEfficiencyListDto.setLevel1(mdcEquProDto.getProductionName());
@@ -417,17 +654,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,23 +837,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 {
- if (StringUtils.isNotEmpty(vo.getEquipmentType())) {
- List<String> equipmentList = mdcEquipmentService.listEquipmentId(vo.getEquipmentType(), vo.getEquipmentIdList());
- if (equipmentList != null && !equipmentList.isEmpty()) {
- vo.setEquipmentIdList(equipmentList);
- } else {
- result.setMdcEfficiencyList(listDtos);
- return result;
- }
+
+ List<String> equipmentIdList = mdcEquipmentService.listEquipmentIdShift(vo);
+ if (equipmentIdList != null && !equipmentIdList.isEmpty()) {
+ vo.setEquipmentIdList(equipmentIdList);
+ } else {
+ result.setMdcEfficiencyList(listDtos);
+ return result;
}
- // 鐝鍒╃敤鐜囩瓑绾�
- List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("bclyl");
+
+
// 鐝鍒╃敤鐜囨暟鎹�
List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList = mdcEfficiencyReportMapper.efficiencyShiftSumList(vo);
@@ -520,6 +891,7 @@
mdcEfficiencyShiftListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
mdcEfficiencyShiftListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
mdcEfficiencyShiftListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
+ mdcEfficiencyShiftListDto.setEquipmentModel(mdcEquDepDto.getEquipmentModel());
mdcEfficiencyShiftListDto.setShiftSubName(shiftSubName);
switch (mdcEquDepDto.getOrgType()) {
case "1":
@@ -566,9 +938,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);
}
@@ -604,6 +1003,7 @@
mdcEfficiencyShiftListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
mdcEfficiencyShiftListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
mdcEfficiencyShiftListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
+ mdcEfficiencyShiftListDto.setEquipmentModel(mdcEquProDto.getEquipmentModel());
mdcEfficiencyShiftListDto.setShiftSubName(shiftSubName);
switch (mdcEquProDto.getOrgType()) {
case "1":
@@ -649,9 +1049,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 +1086,136 @@
// 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));
+ if (equipmentStatisticalShiftInfo.getTotalLong().compareTo(BigDecimal.ZERO) == 0) {
+ mdcEfficiencyShiftResultDto.setOpenRate(BigDecimal.ZERO);
+ } else {
+ mdcEfficiencyShiftResultDto.setOpenRate(equipmentStatisticalShiftInfo.getOpenLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, RoundingMode.HALF_UP));
+ }
long rate = mdcEfficiencyShiftResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
@@ -713,6 +1254,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;
}
@@ -838,6 +1386,10 @@
if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
return result;
}
+ vo.setDeviceCategoryList(Arrays.asList(vo.getDeviceCategory().split(",")));
+ vo.setDeviceLevelList(Arrays.asList(vo.getDeviceLevel().split(",")));
+ vo.setDriveTypeList(Arrays.asList(vo.getDriveType().split(",")));
+ vo.setEquipmentTypeList(Arrays.asList(vo.getEquipmentType().split(",")));
// 鏌ヨ鍘熷鏁版嵁
List<MdcComAnaDto> resultDtos = mdcEfficiencyReportMapper.comparativeAnalysis(vo);
@@ -1094,6 +1646,17 @@
if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
result.setMdcEfficiencyList(listDtos);
} else {
+
+ MdcEfficiencyReportQueryVo vo1 = new MdcEfficiencyReportQueryVo();
+ BeanUtils.copyProperties(vo, vo1);
+ List<String> equipmentIdList = mdcEquipmentService.listEquipmentId(vo1);
+ if (equipmentIdList != null && !equipmentIdList.isEmpty()) {
+ vo.setEquipmentIdList(equipmentIdList);
+ } else {
+ result.setMdcEfficiencyList(listDtos);
+ return result;
+ }
+
// 鍒╃敤鐜囩瓑绾�
List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
@@ -1186,6 +1749,16 @@
if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
result.setMdcEfficiencyList(listDtos);
} else {
+ MdcEfficiencyReportQueryVo vo1 = new MdcEfficiencyReportQueryVo();
+ BeanUtils.copyProperties(vo, vo1);
+ List<String> equipmentIdList = mdcEquipmentService.listEquipmentId(vo1);
+ if (equipmentIdList != null && !equipmentIdList.isEmpty()) {
+ vo.setEquipmentIdList(equipmentIdList);
+ } else {
+ result.setMdcEfficiencyList(listDtos);
+ return result;
+ }
+
// 鍒╃敤鐜囩瓑绾�
List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
if ("2".equals(vo.getTypeTree())) {
@@ -1200,10 +1773,7 @@
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));
+ list.add(this.utilizationRateTrend(mdcEquDepDto.getEquipmentId(), mdcEquDepDto.getEquipmentName(), mdcEquDepDto.getEquipmentType(), date, mdcUtilizationRateList));
}
mdcEfficiencyListDto.setDataList(list);
listDtos.add(mdcEfficiencyListDto);
@@ -1220,10 +1790,7 @@
mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
List<MdcUtilizationResultDto> list = new ArrayList<>();
for (String date : dateList) {
- Date startTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
- Date endTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
- endTime = DateUtils.addDays(endTime, 1);
- list.add(this.utilizationRate(mdcEquProDto.getEquipmentId(), mdcEquProDto.getEquipmentName(), mdcEquProDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList));
+ list.add(this.utilizationRateTrend(mdcEquProDto.getEquipmentId(), mdcEquProDto.getEquipmentName(), mdcEquProDto.getEquipmentType(), date, mdcUtilizationRateList));
}
mdcEfficiencyListDto.setDataList(list);
listDtos.add(mdcEfficiencyListDto);
@@ -1233,6 +1800,442 @@
}
return result;
+ }
+
+ private MdcUtilizationResultDto utilizationRateTrend(String equipmentId, String equipmentName, String equipmentType, String date, List<MdcUtilizationRate> mdcUtilizationRateList) {
+ MdcUtilizationResultDto dto = new MdcUtilizationResultDto();
+ dto.setEquipmentId(equipmentId);
+ dto.setEquipmentName(equipmentName);
+ dto.setEquipmentType(equipmentType);
+ dto.setTheDate(date);
+ MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findMdcEquipmentStatisticalInfo(equipmentId, date);
+ if (mdcEquipmentStatisticalInfo != null) {
+ dto.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("86400"), 6, RoundingMode.HALF_UP));
+ } else {
+ dto.setUtilizationRate(new BigDecimal("0"));
+ }
+ long rate = dto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
+ for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
+ if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
+ dto.setColor(mdcUtilizationRate.getRateParameterColor());
+ }
+ }
+ if (StringUtils.isBlank(dto.getColor())) {
+ dto.setColor(mdcUtilizationRateList.get(mdcUtilizationRateList.size() - 1).getRateParameterColor());
+ }
+ return dto;
+ }
+
+ @Override
+ public List<BigDecimal> getEfficiencyRate(String equipmentId, String date) {
+ return mdcEfficiencyReportMapper.getEfficiencyRate(equipmentId, date);
+ }
+
+ /**
+ * 鍒╃敤鐜囧垪琛ㄥ鍑�
+ *
+ * @param vo
+ * @return
+ */
+ @Override
+ public ModelAndView exportEfficiencyXls(MdcEfficiencyReportQueryVo vo){
+ LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+ // 鑾峰彇璁惧 ID 鍒楄〃
+ List<String> equipmentIds = getEquipmentIds(user.getId(), vo);
+ if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+ vo.setEquipmentIdList(equipmentIds);
+ }
+
+ // 濡傛灉璁惧 ID 鍒楄〃涓虹┖锛岀洿鎺ヨ繑鍥�
+ if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+ throw new JeecgBootException("鏃犳暟鎹�");
+ }
+ // 鑾峰彇璁惧 ID 鍒楄〃
+ List<String> equipmentIdList = mdcEquipmentService.listEquipmentId(vo);
+ if (equipmentIdList == null || equipmentIdList.isEmpty()) {
+ throw new JeecgBootException("鏃犳暟鎹�");
+ }
+ vo.setEquipmentIdList(equipmentIdList);
+
+ // 3. 鍑嗗璁惧鏁版嵁
+ List<MdcEfficiencyListDto> exportData = new ArrayList<>();
+
+ // 鑾峰彇鏃ユ湡鍒楄〃骞舵寜鏈堝垎缁�
+ List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime()));
+
+ Map<String, List<String>> groupedByMonth = dates.stream()
+ .collect(Collectors.groupingBy(
+ date -> date.substring(0, 6) // 鎻愬彇骞存湀锛堝 "202405"锛�
+ ));
+ // 2. 鎻愬彇姣忔湀鐨勯灏炬棩鏈�
+ List<Map<String, Object>> monthRanges = groupedByMonth.entrySet().stream()
+ .map(entry -> {
+ List<String> monthDates = entry.getValue();
+ Map<String, Object> map = new HashMap<>();
+ map.put("startTime", monthDates.get(0));
+ map.put("endTime", monthDates.get(monthDates.size() - 1));
+ map.put("dateList", monthDates);
+ return map;
+ })
+ .collect(Collectors.toList());
+
+ for (Map<String, Object> monthRange : monthRanges) {
+ List<MdcEfficiencyListDto> listDtos = new ArrayList<>();
+ vo.setStartTime((String) monthRange.get("startTime"));
+ vo.setEndTime((String) monthRange.get("endTime"));
+ List<String> dateList = (List<String>) monthRange.get("dateList");
+ // 鏌ヨ璁惧鏁堢巼鏁版嵁
+ List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo);
+ // 澶勭悊鏁版嵁
+ // 鏍规嵁绫诲瀷鏍戝鐞嗕笉鍚岀殑灞傜骇
+ if ("2".equals(vo.getTypeTree())) {
+ // 閮ㄩ棬灞傜骇
+ listDtos = processDeLevel(vo, efficiencyList, dateList);
+ } else {
+ // 浜х嚎灞傜骇
+ listDtos = processProLevel(vo, efficiencyList, dateList);
+ }
+ if (exportData.isEmpty()) {
+ exportData.addAll(listDtos);
+ } else {
+ Map<String, MdcEfficiencyListDto> map = listDtos.stream().collect(Collectors.toMap(MdcEfficiencyListDto::getEquipmentId, a -> a, (k1, k2) -> k1));
+ exportData.forEach(mdcEfficiencyListDto -> {
+ List<MdcEfficiencyResultDto> dataList = mdcEfficiencyListDto.getDataList();
+ if (map.containsKey(mdcEfficiencyListDto.getEquipmentId())) {
+ MdcEfficiencyListDto mdcEfficiencyListDto1 = map.get(mdcEfficiencyListDto.getEquipmentId());
+ List<MdcEfficiencyResultDto> dataList1 = mdcEfficiencyListDto1.getDataList();
+ dataList.addAll(dataList1);
+ mdcEfficiencyListDto.setDataList(dataList);
+ }
+ });
+ }
+
+ }
+ // 鏁版嵁鎺掑簭
+ exportData = exportData.stream().sorted(Comparator.comparing(MdcEfficiencyListDto::getLevel2)).sorted(Comparator.comparing(MdcEfficiencyListDto::getLevel3)).collect(Collectors.toList());
+
+
+ // 1. 鍒涘缓宸ヤ綔绨垮拰宸ヤ綔琛�
+ XSSFWorkbook workbook = new XSSFWorkbook();
+ Sheet sheet = workbook.createSheet("鍒╃敤鐜囨暟鎹�");
+
+ // 3. 鍑嗗璁惧鏁版嵁
+
+ // 鍒涘缓鏍峰紡
+ CellStyle centerStyle = createCenterStyle(workbook);
+ CellStyle fixedHeaderStyle = createFixedHeaderStyle(workbook);
+ CellStyle dateHeaderStyle = createDateHeaderStyle(workbook);
+ CellStyle metricHeaderStyle = createMetricHeaderStyle(workbook);
+
+// dates.add("鍚堣");
+// dates.add("骞冲潎");
+
+ // 鍐欏叆鏍囬琛�
+ writeHeaderRows(sheet, fixedHeaderStyle, dateHeaderStyle, metricHeaderStyle, dates);
+
+ // 鍐欏叆鏁版嵁琛�
+ writeDataRows(sheet, centerStyle, exportData, dates);
+
+ // 娣诲姞鑷�傚簲鍒楀锛堟墍鏈夊垪锛屼粠0寮�濮嬪埌鏈�鍚庝竴鍒楋級
+// autoSizeAllColumns(sheet, 0, sheet.getRow(0).getLastCellNum() - 1);
+
+ // 7. 灏嗗伐浣滅翱杞崲涓哄瓧鑺傛暟缁勮緭鍑烘祦
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ try {
+ workbook.write(bos);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ // 鍏蜂綋瀹炵幇鍙兘闇�瑕佹牴鎹綘鐨勯」鐩粨鏋勮繘琛岃皟鏁�
+ ModelAndView mv = new ModelAndView(new CustomExcelView(bos.toByteArray()));
+ return mv;
+ }
+
+ /**
+ * 鑷�傚簲鎵�鏈夊垪瀹斤紙澶勭悊鍚堝苟鍗曞厓鏍硷級
+ * @param sheet 宸ヤ綔琛�
+ * @param startCol 璧峰鍒楃储寮�
+ * @param endCol 缁撴潫鍒楃储寮�
+ */
+ private void autoSizeAllColumns(Sheet sheet, int startCol, int endCol) {
+ // 鍏堝鐞嗗悎骞跺崟鍏冩牸瀵瑰垪瀹界殑褰卞搷
+ adjustMergedCells(sheet);
+
+ // 鑷姩璋冩暣鍒楀
+ for (int i = startCol; i <= endCol; i++) {
+ sheet.autoSizeColumn(i);
+ // 瑙e喅POI鑷姩鍒楀杩囩獎闂锛屽鍔犻澶栧搴︼紙鍗曚綅锛�1/256瀛楃瀹藉害锛岃繖閲屽鍔�200鐩稿綋浜庣害3涓瓧绗︼級
+ sheet.setColumnWidth(i, sheet.getColumnWidth(i) + 1800);
+ }
+ }
+
+ /**
+ * 澶勭悊鍚堝苟鍗曞厓鏍硷紝纭繚鍒楀璁$畻姝g‘
+ * 锛圥OI鐨刟utoSizeColumn瀵瑰悎骞跺崟鍏冩牸鏀寔涓嶄匠锛岄渶瑕佹墜鍔ㄥ睍寮�璁$畻锛�
+ */
+ private void adjustMergedCells(Sheet sheet) {
+ List<CellRangeAddress> mergedRegions = new ArrayList<>();
+ for (int i = 0; i < sheet.getNumMergedRegions(); i++) {
+ mergedRegions.add(sheet.getMergedRegion(i));
+ }
+
+ for (CellRangeAddress region : mergedRegions) {
+ int firstCol = region.getFirstColumn();
+ int lastCol = region.getLastColumn();
+ if (firstCol == lastCol) continue; // 鍗曞垪鍚堝苟鏃犻渶澶勭悊
+
+ // 璁$畻鍚堝苟鍖哄煙鐨勬渶澶у搴�
+ int maxWidth = 0;
+ for (int row = region.getFirstRow(); row <= region.getLastRow(); row++) {
+ Row rowData = sheet.getRow(row);
+ if (rowData == null) continue;
+
+ Cell cell = rowData.getCell(firstCol);
+ if (cell == null) continue;
+
+ int width = getCellWidth(cell);
+ if (width > maxWidth) {
+ maxWidth = width;
+ }
+ }
+
+ // 搴旂敤鍒版墍鏈夊悎骞跺垪锛堝彧璁剧疆棣栧垪瀹藉害锛孭OI浼氳嚜鍔ㄥ悓姝ュ埌鍚堝苟鍒楋級
+ sheet.setColumnWidth(firstCol, maxWidth);
+ }
+ }
+
+ /**
+ * 鑾峰彇鍗曞厓鏍煎唴瀹瑰搴︼紙鑰冭檻瀛椾綋鍜屽唴瀹癸級
+ */
+ private int getCellWidth(Cell cell) {
+ // 閫氳繃Sheet鑾峰彇Workbook锛屽吋瀹规�ф洿濂�
+ Workbook workbook = cell.getSheet().getWorkbook();
+ CellStyle style = cell.getCellStyle();
+ Font font = workbook.getFontAt(style.getFontIndex());
+ String text = cell.getStringCellValue();
+
+ // 璁$畻鏂囨湰瀹藉害锛堢矖鐣ヤ及璁★紝鍙牴鎹疄闄呭瓧浣撹皟鏁达級
+ int width = text.length() * 256;
+ if (font.getBold()) width = (int) (width * 1.2); // 鍔犵矖瀛椾綋澧炲姞20%瀹藉害
+ return width + 512; // 澧炲姞棰濆瀹藉害
+ }
+
+ /**
+ * 澶勭悊閮ㄩ棬灞傜骇
+ */
+ private List<MdcEfficiencyListDto> processDeLevel(MdcEfficiencyReportQueryVo vo, List<MdcEfficiencyDto> efficiencyList, List<String> dates) {
+ List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
+ List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>()
+ .ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString())
+ .orderByAsc(SysDepart::getDepartOrder));
+
+ return equipmentList.stream().map(mdcEquDepDto -> {
+ MdcEfficiencyListDto mdcEfficiencyListDto = createEfficiencyListDto(mdcEquDepDto);
+ setDepartmentLevels(mdcEfficiencyListDto, mdcEquDepDto, departList);
+ mdcEfficiencyListDto.setDataList(processEffData(efficiencyList, dates, mdcEquDepDto.getEquipmentId()));
+ return mdcEfficiencyListDto;
+ }).collect(Collectors.toList());
+ }
+
+ private List<MdcEfficiencyListDto> processProLevel(MdcEfficiencyReportQueryVo vo, List<MdcEfficiencyDto> efficiencyList, List<String> dates) {
+ List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
+ List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>()
+ .ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString())
+ .orderByAsc(MdcProduction::getProductionOrder));
+
+ return equipmentList.stream().map(mdcEquProDto -> {
+ MdcEfficiencyListDto mdcEfficiencyListDto = createEfficiencyListDto(mdcEquProDto);
+ setProductionLevels(mdcEfficiencyListDto, mdcEquProDto, productionList);
+ mdcEfficiencyListDto.setDataList(processEffData(efficiencyList, dates, mdcEquProDto.getEquipmentId()));
+ return mdcEfficiencyListDto;
+ }).collect(Collectors.toList());
+ }
+
+ private List<MdcEfficiencyResultDto> processEffData(List<MdcEfficiencyDto> efficiencyList, List<String> dates, String equipmentId) {
+ List<MdcEfficiencyResultDto> list = new ArrayList<>();
+// MdcEfficiencyResultDto avgDto = new MdcEfficiencyResultDto();
+// avgDto.setTheDate("骞冲潎鍊�");
+// MdcEfficiencyResultDto sumDto = new MdcEfficiencyResultDto();
+// sumDto.setTheDate("鍚堣");
+
+ for (String date : dates) {
+ MdcEfficiencyResultDto dto = effRate(efficiencyList, date, equipmentId);
+ list.add(dto);
+ }
+
+// sumDto.setProcessLong(avgDto.getProcessLong());
+// avgDto.setProcessLong(avgDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+// avgDto.setUtilizationRate(avgDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+// sumDto.setUtilizationRate(avgDto.getUtilizationRate());
+// avgDto.setStartRate(avgDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+// sumDto.setStartRate(avgDto.getStartRate());
+// avgDto.setOpenRate(avgDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+// sumDto.setOpenRate(avgDto.getOpenRate());
+// sumDto.setOpenLong(avgDto.getOpenLong());
+// avgDto.setOpenLong(avgDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+// sumDto.setWaitLong(avgDto.getWaitLong());
+// avgDto.setWaitLong(avgDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+// sumDto.setCloseLong(avgDto.getCloseLong());
+// avgDto.setCloseLong(avgDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+//
+// list.add(sumDto);
+// list.add(avgDto);
+ return list;
+ }
+
+ private MdcEfficiencyResultDto effRate(List<MdcEfficiencyDto> efficiencyList, String date, String equipmentId) {
+ MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto();
+ if (efficiencyList != null && !efficiencyList.isEmpty()) {
+ Map<String, MdcEfficiencyDto> collect = new HashMap<>();
+ efficiencyList.forEach(mdcEfficiencyDto -> {
+ if (!collect.containsKey(mdcEfficiencyDto.getEquipmentId() + "_" + mdcEfficiencyDto.getTheDate())) {
+ collect.put(mdcEfficiencyDto.getEquipmentId() + "_" + mdcEfficiencyDto.getTheDate(), mdcEfficiencyDto);
+ }
+ });
+ if (collect.containsKey(equipmentId + "_" + date)) {
+ MdcEfficiencyDto efficiencyDto = collect.get(equipmentId + "_" + date);
+ mdcEfficiencyResultDto.setTheDate(efficiencyDto.getTheDate());
+ mdcEfficiencyResultDto.setProcessLong(efficiencyDto.getProcessLong().divide(new BigDecimal("3600"), 2, RoundingMode.HALF_UP));
+ mdcEfficiencyResultDto.setUtilizationRate(efficiencyDto.getUtilizationRate().multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
+ mdcEfficiencyResultDto.setStartRate(efficiencyDto.getStartRate().multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
+ mdcEfficiencyResultDto.setOpenRate(efficiencyDto.getOpenRate().multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
+ mdcEfficiencyResultDto.setOpenLong(efficiencyDto.getOpenLong().divide(new BigDecimal("3600"), 2, RoundingMode.HALF_UP));
+ mdcEfficiencyResultDto.setWaitLong(efficiencyDto.getWaitLong().divide(new BigDecimal("3600"), 2, RoundingMode.HALF_UP));
+ mdcEfficiencyResultDto.setCloseLong(efficiencyDto.getCloseLong().divide(new BigDecimal("3600"), 2, RoundingMode.HALF_UP));
+ } else {
+ mdcEfficiencyResultDto.setTheDate(date);
+ }
+
+ } else {
+ mdcEfficiencyResultDto.setTheDate(date);
+ mdcEfficiencyResultDto.setProcessLong(new BigDecimal("0"));
+ mdcEfficiencyResultDto.setUtilizationRate(new BigDecimal("0"));
+ mdcEfficiencyResultDto.setStartRate(new BigDecimal("0"));
+ mdcEfficiencyResultDto.setOpenRate(new BigDecimal("0"));
+ mdcEfficiencyResultDto.setOpenLong(new BigDecimal("0"));
+ mdcEfficiencyResultDto.setWaitLong(new BigDecimal("0"));
+ mdcEfficiencyResultDto.setCloseLong(new BigDecimal("0"));
+ }
+ return mdcEfficiencyResultDto;
+ }
+
+ private void writeHeaderRows(Sheet sheet, CellStyle fixedHeaderStyle, CellStyle dateHeaderStyle, CellStyle metricHeaderStyle, List<String> dateList) {
+ Row titleRow1 = sheet.createRow(0);
+ Row titleRow2 = sheet.createRow(1);
+ int colIndex = 0;
+
+ // 鍐欏叆鍥哄畾鍒楁爣棰橈紙鍏徃銆佽溅闂寸瓑锛�
+ String[] fixedHeaders = {"鍏徃", "杞﹂棿", "宸ユ", "璁惧ID", "璁惧鍚嶇О", "璁惧绫诲瀷"};
+ for (int i = 0; i < fixedHeaders.length; i++) {
+ createCellWithStyle(titleRow1, colIndex, fixedHeaders[i], fixedHeaderStyle);
+ createCellWithStyle(titleRow2, colIndex, "", fixedHeaderStyle);
+ // 鍚堝苟鍗曞厓鏍硷紙璺ㄨ涓嶈法鍒楋級
+ CellRangeAddress region = new CellRangeAddress(0, 1, colIndex, colIndex);
+ sheet.addMergedRegion(region);
+ colIndex++;
+ }
+
+ // 鍐欏叆鏃ユ湡锛岃法6鍒楀悎骞�
+ for (String date : dateList) {
+ CellRangeAddress dateRegion = new CellRangeAddress(0, 0, colIndex, colIndex + 5);
+ sheet.addMergedRegion(dateRegion);
+ createCellWithStyle(titleRow1, colIndex, date, dateHeaderStyle);
+ colIndex += 6;
+ }
+
+ // 鍐欏叆鏃ユ湡鎸囨爣鏍囬锛堟瘡涓棩鏈熷搴�6鍒楋級
+ colIndex = 6;
+ for (String date : dateList) {
+ createCellWithStyle(titleRow2, colIndex++, "鍒╃敤鐜�(%)", metricHeaderStyle);
+ createCellWithStyle(titleRow2, colIndex++, "寮�鏈虹巼(%)", metricHeaderStyle);
+ createCellWithStyle(titleRow2, colIndex++, "寮�鏈烘椂闀�(灏忔椂)", metricHeaderStyle);
+ createCellWithStyle(titleRow2, colIndex++, "鍔犲伐鏃堕暱(灏忔椂)", metricHeaderStyle);
+ createCellWithStyle(titleRow2, colIndex++, "寰呮満鏃堕暱(灏忔椂)", metricHeaderStyle);
+ createCellWithStyle(titleRow2, colIndex++, "鍏虫満鏃堕暱(灏忔椂)", metricHeaderStyle);
+ }
+
+ }
+
+ private CellStyle createCenterStyle(Workbook workbook) {
+ CellStyle style = workbook.createCellStyle();
+ style.setAlignment(HorizontalAlignment.CENTER);
+ style.setVerticalAlignment(VerticalAlignment.CENTER);
+ // 娣诲姞瀹屾暣杈规
+ style.setBorderTop(BorderStyle.THIN);
+ style.setBorderBottom(BorderStyle.THIN);
+ style.setBorderLeft(BorderStyle.THIN);
+ style.setBorderRight(BorderStyle.THIN);
+ return style;
+ }
+
+ private CellStyle createFixedHeaderStyle(Workbook workbook) {
+ CellStyle style = createCenterStyle(workbook);
+ style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+ style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+ Font font = workbook.createFont();
+ font.setBold(true);
+ style.setFont(font);
+ return style;
+ }
+
+ private CellStyle createDateHeaderStyle(Workbook workbook) {
+ CellStyle style = createCenterStyle(workbook);
+ style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+ style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+ Font font = workbook.createFont();
+ font.setBold(true);
+ style.setFont(font);
+ return style;
+ }
+
+ private CellStyle createMetricHeaderStyle(Workbook workbook) {
+ CellStyle style = createCenterStyle(workbook);
+ style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+ style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+ Font font = workbook.createFont();
+ font.setBold(true);
+ style.setFont(font);
+ return style;
+ }
+
+ private void writeDataRows(Sheet sheet, CellStyle style, List<MdcEfficiencyListDto> exportData, List<String> dateList) {
+ int rowIndex = 2;
+ for (MdcEfficiencyListDto device : exportData) {
+ Row dataRow = sheet.createRow(rowIndex++);
+ int colIndex = 0;
+
+ // 鍐欏叆鍥哄畾鍒楁暟鎹紙鍏徃銆佽溅闂寸瓑锛�
+ createCellWithStyle(dataRow, colIndex++, device.getLevel1(), style);
+ createCellWithStyle(dataRow, colIndex++, device.getLevel2(), style);
+ createCellWithStyle(dataRow, colIndex++, device.getLevel3(), style);
+ createCellWithStyle(dataRow, colIndex++, device.getEquipmentId(), style);
+ createCellWithStyle(dataRow, colIndex++, device.getEquipmentName(), style);
+ createCellWithStyle(dataRow, colIndex++, device.getEquipmentType(), style);
+
+
+ // 鍐欏叆鏃ユ湡鎸囨爣鏁版嵁锛堟瘡涓棩鏈熷搴�6鍒楋級
+ for (String date : dateList) {
+ // 纭繚dateStr瀵瑰簲鐨凪ap宸插垵濮嬪寲
+ MdcEfficiencyResultDto dateData = device.getDataList().stream().filter(mdcEfficiencyResultDto -> date.equals(mdcEfficiencyResultDto.getTheDate())).collect(Collectors.toList()).get(0);
+ createCellWithStyle(dataRow, colIndex++, dateData.getUtilizationRate().doubleValue(), style);
+ createCellWithStyle(dataRow, colIndex++, dateData.getOpenRate().doubleValue(), style);
+ createCellWithStyle(dataRow, colIndex++, dateData.getOpenLong().doubleValue(), style);
+ createCellWithStyle(dataRow, colIndex++, dateData.getProcessLong().doubleValue(), style);
+ createCellWithStyle(dataRow, colIndex++, dateData.getWaitLong().doubleValue(), style);
+ createCellWithStyle(dataRow, colIndex++, dateData.getCloseLong().doubleValue(), style);
+ }
+ }
+ }
+
+ private void createCellWithStyle(Row row, int colIndex, Object value, CellStyle style) {
+ Cell cell = row.createCell(colIndex);
+ if (value instanceof String) {
+ cell.setCellValue((String) value);
+ } else if (value instanceof Double) {
+ cell.setCellValue((Double) value);
+ }
+ cell.setCellStyle(style);
}
private MdcUtilizationResultDto utilizationRate(String equipmentId, String equipmentName, String equipmentType, Date startTime, Date endTime, String date, List<MdcUtilizationRate> mdcUtilizationRateList) {
@@ -1289,7 +2292,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 +2343,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