From e6a8ba2802f844e92926aff340ca2b1e46f1ebd3 Mon Sep 17 00:00:00 2001
From: qushaowei <qushaowei@163.com>
Date: 星期三, 13 十二月 2023 14:49:58 +0800
Subject: [PATCH] 炉类报告上传
---
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java | 543 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 525 insertions(+), 18 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..95e1d70 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.text.Collator;
+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;
/**
* 鍒╃敤鐜囨姤琛�
@@ -105,7 +107,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::getDepartName));
for (MdcEquDepDto mdcEquDepDto : equipmentList) {
MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
@@ -225,7 +227,7 @@
listDtos.add(mdcEfficiencyListDto);
}
}
-
+ listDtos.sort(((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getLevel3(), o2.getLevel3())));
result.setMdcEfficiencyList(listDtos);
}
@@ -285,7 +287,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::getDepartName));
for (MdcEquDepDto mdcEquDepDto : equipmentList) {
MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
@@ -405,7 +407,7 @@
listDtos.add(mdcEfficiencyListDto);
}
}
-
+ listDtos.sort(((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getLevel3(), o2.getLevel3())));
result.setMdcEfficiencyList(listDtos);
}
@@ -465,7 +467,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::getDepartName));
// 鐝鍚嶇О鏄剧ず澶勭悊
String shiftSubName = "";
if (StringUtils.isBlank(vo.getShiftId())) {
@@ -628,6 +630,7 @@
listDtos.add(mdcEfficiencyShiftListDto);
}
}
+ listDtos.sort(((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getLevel3(), o2.getLevel3())));
result.setMdcEfficiencyList(listDtos);
}
return result;
@@ -646,14 +649,30 @@
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());
}
}
}
}
} else {
+ mdcEfficiencyShiftResultDto.setTheDate(date);
+ mdcEfficiencyShiftResultDto.setProcessLong(new BigDecimal("0"));
+ mdcEfficiencyShiftResultDto.setUtilizationRate(new BigDecimal("0"));
+ mdcEfficiencyShiftResultDto.setStartRate(new BigDecimal("0"));
+ mdcEfficiencyShiftResultDto.setOpenRate(new BigDecimal("0"));
+ mdcEfficiencyShiftResultDto.setOpenLong(new BigDecimal("0"));
+ mdcEfficiencyShiftResultDto.setWaitLong(new BigDecimal("0"));
+ mdcEfficiencyShiftResultDto.setCloseLong(new BigDecimal("0"));
+ for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
+ if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
+ mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
+ }
+ }
+ }
+ if (StringUtils.isBlank(mdcEfficiencyShiftResultDto.getColor())) {
mdcEfficiencyShiftResultDto.setTheDate(date);
mdcEfficiencyShiftResultDto.setProcessLong(new BigDecimal("0"));
mdcEfficiencyShiftResultDto.setUtilizationRate(new BigDecimal("0"));
@@ -687,6 +706,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 +767,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(Collections.singletonList(vo.getEquipmentId()));
+ } else {
+ // 鏌ヨ鐢ㄦ埛鎷ユ湁鐨勬墍鏈夎澶囦俊鎭�
+ if ("2".equals(vo.getTypeTree())) {
+ // 閮ㄩ棬灞傜骇
+ equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
+ } else {
+ // 浜х嚎灞傜骇
+ equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
+ }
+ }
+ if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+ vo.setEquipmentIdList(equipmentIds);
+ }
+ if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+ return result;
+ }
+
+ // 鏌ヨ鍘熷鏁版嵁
+ 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) {
@@ -784,8 +1276,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 +1299,21 @@
}
}
}
-
+ 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());
+ }
+ }
+ }
return mdcEfficiencyResultDto;
}
--
Gitblit v1.9.3