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