From 1b4ce0b84d0a06238e4b1c6e9d242e0d1a943db2 Mon Sep 17 00:00:00 2001 From: mh Date: Fri, 7 Mar 2025 17:41:31 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=B8=AD=E5=A4=AE=E7=A9=BA=E8=B0=83?= =?UTF-8?q?=E8=83=BD=E8=80=97=E7=AE=A1=E7=90=86=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=BF=AE=E6=94=B9=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/梅州豪生控制点表xls.xls | Bin 0 -> 109056 bytes .../core/domain/vo/EnergyConsumptionVO.java | 30 ++- .../common/core/domain/vo/EnergyQueryVO.java | 13 ++ .../mapper/energy/EnergyAnalyzeMapper.java | 30 ++- .../mh/system/mapper/energy/EnergyMapper.java | 36 +++- .../mapper/energy/EnergyQueryMapper.java | 171 ++++++++++-------- .../device/impl/DeviceLedgerServiceImpl.java | 2 +- .../energy/impl/EnergyAnalyzeServiceImpl.java | 30 ++- .../energy/impl/EnergyQueryServiceImpl.java | 6 +- .../energy/impl/EnergyServiceImpl.java | 41 +++-- .../resources/mapper/system/EnergyMapper.xml | 142 +++++++++++---- 11 files changed, 349 insertions(+), 152 deletions(-) create mode 100644 doc/梅州豪生控制点表xls.xls diff --git a/doc/梅州豪生控制点表xls.xls b/doc/梅州豪生控制点表xls.xls new file mode 100644 index 0000000000000000000000000000000000000000..cd43ffdd9fef1e378ea932a7f7ecba482d1a47b7 GIT binary patch literal 109056 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%0APgEMv8-Z^t?)ApU80(Ne3p3`>Ct*jk; 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 literal 0 HcmV?d00001 diff --git a/mh-common/src/main/java/com/mh/common/core/domain/vo/EnergyConsumptionVO.java b/mh-common/src/main/java/com/mh/common/core/domain/vo/EnergyConsumptionVO.java index 352a21f..24812be 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/vo/EnergyConsumptionVO.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/vo/EnergyConsumptionVO.java @@ -1,5 +1,7 @@ package com.mh.common.core.domain.vo; +import org.apache.commons.lang3.builder.ToStringBuilder; + import java.io.Serializable; /** @@ -38,6 +40,19 @@ public class EnergyConsumptionVO implements Serializable { */ private String paramType; + /** + * 系统类型 + */ + private String systemType; + + public String getSystemType() { + return systemType; + } + + public void setSystemType(String systemType) { + this.systemType = systemType; + } + public String getTimeType() { return timeType; } @@ -80,13 +95,14 @@ public class EnergyConsumptionVO implements Serializable { @Override public String toString() { - return "EnergyConsumptionVO{" + - "timeType='" + timeType + '\'' + - ", startTime='" + startTime + '\'' + - ", endTime='" + endTime + '\'' + - ", deviceType='" + deviceType + '\'' + - ", paramType='" + paramType + '\'' + - '}'; + return new ToStringBuilder(this) + .append("timeType", timeType) + .append("startTime", startTime) + .append("endTime", endTime) + .append("deviceType", deviceType) + .append("paramType", paramType) + .append("systemType", systemType) + .toString(); } } diff --git a/mh-common/src/main/java/com/mh/common/core/domain/vo/EnergyQueryVO.java b/mh-common/src/main/java/com/mh/common/core/domain/vo/EnergyQueryVO.java index 8ccbca7..804ea8d 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/vo/EnergyQueryVO.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/vo/EnergyQueryVO.java @@ -49,6 +49,19 @@ public class EnergyQueryVO extends BaseEntity implements Serializable { private int pageSize; + /** + * 系统类型 + */ + private String systemType; + + public String getSystemType() { + return systemType; + } + + public void setSystemType(String systemType) { + this.systemType = systemType; + } + public int getPageNum() { return pageNum; } diff --git a/mh-system/src/main/java/com/mh/system/mapper/energy/EnergyAnalyzeMapper.java b/mh-system/src/main/java/com/mh/system/mapper/energy/EnergyAnalyzeMapper.java index e3a83e0..ff22ea8 100644 --- a/mh-system/src/main/java/com/mh/system/mapper/energy/EnergyAnalyzeMapper.java +++ b/mh-system/src/main/java/com/mh/system/mapper/energy/EnergyAnalyzeMapper.java @@ -49,6 +49,9 @@ public interface EnergyAnalyzeMapper { "" + " and dl.device_type = #{paramType}" + "" + + "" + + " and cpm.system_type = #{systemType}" + + "" + "union all " + "select " + " dm.calc_value, " + @@ -73,13 +76,17 @@ public interface EnergyAnalyzeMapper { "" + " and dl.device_type = #{paramType}" + "" + + "" + + " and cpm.system_type = #{systemType}" + + "" + "") List queryManyTable(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("lastTableName") String lastTableName, @Param("curTableName") String curTableName, @Param("len") String dateLen, - @Param("paramType") String paramType); + @Param("paramType") String paramType, + @Param("systemType") String systemType); /** * 单表查询操作 @@ -113,13 +120,17 @@ public interface EnergyAnalyzeMapper { "" + " and dl.device_type = #{paramType}" + "" + + "" + + " and cpm.system_type = #{systemType}" + + "" + "") List queryOneTable(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("lastTableName") String lastTableName, @Param("curTableName") String curTableName, @Param("len") String dateLen, - @Param("paramType") String paramType); + @Param("paramType") String paramType, + @Param("systemType") String systemType); @Select("") List queryManyTable(@Param("startTime") String startTime, @Param("endTime") String endTime, @@ -107,7 +129,8 @@ public interface EnergyQueryMapper { @Param("len") String dateLen, @Param("paramType") String paramType, @Param("haveMeter") boolean haveMeter, - @Param("haveCloud") boolean haveCloud); + @Param("haveCloud") boolean haveCloud, + @Param("systemType") String systemType); /** * 单表查询操作 @@ -149,6 +172,9 @@ public interface EnergyQueryMapper { "on " + " cpm.device_ledger_id = dl.id " + " and dl.device_type in ('5', '6') " + + " " + + " and cpm.system_type = #{systemType} " + + "" + ") " + "group by " + " device_type, " + @@ -172,6 +198,7 @@ public interface EnergyQueryMapper { @Param("len") String dateLen, @Param("paramType") String paramType, @Param("haveMeter") boolean haveMeter, - @Param("haveCloud") boolean haveCloud); + @Param("haveCloud") boolean haveCloud, + @Param("systemType") String systemType); } diff --git a/mh-system/src/main/java/com/mh/system/service/device/impl/DeviceLedgerServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/device/impl/DeviceLedgerServiceImpl.java index ae90a05..27d2454 100644 --- a/mh-system/src/main/java/com/mh/system/service/device/impl/DeviceLedgerServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/device/impl/DeviceLedgerServiceImpl.java @@ -41,7 +41,7 @@ public class DeviceLedgerServiceImpl implements IDeviceLedgerService { } // 设备类型 if (!StringUtils.isEmpty(ledgerInfo.getDeviceType())) { - queryWrapper.like("device_type", ledgerInfo.getDeviceType()); + queryWrapper.eq("device_type", ledgerInfo.getDeviceType()); } // 出入库时间范围 if (ledgerInfo.getParams() != null && !ledgerInfo.getParams().isEmpty()) { diff --git a/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyAnalyzeServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyAnalyzeServiceImpl.java index ba9fbc2..7ff6f38 100644 --- a/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyAnalyzeServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyAnalyzeServiceImpl.java @@ -47,16 +47,34 @@ public class EnergyAnalyzeServiceImpl implements EnergyAnalyzeService { // 表格数据 if ("month".equalsIgnoreCase(timeType) || "year".equalsIgnoreCase(timeType)) { // 单表 - deviceTypeEnergyEntities = energyAnalyzeMapper.queryOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), Constants.METER_TYPE); + deviceTypeEnergyEntities = energyAnalyzeMapper.queryOneTable(vo.getStartTime(), + vo.getEndTime(), + lastTableName.get(), + curTableName.get(), + DateUtils.getTimeLen(vo.getTimeType()), + Constants.METER_TYPE, + vo.getSystemType()); } else { lastTableName.set(lastTableName + vo.getStartTime().substring(0, 4)); curTableName.set(curTableName + vo.getEndTime().substring(0, 4)); if (lastTableName.get().equalsIgnoreCase(curTableName.get())) { // 单表 - deviceTypeEnergyEntities = energyAnalyzeMapper.queryOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), Constants.METER_TYPE); + deviceTypeEnergyEntities = energyAnalyzeMapper.queryOneTable(vo.getStartTime(), + vo.getEndTime(), + lastTableName.get(), + curTableName.get(), + DateUtils.getTimeLen(vo.getTimeType()), + Constants.METER_TYPE, + vo.getSystemType()); } else { // 多表 - deviceTypeEnergyEntities = energyAnalyzeMapper.queryManyTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), Constants.METER_TYPE); + deviceTypeEnergyEntities = energyAnalyzeMapper.queryManyTable(vo.getStartTime(), + vo.getEndTime(), + lastTableName.get(), + curTableName.get(), + DateUtils.getTimeLen(vo.getTimeType()), + Constants.METER_TYPE, + vo.getSystemType()); } } if (null == deviceTypeEnergyEntities || deviceTypeEnergyEntities.size() == 0) { @@ -159,16 +177,16 @@ public class EnergyAnalyzeServiceImpl implements EnergyAnalyzeService { // 表格数据 if ("month".equalsIgnoreCase(timeType) || "year".equalsIgnoreCase(timeType)) { // 单表 - deviceTypeEnergyEntities = energyAnalyzeMapper.queryDeviceOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), params); + deviceTypeEnergyEntities = energyAnalyzeMapper.queryDeviceOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), params, vo.getSystemType()); } else { lastTableName.set(lastTableName + vo.getStartTime().substring(0, 4)); curTableName.set(curTableName + vo.getEndTime().substring(0, 4)); if (lastTableName.get().equalsIgnoreCase(curTableName.get())) { // 单表 - deviceTypeEnergyEntities = energyAnalyzeMapper.queryDeviceOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), params); + deviceTypeEnergyEntities = energyAnalyzeMapper.queryDeviceOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), params, vo.getSystemType()); } else { // 多表 - deviceTypeEnergyEntities = energyAnalyzeMapper.queryDeviceManyTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), params); + deviceTypeEnergyEntities = energyAnalyzeMapper.queryDeviceManyTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), params, vo.getSystemType()); } } if (null == deviceTypeEnergyEntities || deviceTypeEnergyEntities.isEmpty()) { diff --git a/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyQueryServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyQueryServiceImpl.java index 4d202b5..e4e5a5e 100644 --- a/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyQueryServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyQueryServiceImpl.java @@ -46,16 +46,16 @@ public class EnergyQueryServiceImpl implements IEnergyQueryService { // 表格数据 if ("month".equalsIgnoreCase(timeType) || "year".equalsIgnoreCase(timeType)) { // 单表 - consumptionAnalyzeEntities = energyQueryMapper.queryOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), null, haveMeter, haveCloud); + consumptionAnalyzeEntities = energyQueryMapper.queryOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), null, haveMeter, haveCloud, vo.getSystemType()); } else { lastTableName.set(lastTableName + vo.getStartTime().substring(0, 4)); curTableName.set(curTableName + vo.getEndTime().substring(0, 4)); if (lastTableName.get().equalsIgnoreCase(curTableName.get())) { // 单表 - consumptionAnalyzeEntities = energyQueryMapper.queryOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), null, haveMeter, haveCloud); + consumptionAnalyzeEntities = energyQueryMapper.queryOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), null, haveMeter, haveCloud, vo.getSystemType()); } else { // 多表 - consumptionAnalyzeEntities = energyQueryMapper.queryManyTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), null, haveMeter, haveCloud); + consumptionAnalyzeEntities = energyQueryMapper.queryManyTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), DateUtils.getTimeLen(vo.getTimeType()), null, haveMeter, haveCloud, vo.getSystemType()); } } if (null == consumptionAnalyzeEntities || consumptionAnalyzeEntities.size() == 0) { diff --git a/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyServiceImpl.java index 8c8ad14..9dd6b75 100644 --- a/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/energy/impl/EnergyServiceImpl.java @@ -54,7 +54,7 @@ public class EnergyServiceImpl implements IEnergyService { // 多表 lastTableName.set(lastTableName + vo.getStartTime().substring(0, 4)); curTableName.set(curTableName + vo.getEndTime().substring(0, 4)); - consumptionAnalyzeEntities = energyMapper.queryDeviceManyTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), getTimeLen(vo.getTimeType()), vo.getDeviceType()); + consumptionAnalyzeEntities = energyMapper.queryDeviceManyTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), getTimeLen(vo.getTimeType()), vo.getDeviceType(), vo.getSystemType()); } if (null == consumptionAnalyzeEntities || consumptionAnalyzeEntities.size() == 0) { latch.countDown(); @@ -78,7 +78,7 @@ public class EnergyServiceImpl implements IEnergyService { // 多表 String lastTable = "data_min" + vo.getStartTime().substring(0,4); String curTable = "data_min" + vo.getEndTime().substring(0,4); - List consumptionAnalyzeEntities = energyMapper.queryDeviceLineManyTable(vo.getStartTime(), vo.getEndTime(), lastTable, curTable, vo.getDeviceType()); + List consumptionAnalyzeEntities = energyMapper.queryDeviceLineManyTable(vo.getStartTime(), vo.getEndTime(), lastTable, curTable, vo.getDeviceType(), vo.getSystemType()); if (null == consumptionAnalyzeEntities || consumptionAnalyzeEntities.size() == 0) { latch.countDown(); return null; @@ -147,16 +147,16 @@ public class EnergyServiceImpl implements IEnergyService { // 表格数据 if ("month".equalsIgnoreCase(timeType) || "year".equalsIgnoreCase(timeType)) { // 单表 - consumptionAnalyzeEntities = energyMapper.queryOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), getTimeLen(vo.getTimeType()), null); + consumptionAnalyzeEntities = energyMapper.queryOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), getTimeLen(vo.getTimeType()), null, vo.getSystemType()); } else { lastTableName.set(lastTableName + vo.getStartTime().substring(0, 4)); curTableName.set(curTableName + vo.getEndTime().substring(0, 4)); if (lastTableName.get().equalsIgnoreCase(curTableName.get())) { // 单表 - consumptionAnalyzeEntities = energyMapper.queryOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), getTimeLen(vo.getTimeType()), null); + consumptionAnalyzeEntities = energyMapper.queryOneTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), getTimeLen(vo.getTimeType()), null, vo.getSystemType()); } else { // 多表 - consumptionAnalyzeEntities = energyMapper.queryManyTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), getTimeLen(vo.getTimeType()), null); + consumptionAnalyzeEntities = energyMapper.queryManyTable(vo.getStartTime(), vo.getEndTime(), lastTableName.get(), curTableName.get(), getTimeLen(vo.getTimeType()), null, vo.getSystemType()); } } if (null == consumptionAnalyzeEntities || consumptionAnalyzeEntities.isEmpty()) { @@ -349,6 +349,11 @@ public class EnergyServiceImpl implements IEnergyService { String startTime = vo.getStartTime(); String endTime = vo.getEndTime(); String deviceType = vo.getParamType(); + if ("meter".equals(deviceType)) { + deviceType = "5"; + } else if ("cold".equals(deviceType)){ + deviceType = "6"; + } if ("cop".equalsIgnoreCase(vo.getParamType())) { return calcCopYoyData(vo); // lastTableName = "data_min_cop"; @@ -367,7 +372,7 @@ public class EnergyServiceImpl implements IEnergyService { String yoyLastTableName = lastTableName.substring(0, lastTableName.length() - 4) + startTime.substring(0,4); String yoyCurTableName = curTableName.substring(0, lastTableName.length() - 4) + endTime.substring(0,4); consumptionAnalyzeEntities = energyMapper.queryManyTableYoy(vo.getStartTime(), vo.getEndTime(), lastTableName, curTableName, - startTime, endTime, yoyLastTableName, yoyCurTableName, getTimeLen(vo.getTimeType()), deviceType, vo.getTimeType()); + startTime, endTime, yoyLastTableName, yoyCurTableName, getTimeLen(vo.getTimeType()), deviceType, vo.getTimeType(), vo.getSystemType()); } else { // 单表 startTime = DateUtils.yoyDate(startTime); @@ -384,21 +389,21 @@ public class EnergyServiceImpl implements IEnergyService { deviceType = "system"; } consumptionAnalyzeEntities = energyMapper.queryOneTableYoy(vo.getStartTime(), vo.getEndTime(), lastTableName, curTableName, - startTime, endTime, getTimeLen(vo.getTimeType()), deviceType, vo.getTimeType()); + startTime, endTime, getTimeLen(vo.getTimeType()), deviceType, vo.getTimeType(), vo.getSystemType()); } return getConsumptionDTOHttpResult(consumptionAnalyzeEntities, "yoy"); } private AjaxResult calcCopYoyData(EnergyConsumptionVO vo) { // 获取冷量读数 - vo.setParamType("cloud"); + vo.setParamType("6"); AjaxResult cloudData = yoy(vo); EnergyConsumptionDTO cloudEnergyData = (EnergyConsumptionDTO) cloudData.get("data"); if (cloudEnergyData == null) { return AjaxResult.error(); } // 获取电量读数 - vo.setParamType("meter"); + vo.setParamType("5"); AjaxResult meterData = yoy(vo); EnergyConsumptionDTO meterEnergyData = (EnergyConsumptionDTO) meterData.get("data");; if (meterEnergyData == null) { @@ -536,6 +541,11 @@ public class EnergyServiceImpl implements IEnergyService { String startTime = DateUtils.momDate(vo.getStartTime(), vo.getTimeType(), "start"); String endTime = DateUtils.momDate(vo.getEndTime(), vo.getTimeType(), "end"); String deviceType = vo.getParamType(); + if ("meter".equals(deviceType)) { + deviceType = "5"; + } else if ("cold".equals(deviceType)){ + deviceType = "6"; + } // 判断查询时间类型是month,year if ("month".equalsIgnoreCase(vo.getTimeType()) || "year".equalsIgnoreCase(vo.getTimeType())) { String tableName = "data_"+vo.getTimeType(); @@ -545,7 +555,7 @@ public class EnergyServiceImpl implements IEnergyService { // deviceType = "system"; return calcCopMomData(vo); } - consumptionAnalyzeEntities = energyMapper.queryMonthAndYearMom(vo.getStartTime(), vo.getEndTime(), startTime, endTime, tableName, getTimeLen(vo.getTimeType()), deviceType, vo.getTimeType()); + consumptionAnalyzeEntities = energyMapper.queryMonthAndYearMom(vo.getStartTime(), vo.getEndTime(), startTime, endTime, tableName, getTimeLen(vo.getTimeType()), deviceType, vo.getTimeType(), vo.getSystemType()); } else { // 判斷是否需要進行連表查詢 String tableName1 = "data_"+vo.getTimeType()+startTime.substring(0, 4); @@ -559,10 +569,10 @@ public class EnergyServiceImpl implements IEnergyService { } if (tableName1.equalsIgnoreCase(tableName2)) { // 单表查询 - consumptionAnalyzeEntities = energyMapper.queryOneTableMom(vo.getStartTime(), vo.getEndTime(), startTime, endTime, tableName1, getTimeLen(vo.getTimeType()), deviceType, vo.getTimeType()); + consumptionAnalyzeEntities = energyMapper.queryOneTableMom(vo.getStartTime(), vo.getEndTime(), startTime, endTime, tableName1, getTimeLen(vo.getTimeType()), deviceType, vo.getTimeType(), vo.getSystemType()); } else { // 多表查询 - consumptionAnalyzeEntities = energyMapper.queryManyTableMom(vo.getStartTime(), vo.getEndTime(), startTime, endTime, tableName1, tableName2, getTimeLen(vo.getTimeType()), deviceType, vo.getTimeType()); + consumptionAnalyzeEntities = energyMapper.queryManyTableMom(vo.getStartTime(), vo.getEndTime(), startTime, endTime, tableName1, tableName2, getTimeLen(vo.getTimeType()), deviceType, vo.getTimeType(), vo.getSystemType()); } } return getConsumptionDTOHttpResult(consumptionAnalyzeEntities, "mom"); @@ -628,9 +638,12 @@ public class EnergyServiceImpl implements IEnergyService { AjaxResult yoy = (AjaxResult) allData.get("yoy"); AjaxResult mom = (AjaxResult) allData.get("mom"); if (yoy.isSuccess() && mom.isSuccess()) { + EnergyConsumptionDTO result = new EnergyConsumptionDTO(); EnergyConsumptionDTO yoyData = (EnergyConsumptionDTO) yoy.get("data"); EnergyConsumptionDTO momData = (EnergyConsumptionDTO) mom.get("data"); - EnergyConsumptionDTO result = new EnergyConsumptionDTO(); + if (yoyData.getData()==null || momData.getData()==null) { + return AjaxResult.success(result); + } result.setTitles(new String[]{"curValue", "lastValue", "yoy", "mom"}); result.setTimes(yoyData.getTimes()); result.setLineTimes(yoyData.getLineTimes()); @@ -671,7 +684,7 @@ public class EnergyServiceImpl implements IEnergyService { private static AjaxResult getConsumptionDTOHttpResult(List consumptionAnalyzeEntities, String compareType) { EnergyConsumptionDTO energyConsumptionDTO = new EnergyConsumptionDTO(); if (null == consumptionAnalyzeEntities || consumptionAnalyzeEntities.size() == 0) { - return AjaxResult.success(); + return AjaxResult.success(energyConsumptionDTO); } String[] lastValue = new String[consumptionAnalyzeEntities.size()]; String[] curValue = new String[consumptionAnalyzeEntities.size()]; diff --git a/mh-system/src/main/resources/mapper/system/EnergyMapper.xml b/mh-system/src/main/resources/mapper/system/EnergyMapper.xml index 6b5eca9..f5a5a4e 100644 --- a/mh-system/src/main/resources/mapper/system/EnergyMapper.xml +++ b/mh-system/src/main/resources/mapper/system/EnergyMapper.xml @@ -4,13 +4,13 @@ - ,month(cur_time) + ,EXTRACT(MONTH FROM cur_time) - ,month(cur_time),day(cur_time) + ,EXTRACT(MONTH FROM cur_time),EXTRACT(DAY FROM cur_time) - ,month(cur_time),day(cur_time),datepart(hour, cur_time) + ,EXTRACT(MONTH FROM cur_time),EXTRACT(DAY FROM cur_time),EXTRACT(HOUR FROM cur_time) @@ -87,7 +87,8 @@ EXTRACT(YEAR FROM cur_time) AS yearStr FROM ${lastTableName} dh - WHERE cur_time >= #{yoyStartTime} AND cur_time <= #{yoyEndTime} + WHERE cur_time >= #{yoyStartTime}::timestamp + AND cur_time <= #{yoyEndTime}::timestamp AND calc_value IS NOT NULL and dh.device_num in ( @@ -100,6 +101,9 @@ and dl.device_type = #{paramType} + + and cpm.system_type = #{systemType} + and cpm.grade = 40 ) GROUP BY device_type, TO_CHAR(cur_time, 'YYYY-MM-DD HH24:MI:SS'), EXTRACT(YEAR FROM cur_time) @@ -119,7 +123,8 @@ EXTRACT(YEAR FROM cur_time) AS yearStr FROM ${curTableName} dh - WHERE cur_time >= #{startTime} AND cur_time <= #{endTime} + WHERE cur_time >= #{startTime}::timestamp + AND cur_time <= #{endTime}::timestamp AND calc_value IS NOT NULL and dh.device_num in ( @@ -132,6 +137,9 @@ and dl.device_type = #{paramType} + + and cpm.system_type = #{systemType} + and cpm.grade = 40 ) GROUP BY device_type, TO_CHAR(cur_time, 'YYYY-MM-DD HH24:MI:SS'), EXTRACT(YEAR FROM cur_time) @@ -151,7 +159,7 @@ EXTRACT(YEAR FROM cur_time) AS yearStr FROM ${lastTableName} dh - WHERE cur_time >= #{startTime} AND cur_time <= #{endTime} + WHERE cur_time >= #{startTime}::timestamp AND cur_time <= #{endTime}::timestamp AND calc_value IS NOT NULL and dh.device_num in ( @@ -164,6 +172,9 @@ and dl.device_type = #{paramType} + + and cpm.system_type = #{systemType} + and cpm.grade = 40 ) GROUP BY device_type, TO_CHAR(cur_time, 'YYYY-MM-DD HH24:MI:SS'), EXTRACT(YEAR FROM cur_time) @@ -183,7 +194,7 @@ EXTRACT(YEAR FROM cur_time) AS yearStr FROM ${curTableName} dh - WHERE cur_time >= #{startTime} AND cur_time <= #{endTime} + WHERE cur_time >= #{startTime}::timestamp AND cur_time <= #{endTime}::timestamp AND calc_value IS NOT NULL and dh.device_num in ( @@ -196,6 +207,9 @@ and dl.device_type = #{paramType} + + and cpm.system_type = #{systemType} + and cpm.grade = 40 ) GROUP BY device_type, TO_CHAR(cur_time, 'YYYY-MM-DD HH24:MI:SS'), EXTRACT(YEAR FROM cur_time) @@ -216,16 +230,15 @@ ELSE '同期无数据' END AS yoy FROM ( - -- 子查询 a(去年同期数据) SELECT SUM(calc_value) AS sumValue, device_type AS deviceType, - SUBSTRING(TO_CHAR(cur_time, 'YYYY-MM-DD HH24:MI:SS') FROM 1 FOR ${len}) AS timeStr, - EXTRACT(YEAR FROM cur_time)::INTEGER AS yearStr + SUBSTRING(TO_CHAR(cur_time, 'YYYY-MM-DD HH24:MI:SS') FROM 1 FOR ${len}) AS timeStr, + EXTRACT(YEAR FROM cur_time)::INTEGER AS yearStr FROM ${yoyLastTableName} dh WHERE - cur_time >= #{yoyStartTime} AND cur_time <= #{yoyEndTime} + cur_time >= #{yoyStartTime}::timestamp AND cur_time <= #{yoyEndTime}::timestamp and dh.device_num in ( select cpm.mt_num @@ -236,11 +249,14 @@ and dl.device_type = #{paramType} + + and cpm.system_type = #{systemType} + and cpm.grade = 40 ) GROUP BY device_type, - SUBSTRING(TO_CHAR(cur_time, 'YYYY-MM-DD HH24:MI:SS') FROM 1 FOR ${len}), - EXTRACT(YEAR FROM cur_time) + SUBSTRING(TO_CHAR(cur_time, 'YYYY-MM-DD HH24:MI:SS') FROM 1 FOR ${len}), + EXTRACT(YEAR FROM cur_time) UNION ALL SELECT @@ -251,7 +267,7 @@ FROM ${yoyCurTableName} dh WHERE - cur_time >= #{yoyStartTime} AND cur_time <= #{yoyEndTime} + cur_time >= #{yoyStartTime}::timestamp AND cur_time <= #{yoyEndTime}::timestamp and dh.device_num in ( select cpm.mt_num @@ -262,6 +278,9 @@ and dl.device_type = #{paramType} + + and cpm.system_type = #{systemType} + and cpm.grade = 40 ) GROUP BY device_type, @@ -269,8 +288,7 @@ EXTRACT(YEAR FROM cur_time) ) a - RIGHT JOIN ( - -- 子查询 b(当前期数据) + RIGHT JOIN ( SELECT SUM(calc_value) AS sumValue, device_type AS deviceType, @@ -279,7 +297,7 @@ FROM ${lastTableName} dh WHERE - cur_time >= #{startTime} AND cur_time <= #{endTime} + cur_time >= #{startTime}::timestamp AND cur_time <= #{endTime}::timestamp and dh.device_num in ( select cpm.mt_num @@ -290,6 +308,9 @@ and dl.device_type = #{paramType} + + and cpm.system_type = #{systemType} + and cpm.grade = 40 ) GROUP BY device_type, @@ -305,7 +326,7 @@ FROM ${curTableName} dh WHERE - cur_time >= #{startTime} AND cur_time <= #{endTime} + cur_time >= #{startTime}::timestamp AND cur_time <= #{endTime}::timestamp and dh.device_num in ( select cpm.mt_num @@ -316,13 +337,16 @@ and dl.device_type = #{paramType} + + and cpm.system_type = #{systemType} + and cpm.grade = 40 ) GROUP BY device_type, SUBSTRING(TO_CHAR(cur_time, 'YYYY-MM-DD HH24:MI:SS') FROM 1 FOR ${len}), EXTRACT(YEAR FROM cur_time) - ) b ON a.yearStr + 1 = b.yearStr + ) b ON a.yearStr + 1 = b.yearStr @@ -351,7 +375,7 @@ ,EXTRACT(MONTH FROM cur_time) AS monthStr FROM ${tableName} dh - WHERE cur_time >= #{startTime} AND cur_time <= #{endTime} + WHERE cur_time >= #{startTime}::timestamp AND cur_time <= #{endTime}::timestamp AND calc_value IS NOT NULL and dh.device_num in ( @@ -364,6 +388,9 @@ and dl.device_type = #{paramType} + + and cpm.system_type = #{systemType} + and cpm.grade = 40 ) GROUP BY TO_CHAR(cur_time, 'YYYY-MM-DD HH24:MI:SS'), EXTRACT(YEAR FROM cur_time) @@ -386,7 +413,7 @@ ,EXTRACT(MONTH FROM cur_time) AS monthStr FROM ${tableName} dh - WHERE cur_time >= #{momStartTime} AND cur_time <= #{momEndTime} + WHERE cur_time >= #{momStartTime}::timestamp AND cur_time <= #{momEndTime}::timestamp AND calc_value IS NOT NULL and dh.device_num in ( @@ -399,6 +426,9 @@ and dl.device_type = #{paramType} + + and cpm.system_type = #{systemType} + and cpm.grade = 40 ) GROUP BY EXTRACT(YEAR FROM cur_time) @@ -443,8 +473,8 @@ from ${tableName} dh where - cur_time >= #{startTime} - and cur_time <= #{endTime} + cur_time >= #{startTime}::timestamp + and cur_time <= #{endTime}::timestamp and calc_value is not null and dh.device_num in ( @@ -457,6 +487,9 @@ and dl.device_type = #{paramType} + + and cpm.system_type = #{systemType} + and cpm.grade = 40 ) group by @@ -480,8 +513,8 @@ from ${tableName} dh where - cur_time >= #{momStartTime} - and cur_time <= #{momEndTime} + cur_time >= #{momStartTime}::timestamp + and cur_time <= #{momEndTime}::timestamp and calc_value is not null and dh.device_num in ( @@ -494,6 +527,9 @@ and dl.device_type = #{paramType} + + and cpm.system_type = #{systemType} + and cpm.grade = 40 ) group by @@ -528,10 +564,10 @@ extract(year from cur_time) as yearStr from - ${tableName1} + ${tableName1} dh where - cur_time >= #{startTime} - and cur_time <= #{endTime} + cur_time >= #{startTime}::timestamp + and cur_time <= #{endTime}::timestamp and dh.device_num in ( select cpm.mt_num @@ -542,6 +578,9 @@ and dl.device_type = #{paramType} + + and cpm.system_type = #{systemType} + and cpm.grade = 40 ) group by substring(to_char(cur_time, 'YYYY-MM-DD HH24:MI:SS') from 1 for ${len}), @@ -556,8 +595,8 @@ from ${tableName2} dh where - cur_time >= #{startTime} - and cur_time <= #{endTime} + cur_time >= #{startTime}::timestamp + and cur_time <= #{endTime}::timestamp and dh.device_num in ( select cpm.mt_num @@ -568,6 +607,9 @@ and dl.device_type = #{paramType} + + and cpm.system_type = #{systemType} + and cpm.grade = 40 ) group by substring(to_char(cur_time, 'YYYY-MM-DD HH24:MI:SS') from 1 for ${len}), @@ -581,11 +623,24 @@ extract(year from cur_time) as yearStr from - ${tableName1} + ${tableName1} dh where - cur_time >= #{momStartTime} - and cur_time <= #{momEndTime} - and device_type = #{paramType} + cur_time >= #{momStartTime}::timestamp + and cur_time <= #{momEndTime}::timestamp + and dh.device_num in ( + select + cpm.mt_num + from + collection_params_manage cpm + join device_ledger dl on + cpm.device_ledger_id = dl.id + + and dl.device_type = #{paramType} + + + and cpm.system_type = #{systemType} + + and cpm.grade = 40 ) group by extract(year from cur_time) @@ -597,8 +652,8 @@ from ${tableName2} dh where - cur_time >= #{momStartTime} - and cur_time <= #{momEndTime} + cur_time >= #{momStartTime}::timestamp + and cur_time <= #{momEndTime}::timestamp and dh.device_num in ( select cpm.mt_num @@ -609,6 +664,9 @@ and dl.device_type = #{paramType} + + and cpm.system_type = #{systemType} + and cpm.grade = 40 ) group by extract(year from cur_time) @@ -702,6 +760,9 @@ where dl.device_type = '5' and cpm.terminal_device_type = #{deviceType} + + and cpm.system_type = #{systemType} + group by cpm.mt_type ) @@ -747,6 +808,9 @@ where dl.device_type = '5' and cpm.terminal_device_type = #{deviceType} + + and cpm.system_type = #{systemType} + group by cpm.mt_type ) @@ -945,6 +1009,9 @@ where dl.device_type = '5' and cpm.terminal_device_type = #{deviceType} + + and cpm.system_type = #{systemType} + group by cpm.mt_type ) @@ -972,6 +1039,9 @@ where dl.device_type = '5' and cpm.terminal_device_type = #{deviceType} + + and cpm.system_type = #{systemType} + group by cpm.mt_type )