sql/zhitan-ems_20250325182628.nb3Binary files differ
zhitan-admin/src/main/java/com/zhitan/web/controller/itemizedenergyanalysis/ItemizedEnergyAnalysisController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ package com.zhitan.web.controller.itemizedenergyanalysis; import com.zhitan.Itemizedenergyanalysis.domain.VO.ItemizedEnergyAnalysisVO; import com.zhitan.Itemizedenergyanalysis.dto.ItemizedEnergyAnalysisDTO; import com.zhitan.Itemizedenergyanalysis.service.IItemizedEnergyAnalysisService; import com.zhitan.common.core.domain.AjaxResult; import io.swagger.annotations.Api; 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; import static com.zhitan.common.core.domain.AjaxResult.success; /** * å项ç¨è½åæ æ¥å£ */ @RestController @RequestMapping("/itemizedEnergyAnalysis") @Api(value = "å项ç¨è½åæ", tags = {"å项ç¨è½åæ"}) public class ItemizedEnergyAnalysisController { @Autowired private IItemizedEnergyAnalysisService itemizedEnergyAnalysisService; /** * * @param dataItem * @return */ @GetMapping("list") private AjaxResult list(ItemizedEnergyAnalysisDTO dataItem) { ItemizedEnergyAnalysisVO list = itemizedEnergyAnalysisService.getItemizedEnergyAnalysisService(dataItem); return success(list); } } zhitan-common/src/main/java/com/zhitan/common/utils/PropUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,124 @@ package com.zhitan.common.utils; import com.alibaba.fastjson.JSONObject; 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(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/Itemizedenergyanalysis/domain/VO/ItemizedEnergyAnalysisItemVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,85 @@ package com.zhitan.Itemizedenergyanalysis.domain.VO; import com.zhitan.common.annotation.Excel; import lombok.Data; /** * */ @Data public class ItemizedEnergyAnalysisItemVO { /** * èç¹id */ private String nodeId; /** * èç¹åç§° */ private String nodeName; /** * å计 */ private Double total; @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/Itemizedenergyanalysis/domain/VO/ItemizedEnergyAnalysisVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,38 @@ package com.zhitan.Itemizedenergyanalysis.domain.VO; import com.zhitan.common.annotation.Excel; import lombok.Data; import java.util.List; /** * å项ç¨è½åæè¿åç±» * * @author å¼ */ @Data public class ItemizedEnergyAnalysisVO { /** * å计 */ private String total; /** * æå¤§å¼ */ private String max; /** * æå°å¼ */ private String min; /** * å¹³åå¼ */ private String avg; /** * åä½ */ private String unit; private List<ItemizedEnergyAnalysisItemVO> dataList; } zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/dto/ItemizedEnergyAnalysisDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.zhitan.Itemizedenergyanalysis.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * å¨ææ°æ®é¡¹. */ @Data public class ItemizedEnergyAnalysisDTO { @ApiModelProperty(value = "æ¶é´å符串") private String dataTime; @ApiModelProperty(value = "æ¶é´ç±»å") private String timeType; @ApiModelProperty(value = "è½æºç±»å") private String energyType; @ApiModelProperty(value = "èç¹Id") private String nodeId; } zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/IItemizedEnergyAnalysisService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ package com.zhitan.Itemizedenergyanalysis.service; import com.zhitan.Itemizedenergyanalysis.domain.VO.ItemizedEnergyAnalysisVO; import com.zhitan.Itemizedenergyanalysis.dto.ItemizedEnergyAnalysisDTO; public interface IItemizedEnergyAnalysisService { /** * å项ç¨è½åæ * @param dto 请æ±åæ° * @return ç»æ */ ItemizedEnergyAnalysisVO getItemizedEnergyAnalysisService(ItemizedEnergyAnalysisDTO dto); } zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,113 @@ package com.zhitan.Itemizedenergyanalysis.service.impl; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.zhitan.Itemizedenergyanalysis.domain.VO.ItemizedEnergyAnalysisItemVO; import com.zhitan.Itemizedenergyanalysis.domain.VO.ItemizedEnergyAnalysisVO; import com.zhitan.Itemizedenergyanalysis.dto.ItemizedEnergyAnalysisDTO; import com.zhitan.Itemizedenergyanalysis.service.IItemizedEnergyAnalysisService; import com.zhitan.common.constant.TimeTypeConst; import com.zhitan.common.exception.ServiceException; import com.zhitan.common.utils.DateTimeUtil; import com.zhitan.common.utils.PropUtils; import com.zhitan.dataitem.service.IDataItemService; import com.zhitan.model.domain.vo.ModelNodeIndexInfor; import com.zhitan.model.mapper.ModelNodeMapper; import com.zhitan.realtimedata.domain.DataItem; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; /** * å项ç¨è½åæ * * @author sys * @date 2021-01-11 */ @Service @AllArgsConstructor public class ItemizedEnergyAnalysisServiceImpl implements IItemizedEnergyAnalysisService { @Resource private final ModelNodeMapper modelNodeMapper; @Resource private final IDataItemService dataItemService; /** * @param dto 请æ±åæ° * @return ç»æ */ @Override public ItemizedEnergyAnalysisVO getItemizedEnergyAnalysisService(ItemizedEnergyAnalysisDTO 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 ItemizedEnergyAnalysisVO(); } 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 = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, timeType, indexList); // è·åæå¤§å¼ãæå°å¼ãå计ãå¹³åå¼ ItemizedEnergyAnalysisVO vo = new ItemizedEnergyAnalysisVO(); double sum = dataItemList.stream().mapToDouble(DataItem::getValue).sum(); double max = dataItemList.stream().mapToDouble(DataItem::getValue).max().getAsDouble(); double min = dataItemList.stream().mapToDouble(DataItem::getValue).min().getAsDouble(); double avg = dataItemList.stream().mapToDouble(DataItem::getValue).average().getAsDouble(); vo.setTotal(BigDecimal.valueOf(sum).setScale(2, RoundingMode.HALF_UP).toString()); vo.setMax(BigDecimal.valueOf(max).setScale(2, RoundingMode.HALF_UP).toString()); vo.setMin(BigDecimal.valueOf(min).setScale(2, RoundingMode.HALF_UP).toString()); vo.setAvg(BigDecimal.valueOf(avg).setScale(2, RoundingMode.HALF_UP).toString()); if(ObjectUtil.isNotEmpty(info.getUnitId())){ vo.setUnit(info.getUnitId()); } List<ItemizedEnergyAnalysisItemVO> voList = new ArrayList<>(); ItemizedEnergyAnalysisItemVO itemVO = new ItemizedEnergyAnalysisItemVO(); itemVO.setNodeId(info.getNodeId()); itemVO.setNodeName(info.getName()); itemVO.setTotal(sum); for (int i = 0; i < dataItemList.size(); i++) { PropUtils.setValue(itemVO,"value"+ i, dataItemList.get(i).getValue()); } voList.add(itemVO); vo.setDataList(voList); 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; @@ -32,45 +34,10 @@ */ private String energyId; /** * åä½ */ private String unitId; 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; } } 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