From 6701732c08bb8e5a20c5d7c2deb69c760344013d Mon Sep 17 00:00:00 2001 From: lius <Lius2225@163.com> Date: 星期一, 31 七月 2023 15:40:06 +0800 Subject: [PATCH] 对比分析接口 --- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 107 insertions(+), 0 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..e09c92c 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,7 +1,9 @@ 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.*; @@ -24,6 +26,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; @@ -758,6 +765,106 @@ 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)); + 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; + } + private StatisticalAnalysisVo efficiencyStatisticalRate(List<MdcEfficiencyDto> efficiencyList) { StatisticalAnalysisVo vo = new StatisticalAnalysisVo(); for (MdcEfficiencyDto mdcEfficiencyDto : efficiencyList) { -- Gitblit v1.9.3