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_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 :
rolName = "实际入住数";
break;
case 7 :
rolName = "水箱高度";
break;
case 8 :
rolName = "热泵个数";
break;
}
if ((rol >= 1)&&(rol <= 4)&&(sCell.equals(""))){
msg = rolName + "不能为空" ;
@ -189,6 +195,8 @@ public class BuildingController {
uploadEntity.setHouseCount(Integer.parseInt(deviceList.get(3))); //每层宿舍数
uploadEntity.setBedCount(Integer.parseInt(deviceList.get(4))); //床位数
uploadEntity.setCheckInCount(Integer.parseInt(deviceList.get(5))); //实际入住数
uploadEntity.setTankHeight(Double.parseDouble(deviceList.get(6))); //实际入住数
uploadEntity.setPumpCount(Integer.parseInt(deviceList.get(7))); //实际入住数
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) {
try {
Constant.WEB_FLAG = true; //单抄,暂时停止采集
Thread.sleep(800);
Thread.sleep(1000);
String returnStr = deviceControlService.readOrWriteDevice(params, Constant.WRITE);
if (!StringUtils.isBlank(returnStr) && "fail".equals(returnStr)) {
return HttpResult.error(500, "fail");
@ -71,7 +71,7 @@ public class DeviceOperateController {
public HttpResult readData(@RequestBody List<SerialPortModel> params) {
try {
Constant.WEB_FLAG = true; //单抄,暂时停止采集
Thread.sleep(800);
Thread.sleep(1000);
String rtData = deviceControlService.readOrWriteDevice(params, Constant.READ);
if (ExchangeStringUtil.getJSONType(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 remarks;
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
*/
@Insert("insert into building(building_name,levels_count,begin_level,house_count,bed_count,check_in_count,area_id,remarks,tankHeight) values (" +
"#{buildingName},#{levelsCount},#{beginLevel},#{houseCount},#{bedCount},#{checkInCount},#{areaId},#{remarks},#{tankHeight})")
@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}, #{pumpCount})")
int saveBuilding(BuildingEntity buildingEntity);
/**
@ -35,6 +35,7 @@ public interface BuildingMapper {
" <if test='areaId!=null'> , area_id = #{areaId} </if>" +
" <if test='remarks!=null'> , remarks = #{remarks} </if>" +
" <if test='tankHeight!=null'> , tankHeight = #{tankHeight} </if>" +
" <if test='pumpCount!=null'> , pump_count = #{pumpCount} </if>" +
" where id = #{id} " +
"</script>")
int updateBuilding(BuildingEntity buildingEntity);
@ -55,6 +56,7 @@ public interface BuildingMapper {
@Result(property ="bedCount",column ="bed_count"),
@Result(property="checkInCount",column="check_in_count"),
@Result(property="areaId",column="area_id"),
@Result(property="pumpCount",column="pump_count"),
@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
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;
// 调用service
ApplicationContext context = SpringBeanUtil.getApplicationContext();
DeviceCodeParamService deviceCodeParamService = context.getBean(DeviceCodeParamService.class);
DeviceInstallService deviceInstallService = context.getBean(DeviceInstallService.class);
NowDataService nowDataService = context.getBean(NowDataService.class);
BuildingService buildingService = context.getBean(BuildingService.class);
@ -54,8 +47,8 @@ public class SerialPortSendReceive2 {
.filter(value -> value.getThread().equals(thread))
.sorted(Comparator.comparing(DeviceCodeParamEntity::getDataCom))
.collect(Collectors.toList());
// size = deviceManageEntityList.size();
for (int i = 0; i < deviceManageEntityList.size(); i++) {
int size = deviceManageEntityList.size();
for (int i = 0; i < size; i++) {
//判断网页端是否有操作设备的
if (Constant.WEB_FLAG) {
if (serialPort != null) {
@ -65,13 +58,12 @@ public class SerialPortSendReceive2 {
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();
if (StringUtils.isBlank(comName)) {
Constant.FLAG = false;//可以采集的状态
log.info("-------------串口:" + comName + "不存在!-------------");
continue;
}
@ -83,27 +75,36 @@ public class SerialPortSendReceive2 {
String buildingName = buildingService.queryBuildingName(buildingId); //查询楼栋名称
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);
} else {
serialPort = SerialTool.openPort(comName, baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_EVEN);
}
if (null == serialPort) {
continue;
}
//向串口发送指令
if (serialPort != null) {
// log.info("---------波特率:"+baudrate+",校验位:"+parity+" -----------");
String sendStr = SendOrderUtils.getSendStr(deviceManageEntityList.get(i));
SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceType);
if (deviceType.equals("热泵")) {
Thread.sleep(4000);
} else {
Thread.sleep(2000);
String sendStr = SendOrderUtils.getSendStr(deviceManageEntityList.get(i));
SerialTool.sendToPort(SerialTool.HexString2Bytes(sendStr), serialPort, sendStr, deviceType);
if (deviceType.equals("热泵")) {
for (int j = 0; j < 4; j++) {
Thread.sleep(1000);
// 判断网页端是否有操作设备的
if (Constant.WEB_FLAG) {
SerialTool.closePort(serialPort);
log.info("有指令下发退出定时采集");
break;
}
}
} else {
continue;
Thread.sleep(2000);
}
} catch (Exception e) {
Constant.FLAG = false;//可以采集的状态
log.error("发送窗口数据异常==>", e);
if (null != serialPort) {
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");
if (bytes == null) {
SerialTool.closePort(serialPort);
log.info("串口" + serialPort + "没有数据返回!" + i);
log.info("串口" + serialPort.getName() + "没有数据返回!" + i);
log.info("----------------" + deviceType + "离线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------");
Constant.FLAG = false;//可以采集的状态
String time1 = deviceInstallService.selectLastDate(deviceType, deviceAddr, buildingId);
if (time1 == null) {
time1 = dateStr;
@ -130,9 +130,14 @@ public class SerialPortSendReceive2 {
}
// 处理返回来的数据报文
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) {
Constant.FLAG = false;//可以采集的状态
log.error("-------------串口采集异常!----------->>", e);
}
}
@ -159,45 +164,37 @@ public class SerialPortSendReceive2 {
String registerAddr,
String brand,
String buildingId,
String buildingName, byte[] bytes) throws InterruptedException {
receiveStr = "";
receiveStr = ExchangeStringUtil.parseByte2HexStr(bytes);
//去掉空格和null
receiveStr = receiveStr.replace("null", "");
receiveStr = receiveStr.replace(" ", "");
log.info("串口" + serialPort + "接受第" + i + "数据:" + receiveStr + ",大小: " + receiveStr.length());
String buildingName, byte[] bytes) {
try {
SerialTool.closePort(serialPort);
log.info("关闭" + serialPort);
} catch (Exception e) {
Constant.WEB_FLAG = false;//可以采集的状态
log.error("关闭" + serialPort + "失败!", e);
}
//返回值全部变成大写
String receiveData = receiveStr.toUpperCase();
//截取去掉FE
String dataStr;
if (receiveData.length() > 8) {
String str1 = receiveData.substring(0, 8);
String str2 = receiveData.substring(8);
dataStr = str1.replace("FE", "") + str2;
} else {
dataStr = receiveData.replace("FE", "");
}
deviceInstallService.updateOnline(deviceAddr, deviceType, buildingId, "在线"); //设备在线
log.info("----------------" + deviceType + "在线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------");
if (deviceType.equals("热泵")) {
String strState = nowDataService.selectState(buildingId, deviceAddr);
if (strState != null && strState.equals("离线")) { //采集到数据
nowDataService.updateRunState(buildingId, deviceAddr, "不运行", buildingName); //监控界面状态表热泵在线状态
String receiveStr = "";
receiveStr = ExchangeStringUtil.parseByte2HexStr(bytes);
//去掉空格和null
receiveStr = receiveStr.replace("null", "");
receiveStr = receiveStr.replace(" ", "");
log.info("串口" + serialPort + "接受第" + i + "数据:" + receiveStr + ",大小: " + receiveStr.length());
//返回值全部变成大写
String receiveData = receiveStr.toUpperCase();
//截取去掉FE
String dataStr;
if (receiveData.length() > 8) {
String str1 = receiveData.substring(0, 8);
String str2 = receiveData.substring(8);
dataStr = str1.replace("FE", "") + str2;
} else {
dataStr = receiveData.replace("FE", "");
}
deviceInstallService.updateOnline(deviceAddr, deviceType, buildingId, "在线"); //设备在线
log.info("----------------" + deviceType + "在线,设备号:" + deviceAddr + ",所属楼栋:" + buildingName + "----------------");
if (deviceType.equals("热泵")) {
String strState = nowDataService.selectState(buildingId, deviceAddr);
if (strState != null && strState.equals("离线")) { //采集到数据
nowDataService.updateRunState(buildingId, deviceAddr, "不运行", buildingName); //监控界面状态表热泵在线状态
}
}
}
try {
// 解析返回来的数据
analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, dataStr, analysisReceiveOrder485, nowDataService, buildingName);
} catch (Exception e) {
Constant.WEB_FLAG = false;//可以采集的状态
log.error(deviceManageEntityList.get(i).getDeviceType() + "保存数据库失败!" + i,e);
log.error("楼栋:" + buildingName + "设备类型:" + deviceType + "保存数据库失败!" + i,e);
}
}
@ -224,7 +221,9 @@ public class SerialPortSendReceive2 {
} else if (deviceType.equals("时控")) {
analysisReceiveOrder485.analysisTimeSetOrder485(dateStr,dataStr, registerAddr, brand, buildingId, buildingName);
} 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("状态检测")) {//五路状态读取,兼容旧版系统
analysisReceiveOrder485.analysisStateOrder485(dataStr, registerAddr, brand, buildingId, buildingName);
} else if (deviceType.equals("水位开关") && Constant.REG_ADDR_0010.equals(registerAddr)) {
@ -240,10 +239,11 @@ public class SerialPortSendReceive2 {
String buildingId, String buildingName, AnalysisReceiveOrder485 analysisReceiveOrder485) {
log.info("进入水位开关,地址==>{}", registerAddr);
SysParamEntity sysParamEntity = sysParamService.selectSysParam();
if (null != sysParamEntity && !StringUtils.isBlank(sysParamEntity.getCustomName())) {
if (sysParamEntity.getCustomName().contains(Constant.CUSTOM_NAME_HUAXIA)
|| sysParamEntity.getCustomName().contains(Constant.CUSTOM_NAME_GUANGSHANG)) {
analysisReceiveOrder485.analysisRelayOrder485(dateStr, dataStr,registerAddr,brand,buildingId, buildingName);
String customName = sysParamEntity.getCustomName();
if (!StringUtils.isBlank(customName)) {
if (customName.contains(Constant.CUSTOM_NAME_HUAXIA)
|| customName.contains(Constant.CUSTOM_NAME_GUANGSHANG)) {
analysisReceiveOrder485.analysisRelayOrder485(dateStr, dataStr,registerAddr,brand,buildingId, buildingName, customName);
} else {
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);
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;
if (serialPort != null) {
receiveStr = CacheTools.waitReceiveMsg(serialPort.getName());
@ -99,9 +90,6 @@ public class SerialPortSingle2 {
String deviceType = deviceCodeParamEntity.getDeviceType();
String deviceAddr = deviceCodeParamEntity.getDeviceAddr();
String dataStr = "";
// if ("水表".equals(deviceType) || "电表".equals(deviceType)) {
// dataStr = receiveData.replace("FE", "");
// }
if (receiveData.length() > 8 && ("水表".equals(deviceType) || "电表".equals(deviceType))) {
String str1 = receiveData.substring(0, 8);
String str2 = receiveData.substring(8);
@ -160,6 +148,7 @@ public class SerialPortSingle2 {
log.info("-----------------------------" + serialPort.getName() + "单抄结束!-----------------------------");
return rtData;
} catch (Exception e) {
assert serialPort != null;
log.info("单抄串口" + serialPort.getName() + "异常,没有数据返回!关闭串口", e);
} finally {
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();
}
if (deviceAddr == null || deviceAddr.length() == 0) {
return "fail";
return Constant.FAIL;
}
DeviceInstallEntity deviceInstallEntity =
@ -102,7 +102,7 @@ public class DeviceControlServiceImpl implements DeviceControlService {
rtData = handlePressureTransducer(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle);
break;
case "水表":
rtData = handleWaterMeter(serialPortModel, deviceCodeParam, controlData, controlData, rtData, type, serialPortSingle);
rtData = handleWaterMeter(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle);
break;
case "电表":
rtData = handleElectricMeter(serialPortModel, deviceCodeParam, controlData, rtData, type, serialPortSingle);
@ -143,7 +143,7 @@ public class DeviceControlServiceImpl implements DeviceControlService {
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);
// 要添加校准值
Double deviationValue = deviceInstallService.selectDeviceDeviation(deviceCodeParam.getDeviceAddr(),deviceCodeParam.getDeviceType(), deviceCodeParam.getBuildingId());
@ -175,7 +175,6 @@ public class DeviceControlServiceImpl implements DeviceControlService {
if (!serialPortModel.getDataValue().equals("100%")) {
deviceCodeParam.setDataValue("100%");
serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
Thread.sleep(1000);
}
break;
case "顶威":
@ -186,7 +185,6 @@ public class DeviceControlServiceImpl implements DeviceControlService {
if (!serialPortModel.getDataValue().equals("100%")) {
deviceCodeParam.setDataValue("100%");
serialPortSingle.serialPortSend(deviceCodeParam);//生成并发送指令
Thread.sleep(1000);
}
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.util.Date;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock;
@Slf4j
@Service
@ -42,6 +43,10 @@ public class NowDataServiceImpl implements NowDataService {
@Autowired
BuildingService buildingService;
ReentrantLock lockA = new ReentrantLock();
ReentrantLock lockB = new ReentrantLock();
@Override
public void saveNowData(NowDataEntity nowDataEntity) {
nowDataMapper.saveNowData(nowDataEntity);
@ -439,7 +444,17 @@ public class NowDataServiceImpl implements NowDataService {
//调用过程proWaterTemp
@Override
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

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

@ -1,20 +1,21 @@
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.mapper.BuildingMapper;
import com.mh.user.mapper.DeviceInstallMapper;
import com.mh.user.mapper.NowPublicDataMapper;
import com.mh.user.model.TempModel;
import com.mh.user.service.NowPublicDataService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@Slf4j
@Service
public class NowPublicDataServiceImpl implements NowPublicDataService {
@ -27,6 +28,8 @@ public class NowPublicDataServiceImpl implements NowPublicDataService {
@Autowired
BuildingMapper buildingMapper;
private final SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public void saveNowPublicData(NowPublicDataEntity nowPublicDataEntity) {
nowPublicDataMapper.saveNowPublicData(nowPublicDataEntity);
@ -63,8 +66,8 @@ public class NowPublicDataServiceImpl implements NowPublicDataService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public void saveNowHistoryPublicData(NowPublicDataEntity nowPublicDataEntity ) {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=new Date();
String strDate=sdf1.format(date);
strDate=strDate.substring(0,13)+":00:00";
@ -91,7 +94,7 @@ public class NowPublicDataServiceImpl implements NowPublicDataService {
nowPublicDataMapper.updateHistoryPublicData(nowPublicDataEntity);
}
}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) {
// if (!Constant.CONTROL_WEB_FLAG) {
// threadPoolService.execute(() -> {
String checkStr = receiveData.substring(0, receiveData.length() - 4);//检验报文
String checkWord = ExchangeStringUtil.getStrCRC16(checkStr);//生成校验码
String sValue = null;
@ -297,11 +295,6 @@ public class AnalysisReceiveOrder485 {
nowDataService.proPumpMinutes(buildingId, addr, sValue);
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue);
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);
} else if (registerAddr.equalsIgnoreCase("0642") || registerAddr.equalsIgnoreCase("0007")) {
//0642设定温度,0007水箱水温
@ -325,8 +318,6 @@ public class AnalysisReceiveOrder485 {
}
nowPublicDataService.saveNowHistoryPublicData(publicData);
log.info("楼栋名称:" + buildingName + ",热泵编号:" + addr);
// nowDataService.proWaterTemp(dateStr,buildingId,addr); //保存楼栋时间点温度变化
// log.info("=========保存楼栋时间点温度变化值!===========");
} else if (dataType.equals("tempSet")) {
pumpSetService.updatePumpSetTemp(sValue, buildingId, addr); //更新设定温度
}
@ -346,10 +337,6 @@ public class AnalysisReceiveOrder485 {
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
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")) {
log.info("时间: " + dateStr + ",热泵ID: " + addr + ",操作成功! ");
}
@ -380,11 +367,6 @@ public class AnalysisReceiveOrder485 {
nowDataService.proPumpMinutes(buildingId, addr, sValue);
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + sValue);
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);
} else if (registerAddr.equalsIgnoreCase("0003") || registerAddr.equalsIgnoreCase("0064")) {
//0003设定温度,0064水箱水温
@ -426,19 +408,82 @@ public class AnalysisReceiveOrder485 {
nowDataService.saveNowHistoryData(addr, "热泵", sValue, dataType, buildingId);
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")) {
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); //保存楼栋时间点温度变化
log.info("----------------保存楼栋时间点温度变化值!----------------");
// });
// }
}
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
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(() -> {
String l1 = "";
String l2 = "";
@ -1037,20 +1082,31 @@ public class AnalysisReceiveOrder485 {
} else if (registerAddr.equals("0010")) {
NowPublicDataEntity publicData = new NowPublicDataEntity();
publicData.setBuildingId(buildingId);
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("运行");
if (customName.contains(Constant.CUSTOM_NAME_GUANGSHANG)) {
if (l8.equals("0001")) { //l8路,0000表示有输入,0001表示无输入
publicData.setUseWater("运行"); //供水
publicData.setBackWater("运行");//回水
} else {
publicData.setUseWater("不运行");
publicData.setBackWater("不运行");
}
log.info("-----------------供水/回水状态:" + l8 + "-----------------");
} 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);
log.info("-----------------状态保存数据库成功!楼栋名称:" + buildingName + "-----------------");
}
@ -1194,7 +1250,6 @@ public class AnalysisReceiveOrder485 {
// 热泵状态处理(水位开关),长度42,128
public void analysisPumpStateOrder(final String dateStr, final String receiveData, final String registerAddr, final String brand, String buildingId, String buildingName) {
// threadPoolService.execute(() -> {
String l1 = "";
String l2 = "";
String l3 = "";
@ -1206,7 +1261,7 @@ public class AnalysisReceiveOrder485 {
String runState = "";
String addr = "";
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 checkNum = ExchangeStringUtil.makeChecksum(checkStr); //生成校验码
if (checkNum.equalsIgnoreCase(receiveData.substring(receiveData.length() - 4, receiveData.length() - 2))) {
@ -1218,42 +1273,42 @@ public class AnalysisReceiveOrder485 {
data = ExchangeStringUtil.cutThree(data);
String strStatus = ExchangeStringUtil.hexString2binaryString(data);
strStatus = String.format("%08d", Long.parseLong(strStatus));
if (strStatus.substring(7, 8).equals("1")) {
if (strStatus.charAt(7) == '1') {
l1 = "1";
} else {
l1 = "0";
}
if (strStatus.substring(6, 7).equals("1")) {
if (strStatus.charAt(6) == '1') {
l2 = "1";
} else {
l2 = "0";
}
if (strStatus.substring(5, 6).equals("1")) {
if (strStatus.charAt(5) == '1') {
l3 = "1";
} else {
l3 = "0";
}
if (strStatus.substring(4, 5).equals("1")) {
if (strStatus.charAt(4) == '1') {
l4 = "1";
} else {
l4 = "0";
}
if (strStatus.substring(3, 4).equals("1")) {
if (strStatus.charAt(3) == '1') {
l5 = "1";
} else {
l5 = "0";
}
if (strStatus.substring(2, 3).equals("1")) {
if (strStatus.charAt(2) == '1') {
l6 = "1";
} else {
l6 = "0";
}
if (strStatus.substring(1, 2).equals("1")) {
if (strStatus.charAt(1) == '1') {
l7 = "1";
} else {
l7 = "0";
}
if (strStatus.substring(0, 1).equals("1")) {
if (strStatus.charAt(0) == '1') {
l8 = "1";
} else {
l8 = "0";
@ -1262,8 +1317,6 @@ public class AnalysisReceiveOrder485 {
} else if (brand.equals("中凯")) {
String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文,减去校验码
addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4));
//if (registerAddr!=null && !registerAddr.equals("")) {
//if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用
l1 = checkStr.substring(4, 6);
l2 = checkStr.substring(20, 22);
l3 = checkStr.substring(36, 38);
@ -1272,17 +1325,11 @@ public class AnalysisReceiveOrder485 {
l6 = checkStr.substring(84, 86);
l7 = checkStr.substring(100, 102);
l8 = checkStr.substring(116, 118);
//} else if (registerAddr.equals("0012")) {
//log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! ");
//}
//}
} else if (brand.equals("远向")) {
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.substring(2, 4).equals("03")) {
//if (registerAddr!=null && !registerAddr.equals("")){
l1 = checkStr.substring(6, 10);
l2 = checkStr.substring(10, 14);
l3 = checkStr.substring(14, 18);
@ -1291,60 +1338,46 @@ public class AnalysisReceiveOrder485 {
l6 = checkStr.substring(26, 30);
l7 = checkStr.substring(30, 34);
l8 = checkStr.substring(34, 38);
//}
//} else if (checkStr.substring(2, 4).equals("06") || checkStr.substring(2, 4).equals("04")) {
//log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! " );
//}
} else {
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("0000") || l1.equals("1")){
map.put("1", "运行");
} else {
map.put("1", "不运行");
}
if (l2.equals("12") || l2.equals("0001")) {
// if (l2.equals("12") || l2.equals("0000") || l2.equals("1")){
map.put("2", "运行");
} else {
map.put("2", "不运行");
}
if (l3.equals("12") || l3.equals("0001")) {
// if (l3.equals("12") || l3.equals("0000") || l3.equals("1")) {
map.put("3", "运行");
} else {
map.put("3", "不运行");
}
if (l4.equals("12") || l4.equals("0001")) {
// if (l4.equals("12") || l4.equals("0000") || l4.equals("1")){
map.put("4", "运行");
} else {
map.put("4", "不运行");
}
if (l5.equals("12") || l5.equals("0001")) {
// if (l5.equals("12") || l5.equals("0000") || l5.equals("1")){
map.put("5", "运行");
} else {
map.put("5", "不运行");
}
if (l6.equals("12") || l6.equals("0001")) {
// if (l6.equals("12") || l6.equals("0000") || l6.equals("1")){
map.put("6", "运行");
} else {
map.put("6", "不运行");
}
if (l7.equals("12") || l7.equals("0001")) {
// if (l7.equals("12") || l7.equals("0000") || l7.equals("1")){
map.put("7", "运行");
} else {
map.put("7", "不运行");
}
if (l8.equals("12") || l8.equals("0001")) {
// if (l8.equals("12") || l8.equals("0000") || l8.equals("1")){
map.put("8", "运行");
} else {
map.put("8", "不运行");
@ -1363,9 +1396,6 @@ public class AnalysisReceiveOrder485 {
}
log.info("热泵状态号:" + addr + ",保存数据库成功!楼栋名称:" + buildingName);
}
//}
//}
// });
}
// 热泵状态处理(水位开关),长度42,128
@ -1441,8 +1471,6 @@ public class AnalysisReceiveOrder485 {
} else if (brand.equals("中凯")) {
String checkStr = receiveData.substring(0, receiveData.length() - 4); //检验报文,减去校验码
addr = ExchangeStringUtil.hexToDec(checkStr.substring(2, 4));
//if (registerAddr!=null && !registerAddr.equals("")) {
//if (registerAddr.equalsIgnoreCase("0017")) { //中凯拿功能码作为寄存器地址用
l1 = checkStr.substring(4, 6);
l2 = checkStr.substring(20, 22);
l3 = checkStr.substring(36, 38);
@ -1451,17 +1479,11 @@ public class AnalysisReceiveOrder485 {
l6 = checkStr.substring(84, 86);
l7 = checkStr.substring(100, 102);
l8 = checkStr.substring(116, 118);
//} else if (registerAddr.equals("0012")) {
//log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! ");
//}
//}
} else if (brand.equals("远向")) {
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.substring(2, 4).equals("03")) {
//if (registerAddr!=null && !registerAddr.equals("")){
l1 = checkStr.substring(6, 10);
l2 = checkStr.substring(10, 14);
l3 = checkStr.substring(14, 18);
@ -1470,60 +1492,46 @@ public class AnalysisReceiveOrder485 {
l6 = checkStr.substring(26, 30);
l7 = checkStr.substring(30, 34);
l8 = checkStr.substring(34, 38);
//}
//} else if (checkStr.substring(2, 4).equals("06") || checkStr.substring(2, 4).equals("04")) {
//log.info("时间: " + dateStr + ",热泵状态号: " + addr + ",操作成功! " );
//}
} else {
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("0000") || l1.equals("1")){
map.put("1", "运行");
} else {
map.put("1", "不运行");
}
if (l2.equals("12") || l2.equals("0001")) {
// if (l2.equals("12") || l2.equals("0000") || l2.equals("1")){
map.put("2", "运行");
} else {
map.put("2", "不运行");
}
if (l3.equals("12") || l3.equals("0001")) {
// if (l3.equals("12") || l3.equals("0000") || l3.equals("1")) {
map.put("3", "运行");
} else {
map.put("3", "不运行");
}
if (l4.equals("12") || l4.equals("0001")) {
// if (l4.equals("12") || l4.equals("0000") || l4.equals("1")){
map.put("4", "运行");
} else {
map.put("4", "不运行");
}
if (l5.equals("12") || l5.equals("0001")) {
// if (l5.equals("12") || l5.equals("0000") || l5.equals("1")){
map.put("5", "运行");
} else {
map.put("5", "不运行");
}
if (l6.equals("12") || l6.equals("0001")) {
// if (l6.equals("12") || l6.equals("0000") || l6.equals("1")){
map.put("6", "运行");
} else {
map.put("6", "不运行");
}
if (l7.equals("12") || l7.equals("0001")) {
// if (l7.equals("12") || l7.equals("0000") || l7.equals("1")){
map.put("7", "运行");
} else {
map.put("7", "不运行");
}
if (l8.equals("12") || l8.equals("0001")) {
// if (l8.equals("12") || l8.equals("0000") || l8.equals("1")){
map.put("8", "运行");
} else {
map.put("8", "不运行");
@ -1533,7 +1541,7 @@ public class AnalysisReceiveOrder485 {
for (Map.Entry<String, String> entry : map.entrySet()) {
addr = entry.getKey(); //获取Key值作为热泵ID
runState = entry.getValue();
if (addr != null && Integer.valueOf(addr) <= count) {
if (addr != null && Integer.parseInt(addr) <= count) {
nowDataService.saveNowHistoryData3(addr, "热泵状态", runState, "runState", buildingId);
nowDataService.proPumpMinutes(buildingId, addr, runState); //计算热泵运行时长
log.info("计算热泵运行时长,楼栋名称:" + buildingName + ",热泵编号:" + addr + ",状态:" + runState);
@ -1542,8 +1550,6 @@ public class AnalysisReceiveOrder485 {
log.info("热泵状态号" + addr + ",保存数据库成功!楼栋名称:" + buildingName);
result = JSON.toJSONString(map); //map转json字符串
}
//}
//}
return result;
}

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

@ -1,5 +1,7 @@
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.service.DeviceCodeParamService;
import com.mh.user.service.DeviceInstallService;
@ -58,7 +60,7 @@ public class GetReadOrder485 {
String str = "";
if (deviceAddr != null && deviceAddr.length() > 0) {
try {
if (brand == null || brand.equals("") || brand.equals("艾美柯")) {
if (StringUtils.isBlank(brand) || brand.equals("艾美柯")) {
// 0 代表前面补充0,14 代表长度为14,d 代表参数为正数型
str = String.format("%014d", Long.parseLong(deviceAddr));//基表通讯号
// 转换位置
@ -97,9 +99,9 @@ public class GetReadOrder485 {
// 0代表前面补充0,2代表长度为2,d代表参数为正数型
str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2);
if (brand == null || brand.equals("") || brand.equals("美的")) {
if (funCode == null || funCode.equals("") || funCode.equals("03")) {
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0641")) { // 运行状态
if (StringUtils.isBlank(brand) || Constant.BRAND_MEI_DI.equals(brand)) {
if (StringUtils.isBlank(funCode) || funCode.equals("03")) {
if (StringUtils.isBlank(registerAddr) || registerAddr.equalsIgnoreCase("0641")) { // 运行状态
str = str + "0306410001";
param = "运行状态";
} else if (registerAddr.equalsIgnoreCase("0007")) { // 水温
@ -119,22 +121,21 @@ public class GetReadOrder485 {
param = "时段2";
}
} 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); //写,待测试
} else if (registerAddr.equalsIgnoreCase("0656")) {//时段1
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
} 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 + "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")) {
if (funCode == null || funCode.equals("") || funCode.equals("03")) {
} else if (Constant.BRAND_MEI_DI_TWO.equals(brand)) {
if (StringUtils.isBlank(funCode) || funCode.equals("03")) {
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0BBD")) { // 运行状态
str = str + "030BBD0001";
param = "运行状态";
@ -149,7 +150,7 @@ public class GetReadOrder485 {
param = "设定温度";
}
} 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); //写,待测试
} else if (registerAddr.equals("0000")) {//开关机
if (dataValue.equals("0000")) {
@ -159,9 +160,9 @@ public class GetReadOrder485 {
}
}
}
} else if (brand.equals("瑞星")) {
if (funCode == null || funCode.equals("") || funCode.equals("03")) {
if (registerAddr == null || registerAddr.equals("") || registerAddr.equalsIgnoreCase("0001")) { // 运行状态
} else if (Constant.BRAND_RUI_XING.equals(brand)) {
if (StringUtils.isBlank(funCode) || funCode.equals("03")) {
if (StringUtils.isBlank(registerAddr) || registerAddr.equalsIgnoreCase("0001")) { // 运行状态
str = str + "0300010001";
param = "运行状态";
} else if (registerAddr.equalsIgnoreCase("0046")) { // 水温
@ -188,7 +189,7 @@ public class GetReadOrder485 {
param = "时段2";
}
} 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); //写,待测试
} else if (registerAddr.equalsIgnoreCase("0028") || registerAddr.equalsIgnoreCase("002C")) {//时段1
if (dataValue.length() == 8) {
@ -221,10 +222,10 @@ public class GetReadOrder485 {
String str = "";
if (deviceAddr != null && deviceAddr.length() > 0) {
try {
if (brand == null || brand.equals("") || brand.equals("中凯")) {
if (StringUtils.isBlank(brand) || Constant.BRAND_ZHONG_KAI.equals(brand)) {
str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2);
if (funCode == null || funCode.equals("") || funCode.equals("17")) { //读
if (StringUtils.isBlank(funCode) || funCode.equals("17")) { //读
str = "33" + str + "1700000000"; //旧版继电器
} else if (funCode.equals("12")) {//写
if (dataValue != null && !dataValue.equals("")) {
@ -255,17 +256,17 @@ public class GetReadOrder485 {
String checkSum = ExchangeStringUtil.makeChecksum(str);
str = str + checkSum;
} else if (brand.equals("远向")) {
} else if (Constant.BRAND_YUAN_XIANG.equals(brand)) {
str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2);
if (funCode == null || funCode.equals("") || funCode.equals("03")) {//读
if (StringUtils.isBlank(funCode) || funCode.equals("03")) {//读
if (registerAddr.equalsIgnoreCase("0018")) { //读全部位置
str = str + "0300180008";
} else if (registerAddr.equalsIgnoreCase("0010")) { //读全部DI
str = str + "0300100008";
}
} else if (funCode.equals("06")) { // 写
if (dataValue != null && !dataValue.equals("")) {
if (!StringUtils.isBlank(dataValue)) {
if (dataValue.equals("100%")) {
registerAddr = "10001800081000000000000000000000000000000000"; //全开
} else if (dataValue.equals("90%")) {
@ -293,7 +294,7 @@ public class GetReadOrder485 {
}
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord;
} else if (brand.equals("顶威")) {
} else if (Constant.BRAND_DING_WEI.equals(brand)) {
str = String.format("%012d", Long.parseLong(deviceAddr));
//转换位置
str = ExchangeStringUtil.changePosition(str); //表号
@ -336,20 +337,13 @@ public class GetReadOrder485 {
str = "FEFEFE" + str + checkSum + "16";
}
} catch (Exception e) {
// e.printStackTrace();
if (registerAddr.equals("0010")) {
log.error("生成热泵状态指令出错!" + str);
log.error("生成热泵状态指令出错!" + str, e);
} else {
log.error("生成水位开关指令出错!" + str);
log.error("生成水位开关指令出错!" + str, e);
}
}
}
// if(registerAddr.equals("0010")){
// log.info("生成热泵状态采集指令>>>>" + str);
// }else{
// log.info("生成水位开关采集指令>>>>" + str);
// }
return str.toUpperCase();
}
@ -362,33 +356,24 @@ public class GetReadOrder485 {
String str = "";
if (deviceAddr != null && deviceAddr.length() > 0) {
try {
if (brand == null || brand.equals("") || brand.equals("中凯")) {
if (StringUtils.isBlank(brand) || Constant.BRAND_ZHONG_KAI.equals(brand)) {
str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2);
//if (funCode==null || funCode.equals("") || funCode.equals("17")){ //读
str = "33" + str + "1700000000"; //旧版继电器
//}
// 检验和
String checkSum = ExchangeStringUtil.makeChecksum(str);
str = str + checkSum;
} else if (brand.equals("远向")) {
} else if (Constant.BRAND_YUAN_XIANG.equals(brand)) {
str = ExchangeStringUtil.decToHex(deviceAddr);
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";
//}
//}
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord;
} else if (brand.equals("顶威")) {
} else if (Constant.BRAND_DING_WEI.equals(brand)) {
str = String.format("%012d", Long.parseLong(deviceAddr));
//转换位置
str = ExchangeStringUtil.changePosition(str); //表号
String strData = "";
// if (funCode.equals("0102")){ //读
str = "68" + str + "680102";
strData = "25C0"; //标志
// }
@ -399,7 +384,6 @@ public class GetReadOrder485 {
str = "FEFEFE" + str + checkSum + "16";
}
} catch (Exception e) {
// e.printStackTrace();
log.error("生成热泵状态指令出错!" + str, e);
}
}
@ -428,7 +412,6 @@ public class GetReadOrder485 {
str = "FEFEFE" + str + checkSum + "16";
} catch (Exception e) {
// e.printStackTrace();
log.error("生成状态检测指令出错!" + str, e);
}
}
@ -444,12 +427,12 @@ public class GetReadOrder485 {
try {
str = ExchangeStringUtil.decToHex(deviceAddr); //十进制转为十六进制
str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位
if (brand == null || brand.equals("")) {
str = str + "0300000002"; // 压力变送器(新的协议)
} else if (brand.equals("澳升")) {
if (Constant.BRAND_AU_SUN.equals(brand)) {
str = str + "0300040001"; // 新款压力变送器
} else if (brand.equals("汝翊")) {
} else if (Constant.BRAND_RU_YI.equals(brand)) {
str = str + "0300040001";
} else {
str = str + "0300000002"; // 压力变送器(新的协议)
}
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord;
@ -478,7 +461,6 @@ public class GetReadOrder485 {
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord;
} catch (Exception e) {
// e.printStackTrace();
log.error("生成温控指令出错!" + str, e);
}
}
@ -516,8 +498,7 @@ public class GetReadOrder485 {
str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位
try {
// if (!brand.equals("")){ //品牌
if (!funCode.equals("") && !registerAddr.equals("")) {
if (!StringUtils.isBlank(funCode)) {
registerAddr = ExchangeStringUtil.addZeroForNum(registerAddr, 4); //寄存器地址
funCode = ExchangeStringUtil.addZeroForNum(funCode, 2); // 功能码
@ -540,7 +521,6 @@ public class GetReadOrder485 {
}
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord;
// }
} catch (Exception 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;
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;
/**
@ -16,147 +13,9 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
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) {
//创建将要写出的数据
// 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 sendStr=null;
switch (deviceType) {
@ -194,14 +53,4 @@ public class SendOrderUtils {
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.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
@ -147,10 +145,19 @@ public class TestJwtUtils {
*
* @param args
*/
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 5; i++) {
CacheUtil cacheUtil = CacheUtil.getInstance();
cacheUtil.deleteCache();
public static void main(String[] args) {
// 创建一个按照键的自然顺序排序的TreeMap
TreeMap<String, Integer> sortedMap = new TreeMap<>();
// 添加元素到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