diff --git a/user-service/src/main/java/com/mh/user/entity/DeviceInstallEntity.java b/user-service/src/main/java/com/mh/user/entity/DeviceInstallEntity.java index 13a54da..29a9282 100644 --- a/user-service/src/main/java/com/mh/user/entity/DeviceInstallEntity.java +++ b/user-service/src/main/java/com/mh/user/entity/DeviceInstallEntity.java @@ -43,4 +43,6 @@ public class DeviceInstallEntity { // 是否单箱 1:是 0:其他 private int isSingleBox; + private int orderNum; + } diff --git a/user-service/src/main/java/com/mh/user/job/S7PlcCollectionJob.java b/user-service/src/main/java/com/mh/user/job/S7PlcCollectionJob.java index 3fda132..fda3772 100644 --- a/user-service/src/main/java/com/mh/user/job/S7PlcCollectionJob.java +++ b/user-service/src/main/java/com/mh/user/job/S7PlcCollectionJob.java @@ -4,11 +4,10 @@ import com.mh.user.constants.Constant; import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.GatewayManageEntity; -import com.mh.user.mapper.CollectionParamsManageMapper; -import com.mh.user.mapper.DeviceInstallMapper; -import com.mh.user.mapper.GatewayManageMapper; -import com.mh.user.mapper.NowDataMapper; +import com.mh.user.mapper.*; +import com.mh.user.model.MultiControlModel; import com.mh.user.s7.S7ConnectorUtil; +import com.mh.user.service.NowDataService; import com.mh.user.utils.DateUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; @@ -25,7 +24,7 @@ import java.util.stream.Collectors; /** * S7 PLC定时采集任务 * 支持M、VB、VW、VD等地址类型的读写操作 - * + * * @author System * @date 2026-06-23 */ @@ -40,13 +39,17 @@ public class S7PlcCollectionJob { private static final Map connectorCache = new ConcurrentHashMap<>(); private final DeviceInstallMapper deviceInstallMapper; private final NowDataMapper nowDataMapper; + private final NowDataService nowDataService; + private final NowPublicDataMapper nowPublicDataMapper; public S7PlcCollectionJob(GatewayManageMapper gatewayManageMapper, - CollectionParamsManageMapper collectionParamsManageMapper, DeviceInstallMapper deviceInstallMapper, NowDataMapper nowDataMapper, NowDataMapper nowDataMapper1) { + CollectionParamsManageMapper collectionParamsManageMapper, DeviceInstallMapper deviceInstallMapper, NowDataMapper nowDataMapper, NowDataMapper nowDataMapper1, NowDataService nowDataService, NowPublicDataMapper nowPublicDataMapper) { this.gatewayManageMapper = gatewayManageMapper; this.collectionParamsManageMapper = collectionParamsManageMapper; this.deviceInstallMapper = deviceInstallMapper; this.nowDataMapper = nowDataMapper1; + this.nowDataService = nowDataService; + this.nowPublicDataMapper = nowPublicDataMapper; } /** @@ -57,7 +60,7 @@ public class S7PlcCollectionJob { @Scheduled(cron = "0 0/5 * * * ?") public void collectS7Data() { log.info("------S7 PLC定时采集开始>>>>Constant.FLAG=={}------", Constant.PLC_FLAG); - + try { // 检查是否有手动操作正在进行 if (Constant.PLC_FLAG || Constant.WEB_PLC_FLAG) { @@ -66,7 +69,7 @@ public class S7PlcCollectionJob { } Constant.PLC_FLAG = true; - + // 查询所有在线的S7网关 List s7Gateways = gatewayManageMapper.queryS7Gateways(); if (s7Gateways == null || s7Gateways.isEmpty()) { @@ -81,7 +84,7 @@ public class S7PlcCollectionJob { try { processGateway(gateway); } catch (Exception e) { - log.error("处理S7网关异常: gatewayName={}, dataCom={}", + log.error("处理S7网关异常: gatewayName={}, dataCom={}", gateway.getGatewayName(), gateway.getDataCom(), e); } } @@ -136,7 +139,7 @@ public class S7PlcCollectionJob { readAndSaveData(connector, param, dateStr); } catch (Exception e) { - log.error("采集点位异常: registerAddr={}, otherName={}", + log.error("采集点位异常: registerAddr={}, otherName={}", param.getRegisterAddr(), param.getOtherName(), e); } } @@ -148,10 +151,12 @@ public class S7PlcCollectionJob { // map值有cur_value,cur_time,通过stream判断cur_time是否是当前时间,然后cur_value如果存在一天记录等于1的,back_water_state=运行,否则back_water_state=不运行 backWaterStates.forEach(backWaterState -> { if (backWaterState.get("cur_time").toString().substring(0, 10).equals(dateStr.substring(0, 10))) { - if (backWaterState.get("cur_value").equals(1)) { - nowDataMapper.updateBackWaterState(buildingId, "运行"); + if (new BigDecimal(backWaterState.get("cur_value").toString()).intValue() > 0) { + nowDataMapper.updateBackWaterState(buildingId, "1"); + nowPublicDataMapper.updateBackWaterState(buildingId, "运行"); } else { - nowDataMapper.updateBackWaterState(buildingId, "不运行"); + nowDataMapper.updateBackWaterState(buildingId, "0"); + nowPublicDataMapper.updateBackWaterState(buildingId, "不运行"); } } }); @@ -161,8 +166,8 @@ public class S7PlcCollectionJob { /** * 读取并保存数据 */ - private void readAndSaveData(S7ConnectorUtil connector, - CollectionParamsManageEntity param, + private void readAndSaveData(S7ConnectorUtil connector, + CollectionParamsManageEntity param, String dateStr) { String registerAddr = param.getRegisterAddr(); if (registerAddr == null || registerAddr.isEmpty()) { @@ -190,10 +195,12 @@ public class S7PlcCollectionJob { nowDataMapper.updateUpWaterState(deviceInstallEntity.getBuildingId(), deviceInstallEntity.getDeviceAddr(), "2", deviceInstallEntity.getDeviceName()); + nowPublicDataMapper.updateUpWaterState(Long.valueOf(deviceInstallEntity.getBuildingId()), "异常"); } else if (deviceInstallEntity.getDeviceType().equals("补水电磁阀")) { nowDataMapper.updateUseWaterState(deviceInstallEntity.getBuildingId(), deviceInstallEntity.getDeviceAddr(), "2", deviceInstallEntity.getDeviceName()); + nowPublicDataMapper.updateUseWaterState(Long.valueOf(deviceInstallEntity.getBuildingId()), "异常"); } return; } @@ -236,8 +243,8 @@ public class S7PlcCollectionJob { if (deviceInstallEntity != null) { // 更新设备安装表中的now_date字段,根据param.getParamTypeId()的值进行判断 // 在对now_date进行更新 // 查询当前点位是否是运行状态、压力、液位、液位设置、回水温度、故障状态 - log.error("进入nowData设置==>{}", param.toString()); - switch(param.getParamTypeId()) { +// log.error("进入nowData设置==>{}", param.toString()); + switch (param.getParamTypeId()) { case 2: // 运行状态 nowDataMapper.updateRunState(deviceInstallEntity.getBuildingId(), deviceInstallEntity.getDeviceAddr(), @@ -249,10 +256,12 @@ public class S7PlcCollectionJob { nowDataMapper.updateUpWaterState(deviceInstallEntity.getBuildingId(), deviceInstallEntity.getDeviceAddr(), String.valueOf(curValue.intValue()), deviceInstallEntity.getDeviceName()); + nowPublicDataMapper.updateUpWaterState(Long.valueOf(deviceInstallEntity.getBuildingId()), curValue.intValue() == 1 ? "运行" : "不运行"); } else if (deviceInstallEntity.getDeviceType().equals("补水电磁阀")) { nowDataMapper.updateUseWaterState(deviceInstallEntity.getBuildingId(), deviceInstallEntity.getDeviceAddr(), String.valueOf(curValue.intValue()), deviceInstallEntity.getDeviceName()); + nowPublicDataMapper.updateUseWaterState(Long.valueOf(deviceInstallEntity.getBuildingId()), curValue.intValue() == 1 ? "运行" : "不运行"); } break; case 5: // 压力 @@ -263,12 +272,17 @@ public class S7PlcCollectionJob { } break; case 31: // 液位 - if (param.getOtherName().contains("单箱") && deviceInstallEntity.getIsSingleBox() == 1) { + if (param.getOtherName().contains("单箱")) { + // 查询热泵类型的device_install以及是单箱的 + deviceInstallEntity = deviceInstallMapper.selectSingleBoxDeviceInstall(deviceInstallEntity.getBuildingId(), "热泵", 1); + if (deviceInstallEntity == null) { + return; + } // 更新单箱液位 nowDataMapper.updateBoxLevel(deviceInstallEntity.getBuildingId(), - null, + deviceInstallEntity.getDeviceAddr(), curValue.setScale(1, RoundingMode.HALF_UP).toString(), - null, 1); + deviceInstallEntity.getDeviceName(), 1); } else { // 获取多箱的液位 nowDataMapper.updateBoxLevel(deviceInstallEntity.getBuildingId(), @@ -278,13 +292,24 @@ public class S7PlcCollectionJob { } break; case 26: // 液位设置 - if (param.getOtherName().contains("单箱液位") && param.getOtherName().contains("上限") && deviceInstallEntity.getIsSingleBox() == 1) { + if (param.getOtherName().contains("单箱液位") && param.getOtherName().contains("上限")) { + // 查询热泵类型的device_install以及是单箱的 + deviceInstallEntity = deviceInstallMapper.selectSingleBoxDeviceInstall(deviceInstallEntity.getBuildingId(), "热泵", 1); + if (deviceInstallEntity == null) { + return; + } // 更新单箱液位 nowDataMapper.updateBoxLevelSet(deviceInstallEntity.getBuildingId(), - null, + deviceInstallEntity.getDeviceAddr(), curValue.setScale(1, RoundingMode.HALF_UP).toString(), - null, 1); - } if (param.getOtherName().contains("多箱液位") && param.getOtherName().contains("上限") && deviceInstallEntity.getIsSingleBox() == 0) { + deviceInstallEntity.getDeviceName(), 1); + } + if (param.getOtherName().contains("多箱液位") && param.getOtherName().contains("上限")) { + // 查询热泵类型的device_install以及是单箱的 + deviceInstallEntity = deviceInstallMapper.selectSingleBoxDeviceInstall(deviceInstallEntity.getBuildingId(), "热泵", 0); + if (deviceInstallEntity == null) { + return; + } // 获取多箱的液位 nowDataMapper.updateBoxLevelSet(deviceInstallEntity.getBuildingId(), null, @@ -301,6 +326,7 @@ public class S7PlcCollectionJob { nowDataMapper.updateBackWaterTemp(deviceInstallEntity.getBuildingId(), null, curValue.setScale(1, RoundingMode.HALF_UP).toString(), null); + nowPublicDataMapper.updateBackWaterTemp(Long.valueOf(deviceInstallEntity.getBuildingId()), curValue.setScale(1, RoundingMode.HALF_UP).toString()); break; case 3: // 故障状态 nowDataMapper.updatePressureSet(deviceInstallEntity.getBuildingId(), @@ -317,7 +343,7 @@ public class S7PlcCollectionJob { // 根据查询出来的deviceInstall表数据,根据device_addr和device_name值进行更新 } - log.debug("采集成功: registerAddr={}, value={}, otherName={}", + log.debug("采集成功: registerAddr={}, value={}, otherName={}", registerAddr, curValue, param.getOtherName()); } @@ -326,7 +352,7 @@ public class S7PlcCollectionJob { */ private S7ConnectorUtil getOrCreateConnector(GatewayManageEntity gateway) { String cacheKey = gateway.getDataCom(); - + // 从缓存中获取 S7ConnectorUtil connector = connectorCache.get(cacheKey); if (connector != null) { @@ -369,7 +395,7 @@ public class S7PlcCollectionJob { /** * 手动写入数据到PLC(供Controller调用) - * + * * @param cpmId 采集参数ID * @param value 要写入的值 * @return 是否成功 @@ -414,7 +440,7 @@ public class S7PlcCollectionJob { // } else { // curValue = new BigDecimal(value.toString()); // } - + collectionParamsManageMapper.updateCollectionParamsManageById( cpmId, value.toString(), diff --git a/user-service/src/main/java/com/mh/user/mapper/DeviceInstallMapper.java b/user-service/src/main/java/com/mh/user/mapper/DeviceInstallMapper.java index 853b52a..41331f5 100644 --- a/user-service/src/main/java/com/mh/user/mapper/DeviceInstallMapper.java +++ b/user-service/src/main/java/com/mh/user/mapper/DeviceInstallMapper.java @@ -76,7 +76,12 @@ public interface DeviceInstallMapper extends BaseMapper { @Result(property="remarks",column="remarks"), @Result(property="use",column="is_use"), @Result(property="fault",column="is_fault"), - @Result(property="faultState",column="fault_state") + @Result(property="faultState",column="fault_state"), + @Result(property="isSingleBox",column="is_single_box"), + @Result(property="orderNum",column="order_num"), + @Result(property="dayValue",column="dayValue"), + @Result(property="seat",column="seat"), + @Result(property="deviationValue",column="deviation_value") }) @Select("select * from (\n" + "select *,ROW_NUMBER() over(order by id) as rn from device_install \n" + @@ -402,4 +407,8 @@ public interface DeviceInstallMapper extends BaseMapper { @Update("update device_install set is_online = '离线' where id = #{deviceInstallId} ") void updateNotOnlineById(Long deviceInstallId); + + @ResultMap("rs") + @Select("select top 1 * from device_install where building_id = #{buildingId} and device_type = #{deviceType} and is_single_box = #{isSingleBox}") + DeviceInstallEntity selectSingleBoxDeviceInstall(String buildingId, String deviceType, int isSingleBox); } diff --git a/user-service/src/main/java/com/mh/user/mapper/NowPublicDataMapper.java b/user-service/src/main/java/com/mh/user/mapper/NowPublicDataMapper.java index d12b094..df2d863 100644 --- a/user-service/src/main/java/com/mh/user/mapper/NowPublicDataMapper.java +++ b/user-service/src/main/java/com/mh/user/mapper/NowPublicDataMapper.java @@ -33,14 +33,14 @@ public interface NowPublicDataMapper { //查询监控界面公共实时信息 @Results(value = { - @Result(property="curDate",column="cur_date"), - @Result(property="buildingId",column="building_id"), - @Result(property="buildingName",column="building_name"), - @Result(property="upWater",column="up_water"), - @Result(property ="useWater",column ="use_water"), - @Result(property ="backWater",column ="back_water"), - @Result(property="useWaterTemp",column="use_water_temp"), - @Result(property ="backWaterTemp",column ="back_water_temp") + @Result(property = "curDate", column = "cur_date"), + @Result(property = "buildingId", column = "building_id"), + @Result(property = "buildingName", column = "building_name"), + @Result(property = "upWater", column = "up_water"), + @Result(property = "useWater", column = "use_water"), + @Result(property = "backWater", column = "back_water"), + @Result(property = "useWaterTemp", column = "use_water_temp"), + @Result(property = "backWaterTemp", column = "back_water_temp") }) @Select("select * from now_public_data where building_id=#{buildingId}") NowPublicDataEntity queryNowPublicData(@Param("buildingId") String buildingId); @@ -64,13 +64,14 @@ public interface NowPublicDataMapper { void updateHistoryPublicData(NowPublicDataEntity nowPublicDataEntity); //查询监控界面公共历史信息 - @SelectProvider(type = NowPublicDataProvider.class,method = "queryHistoryPublicData") + @SelectProvider(type = NowPublicDataProvider.class, method = "queryHistoryPublicData") List queryHistoryPublicData(@Param("curDate") String curDate, @Param("buildingId") String buildingId, - @Param("page") int page, @Param("limit") int limit); + @Param("page") int page, @Param("limit") int limit); + //查询记录数 - @SelectProvider(type = NowPublicDataProvider.class,method = "getHistoryPublicDataCount") + @SelectProvider(type = NowPublicDataProvider.class, method = "getHistoryPublicDataCount") int getHistoryPublicDataCount(@Param("curDate") String curDate, @Param("buildingId") String buildingId, - @Param("page") int page, @Param("limit") int limit); + @Param("page") int page, @Param("limit") int limit); //判断实时表有没有记录(非热泵) @Select("select count(*) from now_public_data where building_id=#{buildingId} ") @@ -78,14 +79,14 @@ public interface NowPublicDataMapper { //判断历史表有没有记录(非热泵) @Select("select count(*) from history_public_data where convert(varchar(19),cur_date,121)=#{curDate} and building_id=#{buildingId} ") - int selectHistoryPublicDataCount(@Param("curDate") String curDate,@Param("buildingId") String buildingId); + int selectHistoryPublicDataCount(@Param("curDate") String curDate, @Param("buildingId") String buildingId); //查询所有楼栋水箱平均温度 @Results(value = { - @Result(property="buildingId",column="building_id"), - @Result(property="buildingName",column="building_name"), - @Result(property ="singleTemp",column ="single_temp"), - @Result(property ="avgTemp",column ="use_water_temp") + @Result(property = "buildingId", column = "building_id"), + @Result(property = "buildingName", column = "building_name"), + @Result(property = "singleTemp", column = "single_temp"), + @Result(property = "avgTemp", column = "use_water_temp") }) @Select("select building_id,building_name," + " convert(numeric(23,2),use_water_temp)+3 as use_water_temp, " + @@ -95,10 +96,10 @@ public interface NowPublicDataMapper { //查询单个楼栋水箱平均温度 @Results(value = { - @Result(property="buildingId",column="building_id"), - @Result(property="buildingName",column="building_name"), - @Result(property ="singleTemp",column ="single_temp"), - @Result(property ="avgTemp",column ="use_water_temp") + @Result(property = "buildingId", column = "building_id"), + @Result(property = "buildingName", column = "building_name"), + @Result(property = "singleTemp", column = "single_temp"), + @Result(property = "avgTemp", column = "use_water_temp") }) @Select("select building_id,building_name," + " convert(numeric(23,2),use_water_temp)+3 as use_water_temp, " + @@ -108,13 +109,13 @@ public interface NowPublicDataMapper { //更新单箱温度 @Update("update now_public_data set single_temp=#{singleTemp} where building_id=#{buildingId}") - void updateSingleTemp(@Param("singleTemp") String singleTemp,@Param("buildingId") String buildingId); + void updateSingleTemp(@Param("singleTemp") String singleTemp, @Param("buildingId") String buildingId); @Results(value = { - @Result(property="buildingId",column="building_id"), - @Result(property="buildingName",column="building_name"), - @Result(property ="singleTemp",column ="single_temp"), - @Result(property ="avgTemp",column ="avg_temp") + @Result(property = "buildingId", column = "building_id"), + @Result(property = "buildingName", column = "building_name"), + @Result(property = "singleTemp", column = "single_temp"), + @Result(property = "avgTemp", column = "avg_temp") }) @Select("SELECT " + " di.building_id, " + @@ -137,4 +138,17 @@ public interface NowPublicDataMapper { "GROUP BY di.building_id, di.building_name " + "ORDER BY di.building_id;") List queryNowWtTemp2(); + + @Update("update now_public_data set back_water=#{value} where building_id=#{buildingId}") + void updateBackWaterState(Long buildingId, String value); + + @Update("update now_public_data set up_water= #{value} where building_id= #{buildingId}") + void updateUpWaterState(Long buildingId, String value); + + @Update("update now_public_data set use_water= #{value} where building_id= #{buildingId}") + void updateUseWaterState(Long buildingId, String value); + + @Update("update now_public_data set back_water_temp= #{value} where building_id= #{buildingId}") + void updateBackWaterTemp(Long buildingId, String value); + } diff --git a/user-service/src/test/java/com/mh/user/UserServiceApplicationTests.java b/user-service/src/test/java/com/mh/user/UserServiceApplicationTests.java index fce5ba5..da1ba3c 100644 --- a/user-service/src/test/java/com/mh/user/UserServiceApplicationTests.java +++ b/user-service/src/test/java/com/mh/user/UserServiceApplicationTests.java @@ -1,9 +1,11 @@ package com.mh.user; +import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.DeviceManageEntity; import com.mh.user.entity.GaugeEntity; import com.mh.user.job.DealDataJob; import com.mh.user.job.StartOrStopHotpumpJob; +import com.mh.user.mapper.DeviceInstallMapper; import com.mh.user.serialport.SerialPortThread; import com.mh.user.service.DeviceManageService; import com.mh.user.service.GaugeService; @@ -28,6 +30,15 @@ class UserServiceApplicationTests { void contextLoads() { } + @Autowired + private DeviceInstallMapper deviceInstallMapper; + + @Test + public void testDeviceInstall() { + DeviceInstallEntity deviceInstallEntity = deviceInstallMapper.selectSingleBoxDeviceInstall("9", "热泵", 1); + System.out.println(deviceInstallEntity.toString()); + } + @Autowired private StartOrStopHotpumpJob startOrStopHotpumpJob;