Browse Source

1、代码优化;2、楼栋编辑增加热泵个数参数;

prod_202403
mh 6 months ago
parent
commit
3adb86d86f
  1. 10
      user-service/src/main/java/com/mh/user/constants/Constant.java
  2. 8
      user-service/src/main/java/com/mh/user/controller/BuildingController.java
  3. 4
      user-service/src/main/java/com/mh/user/controller/DeviceOperateController.java
  4. 1
      user-service/src/main/java/com/mh/user/entity/BuildingEntity.java
  5. 6
      user-service/src/main/java/com/mh/user/mapper/BuildingMapper.java
  6. 132
      user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java
  7. 13
      user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java
  8. 8
      user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java
  9. 17
      user-service/src/main/java/com/mh/user/service/impl/NowDataServiceImpl.java
  10. 11
      user-service/src/main/java/com/mh/user/service/impl/NowPublicDataServiceImpl.java
  11. 202
      user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java
  12. 92
      user-service/src/main/java/com/mh/user/utils/GetReadOrder485.java
  13. 151
      user-service/src/main/java/com/mh/user/utils/SendOrderUtils.java
  14. 21
      user-service/src/test/java/com/mh/user/TestJwtUtils.java

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

@ -40,6 +40,16 @@ public class Constant {
public static final String BRAND_MEI_DI_TWO = "美的2"; public static final String BRAND_MEI_DI_TWO = "美的2";
public static final String BRAND_RUI_XING = "瑞星";
public static final String BRAND_YUAN_XIANG = "远向";
public static final String BRAND_DING_WEI = "顶威";
public static final String BRAND_ZHONG_KAI = "中凯";
private static final String RUNNING = "运行";
private static final String NOT_RUNNING = "不运行";
} }

8
user-service/src/main/java/com/mh/user/controller/BuildingController.java

@ -172,6 +172,12 @@ public class BuildingController {
case 6 : case 6 :
rolName = "实际入住数"; rolName = "实际入住数";
break; break;
case 7 :
rolName = "水箱高度";
break;
case 8 :
rolName = "热泵个数";
break;
} }
if ((rol >= 1)&&(rol <= 4)&&(sCell.equals(""))){ if ((rol >= 1)&&(rol <= 4)&&(sCell.equals(""))){
msg = rolName + "不能为空" ; msg = rolName + "不能为空" ;
@ -189,6 +195,8 @@ public class BuildingController {
uploadEntity.setHouseCount(Integer.parseInt(deviceList.get(3))); //每层宿舍数 uploadEntity.setHouseCount(Integer.parseInt(deviceList.get(3))); //每层宿舍数
uploadEntity.setBedCount(Integer.parseInt(deviceList.get(4))); //床位数 uploadEntity.setBedCount(Integer.parseInt(deviceList.get(4))); //床位数
uploadEntity.setCheckInCount(Integer.parseInt(deviceList.get(5))); //实际入住数 uploadEntity.setCheckInCount(Integer.parseInt(deviceList.get(5))); //实际入住数
uploadEntity.setTankHeight(Double.parseDouble(deviceList.get(6))); //实际入住数
uploadEntity.setPumpCount(Integer.parseInt(deviceList.get(7))); //实际入住数
deviceList.clear(); deviceList.clear();

4
user-service/src/main/java/com/mh/user/controller/DeviceOperateController.java

@ -49,7 +49,7 @@ public class DeviceOperateController {
public HttpResult operateDevice(@RequestBody List<SerialPortModel> params) { public HttpResult operateDevice(@RequestBody List<SerialPortModel> params) {
try { try {
Constant.WEB_FLAG = true; //单抄,暂时停止采集 Constant.WEB_FLAG = true; //单抄,暂时停止采集
Thread.sleep(800); Thread.sleep(1000);
String returnStr = deviceControlService.readOrWriteDevice(params, Constant.WRITE); String returnStr = deviceControlService.readOrWriteDevice(params, Constant.WRITE);
if (!StringUtils.isBlank(returnStr) && "fail".equals(returnStr)) { if (!StringUtils.isBlank(returnStr) && "fail".equals(returnStr)) {
return HttpResult.error(500, "fail"); return HttpResult.error(500, "fail");
@ -71,7 +71,7 @@ public class DeviceOperateController {
public HttpResult readData(@RequestBody List<SerialPortModel> params) { public HttpResult readData(@RequestBody List<SerialPortModel> params) {
try { try {
Constant.WEB_FLAG = true; //单抄,暂时停止采集 Constant.WEB_FLAG = true; //单抄,暂时停止采集
Thread.sleep(800); Thread.sleep(1000);
String rtData = deviceControlService.readOrWriteDevice(params, Constant.READ); String rtData = deviceControlService.readOrWriteDevice(params, Constant.READ);
if (ExchangeStringUtil.getJSONType(rtData)) { if (ExchangeStringUtil.getJSONType(rtData)) {
Map map = JSONObject.parseObject(rtData); Map map = JSONObject.parseObject(rtData);

1
user-service/src/main/java/com/mh/user/entity/BuildingEntity.java

@ -16,5 +16,6 @@ public class BuildingEntity {
private String areaId; private String areaId;
private String remarks; private String remarks;
private Double tankHeight; private Double tankHeight;
private int pumpCount;
} }

6
user-service/src/main/java/com/mh/user/mapper/BuildingMapper.java

@ -15,8 +15,8 @@ public interface BuildingMapper {
* 保存楼栋信息 * 保存楼栋信息
* @param buildingEntity * @param buildingEntity
*/ */
@Insert("insert into building(building_name,levels_count,begin_level,house_count,bed_count,check_in_count,area_id,remarks,tankHeight) values (" + @Insert("insert into building(building_name,levels_count,begin_level,house_count,bed_count,check_in_count,area_id,remarks,tankHeight,pump_count) values (" +
"#{buildingName},#{levelsCount},#{beginLevel},#{houseCount},#{bedCount},#{checkInCount},#{areaId},#{remarks},#{tankHeight})") "#{buildingName},#{levelsCount},#{beginLevel},#{houseCount},#{bedCount},#{checkInCount},#{areaId},#{remarks},#{tankHeight}, #{pumpCount})")
int saveBuilding(BuildingEntity buildingEntity); int saveBuilding(BuildingEntity buildingEntity);
/** /**
@ -35,6 +35,7 @@ public interface BuildingMapper {
" <if test='areaId!=null'> , area_id = #{areaId} </if>" + " <if test='areaId!=null'> , area_id = #{areaId} </if>" +
" <if test='remarks!=null'> , remarks = #{remarks} </if>" + " <if test='remarks!=null'> , remarks = #{remarks} </if>" +
" <if test='tankHeight!=null'> , tankHeight = #{tankHeight} </if>" + " <if test='tankHeight!=null'> , tankHeight = #{tankHeight} </if>" +
" <if test='pumpCount!=null'> , pump_count = #{pumpCount} </if>" +
" where id = #{id} " + " where id = #{id} " +
"</script>") "</script>")
int updateBuilding(BuildingEntity buildingEntity); int updateBuilding(BuildingEntity buildingEntity);
@ -55,6 +56,7 @@ public interface BuildingMapper {
@Result(property ="bedCount",column ="bed_count"), @Result(property ="bedCount",column ="bed_count"),
@Result(property="checkInCount",column="check_in_count"), @Result(property="checkInCount",column="check_in_count"),
@Result(property="areaId",column="area_id"), @Result(property="areaId",column="area_id"),
@Result(property="pumpCount",column="pump_count"),
@Result(property="remarks",column="remarks") @Result(property="remarks",column="remarks")
}) })

132
user-service/src/main/java/com/mh/user/serialport/SerialPortSendReceive2.java

@ -26,16 +26,9 @@ import java.util.stream.Collectors;
*/ */
@Slf4j @Slf4j
public class SerialPortSendReceive2 { public class SerialPortSendReceive2 {
private String receiveStr = null;
// public SerialPort serialPort = null;
private int size = 0;
private int baudrate = 9600;
private String parity = null;
List<DeviceCodeParamEntity> deviceManageEntityList; List<DeviceCodeParamEntity> deviceManageEntityList;
// 调用service // 调用service
ApplicationContext context = SpringBeanUtil.getApplicationContext(); ApplicationContext context = SpringBeanUtil.getApplicationContext();
DeviceCodeParamService deviceCodeParamService = context.getBean(DeviceCodeParamService.class);
DeviceInstallService deviceInstallService = context.getBean(DeviceInstallService.class); DeviceInstallService deviceInstallService = context.getBean(DeviceInstallService.class);
NowDataService nowDataService = context.getBean(NowDataService.class); NowDataService nowDataService = context.getBean(NowDataService.class);
BuildingService buildingService = context.getBean(BuildingService.class); BuildingService buildingService = context.getBean(BuildingService.class);
@ -54,8 +47,8 @@ public class SerialPortSendReceive2 {
.filter(value -> value.getThread().equals(thread)) .filter(value -> value.getThread().equals(thread))
.sorted(Comparator.comparing(DeviceCodeParamEntity::getDataCom)) .sorted(Comparator.comparing(DeviceCodeParamEntity::getDataCom))
.collect(Collectors.toList()); .collect(Collectors.toList());
// size = deviceManageEntityList.size(); int size = deviceManageEntityList.size();
for (int i = 0; i < deviceManageEntityList.size(); i++) { for (int i = 0; i < size; i++) {
//判断网页端是否有操作设备的 //判断网页端是否有操作设备的
if (Constant.WEB_FLAG) { if (Constant.WEB_FLAG) {
if (serialPort != null) { if (serialPort != null) {
@ -65,13 +58,12 @@ public class SerialPortSendReceive2 {
break; break;
} }
//获取设备实际波特率 //获取设备实际波特率
baudrate = deviceManageEntityList.get(i).getBaudrate(); int baudrate = deviceManageEntityList.get(i).getBaudrate();
//获取设备实际校验位 //获取设备实际校验位
parity = deviceManageEntityList.get(i).getParity(); String parity = deviceManageEntityList.get(i).getParity();
String comName = deviceManageEntityList.get(i).getDataCom(); String comName = deviceManageEntityList.get(i).getDataCom();
if (StringUtils.isBlank(comName)) { if (StringUtils.isBlank(comName)) {
Constant.FLAG = false;//可以采集的状态
log.info("-------------串口:" + comName + "不存在!-------------"); log.info("-------------串口:" + comName + "不存在!-------------");
continue; continue;
} }
@ -83,27 +75,36 @@ public class SerialPortSendReceive2 {
String buildingName = buildingService.queryBuildingName(buildingId); //查询楼栋名称 String buildingName = buildingService.queryBuildingName(buildingId); //查询楼栋名称
try { try {
//传入对应的串口参数并打开串口 //传入对应的串口参数并打开串口
if (parity == null || parity.equals("") || parity.equalsIgnoreCase("none")) { if (StringUtils.isBlank(parity) || parity.equalsIgnoreCase("none")) {
serialPort = SerialTool.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); serialPort = SerialTool.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
} else { } else {
serialPort = SerialTool.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_EVEN); serialPort = SerialTool.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_EVEN);
} }
if (null == serialPort) {
continue;
}
//向串口发送指令 //向串口发送指令
if (serialPort != null) { String sendStr = SendOrderUtils.getSendStr(deviceManageEntityList.get(i));
// log.info("---------波特率:"+baudrate+",校验位:"+parity+" -----------"); SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceType);
String sendStr = SendOrderUtils.getSendStr(deviceManageEntityList.get(i)); if (deviceType.equals("热泵")) {
SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceType); for (int j = 0; j < 4; j++) {
if (deviceType.equals("热泵")) { Thread.sleep(1000);
Thread.sleep(4000); // 判断网页端是否有操作设备的
} else { if (Constant.WEB_FLAG) {
Thread.sleep(2000); SerialTool.closePort(serialPort);
log.info("有指令下发退出定时采集");
break;
}
} }
} else { } else {
continue; Thread.sleep(2000);
} }
} catch (Exception e) { } catch (Exception e) {
Constant.FLAG = false;//可以采集的状态 if (null != serialPort) {
log.error("发送窗口数据异常==>", e); SerialTool.closePort(serialPort);
log.error("发送窗口数据异常==>", e);
}
continue;
} }
//从串口读取数据 //从串口读取数据
@ -112,9 +113,8 @@ public class SerialPortSendReceive2 {
String dateStr = DateUtil.dateToString(date1, "yyyy-MM-dd HH:mm:ss"); String dateStr = DateUtil.dateToString(date1, "yyyy-MM-dd HH:mm:ss");
if (bytes == null) { if (bytes == null) {
SerialTool.closePort(serialPort); SerialTool.closePort(serialPort);
log.info("串口" + serialPort + "没有数据返回!" + i); log.info("串口" + serialPort.getName() + "没有数据返回!" + i);
log.info("----------------" + deviceType + "离线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------"); log.info("----------------" + deviceType + "离线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------");
Constant.FLAG = false;//可以采集的状态
String time1 = deviceInstallService.selectLastDate(deviceType, deviceAddr, buildingId); String time1 = deviceInstallService.selectLastDate(deviceType, deviceAddr, buildingId);
if (time1 == null) { if (time1 == null) {
time1 = dateStr; time1 = dateStr;
@ -130,9 +130,14 @@ public class SerialPortSendReceive2 {
} }
// 处理返回来的数据报文 // 处理返回来的数据报文
dealReceiveData(dateStr, serialPort, i, deviceAddr, deviceType, registerAddr, brand, buildingId, buildingName, bytes); dealReceiveData(dateStr, serialPort, i, deviceAddr, deviceType, registerAddr, brand, buildingId, buildingName, bytes);
try {
SerialTool.closePort(serialPort);
log.info("关闭串口==" + serialPort.getName());
} catch (Exception e) {
log.error("关闭串口失败!", e);
}
} }
} catch (Exception e) { } catch (Exception e) {
Constant.FLAG = false;//可以采集的状态
log.error("-------------串口采集异常!----------->>", e); log.error("-------------串口采集异常!----------->>", e);
} }
} }
@ -159,45 +164,37 @@ public class SerialPortSendReceive2 {
String registerAddr, String registerAddr,
String brand, String brand,
String buildingId, String buildingId,
String buildingName, byte[] bytes) throws InterruptedException { String buildingName, byte[] bytes) {
receiveStr = "";
receiveStr = ExchangeStringUtil.parseByte2HexStr(bytes);
//去掉空格和null
receiveStr = receiveStr.replace("null", "");
receiveStr = receiveStr.replace(" ", "");
log.info("串口" + serialPort + "接受第" + i + "数据:" + receiveStr + ",大小: " + receiveStr.length());
try { try {
SerialTool.closePort(serialPort); String receiveStr = "";
log.info("关闭" + serialPort); receiveStr = ExchangeStringUtil.parseByte2HexStr(bytes);
} catch (Exception e) { //去掉空格和null
Constant.WEB_FLAG = false;//可以采集的状态 receiveStr = receiveStr.replace("null", "");
log.error("关闭" + serialPort + "失败!", e); receiveStr = receiveStr.replace(" ", "");
} log.info("串口" + serialPort + "接受第" + i + "数据:" + receiveStr + ",大小: " + receiveStr.length());
//返回值全部变成大写 //返回值全部变成大写
String receiveData = receiveStr.toUpperCase(); String receiveData = receiveStr.toUpperCase();
//截取去掉FE //截取去掉FE
String dataStr; String dataStr;
if (receiveData.length() > 8) { if (receiveData.length() > 8) {
String str1 = receiveData.substring(0, 8); String str1 = receiveData.substring(0, 8);
String str2 = receiveData.substring(8); String str2 = receiveData.substring(8);
dataStr = str1.replace("FE", "") + str2; dataStr = str1.replace("FE", "") + str2;
} else { } else {
dataStr = receiveData.replace("FE", ""); dataStr = receiveData.replace("FE", "");
} }
deviceInstallService.updateOnline(deviceAddr, deviceType, buildingId, "在线"); //设备在线 deviceInstallService.updateOnline(deviceAddr, deviceType, buildingId, "在线"); //设备在线
log.info("----------------" + deviceType + "在线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------"); log.info("----------------" + deviceType + "在线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------");
if (deviceType.equals("热泵")) { if (deviceType.equals("热泵")) {
String strState = nowDataService.selectState(buildingId, deviceAddr); String strState = nowDataService.selectState(buildingId, deviceAddr);
if (strState != null && strState.equals("离线")) { //采集到数据 if (strState != null && strState.equals("离线")) { //采集到数据
nowDataService.updateRunState(buildingId, deviceAddr, "不运行", buildingName); //监控界面状态表热泵在线状态 nowDataService.updateRunState(buildingId, deviceAddr, "不运行", buildingName); //监控界面状态表热泵在线状态
}
} }
}
try {
// 解析返回来的数据 // 解析返回来的数据
analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, dataStr, analysisReceiveOrder485, nowDataService, buildingName); analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, dataStr, analysisReceiveOrder485, nowDataService, buildingName);
} catch (Exception e) { } catch (Exception e) {
Constant.WEB_FLAG = false;//可以采集的状态 log.error("楼栋:" + buildingName + "设备类型:" + deviceType + "保存数据库失败!" + i,e);
log.error(deviceManageEntityList.get(i).getDeviceType() + "保存数据库失败!" + i,e);
} }
} }
@ -224,7 +221,9 @@ public class SerialPortSendReceive2 {
} else if (deviceType.equals("时控")) { } else if (deviceType.equals("时控")) {
analysisReceiveOrder485.analysisTimeSetOrder485(dateStr,dataStr, registerAddr, brand, buildingId, buildingName); analysisReceiveOrder485.analysisTimeSetOrder485(dateStr,dataStr, registerAddr, brand, buildingId, buildingName);
} else if (deviceType.equals("水位开关") && (Constant.REG_ADDR_0018.equals(registerAddr) || Constant.REG_ADDR_0017.equals(registerAddr))) { } else if (deviceType.equals("水位开关") && (Constant.REG_ADDR_0018.equals(registerAddr) || Constant.REG_ADDR_0017.equals(registerAddr))) {
analysisReceiveOrder485.analysisRelayOrder485(dateStr ,dataStr, registerAddr, brand, buildingId, buildingName); SysParamEntity sysParamEntity = sysParamService.selectSysParam();
String customName = sysParamEntity.getCustomName();
analysisReceiveOrder485.analysisRelayOrder485(dateStr ,dataStr, registerAddr, brand, buildingId, buildingName, customName);
} else if (dataStr.length() == 30 && deviceType.equals("状态检测")) {//五路状态读取,兼容旧版系统 } else if (dataStr.length() == 30 && deviceType.equals("状态检测")) {//五路状态读取,兼容旧版系统
analysisReceiveOrder485.analysisStateOrder485(dataStr, registerAddr, brand, buildingId, buildingName); analysisReceiveOrder485.analysisStateOrder485(dataStr, registerAddr, brand, buildingId, buildingName);
} else if (deviceType.equals("水位开关") && Constant.REG_ADDR_0010.equals(registerAddr)) { } else if (deviceType.equals("水位开关") && Constant.REG_ADDR_0010.equals(registerAddr)) {
@ -240,10 +239,11 @@ public class SerialPortSendReceive2 {
String buildingId, String buildingName, AnalysisReceiveOrder485 analysisReceiveOrder485) { String buildingId, String buildingName, AnalysisReceiveOrder485 analysisReceiveOrder485) {
log.info("进入水位开关,地址==>{}", registerAddr); log.info("进入水位开关,地址==>{}", registerAddr);
SysParamEntity sysParamEntity = sysParamService.selectSysParam(); SysParamEntity sysParamEntity = sysParamService.selectSysParam();
if (null != sysParamEntity && !StringUtils.isBlank(sysParamEntity.getCustomName())) { String customName = sysParamEntity.getCustomName();
if (sysParamEntity.getCustomName().contains(Constant.CUSTOM_NAME_HUAXIA) if (!StringUtils.isBlank(customName)) {
|| sysParamEntity.getCustomName().contains(Constant.CUSTOM_NAME_GUANGSHANG)) { if (customName.contains(Constant.CUSTOM_NAME_HUAXIA)
analysisReceiveOrder485.analysisRelayOrder485(dateStr, dataStr,registerAddr,brand,buildingId, buildingName); || customName.contains(Constant.CUSTOM_NAME_GUANGSHANG)) {
analysisReceiveOrder485.analysisRelayOrder485(dateStr, dataStr,registerAddr,brand,buildingId, buildingName, customName);
} else { } else {
analysisReceiveOrder485.analysisPumpStateOrder(dateStr, dataStr, registerAddr, brand, buildingId, buildingName); analysisReceiveOrder485.analysisPumpStateOrder(dateStr, dataStr, registerAddr, brand, buildingId, buildingName);
} }

13
user-service/src/main/java/com/mh/user/serialport/SerialPortSingle2.java

@ -75,15 +75,6 @@ public class SerialPortSingle2 {
log.info("单抄串口" + serialPort + "异常,没有数据返回!关闭串口", e); log.info("单抄串口" + serialPort + "异常,没有数据返回!关闭串口", e);
return "fail"; return "fail";
} }
// //对返回数据进行相关解析处理
// byte[] bytes = SerialTool.readFromPort(serialPort); //读取串口数据
// if (null == bytes) {
// SerialTool.closePort(serialPort);
// log.info("单抄串口" + serialPort + "异常,没有数据返回!关闭串口");
// return "fail";
// }
// String receiveStr = null;
// receiveStr = ExchangeStringUtil.printHexString(bytes);
String receiveStr; String receiveStr;
if (serialPort != null) { if (serialPort != null) {
receiveStr = CacheTools.waitReceiveMsg(serialPort.getName()); receiveStr = CacheTools.waitReceiveMsg(serialPort.getName());
@ -99,9 +90,6 @@ public class SerialPortSingle2 {
String deviceType = deviceCodeParamEntity.getDeviceType(); String deviceType = deviceCodeParamEntity.getDeviceType();
String deviceAddr = deviceCodeParamEntity.getDeviceAddr(); String deviceAddr = deviceCodeParamEntity.getDeviceAddr();
String dataStr = ""; String dataStr = "";
// if ("水表".equals(deviceType) || "电表".equals(deviceType)) {
// dataStr = receiveData.replace("FE", "");
// }
if (receiveData.length() > 8 && ("水表".equals(deviceType) || "电表".equals(deviceType))) { if (receiveData.length() > 8 && ("水表".equals(deviceType) || "电表".equals(deviceType))) {
String str1 = receiveData.substring(0, 8); String str1 = receiveData.substring(0, 8);
String str2 = receiveData.substring(8); String str2 = receiveData.substring(8);
@ -160,6 +148,7 @@ public class SerialPortSingle2 {
log.info("-----------------------------" + serialPort.getName() + "单抄结束!-----------------------------"); log.info("-----------------------------" + serialPort.getName() + "单抄结束!-----------------------------");
return rtData; return rtData;
} catch (Exception e) { } catch (Exception e) {
assert serialPort != null;
log.info("单抄串口" + serialPort.getName() + "异常,没有数据返回!关闭串口", e); log.info("单抄串口" + serialPort.getName() + "异常,没有数据返回!关闭串口", e);
} finally { } finally {
try { try {

8
user-service/src/main/java/com/mh/user/service/impl/DeviceControlServiceImpl.java

@ -62,7 +62,7 @@ public class DeviceControlServiceImpl implements DeviceControlService {
deviceAddr = list.get(0).getDeviceAddr(); deviceAddr = list.get(0).getDeviceAddr();
} }
if (deviceAddr == null || deviceAddr.length() == 0) { if (deviceAddr == null || deviceAddr.length() == 0) {
return "fail"; return Constant.FAIL;
} }
DeviceInstallEntity deviceInstallEntity = DeviceInstallEntity deviceInstallEntity =
@ -102,7 +102,7 @@ public class DeviceControlServiceImpl implements DeviceControlService {
rtData = handlePressureTransducer(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle); rtData = handlePressureTransducer(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle);
break; break;
case "水表": case "水表":
rtData = handleWaterMeter(serialPortModel, deviceCodeParam, controlData, controlData, rtData, type, serialPortSingle); rtData = handleWaterMeter(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle);
break; break;
case "电表": case "电表":
rtData = handleElectricMeter(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle); rtData = handleElectricMeter(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle);
@ -143,7 +143,7 @@ public class DeviceControlServiceImpl implements DeviceControlService {
return rtData; return rtData;
} }
private String handleWaterMeter(SerialPortModel serialPortModel, DeviceCodeParamEntity deviceCodeParam, ControlSetEntity controlData, ControlSetEntity controlData1, String rtData, String type, SerialPortSingle2 serialPortSingle) { private String handleWaterMeter(SerialPortModel serialPortModel, DeviceCodeParamEntity deviceCodeParam, ControlSetEntity controlData, String rtData, String type, SerialPortSingle2 serialPortSingle) {
rtData = serialPortSingle.serialPortSend(deviceCodeParam); rtData = serialPortSingle.serialPortSend(deviceCodeParam);
// 要添加校准值 // 要添加校准值
Double deviationValue = deviceInstallService.selectDeviceDeviation(deviceCodeParam.getDeviceAddr(),deviceCodeParam.getDeviceType(), deviceCodeParam.getBuildingId()); Double deviationValue = deviceInstallService.selectDeviceDeviation(deviceCodeParam.getDeviceAddr(),deviceCodeParam.getDeviceType(), deviceCodeParam.getBuildingId());
@ -175,7 +175,6 @@ public class DeviceControlServiceImpl implements DeviceControlService {
if (!serialPortModel.getDataValue().equals("100%")) { if (!serialPortModel.getDataValue().equals("100%")) {
deviceCodeParam.setDataValue("100%"); deviceCodeParam.setDataValue("100%");
serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
Thread.sleep(1000);
} }
break; break;
case "顶威": case "顶威":
@ -186,7 +185,6 @@ public class DeviceControlServiceImpl implements DeviceControlService {
if (!serialPortModel.getDataValue().equals("100%")) { if (!serialPortModel.getDataValue().equals("100%")) {
deviceCodeParam.setDataValue("100%"); deviceCodeParam.setDataValue("100%");
serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令 serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
Thread.sleep(1000);
} }
break; break;
} }

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

@ -19,6 +19,7 @@ import java.math.BigDecimal;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
@Slf4j @Slf4j
@Service @Service
@ -42,6 +43,10 @@ public class NowDataServiceImpl implements NowDataService {
@Autowired @Autowired
BuildingService buildingService; BuildingService buildingService;
ReentrantLock lockA = new ReentrantLock();
ReentrantLock lockB = new ReentrantLock();
@Override @Override
public void saveNowData(NowDataEntity nowDataEntity) { public void saveNowData(NowDataEntity nowDataEntity) {
nowDataMapper.saveNowData(nowDataEntity); nowDataMapper.saveNowData(nowDataEntity);
@ -439,7 +444,17 @@ public class NowDataServiceImpl implements NowDataService {
//调用过程proWaterTemp //调用过程proWaterTemp
@Override @Override
public void proWaterTemp(String curDate, String buildingID, String pumpID) { public void proWaterTemp(String curDate, String buildingID, String pumpID) {
nowDataMapper.proWaterTemp(curDate,buildingID,pumpID); lockA.lock();
try {
lockB.lock();
try {
nowDataMapper.proWaterTemp(curDate,buildingID,pumpID);
} finally {
lockB.unlock();
}
} finally {
lockA.unlock();
}
} }
@Override @Override

11
user-service/src/main/java/com/mh/user/service/impl/NowPublicDataServiceImpl.java

@ -1,20 +1,21 @@
package com.mh.user.service.impl; package com.mh.user.service.impl;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.entity.NowDataEntity;
import com.mh.user.entity.NowPublicDataEntity; import com.mh.user.entity.NowPublicDataEntity;
import com.mh.user.mapper.BuildingMapper; import com.mh.user.mapper.BuildingMapper;
import com.mh.user.mapper.DeviceInstallMapper; import com.mh.user.mapper.DeviceInstallMapper;
import com.mh.user.mapper.NowPublicDataMapper; import com.mh.user.mapper.NowPublicDataMapper;
import com.mh.user.model.TempModel; import com.mh.user.model.TempModel;
import com.mh.user.service.NowPublicDataService; import com.mh.user.service.NowPublicDataService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@Slf4j
@Service @Service
public class NowPublicDataServiceImpl implements NowPublicDataService { public class NowPublicDataServiceImpl implements NowPublicDataService {
@ -27,6 +28,8 @@ public class NowPublicDataServiceImpl implements NowPublicDataService {
@Autowired @Autowired
BuildingMapper buildingMapper; BuildingMapper buildingMapper;
private final SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override @Override
public void saveNowPublicData(NowPublicDataEntity nowPublicDataEntity) { public void saveNowPublicData(NowPublicDataEntity nowPublicDataEntity) {
nowPublicDataMapper.saveNowPublicData(nowPublicDataEntity); nowPublicDataMapper.saveNowPublicData(nowPublicDataEntity);
@ -63,8 +66,8 @@ public class NowPublicDataServiceImpl implements NowPublicDataService {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void saveNowHistoryPublicData(NowPublicDataEntity nowPublicDataEntity ) { public void saveNowHistoryPublicData(NowPublicDataEntity nowPublicDataEntity ) {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=new Date(); Date date=new Date();
String strDate=sdf1.format(date); String strDate=sdf1.format(date);
strDate=strDate.substring(0,13)+":00:00"; strDate=strDate.substring(0,13)+":00:00";
@ -91,7 +94,7 @@ public class NowPublicDataServiceImpl implements NowPublicDataService {
nowPublicDataMapper.updateHistoryPublicData(nowPublicDataEntity); nowPublicDataMapper.updateHistoryPublicData(nowPublicDataEntity);
} }
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); log.error("保存历史公共数据失败",e);
} }
} }

202
user-service/src/main/java/com/mh/user/utils/AnalysisReceiveOrder485.java

@ -264,8 +264,6 @@ public class AnalysisReceiveOrder485 {
// 热泵 // 热泵
public void analysisPumpOrder485(final String dateStr,final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { public void analysisPumpOrder485(final String dateStr,final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) {
// if (!Constant.CONTROL_WEB_FLAG) {
// threadPoolService.execute(() -> {
String checkStr = receiveData.substring(0, receiveData.length() - 4);//检验报文 String checkStr = receiveData.substring(0, receiveData.length() - 4);//检验报文
String checkWord = ExchangeStringUtil.getStrCRC16(checkStr);//生成校验码 String checkWord = ExchangeStringUtil.getStrCRC16(checkStr);//生成校验码
String sValue = null; String sValue = null;
@ -297,11 +295,6 @@ public class AnalysisReceiveOrder485 {
nowDataService.proPumpMinutes(buildingId, addr, sValue); nowDataService.proPumpMinutes(buildingId, addr, sValue);
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue);
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
// String state=nowDataService.selectState(buildingId); //判断热泵状态,如果有一个以上热泵运行,楼栋公共信息补水运行
// NowPublicDataEntity publicData=new NowPublicDataEntity();
// publicData.setBuildingId(buildingId);
// publicData.setUpWater(state);
// nowPublicDataService.saveNowHistoryPublicData(publicData);
log.info("热泵ID:" + addr + ",数据: " + sValue + ",保存数据库成功!楼栋名称:" + buildingName); log.info("热泵ID:" + addr + ",数据: " + sValue + ",保存数据库成功!楼栋名称:" + buildingName);
} else if (registerAddr.equalsIgnoreCase("0642") || registerAddr.equalsIgnoreCase("0007")) { } else if (registerAddr.equalsIgnoreCase("0642") || registerAddr.equalsIgnoreCase("0007")) {
//0642设定温度,0007水箱水温 //0642设定温度,0007水箱水温
@ -325,8 +318,6 @@ public class AnalysisReceiveOrder485 {
} }
nowPublicDataService.saveNowHistoryPublicData(publicData); nowPublicDataService.saveNowHistoryPublicData(publicData);
log.info("楼栋名称:" + buildingName + ",热泵编号:" + addr); log.info("楼栋名称:" + buildingName + ",热泵编号:" + addr);
// nowDataService.proWaterTemp(dateStr,buildingId,addr); //保存楼栋时间点温度变化
// log.info("=========保存楼栋时间点温度变化值!===========");
} else if (dataType.equals("tempSet")) { } else if (dataType.equals("tempSet")) {
pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度 pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度
} }
@ -346,10 +337,6 @@ public class AnalysisReceiveOrder485 {
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
log.info("热泵ID:" + addr + ",数据: " + sValue + ",保存数据库成功!楼栋名称:" + buildingName); log.info("热泵ID:" + addr + ",数据: " + sValue + ",保存数据库成功!楼栋名称:" + buildingName);
} }
// else if (registerAddr.equalsIgnoreCase("0656") || registerAddr.equalsIgnoreCase("065A")
// || registerAddr.equalsIgnoreCase("065E")) { //定时设置值
// sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10));
// }
} else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) { } else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) {
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! ");
} }
@ -380,11 +367,6 @@ public class AnalysisReceiveOrder485 {
nowDataService.proPumpMinutes(buildingId, addr, sValue); nowDataService.proPumpMinutes(buildingId, addr, sValue);
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue); log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue);
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
// String state=nowDataService.selectState(buildingId); //判断热泵状态,如果有一个以上热泵运行,楼栋公共信息补水运行
// NowPublicDataEntity publicData=new NowPublicDataEntity();
// publicData.setBuildingId(buildingId);
// publicData.setUpWater(state);
// nowPublicDataService.saveNowHistoryPublicData(publicData);
log.info("热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); log.info("热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName);
} else if (registerAddr.equalsIgnoreCase("0003") || registerAddr.equalsIgnoreCase("0064")) { } else if (registerAddr.equalsIgnoreCase("0003") || registerAddr.equalsIgnoreCase("0064")) {
//0003设定温度,0064水箱水温 //0003设定温度,0064水箱水温
@ -426,19 +408,82 @@ public class AnalysisReceiveOrder485 {
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId); nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName); log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName);
} }
// else if (registerAddr.equalsIgnoreCase("0656") || registerAddr.equalsIgnoreCase("065A")
// || registerAddr.equalsIgnoreCase("065E")) { //定时设置值
// sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10));
// }
} else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) { } else if (checkStr.substring(2, 4).equalsIgnoreCase("06")) {
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! "); log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! ");
} }
} else if (Constant.BRAND_RUI_XING.equals(brand)) {
if (checkStr.substring(2, 4).equalsIgnoreCase("03")) {//读
if (registerAddr.equalsIgnoreCase("0001")) { //运行状态
dataType = "runState";
data = checkStr.substring(8, 10);
if (data.equalsIgnoreCase("00")) {
sValue = "不运行"; //关机模式
} else if (data.equalsIgnoreCase("01")) {
sValue = "运行"; //制热模式
}
//计算热泵运行时间,按分钟
nowDataService.proPumpMinutes(buildingId, addr, sValue);
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue);
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName);
} else if (registerAddr.equalsIgnoreCase("000A") || registerAddr.equalsIgnoreCase("0046")) {
//000A设定温度,0046水箱水温
if (registerAddr.equalsIgnoreCase("000A")) {
dataType = "tempSet";
} else {
dataType = "waterTemp";
}
//读数
sValue = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10));
if (dataType.equals("waterTemp")) {
sValue = String.valueOf(Double.parseDouble(sValue)/10);
String avgTemp = nowDataService.selectAve(buildingId);
NowPublicDataEntity publicData = new NowPublicDataEntity();
publicData.setBuildingId(buildingId);
publicData.setUseWaterTemp(avgTemp);
publicData.setBackWaterTemp(avgTemp);
String pumpId = nowDataService.selectMinPumpId(buildingId);
log.info("---------------addr:" + addr + ",pumpId:" + pumpId + " ---------------");
if (addr.equals(pumpId)) { //取ID最小的热泵为单箱温度
publicData.setSingleTemp(sValue);
log.info("---------------单箱温度:" + sValue + "---------------");
}
nowPublicDataService.saveNowHistoryPublicData(publicData);
log.info("楼栋名称:" + buildingName + ",热泵编号:" + addr);
} else if (dataType.equals("tempSet")) {
pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度
}
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName);
} else if (registerAddr.equalsIgnoreCase("0050")) { //故障状态
dataType = "isFault";
String sData = ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10));
sData = ExchangeStringUtil.addZeroForNum(sData, 8);
if (sData.substring(7, 8).equalsIgnoreCase("0")) {
sValue = "无故障";
deviceInstallService.updateDeviceFault("0", addr, "热泵");
} else if (sData.substring(7, 8).equalsIgnoreCase("1")) {
sValue = "有故障";
deviceInstallService.updateDeviceFault("1", addr, "热泵");
}
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",数据: " + sValue + "保存数据库成功!楼栋名称:" + buildingName);
} else if (registerAddr.equalsIgnoreCase("0028")
|| registerAddr.equalsIgnoreCase("002C")
|| registerAddr.equalsIgnoreCase("0030")) { //读定时设置值
// 01 03 08 0003 0000 0016 0000 4713
String startTime = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)), 2)
+ ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(10, 14)), 2);
String closetTime = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(14, 18)), 2)
+ ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexToDec(checkStr.substring(18, 22)), 2);
sValue = startTime + closetTime;
}
} else if (checkStr.substring(2, 4).equalsIgnoreCase("10")) {
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! ");
}
} }
nowDataService.proWaterTemp(dateStr, buildingId, addr); //保存楼栋时间点温度变化 nowDataService.proWaterTemp(dateStr, buildingId, addr); //保存楼栋时间点温度变化
log.info("----------------保存楼栋时间点温度变化值!----------------"); log.info("----------------保存楼栋时间点温度变化值!----------------");
// });
// }
} }
public String analysisPumpOrder4852(final String receiveData, final String registerAddr, final String brand, String buildingId, final String buildingName) { public String analysisPumpOrder4852(final String receiveData, final String registerAddr, final String brand, String buildingId, final String buildingName) {
@ -910,7 +955,7 @@ public class AnalysisReceiveOrder485 {
} }
// 水位开关,长度42,128 // 水位开关,长度42,128
public void analysisRelayOrder485(final String dateStr,final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { public void analysisRelayOrder485(final String dateStr,final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName, String customName) {
// threadPoolService.execute(() -> { // threadPoolService.execute(() -> {
String l1 = ""; String l1 = "";
String l2 = ""; String l2 = "";
@ -1037,20 +1082,31 @@ public class AnalysisReceiveOrder485 {
} else if (registerAddr.equals("0010")) { } else if (registerAddr.equals("0010")) {
NowPublicDataEntity publicData = new NowPublicDataEntity(); NowPublicDataEntity publicData = new NowPublicDataEntity();
publicData.setBuildingId(buildingId); publicData.setBuildingId(buildingId);
if (l1.equals("0001")) { //l路,0000表示有输入,0001表示无输入 if (customName.contains(Constant.CUSTOM_NAME_GUANGSHANG)) {
publicData.setUseWater("运行"); //供水 if (l8.equals("0001")) { //l8路,0000表示有输入,0001表示无输入
publicData.setBackWater("运行");//回水 publicData.setUseWater("运行"); //供水
} else { publicData.setBackWater("运行");//回水
publicData.setUseWater("不运行"); } else {
publicData.setBackWater("不运行"); publicData.setUseWater("不运行");
} publicData.setBackWater("不运行");
log.info("-----------------供水/回水状态:" + l1 + "-----------------"); }
if (l2.equals("0001")) { //2路 //补水 log.info("-----------------供水/回水状态:" + l8 + "-----------------");
publicData.setUpWater("运行");
} else { } else {
publicData.setUpWater("不运行"); if (l1.equals("0001")) { //l路,0000表示有输入,0001表示无输入
publicData.setUseWater("运行"); //供水
publicData.setBackWater("运行");//回水
} else {
publicData.setUseWater("不运行");
publicData.setBackWater("不运行");
}
log.info("-----------------供水/回水状态:" + l1 + "-----------------");
if (l2.equals("0001")) { //2路 //补水
publicData.setUpWater("运行");
} else {
publicData.setUpWater("不运行");
}
log.info("-----------------补水状态:" + l2 + "-----------------");
} }
log.info("-----------------补水状态:" + l2 + "-----------------");
nowPublicDataService.saveNowHistoryPublicData(publicData); nowPublicDataService.saveNowHistoryPublicData(publicData);
log.info("-----------------状态保存数据库成功!楼栋名称:" + buildingName + "-----------------"); log.info("-----------------状态保存数据库成功!楼栋名称:" + buildingName + "-----------------");
} }
@ -1194,7 +1250,6 @@ public class AnalysisReceiveOrder485 {
// 热泵状态处理(水位开关),长度42,128 // 热泵状态处理(水位开关),长度42,128
public void analysisPumpStateOrder(final String dateStr, final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) { public void analysisPumpStateOrder(final String dateStr, final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) {
// threadPoolService.execute(() -> {
String l1 = ""; String l1 = "";
String l2 = ""; String l2 = "";
String l3 = ""; String l3 = "";
@ -1206,7 +1261,7 @@ public class AnalysisReceiveOrder485 {
String runState = ""; String runState = "";
String addr = ""; String addr = "";
Map<String, String> map = new HashMap<String, String>(); Map<String, String> map = new HashMap<String, String>();
if (brand == null || brand.equals("") || brand.equals("顶威")) { if (StringUtils.isBlank(brand) || brand.equals("顶威")) {
String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文减,去校验码 String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文减,去校验码
String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码 String checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码
if (checkNum.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4, receiveData.length() - 2))) { if (checkNum.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4, receiveData.length() - 2))) {
@ -1218,42 +1273,42 @@ public class AnalysisReceiveOrder485 {
data = ExchangeStringUtil.cutThree(data); data = ExchangeStringUtil.cutThree(data);
String strStatus = ExchangeStringUtil.hexString2binaryString(data); String strStatus = ExchangeStringUtil.hexString2binaryString(data);
strStatus = String.format("%08d", Long.parseLong(strStatus)); strStatus = String.format("%08d", Long.parseLong(strStatus));
if (strStatus.substring(7, 8).equals("1")) { if (strStatus.charAt(7) == '1') {
l1 = "1"; l1 = "1";
} else { } else {
l1 = "0"; l1 = "0";
} }
if (strStatus.substring(6, 7).equals("1")) { if (strStatus.charAt(6) == '1') {
l2 = "1"; l2 = "1";
} else { } else {
l2 = "0"; l2 = "0";
} }
if (strStatus.substring(5, 6).equals("1")) { if (strStatus.charAt(5) == '1') {
l3 = "1"; l3 = "1";
} else { } else {
l3 = "0"; l3 = "0";
} }
if (strStatus.substring(4, 5).equals("1")) { if (strStatus.charAt(4) == '1') {
l4 = "1"; l4 = "1";
} else { } else {
l4 = "0"; l4 = "0";
} }
if (strStatus.substring(3, 4).equals("1")) { if (strStatus.charAt(3) == '1') {
l5 = "1"; l5 = "1";
} else { } else {
l5 = "0"; l5 = "0";
} }
if (strStatus.substring(2, 3).equals("1")) { if (strStatus.charAt(2) == '1') {
l6 = "1"; l6 = "1";
} else { } else {
l6 = "0"; l6 = "0";
} }
if (strStatus.substring(1, 2).equals("1")) { if (strStatus.charAt(1) == '1') {
l7 = "1"; l7 = "1";
} else { } else {
l7 = "0"; l7 = "0";
} }
if (strStatus.substring(0, 1).equals("1")) { if (strStatus.charAt(0) == '1') {
l8 = "1"; l8 = "1";
} else { } else {
l8 = "0"; l8 = "0";
@ -1262,8 +1317,6 @@ public class AnalysisReceiveOrder485 {
} else if (brand.equals("中凯")) { } else if (brand.equals("中凯")) {
String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文,减去校验码 String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文,减去校验码
addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4)); addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4));
//if (registerAddr!=null && !registerAddr.equals("")) {
//if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用
l1 = checkStr.substring(4, 6); l1 = checkStr.substring(4, 6);
l2 = checkStr.substring(20, 22); l2 = checkStr.substring(20, 22);
l3 = checkStr.substring(36, 38); l3 = checkStr.substring(36, 38);
@ -1272,17 +1325,11 @@ public class AnalysisReceiveOrder485 {
l6 = checkStr.substring(84, 86); l6 = checkStr.substring(84, 86);
l7 = checkStr.substring(100, 102); l7 = checkStr.substring(100, 102);
l8 = checkStr.substring(116, 118); l8 = checkStr.substring(116, 118);
//} else if (registerAddr.equals("0012")) {
//log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! ");
//}
//}
} else if (brand.equals("远向")) { } else if (brand.equals("远向")) {
String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文
String checkWord = ExchangeStringUtil.getStrCRC16(checkStr); String checkWord = ExchangeStringUtil.getStrCRC16(checkStr);
if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) {
addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址
//if (checkStr.substring(2, 4).equals("03")) {
//if (registerAddr!=null && !registerAddr.equals("")){
l1 = checkStr.substring(6, 10); l1 = checkStr.substring(6, 10);
l2 = checkStr.substring(10, 14); l2 = checkStr.substring(10, 14);
l3 = checkStr.substring(14, 18); l3 = checkStr.substring(14, 18);
@ -1291,60 +1338,46 @@ public class AnalysisReceiveOrder485 {
l6 = checkStr.substring(26, 30); l6 = checkStr.substring(26, 30);
l7 = checkStr.substring(30, 34); l7 = checkStr.substring(30, 34);
l8 = checkStr.substring(34, 38); l8 = checkStr.substring(34, 38);
//}
//} else if (checkStr.substring(2, 4).equals("06") || checkStr.substring(2, 4).equals("04")) {
//log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! " );
//}
} else { } else {
log.info("热泵状态报文检验失败: " + receiveData); log.info("热泵状态报文检验失败: " + receiveData);
} }
} }
//if (registerAddr!=null && !registerAddr.equals("")){
//if (registerAddr.equals("0017") || registerAddr.equals("0010")){
if (l1.equals("12") || l1.equals("0001")) { //正常是0001 if (l1.equals("12") || l1.equals("0001")) { //正常是0001
// if (l1.equals("12") || l1.equals("0000") || l1.equals("1")){
map.put("1", "运行"); map.put("1", "运行");
} else { } else {
map.put("1", "不运行"); map.put("1", "不运行");
} }
if (l2.equals("12") || l2.equals("0001")) { if (l2.equals("12") || l2.equals("0001")) {
// if (l2.equals("12") || l2.equals("0000") || l2.equals("1")){
map.put("2", "运行"); map.put("2", "运行");
} else { } else {
map.put("2", "不运行"); map.put("2", "不运行");
} }
if (l3.equals("12") || l3.equals("0001")) { if (l3.equals("12") || l3.equals("0001")) {
// if (l3.equals("12") || l3.equals("0000") || l3.equals("1")) {
map.put("3", "运行"); map.put("3", "运行");
} else { } else {
map.put("3", "不运行"); map.put("3", "不运行");
} }
if (l4.equals("12") || l4.equals("0001")) { if (l4.equals("12") || l4.equals("0001")) {
// if (l4.equals("12") || l4.equals("0000") || l4.equals("1")){
map.put("4", "运行"); map.put("4", "运行");
} else { } else {
map.put("4", "不运行"); map.put("4", "不运行");
} }
if (l5.equals("12") || l5.equals("0001")) { if (l5.equals("12") || l5.equals("0001")) {
// if (l5.equals("12") || l5.equals("0000") || l5.equals("1")){
map.put("5", "运行"); map.put("5", "运行");
} else { } else {
map.put("5", "不运行"); map.put("5", "不运行");
} }
if (l6.equals("12") || l6.equals("0001")) { if (l6.equals("12") || l6.equals("0001")) {
// if (l6.equals("12") || l6.equals("0000") || l6.equals("1")){
map.put("6", "运行"); map.put("6", "运行");
} else { } else {
map.put("6", "不运行"); map.put("6", "不运行");
} }
if (l7.equals("12") || l7.equals("0001")) { if (l7.equals("12") || l7.equals("0001")) {
// if (l7.equals("12") || l7.equals("0000") || l7.equals("1")){
map.put("7", "运行"); map.put("7", "运行");
} else { } else {
map.put("7", "不运行"); map.put("7", "不运行");
} }
if (l8.equals("12") || l8.equals("0001")) { if (l8.equals("12") || l8.equals("0001")) {
// if (l8.equals("12") || l8.equals("0000") || l8.equals("1")){
map.put("8", "运行"); map.put("8", "运行");
} else { } else {
map.put("8", "不运行"); map.put("8", "不运行");
@ -1363,9 +1396,6 @@ public class AnalysisReceiveOrder485 {
} }
log.info("热泵状态号:" + addr + ",保存数据库成功!楼栋名称:" + buildingName); log.info("热泵状态号:" + addr + ",保存数据库成功!楼栋名称:" + buildingName);
} }
//}
//}
// });
} }
// 热泵状态处理(水位开关),长度42,128 // 热泵状态处理(水位开关),长度42,128
@ -1441,8 +1471,6 @@ public class AnalysisReceiveOrder485 {
} else if (brand.equals("中凯")) { } else if (brand.equals("中凯")) {
String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文,减去校验码 String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文,减去校验码
addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4)); addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4));
//if (registerAddr!=null && !registerAddr.equals("")) {
//if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用
l1 = checkStr.substring(4, 6); l1 = checkStr.substring(4, 6);
l2 = checkStr.substring(20, 22); l2 = checkStr.substring(20, 22);
l3 = checkStr.substring(36, 38); l3 = checkStr.substring(36, 38);
@ -1451,17 +1479,11 @@ public class AnalysisReceiveOrder485 {
l6 = checkStr.substring(84, 86); l6 = checkStr.substring(84, 86);
l7 = checkStr.substring(100, 102); l7 = checkStr.substring(100, 102);
l8 = checkStr.substring(116, 118); l8 = checkStr.substring(116, 118);
//} else if (registerAddr.equals("0012")) {
//log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! ");
//}
//}
} else if (brand.equals("远向")) { } else if (brand.equals("远向")) {
String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文 String checkStr = receiveData.substring(0, receiveData.length() - 4);// 检验报文
String checkWord = ExchangeStringUtil.getStrCRC16(checkStr); String checkWord = ExchangeStringUtil.getStrCRC16(checkStr);
if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) { if (checkWord.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4))) {
addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址 addr = ExchangeStringUtil.hexToDec(checkStr.substring(0, 2));//地址
//if (checkStr.substring(2, 4).equals("03")) {
//if (registerAddr!=null && !registerAddr.equals("")){
l1 = checkStr.substring(6, 10); l1 = checkStr.substring(6, 10);
l2 = checkStr.substring(10, 14); l2 = checkStr.substring(10, 14);
l3 = checkStr.substring(14, 18); l3 = checkStr.substring(14, 18);
@ -1470,60 +1492,46 @@ public class AnalysisReceiveOrder485 {
l6 = checkStr.substring(26, 30); l6 = checkStr.substring(26, 30);
l7 = checkStr.substring(30, 34); l7 = checkStr.substring(30, 34);
l8 = checkStr.substring(34, 38); l8 = checkStr.substring(34, 38);
//}
//} else if (checkStr.substring(2, 4).equals("06") || checkStr.substring(2, 4).equals("04")) {
//log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! " );
//}
} else { } else {
log.info("热泵状态报文检验失败: " + receiveData); log.info("热泵状态报文检验失败: " + receiveData);
} }
} }
//if (registerAddr!=null && !registerAddr.equals("")){
//if (registerAddr.equals("0017") || registerAddr.equals("0010")){
if (l1.equals("12") || l1.equals("0001")) { //正常是0001 if (l1.equals("12") || l1.equals("0001")) { //正常是0001
// if (l1.equals("12") || l1.equals("0000") || l1.equals("1")){
map.put("1", "运行"); map.put("1", "运行");
} else { } else {
map.put("1", "不运行"); map.put("1", "不运行");
} }
if (l2.equals("12") || l2.equals("0001")) { if (l2.equals("12") || l2.equals("0001")) {
// if (l2.equals("12") || l2.equals("0000") || l2.equals("1")){
map.put("2", "运行"); map.put("2", "运行");
} else { } else {
map.put("2", "不运行"); map.put("2", "不运行");
} }
if (l3.equals("12") || l3.equals("0001")) { if (l3.equals("12") || l3.equals("0001")) {
// if (l3.equals("12") || l3.equals("0000") || l3.equals("1")) {
map.put("3", "运行"); map.put("3", "运行");
} else { } else {
map.put("3", "不运行"); map.put("3", "不运行");
} }
if (l4.equals("12") || l4.equals("0001")) { if (l4.equals("12") || l4.equals("0001")) {
// if (l4.equals("12") || l4.equals("0000") || l4.equals("1")){
map.put("4", "运行"); map.put("4", "运行");
} else { } else {
map.put("4", "不运行"); map.put("4", "不运行");
} }
if (l5.equals("12") || l5.equals("0001")) { if (l5.equals("12") || l5.equals("0001")) {
// if (l5.equals("12") || l5.equals("0000") || l5.equals("1")){
map.put("5", "运行"); map.put("5", "运行");
} else { } else {
map.put("5", "不运行"); map.put("5", "不运行");
} }
if (l6.equals("12") || l6.equals("0001")) { if (l6.equals("12") || l6.equals("0001")) {
// if (l6.equals("12") || l6.equals("0000") || l6.equals("1")){
map.put("6", "运行"); map.put("6", "运行");
} else { } else {
map.put("6", "不运行"); map.put("6", "不运行");
} }
if (l7.equals("12") || l7.equals("0001")) { if (l7.equals("12") || l7.equals("0001")) {
// if (l7.equals("12") || l7.equals("0000") || l7.equals("1")){
map.put("7", "运行"); map.put("7", "运行");
} else { } else {
map.put("7", "不运行"); map.put("7", "不运行");
} }
if (l8.equals("12") || l8.equals("0001")) { if (l8.equals("12") || l8.equals("0001")) {
// if (l8.equals("12") || l8.equals("0000") || l8.equals("1")){
map.put("8", "运行"); map.put("8", "运行");
} else { } else {
map.put("8", "不运行"); map.put("8", "不运行");
@ -1533,7 +1541,7 @@ public class AnalysisReceiveOrder485 {
for (Map.Entry<String, String> entry : map.entrySet()) { for (Map.Entry<String, String> entry : map.entrySet()) {
addr = entry.getKey(); //获取Key值作为热泵ID addr = entry.getKey(); //获取Key值作为热泵ID
runState = entry.getValue(); runState = entry.getValue();
if (addr != null && Integer.valueOf(addr) <= count) { if (addr != null && Integer.parseInt(addr) <= count) {
nowDataService.saveNowHistoryData3(addr, "热泵状态", runState, "runState", buildingId); nowDataService.saveNowHistoryData3(addr, "热泵状态", runState, "runState", buildingId);
nowDataService.proPumpMinutes(buildingId, addr, runState); //计算热泵运行时长 nowDataService.proPumpMinutes(buildingId, addr, runState); //计算热泵运行时长
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + runState); log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + runState);
@ -1542,8 +1550,6 @@ public class AnalysisReceiveOrder485 {
log.info("热泵状态号" + addr + ",保存数据库成功!楼栋名称:" + buildingName); log.info("热泵状态号" + addr + ",保存数据库成功!楼栋名称:" + buildingName);
result = JSON.toJSONString(map); //map转json字符串 result = JSON.toJSONString(map); //map转json字符串
} }
//}
//}
return result; return result;
} }

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

@ -1,5 +1,7 @@
package com.mh.user.utils; package com.mh.user.utils;
import com.mh.common.utils.StringUtils;
import com.mh.user.constants.Constant;
import com.mh.user.entity.*; import com.mh.user.entity.*;
import com.mh.user.service.DeviceCodeParamService; import com.mh.user.service.DeviceCodeParamService;
import com.mh.user.service.DeviceInstallService; import com.mh.user.service.DeviceInstallService;
@ -58,7 +60,7 @@ public class GetReadOrder485 {
String str = ""; String str = "";
if (deviceAddr != null && deviceAddr.length() > 0) { if (deviceAddr != null && deviceAddr.length() > 0) {
try { try {
if (brand == null || brand.equals("") || brand.equals("艾美柯")) { if (StringUtils.isBlank(brand) || brand.equals("艾美柯")) {
// 0 代表前面补充0,14 代表长度为14,d 代表参数为正数型 // 0 代表前面补充0,14 代表长度为14,d 代表参数为正数型
str = String.format("%014d", Long.parseLong(deviceAddr));//基表通讯号 str = String.format("%014d", Long.parseLong(deviceAddr));//基表通讯号
// 转换位置 // 转换位置
@ -97,9 +99,9 @@ public class GetReadOrder485 {
// 0代表前面补充0,2代表长度为2,d代表参数为正数型 // 0代表前面补充0,2代表长度为2,d代表参数为正数型
str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2); str = ExchangeStringUtil.addZeroForNum(str, 2);
if (brand == null || brand.equals("") || brand.equals("美的")) { if (StringUtils.isBlank(brand) || Constant.BRAND_MEI_DI.equals(brand)) {
if (funCode == null || funCode.equals("") || funCode.equals("03")) { if (StringUtils.isBlank(funCode) || funCode.equals("03")) {
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0641")) { // 运行状态 if (StringUtils.isBlank(registerAddr) || registerAddr.equalsIgnoreCase("0641")) { // 运行状态
str = str + "0306410001"; str = str + "0306410001";
param = "运行状态"; param = "运行状态";
} else if (registerAddr.equalsIgnoreCase("0007")) { // 水温 } else if (registerAddr.equalsIgnoreCase("0007")) { // 水温
@ -119,22 +121,21 @@ public class GetReadOrder485 {
param = "时段2"; param = "时段2";
} }
} else {//10 } else {//10
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0642")) {//温度设定,写 if (StringUtils.isBlank(registerAddr) || registerAddr.equalsIgnoreCase("0642")) {//温度设定,写
str = str + "100642000102" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试 str = str + "100642000102" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试
} else if (registerAddr.equalsIgnoreCase("0656")) {//时段1 } else {
if (dataValue.length() == 8) {
String strData = "00" + dataValue.substring(0, 2) + "00" + dataValue.substring(2, 4) + "00" + dataValue.substring(4, 6) + "00" + dataValue.substring(6, 8);
str = str + "100656000408" + strData; //写
}
} else if (registerAddr.equalsIgnoreCase("065A")) {//时段2
if (dataValue.length() == 8) { if (dataValue.length() == 8) {
String strData = "00" + dataValue.substring(0, 2) + "00" + dataValue.substring(2, 4) + "00" + dataValue.substring(4, 6) + "00" + dataValue.substring(6, 8); String strData = "00" + dataValue.substring(0, 2) + "00" + dataValue.substring(2, 4) + "00" + dataValue.substring(4, 6) + "00" + dataValue.substring(6, 8);
str = str + "10065A000408" + strData; //写 if (registerAddr.equalsIgnoreCase("0656")) {//时段1
str = str + "100656000408" + strData; //写
} else if (registerAddr.equalsIgnoreCase("065A")) {//时段2
str = str + "10065A000408" + strData; //写
}
} }
} }
} }
} else if (brand.equals("美的2")) { } else if (Constant.BRAND_MEI_DI_TWO.equals(brand)) {
if (funCode == null || funCode.equals("") || funCode.equals("03")) { if (StringUtils.isBlank(funCode) || funCode.equals("03")) {
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0BBD")) { // 运行状态 if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0BBD")) { // 运行状态
str = str + "030BBD0001"; str = str + "030BBD0001";
param = "运行状态"; param = "运行状态";
@ -149,7 +150,7 @@ public class GetReadOrder485 {
param = "设定温度"; param = "设定温度";
} }
} else {//06 } else {//06
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0003")) {//温度设定,写 if (StringUtils.isBlank(registerAddr) || registerAddr.equalsIgnoreCase("0003")) {//温度设定,写
str = str + "060003" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试 str = str + "060003" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试
} else if (registerAddr.equals("0000")) {//开关机 } else if (registerAddr.equals("0000")) {//开关机
if (dataValue.equals("0000")) { if (dataValue.equals("0000")) {
@ -159,9 +160,9 @@ public class GetReadOrder485 {
} }
} }
} }
} else if (brand.equals("瑞星")) { } else if (Constant.BRAND_RUI_XING.equals(brand)) {
if (funCode == null || funCode.equals("") || funCode.equals("03")) { if (StringUtils.isBlank(funCode) || funCode.equals("03")) {
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0001")) { // 运行状态 if (StringUtils.isBlank(registerAddr) || registerAddr.equalsIgnoreCase("0001")) { // 运行状态
str = str + "0300010001"; str = str + "0300010001";
param = "运行状态"; param = "运行状态";
} else if (registerAddr.equalsIgnoreCase("0046")) { // 水温 } else if (registerAddr.equalsIgnoreCase("0046")) { // 水温
@ -188,7 +189,7 @@ public class GetReadOrder485 {
param = "时段2"; param = "时段2";
} }
} else {//10 } else {//10
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("000A")) {//温度设定,写 if (StringUtils.isBlank(registerAddr) || registerAddr.equalsIgnoreCase("000A")) {//温度设定,写
str = str + "10000A000102" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试 str = str + "10000A000102" + ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(dataValue)), 4); //写,待测试
} else if (registerAddr.equalsIgnoreCase("0028") || registerAddr.equalsIgnoreCase("002C")) {//时段1 } else if (registerAddr.equalsIgnoreCase("0028") || registerAddr.equalsIgnoreCase("002C")) {//时段1
if (dataValue.length() == 8) { if (dataValue.length() == 8) {
@ -221,10 +222,10 @@ public class GetReadOrder485 {
String str = ""; String str = "";
if (deviceAddr != null && deviceAddr.length() > 0) { if (deviceAddr != null && deviceAddr.length() > 0) {
try { try {
if (brand == null || brand.equals("") || brand.equals("中凯")) { if (StringUtils.isBlank(brand) || Constant.BRAND_ZHONG_KAI.equals(brand)) {
str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2); str = ExchangeStringUtil.addZeroForNum(str, 2);
if (funCode == null || funCode.equals("") || funCode.equals("17")) { //读 if (StringUtils.isBlank(funCode) || funCode.equals("17")) { //读
str = "33" + str + "1700000000"; //旧版继电器 str = "33" + str + "1700000000"; //旧版继电器
} else if (funCode.equals("12")) {//写 } else if (funCode.equals("12")) {//写
if (dataValue != null && !dataValue.equals("")) { if (dataValue != null && !dataValue.equals("")) {
@ -255,17 +256,17 @@ public class GetReadOrder485 {
String checkSum = ExchangeStringUtil.makeChecksum(str); String checkSum = ExchangeStringUtil.makeChecksum(str);
str = str + checkSum; str = str + checkSum;
} else if (brand.equals("远向")) { } else if (Constant.BRAND_YUAN_XIANG.equals(brand)) {
str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2); str = ExchangeStringUtil.addZeroForNum(str, 2);
if (funCode == null || funCode.equals("") || funCode.equals("03")) {//读 if (StringUtils.isBlank(funCode) || funCode.equals("03")) {//读
if (registerAddr.equalsIgnoreCase("0018")) { //读全部位置 if (registerAddr.equalsIgnoreCase("0018")) { //读全部位置
str = str + "0300180008"; str = str + "0300180008";
} else if (registerAddr.equalsIgnoreCase("0010")) { //读全部DI } else if (registerAddr.equalsIgnoreCase("0010")) { //读全部DI
str = str + "0300100008"; str = str + "0300100008";
} }
} else if (funCode.equals("06")) { // 写 } else if (funCode.equals("06")) { // 写
if (dataValue != null && !dataValue.equals("")) { if (!StringUtils.isBlank(dataValue)) {
if (dataValue.equals("100%")) { if (dataValue.equals("100%")) {
registerAddr = "10001800081000000000000000000000000000000000"; //全开 registerAddr = "10001800081000000000000000000000000000000000"; //全开
} else if (dataValue.equals("90%")) { } else if (dataValue.equals("90%")) {
@ -293,7 +294,7 @@ public class GetReadOrder485 {
} }
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验 String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord; str = str + checkWord;
} else if (brand.equals("顶威")) { } else if (Constant.BRAND_DING_WEI.equals(brand)) {
str = String.format("%012d", Long.parseLong(deviceAddr)); str = String.format("%012d", Long.parseLong(deviceAddr));
//转换位置 //转换位置
str = ExchangeStringUtil.changePosition(str); //表号 str = ExchangeStringUtil.changePosition(str); //表号
@ -336,20 +337,13 @@ public class GetReadOrder485 {
str = "FEFEFE" + str + checkSum + "16"; str = "FEFEFE" + str + checkSum + "16";
} }
} catch (Exception e) { } catch (Exception e) {
// e.printStackTrace();
if (registerAddr.equals("0010")) { if (registerAddr.equals("0010")) {
log.error("生成热泵状态指令出错!" + str); log.error("生成热泵状态指令出错!" + str, e);
} else { } else {
log.error("生成水位开关指令出错!" + str); log.error("生成水位开关指令出错!" + str, e);
} }
} }
} }
// if(registerAddr.equals("0010")){
// log.info("生成热泵状态采集指令>>>>" + str);
// }else{
// log.info("生成水位开关采集指令>>>>" + str);
// }
return str.toUpperCase(); return str.toUpperCase();
} }
@ -362,33 +356,24 @@ public class GetReadOrder485 {
String str = ""; String str = "";
if (deviceAddr != null && deviceAddr.length() > 0) { if (deviceAddr != null && deviceAddr.length() > 0) {
try { try {
if (brand == null || brand.equals("") || brand.equals("中凯")) { if (StringUtils.isBlank(brand) || Constant.BRAND_ZHONG_KAI.equals(brand)) {
str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2); str = ExchangeStringUtil.addZeroForNum(str, 2);
//if (funCode==null || funCode.equals("") || funCode.equals("17")){ //读
str = "33" + str + "1700000000"; //旧版继电器 str = "33" + str + "1700000000"; //旧版继电器
//}
// 检验和 // 检验和
String checkSum = ExchangeStringUtil.makeChecksum(str); String checkSum = ExchangeStringUtil.makeChecksum(str);
str = str + checkSum; str = str + checkSum;
} else if (brand.equals("远向")) { } else if (Constant.BRAND_YUAN_XIANG.equals(brand)) {
str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2); str = ExchangeStringUtil.addZeroForNum(str, 2);
//if (funCode==null || funCode.equals("") || funCode.equals("03")){//读
//if (registerAddr.equalsIgnoreCase("0018")){ //读全部DO
// str = str + "0300180008";
// } else if (registerAddr.equalsIgnoreCase("0010")){ //读全部DI
str = str + "0300100008"; str = str + "0300100008";
//}
//}
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验 String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord; str = str + checkWord;
} else if (brand.equals("顶威")) { } else if (Constant.BRAND_DING_WEI.equals(brand)) {
str = String.format("%012d", Long.parseLong(deviceAddr)); str = String.format("%012d", Long.parseLong(deviceAddr));
//转换位置 //转换位置
str = ExchangeStringUtil.changePosition(str); //表号 str = ExchangeStringUtil.changePosition(str); //表号
String strData = ""; String strData = "";
// if (funCode.equals("0102")){ //读
str = "68" + str + "680102"; str = "68" + str + "680102";
strData = "25C0"; //标志 strData = "25C0"; //标志
// } // }
@ -399,7 +384,6 @@ public class GetReadOrder485 {
str = "FEFEFE" + str + checkSum + "16"; str = "FEFEFE" + str + checkSum + "16";
} }
} catch (Exception e) { } catch (Exception e) {
// e.printStackTrace();
log.error("生成热泵状态指令出错!" + str, e); log.error("生成热泵状态指令出错!" + str, e);
} }
} }
@ -428,7 +412,6 @@ public class GetReadOrder485 {
str = "FEFEFE" + str + checkSum + "16"; str = "FEFEFE" + str + checkSum + "16";
} catch (Exception e) { } catch (Exception e) {
// e.printStackTrace();
log.error("生成状态检测指令出错!" + str, e); log.error("生成状态检测指令出错!" + str, e);
} }
} }
@ -444,12 +427,12 @@ public class GetReadOrder485 {
try { try {
str = ExchangeStringUtil.decToHex(deviceAddr); //十进制转为十六进制 str = ExchangeStringUtil.decToHex(deviceAddr); //十进制转为十六进制
str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位 str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位
if (brand == null || brand.equals("")) { if (Constant.BRAND_AU_SUN.equals(brand)) {
str = str + "0300000002"; // 压力变送器(新的协议)
} else if (brand.equals("澳升")) {
str = str + "0300040001"; // 新款压力变送器 str = str + "0300040001"; // 新款压力变送器
} else if (brand.equals("汝翊")) { } else if (Constant.BRAND_RU_YI.equals(brand)) {
str = str + "0300040001"; str = str + "0300040001";
} else {
str = str + "0300000002"; // 压力变送器(新的协议)
} }
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验 String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord; str = str + checkWord;
@ -478,7 +461,6 @@ public class GetReadOrder485 {
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验 String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord; str = str + checkWord;
} catch (Exception e) { } catch (Exception e) {
// e.printStackTrace();
log.error("生成温控指令出错!" + str, e); log.error("生成温控指令出错!" + str, e);
} }
} }
@ -516,8 +498,7 @@ public class GetReadOrder485 {
str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位 str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位
try { try {
// if (!brand.equals("")){ //品牌 if (!StringUtils.isBlank(funCode)) {
if (!funCode.equals("") && !registerAddr.equals("")) {
registerAddr = ExchangeStringUtil.addZeroForNum(registerAddr, 4); //寄存器地址 registerAddr = ExchangeStringUtil.addZeroForNum(registerAddr, 4); //寄存器地址
funCode = ExchangeStringUtil.addZeroForNum(funCode, 2); // 功能码 funCode = ExchangeStringUtil.addZeroForNum(funCode, 2); // 功能码
@ -540,7 +521,6 @@ public class GetReadOrder485 {
} }
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验 String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord; str = str + checkWord;
// }
} catch (Exception e) { } catch (Exception e) {
log.error("生成时控指令出错!" + str, e); log.error("生成时控指令出错!" + str, e);
} }

151
user-service/src/main/java/com/mh/user/utils/SendOrderUtils.java

@ -1,9 +1,6 @@
package com.mh.user.utils; package com.mh.user.utils;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.serialport.SerialPortListener;
import com.mh.user.serialport.SerialPortUtil;
import gnu.io.SerialPort;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** /**
@ -16,147 +13,9 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class SendOrderUtils { public class SendOrderUtils {
// /**
// * 发送采集冷水机组
// * @param chillersEntity
// * @param ctx
// * @param num
// * @param size
// */
// public static void sendChillersOrder(ChillersEntity chillersEntity, ChannelHandlerContext ctx, int num, int size) {
// // 继续发送下一个采集冷水机设备指令
// GetReadOrder485 getReadOrder485 = new GetReadOrder485();
// String sendStr = getReadOrder485.createChillersOrder(chillersEntity);
// ByteBuf buffer = getByteBuf(ctx, sendStr);
// // 2.发送数据
// ctx.channel().writeAndFlush(buffer);
// log.info("客户端再次往服务端发送数据" + num + " 数据条数:" + size);
// }
//
// public static void sendMeterOrCloud(DeviceManageEntity deviceManageEntity,
// int num,
// String IP,
// String port,
// ChannelHandlerContext ctx) {
// if (deviceManageEntity.getParamId() == 1) {
// sendMeterOrder(deviceManageEntity, num, IP, port, ctx);
// } else if (deviceManageEntity.getParamId() == 3) {
// sendCloudOrder(deviceManageEntity, num, IP, port, ctx);
// }
// }
// /**
// * 发送采集电表
// * @param deviceManageEntity
// * @param num
// * @param IP
// * @param port
// * @param ctx
// */
// public static void sendMeterOrder(DeviceManageEntity deviceManageEntity,
// int num,
// String IP,
// String port,
// ChannelHandlerContext ctx) {
//// String collectionNum = deviceManageEntity.getCollectionNum();
//// String sendStr = GetReadOrder485.createMeterOrder();
// String sendStr="";
// ByteBuf buffer = getByteBuf(ctx, sendStr);
// // 2.发送数据
// ctx.channel().writeAndFlush(buffer);
// log.info("客户端再次往服务端发送数据" + num);
// }
//
// /**
// * 发送采集冷量计工具类
// * @param deviceManageEntity
// * @param num
// * @param IP
// * @param port
// * @param ctx
// */
// public static void sendCloudOrder(DeviceManageEntity deviceManageEntity,
// int num,
// String IP,
// String port,
// ChannelHandlerContext ctx) {
// // 1.创建将要写出的数据
// String collectionNum = deviceManageEntity.getCollectionNum();
// String sendStr = GetReadOrder485.createCloudOrder(IP, port,
// deviceManageEntity.getDataCom(),
// collectionNum, "34");
//// String sendStr = "5803004900021914";
// ByteBuf buffer = getByteBuf(ctx, sendStr);
// // 2.发送数据
// ctx.channel().writeAndFlush(buffer);
// log.info("客户端再次往服务端发送数据" + sendStr);
// }
//向串口发指令数据
public static void sendSerialPort(DeviceCodeParamEntity deviceCodeParamEntity,SerialPort serialPort ) {
//创建将要写出的数据
// OrderParamModel orderParamModel=new OrderParamModel();
// orderParamModel.setDeviceAddr(deviceCodeParamEntity.getDeviceAddr());//通讯地址
// orderParamModel.setDeviceType(deviceCodeParamEntity.getDeviceType());//设备类型
// orderParamModel.setBaudrate(deviceCodeParamEntity.getBaudrate());//波特率
// orderParamModel.setBrand(deviceCodeParamEntity.getBrand());//品牌
// orderParamModel.setFunCode(deviceCodeParamEntity.getFunCode());//功能码
// orderParamModel.setRegisterAddr(deviceCodeParamEntity.getRegisterAddr());//寄存器地址
// orderParamModel.setComName(deviceCodeParamEntity.getDataCom()); //串口
// orderParamModel.setDataValue(deviceCodeParamEntity.getDataValue());//传入数据
String deviceType=deviceCodeParamEntity.getDeviceType();
String registerAddr=deviceCodeParamEntity.getRegisterAddr();
String sendStr=null;
if (deviceType.equals("电表")){
sendStr = GetReadOrder485.createMeterOrder(deviceCodeParamEntity);
}else if (deviceType.equals("水表")){
sendStr = GetReadOrder485.createWtMeterOrder(deviceCodeParamEntity);
}else if (deviceType.equals("压变")){
sendStr = GetReadOrder485.createPressureOrder(deviceCodeParamEntity);
}else if (deviceType.equals("热泵")){
sendStr = GetReadOrder485.createPumpOrder(deviceCodeParamEntity);
}else if (deviceType.equals("温控")){
sendStr = GetReadOrder485.createTempOrder(deviceCodeParamEntity);
}else if (deviceType.equals("时控")){
sendStr = GetReadOrder485.createTimeSetOrder(deviceCodeParamEntity);
}else if (deviceType.equals("水位开关")){
sendStr = GetReadOrder485.createRelayOrder(deviceCodeParamEntity);
}else if (deviceType.equals("状态检测")){
sendStr = GetReadOrder485.createStateOrder(deviceCodeParamEntity);
}else if (deviceType.equals("温度变送器")){
sendStr = GetReadOrder485.createMulTempOrder(deviceCodeParamEntity);
}else if (deviceType.equals("热泵状态")){
sendStr = GetReadOrder485.createPumpStateOrder(deviceCodeParamEntity);
}
String str=sendStr;
try{
byte[] HEX = SerialPortListener.hexStr2Byte(str);
SerialPortUtil serialPortUtil = SerialPortUtil.getSerialPortUtil();
serialPortUtil.sendToPort(serialPort, HEX);
// SerialTool serialPortUtil = SerialTool.getSerialPortUtil();
// serialPortUtil.sendToPort(HEX,serialPort);
log.info(deviceType+"向串口"+serialPort+"发送数据>>>>" + str);
}catch (Exception e){
e.printStackTrace();
log.error("向串口"+serialPort+"发送数据异常!");
}
}
//向串口发指令数据 //向串口发指令数据
public static String getSendStr(DeviceCodeParamEntity deviceCodeParamEntity) { public static String getSendStr(DeviceCodeParamEntity deviceCodeParamEntity) {
//创建将要写出的数据 //创建将要写出的数据
// OrderParamModel orderParamModel=new OrderParamModel();
// orderParamModel.setDeviceAddr(deviceCodeParamEntity.getDeviceAddr());//通讯地址
// orderParamModel.setDeviceType(deviceCodeParamEntity.getDeviceType());//设备类型
// orderParamModel.setBaudrate(deviceCodeParamEntity.getBaudrate());//波特率
// orderParamModel.setBrand(deviceCodeParamEntity.getBrand());//品牌
// orderParamModel.setFunCode(deviceCodeParamEntity.getFunCode());//功能码
// orderParamModel.setRegisterAddr(deviceCodeParamEntity.getRegisterAddr());//寄存器地址
// orderParamModel.setComName(deviceCodeParamEntity.getDataCom()); //串口
// orderParamModel.setDataValue(deviceCodeParamEntity.getDataValue());//传入数据
String deviceType=deviceCodeParamEntity.getDeviceType(); String deviceType=deviceCodeParamEntity.getDeviceType();
String sendStr=null; String sendStr=null;
switch (deviceType) { switch (deviceType) {
@ -194,14 +53,4 @@ public class SendOrderUtils {
return sendStr; return sendStr;
} }
// private static ByteBuf getByteBuf(ChannelHandlerContext ctx, String sendStr) {
// // 申请一个数据结构存储信息
// ByteBuf buffer = ctx.alloc().buffer();
// // 将信息放入数据结构中
// buffer.writeBytes(ExchangeStringUtil.hexStrToBinaryStr(sendStr));//对接需要16进制
// return buffer;
// }
} }

21
user-service/src/test/java/com/mh/user/TestJwtUtils.java

@ -15,9 +15,7 @@ import sun.security.provider.MD5;
import java.math.BigInteger; import java.math.BigInteger;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.Date; import java.util.*;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
@ -147,10 +145,19 @@ public class TestJwtUtils {
* *
* @param args * @param args
*/ */
public static void main(String[] args) throws InterruptedException { public static void main(String[] args) {
for (int i = 0; i < 5; i++) { // 创建一个按照键的自然顺序排序的TreeMap
CacheUtil cacheUtil = CacheUtil.getInstance(); TreeMap<String, Integer> sortedMap = new TreeMap<>();
cacheUtil.deleteCache();
// 添加元素到TreeMap
sortedMap.put("Apple", 1);
sortedMap.put("Banana", 2);
sortedMap.put("Cherry", 3);
sortedMap.put("Date", 4);
// 输出有序的Map
for (Map.Entry<String, Integer> entry : sortedMap.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
} }
} }

Loading…
Cancel
Save