From f57e85c9bf2fbc54e0705e60071931642f66b3dd Mon Sep 17 00:00:00 2001 From: yinq Date: Thu, 8 May 2025 16:40:44 +0800 Subject: [PATCH] =?UTF-8?q?add=20-=20ems=E4=BA=A7=E7=BA=BF=E8=83=BD?= =?UTF-8?q?=E8=80=97=E5=8D=A0=E6=AF=94=E7=BB=9F=E8=AE=A1=E3=80=81=E8=80=97?= =?UTF-8?q?=E8=83=BD=E8=B6=8B=E5=8A=BF=E5=88=86=E6=9E=90=E3=80=81=E4=BA=A7?= =?UTF-8?q?=E7=BA=BF=E5=8D=95=E8=80=97=E5=AF=B9=E6=AF=94=E3=80=81=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E5=8D=95=E8=80=97=E5=AF=B9=E6=AF=94=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/RecordDnbInstantServiceImpl.java | 30 +-- .../controller/energyPreviewController.java | 50 +++- .../report/mapper/ReportPointDnbMapper.java | 6 + .../report/service/IEnergyPreviewService.java | 30 +++ .../impl/EnergyPreviewServiceImpl.java | 226 ++++++++++++++++++ .../mapper/record/RecordDnbInstantMapper.xml | 2 +- .../mapper/report/ReportPointDnbMapper.xml | 70 ++++++ 7 files changed, 395 insertions(+), 19 deletions(-) diff --git a/op-modules/op-energy/src/main/java/com/op/energy/record/service/impl/RecordDnbInstantServiceImpl.java b/op-modules/op-energy/src/main/java/com/op/energy/record/service/impl/RecordDnbInstantServiceImpl.java index ab7ed7bcf..3869ba53a 100644 --- a/op-modules/op-energy/src/main/java/com/op/energy/record/service/impl/RecordDnbInstantServiceImpl.java +++ b/op-modules/op-energy/src/main/java/com/op/energy/record/service/impl/RecordDnbInstantServiceImpl.java @@ -18,6 +18,8 @@ import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 电实时数据Service业务层处理 @@ -133,28 +135,20 @@ public class RecordDnbInstantServiceImpl implements IRecordDnbInstantService { if (StringUtils.isEmpty(recordDnbInstant.getMonitorSubset())) { return recordDnbInstantMapper.instantList(new RecordDnbInstant()); } - List dnbInstantList = new ArrayList<>(); BaseMonitorInfo monitorInfo = new BaseMonitorInfo(); monitorInfo.setParentId(Long.valueOf(recordDnbInstant.getMonitorSubset())); monitorInfo.setParams(null); recordDnbInstant.setParams(null); List baseMonitorInfos = baseMonitorInfoService.selectBaseMonitorInfoList(monitorInfo); - for (BaseMonitorInfo baseMonitorInfo : baseMonitorInfos) { - RecordDnbInstant dnbInstant = new RecordDnbInstant(); - dnbInstant.setMonitorId(baseMonitorInfo.getMonitorId()); - dnbInstant.setMonitorName(baseMonitorInfo.getMonitorName()); - RecordDnbInstant baseDnbInstant = new RecordDnbInstant(); - baseDnbInstant.setMonitorSubset(baseMonitorInfo.getMonitorId()); - List dnbInstantListOld = recordDnbInstantMapper.instantList(baseDnbInstant); - if (dnbInstantListOld.size() > 0) { - BigDecimal zxyg = dnbInstantListOld.stream().map(RecordDnbInstant::getZxyg).reduce(BigDecimal.ZERO, BigDecimal::add); - Date collectTime = dnbInstantListOld.stream().map(RecordDnbInstant::getCollectTime).max(Date::compareTo).orElse(null); - dnbInstant.setZxyg(zxyg); - dnbInstant.setCollectTime(collectTime); - } - dnbInstantList.add(dnbInstant); + List monitorIdList = baseMonitorInfos.stream().map(BaseMonitorInfo::getMonitorId).collect(Collectors.toList()); + if (monitorIdList.size() > 0){ + RecordDnbInstant instant = new RecordDnbInstant(); + Map params = instant.getParams(); + params.put("monitorIdList", monitorIdList); + List dnbInstantList = recordDnbInstantMapper.instantList(instant); + return dnbInstantList; } - return dnbInstantList; + return null; } /** @@ -176,7 +170,9 @@ public class RecordDnbInstantServiceImpl implements IRecordDnbInstantService { baseDnbInstant.setParams(null); List baseMonitorInfos = baseMonitorInfoService.selectBaseMonitorInfoList(monitorInfo); if (baseMonitorInfos.size() > 0) { - List dnbInstantListOld = recordDnbInstantMapper.instantList(baseDnbInstant); + RecordDnbInstant instant = new RecordDnbInstant(); + instant.setMonitorId(baseDnbInstant.getMonitorSubset()); + List dnbInstantListOld = recordDnbInstantMapper.instantList(instant); dnbInstant.setMonitorId(baseMonitorInfos.get(0).getMonitorId()); dnbInstant.setMonitorName(baseMonitorInfos.get(0).getMonitorName()); if (dnbInstantListOld.size() > 0) { diff --git a/op-modules/op-energy/src/main/java/com/op/energy/report/controller/energyPreviewController.java b/op-modules/op-energy/src/main/java/com/op/energy/report/controller/energyPreviewController.java index 519fefafe..bf617cfa3 100644 --- a/op-modules/op-energy/src/main/java/com/op/energy/report/controller/energyPreviewController.java +++ b/op-modules/op-energy/src/main/java/com/op/energy/report/controller/energyPreviewController.java @@ -1,7 +1,9 @@ package com.op.energy.report.controller; import com.op.common.core.web.controller.BaseController; +import com.op.common.core.web.domain.AjaxResult; import com.op.common.core.web.page.TableDataInfo; +import com.op.energy.report.domain.ReportOrderEnergyDTO; import com.op.energy.report.service.IEnergyPreviewService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -25,7 +27,6 @@ public class energyPreviewController extends BaseController { @Autowired private IEnergyPreviewService energyPreviewService; - /** * 电能源预览 * @@ -63,5 +64,52 @@ public class energyPreviewController extends BaseController { return prefix + "/waterIndex"; } + /** + * 产线能耗占比统计 + * @param paramMap + * @return + */ + @ResponseBody + @GetMapping("/productionLineEnergyConsumption") + public AjaxResult productionLineEnergyConsumption(@RequestParam(required = false) Map paramMap) { + Map result = energyPreviewService.productionLineEnergyConsumption(paramMap); + return AjaxResult.success(result); + } + + /** + * 耗能趋势分析 + * @param paramMap + * @return + */ + @ResponseBody + @GetMapping("/energyConsumptionTrendAnalysis") + public AjaxResult energyConsumptionTrendAnalysis(@RequestParam(required = false) Map paramMap) { + Map result = energyPreviewService.energyConsumptionTrendAnalysis(paramMap); + return AjaxResult.success(result); + } + + /** + * 产线单耗对比 + * @param energyDTO + * @return + */ + @ResponseBody + @GetMapping("/linesConsumptionComparison") + public AjaxResult linesConsumptionComparison(ReportOrderEnergyDTO energyDTO) { + Map result = energyPreviewService.linesConsumptionComparison(energyDTO); + return AjaxResult.success(result); + } + + /** + * 产品单耗对比 + * @param energyDTO + * @return + */ + @ResponseBody + @GetMapping("/productConsumptionComparison") + public AjaxResult productLinesConsumptionComparison(ReportOrderEnergyDTO energyDTO) { + Map result = energyPreviewService.productConsumptionComparison(energyDTO); + return AjaxResult.success(result); + } } diff --git a/op-modules/op-energy/src/main/java/com/op/energy/report/mapper/ReportPointDnbMapper.java b/op-modules/op-energy/src/main/java/com/op/energy/report/mapper/ReportPointDnbMapper.java index e6863d759..8c965c87d 100644 --- a/op-modules/op-energy/src/main/java/com/op/energy/report/mapper/ReportPointDnbMapper.java +++ b/op-modules/op-energy/src/main/java/com/op/energy/report/mapper/ReportPointDnbMapper.java @@ -80,4 +80,10 @@ public interface ReportPointDnbMapper { List> energyStatisticsData(Map map); public List OrderEnergyList(ReportOrderEnergyDTO reportOrderEnergyDTO); + + List> productionLineEnergyConsumption(Map paramMap); + + List linesConsumptionComparison(ReportOrderEnergyDTO energyDTO); + + List productConsumptionComparison(ReportOrderEnergyDTO energyDTO); } diff --git a/op-modules/op-energy/src/main/java/com/op/energy/report/service/IEnergyPreviewService.java b/op-modules/op-energy/src/main/java/com/op/energy/report/service/IEnergyPreviewService.java index ab3d90b1a..77b0f3667 100644 --- a/op-modules/op-energy/src/main/java/com/op/energy/report/service/IEnergyPreviewService.java +++ b/op-modules/op-energy/src/main/java/com/op/energy/report/service/IEnergyPreviewService.java @@ -1,5 +1,7 @@ package com.op.energy.report.service; +import com.op.energy.report.domain.ReportOrderEnergyDTO; + import java.util.List; import java.util.Map; @@ -77,4 +79,32 @@ public interface IEnergyPreviewService { * @return */ public List> energyConsumptionByTime(Map paramMap); + + /** + * 产线能耗占比统计 + * @param paramMap + * @return + */ + Map productionLineEnergyConsumption(Map paramMap); + + /** + * 耗能趋势分析 + * @param paramMap + * @return + */ + Map energyConsumptionTrendAnalysis(Map paramMap); + + /** + * 产线单耗对比 + * @param energyDTO + * @return + */ + Map linesConsumptionComparison(ReportOrderEnergyDTO energyDTO); + + /** + * 产品单耗对比 + * @param energyDTO + * @return + */ + Map productConsumptionComparison(ReportOrderEnergyDTO energyDTO); } diff --git a/op-modules/op-energy/src/main/java/com/op/energy/report/service/impl/EnergyPreviewServiceImpl.java b/op-modules/op-energy/src/main/java/com/op/energy/report/service/impl/EnergyPreviewServiceImpl.java index 6a15e3912..095b3620d 100644 --- a/op-modules/op-energy/src/main/java/com/op/energy/report/service/impl/EnergyPreviewServiceImpl.java +++ b/op-modules/op-energy/src/main/java/com/op/energy/report/service/impl/EnergyPreviewServiceImpl.java @@ -10,15 +10,25 @@ import com.op.energy.base.mapper.BaseTypeRelationMapper; import com.op.energy.base.service.IBaseMonitorInfoService; import com.op.energy.base.utils.DateUtils; import com.op.energy.base.utils.sortReportUitls; +import com.op.energy.record.domain.RecordDnbInstant; +import com.op.energy.record.mapper.RecordDnbInstantMapper; +import com.op.energy.report.domain.ReportOrderEnergyDTO; +import com.op.energy.report.domain.ReportPointDnb; +import com.op.energy.report.domain.ReportPointWater; import com.op.energy.report.mapper.ReportPointDnbMapper; import com.op.energy.report.mapper.ReportPointWaterMapper; +import com.op.energy.report.service.IDataAnalysisService; import com.op.energy.report.service.IEnergyPreviewService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import static com.op.energy.base.utils.DateUtils.YYYY_MM_DD_HH_MM_SS; /** * 水整点数据Service业务层处理 @@ -43,6 +53,9 @@ public class EnergyPreviewServiceImpl implements IEnergyPreviewService { @Autowired private BaseBuildInfoMapper baseBuildInfoMapper; + @Autowired + private RecordDnbInstantMapper recordDnbInstantMapper; + /** * 电能源预览返回数据 * @@ -615,4 +628,217 @@ public class EnergyPreviewServiceImpl implements IEnergyPreviewService { result.put("valueList", valueList); return result; } + + /** + * 产线能耗占比统计 + * + * @param paramMap + * @return + */ + @Override + @DS("#header.poolName") + public Map productionLineEnergyConsumption(Map paramMap) { + HashMap result = new HashMap<>(); + List> energyList = reportPointDnbMapper.productionLineEnergyConsumption(paramMap); + result.put("energyList", energyList); + return result; + } + + /** + * 耗能趋势分析 + * + * @param paramMap + * @return + */ + @Override + @DS("#header.poolName") + public Map energyConsumptionTrendAnalysis(Map paramMap) { + HashMap result = new HashMap<>(); + List> energyList = new ArrayList<>(); + List timeList = new ArrayList<>(); + List monitorIdLists = new ArrayList<>(); + LinkedHashMap> monitorInfoMap = new LinkedHashMap<>(); + if (!paramMap.containsKey("type") || !paramMap.containsKey("energyType") || + String.valueOf(paramMap.get("startTime")).equals("") || String.valueOf(paramMap.get("endTime")).equals("")) { + return result; + } + String energyType = String.valueOf(paramMap.get("energyType")); + //小时 天 月 年 + String type = String.valueOf(paramMap.get("type")); + BaseBuildInfo baseBuildInfo = new BaseBuildInfo(); + List buildInfoList = baseBuildInfoMapper.selectBaseBuildInfoList(baseBuildInfo); + if (paramMap.containsKey("monitorIds")) { + String monitorIds = String.valueOf(paramMap.get("monitorIds")); + if (monitorIds.contains(",")) { + monitorIdLists = Arrays.stream(monitorIds.split(",")) + .map(String::trim) + .map(Long::valueOf) + .collect(Collectors.toList()); + } else { + if (!monitorIds.isEmpty()) { + monitorIdLists.add(Long.parseLong(monitorIds)); + } + } + } + + switch (type) { + case "month": + timeList = DateUtils.getSortedMonthList(DateUtils.getDatesBetween(String.valueOf(paramMap.get("startTime")), String.valueOf(paramMap.get("endTime"))), type); + break; + case "year": + timeList = DateUtils.getSortedMonthList(DateUtils.getDatesBetween(String.valueOf(paramMap.get("startTime")), String.valueOf(paramMap.get("endTime"))), type); + break; + case "hour": + timeList = DateUtils.getHourlyIntervals(String.valueOf(paramMap.get("startTime")), String.valueOf(paramMap.get("endTime"))); + break; + case "day": + timeList = DateUtils.getDatesBetween(String.valueOf(paramMap.get("startTime")), String.valueOf(paramMap.get("endTime"))); + break; + } + List> lists = new ArrayList<>(); + for (Long buildOId : monitorIdLists) { + List monitorValueList = new ArrayList<>(); + List monitorNameList = buildInfoList.stream().filter(e -> e.getObjid().equals(buildOId)) + .map(BaseBuildInfo::getBuildName).collect(Collectors.toList()); + + BaseTypeRelation relation = new BaseTypeRelation(); + relation.setType(0L); + relation.setRelationId(buildOId); + List baseTypeRelations = baseTypeRelationMapper.selectBaseTypeRelationList(relation); + List collect = baseTypeRelations.stream().map(BaseTypeRelation::getMonitorId).collect(Collectors.toList()); + paramMap.put("monitorIdList", collect); + if (energyType.equals("2")) { + ReportPointDnb pointDnb = new ReportPointDnb(); + pointDnb.setParams(paramMap); + List pointDnbList = reportPointDnbMapper.selectReportPointDnbList(pointDnb); + for (ReportPointDnb reportPointDnb : pointDnbList) { + Map map = new HashMap<>(); + map.put("recordTime", DateUtils.parseDateToStr("yyyy-MM-dd HH", reportPointDnb.getBeginTime())); + map.put("expend", reportPointDnb.getExpend().toString()); + energyList.add(map); + } + } else if (energyType.equals("3")) { + ReportPointWater reportPointWater = new ReportPointWater(); + reportPointWater.setParams(paramMap); + List reportPointWaters = reportPointWaterMapper.selectReportPointWaterList(reportPointWater); + for (ReportPointWater pointWater : reportPointWaters) { + Map map = new HashMap<>(); + map.put("recordTime", DateUtils.parseDateToStr("yyyy-MM-dd HH", pointWater.getBeginTime())); + map.put("expend", pointWater.getExpend().toString()); + energyList.add(map); + } + } + timeList.forEach(date -> { + float expend = 0.00f; + for (Map map : energyList) { + String recordTime = String.valueOf(map.get("recordTime")); + if (type.equals("month")) { + recordTime = recordTime.substring(0, 7); + } else if (type.equals("year")) { + recordTime = recordTime.substring(0, 4); + } else if (type.equals("hour")) { + date = date.substring(0, 13); + } else if (type.equals("day")) { + recordTime = recordTime.substring(0, 10); + } + if (date.equals(recordTime)) { + expend += Float.parseFloat(String.valueOf(map.get("expend"))); + } + } + BigDecimal decimal = new BigDecimal(Float.toString(expend)); + decimal = decimal.setScale(2, RoundingMode.HALF_UP); + monitorValueList.add(decimal.floatValue()); + }); + if (monitorNameList.size() != 0) { + monitorInfoMap.put(monitorNameList.get(0), monitorValueList); + } + lists.add(monitorValueList); + } + if (lists.size() != 0) { + List sumLineList = IntStream.range(0, lists.get(0).size()) + .mapToObj(i -> lists.stream() + .map(list -> list.get(i)) + .reduce(0f, Float::sum)) + .map(f -> Math.round(f * 100.0) / 100.0f) + .collect(Collectors.toList()); + result.put("sumLineList", sumLineList); + } + List monitorNameList = new ArrayList<>(); + for (String monitorName : monitorInfoMap.keySet()) { + monitorNameList.add(monitorName); + } + result.put("monitorNameList", monitorNameList); + result.put("timeList", timeList); + result.put("monitorInfoMap", monitorInfoMap); + return result; + } + + /** + * 产线单耗对比 + * + * @param energyDTO + * @return + */ + @Override + @DS("#header.poolName") + public Map linesConsumptionComparison(ReportOrderEnergyDTO energyDTO) { + HashMap result = new HashMap<>(); + LinkedHashMap dataMap = new LinkedHashMap<>(); + List reportOrderEnergyDTOList = reportPointDnbMapper.linesConsumptionComparison(energyDTO); + if (reportOrderEnergyDTOList != null && reportOrderEnergyDTOList.size() > 0) { + for (ReportOrderEnergyDTO orderEnergyDTO : reportOrderEnergyDTOList) { + RecordDnbInstant recordDnbInstant = new RecordDnbInstant(); + String startWorkTime = DateUtils.parseDateToStr(YYYY_MM_DD_HH_MM_SS, orderEnergyDTO.getStartWorkTime()); + String endWorkTime = DateUtils.parseDateToStr(YYYY_MM_DD_HH_MM_SS, orderEnergyDTO.getEndWorkTime()); + String electricityNo = orderEnergyDTO.getElectricityNo(); + Map map = new HashMap<>(); + recordDnbInstant.setMonitorId(electricityNo); + map.put("beginCollectTime", startWorkTime); + map.put("endCollectTime", endWorkTime); + recordDnbInstant.setParams(map); + List recordDnbInstantList = recordDnbInstantMapper.selectRecordDnbInstantByTime(recordDnbInstant); + if (recordDnbInstantList.size() == 2) { + BigDecimal kw = recordDnbInstantList.get(0).getKw().subtract(recordDnbInstantList.get(1).getKw()).abs(); + BigDecimal decimal = kw.divide(new BigDecimal(orderEnergyDTO.getTotalQuantityFeedback()), 2, RoundingMode.HALF_UP); + dataMap.put(orderEnergyDTO.getEquipmentName(), decimal); + } + } + } + result.put("data", dataMap); + return result; + } + + /** + * 产品单耗对比 + * @param energyDTO + * @return + */ + @Override + @DS("#header.poolName") + public Map productConsumptionComparison(ReportOrderEnergyDTO energyDTO) { + HashMap result = new HashMap<>(); + LinkedHashMap dataMap = new LinkedHashMap<>(); + List reportOrderEnergyDTOList = reportPointDnbMapper.productConsumptionComparison(energyDTO); + if (reportOrderEnergyDTOList != null && reportOrderEnergyDTOList.size() > 0) { + for (ReportOrderEnergyDTO orderEnergyDTO : reportOrderEnergyDTOList) { + RecordDnbInstant recordDnbInstant = new RecordDnbInstant(); + String startWorkTime = DateUtils.parseDateToStr(YYYY_MM_DD_HH_MM_SS, orderEnergyDTO.getStartWorkTime()); + String endWorkTime = DateUtils.parseDateToStr(YYYY_MM_DD_HH_MM_SS, orderEnergyDTO.getEndWorkTime()); + String electricityNo = orderEnergyDTO.getElectricityNo(); + Map map = new HashMap<>(); + recordDnbInstant.setMonitorId(electricityNo); + map.put("beginCollectTime", startWorkTime); + map.put("endCollectTime", endWorkTime); + recordDnbInstant.setParams(map); + List recordDnbInstantList = recordDnbInstantMapper.selectRecordDnbInstantByTime(recordDnbInstant); + if (recordDnbInstantList.size() == 2) { + BigDecimal kw = recordDnbInstantList.get(0).getKw().subtract(recordDnbInstantList.get(1).getKw()).abs(); + BigDecimal decimal = kw.divide(new BigDecimal(orderEnergyDTO.getTotalQuantityFeedback()), 2, RoundingMode.HALF_UP); + dataMap.put(orderEnergyDTO.getProductName(), decimal); + } + } + } + result.put("data", dataMap); + return result; + } } diff --git a/op-modules/op-energy/src/main/resources/mapper/record/RecordDnbInstantMapper.xml b/op-modules/op-energy/src/main/resources/mapper/record/RecordDnbInstantMapper.xml index 88af389ac..24d81a2fb 100644 --- a/op-modules/op-energy/src/main/resources/mapper/record/RecordDnbInstantMapper.xml +++ b/op-modules/op-energy/src/main/resources/mapper/record/RecordDnbInstantMapper.xml @@ -41,7 +41,7 @@ WITH OrderedRecords AS ( SELECT rdi.*, - rdi.zxyg * bmi.ct AS kw, + rdi.zxyg * isnull(bmi.ct,1) AS kw, bmi.ct, ROW_NUMBER() OVER (ORDER BY rdi.collect_time ASC) AS RowAsc, ROW_NUMBER() OVER (ORDER BY rdi.collect_time DESC) AS RowDesc diff --git a/op-modules/op-energy/src/main/resources/mapper/report/ReportPointDnbMapper.xml b/op-modules/op-energy/src/main/resources/mapper/report/ReportPointDnbMapper.xml index cdda26d6c..cc24ed710 100644 --- a/op-modules/op-energy/src/main/resources/mapper/report/ReportPointDnbMapper.xml +++ b/op-modules/op-energy/src/main/resources/mapper/report/ReportPointDnbMapper.xml @@ -380,4 +380,74 @@ + + + + +