From 2e732cecef614ebf288a251e8bf47771b59045e9 Mon Sep 17 00:00:00 2001 From: zt916916 <1903964620@qq.com> Date: 星期二, 25 三月 2025 19:10:39 +0800 Subject: [PATCH] 重点设备能耗日月年搜索优化 --- zhitan-system/src/main/java/com/zhitan/branchanalysis/service/IBranchAnalysisService.java | 16 + zhitan-system/src/main/java/com/zhitan/branchanalysis/mapper/BranchAnalysisMapper.java | 26 ++ zhitan-system/src/main/java/com/zhitan/model/domain/vo/ModelNodeIndexInfor.java | 46 ---- zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java | 90 ++++++++++ zhitan-system/src/main/resources/mapper/branchanalysis/BranchAnalysisMapper.xml | 60 ++++++ zhitan-common/src/main/java/com/zhitan/common/utils/PropUtils.java | 125 +++++++++++++ zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml | 3 zhitan-system/src/main/java/com/zhitan/branchanalysis/domain/BranchAnalysisVO.java | 75 ++++++++ zhitan-admin/src/main/java/com/zhitan/web/controller/branchanalysis/BranchEnergyAnalysisController.java | 37 ++++ zhitan-system/src/main/java/com/zhitan/realtimedata/domain/dto/BranchAnalysisDTO.java | 17 + 10 files changed, 454 insertions(+), 41 deletions(-) diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/branchanalysis/BranchEnergyAnalysisController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/branchanalysis/BranchEnergyAnalysisController.java new file mode 100644 index 0000000..4b7d035 --- /dev/null +++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/branchanalysis/BranchEnergyAnalysisController.java @@ -0,0 +1,37 @@ +package com.zhitan.web.controller.branchanalysis; + +import com.zhitan.branchanalysis.domain.BranchAnalysisVO; +import com.zhitan.common.core.controller.BaseController; +import com.zhitan.common.core.domain.AjaxResult; +import com.zhitan.branchanalysis.service.IBranchAnalysisService; + +import com.zhitan.realtimedata.domain.dto.BranchAnalysisDTO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *鏀矾鐢ㄨ兘鍒嗘瀽 + * + * @author zt + * @date 2021-01-11 + */ +@RestController +@RequestMapping("/branchanalysis") +@Api(value = "鏀矾鐢ㄨ兘鑳借�楃粺璁�",tags = {"鏀矾鐢ㄨ兘鍒嗘瀽"}) +public class BranchEnergyAnalysisController extends BaseController { + + @Autowired + private IBranchAnalysisService branchAnalysisService; + + @GetMapping("/list") + @ApiOperation(value = "鏀矾鐢ㄨ兘鑳借�楃粺璁″垪琛�") + public AjaxResult list(BranchAnalysisDTO dataItem) { + BranchAnalysisVO vo = branchAnalysisService.getBranchAnalysisService(dataItem); + return success(vo); + } +} + diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/PropUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/PropUtils.java new file mode 100644 index 0000000..e8cad8b --- /dev/null +++ b/zhitan-common/src/main/java/com/zhitan/common/utils/PropUtils.java @@ -0,0 +1,125 @@ +package com.zhitan.common.utils; + +import com.alibaba.fastjson.JSONObject; +import com.zhitan.common.constant.CommonConst; + +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + * @Description: 灞炴�у�兼搷浣滃伐鍏风被 + * @author: yxw + * @date: 2022骞�03鏈�07鏃� 9:57 + */ +public class PropUtils { + /** + * 涓哄疄浣撹祴鍊� + * + * @param obj + * @param propName + * @param value + * @return + */ + public static Object setValue(Object obj, String propName, Object value) { + try { + Field field = obj.getClass().getDeclaredField(propName); + field.setAccessible(true); + String nameTypeName = field.getType().getTypeName(); + nameTypeName = StringUtil.ifEmptyOrNullReturnValue(nameTypeName).toLowerCase(); + if (nameTypeName.contains("float")) { + float num = (float) DoubleUtil.toDouble(value); + field.set(obj, num); + } else if (nameTypeName.contains("double")) { + field.set(obj, DoubleUtil.toDouble(value)); + } else if (nameTypeName.contains("bigdecimal")) { + BigDecimal valueOf = BigDecimal.valueOf(Double.parseDouble(String.valueOf(value))) + .setScale(CommonConst.DIGIT_2, BigDecimal.ROUND_HALF_UP); + field.set(obj, valueOf); + } else { + field.set(obj, value); + } + } catch (Exception e) { + return null; + } + return obj; + } + + /** + * 鑾峰彇瀵硅薄鐨勬寚瀹氬瓧娈电殑鍊� + * + * @param obj + * @param propName + * @return + */ + public static String getPropValue(Object obj, String propName) { + String propValue = ""; + try { + if (null != obj) { + JSONObject jsonObject = StringUtil.toJsonObject(obj); + if (!StringUtil.isEmptyOrNull(propName)) { + propValue = jsonObject.getString(propName); + } + } + } catch (Exception e) { + } + return propValue; + } + + /** + * 鑾峰彇瀵硅薄鐨勬寚瀹氬瓧娈电殑绫诲瀷 + * 杩斿洖灞炴�х殑绫诲瀷瀛楃涓诧紙灏忓啓锛屼緥濡�:string/integer/double/date锛� + * + * @param obj 瀹炰綋 + * @param propName 灞炴�у悕 + * @return 锛堝皬鍐欙紝渚嬪:string/integer/double/date锛� + */ + public static String getPropType(Object obj, String propName) { + String propType = ""; + try { + if (null != obj && !StringUtil.isEmptyOrNull(propName)) { + Field[] fields = obj.getClass().getDeclaredFields(); + for (Field field : fields) { + String name = field.getName().toLowerCase(); + if (name.equals(propName.toLowerCase())) { + propType = field.getType().getSimpleName().toLowerCase(); + } + } + } + + } catch (Exception e) { + + } + return propType; + } + + /** + * 琛岃浆鍒� + * @param clazz 缁撴灉绫伙紝濡� UserInfo.class + * @param list 鏁版嵁闆� + * @return + * @param <T> + */ + public static <T> List rowToColumn(Class<T> clazz, List<T> list){ + List<List> result; + Field[] fields = clazz.getDeclaredFields(); + result = new ArrayList<>(fields.length); + for (int i = 0; i < fields.length; i++) { + result.add(new ArrayList()); + } + for (T t : list) { + for (int i = 0; i < fields.length; i++) { + List l = result.get(i); + Field field = fields[i]; + field.setAccessible(true); + try { + l.add(field.get(t)); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + return result; + } +} diff --git a/zhitan-system/src/main/java/com/zhitan/branchanalysis/domain/BranchAnalysisVO.java b/zhitan-system/src/main/java/com/zhitan/branchanalysis/domain/BranchAnalysisVO.java new file mode 100644 index 0000000..d92116d --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/branchanalysis/domain/BranchAnalysisVO.java @@ -0,0 +1,75 @@ +package com.zhitan.branchanalysis.domain; +import com.zhitan.common.annotation.Excel; +import lombok.Data; + +@Data +public class BranchAnalysisVO { + private String until; + private double total; + @Excel(name = "鑺傜偣id") + private String nodeId; + @Excel(name = "瀛楄妭鍚嶇О") + private String nodeName; + @Excel(name = "1鏃�/1鏃�/1鏈�") + private Double value0; + @Excel(name = "2鏃�/2鏃�/2鏈�") + private Double value1; + @Excel(name = "3鏃�/3鏃�/3鏈�") + private Double value2; + @Excel(name = "4鏃�/4鏃�/4鏈�") + private Double value3; + @Excel(name = "5鏃�/5鏃�/5鏈�") + private Double value4; + @Excel(name = "6鏃�/6鏃�/6鏈�") + private Double value5; + @Excel(name = "7鏃�/7鏃�/7鏈�") + private Double value6; + @Excel(name = "8鏃�/8鏃�/8鏈�") + private Double value7; + @Excel(name = "9鏃�/9鏃�/9鏈�") + private Double value8; + @Excel(name = "10鏃�/10鏃�/10鏈�") + private Double value9; + @Excel(name = "11鏃�/11鏃�/11鏈�") + private Double value10; + @Excel(name = "12鏃�/12鏃�/12鏈�") + private Double value11; + @Excel(name = "13鏃�/13鏃�") + private Double value12; + @Excel(name = "14鏃�/14鏃�") + private Double value13; + @Excel(name = "15鏃�/15鏃�") + private Double value14; + @Excel(name = "16鏃�/16鏃�") + private Double value15; + @Excel(name = "17鏃�/17鏃�") + private Double value16; + @Excel(name = "18鏃�18鏃�") + private Double value17; + @Excel(name = "19鏃�/19鏃�") + private Double value18; + @Excel(name = "20鏃�/20鏃�") + private Double value19; + @Excel(name = "21鏃�/21鏃�") + private Double value20; + @Excel(name = "22鏃�/22鏃�") + private Double value21; + @Excel(name = "23鏃�/23鏃�") + private Double value22; + @Excel(name = "24鏃�/24鏃�") + private Double value23; + @Excel(name = "25鏃�") + private Double value24; + @Excel(name = "26鏃�") + private Double value25; + @Excel(name = "27鏃�") + private Double value26; + @Excel(name = "28鏃�") + private Double value27; + @Excel(name = "29鏃�") + private Double value28; + @Excel(name = "30鏃�") + private Double value29; + @Excel(name = "31鏃�") + private Double value30; +} diff --git a/zhitan-system/src/main/java/com/zhitan/branchanalysis/mapper/BranchAnalysisMapper.java b/zhitan-system/src/main/java/com/zhitan/branchanalysis/mapper/BranchAnalysisMapper.java new file mode 100644 index 0000000..d6d482d --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/branchanalysis/mapper/BranchAnalysisMapper.java @@ -0,0 +1,26 @@ +package com.zhitan.branchanalysis.mapper; + +import com.zhitan.branchanalysis.domain.BranchAnalysisVO; +import com.zhitan.common.utils.TypeTime; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +/** + *鏀矾鐢ㄨ兘鍒嗘瀽 + * + * @author sys + * @date 2021-01-11 + */ +public interface BranchAnalysisMapper { + public List<BranchAnalysisVO> getBranchAnalysisList(@Param("indexIds") List<String> indexIds, + @Param("dataList") List<TypeTime> dataList, + @Param("beginTime") Date beginTime, + @Param("endTime") Date endTime, + @Param("timeType") String timeType, + @Param("indexStorageId") String indexStorageId); + + +} + diff --git a/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/IBranchAnalysisService.java b/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/IBranchAnalysisService.java new file mode 100644 index 0000000..d5d04c3 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/IBranchAnalysisService.java @@ -0,0 +1,16 @@ +package com.zhitan.branchanalysis.service; + + +import com.zhitan.branchanalysis.domain.BranchAnalysisVO; +import com.zhitan.realtimedata.domain.dto.BranchAnalysisDTO; + + +public interface IBranchAnalysisService { + /** + * 鏀矾鐢ㄨ兘鍒嗘瀽 + * + * @author sys + * @date 2021-01-11 + */ + BranchAnalysisVO getBranchAnalysisService(BranchAnalysisDTO dataItem); +} diff --git a/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java new file mode 100644 index 0000000..82f5062 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java @@ -0,0 +1,90 @@ +package com.zhitan.branchanalysis.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.zhitan.branchanalysis.domain.BranchAnalysisVO; +import com.zhitan.common.constant.TimeTypeConst; +import com.zhitan.common.exception.ServiceException; +import com.zhitan.common.utils.DateTimeUtil; +import com.zhitan.branchanalysis.service.IBranchAnalysisService; +import com.zhitan.common.utils.PropUtils; +import com.zhitan.dataitem.mapper.DataItemMapper; +import com.zhitan.model.domain.vo.ModelNodeIndexInfor; +import com.zhitan.model.mapper.ModelNodeMapper; +import com.zhitan.realtimedata.domain.DataItem; +import com.zhitan.realtimedata.domain.dto.BranchAnalysisDTO; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * c + * + * @author sys + * @date 2021-01-11 + */ +@Service +@AllArgsConstructor +public class BranchAnalysisServiceImpl implements IBranchAnalysisService { + + private ModelNodeMapper modelNodeMapper; + private DataItemMapper dataItemMapper; + + @Override + public BranchAnalysisVO getBranchAnalysisService(BranchAnalysisDTO dto) { + String timeType = dto.getTimeType(); + String dataTime = dto.getDataTime(); + Date beginTime = DateTimeUtil.getTypeTime(timeType, dataTime); + DateTime endTime = null; + + List<ModelNodeIndexInfor> nodeIndexInfo = modelNodeMapper.getModelNodeIndexIdByNodeId(dto.getNodeId(), dto.getEnergyType()); + List<String> indexlist = nodeIndexInfo.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList()); + + if (ObjectUtil.isEmpty(indexlist)) { + return new BranchAnalysisVO(); + } + + ModelNodeIndexInfor info = nodeIndexInfo.stream().findFirst().get(); + + //鏍规嵁鏃堕棿绫诲瀷璋冩暣鏃堕棿鑼冨洿 + switch (dto.getTimeType()) { + case TimeTypeConst.TIME_TYPE_DAY: + timeType = TimeTypeConst.TIME_TYPE_HOUR; + endTime = DateUtil.endOfDay(beginTime); + break; + case TimeTypeConst.TIME_TYPE_MONTH: + timeType = TimeTypeConst.TIME_TYPE_DAY; + endTime = DateUtil.endOfMonth(beginTime); + break; + case TimeTypeConst.TIME_TYPE_YEAR: + timeType = TimeTypeConst.TIME_TYPE_MONTH; + endTime = DateUtil.endOfYear(beginTime); + break; + default: + throw new ServiceException("鏃堕棿鏍煎紡閿欒"); + } + //鑾峰彇鏁版嵁椤瑰垪琛� + List<DataItem> dataItemlist = dataItemMapper.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, timeType, indexlist); + + BranchAnalysisVO vo = new BranchAnalysisVO(); + double sum = dataItemlist.stream().mapToDouble(DataItem::getValue).sum(); + vo.setTotal(sum); + if (ObjectUtil.isNotEmpty(info.getIndexId())) { + vo.setUntil(info.getUnitId()); + } + + vo.setNodeId(info.getNodeId()); + vo.setNodeName(info.getName()); + for (int i = 0; i < dataItemlist.size(); i++) { + PropUtils.setValue(vo, "value" + i, dataItemlist.get(i).getValue()); + } + + return vo; + + + } +} diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/vo/ModelNodeIndexInfor.java b/zhitan-system/src/main/java/com/zhitan/model/domain/vo/ModelNodeIndexInfor.java index e52a163..a4c0de4 100644 --- a/zhitan-system/src/main/java/com/zhitan/model/domain/vo/ModelNodeIndexInfor.java +++ b/zhitan-system/src/main/java/com/zhitan/model/domain/vo/ModelNodeIndexInfor.java @@ -2,6 +2,7 @@ import com.zhitan.common.core.domain.BaseEntity; +import lombok.Data; /** * 妯″瀷鑺傜偣涓庣偣浣嶅叧绯诲璞� @@ -9,6 +10,7 @@ * @Author: Zhujw * @Date: 2023/3/2 */ +@Data public class ModelNodeIndexInfor extends BaseEntity { private static final long serialVersionUID = 1L; @@ -33,44 +35,8 @@ private String energyId; private String indexType; - - public String getNodeId() { - return nodeId; - } - - public void setNodeId(String nodeId) { - this.nodeId = nodeId; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getIndexId() { - return indexId; - } - - public void setIndexId(String indexId) { - this.indexId = indexId; - } - - public String getEnergyId() { - return energyId; - } - - public void setEnergyId(String energyId) { - this.energyId = energyId; - } - - public String getIndexType() { - return indexType; - } - - public void setIndexType(String indexType) { - this.indexType = indexType; - } + /** + * 鍗曚綅 + */ + private String unitId; } diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/dto/BranchAnalysisDTO.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/dto/BranchAnalysisDTO.java new file mode 100644 index 0000000..cdb93b7 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/domain/dto/BranchAnalysisDTO.java @@ -0,0 +1,17 @@ +package com.zhitan.realtimedata.domain.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +@Data +public class BranchAnalysisDTO { + + + @ApiModelProperty(value="鑺傜偣id") + private String nodeId; + @ApiModelProperty(value ="鏃堕棿瀛楃涓�") + private String dataTime; + @ApiModelProperty(value ="鏃堕棿绫诲瀷") + private String timeType; + @ApiModelProperty(value = "鑳芥簮绫诲瀷") + private String energyType; +} diff --git a/zhitan-system/src/main/resources/mapper/branchanalysis/BranchAnalysisMapper.xml b/zhitan-system/src/main/resources/mapper/branchanalysis/BranchAnalysisMapper.xml new file mode 100644 index 0000000..db0ed23 --- /dev/null +++ b/zhitan-system/src/main/resources/mapper/branchanalysis/BranchAnalysisMapper.xml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.zhitan.branchanalysis.mapper.BranchAnalysisMapper"> + <resultMap id="dataItemMap" type="com.zhitan.branchanalysis.domain.BranchAnalysisVO"> + <result column="index_id" property="indexId"/> + <result column="index_name" property="indexName"/> + <result column="time_type" property="timeType"/> + <result column="time_code" property="timeCode"/> + <result column="unit_id" property="unitId"/> + <result column="value1" property="value1"/> + <result column="value2" property="value2"/> + <result column="value3" property="value3"/> + <result column="value4" property="value4"/> + <result column="value5" property="value5"/> + <result column="value6" property="value6"/> + <result column="value7" property="value7"/> + <result column="value8" property="value8"/> + <result column="value9" property="value9"/> + <result column="value10" property="value10"/> + <result column="value11" property="value11"/> + <result column="value12" property="value12"/> + </resultMap> + <!--鍏ㄥ巶鑳借�楃粺璁�--> + <select id="getBranchAnalysisList" resultMap="dataItemMap"> + SELECT + aa.index_id, + aa.index_name, + <foreach item="item" index="index" collection="dataList"> + MAX ( CASE WHEN data_time = #{item.dateTime} THEN "value" END ) AS ${item.value}, + </foreach> + aa.time_type + FROM + ( + SELECT + ci.index_id, + ci.NAME AS "index_name", + di."value", + di.data_time, + di.time_type + FROM + data_item di LEFT JOIN energy_index ci ON di.index_id = ci.index_id + LEFT JOIN facility_archives f ON f."id"=ci.equipment + WHERE + di.data_time >= #{beginTime} + AND di.data_time < #{endTime} + AND di.index_id IN + <foreach item="indexId" index="index" collection="indexIds" open="(" separator="," close=")"> + #{indexId} + </foreach> + AND di.time_type = #{timeType} + <if test="indexStorageId !='' and indexStorageId !=null"> + and ci.energy_id=#{indexStorageId} + </if> + ) aa + GROUP BY + aa.index_id,aa.index_name,aa.time_type + </select> +</mapper> diff --git a/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml b/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml index f0fe5ef..5d222b3 100644 --- a/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml +++ b/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml @@ -385,7 +385,8 @@ mn."name" "name", ni.index_id indexId, ei.energy_id energyId, - ei.index_type indexType + ei.index_type indexType, + ei.unit_id unitId FROM "model_node" mn LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id LEFT JOIN energy_index ei on ni.index_id = ei.index_id -- Gitblit v1.9.3