From 0e49c2c61b26146d1a826edd6afa5d8c03696e59 Mon Sep 17 00:00:00 2001 From: DYL0109 <1332079466@qq.com> Date: 星期二, 11 二月 2025 10:27:50 +0800 Subject: [PATCH] !57 能源流向分析 Merge pull request !57 from DYL0109/dyl_dev --- zhitan-system/src/main/java/com/zhitan/model/service/impl/EnergyIndexServiceImpl.java | 567 ++++--- zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/DailyComprehensiveMapper.java | 2 zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseItem.java | 44 zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java | 29 zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexInforModel.java | 33 zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadDetail.java | 36 zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricThreePhaseServiceImpl.java | 413 +++++ zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadVO.java | 23 zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/FlowChartsDTO.java | 57 zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricThreePhaseController.java | 64 zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java | 103 + zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java | 748 ++++++++++ zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadItem.java | 44 zhitan-admin/src/main/resources/application.yml | 2 zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java | 19 zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java | 21 zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseVO.java | 23 zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java | 3 zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java | 139 + zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java | 20 zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricThreePhaseTempModel.java | 44 zhitan-system/src/main/java/com/zhitan/model/domain/NodeIndex.java | 26 zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java | 115 + zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricLoadServiceImpl.java | 258 +++ zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java | 68 zhitan-system/src/main/java/com/zhitan/model/mapper/NodeIndexMapper.java | 15 zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java | 40 zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.java | 23 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/ElectricPowerFactorDetail.java | 33 zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java | 55 zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java | 10 zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsItemVO.java | 34 zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java | 177 ++ zhitan-admin/src/main/java/com/zhitan/web/controller/common/CommonController.java | 30 zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricLoadService.java | 18 zhitan-system/src/main/resources/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml | 4 zhitan-system/src/main/java/com/zhitan/model/service/IEnergyIndexService.java | 174 +- zhitan-system/src/main/java/com/zhitan/dataitem/domain/vo/NodeIndexValueVO.java | 32 zhitan-system/src/main/resources/mapper/model/NodeIndexMapper.xml | 10 zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java | 19 zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml | 103 + zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java | 14 /dev/null | 232 --- zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java | 70 + zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java | 13 zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexAndUnitDevice.java | 20 zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyDataItemController.java | 39 zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java | 3 50 files changed, 3,504 insertions(+), 640 deletions(-) diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/common/CommonController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/common/CommonController.java index 7eb390d..c00de71 100644 --- a/zhitan-admin/src/main/java/com/zhitan/web/controller/common/CommonController.java +++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/common/CommonController.java @@ -1,10 +1,12 @@ package com.zhitan.web.controller.common; -import java.util.ArrayList; -import java.util.List; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import com.zhitan.common.config.BaseConfig; +import com.zhitan.common.constant.Constants; +import com.zhitan.common.core.domain.AjaxResult; +import com.zhitan.common.utils.StringUtils; +import com.zhitan.common.utils.file.FileUploadUtils; +import com.zhitan.common.utils.file.FileUtils; +import com.zhitan.framework.config.ServerConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.MediaType; @@ -13,13 +15,12 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -import com.zhitan.common.config.BaseConfig; -import com.zhitan.common.constant.Constants; -import com.zhitan.common.core.domain.AjaxResult; -import com.zhitan.common.utils.StringUtils; -import com.zhitan.common.utils.file.FileUploadUtils; -import com.zhitan.common.utils.file.FileUtils; -import com.zhitan.framework.config.ServerConfig; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; /** * 閫氱敤璇锋眰澶勭悊 @@ -36,6 +37,9 @@ private ServerConfig serverConfig; private static final String FILE_DELIMETER = ","; + + @Resource + private BaseConfig baseConfig; /** * 閫氱敤涓嬭浇璇锋眰 @@ -81,7 +85,7 @@ String filePath = BaseConfig.getUploadPath(); // 涓婁紶骞惰繑鍥炴柊鏂囦欢鍚嶇О String fileName = FileUploadUtils.upload(filePath, file); - String url = serverConfig.getUrl() + fileName; + String url = baseConfig.getDomainName() + fileName; AjaxResult ajax = AjaxResult.success(); ajax.put("url", url); ajax.put("fileName", fileName); diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java index 6434f20..b20411c 100644 --- a/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java +++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricLoadController.java @@ -1,9 +1,12 @@ package com.zhitan.web.controller.energyMonitor; import com.zhitan.common.annotation.Log; +import com.zhitan.common.constant.CommonConst; import com.zhitan.common.core.controller.BaseController; import com.zhitan.common.core.domain.AjaxResult; -import com.zhitan.energyMonitor.service.IEnergyUnitToDeviceService; +import com.zhitan.energyMonitor.domain.vo.ListElectricLoadVO; +import com.zhitan.energyMonitor.service.IElectricLoadService; +import com.zhitan.model.domain.EnergyIndex; import com.zhitan.model.service.IEnergyIndexService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -26,33 +29,29 @@ @Slf4j public class ElectricLoadController extends BaseController { @Autowired - private IEnergyUnitToDeviceService energyUnitToDeviceService; -// @Autowired -// private IElectricLoadService electricLoadService; + private IElectricLoadService electricLoadService; @Autowired private IEnergyIndexService energyIndexService; /** * 鏍规嵁鐢佃〃id鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁 * - * @param energyUnitId 鐢ㄨ兘鍗曞厓id - * @param meterId 鐢佃〃id - * @param timeType 鏃堕棿绫诲瀷 DAY/MONTH/YEAR - * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21/2022-03/2022 - * @return + * @param nodeId 鐢ㄨ兘鍗曞厓id + * @param meterId 鐢佃〃id + * @param timeType 鏃堕棿绫诲瀷 DAY/MONTH/YEAR + * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21/2022-03/2022 */ @Log(title = "鏍规嵁鐢佃〃id鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁") @ApiOperation(value = "鏍规嵁鐢佃〃id鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁", notes = "鏍规嵁鐢佃〃id鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁") @GetMapping(value = "/detail") - public AjaxResult list(@RequestParam(name = "energyUnitId") String energyUnitId, + public AjaxResult list(@RequestParam(name = "nodeId") String nodeId, @RequestParam(name = "meterId") String meterId, @RequestParam(name = "timeType") String timeType, @RequestParam(name = "timeCode") String timeCode) { -// EnergyIndex energyIndex = energyIndexService.getDeviceIndexByCode(energyUnitId, meterId, CommonConst.TAG_CODE_ZYGGL); -// -// EnergyUnitToDevice energyUnitToDevice = energyUnitToDeviceService.getEnergyUnitToDeviceById(energyUnitId, meterId); -// ListElectricLoadVO lsvo = electricLoadService.list(timeType, timeCode, energyIndex, energyUnitToDevice); - return AjaxResult.success(null); + EnergyIndex energyIndex = energyIndexService.getDeviceIndexByCode(nodeId, meterId, CommonConst.TAG_CODE_ZYGGL); + + ListElectricLoadVO vo = electricLoadService.list(timeType, timeCode, energyIndex); + return AjaxResult.success(vo); } } diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java new file mode 100644 index 0000000..a82aeec --- /dev/null +++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/energyMonitor/ElectricPowerFactorController.java @@ -0,0 +1,55 @@ +package com.zhitan.web.controller.energyMonitor; + +import com.zhitan.common.annotation.Log; +import com.zhitan.common.constant.CommonConst; +import com.zhitan.common.core.controller.BaseController; +import com.zhitan.common.core.domain.AjaxResult; +import com.zhitan.energyMonitor.service.IElectricPowerFactorService; +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.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; + +/** + * @Description: 鍔熺巼鍥犳暟 + * @Author: yxw + * @Date: 2022-04-24 + * @Version: V1.2 + */ +@Api(tags = "鍔熺巼鍥犳暟") +@RestController +@RequestMapping("/powerFactorAnalysis") +@Slf4j +public class ElectricPowerFactorController extends BaseController { + + @Autowired + private IElectricPowerFactorService electricPowerFactorService; + + @Autowired + private IEnergyIndexService energyIndexService; + + /** + * 鏍规嵁鐢佃〃id鑾峰彇鍔熺巼鍥犳暟鏁版嵁 + * + * @param nodeId 鑺傜偣id + * @param meterId 鐢佃〃id + * @param timeCode 鏃堕棿鍊� 涓庢椂闂寸被鍨嬪搴旓細2022-03-21 + */ + @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 = "timeCode") String timeCode) { + EnergyIndex energyIndex = energyIndexService.getDeviceIndexByCode(nodeId, meterId, CommonConst.TAG_CODE_GLYS); + + return AjaxResult.success(electricPowerFactorService.list(timeCode, energyIndex)); + } + +} 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-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyDataItemController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyDataItemController.java new file mode 100644 index 0000000..af79e0b --- /dev/null +++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/statisticalAnalysis/EnergyDataItemController.java @@ -0,0 +1,39 @@ +package com.zhitan.web.controller.statisticalAnalysis; + +import com.zhitan.common.annotation.Log; +import com.zhitan.common.core.domain.AjaxResult; +import com.zhitan.dataitem.service.IDataItemService; +import com.zhitan.statisticalAnalysis.domain.dto.FlowChartsDTO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +/** + * 鑳借�楃粺璁″垎鏋� + */ +@Api(tags = "鑳借�楃粺璁″垎鏋�") +@RestController +@RequestMapping("/statisticsAnalysis") +public class EnergyDataItemController { + + @Autowired + private IDataItemService dataItemService; + + /** + * 鑾峰彇鑳芥祦鍥惧舰鍒嗘瀽 + * + * @param dto 璇锋眰鍙傛暟 + * @return 缁撴灉 + */ + @Log(title = "鑾峰彇鑳芥祦鍥惧舰鍒嗘瀽") + @ApiOperation(value = "鑾峰彇鑳芥祦鍥惧舰鍒嗘瀽", notes = "鑾峰彇鑳芥祦鍥惧舰鍒嗘瀽") + @GetMapping(value = "/getFlowCharts") + public AjaxResult getFlowCharts(@Validated FlowChartsDTO dto) { + return AjaxResult.success(dataItemService.getFlowCharts(dto)); + } +} diff --git a/zhitan-admin/src/main/resources/application.yml b/zhitan-admin/src/main/resources/application.yml index b766372..86eed19 100644 --- a/zhitan-admin/src/main/resources/application.yml +++ b/zhitan-admin/src/main/resources/application.yml @@ -11,6 +11,8 @@ addressEnabled: true # 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉 captchaType: math + # 鍩熷悕鍦板潃 + domainName: https://demo-ems.zhitancloud.com/prod-api # 寮�鍙戠幆澧冮厤缃� server: diff --git a/zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java b/zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java index c9096ba..04ee184 100644 --- a/zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java +++ b/zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java @@ -30,6 +30,12 @@ /** 楠岃瘉鐮佺被鍨� */ private static String captchaType; + /** + * 鏂囦欢鍦板潃鍩熷悕 + */ + private String domainName; + + public String getName() { return name; @@ -123,4 +129,12 @@ public static String getConfigurePath() { return getProfile() + "/configure"; } + + public String getDomainName() { + return domainName; + } + + public void setDomainName(String domainName) { + this.domainName = domainName; + } } diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java new file mode 100644 index 0000000..a099168 --- /dev/null +++ b/zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java @@ -0,0 +1,177 @@ +package com.zhitan.common.utils; + + +import com.zhitan.common.constant.CommonConst; +import com.zhitan.common.constant.TimeTypeConst; + +import java.util.Date; +import java.util.List; + +/** + * @Description: 缁熻鍥剧浉鍏虫暟鎹伐鍏风被 + * @author: yxw + * @date: 2022骞�04鏈�28鏃� 15:29 + */ +public class ChartUtils { + + /** + * 鏋勯�犳棩鏈熷垪琛� + * + * @param timeType + * @param timeCode + * @param dateList + */ + public static void generateDateList(String timeType, String timeCode, List<Date> dateList) { + Date now = new Date(); + switch (timeType) { + case TimeTypeConst.TIME_TYPE_DAY: + if (!timeCode.contains(CommonConst.SINGLE_MINUS_SIGN)) { + timeCode = DateTimeUtil.toDateTimeStr(timeCode, DateTimeUtil.COMMON_PATTERN_DAY, DateTimeUtil.COMMON_PATTERN_TO_DAY); + } + int hour = 23; + for (int i = CommonConst.DIGIT_0; i <= hour; i++) { + String tempCode = timeCode + " 0" + i; + if (i > 9) { + tempCode = timeCode + " " + i; + } + Date tempD = DateTimeUtil.toDateTime(tempCode, DateTimeUtil.COMMON_PATTERN_TO_HOUR); + dateList.add(tempD); + } + break; + case TimeTypeConst.TIME_TYPE_MONTH: + if (!timeCode.contains(CommonConst.SINGLE_MINUS_SIGN)) { + timeCode = DateTimeUtil.toDateTimeStr(timeCode, DateTimeUtil.COMMON_PATTERN_MONTH, DateTimeUtil.COMMON_PATTERN_TO_MONTH); + } + int max = DateTimeUtil.getDateTimeLastDay(DateTimeUtil.toDateTime(timeCode, DateTimeUtil.COMMON_PATTERN_TO_MONTH)); + + for (int i = CommonConst.DIGIT_1; i <= max; i++) { + String tempCode = timeCode + "-0" + i; + if (i > 9) { + tempCode = timeCode + "-" + i; + } + Date tempD = DateTimeUtil.toDateTime(tempCode, DateTimeUtil.COMMON_PATTERN_TO_DAY); + dateList.add(tempD); + } + break; + case TimeTypeConst.TIME_TYPE_YEAR: + int monthMax = 12; + for (int i = CommonConst.DIGIT_1; i <= monthMax; i++) { + String tempCode = timeCode + "-0" + i; + if (i > 9) { + tempCode = timeCode + "-" + i; + } + Date tempD = DateTimeUtil.toDateTime(tempCode, DateTimeUtil.COMMON_PATTERN_TO_MONTH); + dateList.add(tempD); + } + break; + default: + break; + } + } + + /** + * 鑾峰彇瀵瑰簲鐨勭粨鏉熸椂闂� + * + * @param timeType + * @param date + * @return + */ + public static Date getEndTime(String timeType, Date date) { + Date d1 = new Date(); + 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; + } + + /** + * 鑾峰彇鏃ユ湡鏄剧ず瀛楃 + * + * @param timeType + * @param date + * @return + */ + public static String getTimeCode(String timeType, Date date) { + String str = CommonConst.EMPTY; + switch (timeType) { + case TimeTypeConst.TIME_TYPE_DAY: + str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_HOUR); + break; + case TimeTypeConst.TIME_TYPE_MONTH: + str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_DAY); + break; + case TimeTypeConst.TIME_TYPE_YEAR: + str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_MONTH); + break; + default: + break; + } + return str; + } + + /** + * 鑾峰彇鏃ユ湡鏄剧ず瀛楃 + * + * @param timeType + * @param date + * @return + */ + public static String getTimeCodeChart(String timeType, Date date) { + String str = CommonConst.EMPTY; + switch (timeType) { + case TimeTypeConst.TIME_TYPE_DAY: + str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_HOUR_MINUTE); + break; + case TimeTypeConst.TIME_TYPE_MONTH: + str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_MONTH_DAY); + break; + case TimeTypeConst.TIME_TYPE_YEAR: + str = DateTimeUtil.getDateTime(date, DateTimeUtil.COMMON_PATTERN_TO_MONTH); + break; + default: + break; + } + return str; + } + + /** + * 鑾峰彇鏃ユ湡鏄剧ず瀛楃 + * + * @param timeType + * @param timeCode + * @return + */ + public static Date getDateTime(String timeType, String timeCode) { + Date d1 = new Date(); + switch (timeType) { + case TimeTypeConst.TIME_TYPE_DAY: + if (!timeCode.contains(CommonConst.SINGLE_MINUS_SIGN)) { + timeCode = DateTimeUtil.toDateTimeStr(timeCode, DateTimeUtil.COMMON_PATTERN_DAY, DateTimeUtil.COMMON_PATTERN_TO_DAY); + } + d1 = DateTimeUtil.toDateTime(timeCode, DateTimeUtil.COMMON_PATTERN_TO_DAY); + break; + case TimeTypeConst.TIME_TYPE_MONTH: + if (!timeCode.contains(CommonConst.SINGLE_MINUS_SIGN)) { + timeCode = DateTimeUtil.toDateTimeStr(timeCode, DateTimeUtil.COMMON_PATTERN_MONTH, DateTimeUtil.COMMON_PATTERN_TO_MONTH); + } + d1 = DateTimeUtil.toDateTime(timeCode, DateTimeUtil.COMMON_PATTERN_TO_MONTH); + break; + case TimeTypeConst.TIME_TYPE_YEAR: + d1 = DateTimeUtil.toDateTime(timeCode, DateTimeUtil.COMMON_PATTERN_YEAR); + break; + default: + break; + } + return d1; + } +} diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java new file mode 100644 index 0000000..248cb2f --- /dev/null +++ b/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java @@ -0,0 +1,748 @@ +package com.zhitan.common.utils; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.zhitan.common.constant.CommonConst; +import com.zhitan.common.constant.TimeTypeConst; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.time.DateUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +/** + * @Description: 鏃堕棿宸ュ叿绫� + * @author: yxw + * @date: 2022骞�02鏈�02鏃� 12:23 + */ +@Slf4j +public class DateTimeUtil { + /** + * 鏃ユ湡甯哥敤鏍煎紡 + */ + public static final String COMMON_PATTERN = "yyyy-MM-dd HH:mm:ss"; + /** + * 鏍煎紡鍖栨棩鏈熷埌鍒嗛挓 + */ + public static final String COMMON_PATTERN_END_WITH_MINUTE = "yyyy-MM-dd HH:mm"; + /** + * 鏃ユ湡鏍煎紡 - 灏忔椂:鍒嗛挓 + */ + public static final String COMMON_PATTERN_HOUR_MINUTE = "HH:mm"; + /** + * 鏃ユ湡甯哥敤鏍煎紡 - 骞翠唤 + */ + public static final String COMMON_PATTERN_YEAR = "yyyy"; + /** + * 鏃ユ湡甯哥敤鏍煎紡 - 鏌愪竴骞�, + */ + public static final String COMMON_PATTERN_CERTAIN_YEAR = "yy"; + + /** + * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤 + */ + public static final String COMMON_PATTERN_MONTH = "yyyyMM"; + /** + * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤 + */ + public static final String COMMON_PATTERN_TO_MONTH = "yyyy-MM"; + /** + * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤 + */ + public static final String COMMON_PATTERN_TO_MONTH_WORD = "yyyy-MM鏈�"; + /** + * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堜唤 + */ + public static final String COMMON_PATTERN_TO_MONTH_ZH = "yyyy骞碝M鏈�"; + /** + * 鏃ユ湡甯哥敤鏍煎紡 - 澶� + */ + public static final String COMMON_PATTERN_DAY = "yyyyMMdd"; + /** + * 鏃ユ湡甯哥敤鏍煎紡 - 澶� + */ + public static final String COMMON_PATTERN_TO_DAY = "yyyy-MM-dd"; + /** + * 鏃ユ湡甯哥敤鏍煎紡 - 澶� + */ + public static final String COMMON_PATTERN_TO_DAY_WORD = "yyyy-MM-dd鏃�"; + /** + * 鏃ユ湡甯哥敤鏍煎紡 - 鏈堟棩 + */ + public static final String COMMON_PATTERN_MONTH_DAY = "MM-dd"; + /** + * 鏃ユ湡甯哥敤鏍煎紡 - 澶╂煇涓�澶�, + */ + public static final String COMMON_PATTERN_DAY_OF_MONTH = "dd"; + /** + * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂 + */ + public static final String COMMON_PATTERN_HOUR = "yyyyMMddHH"; + /** + * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂 + */ + public static final String COMMON_PATTERN_TO_HOUR = "yyyy-MM-dd HH"; + /** + * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂 + */ + public static final String COMMON_PATTERN_TO_HOUR_WORD = "yyyy-MM-dd HH鏃�"; + /** + * 鏃ユ湡甯哥敤鏍煎紡 - 灏忔椂 + */ + public static final String COMMON_PATTERN_TO_HOUR_TEXT = "yyyy骞碝M鏈坉d鏃� HH鏃�"; + + /** + * 鑾峰彇褰撳墠鏃堕棿,鏃堕棿鏍煎紡锛歽yyy-MM-dd HH:mm:ss + * + * @return + */ + public static String getNowDateTime() { + return getNowDateTime(COMMON_PATTERN); + } + + /** + * 鑾峰彇褰撳墠鏃堕棿 + * + * @param pattern 鏃堕棿鏍煎紡 + * @return + */ + public static String getNowDateTime(String pattern) { + //璁剧疆鏃ユ湡鏍煎紡 + SimpleDateFormat df = new SimpleDateFormat(pattern); + String dateTime = df.format(new Date()); + return dateTime; + } + + /** + * 鑾峰彇浠婂勾鐨勫勾浠藉�� + * + * @return + */ + public static String getNowYear() { + return getNowDateTime(COMMON_PATTERN_YEAR); + } + + /** + * 鑾峰彇浠婂勾鐨勬湀浠藉�� + * + * @return + */ + public static String getNowMonth() { + return getNowDateTime(COMMON_PATTERN_MONTH); + } + + /** + * 瀛楃涓茶浆鎴愭椂闂寸被鍨�,榛樿鏍煎紡锛歽yyy-MM-dd HH:mm:ss + * + * @param dateTimeStr + * @return + */ + public static Date toDateTime(String dateTimeStr) { + DateTime dt = null; + try { + dt = DateTime.of(dateTimeStr, COMMON_PATTERN); + } catch (Exception e) { + + } + return dt; + } + + /** + * 瀛楃涓茶浆鎴愭椂闂寸被鍨� + * + * @param dateTimeStr + * @return + */ + public static Date toDateTime(String dateTimeStr, String pattern) { + DateTime dt = null; + try { + dt = DateTime.of(dateTimeStr, pattern); + } catch (Exception e) { + + } + return dt; + } + + /** + * 瀛楃涓茶浆鎴愮壒瀹氭牸寮忕殑鏃堕棿瀛楃涓茬被鍨� + * + * @param dateTimeStr 鏃堕棿瀛楃涓� + * @param sourcePattern 瀛楃涓叉椂闂存牸寮� + * @param toPattern 瑕佽浆鎴愪粈涔堟牸寮忕殑鏃堕棿 + * @return + */ + public static String toDateTimeStr(String dateTimeStr, String sourcePattern, String toPattern) { + String str = CommonConst.EMPTY; + try { + DateTime dt = DateTime.of(dateTimeStr, sourcePattern); + str = getDateTime(dt, toPattern); + } catch (Exception e) { + + } + return str; + } + + /** + * 鏃堕棿杞垚鎸囧畾鐨勬牸寮� + * + * @param pattern 鏃堕棿鏍煎紡 + * @return + */ + public static String getDateTime(Date dt, String pattern) { + //璁剧疆鏃ユ湡鏍煎紡 + SimpleDateFormat df = new SimpleDateFormat(pattern); + return df.format(dt); + } + + /** + * 鏃堕棿杞垚yyyy-MM-dd HH:mm:ss鏍煎紡 + * + * @return + */ + public static String getDateTime(Date dt) { + if (ObjectUtil.isEmpty(dt)) { + return CommonConst.EMPTY; + } + return getDateTime(dt, COMMON_PATTERN); + } + + /** + * 鑾峰彇褰撳墠鏃堕棿鎵�灞炴湀浠界殑鏈�鍚庝竴澶� + * + * @return + */ + public static int getDateTimeLastDay(Date dt) { + String month = getMonth(dt); + String firstDate = month + "01"; + Date nextMonthFirstDate = addMonths(toDateTime(firstDate, COMMON_PATTERN_DAY), CommonConst.DIGIT_1); + Date currentMonthLastDate = addDays(nextMonthFirstDate, CommonConst.DIGIT_MINUS_1); + int day = IntegerUtil.toInt(getDateTime(currentMonthLastDate, COMMON_PATTERN_DAY_OF_MONTH)); + return day; + } + + /** + * 鑾峰彇骞翠唤鍊� + * + * @return + */ + public static String getYear(Date dt) { + return getDateTime(dt, COMMON_PATTERN_YEAR); + } + + /** + * 鑾峰彇鏈堜唤鍊� 202202 + * + * @return + */ + public static String getMonth(Date dt) { + return getDateTime(dt, COMMON_PATTERN_MONTH); + } + + /** + * 鑾峰彇澶�,鏍煎紡锛歽yyyMMdd + * + * @return + */ + public static String toDay(Date dt) { + return getDateTime(dt, COMMON_PATTERN_DAY); + } + + /** + * 鑾峰彇灏忔椂:yyyyMMddHH + * + * @return + */ + public static String toHour(Date dt) { + return getDateTime(dt, COMMON_PATTERN_HOUR); + } + + /** + * 杞垚瀛楃涓茬被鍨嬪�� + * + * @return + */ + public static String toString(Date dt) { + return getDateTime(dt, COMMON_PATTERN); + } + + /** + * 鏃堕棿澧炲姞瀵瑰簲鐨勫勾鏁� + * + * @param dateTime + * @param years + * @return + */ + public static Date addYears(Date dateTime, int years) { + return calcDate(dateTime, years, Calendar.YEAR); + } + + /** + * 鏃堕棿澧炲姞瀵瑰簲鐨勬湀鏁� + * + * @param dateTime + * @param months + * @return + */ + public static Date addMonths(Date dateTime, int months) { + return calcDate(dateTime, months, Calendar.MONTH); + } + + /** + * 鏃堕棿澧炲姞瀵瑰簲鐨勫ぉ鏁� + * + * @param dateTime + * @param days + * @return + */ + public static Date addDays(Date dateTime, int days) { + return calcDate(dateTime, days, Calendar.DATE); + } + + /** + * 鏃堕棿澧炲姞瀵瑰簲鐨勫皬鏃舵暟 + * + * @param dateTime + * @param hours + * @return + */ + public static Date addHours(Date dateTime, int hours) { + return calcDate(dateTime, hours, Calendar.HOUR); + } + + /** + * 鏃堕棿澧炲姞瀵瑰簲鐨勫垎閽熸暟 + * + * @param dateTime + * @param minutes + * @return + */ + public static Date addMinutes(Date dateTime, int minutes) { + return calcDate(dateTime, minutes, Calendar.MINUTE); + } + + /** + * 鏃堕棿澧炲姞瀵瑰簲鐨勫皬鏃舵暟 + * + * @param dateTime + * @param seconds + * @return + */ + public static Date addSeconds(Date dateTime, int seconds) { + return calcDate(dateTime, seconds, Calendar.SECOND); + } + + /** + * 璁$畻鏃ユ湡閫氱敤鏂规硶 + * + * @param dateTime + * @param addValue + * @param calendarType 璁$畻绫诲瀷锛欳alendar.YEAR锛孋alendar.MONTH,Calendar.DAY + * @return + */ + private static Date calcDate(Date dateTime, int addValue, int calendarType) { + Date dt = null; + try { + Calendar calendar = new GregorianCalendar(); + calendar.setTime(dateTime); + //鎶婃棩鏈熷線鍚庡鍔犱竴骞达紝鏁存暟寰�鍚庢帹锛岃礋鏁板線鍓嶇Щ + calendar.add(calendarType, addValue); + // 鑾峰彇鐩稿姞鎴栬�呯浉鍑忎箣鍚庣殑鏃堕棿鍊� + Date tempDt = calendar.getTime(); + // 鎶婃椂闂磋浆鎴愭墍闇�瑕佺殑鏍煎紡 + String temp = getDateTime(tempDt, COMMON_PATTERN); + dt = toDateTime(temp); + } catch (Exception e) { + + } + return dt; + } + + /** + * 鑾峰彇璇ユ椂闂村睘浜庡綋澶╃殑绗嚑涓皬鏃� + * + * @param dateTime + * @return + */ + public static int getHourOfDay(Date dateTime) { + return getDateValue(dateTime, Calendar.HOUR_OF_DAY); + } + + /** + * 鑾峰彇璇ユ椂闂村睘浜庡綋鏈堢殑绗嚑澶� + * + * @param dateTime + * @return + */ + public static int getDayOfMonth(Date dateTime) { + return getDateValue(dateTime, Calendar.DAY_OF_MONTH); + } + + /** + * 鑾峰彇璇ユ椂闂村睘浜庡綋鍛ㄧ殑绗嚑澶� + * 涓�鍛ㄧ殑绗竴澶╂槸鍛ㄦ棩 + * + * @param dateTime + * @return + */ + public static int getDayOfWeek(Date dateTime) { + return getDateValue(dateTime, Calendar.DAY_OF_WEEK); + } + + /** + * 鑾峰彇璇ユ椂闂村睘浜庡勾鐨勭鍑犱釜鏈� + * 鏈堜唤鍊�+1鏄湡瀹炵殑褰撳墠鏈� + * + * @param dateTime + * @return 宸茬粡鍦ㄧ郴缁熶腑鑾峰彇鍊肩殑鍩虹涓婂姞1浜嗭紝鐜板湪鏄湡瀹炵殑褰撳墠鏈堜唤鍊� + */ + public static int getMonthOfYear(Date dateTime) { + return getDateValue(dateTime, Calendar.MONTH) + 1; + } + + /** + * 鑾峰彇褰撳ぉ鐨勭鍑犱釜灏忔椂/褰撴湀鐨勭鍑犲ぉ/褰撳勾鐨勭鍑犱釜鏈� + * + * @param dateTime 濡傛灉鏃堕棿鍊间负绌猴紝榛樿褰撳墠鏃堕棿 + * @param calendarType + * @return + */ + private static int getDateValue(Date dateTime, int calendarType) { + int value = 0; + try { + if (ObjectUtil.isEmpty(dateTime)) { + dateTime = new Date(); + } + Calendar calendar = new GregorianCalendar(); + calendar.setTime(dateTime); + value = calendar.get(calendarType); + } catch (Exception e) { + + } + return value; + } + + /** + * 瀵规瘮time1 鍜� time2 鐨勫ぇ灏� + * + * @param time1 + * @param time2 + * @return -1:time1灏忎簬time2;0:time1绛変簬time2;1:time1澶т簬time2; + */ + public static int compareDateDiff(Date time1, Date time2) { + long diff = time1.getTime() - time2.getTime(); + int res = 0; + if (diff > 0) { + res = 1; + } else if (diff < 0) { + res = -1; + } + return res; + } + + /** + * 鑾峰彇鏌ヨdata_item鎵�闇�瑕佺殑timecode鍊� + * + * @param timeType 鏃ユ湡绫诲瀷 + * @param date 鏃堕棿 + * @return + */ + public static String getTimeCode(String timeType, Date date) { + String timeCode = CommonConst.EMPTY; + if (ObjectUtil.isEmpty(date)) { + date = new Date(); + } + timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase(); + switch (timeType) { + case TimeTypeConst.TIME_TYPE_HOUR: + timeCode = CommonConst.WORD_H + getDateTime(date, COMMON_PATTERN_HOUR); + break; + case TimeTypeConst.TIME_TYPE_DAY: + timeCode = CommonConst.WORD_D + getDateTime(date, COMMON_PATTERN_DAY); + break; + case TimeTypeConst.TIME_TYPE_MONTH: + timeCode = CommonConst.WORD_M + getDateTime(date, COMMON_PATTERN_MONTH); + break; + case TimeTypeConst.TIME_TYPE_YEAR: + timeCode = CommonConst.WORD_Y + getDateTime(date, COMMON_PATTERN_YEAR); + break; + default: + break; + } + return timeCode; + } + + /** + * 鑾峰彇鏌ヨ鏃ユ湀骞存姤琛ㄦ墍闇�瑕佺殑timecode鍊� + * + * @param timeType 鏃ユ湡绫诲瀷 + * @param date 鏃堕棿 + * @return + */ + public static String getReportTimeCode(String timeType, Date date) { + String timeCode = CommonConst.EMPTY; + if (ObjectUtil.isEmpty(date)) { + date = new Date(); + } + timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase(); + switch (timeType) { + case TimeTypeConst.TIME_TYPE_HOUR: + timeCode = getDateTime(date, COMMON_PATTERN_TO_HOUR); + break; + case TimeTypeConst.TIME_TYPE_DAY: + timeCode = getDateTime(date, COMMON_PATTERN_TO_DAY); + break; + case TimeTypeConst.TIME_TYPE_MONTH: + timeCode = getDateTime(date, COMMON_PATTERN_TO_MONTH); + break; + case TimeTypeConst.TIME_TYPE_YEAR: + timeCode = getDateTime(date, COMMON_PATTERN_YEAR); + break; + default: + break; + } + return timeCode; + } + + /** + * 鑾峰彇鏃堕棿瀵瑰簲鐨勭幆姣旀椂闂� + * + * @param timeType HOUR/DAY/MONTH/YEAR + * @param date 鏃堕棿鍊� + * @return + */ + public static Date getLoopTime(String timeType, Date date) { + Date dt = null; + if (ObjectUtil.isEmpty(date)) { + date = new Date(); + } + timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase(); + switch (timeType) { + case TimeTypeConst.TIME_TYPE_HOUR: + dt = addHours(date, CommonConst.DIGIT_MINUS_1); + break; + case TimeTypeConst.TIME_TYPE_DAY: + dt = addDays(date, CommonConst.DIGIT_MINUS_1); + break; + case TimeTypeConst.TIME_TYPE_MONTH: + dt = addMonths(date, CommonConst.DIGIT_MINUS_1); + break; + case TimeTypeConst.TIME_TYPE_YEAR: + dt = addYears(date, CommonConst.DIGIT_MINUS_1); + break; + default: + break; + } + return dt; + } + + /** + * 鑾峰彇鏁寸偣鏃堕棿 + * + * @param timeType HOUR/DAY/MONTH/YEAR + * @param date 鏃堕棿鍊� + * @return + */ + public static Date getHourTime(String timeType, Date date) { + Date dt = null; + if (ObjectUtil.isEmpty(date)) { + date = new Date(); + } + String tempStr = null; + timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase(); + switch (timeType) { + case TimeTypeConst.TIME_TYPE_HOUR: + tempStr = getDateTime(date, COMMON_PATTERN_TO_HOUR); + dt = toDateTime(tempStr, COMMON_PATTERN_TO_HOUR); + break; + case TimeTypeConst.TIME_TYPE_DAY: + tempStr = getDateTime(date, COMMON_PATTERN_TO_DAY); + dt = toDateTime(tempStr, COMMON_PATTERN_TO_DAY); + break; + case TimeTypeConst.TIME_TYPE_MONTH: + tempStr = getDateTime(date, COMMON_PATTERN_TO_MONTH); + dt = toDateTime(tempStr, COMMON_PATTERN_TO_MONTH); + break; + case TimeTypeConst.TIME_TYPE_YEAR: + tempStr = getDateTime(date, COMMON_PATTERN_YEAR); + dt = toDateTime(tempStr, COMMON_PATTERN_YEAR); + break; + default: + break; + } + return dt; + } + + /** + * 璁$畻涓や釜鏃堕棿闂撮殧澶╂暟锛堟棩鏈熸牸寮忔瘮杈冿級 + * + * @param beginTime + * @param endTime + * @return + */ + public static int daysBetween(Date beginTime, Date endTime) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(beginTime); + long beginStamp = calendar.getTimeInMillis(); + calendar.setTime(endTime); + long endStamp = calendar.getTimeInMillis(); + long betweenDays = (endStamp - beginStamp) / (1000 * 3600 * 24); + return Integer.parseInt(String.valueOf(betweenDays)); + } + + /** + * 璁$畻涓や釜鏃堕棿闂撮殧澶╂暟锛堝瓧绗︿覆鏍煎紡姣旇緝锛� + * + * @param beginTime + * @param endTime + * @return + */ + public static int daysBetween(String beginTime, String endTime) { + try { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + Date begin = format.parse(beginTime); + Date end = format.parse(endTime); + return daysBetween(begin, end); + } catch (ParseException exception) { + log.error("璁$畻涓や釜鏃堕棿闂撮殧澶╂暟" + exception.getMessage()); + return 0; + } + } + + /** + * 鏍规嵁鏃堕棿绫诲瀷鎶婂瓧绗︿覆杞垚瀵瑰簲鐨勬椂闂� + * + * @param timeType 鏃堕棿绫诲瀷 + * @param time 鏃堕棿瀛楃涓� + * @return + */ + public static Date getTime(String timeType, String time) { + Date dt = null; + timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase(); + switch (timeType) { + case TimeTypeConst.TIME_TYPE_HOUR: + dt = toDateTime(time, COMMON_PATTERN_TO_HOUR); + break; + case TimeTypeConst.TIME_TYPE_DAY: + dt = toDateTime(time, COMMON_PATTERN_TO_DAY); + break; + case TimeTypeConst.TIME_TYPE_MONTH: + dt = toDateTime(time, COMMON_PATTERN_TO_MONTH); + break; + case TimeTypeConst.TIME_TYPE_YEAR: + dt = toDateTime(time, COMMON_PATTERN_YEAR); + break; + default: + break; + } + return dt; + } + + /** + * 鏍规嵁鏃堕棿绫诲瀷鎶婅繛缁殑鏃ユ湡瀛楃涓茶浆鎴愬搴旂殑鏃堕棿 锛�202303銆�20230303銆�2023030301銆�202303030101锛� + * + * @param timeType 鏃堕棿绫诲瀷 + * @param time 鏃堕棿瀛楃涓� + * @return + */ + public static Date getTimeByContinuousTimeCode(String timeType, String time) { + Date dt = null; + timeType = StringUtil.ifEmptyOrNullReturnValue(timeType).toUpperCase(); + switch (timeType) { + case TimeTypeConst.TIME_TYPE_HOUR: + dt = toDateTime(time, COMMON_PATTERN_HOUR); + break; + case TimeTypeConst.TIME_TYPE_DAY: + dt = toDateTime(time, COMMON_PATTERN_DAY); + break; + case TimeTypeConst.TIME_TYPE_MONTH: + dt = toDateTime(time, COMMON_PATTERN_MONTH); + break; + case TimeTypeConst.TIME_TYPE_YEAR: + dt = toDateTime(time, COMMON_PATTERN_YEAR); + break; + default: + break; + } + return dt; + } + + /** + * 鏍规嵁鏃堕棿绫诲瀷杩斿洖澶┿�佹湀銆佸勾鏈�鍚庣殑鏃堕棿 + * + * @param timeType 鏃堕棿绫诲瀷 + * @param time 鏃堕棿 + * @return + */ + public static Date getEndTimeByType(String timeType, Date time) { + Date dt = null; + switch (timeType) { + case TimeTypeConst.TIME_TYPE_DAY: + dt = DateUtil.endOfDay(time); + break; + case TimeTypeConst.TIME_TYPE_MONTH: + dt = DateUtil.endOfMonth(time); + break; + case TimeTypeConst.TIME_TYPE_YEAR: + dt = DateUtil.endOfYear(time); + break; + default: + break; + } + return dt; + } + + /** + * 鏍规嵁鍛ㄦ湡绫诲瀷瀵圭敓浜у懆鏈熻繘琛屽姞鍑忚绠� + * 濉姤鍛ㄦ湡绫诲瀷锛圚OUR灏忔椂銆丏AY澶┿�丮ONTH鏈堛�乊EAR骞达級 + * + * @param date 鐢熶骇鍛ㄦ湡 + * @param cycleType 鐢熶骇鍛ㄦ湡绫诲瀷 + * @param cycleType 鐢熶骇鍛ㄦ湡绫诲瀷 + * @param val 璁$畻鍊� + * @return + */ + public static Date productionCycleCal(Date date, String cycleType,int val) { + Date momDate = date; + switch (cycleType) { + case TimeTypeConst.TIME_TYPE_HOUR: + momDate = DateUtils.addHours(date, val); + break; + case TimeTypeConst.TIME_TYPE_DAY: + momDate = DateUtils.addDays(date, val); + break; + case TimeTypeConst.TIME_TYPE_MONTH: + momDate = DateUtils.addMonths(date, val); + break; + } + return momDate; + } + + /** + * 鏍规嵁鍛ㄦ湡绫诲瀷瀵圭敓浜у懆鏈熻繘琛屽姞鍑忚绠� 骞朵笖杩涗綅 渚嬪锛� HOUR +1杩涗綅灏辨槸 鍔犱竴澶� + * 濉姤鍛ㄦ湡绫诲瀷锛圚OUR灏忔椂銆丏AY澶┿�丮ONTH鏈堛�乊EAR骞达級 + * + * @param date 鐢熶骇鍛ㄦ湡 + * @param cycleType 鐢熶骇鍛ㄦ湡绫诲瀷 + * @param val 璁$畻鍊� + * @return + */ + public static Date productionCycleCalCarry(Date date, String cycleType,int val) { + Date momDate = date; + switch (cycleType) { + case TimeTypeConst.TIME_TYPE_HOUR: + momDate = DateUtils.addDays(date, val); + break; + case TimeTypeConst.TIME_TYPE_DAY: + momDate = DateUtils.addMonths(date, val); + break; + case TimeTypeConst.TIME_TYPE_MONTH: + momDate = DateUtils.addYears(date, val); + break; + } + return momDate; + } +} diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java new file mode 100644 index 0000000..e56b678 --- /dev/null +++ b/zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java @@ -0,0 +1,103 @@ +package com.zhitan.common.utils; + +import cn.hutool.core.util.ObjectUtil; + +/** + * @Description: 鏁板瓧宸ュ叿绫� + * @author: yxw + * @date: 2022骞�02鏈�07鏃� 15:03 + */ +public class DoubleUtil { + public static double toDouble(String str) { + double d = 0; + try { + d = Double.parseDouble(str); + } catch (Exception e) { + d = 0; + } + return d; + } + + /** + * long 杞垚 double绫诲瀷 + * + * @param l + * @return + */ + public static double toDouble(long l) { + return toDouble(l + ""); + } + + /** + * long 杞垚 double绫诲瀷 + * + * @param l + * @return + */ + public static double toDouble(Object l) { + return toDouble(l + ""); + } + + /** + * int 杞垚 double绫诲瀷 + * + * @param i + * @return + */ + public static double toDouble(int i) { + return toDouble(i + ""); + } + + + /** + * 鏍煎紡鍖栧皬鏁颁负鎸囧畾浣嶆暟鐨勫皬鏁板瓧绗︿覆 + * + * @param value + * @return + */ + public static String formatDoubleToStr(Double value, int format) { + if (ObjectUtil.isEmpty(value)) { + value = 0.00; + } + String str = String.format("%." + format + "f", value).toString(); + return str; + } + + /** + * 鏍煎紡鍖栧皬鏁颁负鎸囧畾浣嶆暟鐨勫皬鏁板瓧绗︿覆,榛樿鏍煎紡鍖栦负2浣嶅皬鏁� + * + * @param value + * @return + */ + public static String formatDoubleToStr(Double value) { + return formatDoubleToStr(value, 2); + } + + /** + * 鏍煎紡鍖栧皬鏁颁负鎸囧畾浣嶆暟鐨勫皬鏁� + * + * @param value + * @param format + * @return + */ + public static double formatDouble(Double value, int format) { + if (ObjectUtil.isEmpty(value)) { + return 0D; + } + String str = formatDoubleToStr(value, format); + return toDouble(str); + } + + /** + * 鏍煎紡鍖栧皬鏁颁负2浣嶆暟鐨勫皬鏁� + * + * @param value + * @return + */ + public static double formatDouble(Double value) { + if (ObjectUtil.isEmpty(value)) { + return 0D; + } + return formatDouble(value, 2); + } +} diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java new file mode 100644 index 0000000..4ab42f8 --- /dev/null +++ b/zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java @@ -0,0 +1,40 @@ +package com.zhitan.common.utils; + +/** + * @Description: 鏁存暟鐩稿叧宸ュ叿绫� + * @author: yxw + * @date: 2022骞�03鏈�10鏃� 17:31 + */ +public class IntegerUtil { + /** + * 瀛楃涓茶浆鎴恑nt绫诲瀷 + * + * @param str + * @return + */ + public static int toInt(String str) { + int d = 0; + try { + d = Integer.parseInt(str); + } catch (Exception e) { + d = 0; + } + return d; + } + + /** + * long杞垚int绫诲瀷 + * + * @param l + * @return + */ + public static int toInt(long l) { + int d = 0; + try { + d = (int) l; + } catch (Exception e) { + d = 0; + } + return d; + } +} diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java new file mode 100644 index 0000000..35522d0 --- /dev/null +++ b/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java @@ -0,0 +1,70 @@ +package com.zhitan.common.utils; + +import com.alibaba.fastjson.JSONObject; +import com.zhitan.common.constant.CommonConst; + +/** + * @Description: 瀛楃涓插伐鍏风被 + * @author: yxw + * @date: 2022骞�02鏈�02鏃� 12:27 + */ +public class StringUtil { + /** + * 鍒ゆ柇瀛楃涓叉槸鍚︿负绌哄瓧绗︿覆鎴栬�匩ull + * + * @param str 闇�瑕佸垽鏂殑瀛楃涓� + * @return + */ + public static boolean isEmptyOrNull(String str) { + if (str == null || CommonConst.EMPTY.equals(str)) { + return true; + } + return false; + } + + /** + * 瀛楃涓插鏋滀负绌哄瓧绗︿覆鎴栬�匩ull杩斿洖绌哄瓧绗︿覆锛屽惁鍒欒繑鍥炲瓧绗︿覆鏈韩鐨勫�� + * + * @param str + * @return + */ + public static String ifEmptyOrNullReturnValue(String str) { + if (isEmptyOrNull(str)) { + return CommonConst.EMPTY; + } + return str; + } + + /** + * 瀵硅薄杞垚json瀛楃涓� + * + * @param obj + * @return + */ + public static String toJson(Object obj) { + return JSONObject.toJSONString(obj); + } + + /** + * 瀵硅薄杞垚JSONObject + * + * @param obj + * @return + */ + public static JSONObject toJsonObject(Object obj) { + return JSONObject.parseObject(toJson(obj)); + } + + /** + * 棣栧瓧姣嶅ぇ鍐� + * + * @param str + * @return + */ + public static String captureWord(String str) { + str = str.toLowerCase(); + char[] cs = str.toCharArray(); + cs[0] -= 32; + return String.valueOf(cs); + } +} diff --git a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/DailyComprehensiveMapper.java b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/DailyComprehensiveMapper.java index 08777d9..3a4de64 100644 --- a/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/DailyComprehensiveMapper.java +++ b/zhitan-system/src/main/java/com/zhitan/comprehensivestatistics/mapper/DailyComprehensiveMapper.java @@ -14,7 +14,7 @@ * @date 2020-03-25 */ public interface DailyComprehensiveMapper { - public List<DailyComprehensive> getDailyComprehensiveList(@Param("nodeId") String nodeId, + List<DailyComprehensive> getDailyComprehensiveList(@Param("nodeId") String nodeId, @Param("dataList") List<DailyComprehensive> dataList, @Param("beginTime") Date beginTime, @Param("endTime") Date endTime, diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/domain/vo/NodeIndexValueVO.java b/zhitan-system/src/main/java/com/zhitan/dataitem/domain/vo/NodeIndexValueVO.java new file mode 100644 index 0000000..33560fa --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/dataitem/domain/vo/NodeIndexValueVO.java @@ -0,0 +1,32 @@ +package com.zhitan.dataitem.domain.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Author DYL + **/ +@Data +public class NodeIndexValueVO { + + /** + * 鑺傜偣id + */ + private String nodeId; + + /** + * 鑺傜偣鍚嶇О + */ + private String nodeName; + + /** + * 鐐逛綅id + */ + private String indexId; + + /** + * 绱Н閲� + */ + private BigDecimal value; +} diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java b/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java index 2f6d9ab..94f00fe 100644 --- a/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java +++ b/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java @@ -1,5 +1,6 @@ package com.zhitan.dataitem.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.zhitan.carbonemission.domain.CarbonEmission; import com.zhitan.common.enums.TimeType; import com.zhitan.dataitem.domain.StagseDataEntry; @@ -16,7 +17,7 @@ * @author sys * @date 2020-03-25 */ -public interface DataItemMapper { +public interface DataItemMapper extends BaseMapper<DataItem> { /** * 闃舵鏁版嵁褰曞叆 * diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java b/zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java index 993beb7..99c2a1c 100644 --- a/zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java +++ b/zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java @@ -4,6 +4,8 @@ import com.zhitan.common.enums.TimeType; import com.zhitan.dataitem.domain.StagseDataEntry; import com.zhitan.realtimedata.domain.DataItem; +import com.zhitan.statisticalAnalysis.domain.dto.FlowChartsDTO; +import com.zhitan.statisticalAnalysis.domain.vo.FlowChartsVO; import java.math.BigDecimal; import java.util.Date; @@ -88,4 +90,12 @@ * @return */ List<DataItem> getDataItemHourInforByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds); + + /** + * 鑾峰彇鑳芥祦鍥惧舰鍒嗘瀽 + * + * @param dto 璇锋眰鍙傛暟 + * @return 缁撴灉 + */ + FlowChartsVO getFlowCharts(FlowChartsDTO dto); } diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java index 1e29b7f..2f95c17 100644 --- a/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java +++ b/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java @@ -2,15 +2,29 @@ import com.zhitan.common.enums.TimeType; import com.zhitan.dataitem.domain.StagseDataEntry; +import com.zhitan.dataitem.domain.vo.NodeIndexValueVO; import com.zhitan.dataitem.mapper.DataItemMapper; import com.zhitan.dataitem.service.IDataItemService; +import com.zhitan.model.domain.ModelNode; +import com.zhitan.model.mapper.EnergyIndexMapper; +import com.zhitan.model.mapper.ModelNodeMapper; +import com.zhitan.model.mapper.NodeIndexMapper; import com.zhitan.realtimedata.domain.DataItem; +import com.zhitan.statisticalAnalysis.domain.dto.FlowChartsDTO; +import com.zhitan.statisticalAnalysis.domain.vo.FlowChartsItemVO; +import com.zhitan.statisticalAnalysis.domain.vo.FlowChartsVO; import lombok.AllArgsConstructor; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.math.BigDecimal; -import java.util.Date; -import java.util.List; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.temporal.TemporalAdjusters; +import java.util.*; +import java.util.stream.Collectors; /** * stagseDataEntryService涓氬姟灞傚鐞� @@ -22,7 +36,14 @@ @AllArgsConstructor public class DataItemServiceImpl implements IDataItemService { - private final DataItemMapper dataItemMapper; + @Resource + private DataItemMapper dataItemMapper; + @Resource + private ModelNodeMapper modelNodeMapper; + @Resource + private EnergyIndexMapper energyIndexMapper; + @Resource + private NodeIndexMapper nodeIndexMapper; /** @@ -117,4 +138,116 @@ public List<DataItem> getDataItemHourInforByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds) { return dataItemMapper.getDataItemHourInforByIndexIds(beginTime, endTime, timeType, indexIds); } + + /** + * 鑾峰彇鑳芥祦鍥惧舰鍒嗘瀽 + * + * @param dto 璇锋眰鍙傛暟 + * @return 缁撴灉 + */ + @Override + public FlowChartsVO getFlowCharts(FlowChartsDTO dto) { + FlowChartsVO flowChartsVO = new FlowChartsVO(); + // 鐖惰妭鐐筰d + String nodeId = dto.getNodeId(); + String energyType = dto.getEnergyType(); + LocalDate queryTime = dto.getQueryTime(); + TimeType timeType = dto.getTimeType(); + + // 鑾峰彇鑺傜偣淇℃伅 + ModelNode modelNode = modelNodeMapper.selectModelNodeById(nodeId); + if (ObjectUtils.isEmpty(modelNode)) { + return flowChartsVO; + } + // 鑾峰彇鏌ヨ鏃堕棿 + Map<String, LocalDateTime> dateTimeMap = getDataItemByIndexId(timeType, queryTime); + + // 鑾峰彇鑺傜偣鍜岀偣浣嶇殑绱Н閲� + List<NodeIndexValueVO> parentDataItemList = modelNodeMapper.getDataItemByNodeId(nodeId, energyType, timeType, dateTimeMap); + + // 鑾峰彇瀛愯妭鐐逛笅鐨勭偣浣嶇殑绱Н閲� + List<NodeIndexValueVO> childDataItemList = modelNodeMapper.getDataItemByParentNodeId(nodeId, energyType, timeType, dateTimeMap); + + // 鑾峰彇鐖惰妭鐐逛笅鐨勮兘鑰楁暟鎹�诲拰 + if (ObjectUtils.isNotEmpty(parentDataItemList)) { + // 鐖惰妭鐐逛笅鐨勮兘鑰楁暟鎹�诲拰 + BigDecimal totalValue = parentDataItemList.stream().map(NodeIndexValueVO::getValue) + .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + // 鎬荤疮绉噺 + flowChartsVO.setTotalAccumulatedAmount(totalValue); + } + // 鑾峰彇瀛愯妭鐐逛笅鐨勮兘鑰楁暟鎹� + if (ObjectUtils.isNotEmpty(childDataItemList)) { + // 瀛愯妭鐐逛笅鐨勮兘鑰楁暟鎹�诲拰 + BigDecimal childTotalValue = childDataItemList.stream().map(NodeIndexValueVO::getValue) + .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + // 瀛愯妭鐐圭疮绉噺 + flowChartsVO.setChildNodeAccumulatedAmount(childTotalValue); + + // 鏍规嵁瀛愯妭鐐筰d鍒嗙粍 + Map<String, List<NodeIndexValueVO>> voMap = childDataItemList.stream() + .collect(Collectors.groupingBy(NodeIndexValueVO::getNodeId)); + List<FlowChartsItemVO> itemList = new ArrayList<>(); + + for (String childNodeId : voMap.keySet()) { + FlowChartsItemVO vo = new FlowChartsItemVO(); + vo.setSource(modelNode.getName()); + List<NodeIndexValueVO> valueList = voMap.getOrDefault(childNodeId, Collections.emptyList()); + if (ObjectUtils.isNotEmpty(valueList)) { + // 鍚勪釜瀛愯妭鐐圭殑鑳借�楁暟鎹�诲拰 + BigDecimal value = valueList.stream().map(NodeIndexValueVO::getValue) + .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + valueList.stream().findFirst().ifPresent(nodeIndexValueVO -> vo.setTarget(nodeIndexValueVO.getNodeName())); + vo.setValue(value); + } + itemList.add(vo); + } + flowChartsVO.setItemVOList(itemList); + } + return flowChartsVO; + } + + /** + * 鏍规嵁indexId鏌ヨ鑳借�楁暟鎹� + */ + private Map<String, LocalDateTime> getDataItemByIndexId(TimeType timeType, LocalDate queryTime) { + LocalDateTime startTime; + LocalDateTime endTime; + LocalDate startDate; + LocalDate endDate; + switch (timeType) { + case DAY: + // 褰撳ぉ鐨勫紑濮嬫椂闂� + startTime = LocalDateTime.of(queryTime, LocalTime.MIN); + // 褰撳ぉ鐨勭粨鏉熸椂闂� + endTime = LocalDateTime.of(queryTime, LocalTime.MAX); + break; + case MONTH: + // 褰撴湀鐨勫紑濮嬫椂闂� + startDate = queryTime.with(TemporalAdjusters.firstDayOfMonth()); + startTime = LocalDateTime.of(startDate, LocalTime.MIN); + // 褰撴湀鐨勭粨鏉熸椂闂� + endDate = queryTime.with(TemporalAdjusters.lastDayOfMonth()); + endTime = LocalDateTime.of(endDate, LocalTime.MAX); + break; + case YEAR: + // 褰撳勾鐨勫紑濮嬫椂闂� + startDate = queryTime.with(TemporalAdjusters.firstDayOfYear()); + startTime = LocalDateTime.of(startDate, LocalTime.MIN); + // 褰撳勾鐨勭粨鏉熸椂闂� + endDate = queryTime.with(TemporalAdjusters.lastDayOfYear()); + endTime = LocalDateTime.of(endDate, LocalTime.MAX); + break; + default: + // 褰撳ぉ鐨勫紑濮嬫椂闂� + startTime = LocalDateTime.of(queryTime, LocalTime.MIN); + // 褰撳ぉ鐨勭粨鏉熸椂闂� + endTime = LocalDateTime.of(queryTime, LocalTime.MAX); + break; + } + Map<String, LocalDateTime> localDateTimeMap = new HashMap<>(); + localDateTimeMap.put("startTime", startTime); + localDateTimeMap.put("endTime", endTime); + return localDateTimeMap; + } } diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/EnergyUnitToDevice.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/EnergyUnitToDevice.java deleted file mode 100644 index bf35d02..0000000 --- a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/EnergyUnitToDevice.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.zhitan.energyMonitor.domain; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.zhitan.common.annotation.Excel; -import com.zhitan.common.core.domain.BaseEntity; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.math.BigDecimal; - -/** - * @Description: 鐢ㄨ兘鍗曞厓鍏宠仈鐨勫钩鍙版ā鏉夸腑浠〃鐨勭晫闈㈤�昏緫鍏崇郴 涓嶅惈鏈� 閲囬泦銆佽绠椾俊鎭� - * @Author: jeecg-boot - * @Date: 2022-01-26 - * @Version: V1.0 - */ -@Data -@TableName("energy_unit_to_device") -@Accessors(chain = true) -@EqualsAndHashCode(callSuper = false) -@ApiModel(value="energy_unit_to_device瀵硅薄", description="鐢ㄨ兘鍗曞厓鍏宠仈鐨勫钩鍙版ā鏉夸腑浠〃鐨勭晫闈㈤�昏緫鍏崇郴 涓嶅惈鏈� 閲囬泦銆佽绠椾俊鎭�") -public class EnergyUnitToDevice extends BaseEntity { - private static final long serialVersionUID = 1L; - - @ApiModelProperty(value = "鏂颁富閿�") - @TableId(type = IdType.ASSIGN_ID) - private String newId; - - /**涓婚敭*/ - @ApiModelProperty(value = "涓婚敭") - private String id; - - /**鍏宠仈浠〃鍚嶇О*/ - @Excel(name = "鍏宠仈浠〃鍚嶇О", width = 15) - @ApiModelProperty(value = "鍏宠仈浠〃鍚嶇О") - private String name; - - /**鍏宠仈浠〃缂栫爜*/ - @Excel(name = "鍏宠仈浠〃缂栫爜", width = 15) - @ApiModelProperty(value = "鍏宠仈浠〃缂栫爜") - private String code; - - /**鑳芥簮绫诲瀷锛堟按琛ㄣ�佺數琛ㄣ�佹皵琛ㄧ瓑锛�*/ - @Excel(name = "鑳芥簮绫诲瀷锛堟按琛ㄣ�佺數琛ㄣ�佹皵琛ㄧ瓑锛�", width = 15) - @ApiModelProperty(value = "鑳芥簮绫诲瀷锛堟按琛ㄣ�佺數琛ㄣ�佹皵琛ㄧ瓑锛�") - private String deviceType; - - /**鐢ㄨ兘鍗曞厓涓婚敭*/ - @Excel(name = "鐢ㄨ兘鍗曞厓涓婚敭", width = 15) - @ApiModelProperty(value = "鐢ㄨ兘鍗曞厓涓婚敭") - private String energyUnitId; - - /**绉熸埛涓婚敭*/ - @Excel(name = "绉熸埛涓婚敭", width = 15) - @ApiModelProperty(value = "绉熸埛涓婚敭") - private Integer tenantId; - - @ApiModelProperty(value = "鍙備笌璁¢噺") - private String partMeasurement; - - @ApiModelProperty(value = "瀹夎浣嶇疆") - private String installPosition; - - @ApiModelProperty(value = "鍒嗘憡姣斾緥") - private BigDecimal shareRatio; -} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorDetail.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorDetail.java new file mode 100644 index 0000000..2da7ece --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorDetail.java @@ -0,0 +1,33 @@ +package com.zhitan.energyMonitor.domain.vo; + +import lombok.Data; + +/** + * @Description: TODO + * @author: yxw + * @date: 2022骞�04鏈�24鏃� 16:59 + */ +@Data +public class ElectricPowerFactorDetail { + /** + * 鏈�澶у姛鐜囧洜鏁� + */ + private String max; + /** + * 鏈�澶у姛鐜囧洜鏁板彂鐢熸椂闂� + */ + private String maxTime; + /** + * 鏈�灏忓姛鐜囧洜鏁� + */ + private String min; + /** + * 鏈�灏忓姛鐜囧洜鏁板彂鐢熸椂闂� + */ + private String minTime; + /** + * 骞冲潎鍔熺巼鍥犳暟 + */ + private String avg; + +} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java new file mode 100644 index 0000000..42c024d --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorItem.java @@ -0,0 +1,20 @@ +package com.zhitan.energyMonitor.domain.vo; + +import lombok.Data; + +/** + * @Description: TODO + * @author: yxw + * @date: 2022骞�04鏈�24鏃� 16:59 + */ +@Data +public class ElectricPowerFactorItem { + /** + * 鏃堕棿 + */ + private String timeCode; + /** + * 瀹炴椂鍊� + */ + private String value; +} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.java new file mode 100644 index 0000000..83b3eef --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ElectricPowerFactorVO.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 ElectricPowerFactorVO { + /** + * 璁板綍鍒楄〃 + */ + private List<ElectricPowerFactorItem> itemList; + + /** + * 璇︽儏瀹炰綋 + */ + private ElectricPowerFactorDetail detail; +} 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/domain/vo/EnergyIndexAndUnitDevice.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexAndUnitDevice.java new file mode 100644 index 0000000..f1f0845 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexAndUnitDevice.java @@ -0,0 +1,20 @@ +package com.zhitan.energyMonitor.domain.vo; + +import lombok.Data; + +/** + * 閲囬泦鐐圭敤鑳藉崟鍏冪數琛� + * + * @author fanxinfu + */ +@Data +public class EnergyIndexAndUnitDevice { + + private String indexId; + private String indexName; + private String energyType; + private String energyName; + private String energyUnitName; + private String energyUnitDeviceName; + +} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexInforModel.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexInforModel.java new file mode 100644 index 0000000..78a7a82 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/EnergyIndexInforModel.java @@ -0,0 +1,33 @@ +package com.zhitan.energyMonitor.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * 鐐逛綅璇︾粏淇℃伅 + * + * @Author: Zhujw + * @Date: 2023/5/26 + */ +@Data +public class EnergyIndexInforModel { + + @ApiModelProperty(value = "鐐逛綅id") + private String indexId; + + @ApiModelProperty(value = "璁¢噺鍣ㄥ叿id") + private String meterId; + + @ApiModelProperty(value = "鐐逛綅鍚嶇О") + private String indexName; + + @ApiModelProperty(value = "鐐逛綅绫诲瀷(閲囬泦銆佽绠�)") + private String indexType; + + @ApiModelProperty(value = "鐐逛綅code") + private String indexCode; + + @ApiModelProperty(value = "鐐逛綅鍗曚綅") + private String indexUnit; +} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadDetail.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadDetail.java new file mode 100644 index 0000000..9ee1c52 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadDetail.java @@ -0,0 +1,36 @@ +package com.zhitan.energyMonitor.domain.vo; + +import lombok.Data; + +/** + * @Description: TODO + * @author: yxw + * @date: 2022骞�04鏈�24鏃� 16:59 + */ +@Data +public class ListElectricLoadDetail { + /** + * 鏈�澶ц礋鑽� + */ + private String max; + /** + * 鏈�澶ц礋鑽峰彂鐢熸椂闂� + */ + private String maxTime; + /** + * 鏈�灏忚礋鑽� + */ + private String min; + /** + * 鏈�灏忚礋鑽峰彂鐢熸椂闂� + */ + private String minTime; + /** + * 骞冲潎璐熻嵎 + */ + private String avg; + /** + * 璐熻嵎鐜� = 骞冲潎璐熻嵎 / 鏈�澶ц礋鑽� + */ + private String rate; +} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadItem.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadItem.java new file mode 100644 index 0000000..da4a6c7 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadItem.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 ListElectricLoadItem { + /** + * 鐢佃〃鍚嶇О + */ + private String name; + /** + * 鏃堕棿 + */ + private String timeCode; + /** + * 缁熻鍥炬樉绀烘椂闂� + */ + private String timeCodeChart; + /** + * 鏈�澶ц礋鑽� + */ + private String max; + /** + * 鏈�灏忚礋鑽� + */ + private String min; + /** + * 骞冲潎璐熻嵎 + */ + private String avg; + /** + * 瀹炴椂鍊� + */ + private String value; + /** + * 璐熻嵎鐜� + */ + private String rate; +} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadVO.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadVO.java new file mode 100644 index 0000000..dd06a35 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/domain/vo/ListElectricLoadVO.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 ListElectricLoadVO { + /** + * 璁板綍鍒楄〃 + */ + private List<ListElectricLoadItem> itemList; + + /** + * 璇︽儏瀹炰綋 + */ + private ListElectricLoadDetail detail; +} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/mapper/EnergyUnitToDeviceMapper.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/mapper/EnergyUnitToDeviceMapper.java deleted file mode 100644 index 32edd1e..0000000 --- a/zhitan-system/src/main/java/com/zhitan/energyMonitor/mapper/EnergyUnitToDeviceMapper.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.zhitan.energyMonitor.mapper; - -import com.baomidou.mybatisplus.annotation.InterceptorIgnore; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.zhitan.energyMonitor.domain.EnergyUnitToDevice; -import com.zhitan.energyMonitor.domain.vo.EnergyCalculateCalcTV; -import org.apache.ibatis.annotations.Param; - -import java.util.List; - -/** - * @Description: 鐢ㄨ兘鍗曞厓鍏宠仈鐨勫钩鍙版ā鏉夸腑浠〃鐨勭晫闈㈤�昏緫鍏崇郴 涓嶅惈鏈� 閲囬泦銆佽绠椾俊鎭� - * @Author: jeecg-boot - * @Date: 2022-01-26 - * @Version: V1.0 - */ -public interface EnergyUnitToDeviceMapper extends BaseMapper<EnergyUnitToDevice> { - - /** - * 鏍规嵁璁$畻鐐逛綅涓婚敭鍜岀敤鑳藉崟鍏冧富閿� 鏌ヨ 浣跨敤鐨� 閲囬泦鐐瑰強浠〃淇℃伅 - * - * @param calculateIndexId - * @param energyUnitId - * @return - */ - public List<EnergyCalculateCalcTV> getCalculateDevices(@Param("calculateIndexId") String calculateIndexId, - @Param("energyUnitId") String energyUnitId, - @Param("tenantId") String tenantId); - - /** - * 涓-鏍规嵁绉熸埛id闆嗗悎鏌ヨ璁¢噺鍣ㄥ叿id - * - * @param unitIds - * @return - */ - @InterceptorIgnore(tenantLine = "true") - List<String> listDeviceByTenantIds(@Param("unitIds") List<String> unitIds); -} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricLoadService.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricLoadService.java new file mode 100644 index 0000000..f3c4448 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricLoadService.java @@ -0,0 +1,18 @@ +package com.zhitan.energyMonitor.service; + +import com.zhitan.energyMonitor.domain.vo.ListElectricLoadVO; +import com.zhitan.model.domain.EnergyIndex; + +/** + * @Description: + * @Author: jeecg-boot + * @Date: 2022-04-19 + * @Version: V1.0 + */ +public interface IElectricLoadService { + + /** + * 鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁 + */ + ListElectricLoadVO list(String timeType, String timeCode, EnergyIndex energyIndex); +} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java new file mode 100644 index 0000000..b74cc1b --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IElectricPowerFactorService.java @@ -0,0 +1,19 @@ +package com.zhitan.energyMonitor.service; + +import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorVO; +import com.zhitan.model.domain.EnergyIndex; + + +/** + * @Description: + * @Author: jeecg-boot + * @Date: 2022-04-19 + * @Version: V1.0 + */ +public interface IElectricPowerFactorService { + + /** + * 鑾峰彇璐熻嵎鍒嗘瀽鏁版嵁 + */ + ElectricPowerFactorVO list(String timeCode, EnergyIndex energyIndex); +} 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/IEnergyUnitToDeviceService.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IEnergyUnitToDeviceService.java deleted file mode 100644 index 30bb563..0000000 --- a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/IEnergyUnitToDeviceService.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.zhitan.energyMonitor.service; - - -import com.baomidou.mybatisplus.extension.service.IService; -import com.zhitan.energyMonitor.domain.EnergyUnitToDevice; -import com.zhitan.energyMonitor.domain.vo.ListElectricityMeterVO; -import com.zhitan.energyMonitor.domain.vo.UnitToDeviceRelationVO; - -import java.util.List; - -/** - * @Description: 鐢ㄨ兘鍗曞厓鍏宠仈鐨勫钩鍙版ā鏉夸腑浠〃鐨勭晫闈㈤�昏緫鍏崇郴 涓嶅惈鏈� 閲囬泦銆佽绠椾俊鎭� - * @Author: jeecg-boot - * @Date: 2022-01-26 - * @Version: V1.0 - */ -public interface IEnergyUnitToDeviceService extends IService<EnergyUnitToDevice> { - - /** - * 鏍规嵁鐢ㄨ兘鍗曞厓ID鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃闆嗗悎 - * @param unitId - * @return - */ - List<EnergyUnitToDevice> queryTenantUnitDeviceByUnitId(String unitId); - - /** - * 鏍规嵁鐢ㄨ兘鍗曞厓ID鑾峰彇绉熸埛涓嬫墍鏈夋湁鏁堢殑瀹炰綋琛ㄩ泦鍚� - * @param unitId - * @return - */ - List<EnergyUnitToDevice> queryTenantEntityMeterByUnitId(String unitId); - - /** - * 鏍规嵁鐢ㄨ兘鍗曞厓id鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎 - * - * @param unitId 鐢ㄨ兘鍗曞厓id - * @return 浠〃id闆嗗悎 - */ - List<String> getEnergyUnitDeviceIdByUnitId(String unitId); - - /** - * 鏍规嵁鐢ㄨ兘鍗曞厓id闆嗗悎鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎 - * - * @param unitIds 鐢ㄨ兘鍗曞厓id - */ - List<String> getEnergyUnitDeviceIdByUnitIds(List<String> unitIds); - - /** - * 鏍规嵁鐢ㄨ兘鍗曞厓id闆嗗悎+鑳芥簮绫诲瀷鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎 - * - * @param unitIds 鐢ㄨ兘鍗曞厓id闆嗗悎 - * @return - */ - List<String> getDeviceIdByUnitIds(List<String> unitIds); - - /** - * 鏇存柊鑳藉崟鍏僫d鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎 - * - * @param unitId 鐢ㄨ兘鍗曞厓id - * @return 浠〃id闆嗗悎 - */ - List<String> updateEnergyUnitDeviceIdByUnitId(String unitId); - - /** - * 鍒犻櫎鑳藉崟鍏僫d鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎 - * @param unitId 鐢ㄨ兘鍗曞厓id - * @return 浠〃id闆嗗悎 - */ - void deleteEnergyUnitDeviceIdByUnitId(String unitId); - - /** - * 鏍规嵁鐢ㄨ兘鍗曞厓ID鑾峰彇绉熸埛涓嬫湁鏁堢殑鐢佃〃闆嗗悎 - * @param unitId - * @return - */ - List<ListElectricityMeterVO> listElectricityMeter(String unitId); - - /** - * 鑾峰彇绉熸埛涓嬫湁鏁堢殑琛ㄩ泦鍚� - * @return - */ - List<EnergyUnitToDevice> listAllMeter(); - - /** - * 鏍规嵁璁¢噺鍣ㄥ叿id鍜岀敤鑳藉崟鍏僫d鏌ヨ琛ㄥ叧绯� - * - * @param unitId 鐢ㄨ兘鍗曞厓id - * @param id id - * @return EnergyUnitToDevice瀹炰綋 - */ - EnergyUnitToDevice getEnergyUnitToDeviceById(String unitId, String id); - - /** - * 鏍规嵁璁¢噺鍣ㄥ叿id闆嗗悎鏌ヨ涓庣敤鑳界殑鍏崇郴 - * - * @param unitIds - * @return - */ - List<UnitToDeviceRelationVO> listDeviceByUnitIds(List<String> unitIds); -} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricLoadServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricLoadServiceImpl.java new file mode 100644 index 0000000..a01fd03 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricLoadServiceImpl.java @@ -0,0 +1,258 @@ +package com.zhitan.energyMonitor.service.impl; + +import cn.hutool.core.util.ObjectUtil; +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.enums.CollectionModes; +import com.zhitan.common.enums.GroupTimeType; +import com.zhitan.common.utils.ChartUtils; +import com.zhitan.common.utils.DateTimeUtil; +import com.zhitan.common.utils.DoubleUtil; +import com.zhitan.common.utils.StringUtil; +import com.zhitan.energyMonitor.domain.vo.ListElectricLoadDetail; +import com.zhitan.energyMonitor.domain.vo.ListElectricLoadItem; +import com.zhitan.energyMonitor.domain.vo.ListElectricLoadVO; +import com.zhitan.energyMonitor.service.IElectricLoadService; +import com.zhitan.model.domain.EnergyIndex; +import com.zhitan.realtimedata.domain.TagValue; +import com.zhitan.realtimedata.service.RealtimeDatabaseService; +import org.apache.commons.lang3.ObjectUtils; +import org.joda.time.DateTime; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @Description: sensor_alarm_item + * @Author: jeecg-boot + * @Date: 2022-04-19 + * @Version: V1.0 + */ +@Service +public class ElectricLoadServiceImpl implements IElectricLoadService { + @Autowired + private RealtimeDatabaseService realtimeDatabaseService; + @Resource + private MeterImplementMapper meterImplementMapper; + + @Override + public ListElectricLoadVO list(String timeType, String timeCode, EnergyIndex energyIndex) { + ListElectricLoadVO vo = new ListElectricLoadVO(); + List<ListElectricLoadItem> itemList = new ArrayList<>(); + vo.setItemList(itemList); + ListElectricLoadDetail detail = new ListElectricLoadDetail(); + detail.setMaxTime(CommonConst.DOUBLE_MINUS_SIGN); + detail.setMax(CommonConst.DOUBLE_MINUS_SIGN); + detail.setMin(CommonConst.DOUBLE_MINUS_SIGN); + detail.setMinTime(CommonConst.DOUBLE_MINUS_SIGN); + detail.setAvg(CommonConst.DOUBLE_MINUS_SIGN); + detail.setRate(CommonConst.DOUBLE_MINUS_SIGN); + vo.setDetail(detail); + + MeterImplement meterImplement = meterImplementMapper.selectById(energyIndex.getMeterId()); + + if (ObjectUtil.isEmpty(meterImplement)) { + return vo; + } + List<Date> dateList = new ArrayList<>(); + ChartUtils.generateDateList(timeType, timeCode, dateList); + // 鍥犱负influxdb娌℃湁鎸夌収鏈堝垎缁勫彇鏁版嵁锛屽彧鑳芥寜鐓ф棩鏈熷惊鐜彇鏁版嵁 + if (TimeTypeConst.TIME_TYPE_YEAR.equals(timeType)) { + getYearData(timeType, dateList, energyIndex, meterImplement.getMeterName(), itemList); + } else { + getDayAndMonthData(timeType, timeCode, energyIndex, meterImplement.getMeterName(), itemList); + } + if (!StringUtil.isEmptyOrNull(energyIndex.getCode())) { + Date start = ChartUtils.getDateTime(timeType, timeCode); + Date end = ChartUtils.getEndTime(timeType, start); + + String code = energyIndex.getCode(); + TagValue maxTagValueModel = realtimeDatabaseService.statistics(code, start, end, CollectionModes.max); + TagValue minTagValueModel = realtimeDatabaseService.statistics(code, start, end, CollectionModes.min); + TagValue avgTagValueModel = realtimeDatabaseService.statistics(code, start, end, CollectionModes.mean); + + double avg = CommonConst.DIGIT_DOUBLE_0; + if (!ObjectUtil.isEmpty(avgTagValueModel) && !ObjectUtil.isEmpty(avgTagValueModel.getValue())) { + detail.setAvg(DoubleUtil.formatDoubleToStr(avgTagValueModel.getValue()) + CommonConst.ELECTRIC_LOAD_UNIT); + avg = avgTagValueModel.getValue(); + } + + if (!ObjectUtil.isEmpty(maxTagValueModel) && !ObjectUtil.isEmpty(maxTagValueModel.getValue())) { + detail.setMax(DoubleUtil.formatDoubleToStr(maxTagValueModel.getValue())); + detail.setMaxTime(DateTimeUtil.getDateTime(maxTagValueModel.getDataTime(), DateTimeUtil.COMMON_PATTERN)); + + if (maxTagValueModel.getValue() != CommonConst.DIGIT_DOUBLE_0) { + double rate = avg * CommonConst.DIGIT_DOUBLE_100 / maxTagValueModel.getValue(); + detail.setRate(DoubleUtil.formatDoubleToStr(rate) + CommonConst.SYMBOL_PERCENT); + } + } + + if (!ObjectUtil.isEmpty(minTagValueModel) && !ObjectUtil.isEmpty(minTagValueModel.getValue())) { + detail.setMin(DoubleUtil.formatDoubleToStr(minTagValueModel.getValue())); + detail.setMinTime(DateTimeUtil.getDateTime(minTagValueModel.getDataTime(), DateTimeUtil.COMMON_PATTERN)); + } + + if (!CommonConst.DOUBLE_MINUS_SIGN.equals(detail.getMax())) { + String m = detail.getMax(); + detail.setMax(m + CommonConst.ELECTRIC_LOAD_UNIT); + } + if (!CommonConst.DOUBLE_MINUS_SIGN.equals(detail.getMin())) { + String min = detail.getMin(); + detail.setMin(min + CommonConst.ELECTRIC_LOAD_UNIT); + } + if (CommonConst.DOUBLE_MINUS_SIGN.equals(detail.getMax())) { + detail.setAvg(CommonConst.DOUBLE_MINUS_SIGN); + } + } + + return vo; + } + + /** + * 鑾峰彇鏈堝拰澶╂暟鎹�,鍥犱负influxdb鍙互鎸夌収鍒嗐�傛椂銆傚ぉ鍒嗙粍鍙栨暟锛屼笉鍙互鎸夌収鏈堝垎缁勫彇鏁帮紝鎵�浠ュ垎鎴愪袱涓柟娉曟潵鍐� + */ + private void getDayAndMonthData(String timeType, String timeCode, EnergyIndex energyIndex, String meterName, List<ListElectricLoadItem> itemList) { + String tagCodes = energyIndex.getCode(); + List<TagValue> maxList = new ArrayList<>(); + List<TagValue> minList = new ArrayList<>(); + List<TagValue> avgList = new ArrayList<>(); + if (TimeTypeConst.TIME_TYPE_DAY.equals(timeType)) { + } else { + String tempTimeCode = StringUtil.ifEmptyOrNullReturnValue(timeCode).replace(CommonConst.SINGLE_MINUS_SIGN, CommonConst.EMPTY); + Date start = DateTimeUtil.toDateTime(tempTimeCode, DateTimeUtil.COMMON_PATTERN_MONTH); + Date end = DateTimeUtil.addMonths(start, CommonConst.DIGIT_1); + if (!StringUtil.isEmptyOrNull(tagCodes)) { + maxList = realtimeDatabaseService.statistics(tagCodes, start, end, CollectionModes.max, GroupTimeType.d); + minList = realtimeDatabaseService.statistics(tagCodes, start, end, CollectionModes.min, GroupTimeType.d); + avgList = realtimeDatabaseService.statistics(tagCodes, start, end, CollectionModes.mean, GroupTimeType.d); + } + } + if (CollectionUtils.isEmpty(maxList)) { + maxList = new ArrayList<>(); + } + if (CollectionUtils.isEmpty(minList)) { + minList = new ArrayList<>(); + } + if (CollectionUtils.isEmpty(avgList)) { + avgList = new ArrayList<>(); + } + List<Date> dateList = new ArrayList<>(); + ChartUtils.generateDateList(timeType, timeCode, dateList); + Date now = new Date(); + Date temNow = now; + switch (timeType) { + case TimeTypeConst.TIME_TYPE_DAY: + //褰撳墠鏃堕棿杞垚鏁存椂鏁寸偣 + temNow = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_HOUR, now); + break; + case TimeTypeConst.TIME_TYPE_MONTH: + //褰撳墠鏃堕棿杞垚鏁存椂鏁寸偣 + temNow = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_DAY, now); + break; + default: + break; + } + for (Date date : dateList) { + ListElectricLoadItem temp = new ListElectricLoadItem(); + temp.setTimeCode(ChartUtils.getTimeCode(timeType, date)); + temp.setName(ObjectUtils.isNotEmpty(meterName) ? meterName : ""); + temp.setMax(CommonConst.DOUBLE_MINUS_SIGN); + temp.setMin(CommonConst.DOUBLE_MINUS_SIGN); + temp.setAvg(CommonConst.DOUBLE_MINUS_SIGN); + temp.setTimeCodeChart(ChartUtils.getTimeCodeChart(timeType, date)); + temp.setRate(CommonConst.DOUBLE_MINUS_SIGN); + temp.setValue(CommonConst.DOUBLE_MINUS_SIGN); + itemList.add(temp); + // 濡傛灉澶т簬褰撳墠鏃堕棿榛樿-- + if (DateTimeUtil.compareDateDiff(date, temNow) > CommonConst.DIGIT_0) { + continue; + } + //澶╃殑鍒ゆ柇 + if (TimeTypeConst.TIME_TYPE_DAY.equals(timeType)) { + // 鐢变簬瀹炴椂搴撹繑鍥炵殑鏃堕棿瀵瑰簲鍊间唬琛ㄧ殑鏄墠涓�涓懆鏈熺殑鍊� + Date nextHour = DateTimeUtil.addHours(date, CommonConst.DIGIT_1); + if (!StringUtil.isEmptyOrNull(energyIndex.getCode())) { + TagValue tagValue = realtimeDatabaseService.retrieve(energyIndex.getCode(), nextHour); + if (!ObjectUtil.isEmpty(tagValue)) { + if (ObjectUtils.isEmpty(tagValue) || ObjectUtils.isEmpty(tagValue.getValue())) { + temp.setValue(CommonConst.DOUBLE_MINUS_SIGN); + } else { + temp.setValue(String.valueOf(DoubleUtil.formatDouble(tagValue.getValue()))); + } + } + } + } else { + //鏈堢殑鍒ゆ柇锛岀敱浜庡疄鏃跺簱杩斿洖鐨勬椂闂村搴斿�间唬琛ㄧ殑鏄墠涓�涓懆鏈熺殑鍊� + Date nextDay = DateTimeUtil.addDays(date, CommonConst.DIGIT_1); + TagValue tagValueMonth = maxList.stream().filter(x -> (new DateTime(x.getDataTime())).withTimeAtStartOfDay().toDate().equals(nextDay)).findAny().orElse(null); + if (!ObjectUtil.isEmpty(tagValueMonth)) { + //鏈堢殑鎵惧ぉ + TagValue minModel = minList.stream().filter(x -> x.getDataTime().equals(tagValueMonth.getDataTime())).findAny().orElse(null); + if (!ObjectUtil.isEmpty(minModel)) { + temp.setMin(String.valueOf(DoubleUtil.formatDouble(minModel.getValue()))); + } + TagValue avgModel = avgList.stream().filter(x -> x.getDataTime().equals(tagValueMonth.getDataTime())).findAny().orElse(null); + if (!ObjectUtil.isEmpty(avgModel)) { + temp.setAvg(String.valueOf(DoubleUtil.formatDouble(avgModel.getValue()))); + } + temp.setMax(String.valueOf(DoubleUtil.formatDouble(tagValueMonth.getValue()))); + + temp.setRate(CommonConst.DOUBLE_MINUS_SIGN); + if (Double.parseDouble(temp.getMax()) != CommonConst.DIGIT_DOUBLE_0) { + double rate = Double.parseDouble(temp.getAvg()) * 100 / Double.parseDouble(temp.getMax()); + temp.setRate(DoubleUtil.formatDoubleToStr(rate) + CommonConst.SYMBOL_PERCENT); + } + } + } + } + } + + /** + * 鑾峰彇骞存暟鎹� + */ + private void getYearData(String timeType, List<Date> dateList, EnergyIndex energyIndex, String meterName, List<ListElectricLoadItem> itemList) { + String tagCode = StringUtil.ifEmptyOrNullReturnValue(energyIndex.getCode()); + for (Date date : dateList) { + ListElectricLoadItem temp = new ListElectricLoadItem(); + Date endTime = DateTimeUtil.addMonths(date, CommonConst.DIGIT_1); + temp.setAvg(CommonConst.DOUBLE_MINUS_SIGN); + temp.setMax(CommonConst.DOUBLE_MINUS_SIGN); + temp.setMin(CommonConst.DOUBLE_MINUS_SIGN); + if (!StringUtil.isEmptyOrNull(tagCode)) { + String code = energyIndex.getCode(); + TagValue rt3 = realtimeDatabaseService.statistics(code, date, endTime, CollectionModes.max); + TagValue rt4 = realtimeDatabaseService.statistics(code, date, endTime, CollectionModes.min); + TagValue rt2 = realtimeDatabaseService.statistics(code, date, endTime, CollectionModes.mean); + if (ObjectUtils.isNotEmpty(rt2.getValue())) { + temp.setAvg(String.valueOf(DoubleUtil.formatDouble(rt2.getValue()))); + } + if (ObjectUtils.isNotEmpty(rt3.getValue())) { + temp.setMax(String.valueOf(DoubleUtil.formatDouble(rt3.getValue()))); + } + if (ObjectUtils.isNotEmpty(rt4.getValue())) { + temp.setMin(String.valueOf(DoubleUtil.formatDouble(rt4.getValue()))); + } + } + + temp.setTimeCode(ChartUtils.getTimeCode(timeType, date)); + temp.setTimeCodeChart(ChartUtils.getTimeCodeChart(timeType, date)); + temp.setName(StringUtil.ifEmptyOrNullReturnValue(meterName)); + temp.setRate(CommonConst.DOUBLE_MINUS_SIGN); + temp.setValue(CommonConst.DOUBLE_MINUS_SIGN); + if (!temp.getMax().equals(CommonConst.DOUBLE_MINUS_SIGN) && Double.parseDouble(temp.getMax()) != CommonConst.DIGIT_DOUBLE_0) { + double rate = Double.parseDouble(temp.getAvg()) * 100 / Double.parseDouble(temp.getMax()); + temp.setRate(DoubleUtil.formatDoubleToStr(rate) + CommonConst.SYMBOL_PERCENT); + } + itemList.add(temp); + } + } + + +} diff --git a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java new file mode 100644 index 0000000..ea366f9 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/ElectricPowerFactorServiceImpl.java @@ -0,0 +1,115 @@ +package com.zhitan.energyMonitor.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.zhitan.common.constant.CommonConst; +import com.zhitan.common.constant.TimeTypeConst; +import com.zhitan.common.utils.ChartUtils; +import com.zhitan.common.utils.DateTimeUtil; +import com.zhitan.common.utils.DoubleUtil; +import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorDetail; +import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorItem; +import com.zhitan.energyMonitor.domain.vo.ElectricPowerFactorVO; +import com.zhitan.energyMonitor.service.IElectricPowerFactorService; +import com.zhitan.model.domain.EnergyIndex; +import com.zhitan.realtimedata.domain.TagValue; +import com.zhitan.realtimedata.service.RealtimeDatabaseService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @Description: sensor_alarm_item + * @Author: jeecg-boot + * @Date: 2022-04-19 + * @Version: V1.0 + */ +@Slf4j +@Service +public class ElectricPowerFactorServiceImpl implements IElectricPowerFactorService { + @Autowired + private RealtimeDatabaseService realtimeDatabaseService; + + @Override + public ElectricPowerFactorVO list(String timeCode, EnergyIndex energyIndex) { + ElectricPowerFactorVO vo = new ElectricPowerFactorVO(); + List<ElectricPowerFactorItem> itemList = new ArrayList<>(); + ElectricPowerFactorDetail detail = new ElectricPowerFactorDetail(); + detail.setMaxTime(CommonConst.DOUBLE_MINUS_SIGN); + detail.setMax(CommonConst.DOUBLE_MINUS_SIGN); + detail.setMin(CommonConst.DOUBLE_MINUS_SIGN); + detail.setMinTime(CommonConst.DOUBLE_MINUS_SIGN); + vo.setItemList(itemList); + vo.setDetail(detail); + + List<Date> dateList = new ArrayList<>(); + ChartUtils.generateDateList(TimeTypeConst.TIME_TYPE_DAY, timeCode, dateList); + double max = CommonConst.DIGIT_0, min = CommonConst.MIN_INIT_VALUE; + //dateList璁℃暟 + Date now = new Date(); + //褰撳墠鏃堕棿杞垚鏁存椂鏁寸偣 + now = DateTimeUtil.getHourTime(TimeTypeConst.TIME_TYPE_HOUR, now); + int i = CommonConst.DIGIT_0; + for (Date date : dateList) { + ElectricPowerFactorItem temp = new ElectricPowerFactorItem(); + temp.setTimeCode(ChartUtils.getTimeCodeChart(TimeTypeConst.TIME_TYPE_DAY, date)); + temp.setValue(CommonConst.DOUBLE_MINUS_SIGN); + itemList.add(temp); + // 濡傛灉澶т簬褰撳墠鏃堕棿榛樿-- + if (DateTimeUtil.compareDateDiff(date, now) > CommonConst.DIGIT_0) { + i++; + continue; + } + TagValue tagValue = new TagValue(); + try { + TagValue retrieve = realtimeDatabaseService.retrieve(energyIndex.getCode(), date); + if (ObjectUtil.isNotEmpty(retrieve)) { + tagValue = retrieve; + } + } catch (Exception e) { + log.error("鑾峰彇鍔熺巼鍥犳暟寮傚父锛�" + e.getMessage()); + } + if (ObjectUtil.isNotEmpty(tagValue.getValue())) { + double value = DoubleUtil.formatDouble(tagValue.getValue()); + + temp.setValue(String.valueOf(value)); + //缁欐渶灏忓�艰祴鍊肩涓�鏉� + if (i == CommonConst.DIGIT_0) { + min = Double.parseDouble(temp.getValue()); + } + if (value > max) { + max = value; + detail.setMax(max + CommonConst.EMPTY); + detail.setMaxTime(DateTimeUtil.getDateTime(date)); + } + if (value <= min) { + min = value; + detail.setMin(min + CommonConst.EMPTY); + detail.setMinTime(DateTimeUtil.getDateTime(date)); + } + } + i++; + } + + detail.setAvg(CommonConst.DOUBLE_MINUS_SIGN); + if (ObjectUtil.isNotEmpty(itemList)) { + double avg = CommonConst.DIGIT_DOUBLE_0; + for (ElectricPowerFactorItem li : itemList) { + try { + if (!li.getValue().equals(CommonConst.DOUBLE_MINUS_SIGN)) { + avg += DoubleUtil.toDouble(li.getValue()); + } + } catch (Exception e) { + log.error(e.getMessage()); + } + } + detail.setAvg(DoubleUtil.formatDoubleToStr(avg / itemList.size())); + } + + return vo; + } + +} 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/energyMonitor/service/impl/EnergyUnitToDeviceServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/EnergyUnitToDeviceServiceImpl.java deleted file mode 100644 index 5df3d47..0000000 --- a/zhitan-system/src/main/java/com/zhitan/energyMonitor/service/impl/EnergyUnitToDeviceServiceImpl.java +++ /dev/null @@ -1,232 +0,0 @@ -package com.zhitan.energyMonitor.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.zhitan.common.constant.CommonConst; -import com.zhitan.energyMonitor.domain.EnergyUnitToDevice; -import com.zhitan.energyMonitor.domain.vo.ListElectricityMeterVO; -import com.zhitan.energyMonitor.domain.vo.UnitToDeviceRelationVO; -import com.zhitan.energyMonitor.mapper.EnergyUnitToDeviceMapper; -import com.zhitan.energyMonitor.service.IEnergyUnitToDeviceService; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -/** - * @Description: 鐢ㄨ兘鍗曞厓鍏宠仈鐨勫钩鍙版ā鏉夸腑浠〃鐨勭晫闈㈤�昏緫鍏崇郴 涓嶅惈鏈� 閲囬泦銆佽绠椾俊鎭� - * @Author: jeecg-boot - * @Date: 2022-01-26 - * @Version: V1.0 - */ -@Service -public class EnergyUnitToDeviceServiceImpl extends ServiceImpl<EnergyUnitToDeviceMapper, EnergyUnitToDevice> - implements IEnergyUnitToDeviceService { - - -// @Autowired -// private IMeasuringInstrumentsService meterService; - - - /** - * 鏍规嵁鐢ㄨ兘鍗曞厓id鑾峰彇绉熸埛涓嬬殑鍏朵笅鐨勪华琛ㄥ垪琛� - * - * @param unitId - * @return - */ - @Override - public List<EnergyUnitToDevice> queryTenantUnitDeviceByUnitId(String unitId) { - - QueryWrapper<EnergyUnitToDevice> queryWrapper = new QueryWrapper<EnergyUnitToDevice>(); -// .eq(TableColumnConst.TABLE_COLUMN_ENERGY_UNIT_ID, unitId); - return baseMapper.selectList(queryWrapper); - } - - /** - * 鏍规嵁鐢ㄨ兘鍗曞厓ID鑾峰彇绉熸埛涓嬫墍鏈夋湁鏁堢殑瀹炰綋琛ㄩ泦鍚� - * - * @param unitId - * @return - */ - @Override - public List<EnergyUnitToDevice> queryTenantEntityMeterByUnitId(String unitId) { - - List<EnergyUnitToDevice> unitToDeviceList = baseMapper.selectList(Wrappers.<EnergyUnitToDevice>lambdaQuery() - .eq(EnergyUnitToDevice::getEnergyUnitId, unitId) - ); -// if (CollectionUtils.isNotEmpty(unitToDeviceList)) { -// List<String> meterIds = unitToDeviceList.stream().map(EnergyUnitToDevice::getId).collect(Collectors.toList()); -// // 杩囨护鍑哄疄浣撹〃 -// Integer applianceType = EquipmentInformationEnum.MEASURING_INSTRUMENT_TYPE.ENTITY.getValue(); -// List<Meter> meterList = meterService.list(Wrappers.<Meter>lambdaQuery() -// .select(Meter::getId).in(Meter::getId, meterIds) -// .eq(Meter::getApplianceType, applianceType) -// ); -// List<String> newMeterIds = meterList.stream().map(Meter::getId).collect(Collectors.toList()); -// unitToDeviceList = unitToDeviceList.stream().filter(li -> newMeterIds.contains(li.getId())).collect(Collectors.toList()); -// } - return unitToDeviceList; - } - - /** - * 鏍规嵁鐢ㄨ兘鍗曞厓id鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎 - * - * @param unitId 鐢ㄨ兘鍗曞厓id - * @return 浠〃id闆嗗悎 - */ - @Override -// @Cacheable(value = CacheConstant.ENERGY_UNIT_DEVICE_ID_CACHE, key = "#unitId", unless = "#result == null") - public List<String> getEnergyUnitDeviceIdByUnitId(String unitId) { - - if (StringUtils.isEmpty(unitId)) { - return Collections.emptyList(); - } - List<EnergyUnitToDevice> energyUnitToDevices = baseMapper.selectList(Wrappers.<EnergyUnitToDevice>lambdaQuery() - .select(EnergyUnitToDevice::getId).eq(EnergyUnitToDevice::getEnergyUnitId, unitId) - ); - if (CollectionUtils.isEmpty(energyUnitToDevices)) { - return Collections.emptyList(); - } - return energyUnitToDevices.stream().map(EnergyUnitToDevice::getId).collect(Collectors.toList()); - } - - /** - * 鏍规嵁鐢ㄨ兘鍗曞厓id闆嗗悎鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎 - * - * @param unitIds 鐢ㄨ兘鍗曞厓id - */ - @Override - public List<String> getEnergyUnitDeviceIdByUnitIds(List<String> unitIds) { - if (CollectionUtils.isEmpty(unitIds)) { - return Collections.emptyList(); - } - List<String> deviceIdList = new ArrayList<>(); - for (String unitId : unitIds) { - List<String> unitDeviceIdByUnitId = this.getEnergyUnitDeviceIdByUnitId(unitId); - if (CollectionUtils.isNotEmpty(unitDeviceIdByUnitId)) { - deviceIdList.addAll(unitDeviceIdByUnitId); - } - } - return deviceIdList; - } - - /** - * 鏍规嵁鐢ㄨ兘鍗曞厓id闆嗗悎+鑳芥簮绫诲瀷鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎 - * - * @param unitIds 鐢ㄨ兘鍗曞厓id闆嗗悎 - * @return - */ - @Override - public List<String> getDeviceIdByUnitIds(List<String> unitIds) { - if (CollectionUtils.isEmpty(unitIds)) { - return Collections.emptyList(); - } - - return baseMapper.listDeviceByTenantIds(unitIds); - } - - /** - * 鏇存柊鑳藉崟鍏僫d鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎 - * - * @param unitId 鐢ㄨ兘鍗曞厓id - * @return 浠〃id闆嗗悎 - */ - @Override -// @CachePut(value = CacheConstant.ENERGY_UNIT_DEVICE_ID_CACHE, key = "#unitId", unless = "#result == null") - public List<String> updateEnergyUnitDeviceIdByUnitId(String unitId) { - - if (StringUtils.isEmpty(unitId)) { - return Collections.emptyList(); - } - List<EnergyUnitToDevice> energyUnitToDevices = baseMapper.selectList(Wrappers.<EnergyUnitToDevice>lambdaQuery() - .select(EnergyUnitToDevice::getId).eq(EnergyUnitToDevice::getEnergyUnitId, unitId) - ); - if (CollectionUtils.isEmpty(energyUnitToDevices)) { - return Collections.emptyList(); - } - return energyUnitToDevices.stream().map(EnergyUnitToDevice::getId).collect(Collectors.toList()); - } - - /** - * 鍒犻櫎鑳藉崟鍏僫d鑾峰彇绉熸埛涓嬫湁鏁堢殑浠〃id闆嗗悎 - * - * @param unitId 鐢ㄨ兘鍗曞厓id - */ - @Override -// @CacheEvict(value = CacheConstant.ENERGY_UNIT_DEVICE_ID_CACHE, key = "#unitId") - public void deleteEnergyUnitDeviceIdByUnitId(String unitId) { - } - - @Override - public List<ListElectricityMeterVO> listElectricityMeter(String unitId) { - - LambdaQueryWrapper<EnergyUnitToDevice> queryWrapper = new LambdaQueryWrapper<EnergyUnitToDevice>() - .eq(EnergyUnitToDevice::getEnergyUnitId, unitId); -// .eq(EnergyUnitToDevice::getDeviceType, EnergyTypeConst.ELECTRICITY); - List<EnergyUnitToDevice> models = baseMapper.selectList(queryWrapper); - - List<ListElectricityMeterVO> resultList = new ArrayList<>(); - for (EnergyUnitToDevice model : models) { - ListElectricityMeterVO temp = new ListElectricityMeterVO(); - temp.setCode(model.getId()); - temp.setLabel(model.getName()); - resultList.add(temp); - } - return resultList; - } - - @Override - public List<EnergyUnitToDevice> listAllMeter() { - QueryWrapper<EnergyUnitToDevice> queryWrapper = new QueryWrapper<EnergyUnitToDevice>(); - return baseMapper.selectList(queryWrapper); - } - - @Override - public EnergyUnitToDevice getEnergyUnitToDeviceById(String unitId, String id) { - if (StringUtils.isEmpty(id)) { - return null; - } - LambdaQueryWrapper<EnergyUnitToDevice> lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(EnergyUnitToDevice::getEnergyUnitId, unitId); - lambdaQueryWrapper.eq(EnergyUnitToDevice::getId, id); - List<EnergyUnitToDevice> energyUnitToDevices = baseMapper.selectList(lambdaQueryWrapper); - if (CollectionUtils.isNotEmpty(energyUnitToDevices)) { - return energyUnitToDevices.get(CommonConst.DIGIT_0); - } - return null; - } - - /** - * 鏍规嵁璁¢噺鍣ㄥ叿id闆嗗悎鏌ヨ涓庣敤鑳界殑鍏崇郴 - * - * @param unitIds - * @return - */ - @Override - public List<UnitToDeviceRelationVO> listDeviceByUnitIds(List<String> unitIds) { - List<UnitToDeviceRelationVO> relationList = new ArrayList<>(); - if (CollectionUtils.isEmpty(unitIds)) { - return relationList; - } - List<EnergyUnitToDevice> unitToDeviceList = baseMapper.selectList(Wrappers.<EnergyUnitToDevice>lambdaQuery() - .select(EnergyUnitToDevice::getId, EnergyUnitToDevice::getEnergyUnitId, EnergyUnitToDevice::getName) - .in(EnergyUnitToDevice::getEnergyUnitId, unitIds) - ); - if (CollectionUtils.isNotEmpty(unitToDeviceList)) { - unitToDeviceList.forEach(li -> { - UnitToDeviceRelationVO vo = new UnitToDeviceRelationVO(); - vo.setDeviceId(li.getId()); - vo.setUnitId(li.getEnergyUnitId()); - vo.setDeviceName(li.getName()); - relationList.add(vo); - }); - } - return relationList; - } -} diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java b/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java index aa59f95..c9af73f 100644 --- a/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java +++ b/zhitan-system/src/main/java/com/zhitan/model/domain/EnergyIndex.java @@ -75,18 +75,21 @@ @ApiModelProperty(value = "琛ㄨid") private String meterId; + @ApiModelProperty(value = "椤哄簭鍙�") @Excel(name = "椤哄簭鍙�") private int orderNum; @ApiModelProperty(value = "") private String equipment; + @ApiModelProperty(value = "id") private String energyId; @Transient @TableField(exist = false) private String meterName; + public void setIndexId(String indexId) { this.indexId = indexId; } diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/NodeIndex.java b/zhitan-system/src/main/java/com/zhitan/model/domain/NodeIndex.java new file mode 100644 index 0000000..b4de1e1 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/model/domain/NodeIndex.java @@ -0,0 +1,26 @@ +package com.zhitan.model.domain; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 妯″瀷鑺傜偣涓庢寚鏍囩殑鍏宠仈鍏崇郴(NodeIndex)瀹炰綋绫� + * + * @author makejava + * @since 2025-02-10 15:08:14 + */ +@Data +public class NodeIndex implements Serializable { + private static final long serialVersionUID = 386292923712960012L; + /** + * 鑺傜偣涓婚敭 + */ + private String nodeId; + /** + * 鎸囨爣涓婚敭 + */ + private String indexId; + +} + diff --git a/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java b/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java index 3df1018..9b6bb93 100644 --- a/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java +++ b/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java @@ -5,11 +5,14 @@ import com.zhitan.basicdata.domain.MeterImplement; import com.zhitan.basicdata.domain.SysEnergy; import com.zhitan.basicdata.domain.SysProduct; +import com.zhitan.common.enums.TimeType; +import com.zhitan.dataitem.domain.vo.NodeIndexValueVO; import com.zhitan.model.domain.EnergyIndex; import com.zhitan.model.domain.ModelNode; import com.zhitan.model.domain.vo.ModelNodeIndexInfor; import org.apache.ibatis.annotations.Param; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; @@ -196,4 +199,20 @@ ModelNode getFirstModeNodeInfo(String modelCode); List<ModelNodeIndexInfor> selectIndexByNodeIds(@Param("modelCode") String modelCode,@Param("nodeIds") List<String> nodeIds); + + /** + * 鏍规嵁鐖惰妭鐐筰d鍜岃兘婧愮被鍨嬫煡璇㈢偣浣嶄笅鐨勭疮绉噺 + */ + List<NodeIndexValueVO> getDataItemByParentNodeId(@Param("parentId") String parentId, + @Param("energyType") String energyType, + @Param("timeType") TimeType timeType, + @Param("dateTimeMap") Map<String, LocalDateTime> dateTimeMap); + + /** + * 鏍规嵁鑺傜偣id鍜岃兘婧愮被鍨嬫煡璇㈢偣浣嶄笅鐨勭疮绉噺 + */ + List<NodeIndexValueVO> getDataItemByNodeId(@Param("nodeId") String nodeId, + @Param("energyType") String energyType, + @Param("timeType") TimeType timeType, + @Param("dateTimeMap") Map<String, LocalDateTime> dateTimeMap); } diff --git a/zhitan-system/src/main/java/com/zhitan/model/mapper/NodeIndexMapper.java b/zhitan-system/src/main/java/com/zhitan/model/mapper/NodeIndexMapper.java new file mode 100644 index 0000000..92808f2 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/model/mapper/NodeIndexMapper.java @@ -0,0 +1,15 @@ +package com.zhitan.model.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zhitan.model.domain.NodeIndex; + +/** + * 妯″瀷鑺傜偣涓庢寚鏍囩殑鍏宠仈鍏崇郴(NodeIndex)琛ㄦ暟鎹簱璁块棶灞� + * + * @author makejava + * @since 2025-02-10 15:09:17 + */ +public interface NodeIndexMapper extends BaseMapper<NodeIndex> { + +} + 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 6807f7e..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,107 +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 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 2bb7ff0..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 @@ -1,6 +1,7 @@ package com.zhitan.model.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhitan.basicdata.domain.MeterImplement; import com.zhitan.basicdata.services.IMeterImplementService; @@ -17,6 +18,7 @@ import com.zhitan.model.service.IEnergyIndexService; import com.zhitan.model.service.IModelNodeService; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -33,286 +35,333 @@ @Service public class EnergyIndexServiceImpl implements IEnergyIndexService { - @Autowired - private EnergyIndexMapper energyIndexMapper; - @Autowired - private IDaqTemplateService daqTemplateService; - @Autowired - private IMeterImplementService meterImplementService; - @Autowired - private IModelNodeService modelNodeService; + @Autowired + private EnergyIndexMapper energyIndexMapper; + @Autowired + private IDaqTemplateService daqTemplateService; + @Autowired + private IMeterImplementService meterImplementService; + @Autowired + private IModelNodeService modelNodeService; - @Autowired - private ModelNodeMapper modelNodeMapper; + @Autowired + private ModelNodeMapper modelNodeMapper; - @Override - public EnergyIndex getiEnergyIndexByCode(String code) { - return energyIndexMapper.getiEnergyIndexByCode(code); - } - - @Override - public List<EnergyIndex> listIndexByMeterIds(String nodeId, List<String> meterId) { - return energyIndexMapper.listIndexByMeterIds(nodeId,meterId); - } - - /** - * 鏌ヨ鎸囨爣淇℃伅 - * - * @param indexId 鎸囨爣淇℃伅ID - * @return 鎸囨爣淇℃伅 - */ - @Override - public EnergyIndex selectEnergyIndexById(String indexId) { - return energyIndexMapper.selectEnergyIndexById(indexId); - } - - @Override - public List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId) { - if (CollectionUtils.isEmpty(indexId)) { - return Collections.emptyList(); - } - return energyIndexMapper.selectEnergyIndexByIds(indexId); - } - - @Override - public List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex) { - return energyIndexMapper.selectEnergyIndexList(energyIndex); - } - - /** - * 鏌ヨ鎸囨爣淇℃伅鍒楄〃 - * - * @param energyIndex 鎸囨爣淇℃伅 - * @return 鎸囨爣淇℃伅 - */ - @Override - public List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query) { - return energyIndexMapper.selectEnergyIndex(query); - } - - /** - * 鏂板鎸囨爣淇℃伅 - * - * @param nodeId - * @param energyIndex 鎸囨爣淇℃伅 - * @return 缁撴灉 - */ - @Override - public int insertEnergyIndex(String nodeId, EnergyIndex energyIndex) { - energyIndex.setNodeId(nodeId); - energyIndexMapper.insertEnergyIndex( energyIndex); - return energyIndexMapper.insertNodeIndex(nodeId,energyIndex.getIndexId()); - } - - /** - * 淇敼鎸囨爣淇℃伅 - * - * @param energyIndex 鎸囨爣淇℃伅 - * @return 缁撴灉 - */ - @Override - public int updateEnergyIndex(EnergyIndex energyIndex) { - return energyIndexMapper.updateEnergyIndex(energyIndex); - } - - /** - * 鎵归噺鍒犻櫎鎸囨爣淇℃伅 - * - * @param nodeId - * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID - * @return 缁撴灉 - */ - @Override - public int deleteEnergyIndexByIds(String nodeId, String[] indexIds) { - return energyIndexMapper.deleteEnergyIndexByIds(nodeId, indexIds); - } - - @Override - public boolean energyIndexHasExist(String code) { - int count = energyIndexMapper.energyIndexHasExist(code); - return count > 0; - } - - @Override - public boolean energyIndexHasExist(String indexId, String code) { - int count = energyIndexMapper.energyIndexHasExistWhenUpdate(indexId, code); - return count > 0; - } - - @Override - public AjaxResult addMeterIndex(String meterId) { - MeterImplement meterImplement = meterImplementService.selectMeterImplementById(meterId); - if (meterImplement == null) { - return AjaxResult.error("鎵句笉鍒板搴旂殑璁¢噺鍣ㄥ叿锛�"); + @Override + public EnergyIndex getiEnergyIndexByCode(String code) { + return energyIndexMapper.getiEnergyIndexByCode(code); } - DaqTemplate query = new DaqTemplate(); - query.setDeviceType(meterImplement.getMeterType()); - List<DaqTemplate> daqTemplates = daqTemplateService.selectDaqTemplateList(query); - if (daqTemplates.isEmpty()) { - return AjaxResult.error("璁¢噺鍣ㄥ叿鎵�灞炵殑绫诲瀷娌℃湁鎵惧埌瀵瑰簲鐨勬ā鏉匡紒"); + @Override + public List<EnergyIndex> listIndexByMeterIds(String nodeId, List<String> meterId) { + return energyIndexMapper.listIndexByMeterIds(nodeId, meterId); } - List<EnergyIndex> energyIndices = new ArrayList<>(); - daqTemplates.forEach(daqTemplate -> { - EnergyIndex energyIndex = new EnergyIndex(); - energyIndex.setIndexId(UUID.randomUUID().toString()); - energyIndex.setCode(meterImplement.getCode() + "_" + daqTemplate.getCode()); - energyIndex.setName(daqTemplate.getName()); - energyIndex.setUnitId(daqTemplate.getUnit()); - energyIndex.setIndexType(IndexType.COLLECT); - energyIndex.setMeterId(meterId); - energyIndices.add(energyIndex); - }); - - energyIndexMapper.deleteIndexByMeterId(meterId); - energyIndexMapper.insertEnergyIndices(energyIndices); - return AjaxResult.success(); - } - - @Override - public List<EnergyIndex> getMeterIndex(String meterId) { - return energyIndexMapper.getMeterIndex(meterId); - } - - @Override - public boolean modelHasConfig(String modelCode) { - int count = energyIndexMapper.modelHasConfig(modelCode); - return count > 0; - } - - @Override - public List<EnergyIndex> selectCollectIndex(String deviceId) { - return energyIndexMapper.selectCollectIndex(deviceId); - } - - @Override - public List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds) { - return energyIndexMapper.getEnergyIndexByIds(indexIds); - } - - @Override - public List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes) { - if (indexCodes.isEmpty()) { - return new ArrayList<>(); + /** + * 鏌ヨ鎸囨爣淇℃伅 + * + * @param indexId 鎸囨爣淇℃伅ID + * @return 鎸囨爣淇℃伅 + */ + @Override + public EnergyIndex selectEnergyIndexById(String indexId) { + return energyIndexMapper.selectEnergyIndexById(indexId); } - return energyIndexMapper.getEnergyIndexByCodes(indexCodes); - } - - @Override - public List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId) { - return energyIndexMapper.getIndexByNodeAndChildrenNode(nodeId); - } - - @Override - public List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter) { - return energyIndexMapper.searchIndexByNodeAndChildrenNode(nodeId, filter); - } - - @Override - public void removeNodeIndex(String nodeId, List<String> removeLink) { - energyIndexMapper.removeNodeIndex(nodeId, removeLink); - } - - @Override - public AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport) { - List<String> codes = energyIndexList.stream().map(EnergyIndex::getCode) - .collect(Collectors.toList()); - List<String> nodeCodes = energyIndexList.stream().map(EnergyIndex::getNodeId) - .collect(Collectors.toList()); - List<EnergyIndex> indexList = energyIndexMapper.getEnergyIndexByCodes(codes); - List<ModelNode> modelNodes = modelNodeService.getModelNodeByNodeCodes(nodeCodes); - Map<String, String> nodeCodeToId = modelNodes.stream() - .collect(Collectors.toMap(ModelNode::getCode, ModelNode::getNodeId)); - Set<String> cacheIndexCodes = indexList.stream().map(EnergyIndex::getCode) - .collect(Collectors.toSet()); - - List<EnergyIndex> insertData = new ArrayList<>(); - List<EnergyIndex> updateData = new ArrayList<>(); - List<String> errorNodeCode = new ArrayList<>(); - List<String> insertIndexCode = new ArrayList<>(); - AtomicBoolean existDuplicateCode = new AtomicBoolean(false); - energyIndexList.forEach(energyIndex -> { - if (cacheIndexCodes.contains(energyIndex.getCode())) { - updateData.add(energyIndex); - } else { - String nodeCode = energyIndex.getNodeId(); - if (nodeCodeToId.containsKey(nodeCode)) { - if (!insertIndexCode.contains(energyIndex.getCode())) { - insertIndexCode.add(energyIndex.getCode()); - energyIndex.setIndexId(UUID.randomUUID().toString()); - energyIndex.setNodeId(nodeCodeToId.get(nodeCode)); - insertData.add(energyIndex); - } else { - existDuplicateCode.set(true); - } - } else if (!errorNodeCode.contains(nodeCode)) { - errorNodeCode.add(nodeCode); + @Override + public List<EnergyIndex> selectEnergyIndexByIds(List<String> indexId) { + if (CollectionUtils.isEmpty(indexId)) { + return Collections.emptyList(); } - } - }); - - if (updateSupport && !updateData.isEmpty()) { - updateData.forEach(energyIndexMapper::updateEnergyIndex); + return energyIndexMapper.selectEnergyIndexByIds(indexId); } - if (!insertData.isEmpty()) { - energyIndexMapper.saveEnergyIndex(insertData); + @Override + public List<EnergyIndex> selectEnergyIndexList(EnergyIndex energyIndex) { + return energyIndexMapper.selectEnergyIndexList(energyIndex); } - String errMsg = ""; - if (existDuplicateCode.get()) { - errMsg += "瀛樺湪閲嶅鐨勬寚鏍囩紪鐮侊紝宸茶嚜鍔ㄨ繃婊わ紒"; + /** + * 鏌ヨ鎸囨爣淇℃伅鍒楄〃 + * + * @return 鎸囨爣淇℃伅 + */ + @Override + public List<EnergyIndex> selectEnergyIndexList(EnergyIndexQuery query) { + return energyIndexMapper.selectEnergyIndex(query); } - if (!errorNodeCode.isEmpty()) { - errMsg += String.join(",", errorNodeCode) + "娌℃湁鎵惧埌瀵瑰簲鐨勮妭鐐规暟鎹紝鍥犳鍏朵笅鐨勬墍鏈夋寚鏍囧鍏ュけ璐ワ紒"; + /** + * 鏂板鎸囨爣淇℃伅 + * + * @param nodeId + * @param energyIndex 鎸囨爣淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertEnergyIndex(String nodeId, EnergyIndex energyIndex) { + energyIndex.setNodeId(nodeId); + energyIndexMapper.insertEnergyIndex(energyIndex); + return energyIndexMapper.insertNodeIndex(nodeId, energyIndex.getIndexId()); } - if (StringUtils.isNotBlank(errMsg)) { - return AjaxResult.error(errMsg); - } - return AjaxResult.success("瀵煎叆鎴愬姛锛�"); - } - - @Override - public List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes) { - if (indexCodes.isEmpty()) { - return new ArrayList<>(); + /** + * 淇敼鎸囨爣淇℃伅 + * + * @param energyIndex 鎸囨爣淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateEnergyIndex(EnergyIndex energyIndex) { + return energyIndexMapper.updateEnergyIndex(energyIndex); } - return energyIndexMapper.getEnergyIndexMeterByCodes(indexCodes); - } + /** + * 鎵归噺鍒犻櫎鎸囨爣淇℃伅 + * + * @param nodeId + * @param indexIds 闇�瑕佸垹闄ょ殑鎸囨爣淇℃伅ID + * @return 缁撴灉 + */ + @Override + public int deleteEnergyIndexByIds(String nodeId, String[] indexIds) { + return energyIndexMapper.deleteEnergyIndexByIds(nodeId, indexIds); + } - /** - * @description: hmj 鍒嗛〉鏌ヨ - * @param query - * @param pageNum - * @param pageSize - * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.zhitan.model.domain.EnergyIndex> - * @author: hmj - * @date: 2024/10/11 23:56 - */ - @Override - public Page<EnergyIndex> selectEnergyIndexPage(EnergyIndexQuery query, Long pageNum, Long pageSize) { - return energyIndexMapper.selectEnergyIndexPage(new Page<>(pageNum,pageSize),query); - } + @Override + public boolean energyIndexHasExist(String code) { + int count = energyIndexMapper.energyIndexHasExist(code); + return count > 0; + } - @Override - public Page<EnergyIndex> getMeterIndexList(List<String> meterIndexIds,String code, - String name,Long pageNum, Long pageSize) { - LambdaQueryWrapper<EnergyIndex> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(EnergyIndex::getMeterId,meterIndexIds); - queryWrapper.like(StringUtils.isNotEmpty(code),EnergyIndex::getCode,code); - queryWrapper.like(StringUtils.isNotEmpty(name),EnergyIndex::getName,name); - return energyIndexMapper.selectPage(new Page<>(pageNum,pageSize),queryWrapper); - } + @Override + public boolean energyIndexHasExist(String indexId, String code) { + int count = energyIndexMapper.energyIndexHasExistWhenUpdate(indexId, code); + return count > 0; + } - @Override - public List<EnergyIndex> getIndexByCode(String code, String nodeId) { - List<EnergyIndex> energyIndexList = energyIndexMapper.getIndexByCode(code,nodeId); + @Override + public AjaxResult addMeterIndex(String meterId) { + MeterImplement meterImplement = meterImplementService.selectMeterImplementById(meterId); + if (meterImplement == null) { + return AjaxResult.error("鎵句笉鍒板搴旂殑璁¢噺鍣ㄥ叿锛�"); + } - return energyIndexList; - } + DaqTemplate query = new DaqTemplate(); + query.setDeviceType(meterImplement.getMeterType()); + List<DaqTemplate> daqTemplates = daqTemplateService.selectDaqTemplateList(query); + if (daqTemplates.isEmpty()) { + return AjaxResult.error("璁¢噺鍣ㄥ叿鎵�灞炵殑绫诲瀷娌℃湁鎵惧埌瀵瑰簲鐨勬ā鏉匡紒"); + } + + List<EnergyIndex> energyIndices = new ArrayList<>(); + daqTemplates.forEach(daqTemplate -> { + EnergyIndex energyIndex = new EnergyIndex(); + energyIndex.setIndexId(UUID.randomUUID().toString()); + energyIndex.setCode(meterImplement.getCode() + "_" + daqTemplate.getCode()); + energyIndex.setName(daqTemplate.getName()); + energyIndex.setUnitId(daqTemplate.getUnit()); + energyIndex.setIndexType(IndexType.COLLECT); + energyIndex.setMeterId(meterId); + energyIndices.add(energyIndex); + }); + + energyIndexMapper.deleteIndexByMeterId(meterId); + energyIndexMapper.insertEnergyIndices(energyIndices); + return AjaxResult.success(); + } + + @Override + public List<EnergyIndex> getMeterIndex(String meterId) { + return energyIndexMapper.getMeterIndex(meterId); + } + + @Override + public boolean modelHasConfig(String modelCode) { + int count = energyIndexMapper.modelHasConfig(modelCode); + return count > 0; + } + + @Override + public List<EnergyIndex> selectCollectIndex(String deviceId) { + return energyIndexMapper.selectCollectIndex(deviceId); + } + + @Override + public List<EnergyIndex> getEnergyIndexByIds(List<String> indexIds) { + return energyIndexMapper.getEnergyIndexByIds(indexIds); + } + + @Override + public List<EnergyIndex> getEnergyIndexByCodes(List<String> indexCodes) { + if (indexCodes.isEmpty()) { + return new ArrayList<>(); + } + + return energyIndexMapper.getEnergyIndexByCodes(indexCodes); + } + + @Override + public List<EnergyIndex> getIndexByNodeAndChildrenNode(String nodeId) { + return energyIndexMapper.getIndexByNodeAndChildrenNode(nodeId); + } + + @Override + public List<EnergyIndex> searchIndexByNodeAndChildrenNode(String nodeId, String filter) { + return energyIndexMapper.searchIndexByNodeAndChildrenNode(nodeId, filter); + } + + @Override + public void removeNodeIndex(String nodeId, List<String> removeLink) { + energyIndexMapper.removeNodeIndex(nodeId, removeLink); + } + + @Override + public AjaxResult importEnergyIndex(List<EnergyIndex> energyIndexList, boolean updateSupport) { + List<String> codes = energyIndexList.stream().map(EnergyIndex::getCode) + .collect(Collectors.toList()); + List<String> nodeCodes = energyIndexList.stream().map(EnergyIndex::getNodeId) + .collect(Collectors.toList()); + List<EnergyIndex> indexList = energyIndexMapper.getEnergyIndexByCodes(codes); + List<ModelNode> modelNodes = modelNodeService.getModelNodeByNodeCodes(nodeCodes); + Map<String, String> nodeCodeToId = modelNodes.stream() + .collect(Collectors.toMap(ModelNode::getCode, ModelNode::getNodeId)); + Set<String> cacheIndexCodes = indexList.stream().map(EnergyIndex::getCode) + .collect(Collectors.toSet()); + + List<EnergyIndex> insertData = new ArrayList<>(); + List<EnergyIndex> updateData = new ArrayList<>(); + List<String> errorNodeCode = new ArrayList<>(); + List<String> insertIndexCode = new ArrayList<>(); + AtomicBoolean existDuplicateCode = new AtomicBoolean(false); + energyIndexList.forEach(energyIndex -> { + if (cacheIndexCodes.contains(energyIndex.getCode())) { + updateData.add(energyIndex); + } else { + String nodeCode = energyIndex.getNodeId(); + if (nodeCodeToId.containsKey(nodeCode)) { + if (!insertIndexCode.contains(energyIndex.getCode())) { + insertIndexCode.add(energyIndex.getCode()); + energyIndex.setIndexId(UUID.randomUUID().toString()); + energyIndex.setNodeId(nodeCodeToId.get(nodeCode)); + insertData.add(energyIndex); + } else { + existDuplicateCode.set(true); + } + } else if (!errorNodeCode.contains(nodeCode)) { + errorNodeCode.add(nodeCode); + } + } + }); + + if (updateSupport && !updateData.isEmpty()) { + updateData.forEach(energyIndexMapper::updateEnergyIndex); + } + + if (!insertData.isEmpty()) { + energyIndexMapper.saveEnergyIndex(insertData); + } + + String errMsg = ""; + if (existDuplicateCode.get()) { + errMsg += "瀛樺湪閲嶅鐨勬寚鏍囩紪鐮侊紝宸茶嚜鍔ㄨ繃婊わ紒"; + } + + if (!errorNodeCode.isEmpty()) { + errMsg += String.join(",", errorNodeCode) + "娌℃湁鎵惧埌瀵瑰簲鐨勮妭鐐规暟鎹紝鍥犳鍏朵笅鐨勬墍鏈夋寚鏍囧鍏ュけ璐ワ紒"; + } + + if (StringUtils.isNotBlank(errMsg)) { + return AjaxResult.error(errMsg); + } + return AjaxResult.success("瀵煎叆鎴愬姛锛�"); + } + + @Override + public List<EnergyIndex> getEnergyIndexMeterByCodes(List<String> indexCodes) { + if (indexCodes.isEmpty()) { + return new ArrayList<>(); + } + + return energyIndexMapper.getEnergyIndexMeterByCodes(indexCodes); + } + + /** + * @param query + * @param pageNum + * @param pageSize + * @return com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.zhitan.model.domain.EnergyIndex> + * @description: hmj 鍒嗛〉鏌ヨ + * @author: hmj + * @date: 2024/10/11 23:56 + */ + @Override + public Page<EnergyIndex> selectEnergyIndexPage(EnergyIndexQuery query, Long pageNum, Long pageSize) { + return energyIndexMapper.selectEnergyIndexPage(new Page<>(pageNum, pageSize), query); + } + + @Override + public Page<EnergyIndex> getMeterIndexList(List<String> meterIndexIds, String code, + String name, Long pageNum, Long pageSize) { + LambdaQueryWrapper<EnergyIndex> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(EnergyIndex::getMeterId, meterIndexIds); + queryWrapper.like(StringUtils.isNotEmpty(code), EnergyIndex::getCode, code); + queryWrapper.like(StringUtils.isNotEmpty(name), EnergyIndex::getName, name); + return energyIndexMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper); + } + + @Override + public List<EnergyIndex> getIndexByCode(String code, String nodeId) { + List<EnergyIndex> energyIndexList = energyIndexMapper.getIndexByCode(code, nodeId); + + return energyIndexList; + } + + /** + * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣� + * + * @param nodeId 鑺傜偣id + * @param meterId 璁惧id + * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎 + * @return + */ + @Override + public EnergyIndex getDeviceIndexByCode(String nodeId, String meterId, String indexCode) { + + List<EnergyIndex> energyIndexList = listDeviceIndexByCode(nodeId, meterId, indexCode); + EnergyIndex energyIndex = energyIndexList.stream().findFirst().orElse(null); + if (ObjectUtils.isEmpty(energyIndex)) { + energyIndex = new EnergyIndex(); + } + return energyIndex; + } + + /** + * 鏍规嵁鐢ㄨ兘鍗曞厓id鍜岃澶噄d锛屼互鍙婄偣浣嶇紪鐮佽幏鍙栫偣浣� + * + * @param nodeId 鑺傜偣id + * @param meterId 璁惧id + * @param indexCode 鐐逛綅缂栫爜鎴栬�呯偣浣嶇紪鐮佺殑涓�閮ㄥ垎 + * @return + */ + public List<EnergyIndex> listDeviceIndexByCode(String nodeId, String meterId, String indexCode) { + return energyIndexMapper.selectList(Wrappers.<EnergyIndex>lambdaQuery() + .eq(EnergyIndex::getNodeId, nodeId) + .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)); + } } diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java index dc45bc7..0f32c0f 100644 --- a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java +++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/RealtimeDatabaseService.java @@ -2,6 +2,7 @@ import com.zhitan.common.enums.CollectionModes; +import com.zhitan.common.enums.GroupTimeType; import com.zhitan.common.enums.RetrievalModes; import com.zhitan.realtimedata.domain.TagValue; @@ -94,6 +95,18 @@ CollectionModes collectionModes); /** + * 鑾峰彇娴嬬偣鍦ㄤ竴娈垫椂闂村唴鎸夌収鏌愪竴鏃堕棿鍛ㄦ湡鐨勭粺璁℃暟鎹�. + * + * @param tagCodes 娴嬬偣缂栧彿闆嗗悎 + * @param beginTime 寮�濮嬫椂闂� + * @param endTime 缁撴潫鏃堕棿,鍖呮嫭缁撴潫鏃堕棿 + * @param modes 缁熻绫诲瀷 + * @param timeType 鍒嗙粍鏃堕棿鍛ㄦ湡锛堝垎銆佹椂銆佸ぉ锛� + * @return 娴嬬偣缁熻缁撴灉 + */ + List<TagValue> statistics(String tagCodes, Date beginTime, Date endTime, CollectionModes modes, GroupTimeType timeType); + + /** * 瀛樺偍娴嬬偣鐨勫疄鏃舵暟鎹�. * * @param tagValues 娴嬬偣瀹炴椂鏁版嵁 diff --git a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java index 7128652..9e16113 100644 --- a/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java +++ b/zhitan-system/src/main/java/com/zhitan/realtimedata/service/impl/RealtimeDatabaseServiceImpl.java @@ -1,7 +1,10 @@ package com.zhitan.realtimedata.service.impl; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.google.common.collect.Lists; import com.zhitan.common.enums.CollectionModes; +import com.zhitan.common.enums.GroupTimeType; import com.zhitan.common.enums.RetrievalModes; import com.zhitan.realtimedata.data.RealtimeDatabaseManager; import com.zhitan.realtimedata.data.influxdb.InfluxDBRepository; @@ -10,9 +13,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; -import java.util.Collections; -import java.util.Date; -import java.util.List; +import java.util.*; /** * 瀹炴椂鏁版嵁搴撳彇鏁版湇鍔″疄鐜扮被. @@ -131,6 +132,20 @@ return repository.statistics(tagCodes, beginTime, endTime, collectionModes); } + @Override + public List<TagValue> statistics(String tagCodes, Date beginTime, Date endTime, CollectionModes modes, GroupTimeType timeType) { + try { + List<String> tagCodeList = Arrays.asList(tagCodes.split(StrUtil.COMMA).clone()); + List<TagValue> tagValues = repository.statistics(tagCodeList, beginTime, endTime, modes, timeType); + if (ObjectUtil.isEmpty(tagValues)) { + tagValues = new ArrayList<>(); + } + return tagValues; + } catch (Exception e) { + return new ArrayList<>(); + } + } + /** * 瀛樺偍娴嬬偣鐨勫疄鏃舵暟鎹�. * diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/FlowChartsDTO.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/FlowChartsDTO.java new file mode 100644 index 0000000..b9dc2f9 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/FlowChartsDTO.java @@ -0,0 +1,57 @@ +package com.zhitan.statisticalAnalysis.domain.dto; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.zhitan.common.enums.TimeType; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.time.LocalDate; + +/** + * 鑳芥祦鍥炬煡璇� + */ +@Data +public class FlowChartsDTO { + + /** + * 鑳芥簮绫诲瀷鍚嶇О + */ + @EnumValue + @ApiModelProperty(value = "鏃堕棿绫诲瀷") + private TimeType timeType; + + /** + * 鏌ヨ鏃堕棿 + */ + @NotNull(message = "鏌ヨ鏃堕棿涓嶈兘涓虹┖") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty(value = "鏌ヨ鏃堕棿") + private LocalDate queryTime; + + /** + * 鑳芥簮绫诲瀷 + */ + @NotBlank(message = "鑳芥簮绫诲瀷涓嶈兘涓虹┖") + @ApiModelProperty(value = "鑳芥簮绫诲瀷") + private String energyType; + + /** + * 鑺傜偣id + */ + @NotBlank(message = "鑺傜偣id涓嶈兘涓虹┖") + @ApiModelProperty(value = "鑺傜偣id") + private String nodeId; + + public TimeType getTimeType() { + if (ObjectUtils.isEmpty(timeType)) { + return TimeType.DAY; + } + return timeType; + } +} diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsItemVO.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsItemVO.java new file mode 100644 index 0000000..4696561 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsItemVO.java @@ -0,0 +1,34 @@ +package com.zhitan.statisticalAnalysis.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.math.BigDecimal; + +/** + * 鑳芥祦鍥炬煡璇� + */ +@Data +public class FlowChartsItemVO { + + /** + * 婧愬ご + */ + @ApiModelProperty(value = "婧愬ご") + private String source; + + /** + * 鐩爣 + */ + @ApiModelProperty(value = "鐩爣") + private String target; + + /** + * 鍊� + */ + @NotBlank(message = "鍊�") + @ApiModelProperty(value = "鍊�") + private BigDecimal value; + +} diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java new file mode 100644 index 0000000..a0bf88e --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java @@ -0,0 +1,68 @@ +package com.zhitan.statisticalAnalysis.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Collections; +import java.util.List; + +/** + * 鑳芥祦鍥炬煡璇� + */ +@Data +public class FlowChartsVO { + + // 鎬荤疮绉噺 + @ApiModelProperty(value = "鎬荤疮绉噺") + private BigDecimal totalAccumulatedAmount; + + // 瀛愯妭鐐圭疮绉噺 + @ApiModelProperty(value = "瀛愯妭鐐圭疮绉噺") + private BigDecimal childNodeAccumulatedAmount; + + // 宸�� + @ApiModelProperty(value = "宸��") + private BigDecimal difference; + + // 鑳借�楁崯澶辨瘮渚� + @ApiModelProperty(value = "鑳借�楁崯澶辨瘮渚�") + private BigDecimal energyLossRatio; + + private List<FlowChartsItemVO> itemVOList; + + public BigDecimal getTotalAccumulatedAmount() { + if (totalAccumulatedAmount == null){ + return BigDecimal.ZERO; + } + return totalAccumulatedAmount; + } + + public BigDecimal getChildNodeAccumulatedAmount() { + if (childNodeAccumulatedAmount == null){ + return BigDecimal.ZERO; + } + return childNodeAccumulatedAmount; + } + + public BigDecimal getDifference() { + return difference = totalAccumulatedAmount.subtract(childNodeAccumulatedAmount); + } + + public BigDecimal getEnergyLossRatio() { + if (BigDecimal.ZERO.compareTo(totalAccumulatedAmount) == 0 + || BigDecimal.ZERO.compareTo(difference) == 0){ + return BigDecimal.ZERO; + } + return energyLossRatio = difference.divide(totalAccumulatedAmount, 2, RoundingMode.HALF_UP); + } + + public FlowChartsVO() { + this.totalAccumulatedAmount = BigDecimal.ZERO; + this.childNodeAccumulatedAmount = BigDecimal.ZERO; + this.difference = BigDecimal.ZERO; + this.energyLossRatio = BigDecimal.ZERO; + this.itemVOList = Collections.emptyList(); + } +} diff --git a/zhitan-system/src/main/resources/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml b/zhitan-system/src/main/resources/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml index 0380045..99bdde1 100644 --- a/zhitan-system/src/main/resources/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml +++ b/zhitan-system/src/main/resources/mapper/comprehensivestatistics/DailyComprehensiveMapper.xml @@ -35,7 +35,7 @@ <result column="value0" property="value0"/> </resultMap> <!--鍏ㄥ巶鑳借�楃粺璁�--> - <select id="getdailyComprehensiveList" resultMap="dataItemMap"> + <select id="getDailyComprehensiveList" resultType="com.zhitan.comprehensivestatistics.domain.DailyComprehensive"> SELECT aa.index_id, aa.index_name, @@ -72,7 +72,7 @@ ORDER BY aa.order_num ASC </select> - <select id="getListChart" resultMap="dataItemMap"> + <select id="getListChart" resultType="com.zhitan.comprehensivestatistics.domain.DailyComprehensive"> SELECT di.index_id, ci.name AS "index_name", diff --git a/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml b/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml index 01c8c59..f0fe5ef 100644 --- a/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml +++ b/zhitan-system/src/main/resources/mapper/model/ModelNodeMapper.xml @@ -89,9 +89,9 @@ resultType="com.zhitan.model.domain.EnergyIndex"> select ei.index_id as indexId, code, name, index_type as indexType from energy_index ei - left join node_index ni on ei.index_id = ni.index_id + left join node_index ni on ei.index_id = ni.index_id where ni.node_id = #{nodeId} - and ei.index_type = #{indexType} + and ei.index_type = #{indexType} <if test="code != null and code != ''"> and code like concat('%', #{code}, '%') </if> @@ -332,11 +332,12 @@ node_category nodeCategory FROM "model_node" WHERE model_code = #{indexCode} - AND parent_id IS NULL LIMIT 1; + AND parent_id IS NULL + LIMIT 1; </select> <select id="selectIndexByModelCodeAndNodeId" resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor"> - SELECT mn.node_id nodeId, + SELECT mn.node_id nodeId, mn."name", ni.index_id indexId FROM model_node mn @@ -347,15 +348,15 @@ <select id="getSettingDeviceIndex" resultType="com.zhitan.basicdata.domain.MeterImplement"> SELECT distinct - m."id", - m.code, - m.meter_name AS meterName, - m.meter_type meterType, - m.wire_diameter wireDiameter, - m.max_allowable_power maxAllowablePower + m."id", + m.code, + m.meter_name AS meterName, + m.meter_type meterType, + m.wire_diameter wireDiameter, + m.max_allowable_power maxAllowablePower FROM meter_implement m - LEFT JOIN energy_index ei ON ei.meter_id = m."id" - LEFT JOIN node_index ni ON ni.index_id = ei.index_id + LEFT JOIN energy_index ei ON ei.meter_id = m."id" + LEFT JOIN node_index ni ON ni.index_id = ei.index_id WHERE ni.node_id = #{nodeId} <if test="energyType!=null and energyType!=''"> AND M.energy_type = #{energyType} @@ -365,11 +366,12 @@ <delete id="delIndexNodeIdAndIndexType"> delete from node_index - where node_id = #{nodeId} and index_id in ( - select ni.index_id - from node_index ni left join energy_index ei on ni.index_id = ei.index_id - where node_id = #{nodeId} and ei.index_type = #{indexType} - ); + where node_id = #{nodeId} + and index_id in (select ni.index_id + from node_index ni + left join energy_index ei on ni.index_id = ei.index_id + where node_id = #{nodeId} + and ei.index_type = #{indexType}); </delete> <insert id="setIndexAndNodeId"> <foreach collection="indexIds" item="indexId" separator=";"> @@ -379,11 +381,11 @@ </insert> <select id="getModelNodeIndexIdByNodeId" resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor"> - SELECT mn.node_id nodeId, - mn."name" "name", - ni.index_id indexId, - ei.energy_id energyId, - ei.index_type indexType + SELECT mn.node_id nodeId, + mn."name" "name", + ni.index_id indexId, + ei.energy_id energyId, + ei.index_type indexType 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 @@ -400,16 +402,17 @@ 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 - WHERE mn.parent_id = #{parentId} and ei.index_type = 'STATISTIC' + WHERE mn.parent_id = #{parentId} + and ei.index_type = 'STATISTIC' </select> <select id="getFirstModeNodeInfo" resultType="com.zhitan.model.domain.ModelNode"> <include refid="selectModelNodeVo"/> - where model_code = #{modelCode} AND parent_id is null + where model_code = #{modelCode} AND parent_id is null order by order_num </select> <select id="selectIndexByNodeIds" resultType="com.zhitan.model.domain.vo.ModelNodeIndexInfor"> - SELECT mn.node_id nodeId, - mn."name" "name", + SELECT mn.node_id nodeId, + mn."name" "name", ni.index_id indexId, ei.energy_id FROM "model_node" mn @@ -417,15 +420,49 @@ left join energy_index ei on ni.index_id = ei.index_id <where> mn.model_code = #{modelCode} - AND mn.node_id in - <foreach collection="nodeIds" index="index" item="item" open="(" separator="," close=")"> - #{item} - </foreach> - <if test="modelCode!=null and modelCode!='' and nodeIds.size>0"> - and ei.index_type='STATISTIC' - </if> + AND mn.node_id in + <foreach collection="nodeIds" index="index" item="item" open="(" separator="," close=")"> + #{item} + </foreach> + <if test="modelCode!=null and modelCode!='' and nodeIds.size>0"> + and ei.index_type='STATISTIC' + </if> </where> </select> + + <select id="getDataItemByParentNodeId" resultType="com.zhitan.dataitem.domain.vo.NodeIndexValueVO"> + SELECT mn.node_id nodeId, + mn."name" nodeName, + di.index_id indexId, + di."value" value + FROM model_node mn + LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id + LEFT JOIN "energy_index" ei ON ei.index_id = ni.index_id + LEFT JOIN "data_item" di ON ei.index_id = di.index_id + WHERE mn.parent_id = #{parentId} + AND ei.energy_id = #{energyType} + AND ei.index_type = 'STATISTIC' + AND di.time_type = #{timeType.name} + AND di.data_time >= #{dateTimeMap.startTime} + AND di.data_time <= #{dateTimeMap.endTime} + </select> + + <select id="getDataItemByNodeId" resultType="com.zhitan.dataitem.domain.vo.NodeIndexValueVO"> + SELECT mn.node_id nodeId, + mn."name" nodeName, + di.index_id indexId, + di."value" value + FROM "model_node" mn + LEFT JOIN "node_index" ni ON mn.node_id = ni.node_id + LEFT JOIN "energy_index" ei ON ei.index_id = ni.index_id + LEFT JOIN "data_item" di ON ei.index_id = di.index_id + WHERE mn.node_id = #{nodeId} + AND ei.energy_id = #{energyType} + AND ei.index_type = 'STATISTIC' + AND di.time_type = #{timeType.name} + AND di.data_time >= #{dateTimeMap.startTime} + AND di.data_time <= #{dateTimeMap.endTime} + </select> </mapper> diff --git a/zhitan-system/src/main/resources/mapper/model/NodeIndexMapper.xml b/zhitan-system/src/main/resources/mapper/model/NodeIndexMapper.xml new file mode 100644 index 0000000..71e9b64 --- /dev/null +++ b/zhitan-system/src/main/resources/mapper/model/NodeIndexMapper.xml @@ -0,0 +1,10 @@ +<?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.model.mapper.NodeIndexMapper"> + + <resultMap type="com.zhitan.model.domain.NodeIndex" id="NodeIndexMap"> + <result property="nodeId" column="node_id" jdbcType="VARCHAR"/> + <result property="indexId" column="index_id" jdbcType="VARCHAR"/> + </resultMap> +</mapper> + -- Gitblit v1.9.3