refactor(access): 优化设备接入流程和日志记录
- 移除不必要的日志模板依赖和相关变量 - 简化设备接入方法中的成功失败ID收集逻辑 - 优化模板信息获取的等待机制,替换固定延时为条件循环 - 更新设备状态查询条件,排除未注册状态的设备 - 重构消息处理器中的日志记录方式,统一操作描述格式 - 修复事务注解在特定方法上的配置问题 - 调整设备接入流程步骤顺序,优化异常处理机制 - 更新MQTT消息处理中的操作日志描述,增加系统端标识 - 优化设备数据询问功能的日志记录完整性
This commit is contained in:
@@ -57,7 +57,7 @@ public enum AccessResponseEnum {
|
|||||||
WAVE_INFO_MISSING("A0307","波形参数缺失!"),
|
WAVE_INFO_MISSING("A0307","波形参数缺失!"),
|
||||||
|
|
||||||
MODEL_MISS("A0308","询问模板信息超时,设备未响应!"),
|
MODEL_MISS("A0308","询问模板信息超时,设备未响应!"),
|
||||||
MODEL_VERSION_ERROR("A0308","询问装置模板信息错误"),
|
MODEL_VERSION_ERROR("A0308","装置模板DevModInfo数据为空"),
|
||||||
UPLOAD_ERROR("A0308","平台上送文件异常"),
|
UPLOAD_ERROR("A0308","平台上送文件异常"),
|
||||||
RELOAD_UPLOAD_ERROR("A0308","平台重新上送文件异常"),
|
RELOAD_UPLOAD_ERROR("A0308","平台重新上送文件异常"),
|
||||||
|
|
||||||
|
|||||||
@@ -105,15 +105,16 @@ public class MqttMessageHandler {
|
|||||||
@MqttSubscribe(value = "/Dev/DevTopic/{edgeId}",qos = 1)
|
@MqttSubscribe(value = "/Dev/DevTopic/{edgeId}",qos = 1)
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void devTopic(String topic, MqttMessage message, @NamedValue("edgeId") String nDid, @Payload String payload){
|
public void devTopic(String topic, MqttMessage message, @NamedValue("edgeId") String nDid, @Payload String payload){
|
||||||
|
//业务流程开始
|
||||||
|
Gson gson = new Gson();
|
||||||
|
ReqAndResParam.Res res = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ReqAndResParam.Res.class);
|
||||||
//日志记录
|
//日志记录
|
||||||
LogMessage logDto = new LogMessage();
|
LogMessage logDto = new LogMessage();
|
||||||
logDto.setUserIndex("系统");
|
logDto.setUserIndex("系统");
|
||||||
logDto.setLoginName("系统");
|
logDto.setLoginName("系统");
|
||||||
logDto.setOperate(nDid + "设备主题录入");
|
logDto.setOperate("系统端收到装置端"+nDid+"发送的主题信息,code = " + res.getCode());
|
||||||
logDto.setResult(1);
|
logDto.setResult(1);
|
||||||
//业务流程开始
|
logMessageTemplate.sendMember(logDto);
|
||||||
Gson gson = new Gson();
|
|
||||||
ReqAndResParam.Res res = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ReqAndResParam.Res.class);
|
|
||||||
//检验传递的参数是否准确
|
//检验传递的参数是否准确
|
||||||
Set<ConstraintViolation<ReqAndResParam.Res>> validate = validator.validate(res);
|
Set<ConstraintViolation<ReqAndResParam.Res>> validate = validator.validate(res);
|
||||||
// validate.forEach(constraintViolation -> {
|
// validate.forEach(constraintViolation -> {
|
||||||
@@ -162,15 +163,16 @@ public class MqttMessageHandler {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void devOperation(String topic, MqttMessage message, @NamedValue("edgeId") String nDid, @Payload String payload){
|
public void devOperation(String topic, MqttMessage message, @NamedValue("edgeId") String nDid, @Payload String payload){
|
||||||
log.info("收到注册应答响应--->{}", nDid);
|
log.info("收到注册应答响应--->{}", nDid);
|
||||||
|
//业务处理
|
||||||
|
Gson gson = new Gson();
|
||||||
|
ReqAndResDto.Res res = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ReqAndResDto.Res.class);
|
||||||
//日志记录
|
//日志记录
|
||||||
LogMessage logDto = new LogMessage();
|
LogMessage logDto = new LogMessage();
|
||||||
logDto.setUserIndex("系统");
|
logDto.setUserIndex("系统");
|
||||||
logDto.setLoginName("系统");
|
logDto.setLoginName("系统");
|
||||||
logDto.setOperate("收到设备"+nDid+"注册应答响应");
|
logDto.setOperate("系统端收到装置端"+nDid+"注册应答响应,code = " + res.getCode());
|
||||||
logDto.setResult(1);
|
logDto.setResult(1);
|
||||||
//业务处理
|
logMessageTemplate.sendMember(logDto);
|
||||||
Gson gson = new Gson();
|
|
||||||
ReqAndResDto.Res res = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ReqAndResDto.Res.class);
|
|
||||||
if (Objects.equals(res.getCode(),AccessEnum.SUCCESS.getCode())){
|
if (Objects.equals(res.getCode(),AccessEnum.SUCCESS.getCode())){
|
||||||
if (Objects.equals(res.getType(),Integer.parseInt(TypeEnum.TYPE_17.getCode()))){
|
if (Objects.equals(res.getType(),Integer.parseInt(TypeEnum.TYPE_17.getCode()))){
|
||||||
//询问模板数据
|
//询问模板数据
|
||||||
@@ -182,6 +184,11 @@ public class MqttMessageHandler {
|
|||||||
reqAndResParam.setExpire(-1);
|
reqAndResParam.setExpire(-1);
|
||||||
String version = csTopicService.getVersion(nDid);
|
String version = csTopicService.getVersion(nDid);
|
||||||
publisher.send("/Pfm/DevCmd/"+version+"/"+nDid,new Gson().toJson(reqAndResParam),1,false);
|
publisher.send("/Pfm/DevCmd/"+version+"/"+nDid,new Gson().toJson(reqAndResParam),1,false);
|
||||||
|
//记录日志
|
||||||
|
logDto.setUserIndex("系统");
|
||||||
|
logDto.setLoginName("系统");
|
||||||
|
logDto.setOperate("注册阶段:系统端向装置端"+nDid+"发送询问模板请求");
|
||||||
|
logDto.setResult(1);
|
||||||
logMessageTemplate.sendMember(logDto);
|
logMessageTemplate.sendMember(logDto);
|
||||||
} else {
|
} else {
|
||||||
logDto.setResult(0);
|
logDto.setResult(0);
|
||||||
@@ -207,7 +214,7 @@ public class MqttMessageHandler {
|
|||||||
*/
|
*/
|
||||||
@MqttSubscribe(value = "/Pfm/DevRsp/{version}/{edgeId}",qos = 1)
|
@MqttSubscribe(value = "/Pfm/DevRsp/{version}/{edgeId}",qos = 1)
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void devAccessOperation(String topic, MqttMessage message, @NamedValue("version") String version, @NamedValue("edgeId") String nDid, @Payload String payload){
|
public void devAccessOperation(String topic, MqttMessage message, @NamedValue("version") String version, @NamedValue("edgeId") String nDid, @Payload String payload) throws InterruptedException {
|
||||||
//日志实体
|
//日志实体
|
||||||
LogMessage logDto = new LogMessage();
|
LogMessage logDto = new LogMessage();
|
||||||
logDto.setUserIndex("系统");
|
logDto.setUserIndex("系统");
|
||||||
@@ -226,7 +233,8 @@ public class MqttMessageHandler {
|
|||||||
* 3.平台端需读取装置的DevMod来判断网关支持的设备模板(包含设备型号和模板版本),根据app提交的接入子设备DID匹配数据模板(型号及版本),生成DevCfg下发给网关,网关根据下发信息生成就地设备点表。
|
* 3.平台端需读取装置的DevMod来判断网关支持的设备模板(包含设备型号和模板版本),根据app提交的接入子设备DID匹配数据模板(型号及版本),生成DevCfg下发给网关,网关根据下发信息生成就地设备点表。
|
||||||
*/
|
*/
|
||||||
case 4611:
|
case 4611:
|
||||||
logDto.setOperate("装置模板应答");
|
logDto.setOperate("系统端收到装置端"+nDid+"模板应答,code = " + res.getCode());
|
||||||
|
logMessageTemplate.sendMember(logDto);
|
||||||
//log.info("{},装置模板应答,应答code {}",nDid,res.getCode());
|
//log.info("{},装置模板应答,应答code {}",nDid,res.getCode());
|
||||||
ModelDto modelDto = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ModelDto.class);
|
ModelDto modelDto = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ModelDto.class);
|
||||||
List<DevModInfoDto> list = modelDto.getMsg().getDevMod();
|
List<DevModInfoDto> list = modelDto.getMsg().getDevMod();
|
||||||
@@ -292,7 +300,9 @@ public class MqttMessageHandler {
|
|||||||
logMessageTemplate.sendMember(logDto);
|
logMessageTemplate.sendMember(logDto);
|
||||||
break;
|
break;
|
||||||
case 4613:
|
case 4613:
|
||||||
logDto.setOperate(nDid + "设备接入");
|
logDto.setOperate("系统端收到装置端"+nDid+"接入应答,code = " + res.getCode());
|
||||||
|
logDto.setResult(1);
|
||||||
|
logMessageTemplate.sendMember(logDto);
|
||||||
//log.info("{},收到接入应答响应,应答code {}",nDid,res.getCode());
|
//log.info("{},收到接入应答响应,应答code {}",nDid,res.getCode());
|
||||||
if (Objects.equals(res.getCode(),AccessEnum.SUCCESS.getCode())){
|
if (Objects.equals(res.getCode(),AccessEnum.SUCCESS.getCode())){
|
||||||
int mid = 1;
|
int mid = 1;
|
||||||
@@ -334,7 +344,8 @@ public class MqttMessageHandler {
|
|||||||
if (!Objects.isNull(rspDataDto.getDataType())) {
|
if (!Objects.isNull(rspDataDto.getDataType())) {
|
||||||
switch (rspDataDto.getDataType()){
|
switch (rspDataDto.getDataType()){
|
||||||
case 1:
|
case 1:
|
||||||
logDto.setOperate(nDid + "更新设备软件信息");
|
logDto.setOperate("系统端收到装置端"+nDid+"更新设备软件信息报文,code = " + res.getCode());
|
||||||
|
logDto.setResult(1);
|
||||||
RspDataDto.SoftInfo softInfo = JSON.parseObject(JSON.toJSONString(rspDataDto.getDataArray()), RspDataDto.SoftInfo.class);
|
RspDataDto.SoftInfo softInfo = JSON.parseObject(JSON.toJSONString(rspDataDto.getDataArray()), RspDataDto.SoftInfo.class);
|
||||||
//记录设备软件信息
|
//记录设备软件信息
|
||||||
CsSoftInfoPO csSoftInfoPo = new CsSoftInfoPO();
|
CsSoftInfoPO csSoftInfoPo = new CsSoftInfoPO();
|
||||||
@@ -365,7 +376,8 @@ public class MqttMessageHandler {
|
|||||||
List<RspDataDto.LdevInfo> devInfo = JSON.parseArray(JSON.toJSONString(rspDataDto.getDataArray()), RspDataDto.LdevInfo.class);
|
List<RspDataDto.LdevInfo> devInfo = JSON.parseArray(JSON.toJSONString(rspDataDto.getDataArray()), RspDataDto.LdevInfo.class);
|
||||||
if (CollectionUtil.isNotEmpty(devInfo)){
|
if (CollectionUtil.isNotEmpty(devInfo)){
|
||||||
if (Objects.equals(res.getDid(),1)){
|
if (Objects.equals(res.getDid(),1)){
|
||||||
logDto.setOperate(nDid + "更新APF容量");
|
logDto.setOperate("系统端收到装置端"+nDid+"更新APF容量报文,code = " + res.getCode());
|
||||||
|
logDto.setResult(1);
|
||||||
List<CsDevCapacityPO> list3 = new ArrayList<>();
|
List<CsDevCapacityPO> list3 = new ArrayList<>();
|
||||||
boolean hasZeroClDid = devInfo.stream().anyMatch(item -> item.getClDid() == 0);
|
boolean hasZeroClDid = devInfo.stream().anyMatch(item -> item.getClDid() == 0);
|
||||||
//治理设备
|
//治理设备
|
||||||
@@ -394,7 +406,8 @@ public class MqttMessageHandler {
|
|||||||
equipmentFeignClient.updateModuleNumber(nDid,(devInfo.size()-1));
|
equipmentFeignClient.updateModuleNumber(nDid,(devInfo.size()-1));
|
||||||
}
|
}
|
||||||
} else if (Objects.equals(res.getDid(),2)) {
|
} else if (Objects.equals(res.getDid(),2)) {
|
||||||
logDto.setOperate(nDid + "更新电网侧、负载侧监测点信息");
|
logDto.setOperate("系统端收到装置端"+nDid+"更新电网侧、负载侧监测点信息报文,code = " + res.getCode());
|
||||||
|
logDto.setResult(1);
|
||||||
//1.更新电网侧、负载侧监测点相关信息
|
//1.更新电网侧、负载侧监测点相关信息
|
||||||
devInfo.forEach(item->{
|
devInfo.forEach(item->{
|
||||||
updateLineInfo(nDid,item);
|
updateLineInfo(nDid,item);
|
||||||
@@ -404,7 +417,8 @@ public class MqttMessageHandler {
|
|||||||
logMessageTemplate.sendMember(logDto);
|
logMessageTemplate.sendMember(logDto);
|
||||||
break;
|
break;
|
||||||
case 15:
|
case 15:
|
||||||
logDto.setOperate(nDid + "更新设备软件信息");
|
logDto.setOperate("系统端收到装置端"+nDid+"更新设备软件信息报文,code = " + res.getCode());
|
||||||
|
logDto.setResult(1);
|
||||||
JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(res));
|
JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(res));
|
||||||
AppAutoDataMessage appAutoDataMessage = JSONObject.toJavaObject(jsonObject, AppAutoDataMessage.class);
|
AppAutoDataMessage appAutoDataMessage = JSONObject.toJavaObject(jsonObject, AppAutoDataMessage.class);
|
||||||
appAutoDataMessage.setId(nDid);
|
appAutoDataMessage.setId(nDid);
|
||||||
@@ -412,8 +426,8 @@ public class MqttMessageHandler {
|
|||||||
logMessageTemplate.sendMember(logDto);
|
logMessageTemplate.sendMember(logDto);
|
||||||
break;
|
break;
|
||||||
case 48:
|
case 48:
|
||||||
logDto.setUserIndex("系统");
|
logDto.setOperate("系统端收到装置端"+nDid+"询问项目列表报文,code = " + res.getCode());
|
||||||
logDto.setOperate("监测点:" + (nDid + rspDataDto.getClDid()) + "询问项目列表");
|
logDto.setResult(1);
|
||||||
List<RspDataDto.ProjectInfo> projectInfoList = JSON.parseArray(JSON.toJSONString(rspDataDto.getDataArray()), RspDataDto.ProjectInfo.class);
|
List<RspDataDto.ProjectInfo> projectInfoList = JSON.parseArray(JSON.toJSONString(rspDataDto.getDataArray()), RspDataDto.ProjectInfo.class);
|
||||||
String key3 = AppRedisKey.PROJECT_INFO + nDid + rspDataDto.getClDid();
|
String key3 = AppRedisKey.PROJECT_INFO + nDid + rspDataDto.getClDid();
|
||||||
redisUtil.saveByKeyWithExpire(key3,projectInfoList,60L);
|
redisUtil.saveByKeyWithExpire(key3,projectInfoList,60L);
|
||||||
@@ -433,6 +447,11 @@ public class MqttMessageHandler {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
} else if (Objects.equals(res.getCode(),AccessEnum.START_CHANNEL.getCode())) {
|
||||||
|
logDto.setOperate(AccessEnum.START_CHANNEL.getMessage() + ",系统等待5s");
|
||||||
|
logDto.setResult(1);
|
||||||
|
logMessageTemplate.sendMember(logDto);
|
||||||
|
Thread.sleep(5000);
|
||||||
} else {
|
} else {
|
||||||
String result = getEnum(res.getCode());
|
String result = getEnum(res.getCode());
|
||||||
//log.info(result);
|
//log.info(result);
|
||||||
@@ -690,6 +709,10 @@ public class MqttMessageHandler {
|
|||||||
* 3:监测点pt/ct信息
|
* 3:监测点pt/ct信息
|
||||||
*/
|
*/
|
||||||
public void askDevData(String nDid,String version,Integer type,Integer mid){
|
public void askDevData(String nDid,String version,Integer type,Integer mid){
|
||||||
|
LogMessage logDto = new LogMessage();
|
||||||
|
logDto.setUserIndex("系统");
|
||||||
|
logDto.setLoginName("系统");
|
||||||
|
logDto.setResult(1);
|
||||||
ReqAndResDto.Req reqAndResParam = new ReqAndResDto.Req();
|
ReqAndResDto.Req reqAndResParam = new ReqAndResDto.Req();
|
||||||
reqAndResParam.setMid(mid);
|
reqAndResParam.setMid(mid);
|
||||||
reqAndResParam.setPri(AccessEnum.FIRST_CHANNEL.getCode());
|
reqAndResParam.setPri(AccessEnum.FIRST_CHANNEL.getCode());
|
||||||
@@ -705,28 +728,33 @@ public class MqttMessageHandler {
|
|||||||
reqAndResParam.setDid(0);
|
reqAndResParam.setDid(0);
|
||||||
askDataDto.setCldid(0);
|
askDataDto.setCldid(0);
|
||||||
askDataDto.setDataType(1);
|
askDataDto.setDataType(1);
|
||||||
|
logDto.setOperate("系统端向装置端"+nDid+"询问软件信息");
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
reqAndResParam.setDid(1);
|
reqAndResParam.setDid(1);
|
||||||
askDataDto.setCldid(-1);
|
askDataDto.setCldid(-1);
|
||||||
askDataDto.setDataType(2);
|
askDataDto.setDataType(2);
|
||||||
|
logDto.setOperate("系统端向装置端"+nDid+"询问逻辑设备1信息");
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
reqAndResParam.setDid(2);
|
reqAndResParam.setDid(2);
|
||||||
askDataDto.setCldid(-1);
|
askDataDto.setCldid(-1);
|
||||||
askDataDto.setDataType(2);
|
askDataDto.setDataType(2);
|
||||||
|
logDto.setOperate("系统端向装置端"+nDid+"询问逻辑设备2信息");
|
||||||
break;
|
break;
|
||||||
//询问工程信息
|
//询问工程信息
|
||||||
case 48:
|
case 48:
|
||||||
reqAndResParam.setDid(1);
|
reqAndResParam.setDid(1);
|
||||||
askDataDto.setCldid(1);
|
askDataDto.setCldid(1);
|
||||||
askDataDto.setDataType(48);
|
askDataDto.setDataType(48);
|
||||||
|
logDto.setOperate("系统端向装置端"+nDid+"询问工程信息");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
reqAndResParam.setMsg(askDataDto);
|
reqAndResParam.setMsg(askDataDto);
|
||||||
publisher.send("/Pfm/DevCmd/"+version+"/"+nDid, new Gson().toJson(reqAndResParam),1,false);
|
publisher.send("/Pfm/DevCmd/"+version+"/"+nDid, new Gson().toJson(reqAndResParam),1,false);
|
||||||
|
logMessageTemplate.sendMember(logDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getEnum(Integer code) {
|
public String getEnum(Integer code) {
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ public class AccessApplicationRunner implements ApplicationRunner {
|
|||||||
private final ICsEquipmentDeliveryService csEquipmentDeliveryService;
|
private final ICsEquipmentDeliveryService csEquipmentDeliveryService;
|
||||||
private final ICsTopicService csTopicService;
|
private final ICsTopicService csTopicService;
|
||||||
private final CsDeviceServiceImpl csDeviceService;
|
private final CsDeviceServiceImpl csDeviceService;
|
||||||
private final LogMessageTemplate logMessageTemplate;
|
|
||||||
private final ChannelObjectUtil channelObjectUtil;
|
private final ChannelObjectUtil channelObjectUtil;
|
||||||
|
|
||||||
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
|
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
|
||||||
@@ -101,8 +100,6 @@ public class AccessApplicationRunner implements ApplicationRunner {
|
|||||||
|
|
||||||
public void accessDev(List<CsEquipmentDeliveryPO> list, Map<String, SysDicTreePO> dictTreeMap, Map<String,String> topicVersions) {
|
public void accessDev(List<CsEquipmentDeliveryPO> list, Map<String, SysDicTreePO> dictTreeMap, Map<String,String> topicVersions) {
|
||||||
if (CollUtil.isNotEmpty(list)) {
|
if (CollUtil.isNotEmpty(list)) {
|
||||||
List<String> successIds = new ArrayList<>();
|
|
||||||
List<String> failIds = new ArrayList<>();
|
|
||||||
try {
|
try {
|
||||||
list.forEach(item->{
|
list.forEach(item->{
|
||||||
//System.out.println(Thread.currentThread().getName() + ": reboot : nDid : " + item.getNdid());
|
//System.out.println(Thread.currentThread().getName() + ": reboot : nDid : " + item.getNdid());
|
||||||
@@ -118,29 +115,9 @@ public class AccessApplicationRunner implements ApplicationRunner {
|
|||||||
boolean result = csDeviceService.autoAccess(item.getNdid(),version,1);
|
boolean result = csDeviceService.autoAccess(item.getNdid(),version,1);
|
||||||
if (result) {
|
if (result) {
|
||||||
redisUtil.saveByKey(AppRedisKey.DEVICE_MID + item.getNdid(), 1);
|
redisUtil.saveByKey(AppRedisKey.DEVICE_MID + item.getNdid(), 1);
|
||||||
successIds.add(item.getNdid());
|
|
||||||
} else {
|
|
||||||
failIds.add(item.getNdid());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (CollUtil.isNotEmpty(successIds)) {
|
|
||||||
LogMessage logDto = new LogMessage();
|
|
||||||
logDto.setUserIndex("系统首次启动");
|
|
||||||
logDto.setLoginName("系统首次启动");
|
|
||||||
logDto.setResult(1);
|
|
||||||
logDto.setOperate(String.join(",", successIds) + "装置接入");
|
|
||||||
logMessageTemplate.sendMember(logDto);
|
|
||||||
}
|
|
||||||
if (CollUtil.isNotEmpty(failIds)) {
|
|
||||||
LogMessage logDto = new LogMessage();
|
|
||||||
logDto.setUserIndex("系统首次启动");
|
|
||||||
logDto.setLoginName("系统首次启动");
|
|
||||||
logDto.setResult(0);
|
|
||||||
logDto.setOperate(String.join(",", failIds) + "装置接入");
|
|
||||||
logDto.setFailReason("装置不在线或者系统询问装置模板信息,装置未响应");
|
|
||||||
logMessageTemplate.sendMember(logDto);
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.getMessage());
|
log.error(e.getMessage());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import com.njcn.access.service.ICsTopicService;
|
|||||||
import com.njcn.access.service.impl.CsDeviceServiceImpl;
|
import com.njcn.access.service.impl.CsDeviceServiceImpl;
|
||||||
import com.njcn.access.utils.ChannelObjectUtil;
|
import com.njcn.access.utils.ChannelObjectUtil;
|
||||||
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
|
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
|
||||||
import com.njcn.mq.message.LogMessage;
|
|
||||||
import com.njcn.mq.template.LogMessageTemplate;
|
import com.njcn.mq.template.LogMessageTemplate;
|
||||||
import com.njcn.redis.pojo.enums.AppRedisKey;
|
import com.njcn.redis.pojo.enums.AppRedisKey;
|
||||||
import com.njcn.redis.utils.RedisUtil;
|
import com.njcn.redis.utils.RedisUtil;
|
||||||
@@ -40,7 +39,6 @@ public class AutoAccessTimer implements ApplicationRunner {
|
|||||||
private final ICsTopicService csTopicService;
|
private final ICsTopicService csTopicService;
|
||||||
private final CsDeviceServiceImpl csDeviceService;
|
private final CsDeviceServiceImpl csDeviceService;
|
||||||
private final ChannelObjectUtil channelObjectUtil;
|
private final ChannelObjectUtil channelObjectUtil;
|
||||||
private final LogMessageTemplate logMessageTemplate;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(ApplicationArguments args) {
|
public void run(ApplicationArguments args) {
|
||||||
@@ -140,8 +138,6 @@ public class AutoAccessTimer implements ApplicationRunner {
|
|||||||
//安全的accessDev版本
|
//安全的accessDev版本
|
||||||
private void accessDevSafely(List<CsEquipmentDeliveryPO> list, Map<String, SysDicTreePO> dictTreeMap, Map<String,String> topicVersions) {
|
private void accessDevSafely(List<CsEquipmentDeliveryPO> list, Map<String, SysDicTreePO> dictTreeMap, Map<String,String> topicVersions) {
|
||||||
if (CollUtil.isNotEmpty(list)) {
|
if (CollUtil.isNotEmpty(list)) {
|
||||||
List<String> successIds = new ArrayList<>();
|
|
||||||
List<String> failIds = new ArrayList<>();
|
|
||||||
for (CsEquipmentDeliveryPO item : list) {
|
for (CsEquipmentDeliveryPO item : list) {
|
||||||
try {
|
try {
|
||||||
if (Objects.equals(dictTreeMap.get(item.getDevType()).getCode(), DicDataEnum.PORTABLE.getCode()) && Objects.equals(item.getStatus(), 1)) {
|
if (Objects.equals(dictTreeMap.get(item.getDevType()).getCode(), DicDataEnum.PORTABLE.getCode()) && Objects.equals(item.getStatus(), 1)) {
|
||||||
@@ -156,10 +152,6 @@ public class AutoAccessTimer implements ApplicationRunner {
|
|||||||
boolean success = csDeviceService.autoAccess2(item.getNdid(), version, 1);
|
boolean success = csDeviceService.autoAccess2(item.getNdid(), version, 1);
|
||||||
if (success) {
|
if (success) {
|
||||||
redisUtil.saveByKey(AppRedisKey.DEVICE_MID + item.getNdid(), 1);
|
redisUtil.saveByKey(AppRedisKey.DEVICE_MID + item.getNdid(), 1);
|
||||||
successIds.add(item.getNdid());
|
|
||||||
} else {
|
|
||||||
log.warn("设备 {} 接入失败", item.getNdid());
|
|
||||||
failIds.add(item.getNdid());
|
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("设备 {} 接入异常: {}", item.getNdid(), e.getMessage());
|
log.error("设备 {} 接入异常: {}", item.getNdid(), e.getMessage());
|
||||||
@@ -169,23 +161,6 @@ public class AutoAccessTimer implements ApplicationRunner {
|
|||||||
log.error("处理设备 {} 失败: {}", item.getNdid(), e.getMessage());
|
log.error("处理设备 {} 失败: {}", item.getNdid(), e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(successIds)) {
|
|
||||||
LogMessage logDto = new LogMessage();
|
|
||||||
logDto.setUserIndex("系统首次启动");
|
|
||||||
logDto.setLoginName("系统首次启动");
|
|
||||||
logDto.setResult(1);
|
|
||||||
logDto.setOperate(String.join(",", successIds) + "装置接入");
|
|
||||||
logMessageTemplate.sendMember(logDto);
|
|
||||||
}
|
|
||||||
if (CollUtil.isNotEmpty(failIds)) {
|
|
||||||
LogMessage logDto = new LogMessage();
|
|
||||||
logDto.setUserIndex("系统首次启动");
|
|
||||||
logDto.setLoginName("系统首次启动");
|
|
||||||
logDto.setResult(0);
|
|
||||||
logDto.setOperate(String.join(",", failIds) + "装置接入");
|
|
||||||
logDto.setFailReason("装置不在线或者系统询问装置模板信息,装置未响应");
|
|
||||||
logMessageTemplate.sendMember(logDto);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import com.njcn.access.pojo.param.DeviceStatusParam;
|
|||||||
import com.njcn.access.service.*;
|
import com.njcn.access.service.*;
|
||||||
import com.njcn.access.utils.ChannelObjectUtil;
|
import com.njcn.access.utils.ChannelObjectUtil;
|
||||||
import com.njcn.access.utils.MqttUtil;
|
import com.njcn.access.utils.MqttUtil;
|
||||||
import com.njcn.common.pojo.dto.DeviceLogDTO;
|
|
||||||
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
|
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
|
||||||
import com.njcn.common.pojo.exception.BusinessException;
|
import com.njcn.common.pojo.exception.BusinessException;
|
||||||
import com.njcn.csdevice.api.*;
|
import com.njcn.csdevice.api.*;
|
||||||
@@ -39,7 +38,7 @@ import com.njcn.user.api.UserFeignClient;
|
|||||||
import com.njcn.user.enums.AppRoleEnum;
|
import com.njcn.user.enums.AppRoleEnum;
|
||||||
import com.njcn.user.pojo.vo.UserVO;
|
import com.njcn.user.pojo.vo.UserVO;
|
||||||
import com.njcn.web.utils.RequestUtil;
|
import com.njcn.web.utils.RequestUtil;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -58,12 +57,11 @@ import java.util.stream.Collectors;
|
|||||||
* @createTime 2023/7/4 13:43
|
* @createTime 2023/7/4 13:43
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
@AllArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class CsDeviceServiceImpl implements ICsDeviceService {
|
public class CsDeviceServiceImpl implements ICsDeviceService {
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(CsDeviceServiceImpl.class);
|
private static final Logger logger = LoggerFactory.getLogger(CsDeviceServiceImpl.class);
|
||||||
|
|
||||||
private final EquipmentFeignClient equipmentFeignClient;
|
private final EquipmentFeignClient equipmentFeignClient;
|
||||||
private final ICsEquipmentDeliveryService csEquipmentDeliveryService;
|
private final ICsEquipmentDeliveryService csEquipmentDeliveryService;
|
||||||
private final DictTreeFeignClient dictTreeFeignClient;
|
private final DictTreeFeignClient dictTreeFeignClient;
|
||||||
@@ -92,6 +90,7 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
private final CsHarmonicPlanLineFeignClient csHarmonicPlanLineFeignClient;
|
private final CsHarmonicPlanLineFeignClient csHarmonicPlanLineFeignClient;
|
||||||
private final LogMessageTemplate logMessageTemplate;
|
private final LogMessageTemplate logMessageTemplate;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = {Exception.class})
|
@Transactional(rollbackFor = {Exception.class})
|
||||||
public void devRegister(String nDid,Integer type) {
|
public void devRegister(String nDid,Integer type) {
|
||||||
@@ -99,7 +98,6 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
LogMessage message = new LogMessage();
|
LogMessage message = new LogMessage();
|
||||||
message.setUserIndex(RequestUtil.getUserNickname());
|
message.setUserIndex(RequestUtil.getUserNickname());
|
||||||
message.setLoginName(RequestUtil.getUsername());
|
message.setLoginName(RequestUtil.getUsername());
|
||||||
message.setResult(1);
|
|
||||||
//1.判断客户端是否在线
|
//1.判断客户端是否在线
|
||||||
String clientName = "NJCN-" + nDid.substring(nDid.length() - 6);
|
String clientName = "NJCN-" + nDid.substring(nDid.length() - 6);
|
||||||
boolean mqttClient = mqttUtil.judgeClientOnline(clientName);
|
boolean mqttClient = mqttUtil.judgeClientOnline(clientName);
|
||||||
@@ -170,8 +168,6 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
}
|
}
|
||||||
String devModel = dictData.getCode();
|
String devModel = dictData.getCode();
|
||||||
zhiLianRegister(nDid,devModel);
|
zhiLianRegister(nDid,devModel);
|
||||||
message.setOperate("直连装置"+nDid+"下发注册报文");
|
|
||||||
logMessageTemplate.sendMember(message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -180,13 +176,18 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
LogMessage logDto = new LogMessage();
|
LogMessage logDto = new LogMessage();
|
||||||
logDto.setUserIndex(RequestUtil.getUserNickname());
|
logDto.setUserIndex(RequestUtil.getUserNickname());
|
||||||
logDto.setLoginName(RequestUtil.getUsername());
|
logDto.setLoginName(RequestUtil.getUsername());
|
||||||
logDto.setOperate("获取"+nDid+"装置模板信息");
|
logDto.setOperate("注册阶段:获取"+nDid+"装置模板信息");
|
||||||
logDto.setResult(1);
|
logDto.setResult(1);
|
||||||
Object model = null;
|
Object model = null;
|
||||||
try {
|
try {
|
||||||
Thread.sleep(3000);
|
|
||||||
String key = AppRedisKey.LINE + nDid;
|
String key = AppRedisKey.LINE + nDid;
|
||||||
model = redisUtil.getObjectByKey(key);
|
model = redisUtil.getObjectByKey(key);
|
||||||
|
for (int i = 0; i < 3 ; i++) {
|
||||||
|
Thread.sleep(1000);
|
||||||
|
if (!Objects.isNull(model)){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (Objects.isNull(model)){
|
if (Objects.isNull(model)){
|
||||||
logDto.setResult(0);
|
logDto.setResult(0);
|
||||||
logDto.setFailReason(AccessResponseEnum.MODEL_MISS.getMessage());
|
logDto.setFailReason(AccessResponseEnum.MODEL_MISS.getMessage());
|
||||||
@@ -201,14 +202,14 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = {Exception.class})
|
// @Transactional(rollbackFor = {Exception.class})
|
||||||
//fixme 这边事务不起作用,中途出错会导致数据部分录入,再次接入会报主键冲突,所以暂时加了个重置按钮,清空台账数据的
|
//fixme 这边事务不起作用,中途出错会导致数据部分录入,再次接入会报主键冲突,所以暂时加了个重置按钮,清空台账数据的
|
||||||
public void devAccess(DevAccessParam devAccessParam) {
|
public void devAccess(DevAccessParam devAccessParam) {
|
||||||
//日志实体
|
//日志实体
|
||||||
LogMessage logDto = new LogMessage();
|
LogMessage logDto = new LogMessage();
|
||||||
logDto.setUserIndex(RequestUtil.getUserNickname());
|
logDto.setUserIndex(RequestUtil.getUserNickname());
|
||||||
logDto.setLoginName(RequestUtil.getUsername());
|
logDto.setLoginName(RequestUtil.getUsername());
|
||||||
logDto.setOperate("装置"+devAccessParam.getNDid()+"接入");
|
logDto.setOperate("系统端向装置端"+devAccessParam.getNDid()+"发送接入请求");
|
||||||
logDto.setResult(1);
|
logDto.setResult(1);
|
||||||
try {
|
try {
|
||||||
//获取版本
|
//获取版本
|
||||||
@@ -318,14 +319,10 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
po.setSubUserId(RequestUtil.getUserIndex());
|
po.setSubUserId(RequestUtil.getUserIndex());
|
||||||
po.setDeviceId(vo.getId());
|
po.setDeviceId(vo.getId());
|
||||||
csDeviceUserService.saveBatch(Collections.singletonList(po));
|
csDeviceUserService.saveBatch(Collections.singletonList(po));
|
||||||
//6.修改装置状态;修改装置接入的工程、项目
|
//6.删除redis监测点模板信息
|
||||||
csEquipmentDeliveryService.updateStatusBynDid(devAccessParam.getNDid(), AccessEnum.REGISTERED.getCode(),devAccessParam.getEngineeringId(), devAccessParam.getProjectId());
|
|
||||||
//7.发起自动接入请求
|
|
||||||
devAccessAskTemplate(devAccessParam.getNDid(),version,1);
|
|
||||||
//8.删除redis监测点模板信息
|
|
||||||
redisUtil.delete(AppRedisKey.MODEL + devAccessParam.getNDid());
|
redisUtil.delete(AppRedisKey.MODEL + devAccessParam.getNDid());
|
||||||
redisUtil.delete(AppRedisKey.LINE + devAccessParam.getNDid());
|
redisUtil.delete(AppRedisKey.LINE + devAccessParam.getNDid());
|
||||||
//9.存储装置调试日志表
|
//7.存储装置调试日志表
|
||||||
CsEquipmentProcessPO csEquipmentProcess = new CsEquipmentProcessPO();
|
CsEquipmentProcessPO csEquipmentProcess = new CsEquipmentProcessPO();
|
||||||
csEquipmentProcess.setDevId(devAccessParam.getNDid());
|
csEquipmentProcess.setDevId(devAccessParam.getNDid());
|
||||||
csEquipmentProcess.setOperator(RequestUtil.getUserIndex());
|
csEquipmentProcess.setOperator(RequestUtil.getUserIndex());
|
||||||
@@ -336,7 +333,7 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
csEquipmentProcess.setStatus(1);
|
csEquipmentProcess.setStatus(1);
|
||||||
}
|
}
|
||||||
processFeignClient.add(csEquipmentProcess);
|
processFeignClient.add(csEquipmentProcess);
|
||||||
//11.这里会出现工程用户接入装置时,如果当前工程用户并没有关注,接入之后应该将用户和工程关联起来
|
//8.这里会出现工程用户接入装置时,如果当前工程用户并没有关注,接入之后应该将用户和工程关联起来
|
||||||
List<UserVO> users = userFeignClient.getUserVOByIdList(Collections.singletonList(RequestUtil.getUserIndex())).getData();
|
List<UserVO> users = userFeignClient.getUserVOByIdList(Collections.singletonList(RequestUtil.getUserIndex())).getData();
|
||||||
if (CollectionUtil.isNotEmpty(users)) {
|
if (CollectionUtil.isNotEmpty(users)) {
|
||||||
UserVO userVO = users.get(0);
|
UserVO userVO = users.get(0);
|
||||||
@@ -344,12 +341,23 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
csMarketDataFeignClient.insertData(userVO.getId(), devAccessParam.getEngineeringId());
|
csMarketDataFeignClient.insertData(userVO.getId(), devAccessParam.getEngineeringId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//9.修改装置状态;修改装置接入的工程、项目
|
||||||
|
csEquipmentDeliveryService.updateStatusBynDid(devAccessParam.getNDid(), AccessEnum.REGISTERED.getCode(),devAccessParam.getEngineeringId(), devAccessParam.getProjectId());
|
||||||
//10.存储日志
|
//10.存储日志
|
||||||
logMessageTemplate.sendMember(logDto);
|
logMessageTemplate.sendMember(logDto);
|
||||||
|
//11.发起自动接入请求
|
||||||
|
devAccessAskTemplate(devAccessParam.getNDid(),version,1);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logDto.setResult(0);
|
logDto.setResult(0);
|
||||||
logDto.setFailReason(e.getMessage());
|
logDto.setFailReason(e.getMessage());
|
||||||
logMessageTemplate.sendMember(logDto);
|
logMessageTemplate.sendMember(logDto);
|
||||||
|
//这边如果发生异常,已经发送接入指令,设备端会响应,这里需要重置
|
||||||
|
try {
|
||||||
|
Thread.sleep(1000);
|
||||||
|
resetFactory(devAccessParam.getNDid());
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
}
|
||||||
throw new BusinessException(CommonResponseEnum.FAIL);
|
throw new BusinessException(CommonResponseEnum.FAIL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -359,24 +367,13 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
public void resetFactory(String nDid) {
|
public void resetFactory(String nDid) {
|
||||||
CsEquipmentDeliveryVO csEquipmentDeliveryVO = csEquipmentDeliveryService.queryEquipmentBynDid(nDid);
|
CsEquipmentDeliveryVO csEquipmentDeliveryVO = csEquipmentDeliveryService.queryEquipmentBynDid(nDid);
|
||||||
String devId = csEquipmentDeliveryVO.getId();
|
String devId = csEquipmentDeliveryVO.getId();
|
||||||
//修改装置状态
|
|
||||||
DeviceStatusParam param = new DeviceStatusParam();
|
DeviceStatusParam param = new DeviceStatusParam();
|
||||||
param.setNDid(nDid);
|
param.setNDid(nDid);
|
||||||
param.setStatus(1);
|
param.setStatus(1);
|
||||||
param.setRunStatus(1);
|
param.setRunStatus(1);
|
||||||
// boolean isConnectDev = DicDataEnum.CONNECT_DEV.getCode().equals(dictTreeFeignClient.queryById(csEquipmentDeliveryVO.getDevType()).getData().getCode());
|
|
||||||
// if (isConnectDev) {
|
|
||||||
// param.setProcess(2);
|
|
||||||
// } else {
|
|
||||||
// param.setProcess(4);
|
|
||||||
// }
|
|
||||||
param.setProcess(4);
|
param.setProcess(4);
|
||||||
csEquipmentDeliveryService.devResetFactory(param);
|
csEquipmentDeliveryService.devResetFactory(param);
|
||||||
//清除关系表
|
|
||||||
QueryWrapper<CsLedger> csLedgerQueryWrapper = new QueryWrapper<>();
|
QueryWrapper<CsLedger> csLedgerQueryWrapper = new QueryWrapper<>();
|
||||||
/**
|
|
||||||
* 删除装置
|
|
||||||
*/
|
|
||||||
csLedgerQueryWrapper.clear();
|
csLedgerQueryWrapper.clear();
|
||||||
csLedgerQueryWrapper.eq("id",devId);
|
csLedgerQueryWrapper.eq("id",devId);
|
||||||
csLedgerService.remove(csLedgerQueryWrapper);
|
csLedgerService.remove(csLedgerQueryWrapper);
|
||||||
@@ -403,12 +400,10 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
appLineTopologyDiagramPOQueryWrapper.in("line_id",collect);
|
appLineTopologyDiagramPOQueryWrapper.in("line_id",collect);
|
||||||
appLineTopologyDiagramService.remove(appLineTopologyDiagramPOQueryWrapper);
|
appLineTopologyDiagramService.remove(appLineTopologyDiagramPOQueryWrapper);
|
||||||
}
|
}
|
||||||
//删除topic表
|
|
||||||
csTopicService.deleteByNDid(nDid);
|
|
||||||
//清空缓存
|
|
||||||
redisUtil.deleteKeysByString(AppRedisKey.LINE_POSITION+nDid);
|
redisUtil.deleteKeysByString(AppRedisKey.LINE_POSITION+nDid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean manualAccess(String nDid) {
|
public boolean manualAccess(String nDid) {
|
||||||
@@ -424,7 +419,7 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
LogMessage logDto = new LogMessage();
|
LogMessage logDto = new LogMessage();
|
||||||
logDto.setUserIndex(RequestUtil.getUserNickname());
|
logDto.setUserIndex(RequestUtil.getUserNickname());
|
||||||
logDto.setLoginName(RequestUtil.getUsername());
|
logDto.setLoginName(RequestUtil.getUsername());
|
||||||
logDto.setOperate("便携式装置"+nDid+"注册、接入");
|
logDto.setOperate("系统端向便携式装置端"+nDid+"发送注册、接入请求");
|
||||||
logDto.setResult(1);
|
logDto.setResult(1);
|
||||||
try {
|
try {
|
||||||
// 装置状态判断
|
// 装置状态判断
|
||||||
@@ -493,22 +488,23 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
csDevModelRelationAddParm.setModelId(modelList.get(0).getModelId());
|
csDevModelRelationAddParm.setModelId(modelList.get(0).getModelId());
|
||||||
csDevModelRelationAddParm.setDid(modelList.get(0).getDid());
|
csDevModelRelationAddParm.setDid(modelList.get(0).getDid());
|
||||||
csDevModelRelationService.addDevModelRelation(csDevModelRelationAddParm);
|
csDevModelRelationService.addDevModelRelation(csDevModelRelationAddParm);
|
||||||
//5.发起自动接入请求
|
|
||||||
Thread.sleep(2000);
|
|
||||||
//先获取版本
|
|
||||||
//String version = csTopicService.getVersion(nDid);
|
|
||||||
String version = "V1";
|
|
||||||
devAccessAskTemplate(nDid,version,1);
|
|
||||||
//6.修改流程,便携式装置接入成功即为实际环境
|
//6.修改流程,便携式装置接入成功即为实际环境
|
||||||
csEquipmentDeliveryService.updateProcessBynDid(nDid,4);
|
csEquipmentDeliveryService.updateProcessBynDid(nDid,4);
|
||||||
//7.删除redis监测点模板信息
|
//7.删除redis监测点模板信息
|
||||||
redisUtil.delete(AppRedisKey.MODEL + nDid);
|
redisUtil.delete(AppRedisKey.MODEL + nDid);
|
||||||
redisUtil.delete(AppRedisKey.LINE + nDid);
|
redisUtil.delete(AppRedisKey.LINE + nDid);
|
||||||
|
//5.发起自动接入请求
|
||||||
|
Thread.sleep(2000);
|
||||||
|
String version = "V1";
|
||||||
|
devAccessAskTemplate(nDid,version,1);
|
||||||
//判断接入状态
|
//判断接入状态
|
||||||
Thread.sleep(5000);
|
|
||||||
Object object = redisUtil.getObjectByKey("online" + nDid);
|
Object object = redisUtil.getObjectByKey("online" + nDid);
|
||||||
if (Objects.nonNull(object)) {
|
for (int i = 0; i < 5; i++) {
|
||||||
result = "success";
|
Thread.sleep(1000);
|
||||||
|
if (Objects.nonNull(object)) {
|
||||||
|
result = "success";
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//8.存储日志
|
//8.存储日志
|
||||||
logMessageTemplate.sendMember(logDto);
|
logMessageTemplate.sendMember(logDto);
|
||||||
@@ -516,7 +512,13 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
logDto.setResult(0);
|
logDto.setResult(0);
|
||||||
logDto.setFailReason(e.getMessage());
|
logDto.setFailReason(e.getMessage());
|
||||||
logMessageTemplate.sendMember(logDto);
|
logMessageTemplate.sendMember(logDto);
|
||||||
resetFactory(nDid);
|
//这边如果发生异常,已经发送接入指令,设备端会响应,这里需要重置
|
||||||
|
try {
|
||||||
|
Thread.sleep(1000);
|
||||||
|
resetFactory(nDid);
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
}
|
||||||
throw new BusinessException(AccessResponseEnum.ACCESS_ERROR);
|
throw new BusinessException(AccessResponseEnum.ACCESS_ERROR);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@@ -572,6 +574,7 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
logDto.setUserIndex(RequestUtil.getUserNickname());
|
logDto.setUserIndex(RequestUtil.getUserNickname());
|
||||||
logDto.setLoginName(RequestUtil.getUsername());
|
logDto.setLoginName(RequestUtil.getUsername());
|
||||||
logDto.setOperate("监测装置"+nDid+"注册、接入");
|
logDto.setOperate("监测装置"+nDid+"注册、接入");
|
||||||
|
logDto.setOperate("系统端向监测装置端"+nDid+"发送注册、接入请求");
|
||||||
logDto.setResult(1);
|
logDto.setResult(1);
|
||||||
try {
|
try {
|
||||||
// 装置状态判断
|
// 装置状态判断
|
||||||
@@ -646,22 +649,24 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
po.setSubUserId(RequestUtil.getUserIndex());
|
po.setSubUserId(RequestUtil.getUserIndex());
|
||||||
po.setDeviceId(vo.getId());
|
po.setDeviceId(vo.getId());
|
||||||
csDeviceUserService.saveBatch(Collections.singletonList(po));
|
csDeviceUserService.saveBatch(Collections.singletonList(po));
|
||||||
|
|
||||||
//发起自动接入请求
|
|
||||||
Thread.sleep(2000);
|
|
||||||
//先获取版本
|
|
||||||
String version = "V1";
|
|
||||||
devAccessAskTemplate(nDid,version,1);
|
|
||||||
//6.修改流程,接入成功即为实际环境
|
//6.修改流程,接入成功即为实际环境
|
||||||
csEquipmentDeliveryService.updateProcessBynDid(nDid,4);
|
csEquipmentDeliveryService.updateProcessBynDid(nDid,4);
|
||||||
//7.删除redis监测点模板信息
|
//7.删除redis监测点模板信息
|
||||||
redisUtil.delete(AppRedisKey.MODEL + nDid);
|
redisUtil.delete(AppRedisKey.MODEL + nDid);
|
||||||
redisUtil.delete(AppRedisKey.LINE + nDid);
|
redisUtil.delete(AppRedisKey.LINE + nDid);
|
||||||
|
//发起自动接入请求
|
||||||
|
Thread.sleep(2000);
|
||||||
|
//先获取版本
|
||||||
|
String version = "V1";
|
||||||
|
devAccessAskTemplate(nDid,version,1);
|
||||||
//判断接入状态
|
//判断接入状态
|
||||||
Thread.sleep(5000);
|
|
||||||
Object object = redisUtil.getObjectByKey("online" + nDid);
|
Object object = redisUtil.getObjectByKey("online" + nDid);
|
||||||
if (Objects.nonNull(object)) {
|
for (int i = 0; i < 5; i++) {
|
||||||
result = "success";
|
Thread.sleep(1000);
|
||||||
|
if (Objects.nonNull(object)) {
|
||||||
|
result = "success";
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//8.存储日志
|
//8.存储日志
|
||||||
logMessageTemplate.sendMember(logDto);
|
logMessageTemplate.sendMember(logDto);
|
||||||
@@ -669,7 +674,13 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
logDto.setResult(0);
|
logDto.setResult(0);
|
||||||
logDto.setFailReason(e.getMessage());
|
logDto.setFailReason(e.getMessage());
|
||||||
logMessageTemplate.sendMember(logDto);
|
logMessageTemplate.sendMember(logDto);
|
||||||
resetFactory(nDid);
|
//这边如果发生异常,已经发送接入指令,设备端会响应,这里需要重置
|
||||||
|
try {
|
||||||
|
Thread.sleep(1000);
|
||||||
|
resetFactory(nDid);
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
}
|
||||||
throw new BusinessException(e.getMessage());
|
throw new BusinessException(e.getMessage());
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@@ -784,6 +795,9 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
}
|
}
|
||||||
//发起接入
|
//发起接入
|
||||||
publisher.send("/Pfm/DevCmd/"+version+"/"+nDid, new Gson().toJson(getJson(mid,TypeEnum.TYPE_5.getCode())),1,false);
|
publisher.send("/Pfm/DevCmd/"+version+"/"+nDid, new Gson().toJson(getJson(mid,TypeEnum.TYPE_5.getCode())),1,false);
|
||||||
|
logDto.setOperate("系统端向装置端"+nDid+"发送接入请求");
|
||||||
|
logDto.setResult(1);
|
||||||
|
logMessageTemplate.sendMember(logDto);
|
||||||
//录波任务倒计时
|
//录波任务倒计时
|
||||||
redisUtil.saveByKeyWithExpire("startFile:" + nDid,null,60L);
|
redisUtil.saveByKeyWithExpire("startFile:" + nDid,null,60L);
|
||||||
result = true;
|
result = true;
|
||||||
@@ -963,6 +977,13 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
reqAndResParam.setExpire(-1);
|
reqAndResParam.setExpire(-1);
|
||||||
logger.info("询问主题报文为:{}", new Gson().toJson(reqAndResParam));
|
logger.info("询问主题报文为:{}", new Gson().toJson(reqAndResParam));
|
||||||
publisher.send("/Pfm/DevTopic/"+nDid, new Gson().toJson(reqAndResParam),1,false);
|
publisher.send("/Pfm/DevTopic/"+nDid, new Gson().toJson(reqAndResParam),1,false);
|
||||||
|
//记录日志
|
||||||
|
LogMessage logDto = new LogMessage();
|
||||||
|
logDto.setUserIndex("系统");
|
||||||
|
logDto.setLoginName("系统");
|
||||||
|
logDto.setOperate("系统端向装置端"+nDid+"发送主题询问报文");
|
||||||
|
logDto.setResult(1);
|
||||||
|
logMessageTemplate.sendMember(logDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -983,5 +1004,12 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
reqAndResParam.setMsg(accessDto);
|
reqAndResParam.setMsg(accessDto);
|
||||||
logger.info("注册报文为:{}", new Gson().toJson(reqAndResParam));
|
logger.info("注册报文为:{}", new Gson().toJson(reqAndResParam));
|
||||||
publisher.send("/Pfm/DevReg/"+nDid, new Gson().toJson(reqAndResParam),1,false);
|
publisher.send("/Pfm/DevReg/"+nDid, new Gson().toJson(reqAndResParam),1,false);
|
||||||
|
//记录日志
|
||||||
|
LogMessage logDto = new LogMessage();
|
||||||
|
logDto.setUserIndex("系统");
|
||||||
|
logDto.setLoginName("系统");
|
||||||
|
logDto.setOperate("系统端向装置端"+nDid+"发送注册请求");
|
||||||
|
logDto.setResult(1);
|
||||||
|
logMessageTemplate.sendMember(logDto);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import org.springframework.beans.BeanUtils;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -101,6 +100,7 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
|
|||||||
List<CsEquipmentDeliveryPO> result = new ArrayList<>();
|
List<CsEquipmentDeliveryPO> result = new ArrayList<>();
|
||||||
List<CsEquipmentDeliveryPO> list = this.lambdaQuery()
|
List<CsEquipmentDeliveryPO> list = this.lambdaQuery()
|
||||||
.ne(CsEquipmentDeliveryPO::getRunStatus,AccessEnum.DEL.getCode())
|
.ne(CsEquipmentDeliveryPO::getRunStatus,AccessEnum.DEL.getCode())
|
||||||
|
.ne(CsEquipmentDeliveryPO::getStatus,AccessEnum.UNREGISTERED.getCode())
|
||||||
.eq(CsEquipmentDeliveryPO::getUsageStatus,1)
|
.eq(CsEquipmentDeliveryPO::getUsageStatus,1)
|
||||||
.list();
|
.list();
|
||||||
if (CollUtil.isNotEmpty(list)) {
|
if (CollUtil.isNotEmpty(list)) {
|
||||||
@@ -125,12 +125,12 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CsEquipmentDeliveryPO> getOfflineDev() {
|
public List<CsEquipmentDeliveryPO> getOfflineDev() {
|
||||||
List<CsEquipmentDeliveryPO> result = new ArrayList<>();
|
List<CsEquipmentDeliveryPO> result = new ArrayList<>();
|
||||||
List<CsEquipmentDeliveryPO> list = this.lambdaQuery()
|
List<CsEquipmentDeliveryPO> list = this.lambdaQuery()
|
||||||
.eq(CsEquipmentDeliveryPO::getRunStatus,AccessEnum.OFFLINE.getCode())
|
.eq(CsEquipmentDeliveryPO::getRunStatus,AccessEnum.OFFLINE.getCode())
|
||||||
.eq(CsEquipmentDeliveryPO::getUsageStatus,1)
|
.eq(CsEquipmentDeliveryPO::getUsageStatus,1)
|
||||||
.in(CsEquipmentDeliveryPO::getStatus, Arrays.asList(2,3))
|
.ne(CsEquipmentDeliveryPO::getStatus,AccessEnum.UNREGISTERED.getCode())
|
||||||
.isNull(CsEquipmentDeliveryPO::getNodeId)
|
.isNull(CsEquipmentDeliveryPO::getNodeId)
|
||||||
.list();
|
.list();
|
||||||
if (CollUtil.isNotEmpty(list)) {
|
if (CollUtil.isNotEmpty(list)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user