Browse Source

1、北师大设备监接口编写;

2、多路控制代码优化;
3、07规约电表兼容;
dev
25604 6 days ago
parent
commit
202dd5061b
  1. 2
      user-service/src/main/java/com/mh/user/constants/Constant.java
  2. 97
      user-service/src/main/java/com/mh/user/controller/NowDataController.java
  3. 2
      user-service/src/main/java/com/mh/user/job/DealDataJob.java
  4. 2
      user-service/src/main/java/com/mh/user/mapper/DeviceInstallMapper.java
  5. 3
      user-service/src/main/java/com/mh/user/mapper/GatewayManageMapper.java
  6. 45
      user-service/src/main/java/com/mh/user/mapper/NowDataMapper.java
  7. 55
      user-service/src/main/java/com/mh/user/model/MultiControlModel.java
  8. 23
      user-service/src/main/java/com/mh/user/serialport/SerialPortThread.java
  9. 7
      user-service/src/main/java/com/mh/user/service/NowDataService.java
  10. 14
      user-service/src/main/java/com/mh/user/service/impl/ControlSetServiceImpl.java
  11. 6
      user-service/src/main/java/com/mh/user/service/impl/DeviceCodeParamServiceImpl.java
  12. 76
      user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java
  13. 13
      user-service/src/main/java/com/mh/user/strategy/EleMeterStrategy.java
  14. 84
      user-service/src/main/java/com/mh/user/strategy/MultiControlStrategy.java
  15. 5
      user-service/src/main/java/com/mh/user/strategy/PressureTransStrategy.java
  16. 3
      user-service/src/main/java/com/mh/user/tcp/SendAndReceiveByTcp.java
  17. 33
      user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java
  18. 6
      user-service/src/main/resources/application-dev.yml
  19. 28
      user-service/src/main/resources/application-prod.yml
  20. 2
      user-service/src/main/resources/application.yml
  21. 1
      user-service/src/test/java/com/mh/user/UserServiceApplicationTests.java

2
user-service/src/main/java/com/mh/user/constants/Constant.java

@ -41,6 +41,8 @@ public class Constant {
public static final String BRAND_RU_YI = "汝翊";
public static final String BRAND_MEI_YI = "美仪";
public static final String BRAND_MEI_DI = "美的";
public static final String BRAND_MEI_DI_TWO = "美的2";

97
user-service/src/main/java/com/mh/user/controller/NowDataController.java

@ -5,6 +5,7 @@ import com.mh.user.annotation.BusinessType;
import com.mh.user.annotation.SysLogger;
import com.mh.user.entity.*;
import com.mh.user.model.DeviceModel;
import com.mh.user.model.MultiControlModel;
import com.mh.user.model.PumpModel;
import com.mh.user.model.WaterLevelModel;
import com.mh.user.service.*;
@ -107,6 +108,102 @@ public class NowDataController {
}
}
@SysLogger(title = "实时监控", optDesc = "实时查看每楼栋多路控制运行情况")
@PostMapping("/queryMultiNow")
public HttpResult queryMultiNowData(@RequestParam(value = "buildingId") String buildingId) {
try {
//把热泵的水温保存到公共信息中中的用水温度和回水温度
String avgWaterTemp = nowDataService.selectAve(buildingId);
String maxWaterTemp = nowDataService.selectMaxTemp(buildingId);
String buildingName = buildingService.queryBuildingName(buildingId);//获取楼栋名称
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String curDate = sdf1.format(date);
curDate = curDate.substring(0, 13) + ":00:00";
NowPublicDataEntity nowPublicData = new NowPublicDataEntity();
nowPublicData.setBuildingId(buildingId);
nowPublicData.setBuildingName(buildingName);
if (avgWaterTemp != null) {
nowPublicData.setBackWaterTemp(avgWaterTemp);
} else {
nowPublicData.setBackWaterTemp("0");
}
if (maxWaterTemp != null) {
nowPublicData.setUseWaterTemp(maxWaterTemp);
} else {
nowPublicData.setUseWaterTemp("0");
}
nowPublicDataService.saveNowHistoryPublicData(nowPublicData);
//监视表生成初始记录
List<NowDataEntity> list = nowDataService.queryNowData(buildingId);
if (list.isEmpty()) {//实时表生成记录
List<DeviceModel> deviceList = deviceInstallService.selectDevices(buildingId, "多路控制");
if (!deviceList.isEmpty()) {
for (DeviceModel list2 : deviceList) {
NowDataEntity nowData = new NowDataEntity();
nowData.setPumpId(list2.getDeviceAddr());
nowData.setPumpName("1号供水泵");
nowData.setBuildingId(buildingId);
nowData.setBuildingName(buildingName);
nowData.setRunState("0");
nowData.setIsFault("0");
nowData.setCurDate(curDate);
nowDataService.saveNowData(nowData); //当前状态表
nowDataService.saveHistoryData(nowData); //历史状态表
nowData.setPumpId(list2.getDeviceAddr());
nowData.setPumpName("2号供水泵");
nowData.setBuildingId(buildingId);
nowData.setBuildingName(buildingName);
nowData.setRunState("0");
nowData.setIsFault("0");
nowData.setCurDate(curDate);
nowDataService.saveNowData(nowData); //当前状态表
nowDataService.saveHistoryData(nowData); //历史状态表
nowData.setPumpId(list2.getDeviceAddr());
nowData.setPumpName("1号抽水泵");
nowData.setBuildingId(buildingId);
nowData.setBuildingName(buildingName);
nowData.setRunState("0");
nowData.setIsFault("0");
nowData.setCurDate(curDate);
nowDataService.saveNowData(nowData); //当前状态表
nowDataService.saveHistoryData(nowData); //历史状态表
nowData.setPumpId(list2.getDeviceAddr());
nowData.setPumpName("2号抽水泵");
nowData.setBuildingId(buildingId);
nowData.setBuildingName(buildingName);
nowData.setRunState("0");
nowData.setIsFault("0");
nowData.setCurDate(curDate);
nowDataService.saveNowData(nowData); //当前状态表
nowDataService.saveHistoryData(nowData); //历史状态表
nowData.setPumpId(list2.getDeviceAddr());
nowData.setPumpName("补水电磁阀");
nowData.setBuildingId(buildingId);
nowData.setBuildingName(buildingName);
nowData.setRunState("0");
nowData.setIsFault("0");
nowData.setCurDate(curDate);
nowDataService.saveNowData(nowData); //当前状态表
nowDataService.saveHistoryData(nowData); //历史状态表
}
}
}
List<MultiControlModel> resultList = nowDataService.queryMultiControlNowData(buildingId);
return HttpResult.ok(resultList);
} catch (Exception e) {
log.error("查询当前监控状态出错!", e);
return HttpResult.error("查询当前监控状态出错!");
}
}
@SysLogger(title = "实时监控", optDesc = "分别查看热泵运行情况")
@PostMapping("/queryNowByPump")
public HttpResult queryNowByPump(@RequestParam(value = "buildingId") String buildingId, @RequestParam(value = "pumpId") String pumpId) {

2
user-service/src/main/java/com/mh/user/job/DealDataJob.java

@ -74,7 +74,7 @@ public class DealDataJob {
* 采集
*/
@Scheduled(cron = "35 0/2 * * * ?")
// @Scheduled(cron = "0/10 * * * * ?") 0 0/5 * * * ?
// @Scheduled(cron = "0 0/1 * * * ?")
// @Scheduled(cron = "0 0/5 * * * ?") //5分钟
public void collect() {
try {

2
user-service/src/main/java/com/mh/user/mapper/DeviceInstallMapper.java

@ -87,7 +87,7 @@ public interface DeviceInstallMapper extends BaseMapper<DeviceInstallEntity> {
List<DeviceInstallEntity> selectDeviceParams();
@ResultMap("rs")
@Select("select * from device_install where device_type='热泵' or device_type='水位开关' ")
@Select("select * from device_install where device_type='热泵' or device_type='水位开关' or device_type = '多路控制' ")
List<DeviceInstallEntity> selectDeviceParams2();
//查询需要手动开关机的热泵

3
user-service/src/main/java/com/mh/user/mapper/GatewayManageMapper.java

@ -112,4 +112,7 @@ public interface GatewayManageMapper {
// 根据设备IMEI更新设备在线状态
@Update("update gateway_manage set grade = #{status}, connect_date = getdate() where imei = #{imei}")
void updateGatewayManageOnlineByImei(String imei, int status);
@Select("select top 1 grade from gateway_manage where data_com = #{dataCom} ")
int queryGatewayByDataCom(@Param("dataCom") String dataCom);
}

45
user-service/src/main/java/com/mh/user/mapper/NowDataMapper.java

@ -518,4 +518,49 @@ public interface NowDataMapper {
@Delete("delete from now_data where pump_id=#{pumpId} and building_id=#{buildingId}")
void deleteNowDataByDeviceAddr(@Param("pumpId") String pumpId,
@Param("buildingId") String buildingId);
@Select("select count(1) from now_data where pump_name like concat('%',#{pumpName},'%') " +
" and building_id=#{buildingId} " +
" and pump_id=#{deviceAddr}")
int selectNowDataByPumName(@Param("buildingId") String buildingId, @Param("deviceAddr") String deviceAddr, @Param("pumpName") String pumpName);
//查询监控界面实时信息
@Results(id="rsd",value = {
@Result(property="curDate",column="cur_date"),
@Result(property="buildingId",column="building_id"),
@Result(property="buildingName",column="building_name"),
@Result(property="pumpId",column="pump_id"),
@Result(property ="pumpName",column ="pump_name"),
@Result(property ="tempSet",column ="temp_set"),
@Result(property="waterTemp",column="water_temp"),
@Result(property ="runState",column ="run_state"),
@Result(property ="upWaterState",column ="up_water_state"),
@Result(property ="useWaterState",column ="use_water_state"),
@Result(property ="backWaterState",column ="back_water_state"),
@Result(property ="isFault",column ="is_fault"),
@Result(property ="levelSet",column ="level_set"),
@Result(property ="waterLevel",column ="water_level"),
@Result(property ="tankId",column ="tank_id"),
@Result(property ="tankName",column ="tank_name"),
@Result(property ="envTemp",column ="env_temp")
})
@Select("select * from now_data where pump_name like concat('%',#{pumpName},'%') " +
"and building_id= #{buildingId} " +
"and pump_id= #{deviceAddr}")
NowDataEntity queryNowDataByPumpName(@Param("buildingId") String buildingId, @Param("deviceAddr") String deviceAddr, @Param("pumpName") String pumpName);
@Update("<script>" +
" update now_data set cur_date=getDate()" +
" <if test='buildingName!=null and buildingName != \"\"'> , building_name = #{buildingName} </if>" +
" <if test='tempSet!=null and tempSet != \"\"'> , temp_set = #{tempSet} </if>" +
" <if test='waterTemp!=null and waterTemp != \"\"'> , water_temp = #{waterTemp} </if>" +
" <if test='runState!=null and runState != \"\"'> , run_state = #{runState} </if>" +
" <if test='isFault!=null and isFault != \"\"'> , is_fault = #{isFault} </if>" +
" <if test='levelSet!=null and levelSet != \"\"'> , level_set = #{levelSet} </if>" +
" <if test='waterLevel!=null and waterLevel != \"\"'> , water_level = #{waterLevel} </if>" +
" <if test='tankId!=null and tankId != \"\"'> , tank_id = #{tankId} </if>" +
" <if test='tankName!=null and tankName != \"\"'> , tank_name = #{tankName} </if>" +
" where building_id = #{buildingId} and pump_id = #{pumpId} and pump_name = #{pumpName} " +
"</script>")
void updateMultiNowData(NowDataEntity nowDataEntity);
}

55
user-service/src/main/java/com/mh/user/model/MultiControlModel.java

@ -0,0 +1,55 @@
package com.mh.user.model;
import lombok.Getter;
import lombok.Setter;
import java.util.StringJoiner;
/**
* @author LJF
* @version 1.0
* @project CHWS
* @description 多路控制响应实体类
* @date 2025-11-20 08:46:22
*/
@Setter
@Getter
public class MultiControlModel {
private String curDate; //日期
private String buildingId; //楼栋编号
private String buildingName; //楼栋名称
private int upPumpRunStateOne; //1号供水泵运行状态 1:运行;0:停止
private int upPumpIsFaultOne; //1号供水泵故障状态 1:有故障;0:无故障
private int upPumpRunStateTwo; //2号供水泵运行状态 1:运行;0:停止
private int upPumpIsFaultTwo; //2号供水泵故障状态 1:有故障;0:无故障
private int suctionPumpRunStateOne; //1号抽水泵运行状态 1:运行;0:停止
private int suctionPumpIsFaultOne; //1号抽水泵故障状态 1:有故障;0:无故障
private int suctionPumpRunStateTwo; //2号抽水泵运行状态 1:运行;0:停止
private int suctionPumpIsFaultTwo; //2号抽水泵故障状态 1:有故障;0:无故障
private int upValveRunState; //补水电磁阀运行状态 1:运行;0:停止
private int gwRunState; // 网关运行状态 标志位(连接状态) 0:正常;1:不在线;2:异常
@Override
public String toString() {
return new StringJoiner(", ", MultiControlModel.class.getSimpleName() + "[", "]")
.add("curDate='" + curDate + "'")
.add("buildingId='" + buildingId + "'")
.add("buildingName='" + buildingName + "'")
.add("upPumpRunStateOne=" + upPumpRunStateOne)
.add("upPumpIsFaultOne=" + upPumpIsFaultOne)
.add("upPumpRunStateTwo=" + upPumpRunStateTwo)
.add("upPumpIsFaultTwo=" + upPumpIsFaultTwo)
.add("suctionPumpRunStateOne=" + suctionPumpRunStateOne)
.add("suctionPumpIsFaultOne=" + suctionPumpIsFaultOne)
.add("suctionPumpRunStateTwo=" + suctionPumpRunStateTwo)
.add("suctionPumpIsFaultTwo=" + suctionPumpIsFaultTwo)
.add("upValveRunState=" + upValveRunState)
.add("gwRunState=" + gwRunState)
.toString();
}
}

23
user-service/src/main/java/com/mh/user/serialport/SerialPortThread.java

@ -1,5 +1,6 @@
package com.mh.user.serialport;
import com.mh.common.utils.StringUtils;
import com.mh.user.constants.Constant;
import com.mh.user.entity.GatewayManageEntity;
import com.mh.user.tcp.SendAndReceiveByTcp;
@ -38,14 +39,18 @@ public class SerialPortThread implements Runnable{
this.countDownLatch = countDownLatch;
}
public void run(){
public void run() {
log.info("创建发送接收数据线程>>>>>>>>>>>>>>" + thread);
try {
// 增加判断是什么通讯类型:realCom、tcp
CacheUtil instance = CacheUtil.getInstance();
List<GatewayManageEntity> gwList = instance.getGatewayInfo();
if (gwList != null && !gwList.isEmpty()) {
for (GatewayManageEntity gw : gwList) {
if (gw.getDataCom().toUpperCase().equals("COM"+thread)) {
if (StringUtils.isBlank(gw.getDataCom())) {
continue;
}
if (gw.getDataCom().toUpperCase().equals("COM" + thread)) {
String communityType = gw.getCommunityType();
if (Constant.COMMUNITY_TYPE_REAL_COM.equals(communityType)) {
SendAndReceiveByCom sendAndReceiveByCom = new SendAndReceiveByCom();
@ -53,9 +58,8 @@ public class SerialPortThread implements Runnable{
sendAndReceiveByCom.sendAndReceive(name, thread);
} catch (Exception e) {
log.error("串口通信发生异常: ", e);
} finally {
this.countDownLatch.countDown();
}
return; // 找到并处理后直接返回
} else if (Constant.COMMUNITY_TYPE_TCP.equals(communityType)) {
// 开始TCP通信
SendAndReceiveByTcp sendAndReceiveByTcp = new SendAndReceiveByTcp();
@ -63,13 +67,18 @@ public class SerialPortThread implements Runnable{
sendAndReceiveByTcp.sendAndReceive(name, thread, gw.getHeartBeat());
} catch (Exception e) {
log.error("TCP通信发生异常: ", e);
} finally {
this.countDownLatch.countDown();
}
return; // 找到并处理后直接返回
}
}
}
}
} finally {
// 确保无论如何都会执行 countDown
if (this.countDownLatch != null) {
this.countDownLatch.countDown();
}
}
}
}

7
user-service/src/main/java/com/mh/user/service/NowDataService.java

@ -2,6 +2,7 @@ package com.mh.user.service;
import com.mh.user.annotation.SysLogger;
import com.mh.user.entity.*;
import com.mh.user.model.MultiControlModel;
import com.mh.user.model.WaterLevelModel;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@ -147,5 +148,11 @@ public interface NowDataService {
void updateNowPublicData(NowPublicDataEntity publicData);
void updatePumpName(String oldPumpId, String oldPumpName, String oldBuildingId, String pumpId, String pumpName, String buildingId, String buildingName);
NowDataEntity queryNowDataByPumpName(String buildingId, String buildingName, String deviceAddr, String deviceName);
List<MultiControlModel> queryMultiControlNowData(String buildingId);
void updateMultiNowData(NowDataEntity nowDataEntity);
}

14
user-service/src/main/java/com/mh/user/service/impl/ControlSetServiceImpl.java

@ -3,6 +3,7 @@ package com.mh.user.service.impl;
import com.mh.common.utils.StringUtils;
import com.mh.user.entity.ControlSetEntity;
import com.mh.user.mapper.ControlSetMapper;
import com.mh.user.mapper.DeviceInstallMapper;
import com.mh.user.service.ControlSetService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -13,6 +14,9 @@ public class ControlSetServiceImpl implements ControlSetService {
@Autowired
ControlSetMapper controlSetMapper;
@Autowired
DeviceInstallMapper deviceInstallMapper;
@Override
public void saveControlSet(ControlSetEntity controlSetEntity) {
@ -33,8 +37,16 @@ public class ControlSetServiceImpl implements ControlSetService {
}
if (timeName.contains("时控")) {
timeName = timeName.replaceAll("时控","");
timeName = timeName + "时控";
} else if (timeName.contains("多路控制")) {
// 判断安装信息有没有deviceType='多路控制'
String deviceAddr = deviceInstallMapper.selectDeviceAddr("多路控制", buildingId);
if (StringUtils.isBlank(deviceAddr)) {
return null;
}
return new ControlSetEntity();
}
ControlSetEntity controlSetEntity = controlSetMapper.queryControlSet(buildingId, timeName + "时控");
ControlSetEntity controlSetEntity = controlSetMapper.queryControlSet(buildingId, timeName);
if (null == controlSetEntity) {
controlSetEntity = controlSetMapper.queryControlSet(buildingId, timeName + "温控");
}

6
user-service/src/main/java/com/mh/user/service/impl/DeviceCodeParamServiceImpl.java

@ -64,18 +64,24 @@ public class DeviceCodeParamServiceImpl implements DeviceCodeParamService {
@Override
public void insertDeviceCodeParamList(List<DeviceCodeParamEntity> deviceCodeParamEntityList) {
if(!deviceCodeParamEntityList.isEmpty()){
deviceCodeParamMapper.insertDeviceCodeParamList(deviceCodeParamEntityList);
}
}
@Override
public void insertDeviceCodeParamList2(List<DeviceCodeParamEntity> deviceCodeParamEntityList) {
if(!deviceCodeParamEntityList.isEmpty()){
deviceCodeParamMapper.insertDeviceCodeParamList2(deviceCodeParamEntityList);
}
}
@Override
public void insertDeviceCodeParamList3(List<DeviceCodeParamEntity> deviceCodeParamEntityList) {
if(!deviceCodeParamEntityList.isEmpty()){
deviceCodeParamMapper.insertDeviceCodeParamList3(deviceCodeParamEntityList);
}
}
@Override
public void selectInsertDeviceCodeParam() {

76
user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java

@ -5,6 +5,7 @@ import com.mh.user.constants.Constant;
import com.mh.user.entity.*;
import com.mh.user.mapper.*;
import com.mh.user.model.DeviceModel;
import com.mh.user.model.MultiControlModel;
import com.mh.user.model.PumpModel;
import com.mh.user.model.WaterLevelModel;
import com.mh.user.service.BuildingService;
@ -14,14 +15,12 @@ import com.mh.user.service.NowDataService;
import com.mh.user.utils.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.locks.ReentrantLock;
@Slf4j
@ -54,6 +53,75 @@ public class NowDataServiceImpl implements NowDataService {
ReentrantLock lockB = new ReentrantLock();
@Autowired
private AreaMapper areaMapper;
@Qualifier("gatewayManageMapper")
@Autowired
private GatewayManageMapper gatewayManageMapper;
@Override
public void updateMultiNowData(NowDataEntity nowDataEntity) {
nowDataMapper.updateMultiNowData(nowDataEntity);
}
@Override
public List<MultiControlModel> queryMultiControlNowData(String buildingId) {
List<NowDataEntity> list = nowDataMapper.queryNowData(buildingId);
if (list.isEmpty()) {
return Collections.emptyList();
}
// list stream遍历,通过pumpName进行匹配,其中1号供水泵分别赋值
List<MultiControlModel> result = new ArrayList<>();
MultiControlModel multiControlModel = new MultiControlModel();
multiControlModel.setBuildingId(buildingId);
multiControlModel.setBuildingName(list.get(0).getBuildingName());
multiControlModel.setCurDate(list.get(0).getCurDate());
for (NowDataEntity nowDataEntity : list) {
switch (nowDataEntity.getPumpName()) {
case "1号供水泵":
multiControlModel.setUpPumpRunStateOne(Integer.parseInt(nowDataEntity.getRunState()));
multiControlModel.setUpPumpIsFaultOne(Integer.parseInt(nowDataEntity.getIsFault()));
break;
case "2号供水泵":
multiControlModel.setUpPumpRunStateTwo(Integer.parseInt(nowDataEntity.getRunState()));
multiControlModel.setUpPumpIsFaultTwo(Integer.parseInt(nowDataEntity.getIsFault()));
break;
case "1号抽水泵":
multiControlModel.setSuctionPumpRunStateOne(Integer.parseInt(nowDataEntity.getRunState()));
// multiControlModel.setSuctionPumpIsFaultOne(Integer.parseInt(nowDataEntity.getIsFault()));
break;
case "2号抽水泵":
multiControlModel.setSuctionPumpRunStateTwo(Integer.parseInt(nowDataEntity.getRunState()));
multiControlModel.setSuctionPumpIsFaultTwo(Integer.parseInt(nowDataEntity.getIsFault()));
break;
case "补水电磁阀":
multiControlModel.setUpValveRunState(Integer.parseInt(nowDataEntity.getRunState()));
break;
}
}
// 在判断网关在线情况
List<DeviceInstallEntity> devices = deviceInstallMapper.selectOfflineDevice(buildingId, "多路控制");
if (!devices.isEmpty()) {
DeviceInstallEntity deviceInstallEntity = devices.get(0);
int online = gatewayManageMapper.queryGatewayByDataCom(deviceInstallEntity.getDataCom());
multiControlModel.setGwRunState(online);
}
result.add(multiControlModel);
return result;
}
@Override
public NowDataEntity queryNowDataByPumpName(String buildingId, String buildingName, String deviceAddr, String deviceName) {
int count = nowDataMapper.selectNowDataByPumName(buildingId,deviceAddr,deviceName);
if (count==0){
NowDataEntity nowDataEntity = new NowDataEntity();
nowDataEntity.setPumpId(deviceAddr);
nowDataEntity.setPumpName(deviceName);
nowDataEntity.setBuildingId(buildingId);
nowDataEntity.setBuildingName(buildingName);
nowDataMapper.saveNowData(nowDataEntity);
return nowDataEntity;
}
return nowDataMapper.queryNowDataByPumpName(buildingId,deviceAddr,deviceName);
}
@Override
public void saveNowData(NowDataEntity nowDataEntity) {

13
user-service/src/main/java/com/mh/user/strategy/EleMeterStrategy.java

@ -59,6 +59,19 @@ public class EleMeterStrategy implements DeviceStrategy {
// }
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord;
} if ("广仪07规约".equals(deviceCodeParamEntity.getBrand())) {
//0代表前面补充0,12代表长度为12,d代表参数为正数型,基表通讯号
str = String.format("%012d", Long.parseLong(deviceAddr));
//转换位置
str = ExchangeStringUtil.changePosition(str);
//拼接功能码
str = "68" + str + "681104";
String strData = "00000100";
//加33操作
str = str + ExchangeStringUtil.addThree(strData);
//检验和
String checkSum = ExchangeStringUtil.makeChecksum(str);
str = "FEFEFE" + str + checkSum + "16";
} else {
//0代表前面补充0,12代表长度为12,d代表参数为正数型,基表通讯号
str = String.format("%012d", Long.parseLong(deviceAddr));

84
user-service/src/main/java/com/mh/user/strategy/MultiControlStrategy.java

@ -2,16 +2,16 @@ package com.mh.user.strategy;
import com.mh.common.utils.StringUtils;
import com.mh.user.constants.Constant;
import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.entity.NowPublicDataEntity;
import com.mh.user.entity.SysParamEntity;
import com.mh.user.entity.*;
import com.mh.user.service.*;
import com.mh.user.utils.ExchangeStringUtil;
import com.mh.user.utils.SpringBeanUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -59,6 +59,14 @@ public class MultiControlStrategy implements DeviceStrategy {
// 设备参数
String param = deviceCodeParamEntity.getParam();
if (StringUtils.isBlank(param)) {
if ("0010".equals(registerAddr)) {
param = "DO_ALL";
} else if ("0018".equals(registerAddr)) {
param = "DI_ALL";
}
}
// 设备值
String dataValue = deviceCodeParamEntity.getDataValue();
@ -73,6 +81,7 @@ public class MultiControlStrategy implements DeviceStrategy {
if (!StringUtils.isBlank(param)) {
switch (param) {
case "DO_ALL":
deviceCodeParamEntity.setRegisterAddr("0018");
registerAddr = "00180008";
break;
case "DO1":
@ -100,6 +109,7 @@ public class MultiControlStrategy implements DeviceStrategy {
registerAddr = "001F0001";
break;
case "DI_ALL":
deviceCodeParamEntity.setRegisterAddr("0010");
registerAddr = "00100008";
break;
case "DI1":
@ -213,7 +223,7 @@ public class MultiControlStrategy implements DeviceStrategy {
// 多路控制,长度42,128
public String analysisRelayOrder485(final String dateStr,
final String receiveData,
final String receiveData1,
final String registerAddr,
final String brand,
String buildingId,
@ -231,12 +241,27 @@ public class MultiControlStrategy implements DeviceStrategy {
String waterLevelSet = "";
String addr = "";
String param = deviceCodeParamEntity.getParam();
String receiveData = receiveData1;
if (receiveData1.length() > 42) {
receiveData = receiveData1.substring(0, 42);
}
if (Constant.BRAND_YUAN_XIANG.equals(brand)) {
String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文
String checkWord = ExchangeStringUtil.getStrCRC16(checkStr);
if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) {
addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址
if (checkStr.startsWith("03", 2)) {
// 判断响应的长度有多长
int length = receiveData.length();
if (length == 42) {
if (deviceCodeParamEntity.getRegisterAddr().equals("0010")) {
param = "DI_ALL";
} else if (deviceCodeParamEntity.getRegisterAddr().equals("0018")) {
param = "DO_ALL";
} else {
param = "DI_ALL";
}
}
// 根据请求的param参数进行数据截取
switch (param) {
case "DI_ALL":
@ -269,11 +294,6 @@ public class MultiControlStrategy implements DeviceStrategy {
l1 = checkStr.substring(6, 10);
break;
}
if (!param.contains("ALL")) {
return l1;
} else {
return l1 + l2 + l3 + l4 + l5 + l6 + l7 + l8;
}
} else if (checkStr.startsWith("06", 2) || checkStr.startsWith("04", 2) || checkStr.startsWith("10", 2)) {
log.info("时间:{},多路控制地址:{},DO操作成功! ", dateStr, addr);
return Constant.SUCCESS;
@ -303,9 +323,10 @@ public class MultiControlStrategy implements DeviceStrategy {
nowPublicDataService.saveNowHistoryPublicData(publicData);
log.info("地址:{},供回补水状态保存数据库成功!楼栋ID:{},名称:{}", addr, buildingId, buildingName);
// 更新now_data表中对应的供水、回水、补水状态
DeviceInstallEntity deviceInstallEntity = deviceInstallService.selectDevice(addr, "多路控制", buildingId);
DeviceInstallEntity deviceInstallEntity = deviceInstallService.selectDevice(addr, "水位开关", buildingId);
if (deviceInstallEntity != null
&& !StringUtils.isBlank(deviceInstallEntity.getDeviceName())) {
// 判断设备类型是什么类型数据
if (deviceInstallEntity.getDeviceName().contains("低")) {
log.info("更新now_data表中低区对应的供水、回水、补水状态,楼栋ID:{},供水状态:{},回水状态:{},补水状态:{}", buildingId, publicData.getUseWater(), publicData.getBackWater(), publicData.getUpWater());
nowDataService.updateNowDataByPumpName("低", buildingId, publicData.getUseWater(), publicData.getBackWater(), publicData.getUpWater());
@ -324,9 +345,48 @@ public class MultiControlStrategy implements DeviceStrategy {
}
nowDataService.updateNowPublicData(publicData);
}
deviceInstallEntity = deviceInstallService.selectDevice(addr, "多路控制", buildingId);
if (deviceInstallEntity != null
&& !StringUtils.isBlank(deviceInstallEntity.getDeviceName())) {
// 查看是否存在1号供水泵、2号供水泵、1号抽水泵、2号抽水泵、补水电磁阀
NowDataEntity nowDataEntity = nowDataService.queryNowDataByPumpName(buildingId, buildingName, deviceInstallEntity.getDeviceAddr(), "1号供水泵");
// 多路控制,分别插入或者更新DI点和DO点值
if (receiveData.length() == 42) {
// l1 l2 l3 l4 l5 l6 l7 l8形成一个key,value
if (param.equals("DI_ALL")) {
nowDataEntity.setRunState(l1);
nowDataEntity.setIsFault(l3);
nowDataService.updateMultiNowData(nowDataEntity);
nowDataEntity = nowDataService.queryNowDataByPumpName(buildingId, buildingName, deviceInstallEntity.getDeviceAddr(), "2号供水泵");
nowDataEntity.setRunState(l2);
nowDataEntity.setIsFault(l4);
nowDataService.updateMultiNowData(nowDataEntity);
nowDataEntity = nowDataService.queryNowDataByPumpName(buildingId, buildingName, deviceInstallEntity.getDeviceAddr(), "1号抽水泵");
nowDataEntity.setRunState(l5);
nowDataService.updateMultiNowData(nowDataEntity);
nowDataEntity = nowDataService.queryNowDataByPumpName(buildingId, buildingName, deviceInstallEntity.getDeviceAddr(), "2号抽水泵");
nowDataEntity.setRunState(l6);
nowDataEntity.setIsFault(l8);
nowDataService.updateMultiNowData(nowDataEntity);
nowDataEntity = nowDataService.queryNowDataByPumpName(buildingId, buildingName, deviceInstallEntity.getDeviceAddr(), "补水电磁阀");
nowDataEntity.setRunState(l7);
nowDataService.updateMultiNowData(nowDataEntity);
}
// if (param.equals("DO_ALL")) {
// nowDataEntity = nowDataService.queryNowDataByPumpName(buildingId, buildingName, deviceInstallEntity.getDeviceAddr(), "补水电磁阀");
// nowDataEntity.setRunState(l5);
// nowDataService.updateMultiNowData(nowDataEntity);
// }
}
nowDataService.updateNowPublicData(publicData);
}
}
}
return Constant.FAIL;
if (!param.contains("ALL")) {
return l1;
} else {
return l1 + l2 + l3 + l4 + l5 + l6 + l7 + l8;
}
}
return l1;
}

5
user-service/src/main/java/com/mh/user/strategy/PressureTransStrategy.java

@ -54,6 +54,8 @@ public class PressureTransStrategy implements DeviceStrategy {
str = str + "0300040001"; // 新款压力变送器
} else if (Constant.BRAND_RU_YI.equals(brand)) {
str = str + "0300040001";
} else if (Constant.BRAND_MEI_YI.equals(brand)) {
str = str + "0304040002"; // 压力输出值
} else {
str = str + "0300000002"; // 压力变送器(新的协议)
}
@ -85,6 +87,9 @@ public class PressureTransStrategy implements DeviceStrategy {
} else if (Constant.BRAND_AU_SUN.equals(brand) || Constant.BRAND_RU_YI.equals(brand)) {
data = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10));//十六进制转整形
wtHeight = Double.parseDouble(data) / 100 * 0.102; //通过压力求水高
} else if (Constant.BRAND_MEI_YI.equals(brand)) {
data = ExchangeStringUtil.hexToDec(checkStr.substring(6, 14));//十六进制转整形
wtHeight = Double.parseDouble(data);
}
Double tankHeight;
// 默认是高区域

3
user-service/src/main/java/com/mh/user/tcp/SendAndReceiveByTcp.java

@ -114,7 +114,7 @@ public class SendAndReceiveByTcp {
continue;
}
// 处理返回来的数据报文
dealReceiveData(dateStr, keyVal, i, deviceAddr, deviceType, registerAddr, brand, buildingId, buildingName, receiveMsg, device, null);
dealReceiveData(dateStr, keyVal, i, deviceAddr, deviceType, registerAddr, brand, buildingId, buildingName, receiveMsg, device, deviceManageEntityList.get(i));
} else {
log.error("没有找到心跳包数据:{}", heartBeat);
}
@ -122,6 +122,7 @@ public class SendAndReceiveByTcp {
log.error("发送窗口数据异常==>", e);
}
}
log.info("----------------{}采集完成----------------", sort);
} catch (Exception e) {
log.error("-------------串口采集异常!----------->>", e);
}

33
user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java

@ -1045,6 +1045,39 @@ public class GetReadOrder485 {
deviceCodeParamEntityList.add(deviceCodeParamEntity2);
}
}
if (devices.getDeviceType().equals("多路控制")) {
if (Constant.BRAND_YUAN_XIANG.equals(devices.getBrand())) {
DeviceCodeParamEntity deviceCodeParamEntity2 = new DeviceCodeParamEntity();
deviceCodeParamEntity2.setRegisterAddr("0018");//DO点:读多路启停状态
deviceCodeParamEntity2.setFunCode("03");
deviceCodeParamEntity2.setDeviceAddr(devices.getDeviceAddr());
deviceCodeParamEntity2.setDeviceName(devices.getDeviceName());
deviceCodeParamEntity2.setDeviceType(devices.getDeviceType());
deviceCodeParamEntity2.setBaudrate(devices.getBaudRate());
deviceCodeParamEntity2.setBrand(devices.getBrand());
deviceCodeParamEntity2.setDataCom(devices.getDataCom());
// 只获取字符串数字
deviceCodeParamEntity2.setThread(ExchangeStringUtil.getNumFromString(devices.getDataCom()));
deviceCodeParamEntity2.setBuildingId(devices.getBuildingId());
deviceCodeParamEntity2.setParity(devices.getParity());
deviceCodeParamEntityList.add(deviceCodeParamEntity2);
DeviceCodeParamEntity deviceCodeParamEntity4 = new DeviceCodeParamEntity();
deviceCodeParamEntity4.setRegisterAddr("0010");//DI点:读取多路运行故障状态
deviceCodeParamEntity4.setFunCode("03");
deviceCodeParamEntity4.setDeviceAddr(devices.getDeviceAddr());
deviceCodeParamEntity4.setDeviceName(devices.getDeviceName());
deviceCodeParamEntity4.setDeviceType(devices.getDeviceType());
deviceCodeParamEntity4.setBaudrate(devices.getBaudRate());
deviceCodeParamEntity4.setBrand(devices.getBrand());
deviceCodeParamEntity4.setDataCom(devices.getDataCom());
// 只获取字符串数字
deviceCodeParamEntity4.setThread(ExchangeStringUtil.getNumFromString(devices.getDataCom()));
deviceCodeParamEntity4.setBuildingId(devices.getBuildingId());
deviceCodeParamEntity4.setParity(devices.getParity());
deviceCodeParamEntityList.add(deviceCodeParamEntity4);
}
}
deviceCodeParamService.insertDeviceCodeParamList3(deviceCodeParamEntityList);
}
}

6
user-service/src/main/resources/application-dev.yml

@ -8,10 +8,14 @@ spring:
type: com.alibaba.druid.pool.DruidDataSource
druid:
#添加allowMultiQueries=true 在批量更新时才不会出错
url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=chws_chx;allowMultiQueries=true
url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=chws_bsdz;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_hx;allowMultiQueries=true
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# username: sa
# 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

28
user-service/src/main/resources/application-prod.yml

@ -1,5 +1,5 @@
server:
port: 8762 #8761创新、8762广商、8763华厦、广州理工,华粤8762,广外8764
port: 8762 #8761创新、8762广商、8763华厦、广州理工,华粤8762,广外8764,北师大(珠海)8762
spring:
application:
name: user-service
@ -19,20 +19,20 @@ spring:
# username: test
# password: minghan123456@
# #华厦云服务器
url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=CHWS;allowMultiQueries=true
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
username: chws
password: minghan123456@
# url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=CHWS;allowMultiQueries=true
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# username: chws
# password: minghan123456@
#创新服务器
# url: jdbc:sqlserver://106.55.173.225:57238;DatabaseName=chws_chx;allowMultiQueries=true
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# username: chws_gsh
# password: Mhtech@803
# #广商服务器
# url: jdbc:sqlserver://106.55.173.225:57238;DatabaseName=chws_gsh;allowMultiQueries=true
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# username: chws_gsh
# password: Mhtech@803
#广商服务器
url: jdbc:sqlserver://175.178.153.91:8033;DatabaseName=chws_gsh;allowMultiQueries=true
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
username: chws_gsh
password: Mhtech@803gsh
#本机
# url: jdbc:sqlserver://127.0.0.1:9956;DatabaseName=CHWS;allowMultiQueries=true
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
@ -58,12 +58,18 @@ spring:
# username: chws_gw
# password: chws_gw@803
# 华软江门
# # 华软江门
# url: jdbc:sqlserver://127.0.0.1:57238;DatabaseName=chws_jm;allowMultiQueries=true
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# username: chws_jm
# password: Mhtech@803
# # 华软江门
# url: jdbc:sqlserver://127.0.0.1:8033;DatabaseName=chws_bsdz;allowMultiQueries=true
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# username: chws_bsdz
# password: Mhtech@803803
filters: stat,wall,config
max-active: 100
initial-size: 1

2
user-service/src/main/resources/application.yml

@ -1,3 +1,3 @@
spring:
profiles:
active: prod
active: dev

1
user-service/src/test/java/com/mh/user/UserServiceApplicationTests.java

@ -124,6 +124,7 @@ class UserServiceApplicationTests {
"59",
"46栋",
"30030200E105C8",
null
);
}

Loading…
Cancel
Save