From 0bfe10d28c435f30fc9ae48b95a3100e802a696f Mon Sep 17 00:00:00 2001 From: yinq Date: Tue, 19 Aug 2025 15:16:13 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=B7=BB=E5=8A=A0=E5=8E=82=E5=8C=BA?= =?UTF-8?q?=E7=9C=8B=E6=9D=BF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/os/common/constant/EmsConstants.java | 19 ++ .../java/com/os/common/utils/DateUtils.java | 50 ++++- .../mapper/EmsRecordDnbInstantMapper.java | 1 + .../report/controller/EmsBoardController.java | 67 +++++++ .../mapper/EmsReportPointDnbMapper.java | 25 +++ .../ems/report/service/IEmsBoardService.java | 41 ++++ .../service/impl/EmsBoardServiceImpl.java | 188 +++++++++++++++++- .../mapper/ems/report/EmsReportMapper.xml | 7 +- .../ems/report/EmsReportPointDnbMapper.xml | 64 ++++++ 9 files changed, 449 insertions(+), 13 deletions(-) diff --git a/os-common/src/main/java/com/os/common/constant/EmsConstants.java b/os-common/src/main/java/com/os/common/constant/EmsConstants.java index f201e65..b960f26 100644 --- a/os-common/src/main/java/com/os/common/constant/EmsConstants.java +++ b/os-common/src/main/java/com/os/common/constant/EmsConstants.java @@ -33,5 +33,24 @@ public class EmsConstants */ public static final String EMS_ENERGY_TYPE_NITROGEN = "6"; + /** + * 标识:启用 + */ + public static final String EMS_IS_FLAG_YES = "0"; + + /** + * 标识:停用 + */ + public static final String EMS_IS_FLAG_NO = "1"; + + /** + * 是否虚拟(0是 1否) + */ + public static final String EMS_IS_AMMETER_YES = "0"; + + /** + * 是否虚拟(0是 1否) + */ + public static final String EMS_IS_AMMETER_NO = "1"; } diff --git a/os-common/src/main/java/com/os/common/utils/DateUtils.java b/os-common/src/main/java/com/os/common/utils/DateUtils.java index 0b0f6b0..5c01875 100644 --- a/os-common/src/main/java/com/os/common/utils/DateUtils.java +++ b/os-common/src/main/java/com/os/common/utils/DateUtils.java @@ -10,13 +10,12 @@ import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; +import java.util.*; import org.apache.commons.lang3.time.DateFormatUtils; +import static org.hibernate.validator.internal.engine.messageinterpolation.el.RootResolver.FORMATTER; + /** * 时间工具类 * @@ -253,7 +252,50 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils } + /** + * 获取时间范围信息 + * @return 包含各种时间范围的Map + */ + public static Map getDateTimeRanges() { + Map timeMap = new HashMap<>(); + String nowDateTime = LocalDateTime.now() + .withMinute(0) + .withSecond(0) + .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00:00")); + //当前时间 + timeMap.put("currentTime", nowDateTime); + String lastYearDateTime = LocalDateTime.now() + .minusYears(1) // 关键修改:减去1年 + .withMinute(0) + .withSecond(0) + .withNano(0) + .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00:00")); + timeMap.put("lastYearCurrentTime", lastYearDateTime); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime now = LocalDateTime.now(); + + // 当天开始时间 (00:00:00) + LocalDateTime todayStart = now.toLocalDate().atStartOfDay(); + timeMap.put("todayStart", todayStart.format(formatter)); + // 当月开始时间 (当月1日 00:00:00) + LocalDateTime monthStart = now.withDayOfMonth(1).toLocalDate().atStartOfDay(); + timeMap.put("monthStart", monthStart.format(formatter)); + // 当年开始时间 (当年1月1日 00:00:00) + LocalDateTime yearStart = now.withDayOfYear(1).toLocalDate().atStartOfDay(); + timeMap.put("yearStart", yearStart.format(formatter)); + // 去年当天开始时间 + LocalDateTime lastYearTodayStart = todayStart.minusYears(1); + timeMap.put("lastYearTodayStart", lastYearTodayStart.format(formatter)); + // 去年当月开始时间 + LocalDateTime lastYearMonthStart = monthStart.minusYears(1); + timeMap.put("lastYearMonthStart", lastYearMonthStart.format(formatter)); + // 去年当年开始时间 + LocalDateTime lastYearYearStart = yearStart.minusYears(1); + timeMap.put("lastYearYearStart", lastYearYearStart.format(formatter)); + return timeMap; + } diff --git a/os-ems/src/main/java/com/os/ems/record/mapper/EmsRecordDnbInstantMapper.java b/os-ems/src/main/java/com/os/ems/record/mapper/EmsRecordDnbInstantMapper.java index d9aad5b..84c2829 100644 --- a/os-ems/src/main/java/com/os/ems/record/mapper/EmsRecordDnbInstantMapper.java +++ b/os-ems/src/main/java/com/os/ems/record/mapper/EmsRecordDnbInstantMapper.java @@ -1,5 +1,6 @@ package com.os.ems.record.mapper; +import java.util.HashMap; import java.util.List; import java.util.Map; diff --git a/os-ems/src/main/java/com/os/ems/report/controller/EmsBoardController.java b/os-ems/src/main/java/com/os/ems/report/controller/EmsBoardController.java index a8a4437..269318d 100644 --- a/os-ems/src/main/java/com/os/ems/report/controller/EmsBoardController.java +++ b/os-ems/src/main/java/com/os/ems/report/controller/EmsBoardController.java @@ -42,4 +42,71 @@ public class EmsBoardController extends BaseController { return success(list); } + /** + * 厂区看板-设备总览接口 + * @param hashMap + * @return + */ + @GetMapping("/deviceOverview") + public AjaxResult deviceOverview(@RequestParam(required = false) Map hashMap) { + HashMap result = emsBoardService.deviceOverview(hashMap); + return success(result); + } + + /** + * 厂区看板-本月用电排行、用电分项接口 + * @param hashMap + * @return + */ + @GetMapping("/monthConsumptionRanking") + public AjaxResult monthConsumptionRanking(@RequestParam(required = false) Map hashMap) { + HashMap result = emsBoardService.monthConsumptionRanking(hashMap); + return success(result); + } + + /** + * 厂区看板-近七天峰平谷耗量 + * @param hashMap + * @return + */ + @GetMapping("/peaksValleysConsumption") + public AjaxResult peaksValleysConsumption(@RequestParam(required = false) Map hashMap) { + HashMap result = emsBoardService.peaksValleysConsumption(hashMap); + return success(result); + } + + /** + * 厂区看板-五种能耗统计 + * @param hashMap + * @return + */ + @GetMapping("/fiveConsumptionStatistics") + public AjaxResult fiveConsumptionStatistics(@RequestParam(required = false) Map hashMap) { + HashMap result = emsBoardService.fiveConsumptionStatistics(hashMap); + return success(result); + } + + /** + * 厂区看板-能耗统计柱状图 + * @param hashMap + * @return + */ + @GetMapping("/energyConsumptionStatistics") + public AjaxResult energyConsumptionStatistics(@RequestParam(required = false) Map hashMap) { + HashMap result = emsBoardService.energyConsumptionStatistics(hashMap); + return success(result); + } + + /** + * 厂区看板-实时报警 + * @param hashMap + * @return + */ + @GetMapping("/realTimeAlarm") + public AjaxResult realTimeAlarm(@RequestParam(required = false) Map hashMap) { + HashMap result = emsBoardService.realTimeAlarm(hashMap); + return success(result); + } + + } diff --git a/os-ems/src/main/java/com/os/ems/report/mapper/EmsReportPointDnbMapper.java b/os-ems/src/main/java/com/os/ems/report/mapper/EmsReportPointDnbMapper.java index ab357f1..f7a3836 100644 --- a/os-ems/src/main/java/com/os/ems/report/mapper/EmsReportPointDnbMapper.java +++ b/os-ems/src/main/java/com/os/ems/report/mapper/EmsReportPointDnbMapper.java @@ -1,6 +1,9 @@ package com.os.ems.report.mapper; +import java.util.HashMap; import java.util.List; +import java.util.Map; + import com.os.ems.report.domain.EmsReportPointDnb; /** @@ -58,4 +61,26 @@ public interface EmsReportPointDnbMapper * @return 结果 */ public int deleteEmsReportPointDnbByObjIds(Long[] objIds); + + /** + * 统计单元合计耗量 + * @param hashMap + * @return + */ + List> selectWorkUnitTotalConsumption(Map hashMap); + + /** + * 峰平谷耗量日耗量 + * @param hashMap + * @return + */ + List> peaksValleysConsumption(Map hashMap); + + /** + * 统计单元日期耗量 + * @param hashMap + * @return + */ + List> selectWorkUnitDateConsumption(Map hashMap); + } diff --git a/os-ems/src/main/java/com/os/ems/report/service/IEmsBoardService.java b/os-ems/src/main/java/com/os/ems/report/service/IEmsBoardService.java index 057e7bf..831181a 100644 --- a/os-ems/src/main/java/com/os/ems/report/service/IEmsBoardService.java +++ b/os-ems/src/main/java/com/os/ems/report/service/IEmsBoardService.java @@ -5,6 +5,7 @@ import com.os.ems.report.domain.EnergyStatisticalReport; import com.os.ems.report.domain.PeaksValleysConsumptionReport; import com.os.ems.report.domain.RealTimeDataBo; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -23,5 +24,45 @@ public interface IEmsBoardService { */ List realTimeDataList(Map hashMap); + /** + * 厂区看板-设备总览接口 + * @param hashMap + * @return + */ + HashMap deviceOverview(Map hashMap); + /** + * 厂区看板-本月用电排行、用电分项接口 + * @param hashMap + * @return + */ + HashMap monthConsumptionRanking(Map hashMap); + + /** + * 厂区看板-近七天峰平谷耗量 + * @param hashMap + * @return + */ + HashMap peaksValleysConsumption(Map hashMap); + + /** + * 厂区看板-五种能耗统计 + * @param hashMap + * @return + */ + HashMap fiveConsumptionStatistics(Map hashMap); + + /** + * 厂区看板-能耗统计柱状图 + * @param hashMap + * @return + */ + HashMap energyConsumptionStatistics(Map hashMap); + + /** + * 厂区看板-实时报警 + * @param hashMap + * @return + */ + HashMap realTimeAlarm(Map hashMap); } diff --git a/os-ems/src/main/java/com/os/ems/report/service/impl/EmsBoardServiceImpl.java b/os-ems/src/main/java/com/os/ems/report/service/impl/EmsBoardServiceImpl.java index 1ef8f9c..51d02aa 100644 --- a/os-ems/src/main/java/com/os/ems/report/service/impl/EmsBoardServiceImpl.java +++ b/os-ems/src/main/java/com/os/ems/report/service/impl/EmsBoardServiceImpl.java @@ -1,14 +1,21 @@ package com.os.ems.report.service.impl; import com.os.common.constant.EmsConstants; +import com.os.common.utils.DateUtils; +import com.os.ems.base.domain.EmsBaseCollectDeviceInfo; +import com.os.ems.base.domain.EmsBaseMonitorInfo; import com.os.ems.base.domain.EmsBaseWorkUnit; +import com.os.ems.base.mapper.EmsBaseCollectDeviceInfoMapper; +import com.os.ems.base.mapper.EmsBaseMonitorInfoMapper; import com.os.ems.base.mapper.EmsBaseMonitorWorkUnitMapper; import com.os.ems.base.mapper.EmsBaseWorkUnitMapper; +import com.os.ems.record.domain.EmsRecordAlarmData; import com.os.ems.record.mapper.*; import com.os.ems.report.domain.EnergyStatisticalReport; import com.os.ems.report.domain.PeaksValleysConsumptionReport; import com.os.ems.report.domain.RealTimeDataBo; import com.os.ems.report.mapper.EmsReportMapper; +import com.os.ems.report.mapper.EmsReportPointDnbMapper; import com.os.ems.report.service.IEmsBoardService; import com.os.ems.report.service.IEmsReportService; import org.springframework.beans.factory.annotation.Autowired; @@ -48,9 +55,20 @@ public class EmsBoardServiceImpl implements IEmsBoardService { @Autowired private EmsBaseMonitorWorkUnitMapper emsBaseMonitorWorkUnitMapper; + @Autowired + private EmsReportPointDnbMapper emsReportPointDnbMapper; + @Autowired private EmsBaseWorkUnitMapper emsBaseWorkUnitMapper; + @Autowired + private EmsBaseCollectDeviceInfoMapper emsBaseCollectDeviceInfoMapper; + + @Autowired + private EmsBaseMonitorInfoMapper emsBaseMonitorInfoMapper; + + @Autowired + private EmsRecordAlarmDataMapper emsRecordAlarmDataMapper; /** * 实时数据接口 @@ -63,21 +81,179 @@ public class EmsBoardServiceImpl implements IEmsBoardService { if (!hashMap.containsKey("monitorType")) { return null; } - String energyType = String.valueOf(hashMap.get("monitorType")); + String monitorType = String.valueOf(hashMap.get("monitorType")); List reportList = new ArrayList<>(); - if (Objects.equals(energyType, EmsConstants.EMS_ENERGY_TYPE_DNB)) { + if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_DNB)) { reportList = emsRecordDnbInstantMapper.realTimeDataList(hashMap); - } else if (Objects.equals(energyType, EmsConstants.EMS_ENERGY_TYPE_WATER)) { + } else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_WATER)) { reportList = emsRecordWaterInstantMapper.realTimeDataList(hashMap); - } else if (Objects.equals(energyType, EmsConstants.EMS_ENERGY_TYPE_STEAM)) { + } else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_STEAM)) { reportList = emsRecordSteamInstantMapper.realTimeDataList(hashMap); - } else if (Objects.equals(energyType, EmsConstants.EMS_ENERGY_TYPE_Air)) { + } else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_Air)) { reportList = emsRecordAirInstantMapper.realTimeDataList(hashMap); - } else if (Objects.equals(energyType, EmsConstants.EMS_ENERGY_TYPE_NITROGEN)) { + } else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_NITROGEN)) { reportList = emsRecordNitrogenInstantMapper.realTimeDataList(hashMap); } return reportList; } + /** + * 厂区看板-设备总览接口 + * @param hashMap + * @return + */ + @Override + public HashMap deviceOverview(Map hashMap) { + HashMap result = new HashMap<>(); + EmsBaseCollectDeviceInfo deviceInfo = new EmsBaseCollectDeviceInfo(); + deviceInfo.setIsFlag(EmsConstants.EMS_IS_FLAG_YES); + List deviceInfoList = emsBaseCollectDeviceInfoMapper.selectEmsBaseCollectDeviceInfoList(deviceInfo); + EmsBaseMonitorInfo monitorInfo = new EmsBaseMonitorInfo(); + monitorInfo.setIsAmmeter(EmsConstants.EMS_IS_AMMETER_NO); + List monitorInfoList = emsBaseMonitorInfoMapper.selectEmsBaseMonitorInfoList(monitorInfo); + Long dnbSum = 0L; + Long waterSum = 0L; + Long steamSum = 0L; + Long airSum = 0L; + Long nitrogenSum = 0L; + for (EmsBaseMonitorInfo emsBaseMonitorInfo : monitorInfoList) { + String monitorType = String.valueOf(emsBaseMonitorInfo.getMonitorType()); + if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_DNB)) { + dnbSum++; + } else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_WATER)) { + waterSum++; + } else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_STEAM)) { + steamSum++; + } else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_Air)) { + airSum++; + } else if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_NITROGEN)) { + nitrogenSum++; + } + } + result.put("deviceSum", deviceInfoList.size()); + result.put("dnbSum", dnbSum); + result.put("waterSum", waterSum); + result.put("steamSum", steamSum); + result.put("airSum", airSum); + result.put("nitrogenSum", nitrogenSum); + return result; + } + + /** + * 厂区看板-本月用电排行、用电分项接口 + * @param hashMap + * @return + */ + @Override + public HashMap monthConsumptionRanking(Map hashMap) { + HashMap result = new HashMap<>(); + if (!hashMap.containsKey("monitorType")) { + return null; + } + String monitorType = String.valueOf(hashMap.get("monitorType")); + List> reportList = new ArrayList<>(); + Map dateTimeRanges = DateUtils.getDateTimeRanges(); + String monthStart = dateTimeRanges.get("monthStart"); + String monthEnd = dateTimeRanges.get("currentTime"); + hashMap.put("beginCollectTime", monthStart); + hashMap.put("endCollectTime", monthEnd); + if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_DNB)) { + reportList = emsReportPointDnbMapper.selectWorkUnitTotalConsumption(hashMap); + } + result.put("ranking", reportList); + result.put("statistics", reportList); + return result; + } + + /** + * 厂区看板-近七天峰平谷耗量 + * @param hashMap + * @return + */ + @Override + public HashMap peaksValleysConsumption(Map hashMap) { + HashMap result = new HashMap<>(); + List> reportList = emsReportPointDnbMapper.peaksValleysConsumption(hashMap); + result.put("reportList", reportList); + return result; + } + + /** + * 厂区看板-五种能耗统计 + * @param hashMap + * @return + */ + @Override + public HashMap fiveConsumptionStatistics(Map hashMap) { + HashMap result = new LinkedHashMap<>(); + result.put("dnbSum", new BigDecimal(String.format("%.2f", Math.random() * Math.round(10000 * Math.random())))); + result.put("waterSum", new BigDecimal(String.format("%.2f", Math.random() * Math.round(10000 * Math.random())))); + result.put("steamSum", new BigDecimal(String.format("%.2f", Math.random() * Math.round(10000 * Math.random())))); + result.put("airSum", new BigDecimal(String.format("%.2f", Math.random() * Math.round(10000 * Math.random())))); + result.put("nitrogenSum", new BigDecimal(String.format("%.2f", Math.random() * Math.round(10000 * Math.random())))); + result.put("dnbRate", new BigDecimal(String.format("%.2f", 100 * Math.random()))); + result.put("waterRate", new BigDecimal(String.format("%.2f", 100 * Math.random()))); + result.put("steamRate", new BigDecimal(String.format("%.2f", -100 * Math.random()))); + result.put("airRate", new BigDecimal(String.format("%.2f", 100 * Math.random()))); + result.put("nitrogenRate", new BigDecimal(String.format("%.2f", -100 * Math.random()))); + return result; + } + + /** + * 厂区看板-能耗统计柱状图 + * @param hashMap + * @return + */ + @Override + public HashMap energyConsumptionStatistics(Map hashMap) { + HashMap result = new HashMap<>(); + if (!hashMap.containsKey("monitorType") || !hashMap.containsKey("dateType")) { + return null; + } + String monitorType = String.valueOf(hashMap.get("monitorType")); + String dateType = String.valueOf(hashMap.get("dateType")); + List> reportList = new ArrayList<>(); + Map dateTimeRanges = DateUtils.getDateTimeRanges(); + String currentTime = dateTimeRanges.get("currentTime"); + String todayStart = dateTimeRanges.get("todayStart"); + String monthStart = dateTimeRanges.get("monthStart"); + String yearStart = dateTimeRanges.get("yearStart"); + + if (dateType.equals("day")){ + hashMap.put("beginCollectTime", todayStart); + hashMap.put("endCollectTime", currentTime); + hashMap.put("timeSub", 19); + } else if (dateType.equals("month")){ + hashMap.put("beginCollectTime", monthStart); + hashMap.put("endCollectTime", currentTime); + hashMap.put("timeSub", 10); + } else if (dateType.equals("year")){ + hashMap.put("beginCollectTime", yearStart); + hashMap.put("endCollectTime", currentTime); + hashMap.put("timeSub", 7); + } + if (Objects.equals(monitorType, EmsConstants.EMS_ENERGY_TYPE_DNB)) { + reportList = emsReportPointDnbMapper.selectWorkUnitDateConsumption(hashMap); + } + result.put("reportList", reportList); + return result; + } + + /** + * 厂区看板-实时报警 + * @param hashMap + * @return + */ + @Override + public HashMap realTimeAlarm(Map hashMap) { + HashMap result = new HashMap<>(); + EmsRecordAlarmData emsRecordAlarmData = new EmsRecordAlarmData(); + emsRecordAlarmData.setAlarmStatus(0L); + List alarmDataList = emsRecordAlarmDataMapper.selectEmsRecordAlarmDataList(emsRecordAlarmData); + result.put("alarmDataList", alarmDataList); + return result; + } + + } diff --git a/os-ems/src/main/resources/mapper/ems/report/EmsReportMapper.xml b/os-ems/src/main/resources/mapper/ems/report/EmsReportMapper.xml index 73d7f97..064fb57 100644 --- a/os-ems/src/main/resources/mapper/ems/report/EmsReportMapper.xml +++ b/os-ems/src/main/resources/mapper/ems/report/EmsReportMapper.xml @@ -11,7 +11,7 @@ SELECT WU.WORK_UNIT_CODE workUnitCode, WU.WORK_UNIT_NAME workUnitName, MAX(RPD.INSTRUMENT_VALUE) instrumentValue, - SUM(RPD.EXPEND) expend, + SUM(RPD.EXPEND * IIF(MWU.formula_mode = 0, 1, 0) * MWU.proportion) expend, SUM(RPD.power_expend) powerExpend, SUBSTRING(FORMAT(RPD.BEGIN_TIME, 'yyyy-MM-dd HH:mm:ss'), 1, DT.TIMESUB) beginTime, SUBSTRING(FORMAT(RPD.BEGIN_TIME, 'yyyy-MM-dd HH:mm:ss'), 1, DT.TIMESUB) endTime @@ -37,8 +37,9 @@ + SELECT WU.WORK_UNIT_CODE workUnitCode, + WU.WORK_UNIT_NAME workUnitName, + ISNULL(ex.expend, 0) expend + FROM ems_base_work_unit wu + LEFT JOIN + (SELECT mwu.work_unit_code, SUM(rpd.expend * (IIF(mwu.formula_mode = 0, 1, 0)) * mwu.proportion) expend + FROM ems_base_monitor_work_unit mwu + LEFT JOIN ems_report_point_dnb rpd on rpd.monitor_code = mwu.monitor_code + WHERE 1=1 + + AND FORMAT(rpd.begin_time, 'yyyy-MM-dd HH:mm:ss') between #{beginCollectTime} and #{endCollectTime} + + group by mwu.work_unit_code) ex ON ex.work_unit_code = wu.work_unit_code + ORDER BY ex.expend DESC + + + + + + \ No newline at end of file