From ca39f9dd34b5a578c7a4ff170cb39d42cbc77234 Mon Sep 17 00:00:00 2001 From: 潘晓明 <hahagongzi2006@163.com> Date: 星期四, 13 二月 2025 11:50:51 +0800 Subject: [PATCH] 成本趋势分析页面接口:不传能源类型时,取所有能源类型。 --- zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java | 12 +++ zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyConsumeDataController.java | 4 zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml | 18 ++++ zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java | 146 ++++++++++++++++++++---------------- zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml | 8 +- zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyConsumeTrendDetailItem.java | 15 +++ zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java | 6 7 files changed, 134 insertions(+), 75 deletions(-) diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyConsumeDataController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyConsumeDataController.java index 051909e..e91dc45 100644 --- a/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyConsumeDataController.java +++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyConsumeDataController.java @@ -41,7 +41,7 @@ @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, @RequestParam(name = "timeCode") String timeCode, @RequestParam(name = "timeType") String timeType, - @RequestParam(name = "energyType") String energyType, + @RequestParam(name = "energyType",required = false) String energyType, @RequestParam(name = "modelCode") String modelCode) { return AjaxResult.success(energyConsumeDataService.listEnergyCostTrend(pageNo, pageSize, timeCode, timeType,energyType, modelCode)); @@ -62,7 +62,7 @@ public AjaxResult listEnergyCostTrendDetail(@RequestParam(name = "timeCode") String timeCode, @RequestParam(name = "timeType") String timeType, @RequestParam(name = "modelCode") String modelCode, - @RequestParam("energyType") String energyType) { + @RequestParam(name = "energyType",required = false) String energyType) { return AjaxResult.success(energyConsumeDataService.listEnergyCostTrendDetail(timeCode, timeType, modelCode, energyType)); } diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java b/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java index 94f00fe..99d5317 100644 --- a/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java +++ b/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java @@ -123,4 +123,16 @@ */ List<DataItem> getDataItemHourInforByIndexIds(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime, @Param("timeType") String timeType, @Param("indexIds") List<String> indexIds); + + /** + * 鏌ヨ鑳芥簮绫诲瀷闈炵數鐨勭敤閲� + * @param beginTime + * @param endTime + * @param timeType 鏃堕棿绫诲瀷 + * @param nodeId 鑺傜偣Id + * @param energyType 鑳芥簮绫诲瀷 + * @return + */ + BigDecimal getDataItemTimeRangeValueByNodeId(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime, + @Param("timeType") String timeType, @Param("nodeId") String nodeId, @Param("energyType") String energyType); } diff --git a/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java b/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java index 8e74174..98b4e01 100644 --- a/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java +++ b/zhitan-system/src/main/java/com/zhitan/peakvalley/mapper/PeakValleyMapper.java @@ -43,11 +43,11 @@ * @param beginTime * @param endTime * @param timeType 鏃堕棿绫诲瀷 - * @param indexId 鑺傜偣Id - * @param emissionType 鑳芥簮绫诲瀷 + * @param nodeId 鑺傜偣Id + * @param energyType 鑳芥簮绫诲瀷 * @return */ List<ElectricityDataItem> getCostTrends(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime, - @Param("timeType") String timeType, @Param("indexId") String indexId,@Param("emissionType") String emissionType); + @Param("timeType") String timeType, @Param("nodeId") String nodeId,@Param("energyType") String energyType); } diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyConsumeTrendDetailItem.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyConsumeTrendDetailItem.java index 87b59a5..ccc4a25 100644 --- a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyConsumeTrendDetailItem.java +++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/EnergyConsumeTrendDetailItem.java @@ -1,5 +1,6 @@ package com.zhitan.statisticalAnalysis.domain.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -43,6 +44,20 @@ private String costLabel; /** + * 绱Н閲� + */ + @ApiModelProperty(value = "绱Н閲�") + @JsonFormat(shape = JsonFormat.Shape.STRING) + private BigDecimal accumulation; + + /** + * 璐圭敤 + */ + @ApiModelProperty(value = "璐圭敤") + @JsonFormat(shape = JsonFormat.Shape.STRING) + private BigDecimal cost; + + /** * 绱Н閲弅ey闆嗗悎 */ @ApiModelProperty(value = "绱Н閲弅ey闆嗗悎") diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java index 6ecc35e..5819d02 100644 --- a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java +++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java @@ -7,6 +7,7 @@ import com.zhitan.carbonemission.domain.CarbonEmission; import com.zhitan.common.constant.CommonConst; import com.zhitan.common.constant.TimeTypeConst; +import com.zhitan.common.utils.StringUtils; import com.zhitan.dataitem.mapper.DataItemMapper; import com.zhitan.model.domain.ModelNode; import com.zhitan.model.domain.NodeIndex; @@ -58,12 +59,13 @@ String modelCode) { //鑳芥簮绫诲瀷淇℃伅 SysEnergy sysEnergy = new SysEnergy(); - sysEnergy.setEnersno(energyType); + if (StringUtils.isNotEmpty(energyType)) { + sysEnergy.setEnersno(energyType); + } List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(sysEnergy); if (sysEnergies.isEmpty()) { throw new RuntimeException("鏈煡璇㈠埌鑳芥簮淇℃伅"); } - SysEnergy sysEnergyInfo = sysEnergies.stream().findFirst().get(); //鑺傜偣淇℃伅 List<ModelNode> modelNodes = modelNodeMapper.selectList(Wrappers.<ModelNode>lambdaQuery().eq(ModelNode::getModelCode, modelCode) .isNull(ModelNode::getParentId)); @@ -78,22 +80,24 @@ throw new RuntimeException("鏈煡璇㈠埌鐐逛綅淇℃伅"); } - // 閬嶅巻鐢ㄨ兘鍗曞厓鑾峰彇琛ㄦ牸涓殑鏁版嵁 - List<EnergyCostTrendItem> trendItemList = new ArrayList<>(); - EnergyCostTrendItem energyCostTrendItem = new EnergyCostTrendItem(); - energyCostTrendItem.setDateCode(timeCode); // 鎬昏垂鐢� BigDecimal totalCost = BigDecimal.ZERO; // 閬嶅巻鑳芥簮绫诲瀷 List<CostTrendEnergyTypeItem> itemList = new ArrayList<>(); - CostTrendEnergyTypeItem item = new CostTrendEnergyTypeItem(); - item.setEnergyType(sysEnergyInfo.getEnersno()); - item.setEnergyName(sysEnergyInfo.getEnername()); - // 澶勭悊鏃堕棿 - Date bsTime = DateTimeUtil.getTime(timeType, timeCode); - Date endTime = DateTimeUtil.getEndTimeByType(timeType, bsTime); - totalCost = getEnergyUnitCostTrendAnalysisValueInfo(timeType, bsTime, endTime, totalCost, nodeIndices, sysEnergyInfo.getEnersno(), item); - itemList.add(item); + for (SysEnergy sysEnergyInfo : sysEnergies) { + CostTrendEnergyTypeItem item = new CostTrendEnergyTypeItem(); + item.setEnergyType(sysEnergyInfo.getEnersno()); + item.setEnergyName(sysEnergyInfo.getEnername()); + // 澶勭悊鏃堕棿 + Date bsTime = DateTimeUtil.getTime(timeType, timeCode); + Date endTime = DateTimeUtil.getEndTimeByType(timeType, bsTime); + totalCost = getEnergyUnitCostTrendAnalysisValueInfo(timeType, bsTime, endTime, totalCost, nodeIndices, modelNodeInfo.getNodeId(), sysEnergyInfo, item); + itemList.add(item); + } + // 閬嶅巻鐢ㄨ兘鍗曞厓鑾峰彇琛ㄦ牸涓殑鏁版嵁 + List<EnergyCostTrendItem> trendItemList = new ArrayList<>(); + EnergyCostTrendItem energyCostTrendItem = new EnergyCostTrendItem(); + energyCostTrendItem.setDateCode(timeCode); energyCostTrendItem.setTotal(totalCost.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP)); energyCostTrendItem.setItemList(itemList); trendItemList.add(energyCostTrendItem); @@ -107,28 +111,30 @@ /** * 鑾峰彇鐢ㄨ兘鍗曞厓鎴愭湰瓒嬪娍鍒嗘瀽绱Н閲忋�佽垂鐢ㄤ俊鎭� * - * @param timeType 鏃堕棿绫诲瀷 - * @param bsTime 寮�濮嬫椂闂� - * @param endTime 缁撴潫鏃堕棿 - * @param totalCost 鎬昏垂鐢� - * @param nodeIndices 鑺傜偣id闆嗗悎 - * @param energyType 鑳芥簮绫诲瀷 - * @param item 杩斿洖瀵硅薄 + * @param timeType 鏃堕棿绫诲瀷 + * @param bsTime 寮�濮嬫椂闂� + * @param endTime 缁撴潫鏃堕棿 + * @param totalCost 鎬昏垂鐢� + * @param nodeIndices 鑺傜偣鐐逛綅闆嗗悎 + * @param nodeId 鑺傜偣id + * @param sysEnergyInfo 鑳芥簮绫诲瀷淇℃伅 + * @param item 杩斿洖瀵硅薄 * @return */ private BigDecimal getEnergyUnitCostTrendAnalysisValueInfo(String timeType, Date bsTime, Date endTime, BigDecimal totalCost, - List<NodeIndex> nodeIndices, String energyType, - CostTrendEnergyTypeItem item) { - BigDecimal costValue; + List<NodeIndex> nodeIndices, String nodeId, SysEnergy sysEnergyInfo, + CostTrendEnergyTypeItem item) { + BigDecimal costValue = BigDecimal.ZERO; BigDecimal accumulationValue = BigDecimal.ZERO; - switch (energyType) { + switch (sysEnergyInfo.getEnersno()) { case "electric": List<ElectricityDataItem> electricityDataItems = peakValleyMapper.getDataStatistics(nodeIndices.stream().map(NodeIndex::getIndexId).collect(Collectors.toSet()), bsTime, endTime, timeType); costValue = electricityDataItems.stream().map(ElectricityDataItem::getCost).reduce(BigDecimal.ZERO, BigDecimal::add); accumulationValue = electricityDataItems.stream().map(ElectricityDataItem::getElectricity).reduce(BigDecimal.ZERO, BigDecimal::add); break; default: - costValue = dataItemMapper.getDataItemTimeRangeValueByIndexIds(bsTime, endTime, timeType, nodeIndices.stream().map(NodeIndex::getIndexId).collect(Collectors.toList())); + accumulationValue = dataItemMapper.getDataItemTimeRangeValueByNodeId(bsTime, endTime, timeType, nodeId, sysEnergyInfo.getEnersno()); + costValue = accumulationValue.multiply(sysEnergyInfo.getPrice()); break; } costValue = costValue.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); @@ -151,12 +157,13 @@ public List<EnergyConsumeTrendDetailItem> listEnergyCostTrendDetail(String timeCode, String timeType, String modelCode, String energyType) { //鑳芥簮绫诲瀷淇℃伅 SysEnergy sysEnergy = new SysEnergy(); - sysEnergy.setEnersno(energyType); + if (StringUtils.isNotEmpty(energyType)) { + sysEnergy.setEnersno(energyType); + } List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(sysEnergy); if (sysEnergies.isEmpty()) { throw new RuntimeException("鏈煡璇㈠埌鑳芥簮淇℃伅"); } - SysEnergy sysEnergyInfo = sysEnergies.stream().findFirst().get(); //鑺傜偣淇℃伅 List<ModelNode> modelNodes = modelNodeMapper.selectList(Wrappers.<ModelNode>lambdaQuery().eq(ModelNode::getModelCode, modelCode) @@ -167,46 +174,53 @@ String nodeId = modelNodes.stream().findFirst().get().getNodeId(); // 鑳借�椾俊鎭� + List<EnergyConsumeTrendDetailItem> itemList = new ArrayList<>(); List<EnergyConsumeVO> energyConsumeVOList = new ArrayList<>(); Date startTime = DateTimeUtil.getTime(timeType, timeCode); Date endTime = DateTimeUtil.getEndTimeByType(timeType, startTime); - switch (sysEnergyInfo.getEnersno()) { - case "electric": - List<ElectricityDataItem> electricityDataItems = peakValleyMapper.getCostTrends(startTime, endTime, timeType, nodeId, energyType); - if (!electricityDataItems.isEmpty()) { - electricityDataItems.forEach(electricityDataItem -> { - EnergyConsumeVO temp = new EnergyConsumeVO(); - temp.setDataTime(electricityDataItem.getDataTime()); - temp.setCostValue(electricityDataItem.getCost()); - temp.setAccumulationValue(electricityDataItem.getElectricity()); - energyConsumeVOList.add(temp); - }); - } - break; - default: - List<CarbonEmission> dataItems = dataItemMapper.getMiddleCarbonEmission(startTime, endTime, timeType, nodeId, energyType); - if (!dataItems.isEmpty()) { - dataItems.forEach(electricityDataItem -> { - EnergyConsumeVO temp = new EnergyConsumeVO(); - temp.setDataTime(electricityDataItem.getDataTime()); - temp.setCostValue(new BigDecimal(electricityDataItem.getValue())); - temp.setAccumulationValue(new BigDecimal(electricityDataItem.getValue()).multiply(sysEnergyInfo.getPrice())); - energyConsumeVOList.add(temp); - }); - } - break; + for (SysEnergy sysEnergyInfo : sysEnergies) { + switch (sysEnergyInfo.getEnersno()) { + case "electric": + List<ElectricityDataItem> electricityDataItems = peakValleyMapper.getCostTrends(startTime, endTime, timeType, nodeId, sysEnergyInfo.getEnersno()); + if (!electricityDataItems.isEmpty()) { + electricityDataItems.forEach(electricityDataItem -> { + EnergyConsumeVO temp = new EnergyConsumeVO(); + temp.setDataTime(electricityDataItem.getDataTime()); + temp.setCostValue(electricityDataItem.getCost()); + temp.setAccumulationValue(electricityDataItem.getElectricity()); + energyConsumeVOList.add(temp); + }); + } + break; + default: + List<CarbonEmission> dataItems = dataItemMapper.getMiddleCarbonEmission(startTime, endTime, timeType, nodeId, sysEnergyInfo.getEnersno()); + if (!dataItems.isEmpty()) { + dataItems.forEach(electricityDataItem -> { + EnergyConsumeVO temp = new EnergyConsumeVO(); + temp.setDataTime(electricityDataItem.getDataTime()); + temp.setCostValue(new BigDecimal(electricityDataItem.getValue())); + temp.setAccumulationValue(new BigDecimal(electricityDataItem.getValue()).multiply(sysEnergyInfo.getPrice())); + energyConsumeVOList.add(temp); + }); + } + break; + } + BigDecimal cost = energyConsumeVOList.stream().map(EnergyConsumeVO::getCostValue) + .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); + BigDecimal accumulation = energyConsumeVOList.stream().map(EnergyConsumeVO::getAccumulationValue) + .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP); + // 缁勮缁熻鍥句俊鎭� + EnergyConsumeTrendDetailItem item = new EnergyConsumeTrendDetailItem(); + item.setEnergyType(sysEnergyInfo.getEnersno()); + item.setEnergyUnit(sysEnergyInfo.getMuid()); + item.setCostLabel(sysEnergyInfo.getEnername() + "璐�"); + item.setAccumulationLabel(sysEnergyInfo.getEnername() + "鐢ㄩ噺"); + item.setCost(cost); + item.setAccumulation(accumulation); + // 缁勮鍥捐〃淇℃伅 + getTrendAnalysisCharInfoByEnergyType(startTime, timeType, energyConsumeVOList, item); + itemList.add(item); } - - // 缁勮缁熻鍥句俊鎭� - EnergyConsumeTrendDetailItem item = new EnergyConsumeTrendDetailItem(); - item.setEnergyType(energyType); - item.setCostLabel(sysEnergyInfo.getEnername() + "璐�"); - item.setAccumulationLabel(sysEnergyInfo.getEnername() + "鐢ㄩ噺"); - // 缁勮鍥捐〃淇℃伅 - getTrendAnalysisCharInfoByEnergyType(startTime, timeType, energyConsumeVOList, item); - - List<EnergyConsumeTrendDetailItem> itemList = new ArrayList<>(); - itemList.add(item); return itemList; } @@ -219,14 +233,14 @@ * @param item 杩斿洖瀵硅薄 */ private void getTrendAnalysisCharInfoByEnergyType(Date bsTime, String timeType, - List<EnergyConsumeVO> dataItems, EnergyConsumeTrendDetailItem item) { + List<EnergyConsumeVO> dataItems, EnergyConsumeTrendDetailItem item) { List<String> costKeyList = new ArrayList<>(); List<String> accumulationKeyList = new ArrayList<>(); List<BigDecimal> costValueList = new ArrayList<>(); List<BigDecimal> accumulationValueList = new ArrayList<>(); Map<String, List<EnergyConsumeVO>> energyConsumeVOMap; //鎸夋椂闂寸被鍨嬬粍缁囪繑鍥炴暟鎹� - switch (timeType){ + switch (timeType) { case TimeTypeConst.TIME_TYPE_DAY: energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime()))); for (int i = 0; i < CommonConst.DIGIT_24; i++) { diff --git a/zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml b/zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml index 37b928f..e06ddbe 100644 --- a/zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml +++ b/zhitan-system/src/main/resources/mapper/dataitem/DataItemMapper.xml @@ -215,4 +215,22 @@ AND ( begin_time BETWEEN #{beginTime} AND #{endTime} ) AND time_type = #{timeType} </select> + + <select id="getDataItemTimeRangeValueByNodeId" resultType="java.math.BigDecimal"> + SELECT + COALESCE (SUM ( "value" ), 0) + FROM + "data_item" di + JOIN energy_index ei ON di.index_id = ei.index_id + WHERE + di.index_id IN ( SELECT index_id FROM node_index WHERE node_id = #{nodeId}) + <if test="energyType !='' and energyType !=null and energyType =='allType'"> + AND ei.energy_id != '' + </if> + <if test="energyType !='' and energyType !=null and energyType !='allType'"> + AND ei.energy_id = #{energyType} + </if> + AND (di.data_time BETWEEN #{beginTime} AND #{endTime}) + AND di.time_type = #{timeType} + </select> </mapper> \ No newline at end of file diff --git a/zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml b/zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml index 449019b..d478107 100644 --- a/zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml +++ b/zhitan-system/src/main/resources/mapper/peakvalley/ElectricityDataItemMapper.xml @@ -65,12 +65,12 @@ "electricity_data_item" di JOIN energy_index ei ON di.index_id = ei.index_id WHERE - di.index_id IN ( SELECT index_id FROM node_index WHERE node_id = #{indexId}) - <if test="emissionType !='' and emissionType !=null and emissionType =='allType'"> + di.index_id IN ( SELECT index_id FROM node_index WHERE node_id = #{nodeId}) + <if test="energyType !='' and energyType !=null and energyType =='allType'"> AND ei.energy_id != '' </if> - <if test="emissionType !='' and emissionType !=null and emissionType !='allType'"> - AND ei.energy_id = #{emissionType} + <if test="energyType !='' and energyType !=null and energyType !='allType'"> + AND ei.energy_id = #{energyType} </if> AND (di.data_time BETWEEN #{beginTime} AND #{endTime}) AND di.time_type = #{timeType} -- Gitblit v1.9.3