From 7dfd10611e89eb9014e862d6b336d2e39fbecf81 Mon Sep 17 00:00:00 2001
From: DYL <Dn1332079466>
Date: 星期一, 10 二月 2025 11:31:44 +0800
Subject: [PATCH] 获取三相不平衡数据
---
zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java | 15
zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricThreePhaseController.java | 64 ++++
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseVO.java | 23 +
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseTempModel.java | 44 ++
zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricThreePhaseService.java | 20 +
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseDetail.java | 55 +++
zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseItem.java | 44 ++
zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java | 182 ++++++-----
zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricThreePhaseServiceImpl.java | 413 +++++++++++++++++++++++++++
9 files changed, 772 insertions(+), 88 deletions(-)
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricThreePhaseController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricThreePhaseController.java
new file mode 100644
index 0000000..fca2c2d
--- /dev/null
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricThreePhaseController.java
@@ -0,0 +1,64 @@
+package com.zhitan.web.controller.energyMonitor;
+
+import com.zhitan.common.annotation.Log;
+import com.zhitan.common.core.controller.BaseController;
+import com.zhitan.common.core.domain.AjaxResult;
+import com.zhitan.energyMonitor.service.IElectricThreePhaseService;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.model.service.IEnergyIndexService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @Description: 涓夌浉涓嶅钩琛�
+ * @Author: yxw
+ * @Date: 2022-04-24
+ * @Version: V1.2
+ */
+@Api(tags = "涓夌浉涓嶅钩琛�")
+@RestController
+@RequestMapping("/threePhaseUnbalanceAnalysis")
+@Slf4j
+public class ElectricThreePhaseController extends BaseController {
+
+ @Autowired
+ private IElectricThreePhaseService electricThreePhaseService;
+ @Autowired
+ private IEnergyIndexService energyIndexService;
+
+ /**
+ * 鑾峰彇鐢ㄨ兘鍗曞厓涓嬬殑鏌愪釜鐢佃〃鐨勪笁鐩镐笉骞宠 鏁版嵁
+ *
+ * @param nodeId 鑺傜偣id
+ * @param meterId 鐢佃〃id
+ * @param timeType 鏃堕棿绫诲瀷 DAY/MONTH/YEAR
+ * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21/2022-03/2022
+ * @param requestType 璇锋眰绫诲瀷锛�0.鐢靛帇锛�1.鐢垫祦
+ * @return
+ */
+ @Log(title = "鏍规嵁鐢佃〃id鏌ヨ涓夌浉涓嶅钩琛℃暟鎹�")
+ @ApiOperation(value = "鏍规嵁鐢佃〃id鏌ヨ涓夌浉涓嶅钩琛℃暟鎹�", notes = "鏍规嵁鐢佃〃id鏌ヨ涓夌浉涓嶅钩琛℃暟鎹�")
+ @GetMapping(value = "/detail")
+ public AjaxResult list(@RequestParam(name = "nodeId") String nodeId,
+ @RequestParam(name = "meterId") String meterId,
+ @RequestParam(name = "timeType") String timeType,
+ @RequestParam(name = "timeCode") String timeCode,
+ @RequestParam(name = "requestType") String requestType) {
+ if (ObjectUtils.isEmpty(meterId)){
+ return AjaxResult.error("鐢佃〃id涓嶈兘涓虹┖");
+ }
+ List<EnergyIndex> energyIndexList = energyIndexService.listDeviceIndex(nodeId, meterId);
+
+ return AjaxResult.success(electricThreePhaseService.list(timeType, timeCode, energyIndexList, requestType, meterId));
+ }
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseDetail.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseDetail.java
new file mode 100644
index 0000000..6175ef9
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseDetail.java
@@ -0,0 +1,55 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:59
+ */
+@Data
+public class ElectricThreePhaseDetail {
+ /**
+ * 鏈�澶у姛鐜囧洜鏁�
+ */
+ private String max;
+ /**
+ * 鏈�澶у姛鐜囧洜鏁板彂鐢熸椂闂�
+ */
+ private String maxTime;
+ /**
+ * 鏈�灏忓姛鐜囧洜鏁�
+ */
+ private String min;
+ /**
+ * 鏈�灏忓姛鐜囧洜鏁板彂鐢熸椂闂�
+ */
+ private String minTime;
+
+ /**
+ * 鏈�澶у��-A鐩哥數娴�/鐢靛帇
+ */
+ private String valueMaxA;
+ /**
+ * 鏈�澶у��-B鐩哥數娴�/鐢靛帇
+ */
+ private String valueMaxB;
+ /**
+ * 鏈�澶у��-C鐩哥數娴�/鐢靛帇
+ */
+ private String valueMaxC;
+
+ /**
+ * 鏈�灏忓��-A鐩哥數娴�/鐢靛帇
+ */
+ private String valueMinA;
+ /**
+ * 鏈�灏忓��-B鐩哥數娴�/鐢靛帇
+ */
+ private String valueMinB;
+ /**
+ * 鏈�灏忓��-C鐩哥數娴�/鐢靛帇
+ */
+ private String valueMinC;
+
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseItem.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseItem.java
new file mode 100644
index 0000000..779321a
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseItem.java
@@ -0,0 +1,44 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:59
+ */
+@Data
+public class ElectricThreePhaseItem {
+ /**
+ * 鐢佃〃鍚嶇О
+ */
+ private String name;
+ /**
+ * 鏃堕棿
+ */
+ private String timeCode;
+ /**
+ * 缁熻鍥炬樉绀烘椂闂�
+ */
+ private String timeCodeChart;
+ /**
+ * 鏈�澶т笁鐩镐笉骞宠
+ */
+ private String max;
+ /**
+ * 鏈�灏忎笁鐩镐笉骞宠
+ */
+ private String min;
+ /**
+ * A鐩哥數娴�/鐢靛帇
+ */
+ private String valueA;
+ /**
+ * D鐩哥數娴�/鐢靛帇
+ */
+ private String valueB;
+ /**
+ * C鐩哥數娴�/鐢靛帇
+ */
+ private String valueC;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseTempModel.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseTempModel.java
new file mode 100644
index 0000000..5051870
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseTempModel.java
@@ -0,0 +1,44 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�05鏈�06鏃� 14:02
+ */
+@Data
+public class ElectricThreePhaseTempModel {
+
+ private Double max;
+ private Date maxTime;
+ private Double min;
+ private Date minTime;
+ /**
+ * 鏈�澶у��-A鐩哥數娴�/鐢靛帇
+ */
+ private double valueMaxA;
+ /**
+ * 鏈�澶у��-B鐩哥數娴�/鐢靛帇
+ */
+ private double valueMaxB;
+ /**
+ * 鏈�澶у��-C鐩哥數娴�/鐢靛帇
+ */
+ private double valueMaxC;
+
+ /**
+ * 鏈�灏忓��-A鐩哥數娴�/鐢靛帇
+ */
+ private double valueMinA;
+ /**
+ * 鏈�灏忓��-B鐩哥數娴�/鐢靛帇
+ */
+ private double valueMinB;
+ /**
+ * 鏈�灏忓��-C鐩哥數娴�/鐢靛帇
+ */
+ private double valueMinC;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseVO.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseVO.java
new file mode 100644
index 0000000..76e9e74
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseVO.java
@@ -0,0 +1,23 @@
+package com.zhitan.energyMonitor.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Description: TODO
+ * @author: yxw
+ * @date: 2022骞�04鏈�24鏃� 16:58
+ */
+@Data
+public class ElectricThreePhaseVO {
+ /**
+ * 璁板綍鍒楄〃
+ */
+ private List<ElectricThreePhaseItem> itemList;
+
+ /**
+ * 璇︽儏瀹炰綋
+ */
+ private ElectricThreePhaseDetail detail;
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricThreePhaseService.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricThreePhaseService.java
new file mode 100644
index 0000000..8b8ce8d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricThreePhaseService.java
@@ -0,0 +1,20 @@
+package com.zhitan.energyMonitor.service;
+
+import com.zhitan.energyMonitor.domain.vo.ElectricThreePhaseVO;
+import com.zhitan.model.domain.EnergyIndex;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author: jeecg-boot
+ * @Date: 2022-04-19
+ * @Version: V1.0
+ */
+public interface IElectricThreePhaseService {
+
+ /**
+ * 鑾峰彇涓夌浉涓嶅钩琛℃暟鎹�
+ */
+ ElectricThreePhaseVO list(String timeType, String timeCode, List<EnergyIndex> energyIndexList, String requestType, String meterId);
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricThreePhaseServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricThreePhaseServiceImpl.java
new file mode 100644
index 0000000..5a21836
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricThreePhaseServiceImpl.java
@@ -0,0 +1,413 @@
+package com.zhitan.energyMonitor.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.zhitan.basicdata.domain.MeterImplement;
+import com.zhitan.basicdata.mapper.MeterImplementMapper;
+import com.zhitan.common.constant.CommonConst;
+import com.zhitan.common.constant.TimeTypeConst;
+import com.zhitan.common.utils.*;
+import com.zhitan.energyMonitor.domain.vo.ElectricThreePhaseDetail;
+import com.zhitan.energyMonitor.domain.vo.ElectricThreePhaseItem;
+import com.zhitan.energyMonitor.domain.vo.ElectricThreePhaseTempModel;
+import com.zhitan.energyMonitor.domain.vo.ElectricThreePhaseVO;
+import com.zhitan.energyMonitor.service.IElectricThreePhaseService;
+import com.zhitan.model.domain.EnergyIndex;
+import com.zhitan.realtimedata.domain.TagValue;
+import com.zhitan.realtimedata.service.RealtimeDatabaseService;
+import org.joda.time.DateTime;
+import org.joda.time.Duration;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: sensor_alarm_item
+ * @Author: jeecg-boot
+ * @Date: 2022-04-19
+ * @Version: V1.0
+ */
+@Service
+public class ElectricThreePhaseServiceImpl implements IElectricThreePhaseService {
+
+ @Autowired
+ private RealtimeDatabaseService realtimeDatabaseService;
+ @Resource
+ private MeterImplementMapper meterImplementMapper;
+
+ /**
+ * 鑾峰彇涓夌浉涓嶅钩琛℃暟鎹�
+ *
+ * @param timeType 鏃堕棿绫诲瀷
+ * @param timeCode 鏃堕棿缂栫爜
+ * @param energyIndexList 鐐逛綅闆嗗悎
+ * @param requestType 绫诲瀷
+ * @return ElectricThreePhaseVo
+ * @Date 14:27 2022/5/30
+ **/
+ @Override
+ public ElectricThreePhaseVO list(String timeType, String timeCode, List<EnergyIndex> energyIndexList, String requestType, String meterId) {
+ ElectricThreePhaseVO vo = new ElectricThreePhaseVO();
+ if (ObjectUtil.isEmpty(energyIndexList)) {
+ return vo;
+ }
+ // 鑾峰彇鐢靛帇涓嶅钩琛℃暟鎹�
+ if (CommonConst.STR_NUMBER_0.equals(requestType)) {
+ energyIndexList = energyIndexList.stream()
+ .filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getCode()).trim().endsWith(CommonConst.TAG_CODE_VOLTAGE_A)
+ || StringUtil.ifEmptyOrNullReturnValue(x.getCode()).trim().endsWith(CommonConst.TAG_CODE_VOLTAGE_B)
+ || StringUtil.ifEmptyOrNullReturnValue(x.getCode()).trim().endsWith(CommonConst.TAG_CODE_VOLTAGE_C)).collect(Collectors.toList());
+ } else {
+ energyIndexList = energyIndexList.stream()
+ .filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getCode()).trim().endsWith(CommonConst.TAG_CODE_CURRENT_A)
+ || StringUtil.ifEmptyOrNullReturnValue(x.getCode()).trim().endsWith(CommonConst.TAG_CODE_CURRENT_B)
+ || StringUtil.ifEmptyOrNullReturnValue(x.getCode()).trim().endsWith(CommonConst.TAG_CODE_CURRENT_C))
+ .collect(Collectors.toList());
+ }
+ List<String> tagCodeList = energyIndexList.stream().map(EnergyIndex::getCode).collect(Collectors.toList());
+ tagCodeList.add(CommonConst.STR_NUMBER_MINUS_ONE);
+ String tagCodes = String.join(StrUtil.COMMA, tagCodeList);
+
+ Date start = ChartUtils.getDateTime(timeType, timeCode);
+ Date end = getEndTime(timeType, start);
+
+ DateTime begin = new DateTime(start);
+ DateTime finish = new DateTime(end);
+ long millis = new Duration(begin, finish).getMillis();
+ int pointCount = IntegerUtil.toInt(millis / CommonConst.DIGIT_3600 / CommonConst.DIGIT_1000);
+
+ List<TagValue> tagValueList = realtimeDatabaseService.retrieve(tagCodes, start, end, pointCount);
+ List<ElectricThreePhaseItem> itemList = new ArrayList<>();
+ List<Date> dateList = new ArrayList<>();
+ ChartUtils.generateDateList(timeType, timeCode, dateList);
+ ElectricThreePhaseTempModel tempModel = new ElectricThreePhaseTempModel();
+
+ Date now = new Date();
+ for (Date date : dateList) {
+ Date tempDate = date;
+ Date temNow = now;
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ tempDate = DateTimeUtil.addHours(date, CommonConst.DIGIT_1);
+ //褰撳墠鏃堕棿杞垚鏁存椂鏁寸偣
+ temNow = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_HOUR, now);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ tempDate = date;
+ //褰撳墠鏃堕棿杞垚鏁存椂鏁寸偣
+ temNow = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_DAY, now);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ tempDate = date;
+ temNow = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_MONTH, now);
+ break;
+ default:
+ break;
+ }
+ MeterImplement meterImplement = meterImplementMapper.selectById(meterId);
+
+ ElectricThreePhaseItem temp = new ElectricThreePhaseItem();
+ if (ObjectUtil.isNotEmpty(meterImplement)) {
+ temp.setName(meterImplement.getMeterName());
+ }
+ temp.setTimeCode(ChartUtils.getTimeCode(timeType, date));
+ temp.setTimeCodeChart(ChartUtils.getTimeCodeChart(timeType, date));
+ temp.setValueA(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setValueB(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setValueC(CommonConst.DOUBLE_MINUS_SIGN);
+ itemList.add(temp);
+ // 濡傛灉澶т簬褰撳墠鏃堕棿榛樿--
+ if (DateTimeUtil.compareDateDiff(date, temNow) > CommonConst.DIGIT_0) {
+ continue;
+ }
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ // 鏋勯�犲綋澶╂瘡涓皬鏃剁殑鏁版嵁
+ listDayData(tempDate, tagValueList, temp, tempModel);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ // 鏋勯�犲綋鏈堟瘡澶╃殑鏁版嵁
+ listMonthData(tempDate, tagValueList, temp, tempModel);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ // 鏋勯�犲綋骞存瘡鏈堢殑鏁版嵁
+ listYearData(tempDate, tagValueList, temp, tempModel);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (ObjectUtil.isEmpty(tempModel.getMin()) || CommonConst.MIN_INIT_VALUE == tempModel.getMin()) {
+ tempModel.setMin(null);
+ }
+ //璁剧疆鍊�
+ ElectricThreePhaseDetail detail = new ElectricThreePhaseDetail();
+ BeanUtils.copyProperties(tempModel, detail);
+ detail.setMax(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setMaxTime(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setValueMaxA(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setValueMaxB(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setValueMaxC(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setMin(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setMinTime(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setValueMinA(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setValueMinB(CommonConst.DOUBLE_MINUS_SIGN);
+ detail.setValueMinC(CommonConst.DOUBLE_MINUS_SIGN);
+ if (ObjectUtil.isNotNull(tempModel.getMax())) {
+ detail.setMax(DoubleUtil.formatDoubleToStr(tempModel.getMax()) + CommonConst.SYMBOL_PERCENT);
+ detail.setMaxTime(DateTimeUtil.getDateTime(tempModel.getMaxTime()));
+ detail.setValueMaxA(DoubleUtil.formatDoubleToStr(tempModel.getValueMaxA()));
+ detail.setValueMaxB(DoubleUtil.formatDoubleToStr(tempModel.getValueMaxB()));
+ detail.setValueMaxC(DoubleUtil.formatDoubleToStr(tempModel.getValueMaxC()));
+ }
+ if (ObjectUtil.isNotNull(tempModel.getMin())) {
+ detail.setMin(DoubleUtil.formatDoubleToStr(tempModel.getMin()) + CommonConst.SYMBOL_PERCENT);
+ detail.setMinTime(DateTimeUtil.getDateTime(tempModel.getMinTime()));
+ detail.setValueMinA(DoubleUtil.formatDoubleToStr(tempModel.getValueMinA()));
+ detail.setValueMinB(DoubleUtil.formatDoubleToStr(tempModel.getValueMinB()));
+ detail.setValueMinC(DoubleUtil.formatDoubleToStr(tempModel.getValueMinC()));
+ }
+ vo.setDetail(detail);
+ vo.setItemList(itemList);
+ return vo;
+ }
+
+ /**
+ * 鏋勯�犲綋鏈堢殑鏁版嵁鍒楄〃
+ *
+ * @param date
+ * @param tagValueList
+ * @param temp
+ * @param tempModel
+ */
+ private void listYearData(Date date, List<TagValue> tagValueList, ElectricThreePhaseItem temp, ElectricThreePhaseTempModel tempModel) {
+ List<Date> dateList = new ArrayList<>();
+ ChartUtils.generateDateList(TimeTypeConst.TIME_TYPE_MONTH, DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_MONTH), dateList);
+ ElectricThreePhaseTempModel tempModelMonth = new ElectricThreePhaseTempModel();
+ for (Date date1 : dateList) {
+ listMonthData(date1, tagValueList, temp, tempModelMonth);
+ temp.setMax(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setMin(CommonConst.DOUBLE_MINUS_SIGN);
+ if (ObjectUtil.isNotNull(tempModelMonth.getMax())) {
+ temp.setMax(DoubleUtil.formatDoubleToStr(tempModelMonth.getMax()));
+ }
+ if (ObjectUtil.isNotNull(tempModelMonth.getMin())) {
+ temp.setMin(DoubleUtil.formatDoubleToStr(tempModelMonth.getMin()));
+ }
+ if (ObjectUtil.isEmpty(tempModel.getMin()) || CommonConst.MIN_INIT_VALUE == tempModel.getMin()) {
+ tempModel.setMin(null);
+ }
+ if (ObjectUtil.isNotNull(tempModelMonth.getMax())) {
+ if (ObjectUtil.isNull(tempModel.getMax()) || (ObjectUtil.isNotNull(tempModel.getMax()) && tempModelMonth.getMax() > tempModel.getMax())) {
+ tempModel.setMax(DoubleUtil.formatDouble(tempModelMonth.getMax()));
+ tempModel.setMaxTime(tempModelMonth.getMaxTime());
+ tempModel.setValueMaxA(DoubleUtil.formatDouble(tempModelMonth.getValueMaxA()));
+ tempModel.setValueMaxB(DoubleUtil.formatDouble(tempModelMonth.getValueMaxB()));
+ tempModel.setValueMaxC(DoubleUtil.formatDouble(tempModelMonth.getValueMaxC()));
+ }
+ }
+ if (ObjectUtil.isNotNull(tempModelMonth.getMin())) {
+ if (ObjectUtil.isNull(tempModel.getMin()) || (ObjectUtil.isNotNull(tempModel.getMin()) && tempModelMonth.getMin() <= tempModel.getMin())) {
+ tempModel.setMin(DoubleUtil.formatDouble(tempModelMonth.getMin()));
+ tempModel.setMinTime(tempModelMonth.getMinTime());
+ tempModel.setValueMinA(DoubleUtil.formatDouble(tempModelMonth.getValueMinA()));
+ tempModel.setValueMinB(DoubleUtil.formatDouble(tempModelMonth.getValueMinB()));
+ tempModel.setValueMinC(DoubleUtil.formatDouble(tempModelMonth.getValueMinC()));
+ }
+ }
+ }
+ }
+
+ /**
+ * 鏋勯�犲綋鏈堢殑鏁版嵁鍒楄〃
+ *
+ * @param date
+ * @param tagValueList
+ * @param temp
+ * @param tempModel
+ */
+ private void listMonthData(Date date, List<TagValue> tagValueList, ElectricThreePhaseItem temp, ElectricThreePhaseTempModel tempModel) {
+ List<Date> dateList = new ArrayList<>();
+ ChartUtils.generateDateList(TimeTypeConst.TIME_TYPE_DAY, DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_DAY), dateList);
+ ElectricThreePhaseTempModel tempModelDay = new ElectricThreePhaseTempModel();
+ for (Date date1 : dateList) {
+ Date tempDate = DateTimeUtil.addHours(date1, CommonConst.DIGIT_1);
+ listDayData(tempDate, tagValueList, temp, tempModelDay);
+ temp.setMax(CommonConst.DOUBLE_MINUS_SIGN);
+ temp.setMin(CommonConst.DOUBLE_MINUS_SIGN);
+ if (ObjectUtil.isNotNull(tempModelDay.getMax())) {
+ temp.setMax(DoubleUtil.formatDoubleToStr(tempModelDay.getMax()));
+ }
+ if (ObjectUtil.isNotNull(tempModelDay.getMin())) {
+ temp.setMin(DoubleUtil.formatDoubleToStr(tempModelDay.getMin()));
+ }
+ if (ObjectUtil.isEmpty(tempModel.getMin()) || CommonConst.MIN_INIT_VALUE == tempModel.getMin()) {
+ tempModel.setMin(null);
+ }
+ if (ObjectUtil.isNotNull(tempModelDay.getMax())) {
+ if (ObjectUtil.isNull(tempModel.getMax()) || (ObjectUtil.isNotNull(tempModel.getMax()) && tempModelDay.getMax() > tempModel.getMax())) {
+ tempModel.setMax(DoubleUtil.formatDouble(tempModelDay.getMax()));
+ tempModel.setMaxTime(tempModelDay.getMaxTime());
+ tempModel.setValueMaxA(DoubleUtil.formatDouble(tempModelDay.getValueMaxA()));
+ tempModel.setValueMaxB(DoubleUtil.formatDouble(tempModelDay.getValueMaxB()));
+ tempModel.setValueMaxC(DoubleUtil.formatDouble(tempModelDay.getValueMaxC()));
+ }
+ }
+ if (ObjectUtil.isNotNull(tempModelDay.getMin())) {
+ if (ObjectUtil.isNull(tempModel.getMin()) || (ObjectUtil.isNotNull(tempModel.getMin()) && tempModelDay.getMin() <= tempModel.getMin())) {
+ tempModel.setMin(DoubleUtil.formatDouble(tempModelDay.getMin()));
+ tempModel.setMinTime(tempModelDay.getMinTime());
+ tempModel.setValueMinA(DoubleUtil.formatDouble(tempModelDay.getValueMinA()));
+ tempModel.setValueMinB(DoubleUtil.formatDouble(tempModelDay.getValueMinB()));
+ tempModel.setValueMinC(DoubleUtil.formatDouble(tempModelDay.getValueMinC()));
+ }
+ }
+ }
+ }
+
+ /**
+ * 鑾峰彇褰撳ぉ鐨勬暟鎹垪琛�
+ *
+ * @param date
+ * @param tagValueList
+ * @param tempModel
+ */
+ private void listDayData(Date date, List<TagValue> tagValueList, ElectricThreePhaseItem temp, ElectricThreePhaseTempModel tempModel) {
+ Date endTime = DateTimeUtil.addHours(date, CommonConst.DIGIT_1);
+ List<TagValue> currentTagValueList = tagValueList.stream().filter(x -> DateTimeUtil.compareDateDiff(date, x.getDataTime()) <= 0 && DateTimeUtil.compareDateDiff(endTime, x.getDataTime()) > 0).collect(Collectors.toList());
+ List<TagValue> currentATagValueList = currentTagValueList.stream().filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getTagCode()).trim().endsWith("_A")).collect(Collectors.toList());
+ List<TagValue> currentBTagValueList = currentTagValueList.stream().filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getTagCode()).trim().endsWith("_B")).collect(Collectors.toList());
+ List<TagValue> currentCTagValueList = currentTagValueList.stream().filter(x -> StringUtil.ifEmptyOrNullReturnValue(x.getTagCode()).trim().endsWith("_C")).collect(Collectors.toList());
+ TagValue tagValueA = currentATagValueList.stream().filter(x -> DateTimeUtil.compareDateDiff(date, x.getDataTime()) == 0).findAny().orElse(null);
+ TagValue tagValueB = currentBTagValueList.stream().filter(x -> DateTimeUtil.compareDateDiff(date, x.getDataTime()) == 0).findAny().orElse(null);
+ TagValue tagValueC = currentCTagValueList.stream().filter(x -> DateTimeUtil.compareDateDiff(date, x.getDataTime()) == 0).findAny().orElse(null);
+ Double valueA = null, valueB = null, valueC = null;
+ if (ObjectUtil.isNotEmpty(tagValueA)) {
+ valueA = tagValueA.getValue();
+ temp.setValueA(String.valueOf(DoubleUtil.formatDouble(tagValueA.getValue())));
+ } else {
+ temp.setValueA(CommonConst.DOUBLE_MINUS_SIGN);
+ }
+ if (!ObjectUtil.isEmpty(tagValueB)) {
+ valueB = tagValueB.getValue();
+ temp.setValueB(String.valueOf(DoubleUtil.formatDouble(tagValueB.getValue())));
+ } else {
+ temp.setValueB(CommonConst.DOUBLE_MINUS_SIGN);
+ }
+ if (!ObjectUtil.isEmpty(tagValueC)) {
+ valueC = tagValueC.getValue();
+ temp.setValueC(String.valueOf(DoubleUtil.formatDouble(tagValueC.getValue())));
+ } else {
+ temp.setValueC(CommonConst.DOUBLE_MINUS_SIGN);
+ }
+ Double value = calcUnbalanceValue(valueA, valueB, valueC);
+ if (ObjectUtil.isEmpty(value)) {
+ return;
+ }
+ if (ObjectUtil.isEmpty(tempModel.getMin()) || CommonConst.MIN_INIT_VALUE == tempModel.getMin()) {
+ tempModel.setMin(value);
+ }
+ if (ObjectUtil.isEmpty(tempModel.getMax()) || value > tempModel.getMax()) {
+ tempModel.setMax(DoubleUtil.formatDouble(value));
+ if (!ObjectUtil.isEmpty(tagValueA)) {
+ tempModel.setMaxTime(tagValueA.getDataTime());
+ }
+ tempModel.setValueMaxA(DoubleUtil.formatDouble(valueA));
+ tempModel.setValueMaxB(DoubleUtil.formatDouble(valueB));
+ tempModel.setValueMaxC(DoubleUtil.formatDouble(valueC));
+ }
+ if (ObjectUtil.isEmpty(tempModel.getMin()) || value <= tempModel.getMin()) {
+ tempModel.setMin(DoubleUtil.formatDouble(value));
+ tempModel.setValueMinA(DoubleUtil.formatDouble(valueA));
+ tempModel.setValueMinB(DoubleUtil.formatDouble(valueB));
+ tempModel.setValueMinC(DoubleUtil.formatDouble(valueC));
+ if (!ObjectUtil.isEmpty(tagValueA)) {
+ tempModel.setMinTime(tagValueA.getDataTime());
+ }
+ }
+ }
+
+ /**
+ * 璁$畻涓夌浉涓嶅钩琛℃瀬鍊�
+ *
+ * @param valueA
+ * @param valueB
+ * @param valueC
+ * @return
+ */
+ private Double calcUnbalanceValue(Double valueA, Double valueB, Double valueC) {
+ /**
+ * 1銆佽绠椾笁鐩稿钩鍧囩數娴侊紝A/B/C涓夌浉鐢垫祦鐩稿姞闄や互3
+ * 2銆� MAX锛堢浉鐢垫祦-涓夌浉骞冲潎鐢垫祦锛�/涓夌浉骞冲潎鐢垫祦锛�
+ * 姣斿涓夌浉鐢垫祦鍒嗗埆涓篒A=9A IB=8A IC=4A锛屽垯涓夌浉骞冲潎鐢垫祦涓�7A锛岀浉鐢垫祦-涓夌浉骞冲潎鐢垫祦鍒嗗埆涓�2A 1A 3A锛屽彇宸�兼渶澶ч偅涓紝鏁匨AX锛堢浉鐢垫祦-涓夌浉骞冲潎鐢垫祦锛�=3A锛屾墍浠ヤ笁鐩哥數娴佷笉骞宠 搴�=3/7銆�
+ */
+ Double result = null;
+ Double sum = null;
+ if (ObjectUtil.isNotNull(valueA)) {
+ sum = valueA;
+ }
+ if (ObjectUtil.isNotNull(valueB)) {
+ sum += valueB;
+ }
+ if (ObjectUtil.isNotNull(valueC)) {
+ sum += valueC;
+ }
+ if (ObjectUtil.isNotNull(sum)) {
+ double avg = sum / CommonConst.DIGIT_3;
+ double diff1 = 0, diff2 = 0, diff3 = 0;
+ if (ObjectUtil.isNotNull(valueA)) {
+ diff1 = Math.abs(valueA - avg);
+ }
+ if (ObjectUtil.isNotNull(valueB)) {
+ diff2 = Math.abs(valueB - avg);
+ }
+ if (ObjectUtil.isNotNull(valueC)) {
+ diff3 = Math.abs(valueC - avg);
+ }
+ double max = diff1;
+ if (diff2 > max) {
+ max = diff2;
+ }
+ if (diff3 > max) {
+ max = diff3;
+ }
+ if (avg != CommonConst.DIGIT_DOUBLE_0) {
+ result = max * CommonConst.DIGIT_DOUBLE_100 / avg;
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * 鑾峰彇瀵瑰簲鐨勭粨鏉熸椂闂�
+ *
+ * @param timeType
+ * @param date
+ * @return
+ */
+ public static Date getEndTime(String timeType, Date date) {
+ Date d1 = null;
+ switch (timeType) {
+ case TimeTypeConst.TIME_TYPE_DAY:
+ d1 = DateTimeUtil.addDays(date, CommonConst.DIGIT_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_MONTH:
+ d1 = DateTimeUtil.addMonths(date, CommonConst.DIGIT_1);
+ break;
+ case TimeTypeConst.TIME_TYPE_YEAR:
+ d1 = DateTimeUtil.addYears(date, CommonConst.DIGIT_1);
+ break;
+ default:
+ break;
+ }
+ return d1;
+ }
+}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java b/zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java
index ad2d221..1f4c23c 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java
@@ -13,117 +13,125 @@
* @author fanxinfu
* @date 2020-02-14
*/
-public interface IEnergyIndexService {
+public interface IEnergyIndexService {
- EnergyIndex getiEnergyIndexByCode(String code);
+ EnergyIndex getiEnergyIndexByCode(String code);
- /**
- * 鏍规嵁璁¢噺鍣ㄥ叿id闆嗗悎鏌ヨ鐐逛綅淇℃伅
- *
- * @param meterId 璁¢噺鍣ㄥ叿id闆嗗悎
- * @return
- */
- List<EnergyIndex> listIndexByMeterIds(String nodeId,List<String> meterId);
+ /**
+ * 鏍规嵁璁¢噺鍣ㄥ叿id闆嗗悎鏌ヨ鐐逛綅淇℃伅
+ *
+ * @param meterId 璁¢噺鍣ㄥ叿id闆嗗悎
+ * @return
+ */
+ List<EnergyIndex> listIndexByMeterIds(String nodeId, List<String> meterId);
- /**
- * 鏌ヨ鎸囨爣淇℃伅
- *
- * @param indexId 鎸囨爣淇℃伅ID
- * @return 鎸囨爣淇℃伅
- */
- EnergyIndex selectEnergyIndexById(String indexId);
+ /**
+ * 鏌ヨ鎸囨爣淇℃伅
+ *
+ * @param indexId 鎸囨爣淇℃伅ID
+ * @return 鎸囨爣淇℃伅
+ */
+ EnergyIndex selectEnergyIndexById(String indexId);
- /**
- * 鏌ヨ鎸囨爣淇℃伅
- *
- * @param indexId 鎸囨爣淇℃伅ID
- * @return 鎸囨爣淇℃伅
- */
- List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId);
+ /**
+ * 鏌ヨ鎸囨爣淇℃伅
+ *
+ * @param indexId 鎸囨爣淇℃伅ID
+ * @return 鎸囨爣淇℃伅
+ */
+ List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId);
- /**
- * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
- *
- * @param energyIndex 鎸囨爣淇℃伅
- * @return 鎸囨爣淇℃伅闆嗗悎
- */
- List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex);
+ /**
+ * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
+ *
+ * @param energyIndex 鎸囨爣淇℃伅
+ * @return 鎸囨爣淇℃伅闆嗗悎
+ */
+ List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex);
- /**
- * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
- *
- * @param query 鎸囨爣淇℃伅
- * @return 鎸囨爣淇℃伅闆嗗悎
- */
- List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query);
+ /**
+ * 鏌ヨ鎸囨爣淇℃伅鍒楄〃
+ *
+ * @param query 鎸囨爣淇℃伅
+ * @return 鎸囨爣淇℃伅闆嗗悎
+ */
+ List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query);
- /**
- * 鏂板鎸囨爣淇℃伅
- *
- * @param nodeId
- * @param energyIndex 鎸囨爣淇℃伅
- * @return 缁撴灉
- */
- int insertEnergyIndex(String nodeId, EnergyIndex energyIndex);
+ /**
+ * 鏂板鎸囨爣淇℃伅
+ *
+ * @param nodeId
+ * @param energyIndex 鎸囨爣淇℃伅
+ * @return 缁撴灉
+ */
+ int insertEnergyIndex(String nodeId, EnergyIndex energyIndex);
- /**
- * 淇敼鎸囨爣淇℃伅
- *
- * @param energyIndex 鎸囨爣淇℃伅
- * @return 缁撴灉
- */
- int updateEnergyIndex(EnergyIndex energyIndex);
+ /**
+ * 淇敼鎸囨爣淇℃伅
+ *
+ * @param energyIndex 鎸囨爣淇℃伅
+ * @return 缁撴灉
+ */
+ int updateEnergyIndex(EnergyIndex energyIndex);
- /**
- * 鎵归噺鍒犻櫎鎸囨爣淇℃伅
- *
- *
- * @param nodeId
- * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID
- * @return 缁撴灉
- */
- int deleteEnergyIndexByIds(String nodeId, String[] indexIds);
+ /**
+ * 鎵归噺鍒犻櫎鎸囨爣淇℃伅
+ *
+ * @param nodeId
+ * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID
+ * @return 缁撴灉
+ */
+ int deleteEnergyIndexByIds(String nodeId, String[] indexIds);
- boolean energyIndexHasExist(String code);
+ boolean energyIndexHasExist(String code);
- boolean energyIndexHasExist(String indexId, String code);
+ boolean energyIndexHasExist(String indexId, String code);
- AjaxResult addMeterIndex(String meterId);
+ AjaxResult addMeterIndex(String meterId);
- List<EnergyIndex> getMeterIndex(String meterId);
+ List<EnergyIndex> getMeterIndex(String meterId);
- boolean modelHasConfig(String modelCode);
+ boolean modelHasConfig(String modelCode);
- List<EnergyIndex> selectCollectIndex(String deviceId);
+ List<EnergyIndex> selectCollectIndex(String deviceId);
- List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds);
+ List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds);
- List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes);
+ List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes);
- List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId);
+ List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId);
- List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter);
+ List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter);
- void removeNodeIndex(String nodeId, List<String> removeLink);
+ void removeNodeIndex(String nodeId, List<String> removeLink);
- AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport);
+ AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport);
- List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes);
+ List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes);
- Page<EnergyIndex> selectEnergyIndexPage(EnergyIndexQuery query, Long pageNum, Long pageSize);
+ Page<EnergyIndex> selectEnergyIndexPage(EnergyIndexQuery query, Long pageNum, Long pageSize);
- Page<EnergyIndex> getMeterIndexList(List<String> meterIndexIds,String code,
- String name,Long pageNum, Long pageSize);
+ Page<EnergyIndex> getMeterIndexList(List<String> meterIndexIds, String code,
+ String name, Long pageNum, Long pageSize);
- List<EnergyIndex> getIndexByCode(String code,String nodeId);
+ List<EnergyIndex> getIndexByCode(String code, String nodeId);
- /**
- * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
- *
- * @param energyUnitId 鐢ㄨ兘鍗曞厓id
- * @param meterId 璁惧id
- * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎
- * @return
- */
- EnergyIndex getDeviceIndexByCode(String energyUnitId, String meterId, String indexCode);
+ /**
+ * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
+ *
+ * @param nodeId 鑺傜偣id
+ * @param meterId 璁惧id
+ * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎
+ * @return
+ */
+ EnergyIndex getDeviceIndexByCode(String nodeId, String meterId, String indexCode);
+
+ /**
+ * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
+ *
+ * @param nodeId 鑺傜偣id
+ * @param meterId 璁惧id
+ * @return
+ */
+ List<EnergyIndex> listDeviceIndex(String nodeId, String meterId);
}
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java
index 301d0ae..aa5f76f 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java
@@ -84,7 +84,6 @@
/**
* 鏌ヨ鎸囨爣淇℃伅鍒楄〃
*
- * @param energyIndex 鎸囨爣淇℃伅
* @return 鎸囨爣淇℃伅
*/
@Override
@@ -351,4 +350,18 @@
.eq(EnergyIndex::getMeterId, meterId)
.like(EnergyIndex::getCode, indexCode));
}
+
+ /**
+ * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣�
+ *
+ * @param nodeId 鑺傜偣id
+ * @param meterId 璁惧id
+ * @return
+ */
+ @Override
+ public List<EnergyIndex> listDeviceIndex(String nodeId, String meterId) {
+ return energyIndexMapper.selectList(Wrappers.<EnergyIndex>lambdaQuery()
+ .eq(EnergyIndex::getNodeId, nodeId)
+ .eq(EnergyIndex::getMeterId, meterId));
+ }
}
--
Gitblit v1.9.3