From abf18e0619bab13b847d6a2024580e2365a895e7 Mon Sep 17 00:00:00 2001 From: "3067418132@qq.com" Date: Tue, 30 Jun 2026 18:29:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=BF=E5=B7=9E=E8=BD=AF=E4=BB=B6=E5=AD=A6?= =?UTF-8?q?=E9=99=A2=E5=85=BC=E5=AE=B9PLC=E7=9B=B8=E5=85=B3=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=86=85=E5=AE=B9=EF=BC=9A=201=E3=80=81=E7=9B=91?= =?UTF-8?q?=E8=A7=86=E7=95=8C=E9=9D=A2=E5=85=BC=E5=AE=B9PLC=EF=BC=9B=202?= =?UTF-8?q?=E3=80=81MQTT=E6=94=B9=E6=88=90=E5=8A=A8=E6=80=81=E5=88=87?= =?UTF-8?q?=E6=8D=A2=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DeviceOperateController.java | 2 +- .../mh/user/entity/DeviceInstallEntity.java | 2 + .../com/mh/user/entity/NowDataEntity.java | 4 + .../com/mh/user/job/CollectionLoopRunner.java | 2 + .../com/mh/user/job/S7PlcCollectionJob.java | 127 +++++++++++++++++- .../mapper/CollectionParamsManageMapper.java | 13 ++ .../mh/user/mapper/DeviceInstallMapper.java | 7 + .../mh/user/mapper/GatewayManageMapper.java | 2 +- .../com/mh/user/mapper/NowDataMapper.java | 72 +++++++++- .../com/mh/user/model/MultiControlModel.java | 13 +- .../CollectionParamsManageServiceImpl.java | 1 + .../user/service/impl/NowDataServiceImpl.java | 35 ++++- .../user/service/mqtt/config/MqttConfig.java | 1 + .../mqtt/config/MqttInboundConfig.java | 2 +- .../mqtt/config/MqttMessageChannel.java | 2 + .../mqtt/config/MqttOutboundConfig.java | 2 +- .../mqtt/handler/InboundMessageRouter.java | 2 + .../mqtt/service/impl/EventsServiceImpl.java | 2 + .../service/impl/MqttGatewayServiceImpl.java | 2 + .../service/impl/MqttManagerServiceImpl.java | 2 +- .../impl/MqttMsgSenderServiceImpl.java | 2 + .../service/impl/MqttTopicServiceImpl.java | 2 + .../src/main/resources/application-dev.yml | 4 +- .../src/main/resources/application-prod.yml | 2 + .../src/main/resources/application-test.yml | 108 ++++++++------- 25 files changed, 348 insertions(+), 65 deletions(-) diff --git a/user-service/src/main/java/com/mh/user/controller/DeviceOperateController.java b/user-service/src/main/java/com/mh/user/controller/DeviceOperateController.java index 177251e..b74daa7 100644 --- a/user-service/src/main/java/com/mh/user/controller/DeviceOperateController.java +++ b/user-service/src/main/java/com/mh/user/controller/DeviceOperateController.java @@ -52,7 +52,7 @@ public class DeviceOperateController { @Value("${control.topic}") String controlTopic; - @Autowired + @Autowired(required = false) private IMqttGatewayService iMqttGatewayService; @Autowired 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 382cb8c..13a54da 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 @@ -40,5 +40,7 @@ public class DeviceInstallEntity { private int isFault; private String seat; + // 是否单箱 1:是 0:其他 + private int isSingleBox; } diff --git a/user-service/src/main/java/com/mh/user/entity/NowDataEntity.java b/user-service/src/main/java/com/mh/user/entity/NowDataEntity.java index 291125d..85abebd 100644 --- a/user-service/src/main/java/com/mh/user/entity/NowDataEntity.java +++ b/user-service/src/main/java/com/mh/user/entity/NowDataEntity.java @@ -41,6 +41,10 @@ public class NowDataEntity { private String pressure; // 压力 + private String pressureSet; // 压力设置 + private String gwState; // 网关状态 + private String backControlMode; // 回水运行模式 + } diff --git a/user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java b/user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java index 5f9e8a9..37a3bd5 100644 --- a/user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java +++ b/user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java @@ -20,6 +20,7 @@ import gnu.io.SerialPortEvent; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; @@ -35,6 +36,7 @@ import java.util.Map; * @throws : */ @Component +@ConditionalOnProperty(prefix = "mqttSpring", name = "enabled", havingValue = "true", matchIfMissing = true) public class CollectionLoopRunner implements ApplicationRunner { @Resource 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 75abfb7..5fd3469 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 @@ -2,9 +2,12 @@ package com.mh.user.job; 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.s7.S7ConnectorUtil; import com.mh.user.utils.DateUtil; import lombok.extern.slf4j.Slf4j; @@ -34,11 +37,15 @@ public class S7PlcCollectionJob { // 缓存S7连接器,避免频繁创建连接 private static final Map connectorCache = new ConcurrentHashMap<>(); + private final DeviceInstallMapper deviceInstallMapper; + private final NowDataMapper nowDataMapper; public S7PlcCollectionJob(GatewayManageMapper gatewayManageMapper, - CollectionParamsManageMapper collectionParamsManageMapper) { + CollectionParamsManageMapper collectionParamsManageMapper, DeviceInstallMapper deviceInstallMapper, NowDataMapper nowDataMapper, NowDataMapper nowDataMapper1) { this.gatewayManageMapper = gatewayManageMapper; this.collectionParamsManageMapper = collectionParamsManageMapper; + this.deviceInstallMapper = deviceInstallMapper; + this.nowDataMapper = nowDataMapper1; } /** @@ -132,6 +139,22 @@ public class S7PlcCollectionJob { param.getRegisterAddr(), param.getOtherName(), e); } } + // 遍历完全之后更新回水状态,因为有多箱和单箱电磁阀 + // params遍历得出多少个buildingId分组 + List buildingIds = params.stream().map(CollectionParamsManageEntity::getBuildingId).distinct().collect(Collectors.toList()); + for (Long buildingId : buildingIds) { + List> backWaterStates = collectionParamsManageMapper.selectBackWaterState(buildingId); + // 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, "运行"); + } else { + nowDataMapper.updateBackWaterState(buildingId, "不运行"); + } + } + }); + } } /** @@ -148,8 +171,29 @@ public class S7PlcCollectionJob { // 读取数据 Object value = connector.readData(registerAddr); + + DeviceInstallEntity deviceInstallEntity = deviceInstallMapper.selectDeviceById(param.getDeviceInstallId()); + if (value == null) { log.warn("读取数据为空: registerAddr={}", registerAddr); + // 更新deviceInstall离线 + deviceInstallMapper.updateNotOnlineById(param.getDeviceInstallId()); + // 更新now_data离线 + nowDataMapper.updateRunState(deviceInstallEntity.getBuildingId(), + deviceInstallEntity.getDeviceAddr(), + "2", deviceInstallEntity.getDeviceName()); + // 在判断设备类型,如果是供水泵,up_water_state=运行 + // 如果是补水电磁阀开,use_water_state=运行, + // 如果是单箱电磁阀或者多箱电磁阀开,back_water_state=运行 + if (deviceInstallEntity.getDeviceType().equals("供水泵")) { + nowDataMapper.updateUpWaterState(deviceInstallEntity.getBuildingId(), + deviceInstallEntity.getDeviceAddr(), + "2", deviceInstallEntity.getDeviceName()); + } else if (deviceInstallEntity.getDeviceType().equals("补水电磁阀")) { + nowDataMapper.updateUseWaterState(deviceInstallEntity.getBuildingId(), + deviceInstallEntity.getDeviceAddr(), + "2", deviceInstallEntity.getDeviceName()); + } return; } @@ -185,6 +229,87 @@ public class S7PlcCollectionJob { param.getBuildingId() != null ? param.getBuildingId().toString() : null ); + // 在同步更新device_install表 + deviceInstallMapper.updateLastValueByOtherParam(param.getDeviceInstallId(), curValue.toString()); + + if (deviceInstallEntity != null) { + // 更新设备安装表中的now_date字段,根据param.getParamTypeId()的值进行判断 // 在对now_date进行更新 + // 查询当前点位是否是运行状态、压力、液位、液位设置、回水温度、故障状态 + switch(param.getParamTypeId()) { + case 2: // 运行状态 + nowDataMapper.updateRunState(deviceInstallEntity.getBuildingId(), + deviceInstallEntity.getDeviceAddr(), + String.valueOf(curValue.intValue()), deviceInstallEntity.getDeviceName()); + // 在判断设备类型,如果是供水泵,up_water_state=运行 + // 如果是补水电磁阀开,use_water_state=运行, + // 如果是单箱电磁阀或者多箱电磁阀开,back_water_state=运行 + if (deviceInstallEntity.getDeviceType().equals("供水泵")) { + nowDataMapper.updateUpWaterState(deviceInstallEntity.getBuildingId(), + deviceInstallEntity.getDeviceAddr(), + String.valueOf(curValue.intValue()), deviceInstallEntity.getDeviceName()); + } else if (deviceInstallEntity.getDeviceType().equals("补水电磁阀")) { + nowDataMapper.updateUseWaterState(deviceInstallEntity.getBuildingId(), + deviceInstallEntity.getDeviceAddr(), + String.valueOf(curValue.intValue()), deviceInstallEntity.getDeviceName()); + } + break; + case 5: // 压力 + nowDataMapper.updatePressure(deviceInstallEntity.getBuildingId(), + deviceInstallEntity.getDeviceAddr(), + curValue.toString(), deviceInstallEntity.getDeviceName()); + break; + case 31: // 液位 + if (param.getOtherName().contains("单箱") && deviceInstallEntity.getIsSingleBox() == 1) { + // 更新单箱液位 + nowDataMapper.updateBoxLevel(deviceInstallEntity.getBuildingId(), + deviceInstallEntity.getDeviceAddr(), + curValue.toString(), + deviceInstallEntity.getDeviceName(), 1); + } else { + // 获取多箱的液位 + nowDataMapper.updateBoxLevel(deviceInstallEntity.getBuildingId(), + null, + curValue.toString(), + null, 0); + } + break; + case 39: // 液位设置 + if (param.getOtherName().contains("单箱") && deviceInstallEntity.getIsSingleBox() == 1) { + // 更新单箱液位 + nowDataMapper.updateBoxLevelSet(deviceInstallEntity.getBuildingId(), + deviceInstallEntity.getDeviceAddr(), + curValue.toString(), + deviceInstallEntity.getDeviceName(), 1); + } else { + // 获取多箱的液位 + nowDataMapper.updateBoxLevelSet(deviceInstallEntity.getBuildingId(), + null, + curValue.toString(), + null, 0); + } + break; + case 32: // 压力设置 + nowDataMapper.updatePressureSet(deviceInstallEntity.getBuildingId(), + deviceInstallEntity.getDeviceAddr(), + curValue.toString(), deviceInstallEntity.getDeviceName()); + break; + case 12: // 回水温度 + break; + case 3: // 故障状态 + nowDataMapper.updatePressureSet(deviceInstallEntity.getBuildingId(), + deviceInstallEntity.getDeviceAddr(), + curValue.intValue() == 0 ? "正常" : "故障", deviceInstallEntity.getDeviceName()); + break; + case 41: // 回水阀控制模式:0单箱,1多箱 + nowDataMapper.updateBackControlModel(deviceInstallEntity.getBuildingId(), + deviceInstallEntity.getDeviceAddr(), + String.valueOf(curValue.intValue()), deviceInstallEntity.getDeviceName()); + break; + } + // 根据deviceInstall查询对应的deviceInstall表数据 + // 根据查询出来的deviceInstall表数据,根据device_addr和device_name值进行更新 + } + log.debug("采集成功: registerAddr={}, value={}, otherName={}", registerAddr, curValue, param.getOtherName()); } diff --git a/user-service/src/main/java/com/mh/user/mapper/CollectionParamsManageMapper.java b/user-service/src/main/java/com/mh/user/mapper/CollectionParamsManageMapper.java index fe4cd77..688e208 100644 --- a/user-service/src/main/java/com/mh/user/mapper/CollectionParamsManageMapper.java +++ b/user-service/src/main/java/com/mh/user/mapper/CollectionParamsManageMapper.java @@ -10,6 +10,7 @@ import tk.mybatis.mapper.common.BaseMapper; import java.math.BigDecimal; import java.util.List; +import java.util.Map; /** * @author LJF @@ -424,4 +425,16 @@ public interface CollectionParamsManageMapper extends BaseMapper> selectBackWaterState(Long buildingId); } 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 0f10406..853b52a 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 @@ -395,4 +395,11 @@ public interface DeviceInstallMapper extends BaseMapper { @Param("deviceAddr") String addr, @Param("deviceType") String deviceType, @Param("deviceName") String deviceName); + + @Update("update device_install set last_value = #{lastValue}, last_date = getdate(), is_online = '在线' where id = #{deviceInstallId} ") + void updateLastValueByOtherParam(@Param("deviceInstallId") Long deviceInstallId, + @Param("lastValue") String lastValue); + + @Update("update device_install set is_online = '离线' where id = #{deviceInstallId} ") + void updateNotOnlineById(Long deviceInstallId); } diff --git a/user-service/src/main/java/com/mh/user/mapper/GatewayManageMapper.java b/user-service/src/main/java/com/mh/user/mapper/GatewayManageMapper.java index 4593ab1..c90a20f 100644 --- a/user-service/src/main/java/com/mh/user/mapper/GatewayManageMapper.java +++ b/user-service/src/main/java/com/mh/user/mapper/GatewayManageMapper.java @@ -114,7 +114,7 @@ public interface GatewayManageMapper { void updateGatewayManageOnlineByImei(String imei, int status); @Select("select top 1 grade from gateway_manage where data_com = #{dataCom} ") - int queryGatewayByDataCom(@Param("dataCom") String dataCom); + Integer queryGatewayByDataCom(@Param("dataCom") String dataCom); @Update("update gateway_manage set grade = #{grade}, connect_date = getdate() where sn = #{sn}") void updateGatewayManageOnlineBySn(String sn, int grade); 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 86abbf9..e2dafed 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 @@ -72,7 +72,10 @@ public interface NowDataMapper { @Result(property ="waterLevel",column ="water_level"), @Result(property ="tankId",column ="tank_id"), @Result(property ="tankName",column ="tank_name"), - @Result(property ="envTemp",column ="env_temp") + @Result(property ="envTemp",column ="env_temp"), + @Result(property ="pressure",column ="pressure"), + @Result(property ="pressureSet",column ="pressure_set"), + @Result(property ="backControlMode",column ="back_control_mode"), }) @Select("select * from now_data where building_id=#{buildingId} order by cast(pump_id as int) ") List queryNowData(@Param("buildingId") String buildingId); @@ -620,4 +623,71 @@ public interface NowDataMapper { " where building_id = #{buildingId} and pump_id = #{pumpId} and pump_name = #{pumpName} " + "") void updateMultiNowData(NowDataEntity nowDataEntity); + + @Update("update now_data set pressure=#{value} where building_id=#{buildingId} and pump_id=#{deviceAddr} and pump_name=#{deviceName}") + void updatePressure(String buildingId, String deviceAddr, String value, String deviceName); + + @Update("update now_data set pressure_set=#{value} where building_id=#{buildingId} and pump_id=#{deviceAddr} and pump_name=#{deviceName}") + void updatePressureSet(String buildingId, String deviceAddr, String value, String deviceName); + + @Update("" + ) + void updateBoxLevel(String buildingId, String deviceAddr, String value, String deviceName, int isSingleBox); + + @Update("" + ) + void updateBoxLevelSet(String buildingId, String deviceAddr, String value, String deviceName, int isSingleBox); + + @Update("update now_data set level_set=#{value} where building_id=#{buildingId} and pump_id=#{deviceAddr} and pump_name=#{deviceName}") + void updateSingleBoxLevelSet(String buildingId, String deviceAddr, String value, String deviceName); + + @Update("update now_data set up_water_state=#{value} where building_id=#{buildingId} and pump_id=#{deviceAddr} and pump_name=#{deviceName}") + void updateUpWaterState(String buildingId, String deviceAddr, String value, String deviceName); + + @Update("update now_data set use_water_state=#{value} where building_id=#{buildingId} and pump_id=#{deviceAddr} and pump_name=#{deviceName}") + void updateUseWaterState(String buildingId, String deviceAddr, String value, String deviceName); + + @Update("update now_data set back_water_state=#{value} where building_id=#{buildingId} ") + void updateBackWaterState(Long buildingId, String value); + + @Update("update now_data set back_control_model=#{value} where building_id=#{buildingId} and pump_id=#{deviceAddr} and pump_name=#{deviceName}") + void updateBackControlModel(String buildingId, String deviceAddr, String value, String deviceName); } diff --git a/user-service/src/main/java/com/mh/user/model/MultiControlModel.java b/user-service/src/main/java/com/mh/user/model/MultiControlModel.java index 0323e3c..01ef26d 100644 --- a/user-service/src/main/java/com/mh/user/model/MultiControlModel.java +++ b/user-service/src/main/java/com/mh/user/model/MultiControlModel.java @@ -32,13 +32,22 @@ public class MultiControlModel { private int upValveRunState; //补水电磁阀运行状态 1:运行;0:停止 + private int backValveSingleRunState; //回水单箱电磁阀运行状态 1:运行;0:停止 + + private int backValveDoubleRunState; //回水双箱电磁阀运行状态 1:运行;0:停止 + + private int backElectricValveDoubleRunState; //回水多箱电动阀运行状态 1:运行;0:停止 + private int gwRunState; // 网关运行状态 标志位(连接状态) 0:正常;1:不在线;2:异常 + private int backControlMode; //回水运行模式 0:单箱,1:双箱 + private String pumpName; //水泵名称 private String pumpId; //水泵编号 private String tempSet; //温度设置 - private String waterTemp; //当前温度 - private String waterLevel; //水位 + private String waterTemp; //当前温度 + private String waterLevel; //水位 + private String levelSet; //水位设置 private String isFault; //是否故障 private String pumpRunState; //运行状态 diff --git a/user-service/src/main/java/com/mh/user/service/impl/CollectionParamsManageServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/CollectionParamsManageServiceImpl.java index 43f7052..33c299b 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/CollectionParamsManageServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/impl/CollectionParamsManageServiceImpl.java @@ -352,6 +352,7 @@ public class CollectionParamsManageServiceImpl implements CollectionParamsManage case "回水泵": return createBackPumpControlVO(dlEntry, dlItems, parentDto); case "电动阀": + case "多箱电动阀": return createElectricValveControlVO(dlEntry, dlItems, parentDto); case "单箱电磁阀": case "多箱电磁阀": 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 3433f30..c282339 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 @@ -105,6 +105,17 @@ public class NowDataServiceImpl implements NowDataService { case "补水电磁阀": multiControlModel.setUpValveRunState(Integer.parseInt(nowDataEntity.getRunState())); break; + case "单箱电磁阀": + multiControlModel.setBackValveSingleRunState(Integer.parseInt(nowDataEntity.getRunState())); + multiControlModel.setBackControlMode(Integer.parseInt(nowDataEntity.getBackControlMode())); + break; + case "多箱电磁阀": + multiControlModel.setBackValveDoubleRunState(Integer.parseInt(nowDataEntity.getRunState())); + multiControlModel.setBackControlMode(Integer.parseInt(nowDataEntity.getBackControlMode())); + break; + case "多箱电动阀": + multiControlModel.setBackElectricValveDoubleRunState(Integer.parseInt(nowDataEntity.getRunState())); + break; } } @@ -112,10 +123,17 @@ public class NowDataServiceImpl implements NowDataService { List devices = deviceInstallMapper.selectOfflineDevice(buildingId, "多路控制"); if (!devices.isEmpty()) { DeviceInstallEntity deviceInstallEntity = devices.get(0); - int online = gatewayManageMapper.queryGatewayByDataCom(deviceInstallEntity.getDataCom()); + Integer online = gatewayManageMapper.queryGatewayByDataCom(deviceInstallEntity.getDataCom()); + if (online == null) { + online = 2; + } multiControlModel.setGwRunState(online); + } else { + // list stream流遍历cur_date是否是今天 + boolean isToday = list.stream() + .anyMatch(nowDataEntity -> DateUtil.isToday(DateUtil.stringToDate(nowDataEntity.getCurDate(), "yyyy-MM-dd HH:mm:ss"))); + multiControlModel.setGwRunState(isToday ? 0 : 1); // 0: online, 1: offline } - // 在进行遍历,获取包含热泵的对应数据 list.stream() .filter(nowDataEntity -> nowDataEntity.getPumpName() != null && nowDataEntity.getPumpName().contains("热泵")) @@ -133,6 +151,11 @@ public class NowDataServiceImpl implements NowDataService { } else { multiControlModel1.setWaterLevel("离线"); } + if (!StringUtils.isBlank(nowDataEntity.getLevelSet())) { + multiControlModel1.setLevelSet(nowDataEntity.getLevelSet()); + } else { + multiControlModel1.setLevelSet("--"); + } result.add(multiControlModel1); }); // result再根据热泵名称的数字进行排序 @@ -492,10 +515,14 @@ public class NowDataServiceImpl implements NowDataService { .forEach(nowDataEntity -> nowDataEntity.setPressure(pressureValue)); String dataCom = pump.getDataCom(); if (!StringUtils.isBlank(dataCom)) { - int gwState = gatewayManageMapper.queryGatewayByDataCom(dataCom); + Integer gwState = gatewayManageMapper.queryGatewayByDataCom(dataCom); + if (gwState == null) { + gwState = 2; + } + Integer finalGwState = gwState; nowDataEntities.stream() .filter(nowDataEntity -> buildingId.equals(nowDataEntity.getBuildingId())) - .forEach(nowDataEntity -> nowDataEntity.setGwState(gwState == 0 ? "在线" : "离线")); + .forEach(nowDataEntity -> nowDataEntity.setGwState(finalGwState == 0 ? "在线" : "离线")); } break; } diff --git a/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttConfig.java b/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttConfig.java index 071b90f..3c3f864 100644 --- a/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttConfig.java +++ b/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttConfig.java @@ -25,6 +25,7 @@ import java.util.Map; @Configuration @Data @ConfigurationProperties +@ConditionalOnProperty(prefix = "mqttSpring", name = "enabled", havingValue = "true", matchIfMissing = true) public class MqttConfig { private static Map mqttSpring; diff --git a/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttInboundConfig.java b/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttInboundConfig.java index b64e24d..ba1b328 100644 --- a/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttInboundConfig.java +++ b/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttInboundConfig.java @@ -29,7 +29,7 @@ import javax.annotation.Resource; @Slf4j @Configuration @IntegrationComponentScan -@ConditionalOnProperty(name = "mqtt.enabled", havingValue = "true", matchIfMissing = false) +@ConditionalOnProperty(prefix = "mqttSpring", name = "enabled", havingValue = "true", matchIfMissing = true) public class MqttInboundConfig { @Autowired diff --git a/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttMessageChannel.java b/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttMessageChannel.java index a3322e3..f2f492d 100644 --- a/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttMessageChannel.java +++ b/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttMessageChannel.java @@ -2,6 +2,7 @@ package com.mh.user.service.mqtt.config; import com.mh.user.constants.ChannelName; import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.integration.channel.DirectChannel; @@ -16,6 +17,7 @@ import org.springframework.messaging.MessageChannel; */ @Slf4j @Configuration +@ConditionalOnProperty(prefix = "mqttSpring", name = "enabled", havingValue = "true", matchIfMissing = true) public class MqttMessageChannel { @Bean(name = ChannelName.OUTBOUND) diff --git a/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttOutboundConfig.java b/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttOutboundConfig.java index 8cbb472..1be538b 100644 --- a/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttOutboundConfig.java +++ b/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttOutboundConfig.java @@ -23,7 +23,7 @@ import org.springframework.messaging.MessageHandler; @Slf4j @Configuration @IntegrationComponentScan -@ConditionalOnProperty(name = "mqtt.enabled", havingValue = "true", matchIfMissing = false) +@ConditionalOnProperty(prefix = "mqttSpring", name = "enabled", havingValue = "true", matchIfMissing = true) public class MqttOutboundConfig { @Autowired diff --git a/user-service/src/main/java/com/mh/user/service/mqtt/handler/InboundMessageRouter.java b/user-service/src/main/java/com/mh/user/service/mqtt/handler/InboundMessageRouter.java index d17bacb..98dc9f2 100644 --- a/user-service/src/main/java/com/mh/user/service/mqtt/handler/InboundMessageRouter.java +++ b/user-service/src/main/java/com/mh/user/service/mqtt/handler/InboundMessageRouter.java @@ -6,6 +6,7 @@ import com.mh.user.constants.TopicEnum; import com.mh.user.utils.SpringContextUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.integration.annotation.Router; import org.springframework.integration.mqtt.support.MqttHeaders; import org.springframework.integration.router.AbstractMessageRouter; @@ -27,6 +28,7 @@ import java.util.Objects; */ @Slf4j @Component +@ConditionalOnProperty(prefix = "mqttSpring", name = "enabled", havingValue = "true", matchIfMissing = true) public class InboundMessageRouter extends AbstractMessageRouter { /** 系统基础配置 */ diff --git a/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/EventsServiceImpl.java b/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/EventsServiceImpl.java index 0ca729c..c3ab68a 100644 --- a/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/EventsServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/EventsServiceImpl.java @@ -24,6 +24,7 @@ import io.netty.util.CharsetUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.messaging.MessageHeaders; import org.springframework.stereotype.Service; @@ -50,6 +51,7 @@ import java.util.concurrent.atomic.AtomicInteger; */ @Slf4j @Service +@ConditionalOnProperty(prefix = "mqttSpring", name = "enabled", havingValue = "true", matchIfMissing = true) public class EventsServiceImpl implements IEventsService { @Autowired diff --git a/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttGatewayServiceImpl.java b/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttGatewayServiceImpl.java index 73e935c..9a0dc5d 100644 --- a/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttGatewayServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttGatewayServiceImpl.java @@ -2,6 +2,7 @@ package com.mh.user.service.mqtt.service.impl; import com.mh.user.service.mqtt.service.IMqttGatewayService; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.integration.mqtt.support.MqttHeaders; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.support.MessageBuilder; @@ -15,6 +16,7 @@ import org.springframework.stereotype.Service; * @date 2025-02-07 08:44:55 */ @Service +@ConditionalOnProperty(prefix = "mqttSpring", name = "enabled", havingValue = "true", matchIfMissing = true) public class MqttGatewayServiceImpl implements IMqttGatewayService { private final MessageChannel outboundChannel; diff --git a/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttManagerServiceImpl.java b/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttManagerServiceImpl.java index 94425d8..b19576d 100644 --- a/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttManagerServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttManagerServiceImpl.java @@ -17,7 +17,7 @@ import org.springframework.stereotype.Service; */ @Slf4j @Service -@ConditionalOnProperty(name = "mqtt.enabled", havingValue = "true", matchIfMissing = false) +@ConditionalOnProperty(prefix = "mqttSpring", name = "enabled", havingValue = "true", matchIfMissing = true) public class MqttManagerServiceImpl implements IMqttManagerService { @Autowired diff --git a/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttMsgSenderServiceImpl.java b/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttMsgSenderServiceImpl.java index 01e1a49..41d40d3 100644 --- a/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttMsgSenderServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttMsgSenderServiceImpl.java @@ -10,6 +10,7 @@ import com.mh.user.service.mqtt.service.IMqttGatewayService; import com.mh.user.service.mqtt.service.IMqttMsgSenderService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -25,6 +26,7 @@ import java.util.UUID; */ @Slf4j @Service +@ConditionalOnProperty(prefix = "mqttSpring", name = "enabled", havingValue = "true", matchIfMissing = true) public class MqttMsgSenderServiceImpl implements IMqttMsgSenderService { @Autowired diff --git a/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttTopicServiceImpl.java b/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttTopicServiceImpl.java index 29ce785..512135c 100644 --- a/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttTopicServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttTopicServiceImpl.java @@ -2,6 +2,7 @@ package com.mh.user.service.mqtt.service.impl; import com.mh.user.service.mqtt.service.IMqttTopicService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter; import org.springframework.stereotype.Service; @@ -15,6 +16,7 @@ import javax.annotation.Resource; * @date 2024-10-29 17:36:31 */ @Service +@ConditionalOnProperty(prefix = "mqttSpring", name = "enabled", havingValue = "true", matchIfMissing = true) public class MqttTopicServiceImpl implements IMqttTopicService { @Resource diff --git a/user-service/src/main/resources/application-dev.yml b/user-service/src/main/resources/application-dev.yml index 82a03ab..8a1d4ca 100644 --- a/user-service/src/main/resources/application-dev.yml +++ b/user-service/src/main/resources/application-dev.yml @@ -110,10 +110,10 @@ logging: amap: key: 984603bf28ef94ac78765a3ea27a6c26 -mqtt: - enabled: true # mqtt服务器地址 mqttSpring: + # 是否启用MQTT,默认false + enabled: false # BASIC parameters are required. BASIC: protocol: MQTT diff --git a/user-service/src/main/resources/application-prod.yml b/user-service/src/main/resources/application-prod.yml index 1d9f994..4e2e995 100644 --- a/user-service/src/main/resources/application-prod.yml +++ b/user-service/src/main/resources/application-prod.yml @@ -169,6 +169,8 @@ mqtt: enabled: true mqttSpring: + # 是否启用MQTT,默认false + enabled: false # BASIC parameters are required. BASIC: protocol: MQTT diff --git a/user-service/src/main/resources/application-test.yml b/user-service/src/main/resources/application-test.yml index b82f11c..4feefb1 100644 --- a/user-service/src/main/resources/application-test.yml +++ b/user-service/src/main/resources/application-test.yml @@ -1,51 +1,39 @@ +# 项目相关配置 +mh: + # 名称 + name: dev + # 版本 + version: 1.0.0 + # 版权年份 + copyrightYear: 2025 + # 文件路径 示例( Windows配置D:/mh/uploadPath,Linux配置 /home/mh/uploadPath) + profile: D:/mh/uploadPath + # 获取ip地址开关 + addressEnabled: false + # 验证码类型 math 数字计算 char 字符验证 + captchaType: math server: - port: 8761 #8761创新、8762广商、8763华厦、广州理工 + port: 8762 #8761创新、8762广商、8763华厦、广州理工 spring: + application: + name: user-service datasource: name: druidDataSource type: com.alibaba.druid.pool.DruidDataSource druid: #添加allowMultiQueries=true 在批量更新时才不会出错 - # url: jdbc:sqlserver://192.168.1.108:2012;DatabaseName=FSBG;allowMultiQueries=true + url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=chws_gr;allowMultiQueries=true;encrypt=false + driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver + username: sa + password: mh@803 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=chws_chx;allowMultiQueries=true;encrypt=false # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver # username: sa # password: mh@803 - ## url: jdbc:sqlserver://120.25.220.177:32012;DatabaseName=M_CHWS;allowMultiQueries=true - #阿里云服务器-广州理工 - # url: jdbc:sqlserver://120.25.220.177:32012;DatabaseName=CHWS;allowMultiQueries=true - # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - # username: test - # password: minghan123456@ - #华厦云服务器 - # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=CHWS;allowMultiQueries=true + # url: jdbc:sqlserver://119.29.33.133:2008;DatabaseName=chws_gsh;allowMultiQueries=true;encrypt=false # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver # username: chws - # password: minghan123456@ - #创新服务器 -# url: jdbc:sqlserver://119.29.33.133:2008;DatabaseName=chws_chx;allowMultiQueries=true -# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver -# username: chws -# password: mh@803 - #广商服务器 - # url: jdbc:sqlserver://119.29.33.133:2008;DatabaseName=chws_gsh;allowMultiQueries=true - # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - # username: chws - # password: mh@803 - #本机 - # url: jdbc:sqlserver://127.0.0.1:9956;DatabaseName=CHWS;allowMultiQueries=true - # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - # username: sa - # password: mh@803 - #家里电脑 - # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=CHWS;allowMultiQueries=true - # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - # username: sa # password: mh@803 -# 测试 - url: jdbc:sqlserver://106.55.173.225:57238;DatabaseName=test;allowMultiQueries=true - driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - username: test - password: Ming@ratuo123!! filters: stat,wall,config max-active: 100 @@ -65,8 +53,8 @@ spring: config: fail-fast: false # 是否启用配置中心 - enabled: ${SPRING_CLOUD_CONFIG_ENABLED:false} -# # 配置中心地址 + enabled: false + # 配置中心地址 # uri: ${SPRING_CLOUD_CONFIG_URI:http://localhost:8763} # redis: # database: 0 @@ -107,26 +95,46 @@ spring: #files: # path: ${file-path:d:/files} -log: - level: - root: info - my: debug - file: - maxsize: 30MB - #设置将SQL语句打印到控制台 level后面是 mybatis接口目录 logging: - # level: - # com: - # mh: - # user: - # mapper: DEBUG + level: + com: + mh: + user: + mapper: DEBUG file: max-size: 30 + path: logs/${spring.application.name} ##软件最后更新日期20230111 - amap: key: 984603bf28ef94ac78765a3ea27a6c26 + # mqtt服务器地址 +mqttSpring: + # 是否启用MQTT,默认false + enabled: false + # BASIC parameters are required. + BASIC: + protocol: MQTT + host: 192.168.1.79 + port: 1883 + username: test + password: test123456 + client-id: chws_nfxy_mqtt_dev + # If the protocol is ws/wss, this value is required. + path: + # Topics that need to be subscribed when initially connecting to mqtt, multiple topics are divided by ",". + inbound-topic: chws_nfxy_mqtt_dev/read/events_upload/devices + # 此部分是提供给后端生成token返回给前端,让前端使用websocket方式去和MQTT实现交互的,笔者此文的案例中并没有去实现 + # 无人机远程控制模式(drone remote control) + DRC: + protocol: WS + host: 192.168.1.79 + port: 8083 + path: /mqtt +control: + topic: mh_control/events_control/devices + +