|
|
@@ -1,5 +1,6 @@
|
|
|
package com.zd.laboratory.utils;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.zd.common.core.redis.RedisService;
|
|
|
import com.zd.common.core.utils.SpringUtils;
|
|
|
import com.zd.common.core.utils.StringUtils;
|
|
|
@@ -33,51 +34,71 @@ public class RelayUtils {
|
|
|
|
|
|
/**
|
|
|
* 继电器的开和关
|
|
|
+ *
|
|
|
* @param data
|
|
|
*/
|
|
|
- public static void relayOpenClose(String data,String relayCode) throws IOException {
|
|
|
- log.info("relayOpenClose data:"+data);
|
|
|
- if(data.contains(SocketTypes.NRKJ_IDENTIFY) && !data.contains(SocketTypes.AT_NRKJ_IDENTIFY)){
|
|
|
+ public static void relayOpenClose(String data, String relayCode) throws IOException {
|
|
|
+ log.info("relayOpenClose data:" + data);
|
|
|
+ if (data.contains(SocketTypes.NRKJ_IDENTIFY) && !data.contains(SocketTypes.AT_NRKJ_IDENTIFY)) {
|
|
|
//继电器打开关闭
|
|
|
- String statusData[]= data.split(",")[0].split(":");
|
|
|
- String bitData[]= data.split(",")[0].split("\\+")[1].split(":");
|
|
|
- Integer bit=Integer.parseInt(bitData[0].replace(RelayConstants.STACH,""));
|
|
|
- Integer status=Integer.parseInt(statusData[statusData.length-1]);
|
|
|
- log.info("status:"+status+"bit:"+bit);
|
|
|
+ String statusData[] = data.split(",")[0].split(":");
|
|
|
+ String bitData[] = data.split(",")[0].split("\\+")[1].split(":");
|
|
|
+ Integer bit = Integer.parseInt(bitData[0].replace(RelayConstants.STACH, ""));
|
|
|
+ Integer status = Integer.parseInt(statusData[statusData.length - 1]);
|
|
|
+ log.info("status:" + status + "bit:" + bit);
|
|
|
LabRelayStatus labRelayStatus = new LabRelayStatus();
|
|
|
labRelayStatus.setBit(bit);
|
|
|
- if(status.equals(RelayConstants.AT_OPEN) ){
|
|
|
+ if (status.equals(RelayConstants.AT_OPEN)) {
|
|
|
log.info("打开了");
|
|
|
labRelayStatus.setNum(relayCode);
|
|
|
labRelayStatus.setHardwareOperate(HardwareOperate.OPEN);
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
log.info("关闭了");
|
|
|
labRelayStatus.setNum(relayCode);
|
|
|
labRelayStatus.setHardwareOperate(HardwareOperate.CLOSE);
|
|
|
}
|
|
|
//抛出继电器开关切换事件
|
|
|
- LabRelayNrStatusEvent relayNrStatusEvent=new LabRelayNrStatusEvent(labRelayStatus);
|
|
|
+ LabRelayNrStatusEvent relayNrStatusEvent = new LabRelayNrStatusEvent(labRelayStatus);
|
|
|
SpringUtils.getApplicationContext().publishEvent(relayNrStatusEvent);
|
|
|
+ //匹配返回命令
|
|
|
+ } else if (ATCommandValidator.isCommandValid(data)) {
|
|
|
+ // 提取操作位数
|
|
|
+ String bit = ATCommandValidator.extractNumber(data);
|
|
|
+
|
|
|
+ // 判断继电器状态(开/关) true 开发 false 关
|
|
|
+ HardwareOperate command = ATCommandValidator.checkCommand(data) ?
|
|
|
+ HardwareOperate.OPEN : HardwareOperate.CLOSE;
|
|
|
+
|
|
|
+ // 记录操作日志并构建JSON对象
|
|
|
+ log.info("relayOpenClose继电器{}操作: 设备编号={}, 操作位={}", data, relayCode, bit);
|
|
|
+ LabRelayStatus labRelayStatus = new LabRelayStatus();
|
|
|
+ labRelayStatus.setNum(relayCode);
|
|
|
+ labRelayStatus.setBit(Integer.valueOf(bit));
|
|
|
+ labRelayStatus.setHardwareOperate(command);
|
|
|
+ // 发布设备开关切换事件
|
|
|
+ LabRelayNrStatusEvent event = new LabRelayNrStatusEvent(labRelayStatus);
|
|
|
+ SpringUtils.getApplicationContext().publishEvent(event);
|
|
|
}
|
|
|
- Object code= concurrentMap.get(RelayConstants.AT_RELAY_DATA+relayCode);
|
|
|
- Integer activeCode=redisService.getCacheObject(RelayConstants.AT_RELAY_DATA+relayCode);
|
|
|
- String dataStr= data.substring(0,17)+SocketTypes.NRKJ_PREFIX;
|
|
|
- log.info("code:"+code+"activeCode:"+activeCode+"data:"+data);
|
|
|
- if(StringUtils.isNull(code) || StringUtils.isNull(activeCode) || dataStr.equals(data)){
|
|
|
- NettyPushMsgService.push(relayCode,RelayConstants.AT_STACH_ALL.getBytes());
|
|
|
- concurrentMap.put(RelayConstants.AT_RELAY_DATA+relayCode,HardwareOperate.CLOSE.getCode());
|
|
|
+ Object code = concurrentMap.get(RelayConstants.AT_RELAY_DATA + relayCode);
|
|
|
+ Integer activeCode = redisService.getCacheObject(RelayConstants.AT_RELAY_DATA + relayCode);
|
|
|
+ String dataStr = data.substring(0, 17) + SocketTypes.NRKJ_PREFIX;
|
|
|
+ log.info("code:" + code + "activeCode:" + activeCode + "data:" + data);
|
|
|
+ if (StringUtils.isNull(code) || StringUtils.isNull(activeCode) || dataStr.equals(data)) {
|
|
|
+ NettyPushMsgService.push(relayCode, RelayConstants.AT_STACH_ALL.getBytes());
|
|
|
+ concurrentMap.put(RelayConstants.AT_RELAY_DATA + relayCode, HardwareOperate.CLOSE.getCode());
|
|
|
}
|
|
|
- redisService.setCacheObject(RelayConstants.AT_RELAY_DATA+relayCode,HardwareOperate.CLOSE.getCode(),1L, TimeUnit.MINUTES);
|
|
|
+ redisService.setCacheObject(RelayConstants.AT_RELAY_DATA + relayCode, HardwareOperate.CLOSE.getCode(), 1L, TimeUnit.MINUTES);
|
|
|
}
|
|
|
|
|
|
public static void relayOpenClose(String relayCode) throws IOException {
|
|
|
- NettyPushMsgService.push(relayCode,RelayConstants.AT_STACH_ALL.getBytes());
|
|
|
- redisService.setCacheObject(RelayConstants.AT_RELAY_DATA+relayCode,HardwareOperate.CLOSE.getCode(),15L, TimeUnit.SECONDS);
|
|
|
+ NettyPushMsgService.push(relayCode, RelayConstants.AT_STACH_ALL.getBytes());
|
|
|
+ redisService.setCacheObject(RelayConstants.AT_RELAY_DATA + relayCode, HardwareOperate.CLOSE.getCode(), 15L, TimeUnit.SECONDS);
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 继电器状态保存
|
|
|
+ *
|
|
|
* @param data
|
|
|
*/
|
|
|
public static void relayRefreshStatus(String data, String relayCode, String codeStr) {
|
|
|
@@ -88,15 +109,15 @@ public class RelayUtils {
|
|
|
if (data.contains(RelayConstants.AT_STACH_ALL_STR)) {
|
|
|
log.info("【继电器状态刷新】数据信息: {} ", data);
|
|
|
String disposeCommand = data.replace(codeStr + RelayConstants.AT_STACH_ALL_STR, "");
|
|
|
- disposeCommand=disposeCommand.replace(RelayConstants.PLUS_STACH,"");
|
|
|
- log.info("disposeCommand:{}",disposeCommand);
|
|
|
+ disposeCommand = disposeCommand.replace(RelayConstants.PLUS_STACH, "");
|
|
|
+ log.info("disposeCommand:{}", disposeCommand);
|
|
|
String splitCommand[] = disposeCommand.split("100000");
|
|
|
//String disposeCommand = data.replace(codeStr + RelayConstants.AT_STACH_ALL, "");
|
|
|
//String splitCommand[] = disposeCommand.split(RelayConstants.AT_SPLITE);
|
|
|
LabRelayStatus labRelayStatus = new LabRelayStatus();
|
|
|
for (String split : splitCommand) {
|
|
|
String status[] = split.split(",")[0].split(":");
|
|
|
- if(status.length > 1){
|
|
|
+ if (status.length > 1) {
|
|
|
String bitStr = status[0].replace(RelayConstants.PLUS_STACH, "");
|
|
|
log.info("bit:" + bitStr + "继电器设备状态 status[]:" + Arrays.toString(status));
|
|
|
labRelayStatus.setNum(relayCode);
|