|
|
@@ -1,6 +1,7 @@
|
|
|
package com.zksy.pole.service.impl;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.zksy.common.utils.LockUtils;
|
|
|
import com.zksy.pole.MQTTServer.request.MqttRequest;
|
|
|
import com.zksy.pole.MQTTServer.server.MQTTServer;
|
|
|
import com.zksy.pole.domain.dto.*;
|
|
|
@@ -10,12 +11,17 @@ import io.netty.buffer.Unpooled;
|
|
|
import io.netty.channel.Channel;
|
|
|
import io.netty.channel.ChannelId;
|
|
|
import io.netty.handler.codec.mqtt.*;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.redisson.api.RLock;
|
|
|
+import org.redisson.api.RedissonClient;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
/**
|
|
|
* @author Administrator
|
|
|
@@ -25,28 +31,28 @@ import java.util.Map;
|
|
|
* @date 2024/8/28 17:41:04
|
|
|
*/
|
|
|
@Service
|
|
|
+@Slf4j
|
|
|
public class InstructionIssuanceServerImpl implements InstructionIssuanceServer {
|
|
|
private static final Map<String,Object> msgMap= new HashMap<>();
|
|
|
+ @Autowired
|
|
|
+ private LockUtils lockUtils;
|
|
|
+ @Autowired
|
|
|
+ private RedisTemplate<String, String> redisTemplate;
|
|
|
@Override
|
|
|
public String instructionIssuance(ReportEnvironmentalDataDto dto) {
|
|
|
Map<String, Object> fields = new HashMap<>();
|
|
|
fields.put("light_nums",dto.getLightNums());
|
|
|
fields.put("brightness",dto.getBrightness());
|
|
|
- sendMqttMessage(dto,fields);
|
|
|
- System.out.println("dto------>"+dto.getCmd());
|
|
|
- System.out.println("dto------>"+dto.getBrightness());
|
|
|
- System.out.println("dto------>"+dto.getLightNums());
|
|
|
- System.out.println("dto------>"+dto.getPackageId());
|
|
|
- System.out.println("f------->"+fields);
|
|
|
- return "ok";
|
|
|
+ String receipt = getReceipt(dto, fields);
|
|
|
+ return receipt;
|
|
|
}
|
|
|
-
|
|
|
@Override
|
|
|
public String equipmentStatus(BaseDto dto) {
|
|
|
Map<String, Object> fields = new HashMap<>();
|
|
|
fields.put("light_nums",dto.getLightNums());
|
|
|
sendMqttMessage(dto,fields);
|
|
|
- return "ok";
|
|
|
+ String receipt = getReceipt(dto, fields);
|
|
|
+ return receipt;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -59,8 +65,8 @@ public class InstructionIssuanceServerImpl implements InstructionIssuanceServer
|
|
|
fields.put("start_time",dto.getStart_time());
|
|
|
fields.put("end_time",dto.getEnd_time());
|
|
|
fields.put("params",dto.getParams());
|
|
|
- sendMqttMessage(dto,fields);
|
|
|
- return "ok";
|
|
|
+ String receipt = getReceipt(dto, fields);
|
|
|
+ return receipt;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -69,32 +75,32 @@ public class InstructionIssuanceServerImpl implements InstructionIssuanceServer
|
|
|
fields.put("light_nums",dto.getLightNums());
|
|
|
fields.put("id",dto.getId());
|
|
|
fields.put("tag",dto.getTag());
|
|
|
- sendMqttMessage(dto,fields);
|
|
|
- return "ok";
|
|
|
+ String receipt = getReceipt(dto, fields);
|
|
|
+ return receipt;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public String setGatewayTime(SetGatewayTimeDto dto) {
|
|
|
Map<String, Object> fields = new HashMap<>();
|
|
|
fields.put("timestamp",dto.getTimestamp());
|
|
|
- sendMqttMessage(dto,fields);
|
|
|
- return "ok";
|
|
|
+ String receipt = getReceipt(dto, fields);
|
|
|
+ return receipt;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public String reRegistered(BaseDto dto) {
|
|
|
Map<String, Object> fields = new HashMap<>();
|
|
|
fields.put("package_id",null);
|
|
|
- sendMqttMessage(dto,fields);
|
|
|
- return "ok";
|
|
|
+ String receipt = getReceipt(dto, fields);
|
|
|
+ return receipt;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public String relayControl(RelayControlDto dto) {
|
|
|
Map<String, Object> fields = new HashMap<>();
|
|
|
fields.put("params",dto.getParams());
|
|
|
- sendMqttMessage(dto,fields);
|
|
|
- return "ok";
|
|
|
+ String receipt = getReceipt(dto, fields);
|
|
|
+ return receipt;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -107,8 +113,8 @@ public class InstructionIssuanceServerImpl implements InstructionIssuanceServer
|
|
|
fields.put("start_time",dto.getStatus());
|
|
|
fields.put("end_time",dto.getStartTime());
|
|
|
fields.put("params",dto.getEndTime());
|
|
|
- sendMqttMessage(dto,fields);
|
|
|
- return "ok";
|
|
|
+ String receipt = getReceipt(dto, fields);
|
|
|
+ return receipt;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -117,16 +123,16 @@ public class InstructionIssuanceServerImpl implements InstructionIssuanceServer
|
|
|
fields.put("index",dto.getIndex());
|
|
|
fields.put("id",dto.getId());
|
|
|
fields.put("tag",dto.getTag());
|
|
|
- sendMqttMessage(dto,fields);
|
|
|
- return "ok";
|
|
|
+ String receipt = getReceipt(dto, fields);
|
|
|
+ return receipt;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public String queryRelayTiming(QueryRelayTimingDto dto) {
|
|
|
Map<String, Object> fields = new HashMap<>();
|
|
|
fields.put("index",dto.getIndex());
|
|
|
- sendMqttMessage(dto,fields);
|
|
|
- return "ok";
|
|
|
+ String receipt = getReceipt(dto, fields);
|
|
|
+ return receipt;
|
|
|
}
|
|
|
|
|
|
private void sendMqttMessage(BaseDto dto,Map<String, Object> additionalFields) {
|
|
|
@@ -165,4 +171,26 @@ public class InstructionIssuanceServerImpl implements InstructionIssuanceServer
|
|
|
pubMessage.release();
|
|
|
}
|
|
|
}
|
|
|
+ private String getReceipt(BaseDto dto, Map<String, Object> fields) {
|
|
|
+ lockUtils.lock("lock:cmd:" + dto.getCmd());
|
|
|
+ sendMqttMessage(dto, fields);
|
|
|
+ long startTime = System.currentTimeMillis();
|
|
|
+ long timeoutMillis = 20000;
|
|
|
+ while (lockUtils.isLocked("lock:cmd:" + dto.getCmd())){
|
|
|
+ try {
|
|
|
+ System.out.println("当前锁住了");
|
|
|
+ Thread.sleep(100);
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ Thread.currentThread().interrupt();
|
|
|
+ log.error("线程被中断");
|
|
|
+ }
|
|
|
+ // 检查是否超时
|
|
|
+ if (System.currentTimeMillis() - startTime > timeoutMillis) {
|
|
|
+ log.error("等待锁超时,方法失败");
|
|
|
+ redisTemplate.delete("lock:cmd:" + dto.getCmd());
|
|
|
+ throw new RuntimeException("等待超时");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return redisTemplate.opsForValue().get("cmd:" + dto.getCmd());
|
|
|
+ }
|
|
|
}
|