From f84d9e69907cb678150eaa6393fd74cf042fcca4 Mon Sep 17 00:00:00 2001 From: zenglf <18502938215@163.com> Date: 星期四, 28 九月 2023 14:39:03 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' into develop --- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java | 541 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 525 insertions(+), 16 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..8244246 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 @@ -1,21 +1,18 @@ package org.jeecg.modules.mdc.service.impl; +import com.alipay.api.domain.NewsfeedMediaGiftInfo; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.commons.lang3.StringUtils; +import org.checkerframework.checker.units.qual.A; 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.*; +import org.jeecg.modules.mdc.vo.MdcUtilizationRateDto; import org.jeecg.modules.system.entity.MdcProduction; import org.jeecg.modules.system.entity.SysDepart; import org.jeecg.modules.system.service.IMdcProductionService; @@ -24,6 +21,11 @@ import javax.annotation.Resource; import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; @@ -51,6 +53,9 @@ @Resource private IMdcShiftSubService mdcShiftSubService; + + @Resource + private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService; /** * 鍒╃敤鐜囨姤琛� @@ -105,7 +110,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(); @@ -285,7 +290,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(); @@ -465,7 +470,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())) { @@ -646,14 +651,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 +708,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 +769,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 +1278,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 +1301,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