From 2ffd4b6ec98ece38a3fdd902b6435d6c80ccc373 Mon Sep 17 00:00:00 2001 From: 25604 Date: Mon, 22 Dec 2025 17:27:42 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E5=8E=8B=E5=8A=9B?= =?UTF-8?q?=E5=8F=98=E5=8C=96=E6=95=B0=E6=8D=AE=E6=8E=A5=E5=8F=A3=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E5=AD=98=E5=82=A8=E8=BF=87=E7=A8=8B=E5=86=99=E5=85=A5?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mh/user/constants/DeviceEnum.java | 3 +- .../mh/user/constants/DeviceStrategyEnum.java | 3 +- .../mh/user/controller/NowDataController.java | 24 ++++++ .../mh/user/entity/WaterPressureEntity.java | 38 ++++++++ .../com/mh/user/factory/SystemParams.java | 51 +++++++++++ .../com/mh/user/mapper/NowDataMapper.java | 47 +++++++++- .../user/mapper/provider/NowDataProvider.java | 62 +++++++++++++ .../com/mh/user/service/NowDataService.java | 8 ++ .../user/service/impl/NowDataServiceImpl.java | 29 +++++++ .../user/strategy/SystemParamsStrategy.java | 86 +++++++++++++++++++ 10 files changed, 345 insertions(+), 6 deletions(-) create mode 100644 user-service/src/main/java/com/mh/user/entity/WaterPressureEntity.java create mode 100644 user-service/src/main/java/com/mh/user/factory/SystemParams.java create mode 100644 user-service/src/main/java/com/mh/user/strategy/SystemParamsStrategy.java diff --git a/user-service/src/main/java/com/mh/user/constants/DeviceEnum.java b/user-service/src/main/java/com/mh/user/constants/DeviceEnum.java index 95a34d9..10f6b22 100644 --- a/user-service/src/main/java/com/mh/user/constants/DeviceEnum.java +++ b/user-service/src/main/java/com/mh/user/constants/DeviceEnum.java @@ -24,7 +24,8 @@ public enum DeviceEnum { StatusCheckEnum("状态检测", StatusCheck.getInstance()), TempTransEnum("温度变送器", TempTrans.getInstance()), HeatPumpStatusEnum("热泵状态", HeatPumpStatus.getInstance()), - MultiControlEnum("多路控制", MultiControl.getInstance()); + MultiControlEnum("多路控制", MultiControl.getInstance()), + SystemParamsEnum("系统", SystemParams.getInstance()); private String deviceType; diff --git a/user-service/src/main/java/com/mh/user/constants/DeviceStrategyEnum.java b/user-service/src/main/java/com/mh/user/constants/DeviceStrategyEnum.java index 989d336..b6dcbf0 100644 --- a/user-service/src/main/java/com/mh/user/constants/DeviceStrategyEnum.java +++ b/user-service/src/main/java/com/mh/user/constants/DeviceStrategyEnum.java @@ -24,7 +24,8 @@ public enum DeviceStrategyEnum { StatusCheckEnum("状态检测", StatusCheckStrategy.getInstance()), TempTransEnum("温度变送器", TempTransStrategy.getInstance()), HeatPumpStatusEnum("热泵状态", HeatPumpStatusStrategy.getInstance()), - MultiControlEnum("多路控制", MultiControlStrategy.getInstance()); + MultiControlEnum("多路控制", MultiControlStrategy.getInstance()), + SystemParamsEnum("系统", SystemParamsStrategy.getInstance()); private String deviceType; diff --git a/user-service/src/main/java/com/mh/user/controller/NowDataController.java b/user-service/src/main/java/com/mh/user/controller/NowDataController.java index 982f292..c444987 100644 --- a/user-service/src/main/java/com/mh/user/controller/NowDataController.java +++ b/user-service/src/main/java/com/mh/user/controller/NowDataController.java @@ -303,6 +303,30 @@ public class NowDataController { } } + @SysLogger(title = "压力变化表", optDesc = "压力变化查询") + @PostMapping("/waterPressure") + public HttpResult queryWaterPressure(@RequestParam(value = "buildingID") String buildingID, + @RequestParam(value = "curDate") String curDate, + @RequestParam(value = "level", defaultValue = "0") int level, + @RequestParam(value = "page") int page, + @RequestParam(value = "limit") int limit) { + try { + List list; + int count; + // 校区或者区域 + if (buildingID == null || buildingID.equals("") || buildingID.equals("所有楼栋") || level == 0 || level == 1) { + list = nowDataService.queryWaterPressure2(curDate, page, limit, level, buildingID); + count = list.size(); + } else { + list = nowDataService.queryWaterPressure(buildingID, curDate, page, limit); + count = nowDataService.queryWaterPressureCount(buildingID, curDate); + } + return HttpResult.ok(count, list); + } catch (Exception e) { + return HttpResult.error("查询出错!"+e.getMessage()); + } + } + //查询运行时长 @SysLogger(title = "运行时长", optDesc = "热泵运行时长查询") @PostMapping("/minutes") diff --git a/user-service/src/main/java/com/mh/user/entity/WaterPressureEntity.java b/user-service/src/main/java/com/mh/user/entity/WaterPressureEntity.java new file mode 100644 index 0000000..34365d1 --- /dev/null +++ b/user-service/src/main/java/com/mh/user/entity/WaterPressureEntity.java @@ -0,0 +1,38 @@ +package com.mh.user.entity; + +import lombok.Data; + +import java.util.Date; + +/** + * @Author: ljf + * @Date: 2018/10/15 14:30 + * @Version 1.0 + * 水压数据 + */ + +@Data +public class WaterPressureEntity { + + private Date curDate; + private String buildingID; + private String buildingName; + private String deviceAddr; + private String deviceName; + private String pressure00; + private String pressure02; + private String pressure06; + private String pressure08; + private String pressure11; + private String pressure13; + private String pressure14; + private String pressure15; + private String pressure16; + private String pressure17; + private String pressure18; + private String pressure19; + private String pressure20; + private String pressure21; + private String pressure22; + private String pressure23; +} diff --git a/user-service/src/main/java/com/mh/user/factory/SystemParams.java b/user-service/src/main/java/com/mh/user/factory/SystemParams.java new file mode 100644 index 0000000..4928317 --- /dev/null +++ b/user-service/src/main/java/com/mh/user/factory/SystemParams.java @@ -0,0 +1,51 @@ +package com.mh.user.factory; + +import com.mh.user.entity.CollectionParamsManageEntity; +import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.entity.DeviceInstallEntity; +import com.mh.user.strategy.DeviceStrategy; + +/** + * @author LJF + * @version 1.0 + * @project CHWS + * @description 系统参数 + * @date 2024-03-18 16:53:35 + */ +public class SystemParams implements Device { + + private DeviceStrategy strategy; + + private static class SingletonHolder { + private static final SystemParams INSTANCE = new SystemParams(); + } + + private SystemParams() { + // 防止外部直接实例化 + } + + public static SystemParams getInstance() { + return SystemParams.SingletonHolder.INSTANCE; + } + + @Override + public void setStrategy(DeviceStrategy strategy) { + this.strategy = strategy; + } + + @Override + public String createOrders(DeviceCodeParamEntity deviceCodeParamEntity) { + return strategy.createOrders(deviceCodeParamEntity); + } + + @Override + public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) { + return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity); + } + + @Override + public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity, CollectionParamsManageEntity collectionParamsManageEntity) { + return strategy.analysisMQTTReceiveData(dateStr, registerAddr, dataStr, operateType, deviceInstallEntity, collectionParamsManageEntity); + } + +} diff --git a/user-service/src/main/java/com/mh/user/mapper/NowDataMapper.java b/user-service/src/main/java/com/mh/user/mapper/NowDataMapper.java index a6c3ca9..bbb3d2f 100644 --- a/user-service/src/main/java/com/mh/user/mapper/NowDataMapper.java +++ b/user-service/src/main/java/com/mh/user/mapper/NowDataMapper.java @@ -1,9 +1,6 @@ package com.mh.user.mapper; -import com.mh.user.entity.NowDataEntity; -import com.mh.user.entity.WaterLevelEntity; -import com.mh.user.entity.WaterTempEntity; -import com.mh.user.entity.PumpMinutesEntity; +import com.mh.user.entity.*; import com.mh.user.mapper.provider.NowDataProvider; import com.mh.user.model.WaterLevelModel; import org.apache.ibatis.annotations.*; @@ -292,6 +289,22 @@ public interface NowDataMapper { int queryWaterTempCount(@Param("buildingID") String buildingID, @Param("curDate") String curDate); + @Results({@Result(property="curDate",column="cur_date"), + @Result(property="buildingID",column="building_id"), + @Result(property="buildingName",column="building_name"), + @Result(property="deviceAddr",column="device_addr"), + @Result(property="deviceName",column="device_name") + }) + @SelectProvider(type = NowDataProvider.class,method = "queryWaterPressure") + List queryWaterPressure(@Param("buildingID") String buildingID, + @Param("curDate") String curDate, + @Param("page") int page, + @Param("limit") int limit); + + @SelectProvider(type = NowDataProvider.class,method = "queryWaterPressureCount") + int queryWaterPressureCount(@Param("buildingID") String buildingID, + @Param("curDate") String curDate); + //查询每天24小时每个热泵温度变化情况2 @Results({@Result(property="curDate",column="cur_date"), @Result(property="buildingID",column="building_id"), @@ -302,6 +315,17 @@ public interface NowDataMapper { @Param("page") int page, @Param("limit") int limit); + @Results({@Result(property="curDate",column="cur_date"), + @Result(property="buildingID",column="building_id"), + @Result(property="buildingName",column="building_name"), + @Result(property="deviceAddr",column="device_addr"), + @Result(property="deviceName",column="device_name") + }) + @SelectProvider(type = NowDataProvider.class,method = "queryWaterPressure2") + List queryWaterPressure2(@Param("curDate") String curDate, + @Param("page") int page, + @Param("limit") int limit); + @SelectProvider(type = NowDataProvider.class,method = "queryWaterTempCount2") int queryWaterTempCount2(@Param("curDate") String curDate); @@ -315,6 +339,21 @@ public interface NowDataMapper { @Options(statementType = StatementType.CALLABLE) void proWaterLevel(@Param("curDate") String curDate,@Param("buildingID") String buildingID, @Param("deviceAddr") String deviceAddr); + //生成楼栋压力 + @Select("exec pro_water_pressure #{curDate,jdbcType=VARCHAR,mode=IN}," + + "#{buildingID,jdbcType=VARCHAR,mode=IN}, " + + "#{buildingName,jdbcType=VARCHAR,mode=IN}, " + + "#{deviceAddr,jdbcType=VARCHAR,mode=IN}, " + + "#{deviceName,jdbcType=VARCHAR,mode=IN}, " + + "#{dataStr,jdbcType=VARCHAR,mode=IN}") + @Options(statementType = StatementType.CALLABLE) + void proWaterPressure(@Param("curDate") String curDate, + @Param("buildingID") String buildingID, + @Param("buildingName") String buildingName, + @Param("deviceAddr") String deviceAddr, + @Param("deviceName") String deviceName, + @Param("dataStr") String dataStr); + //在没有接收到返回值前设置监控界面热泵是否离线 @Update("update now_data set run_state=#{strState} where building_id=#{buildingId} and pump_id=#{pumpId}") void updateRunState(@Param("buildingId") String buildingId,@Param("pumpId") String pumpId,@Param("strState") String strState); diff --git a/user-service/src/main/java/com/mh/user/mapper/provider/NowDataProvider.java b/user-service/src/main/java/com/mh/user/mapper/provider/NowDataProvider.java index 71a6523..a10c068 100644 --- a/user-service/src/main/java/com/mh/user/mapper/provider/NowDataProvider.java +++ b/user-service/src/main/java/com/mh/user/mapper/provider/NowDataProvider.java @@ -169,6 +169,42 @@ public class NowDataProvider { return sql.toString(); } + //从history_data查询水温 + public String queryWaterPressure(String buildingID,String curDate, int page, int limit){ + StringBuffer sql = new StringBuffer(""); + sql.append("select * from (select *,ROW_NUMBER() over(order by cur_date) as rn from (" + + "select t1.* from water_pressure t1 join building t2 on t1.building_id=t2.id "+ + " where 1=1 "); + if (buildingID != null && !buildingID.equals("")){ + sql.append(" AND t1.building_id= #{buildingID} "); + } + if (curDate!= null && !curDate.equals("")) { + sql.append(" AND convert(varchar(10),t1.cur_date,121)=#{curDate} "); + } + if ((page != 0) && (limit != 0)){ + sql.append(" )T )TT where TT.rn>(#{page}-1)*#{limit} and TT.rn<=#{page}*#{limit} order by TT.device_addr "); + } else if (page == 0){ + sql.append(" )T )TT order by TT.device_addr "); + } + return sql.toString(); + } + + //从history_data查询水温记录数 + public String queryWaterPressureCount(String buildingID,String curDate){ + StringBuffer sql = new StringBuffer(""); + sql.append("select count(*) from (select *,ROW_NUMBER() over(order by cur_date) as rn from (" + + "select t1.* from water_pressure t1 join building t2 on t1.building_id=t2.id "+ + " where 1=1 "); + if (buildingID != null && !buildingID.equals("")){ + sql.append(" AND t1.building_id= #{buildingID} "); + } + if (curDate!= null && !curDate.equals("")) { + sql.append(" AND convert(varchar(10),t1.cur_date,121)=#{curDate} "); + } + sql.append(" ) T )TT "); + return sql.toString(); + } + public String queryWaterTemp2(String curDate, int page, int limit){ StringBuffer sql = new StringBuffer(""); sql.append("select top 1000 * from (select *,ROW_NUMBER() over(order by cur_date) as rn from (" + @@ -218,6 +254,32 @@ public class NowDataProvider { return sql.toString(); } + public String queryWaterPressure2(String curDate, int page, int limit){ + StringBuffer sql = new StringBuffer(""); + sql.append("select top 1000 * from (select *,ROW_NUMBER() over(order by cur_date) as rn from (" + + "select top 1000 t1.cur_date,t1.building_id,t2.building_name,t2.sort,convert(decimal(8,1),AVG(convert(float,t1.pressure00)))as pressure00," + + "convert(decimal(8,1),AVG(convert(float,t1.pressure02)))as pressure02," + + "convert(decimal(8,1),AVG(convert(float,t1.pressure06)))as pressure06," + + "convert(decimal(8,1),AVG(convert(float,t1.pressure08)))as pressure08,convert(decimal(8,1),AVG(convert(float,t1.pressure11)))as pressure11," + + "convert(decimal(8,1),AVG(convert(float,t1.pressure13)))as pressure13," + + "convert(decimal(8,1),AVG(convert(float,t1.pressure14)))as pressure14," + + "convert(decimal(8,1),AVG(convert(float,t1.pressure15)))as pressure15," + + "convert(decimal(8,1),AVG(convert(float,t1.pressure16)))as pressure16,convert(decimal(8,1),AVG(convert(float,t1.pressure17)))as pressure17," + + "convert(decimal(8,1),AVG(convert(float,t1.pressure18)))as pressure18,convert(decimal(8,1),AVG(convert(float,t1.pressure19)))as pressure19," + + "convert(decimal(8,1),AVG(convert(float,t1.pressure20)))as pressure20,convert(decimal(8,1),AVG(convert(float,t1.pressure21)))as pressure21," + + "convert(decimal(8,1),AVG(convert(float,t1.pressure22)))as pressure22,convert(decimal(8,1),AVG(convert(float,t1.pressure23)))as pressure23 " + + " from water_pressure t1 join building t2 on t1.building_id=t2.id where 1=1 "); + if (curDate!= null && !curDate.equals("")) { + sql.append(" AND convert(varchar(10),t1.cur_date,121)=#{curDate} group by t1.building_id,t2.building_name,t2.sort,t1.cur_date order by t2.sort "); + } + if ((page != 0) && (limit != 0)){ + sql.append(" )T )TT where TT.rn>(#{page}-1)*#{limit} and TT.rn<=#{page}*#{limit} order by TT.cur_date desc "); + } else if (page == 0){ + sql.append(" )T )TT order by TT.cur_date desc "); + } + return sql.toString(); + } + //从history_data表按时间点查询水位 public String queryWaterLevelByTime(String curDate, int page, int limit){ // StringBuffer sql = new StringBuffer(""); diff --git a/user-service/src/main/java/com/mh/user/service/NowDataService.java b/user-service/src/main/java/com/mh/user/service/NowDataService.java index b7d841e..e62768e 100644 --- a/user-service/src/main/java/com/mh/user/service/NowDataService.java +++ b/user-service/src/main/java/com/mh/user/service/NowDataService.java @@ -97,9 +97,15 @@ public interface NowDataService { int queryWaterTempCount(String buildingID,String curDate); + List queryWaterPressure(String buildingID,String curDate,int page,int limit); + + int queryWaterPressureCount(String buildingID,String curDate); + //查询每天24小时每个热泵温度变化情况2 List queryWaterTemp2(String curDate,int page,int limit, int level, String buildingID); + List queryWaterPressure2(String curDate,int page,int limit, int level, String buildingID); + int queryWaterTempCount2(String curDate, int level, String buildingID); //生成楼栋温度 @@ -154,5 +160,7 @@ public interface NowDataService { List queryMultiControlNowData(String buildingId); void updateMultiNowData(NowDataEntity nowDataEntity); + + void proWaterPressure(String dateStr, String buildingId, String buildingName, String registerAddr, String otherName, String dataStr); } diff --git a/user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java index 6f6e644..d1295ed 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java @@ -52,6 +52,7 @@ public class NowDataServiceImpl implements NowDataService { ReentrantLock lockA = new ReentrantLock(); ReentrantLock lockB = new ReentrantLock(); + @Autowired private AreaMapper areaMapper; @Qualifier("gatewayManageMapper") @@ -60,6 +61,11 @@ public class NowDataServiceImpl implements NowDataService { @Autowired private CollectionParamsManageMapper collectionParamsManageMapper; + @Override + public void proWaterPressure(String dateStr, String buildingId, String buildingName, String registerAddr, String otherName, String dataStr) { + nowDataMapper.proWaterPressure(dateStr, buildingId, buildingName, registerAddr, otherName, dataStr); + } + @Override public void updateMultiNowData(NowDataEntity nowDataEntity) { nowDataMapper.updateMultiNowData(nowDataEntity); @@ -674,6 +680,16 @@ public class NowDataServiceImpl implements NowDataService { return nowDataMapper.queryWaterTempCount(buildingID, curDate); } + @Override + public List queryWaterPressure(String buildingID, String curDate, int page, int limit) { + return nowDataMapper.queryWaterPressure(buildingID, curDate, page, limit); + } + + @Override + public int queryWaterPressureCount(String buildingID, String curDate) { + return nowDataMapper.queryWaterPressureCount(buildingID, curDate); + } + //查询所有楼栋每栋楼的平均温度 @Override public List queryWaterTemp2(String curDate, int page, int limit, int level, String buildingID) { @@ -688,6 +704,19 @@ public class NowDataServiceImpl implements NowDataService { return waterTempEntityList; } + @Override + public List queryWaterPressure2(String curDate, int page, int limit, int level, String buildingID) { + List waterPressureEntityList = nowDataMapper.queryWaterPressure2(curDate, page, limit); + // 根据level层级查询 + if (level == 1) { + // 根据区域id获取对应的楼栋id + List buildingIdList = buildingService.queryBuildingIdListByAreaId(buildingID); + // waterTempEntityList过滤掉非该区域的楼栋 + waterPressureEntityList.removeIf(waterPressureEntity -> !buildingIdList.contains(waterPressureEntity.getBuildingID())); + } + return waterPressureEntityList; + } + //查询所有楼栋每栋楼的平均温度记录数 @Override public int queryWaterTempCount2(String curDate, int level, String buildingID) { diff --git a/user-service/src/main/java/com/mh/user/strategy/SystemParamsStrategy.java b/user-service/src/main/java/com/mh/user/strategy/SystemParamsStrategy.java new file mode 100644 index 0000000..8b034ba --- /dev/null +++ b/user-service/src/main/java/com/mh/user/strategy/SystemParamsStrategy.java @@ -0,0 +1,86 @@ +package com.mh.user.strategy; + +import com.mh.user.constants.Constant; +import com.mh.user.entity.CollectionParamsManageEntity; +import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.entity.DeviceInstallEntity; +import com.mh.user.entity.NowPublicDataEntity; +import com.mh.user.service.BuildingService; +import com.mh.user.service.NowDataService; +import com.mh.user.service.NowPublicDataService; +import com.mh.user.utils.ExchangeStringUtil; +import com.mh.user.utils.SpringBeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationContext; + +/** + * @author LJF + * @version 1.0 + * @project CHWS + * @description 系统参数策略 + * @date 2024-03-18 09:51:17 + */ +@Slf4j +public class SystemParamsStrategy implements DeviceStrategy { + + + // 调用service + ApplicationContext context = SpringBeanUtil.getApplicationContext(); + NowDataService nowDataService = context.getBean(NowDataService.class); + + NowPublicDataService nowPublicDataService = context.getBean(NowPublicDataService.class); + + BuildingService buildingService = context.getBean(BuildingService.class); + + + + private static class SingletonHolder { + private static final SystemParamsStrategy INSTANCE = new SystemParamsStrategy(); + } + + private SystemParamsStrategy() { + // 防止外部直接实例化 + } + + public static SystemParamsStrategy getInstance() { + return SystemParamsStrategy.SingletonHolder.INSTANCE; + } + + @Override + public String createOrders(DeviceCodeParamEntity deviceCodeParamEntity) { + return ""; + } + + @Override + public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) { + String result = Constant.FAIL; + return result; + } + + @Override + public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity, + CollectionParamsManageEntity collectionParamsManageEntity) { + String result = Constant.FAIL; + if (Integer.parseInt(dataStr) < 0) { + log.info("系统参数报文检验失败: " + dataStr); + return result; + } + String data = ""; + if (operateType.equalsIgnoreCase(Constant.READ)) {// 读 + // 水压存储过程 + if (collectionParamsManageEntity.getParamTypeId() == 5) { + nowDataService.proWaterPressure(dateStr, + deviceInstallEntity.getBuildingId(), + deviceInstallEntity.getBuildingName(), + collectionParamsManageEntity.getRegisterAddr(), + collectionParamsManageEntity.getOtherName(), + dataStr);//保存时间点温度 + log.info("系统参数id:" + deviceInstallEntity.getDeviceAddr() + ",压力值:" + dataStr + ",保存数据库成功!楼栋名称:" + deviceInstallEntity.getBuildingName()); + } + return dataStr; + } else {// 写 + result = Constant.SUCCESS; + } + return result; + } +}