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); } } 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; } } 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; } 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); } 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); } 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; } } 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; } 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; } 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> 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