From 36a9d5bf9ac0c80bf051e159635ee749b0f10d07 Mon Sep 17 00:00:00 2001 From: VVT789 <67089238+VVT789@users.noreply.github.com> Date: 星期三, 26 三月 2025 11:24:44 +0800 Subject: [PATCH] Merge pull request #35 from Andy-Yin/develop1.0 --- zhitan-system/src/main/java/com/zhitan/branchanalysis/service/IBranchAnalysisService.java | 16 + zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/domain/VO/ItemizedEnergyAnalysisVO.java | 38 ++ zhitan-admin/src/main/resources/application-dev.yml | 6 zhitan-system/src/main/java/com/zhitan/model/domain/vo/ModelNodeIndexInfor.java | 42 +++ zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/domain/VO/ItemizedEnergyAnalysisItemVO.java | 85 ++++++ zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java | 91 ++++++ sql/zhitan-ems_20250325182628.nb3 | 0 zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/dto/ItemizedEnergyAnalysisDTO.java | 23 + zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml | 3 zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/IItemizedEnergyAnalysisService.java | 13 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 + zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java | 113 ++++++++ zhitan-system/src/main/java/com/zhitan/branchanalysis/mapper/BranchAnalysisMapper.java | 26 + zhitan-admin/src/main/java/com/zhitan/web/controller/itemizedenergyanalysis/ItemizedEnergyAnalysisController.java | 36 ++ zhitan-system/src/main/java/com/zhitan/model/domain/vo/ModelNodeIndexInfo.java | 6 zhitan-system/src/main/resources/mapper/branchanalysis/BranchAnalysisMapper.xml | 60 ++++ zhitan-common/src/main/java/com/zhitan/common/utils/PropUtils.java | 126 +++++++++ 19 files changed, 807 insertions(+), 6 deletions(-) diff --git a/sql/zhitan-ems_20250325182628.nb3 b/sql/zhitan-ems_20250325182628.nb3 new file mode 100644 index 0000000..6102f1e --- /dev/null +++ b/sql/zhitan-ems_20250325182628.nb3 Binary files differ 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..f6f0895 --- /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 2025-03-26 + */ +@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-admin/src/main/java/com/zhitan/web/controller/itemizedenergyanalysis/ItemizedEnergyAnalysisController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/itemizedenergyanalysis/ItemizedEnergyAnalysisController.java new file mode 100644 index 0000000..80badb9 --- /dev/null +++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/itemizedenergyanalysis/ItemizedEnergyAnalysisController.java @@ -0,0 +1,36 @@ +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); + } +} \ No newline at end of file diff --git a/zhitan-admin/src/main/resources/application-dev.yml b/zhitan-admin/src/main/resources/application-dev.yml index faa025f..29ebe27 100644 --- a/zhitan-admin/src/main/resources/application-dev.yml +++ b/zhitan-admin/src/main/resources/application-dev.yml @@ -6,9 +6,9 @@ druid: # 涓诲簱鏁版嵁婧� master: - url: jdbc:postgresql://127.0.0.1:5432/zhitan_ems - username: postgres - password: postgres + url: jdbc:postgresql://127.0.0.1:5432/zhitan_ems + username: postgres + password: postgres # 浠庡簱鏁版嵁婧� slave: # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴 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..1be9af3 --- /dev/null +++ b/zhitan-common/src/main/java/com/zhitan/common/utils/PropUtils.java @@ -0,0 +1,126 @@ +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/Itemizedenergyanalysis/domain/VO/ItemizedEnergyAnalysisItemVO.java b/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/domain/VO/ItemizedEnergyAnalysisItemVO.java new file mode 100644 index 0000000..3984bb6 --- /dev/null +++ b/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; +} diff --git a/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/domain/VO/ItemizedEnergyAnalysisVO.java b/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/domain/VO/ItemizedEnergyAnalysisVO.java new file mode 100644 index 0000000..1e6db62 --- /dev/null +++ b/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; +} diff --git a/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/dto/ItemizedEnergyAnalysisDTO.java b/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/dto/ItemizedEnergyAnalysisDTO.java new file mode 100644 index 0000000..b161b87 --- /dev/null +++ b/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; +} diff --git a/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/IItemizedEnergyAnalysisService.java b/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/IItemizedEnergyAnalysisService.java new file mode 100644 index 0000000..1c72f44 --- /dev/null +++ b/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); +} diff --git a/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java new file mode 100644 index 0000000..6b8fb0d --- /dev/null +++ b/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.ModelNodeIndexInfo; +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 2025-03-25 + */ +@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<ModelNodeIndexInfo> nodeIndexInfo = modelNodeMapper.getModelNodeIndexIdByNodeId(dto.getNodeId(), dto.getEnergyType()); + List<String> indexList = nodeIndexInfo.stream().map(ModelNodeIndexInfo::getIndexId).collect(Collectors.toList()); + + if(ObjectUtil.isEmpty(indexList)){ + return new ItemizedEnergyAnalysisVO(); + } + + ModelNodeIndexInfo 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; + } +} 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..443fc99 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java @@ -0,0 +1,91 @@ +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.ModelNodeIndexInfo; +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<ModelNodeIndexInfo> nodeIndexInfo = modelNodeMapper.getModelNodeIndexIdByNodeId(dto.getNodeId(), dto.getEnergyType()); + List<String> indexlist = nodeIndexInfo.stream().map(ModelNodeIndexInfo::getIndexId).collect(Collectors.toList()); + + if (ObjectUtil.isEmpty(indexlist)) { + return new BranchAnalysisVO(); + } + + ModelNodeIndexInfo 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/ModelNodeIndexInfo.java b/zhitan-system/src/main/java/com/zhitan/model/domain/vo/ModelNodeIndexInfo.java index a99de97..cd2b19c 100644 --- a/zhitan-system/src/main/java/com/zhitan/model/domain/vo/ModelNodeIndexInfo.java +++ b/zhitan-system/src/main/java/com/zhitan/model/domain/vo/ModelNodeIndexInfo.java @@ -38,7 +38,6 @@ * 鍚嶇О */ private String nodeName; - /** * 鐐逛綅id */ @@ -60,5 +59,8 @@ * 鐐逛綅绫诲瀷 */ private String indexType; - + /** + * 鍗曚綅 + */ + private String unitId; } 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 new file mode 100644 index 0000000..a4c0de4 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/model/domain/vo/ModelNodeIndexInfor.java @@ -0,0 +1,42 @@ +package com.zhitan.model.domain.vo; + + +import com.zhitan.common.core.domain.BaseEntity; +import lombok.Data; + +/** + * 妯″瀷鑺傜偣涓庣偣浣嶅叧绯诲璞� + * + * @Author: Zhujw + * @Date: 2023/3/2 + */ +@Data +public class ModelNodeIndexInfor extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 涓婚敭 + */ + private String nodeId; + + /** + * 鍚嶇О + */ + private String name; + + /** + * 鐐逛綅id + */ + private String indexId; + + /** + * 鑳芥簮绫诲瀷 + */ + private String energyId; + + private String 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 ab63dde..eb7fbde 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