feat(access): 优化设备接入流程并增加监测点管理功能
- 新增DEV_DATA_ERROR响应枚举处理装置端监测点信息获取失败情况 - 集成CsLineFeignClient服务实现线路信息精确获取,替代原有字符解析方式 - 删除无用的LogMessageTemplate依赖和objectToMap工具方法 - 添加CsDeviceRegistryFeignClient支持设备注册表管理 - 重构CsDeviceServiceImpl中的设备接入逻辑,优化监测点ID分配机制 - 新增accessByUpdateMac接口支持设备MAC地址变更后的重新接入 - 完善设备监测点信息获取流程,增加数据去重和异常处理机制 - 添加稳态事件指标配置功能,集成谐波方案管理 - 优化MQTT消息处理器中的设备信息更新逻辑 - 增强设备软件信息解析的日期格式兼容性 - 优化设备容量和台账信息更新的数据持久化流程
This commit is contained in:
@@ -75,6 +75,7 @@ public enum AccessResponseEnum {
|
|||||||
FILE_CHECK_ERROR("A0312","文件校验码不一致!"),
|
FILE_CHECK_ERROR("A0312","文件校验码不一致!"),
|
||||||
|
|
||||||
CLD_MODEL_EXIST("A0313","云前置模板已存在,请先删除再录入!"),
|
CLD_MODEL_EXIST("A0313","云前置模板已存在,请先删除再录入!"),
|
||||||
|
DEV_DATA_ERROR("A0313","系统端询问装置端监测点信息失败,无法生成监测点!"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A3001 ~ A3099 用于zlevent模块的枚举
|
* A3001 ~ A3099 用于zlevent模块的枚举
|
||||||
|
|||||||
@@ -5,7 +5,8 @@ import com.njcn.redis.utils.RedisUtil;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author xy
|
* @author xy
|
||||||
@@ -51,22 +52,4 @@ public class ChannelObjectUtil {
|
|||||||
public Object getDeviceMid(String nDid) {
|
public Object getDeviceMid(String nDid) {
|
||||||
return redisUtil.getObjectByKey(AppRedisKey.DEVICE_MID + nDid);
|
return redisUtil.getObjectByKey(AppRedisKey.DEVICE_MID + nDid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Map<String, List<String>> objectToMap(Object obj) {
|
|
||||||
// 创建并填充 Map
|
|
||||||
Map<String, List<String>> resultMap = new HashMap<>();
|
|
||||||
String json = obj.toString();
|
|
||||||
// 移除首尾的 {}
|
|
||||||
json = json.substring(1, json.length() - 1);
|
|
||||||
// 找到键和值的分隔符位置
|
|
||||||
int keyEndIndex = json.indexOf("=[");
|
|
||||||
String key = json.substring(0, keyEndIndex);
|
|
||||||
String valuesStr = json.substring(keyEndIndex + 2, json.length() - 1);
|
|
||||||
// 将值字符串分割成列表
|
|
||||||
String[] valuesArray = valuesStr.split(", ");
|
|
||||||
List<String> valuesList = Arrays.asList(valuesArray);
|
|
||||||
resultMap.put(key, valuesList);
|
|
||||||
return resultMap;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -159,5 +159,15 @@ public class CsDeviceController extends BaseController {
|
|||||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||||
|
@PostMapping("/accessByUpdateMac")
|
||||||
|
@ApiOperation("修改mac后手动接入")
|
||||||
|
@ApiImplicitParam(name = "nDid", value = "设备识别码", required = true)
|
||||||
|
public HttpResult<String> accessByUpdateMac(@RequestParam("nDid") String nDid){
|
||||||
|
String methodDescribe = getMethodDescribe("accessByUpdateMac");
|
||||||
|
String result = csDeviceService.accessByUpdateMac(nDid);
|
||||||
|
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ public class MqttMessageHandler {
|
|||||||
private final CsCommunicateFeignClient csCommunicateFeignClient;
|
private final CsCommunicateFeignClient csCommunicateFeignClient;
|
||||||
private final IHeartbeatService heartbeatService;
|
private final IHeartbeatService heartbeatService;
|
||||||
private final LogMessageTemplate logMessageTemplate;
|
private final LogMessageTemplate logMessageTemplate;
|
||||||
|
private final CsDeviceRegistryFeignClient csDeviceRegistryFeignClient;
|
||||||
@Autowired
|
@Autowired
|
||||||
Validator validator;
|
Validator validator;
|
||||||
|
|
||||||
@@ -136,6 +137,8 @@ public class MqttMessageHandler {
|
|||||||
list.add(csTopic);
|
list.add(csTopic);
|
||||||
});
|
});
|
||||||
csTopicService.addTopic(nDid,list);
|
csTopicService.addTopic(nDid,list);
|
||||||
|
String version = list.stream().map(CsTopic::getVersion).filter(Objects::nonNull).findFirst().orElse("V1");
|
||||||
|
redisUtil.saveByKeyWithExpire(nDid +":version",version,30L);
|
||||||
logMessageTemplate.sendMember(logDto);
|
logMessageTemplate.sendMember(logDto);
|
||||||
} else {
|
} else {
|
||||||
logDto.setResult(0);
|
logDto.setResult(0);
|
||||||
@@ -223,7 +226,7 @@ public class MqttMessageHandler {
|
|||||||
//业务处理
|
//业务处理
|
||||||
Gson gson = new Gson();
|
Gson gson = new Gson();
|
||||||
ReqAndResDto.Res res = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ReqAndResDto.Res.class);
|
ReqAndResDto.Res res = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ReqAndResDto.Res.class);
|
||||||
redisUtil.saveByKeyWithExpire("devResponse",res.getCode(),5L);
|
//redisUtil.saveByKeyWithExpire("devResponse",res.getCode(),5L);
|
||||||
if (Objects.equals(res.getCode(),AccessEnum.SUCCESS.getCode())) {
|
if (Objects.equals(res.getCode(),AccessEnum.SUCCESS.getCode())) {
|
||||||
switch (res.getType()){
|
switch (res.getType()){
|
||||||
/**
|
/**
|
||||||
@@ -247,6 +250,7 @@ public class MqttMessageHandler {
|
|||||||
logMessageTemplate.sendMember(logDto);
|
logMessageTemplate.sendMember(logDto);
|
||||||
//有异常删除缓存的模板信息
|
//有异常删除缓存的模板信息
|
||||||
redisUtil.delete(AppRedisKey.MODEL + nDid);
|
redisUtil.delete(AppRedisKey.MODEL + nDid);
|
||||||
|
log.error("{}{}", nDid, AccessResponseEnum.MODEL_VERSION_ERROR.getMessage());
|
||||||
throw new BusinessException(AccessResponseEnum.MODEL_VERSION_ERROR);
|
throw new BusinessException(AccessResponseEnum.MODEL_VERSION_ERROR);
|
||||||
}
|
}
|
||||||
//校验前置传递的装置模板库中是否存在
|
//校验前置传递的装置模板库中是否存在
|
||||||
@@ -291,7 +295,7 @@ public class MqttMessageHandler {
|
|||||||
});
|
});
|
||||||
//存储模板id
|
//存储模板id
|
||||||
String key2 = AppRedisKey.MODEL + nDid;
|
String key2 = AppRedisKey.MODEL + nDid;
|
||||||
redisUtil.saveByKeyWithExpire(key2,modelList,600L);
|
redisUtil.saveByKey(key2,modelList);
|
||||||
//存储监测点模板信息,用于界面回显
|
//存储监测点模板信息,用于界面回显
|
||||||
List<String> modelId = modelList.stream().map(CsModelDto::getModelId).collect(Collectors.toList());
|
List<String> modelId = modelList.stream().map(CsModelDto::getModelId).collect(Collectors.toList());
|
||||||
List<CsLineModel> lineList = csLineModelService.getMonitorNumByModelId(modelId);
|
List<CsLineModel> lineList = csLineModelService.getMonitorNumByModelId(modelId);
|
||||||
@@ -353,11 +357,14 @@ public class MqttMessageHandler {
|
|||||||
String id = IdUtil.fastSimpleUUID();
|
String id = IdUtil.fastSimpleUUID();
|
||||||
csSoftInfoPo.setId(id);
|
csSoftInfoPo.setId(id);
|
||||||
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
|
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
|
||||||
.appendPattern("yyyy-MM-dd[[HH][:mm][:ss]]")
|
// 优先尝试紧凑格式
|
||||||
|
.optionalStart().appendPattern("yyyyMMdd").optionalEnd()
|
||||||
|
// 再尝试带横线格式
|
||||||
|
.optionalStart().appendPattern("yyyy-MM-dd").optionalEnd()
|
||||||
|
// 默认时间部分
|
||||||
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
|
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
|
||||||
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
|
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
|
||||||
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
|
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
|
||||||
.parseDefaulting(ChronoField.MILLI_OF_SECOND, 0)
|
|
||||||
.toFormatter();
|
.toFormatter();
|
||||||
LocalDateTime localDateTime = LocalDateTime.parse(softInfo.getAppDate(), formatter);
|
LocalDateTime localDateTime = LocalDateTime.parse(softInfo.getAppDate(), formatter);
|
||||||
assertThat(localDateTime).isNotNull();
|
assertThat(localDateTime).isNotNull();
|
||||||
@@ -376,12 +383,13 @@ 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容量报文,code = " + res.getCode());
|
redisUtil.saveByKeyWithExpire("lineInfo:"+nDid,devInfo,30L);
|
||||||
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);
|
||||||
//治理设备
|
//治理设备
|
||||||
if (hasZeroClDid) {
|
if (hasZeroClDid) {
|
||||||
|
logDto.setOperate("系统端收到装置端"+nDid+"更新APF容量报文,code = " + res.getCode());
|
||||||
|
logDto.setResult(1);
|
||||||
devInfo.forEach(item->{
|
devInfo.forEach(item->{
|
||||||
if (Objects.equals(item.getClDid(),0)){
|
if (Objects.equals(item.getClDid(),0)){
|
||||||
updateLineInfo(nDid,item);
|
updateLineInfo(nDid,item);
|
||||||
@@ -396,6 +404,8 @@ public class MqttMessageHandler {
|
|||||||
}
|
}
|
||||||
//其余设备
|
//其余设备
|
||||||
else {
|
else {
|
||||||
|
logDto.setOperate("系统端收到装置端"+nDid+"更新监测点台账报文,code = " + res.getCode());
|
||||||
|
logDto.setResult(1);
|
||||||
devInfo.forEach(item->{
|
devInfo.forEach(item->{
|
||||||
updateLineInfo(nDid,item);
|
updateLineInfo(nDid,item);
|
||||||
});
|
});
|
||||||
@@ -464,8 +474,15 @@ public class MqttMessageHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updateLineInfo(String nDid,RspDataDto.LdevInfo item) {
|
public void updateLineInfo(String nDid,RspDataDto.LdevInfo item) {
|
||||||
|
CsDeviceRegistry csDeviceRegistry = csDeviceRegistryFeignClient.queryByCurrentNdidAndClDid(nDid, item.getClDid()).getData();
|
||||||
|
String lineId;
|
||||||
|
if (Objects.isNull(csDeviceRegistry)) {
|
||||||
|
lineId = nDid + item.getClDid();
|
||||||
|
} else {
|
||||||
|
lineId = csDeviceRegistry.getId();
|
||||||
|
}
|
||||||
CsLineParam csLineParam = new CsLineParam();
|
CsLineParam csLineParam = new CsLineParam();
|
||||||
csLineParam.setLineId(nDid.concat(item.getClDid().toString()));
|
csLineParam.setLineId(lineId);
|
||||||
csLineParam.setVolGrade(item.getVolGrade());
|
csLineParam.setVolGrade(item.getVolGrade());
|
||||||
csLineParam.setPtRatio(item.getPtRatio());
|
csLineParam.setPtRatio(item.getPtRatio());
|
||||||
csLineParam.setCtRatio(item.getCtRatio());
|
csLineParam.setCtRatio(item.getCtRatio());
|
||||||
@@ -474,8 +491,8 @@ public class MqttMessageHandler {
|
|||||||
csLineFeignClient.updateLine(csLineParam);
|
csLineFeignClient.updateLine(csLineParam);
|
||||||
//生成监测点限值
|
//生成监测点限值
|
||||||
Overlimit overlimit = COverlimitUtil.globalAssemble(item.getVolGrade().floatValue(),10f,10f,10f,0,0);
|
Overlimit overlimit = COverlimitUtil.globalAssemble(item.getVolGrade().floatValue(),10f,10f,10f,0,0);
|
||||||
overlimit.setId(nDid.concat(item.getClDid().toString()));
|
overlimit.setId(lineId);
|
||||||
overLimitWlMapper.deleteById(nDid.concat(item.getClDid().toString()));
|
overLimitWlMapper.deleteById(lineId);
|
||||||
overLimitWlMapper.insert(overlimit);
|
overLimitWlMapper.insert(overlimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -557,6 +574,7 @@ public class MqttMessageHandler {
|
|||||||
JSONObject jsonObject2 = JSONObject.parseObject(JSON.toJSONString(dataDto));
|
JSONObject jsonObject2 = JSONObject.parseObject(JSON.toJSONString(dataDto));
|
||||||
AppAutoDataMessage appAutoDataMessage = JSONObject.toJavaObject(jsonObject2, AppAutoDataMessage.class);
|
AppAutoDataMessage appAutoDataMessage = JSONObject.toJavaObject(jsonObject2, AppAutoDataMessage.class);
|
||||||
appAutoDataMessage.setId(nDid);
|
appAutoDataMessage.setId(nDid);
|
||||||
|
redisUtil.saveByKeyWithExpire("devResponse:" + nDid ,200,5L);
|
||||||
rtFeignClient.analysis(appAutoDataMessage);
|
rtFeignClient.analysis(appAutoDataMessage);
|
||||||
break;
|
break;
|
||||||
//处理主动上送的统计数据、电度数据
|
//处理主动上送的统计数据、电度数据
|
||||||
@@ -708,53 +726,57 @@ public class MqttMessageHandler {
|
|||||||
* 2:模块信息
|
* 2:模块信息
|
||||||
* 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("系统");
|
List<CsModelDto> modelList = channelObjectUtil.objectToList(redisUtil.getObjectByKey(AppRedisKey.MODEL + nDid),CsModelDto.class);
|
||||||
logDto.setLoginName("系统");
|
for (CsModelDto model : modelList) {
|
||||||
logDto.setResult(1);
|
LogMessage logDto = new LogMessage();
|
||||||
ReqAndResDto.Req reqAndResParam = new ReqAndResDto.Req();
|
logDto.setUserIndex("系统");
|
||||||
reqAndResParam.setMid(mid);
|
logDto.setLoginName("系统");
|
||||||
reqAndResParam.setPri(AccessEnum.FIRST_CHANNEL.getCode());
|
logDto.setResult(1);
|
||||||
reqAndResParam.setType(Integer.parseInt(TypeEnum.TYPE_6.getCode()));
|
ReqAndResDto.Req reqAndResParam = new ReqAndResDto.Req();
|
||||||
reqAndResParam.setExpire(-1);
|
reqAndResParam.setMid(mid);
|
||||||
AskDataDto askDataDto = new AskDataDto();
|
reqAndResParam.setPri(AccessEnum.FIRST_CHANNEL.getCode());
|
||||||
askDataDto.setDataAttr(0);
|
reqAndResParam.setType(Integer.parseInt(TypeEnum.TYPE_6.getCode()));
|
||||||
askDataDto.setOperate(1);
|
reqAndResParam.setExpire(-1);
|
||||||
askDataDto.setStartTime(-1);
|
AskDataDto askDataDto = new AskDataDto();
|
||||||
askDataDto.setEndTime(-1);
|
askDataDto.setDataAttr(0);
|
||||||
switch (type) {
|
askDataDto.setOperate(1);
|
||||||
case 1:
|
askDataDto.setStartTime(-1);
|
||||||
reqAndResParam.setDid(0);
|
askDataDto.setEndTime(-1);
|
||||||
askDataDto.setCldid(0);
|
switch (type) {
|
||||||
askDataDto.setDataType(1);
|
case 1:
|
||||||
logDto.setOperate("系统端向装置端"+nDid+"询问软件信息");
|
reqAndResParam.setDid(model.getDid());
|
||||||
break;
|
askDataDto.setCldid(0);
|
||||||
case 2:
|
askDataDto.setDataType(1);
|
||||||
reqAndResParam.setDid(1);
|
logDto.setOperate("系统端向装置端"+nDid+"询问软件信息");
|
||||||
askDataDto.setCldid(-1);
|
break;
|
||||||
askDataDto.setDataType(2);
|
case 2:
|
||||||
logDto.setOperate("系统端向装置端"+nDid+"询问逻辑设备1信息");
|
reqAndResParam.setDid(model.getDid());
|
||||||
break;
|
askDataDto.setCldid(-1);
|
||||||
case 3:
|
askDataDto.setDataType(2);
|
||||||
reqAndResParam.setDid(2);
|
logDto.setOperate("系统端向装置端"+nDid+"询问逻辑设备1信息");
|
||||||
askDataDto.setCldid(-1);
|
break;
|
||||||
askDataDto.setDataType(2);
|
case 3:
|
||||||
logDto.setOperate("系统端向装置端"+nDid+"询问逻辑设备2信息");
|
reqAndResParam.setDid(model.getDid());
|
||||||
break;
|
askDataDto.setCldid(-1);
|
||||||
//询问工程信息
|
askDataDto.setDataType(2);
|
||||||
case 48:
|
logDto.setOperate("系统端向装置端"+nDid+"询问逻辑设备2信息");
|
||||||
reqAndResParam.setDid(1);
|
break;
|
||||||
askDataDto.setCldid(1);
|
//询问工程信息
|
||||||
askDataDto.setDataType(48);
|
case 48:
|
||||||
logDto.setOperate("系统端向装置端"+nDid+"询问工程信息");
|
reqAndResParam.setDid(model.getDid());
|
||||||
break;
|
askDataDto.setCldid(1);
|
||||||
default:
|
askDataDto.setDataType(48);
|
||||||
break;
|
logDto.setOperate("系统端向装置端"+nDid+"询问工程信息");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
reqAndResParam.setMsg(askDataDto);
|
||||||
|
publisher.send("/Pfm/DevCmd/"+version+"/"+nDid, new Gson().toJson(reqAndResParam),1,false);
|
||||||
|
logMessageTemplate.sendMember(logDto);
|
||||||
}
|
}
|
||||||
reqAndResParam.setMsg(askDataDto);
|
|
||||||
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) {
|
||||||
|
|||||||
@@ -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.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;
|
||||||
import com.njcn.system.enums.DicDataEnum;
|
import com.njcn.system.enums.DicDataEnum;
|
||||||
|
|||||||
@@ -32,4 +32,6 @@ public interface ICsDataSetService extends IService<CsDataSet> {
|
|||||||
*/
|
*/
|
||||||
List<CsDataSet> getDataSetData(String modelId);
|
List<CsDataSet> getDataSetData(String modelId);
|
||||||
|
|
||||||
|
List<CsDataSet> getDataSetData2(String modelId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,4 +58,11 @@ public interface ICsDeviceService {
|
|||||||
String autoPortableLedger();
|
String autoPortableLedger();
|
||||||
|
|
||||||
String onlineRegister(String projectId,String nDid);
|
String onlineRegister(String projectId,String nDid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设备修改mac之后,需要手动重新接入,因为已经存在台账了,只要询问主题、发起接入请求即可
|
||||||
|
* @param nDid
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
String accessByUpdateMac(String nDid);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,9 @@ import com.njcn.access.pojo.dto.ControlDto;
|
|||||||
import com.njcn.access.pojo.dto.ReqAndResDto;
|
import com.njcn.access.pojo.dto.ReqAndResDto;
|
||||||
import com.njcn.access.service.AskDeviceDataService;
|
import com.njcn.access.service.AskDeviceDataService;
|
||||||
import com.njcn.common.pojo.exception.BusinessException;
|
import com.njcn.common.pojo.exception.BusinessException;
|
||||||
|
import com.njcn.csdevice.api.CsLineFeignClient;
|
||||||
import com.njcn.csdevice.enums.AlgorithmResponseEnum;
|
import com.njcn.csdevice.enums.AlgorithmResponseEnum;
|
||||||
|
import com.njcn.csdevice.pojo.po.CsLinePO;
|
||||||
import com.njcn.mq.message.RealDataMessage;
|
import com.njcn.mq.message.RealDataMessage;
|
||||||
import com.njcn.mq.template.RealDataMessageTemplate;
|
import com.njcn.mq.template.RealDataMessageTemplate;
|
||||||
import com.njcn.redis.pojo.enums.AppRedisKey;
|
import com.njcn.redis.pojo.enums.AppRedisKey;
|
||||||
@@ -33,6 +35,7 @@ public class AskDeviceDataServiceImpl implements AskDeviceDataService {
|
|||||||
private static final Logger log = LoggerFactory.getLogger(AskDeviceDataServiceImpl.class);
|
private static final Logger log = LoggerFactory.getLogger(AskDeviceDataServiceImpl.class);
|
||||||
private final MqttPublisher publisher;
|
private final MqttPublisher publisher;
|
||||||
private final CsTopicFeignClient csTopicFeignClient;
|
private final CsTopicFeignClient csTopicFeignClient;
|
||||||
|
private final CsLineFeignClient csLineFeignClient;
|
||||||
private final RedisUtil redisUtil;
|
private final RedisUtil redisUtil;
|
||||||
private final RealDataMessageTemplate realDataMessageTemplate;
|
private final RealDataMessageTemplate realDataMessageTemplate;
|
||||||
private static Integer mid = 1;
|
private static Integer mid = 1;
|
||||||
@@ -218,8 +221,8 @@ public class AskDeviceDataServiceImpl implements AskDeviceDataService {
|
|||||||
public void askCldRealData(String devId, String lineId, String nodeId, Integer idx) {
|
public void askCldRealData(String devId, String lineId, String nodeId, Integer idx) {
|
||||||
RealDataMessage realDataMessage = new RealDataMessage();
|
RealDataMessage realDataMessage = new RealDataMessage();
|
||||||
realDataMessage.setDevSeries(devId);
|
realDataMessage.setDevSeries(devId);
|
||||||
int lastDigit = Character.getNumericValue(lineId.charAt(lineId.length() - 1));
|
CsLinePO po = csLineFeignClient.getById(lineId).getData();
|
||||||
realDataMessage.setLine(lastDigit);
|
realDataMessage.setLine(po.getLineNo());
|
||||||
realDataMessage.setRealData(true);
|
realDataMessage.setRealData(true);
|
||||||
realDataMessage.setSoeData(true);
|
realDataMessage.setSoeData(true);
|
||||||
realDataMessage.setLimit(20);
|
realDataMessage.setLimit(20);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import com.njcn.access.service.ICsDataSetService;
|
|||||||
import com.njcn.csdevice.pojo.po.CsDataSet;
|
import com.njcn.csdevice.pojo.po.CsDataSet;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -37,4 +38,13 @@ public class CsDataSetServiceImpl extends ServiceImpl<CsDataSetMapper, CsDataSet
|
|||||||
.and(item->item.eq(CsDataSet::getDataType,"Stat").or().isNull(CsDataSet::getDataType))
|
.and(item->item.eq(CsDataSet::getDataType,"Stat").or().isNull(CsDataSet::getDataType))
|
||||||
.list();
|
.list();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CsDataSet> getDataSetData2(String modelId) {
|
||||||
|
return this.lambdaQuery()
|
||||||
|
.eq(CsDataSet::getPid, modelId)
|
||||||
|
.and(item->item.eq(CsDataSet::getDataType,"Stat").or().isNull(CsDataSet::getDataType))
|
||||||
|
.eq(CsDataSet::getStoreFlag,1)
|
||||||
|
.list();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.njcn.access.service.impl;
|
|||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.util.IdUtil;
|
||||||
import com.alibaba.nacos.client.naming.utils.CollectionUtils;
|
import com.alibaba.nacos.client.naming.utils.CollectionUtils;
|
||||||
import com.alibaba.nacos.shaded.com.google.gson.Gson;
|
import com.alibaba.nacos.shaded.com.google.gson.Gson;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
@@ -10,7 +11,9 @@ import com.njcn.access.enums.AccessEnum;
|
|||||||
import com.njcn.access.enums.AccessResponseEnum;
|
import com.njcn.access.enums.AccessResponseEnum;
|
||||||
import com.njcn.access.enums.TypeEnum;
|
import com.njcn.access.enums.TypeEnum;
|
||||||
import com.njcn.access.param.DevAccessParam;
|
import com.njcn.access.param.DevAccessParam;
|
||||||
|
import com.njcn.access.pojo.RspDataDto;
|
||||||
import com.njcn.access.pojo.dto.AccessDto;
|
import com.njcn.access.pojo.dto.AccessDto;
|
||||||
|
import com.njcn.access.pojo.dto.AskDataDto;
|
||||||
import com.njcn.access.pojo.dto.CsModelDto;
|
import com.njcn.access.pojo.dto.CsModelDto;
|
||||||
import com.njcn.access.pojo.dto.ReqAndResDto;
|
import com.njcn.access.pojo.dto.ReqAndResDto;
|
||||||
import com.njcn.access.pojo.param.DeviceStatusParam;
|
import com.njcn.access.pojo.param.DeviceStatusParam;
|
||||||
@@ -25,7 +28,10 @@ import com.njcn.csdevice.param.LineInfoParam;
|
|||||||
import com.njcn.csdevice.pojo.param.*;
|
import com.njcn.csdevice.pojo.param.*;
|
||||||
import com.njcn.csdevice.pojo.po.*;
|
import com.njcn.csdevice.pojo.po.*;
|
||||||
import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO;
|
import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO;
|
||||||
|
import com.njcn.csharmonic.api.CsHarmonicPlanFeignClient;
|
||||||
import com.njcn.csharmonic.api.CsHarmonicPlanLineFeignClient;
|
import com.njcn.csharmonic.api.CsHarmonicPlanLineFeignClient;
|
||||||
|
import com.njcn.csharmonic.param.CsHarmonicPlanLineParam;
|
||||||
|
import com.njcn.csharmonic.pojo.po.CsHarmonicPlan;
|
||||||
import com.njcn.mq.message.LogMessage;
|
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;
|
||||||
@@ -89,8 +95,10 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
private final AppProjectFeignClient appProjectFeignClient;
|
private final AppProjectFeignClient appProjectFeignClient;
|
||||||
private final DeviceMessageFeignClient deviceMessageFeignClient;
|
private final DeviceMessageFeignClient deviceMessageFeignClient;
|
||||||
private final CsHarmonicPlanLineFeignClient csHarmonicPlanLineFeignClient;
|
private final CsHarmonicPlanLineFeignClient csHarmonicPlanLineFeignClient;
|
||||||
|
private final CsHarmonicPlanFeignClient csHarmonicPlanFeignClient;
|
||||||
private final LogMessageTemplate logMessageTemplate;
|
private final LogMessageTemplate logMessageTemplate;
|
||||||
private final StringRedisTemplate stringRedisTemplate;
|
private final StringRedisTemplate stringRedisTemplate;
|
||||||
|
private final CsDeviceRegistryFeignClient csDeviceRegistryFeignClient;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -183,9 +191,9 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
Object model = null;
|
Object model = null;
|
||||||
try {
|
try {
|
||||||
String key = AppRedisKey.LINE + nDid;
|
String key = AppRedisKey.LINE + nDid;
|
||||||
model = redisUtil.getObjectByKey(key);
|
|
||||||
for (int i = 0; i < 3 ; i++) {
|
for (int i = 0; i < 3 ; i++) {
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
|
model = redisUtil.getObjectByKey(key);
|
||||||
if (!Objects.isNull(model)){
|
if (!Objects.isNull(model)){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -218,6 +226,7 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
String version = csTopicService.getVersion(devAccessParam.getNDid());
|
String version = csTopicService.getVersion(devAccessParam.getNDid());
|
||||||
CsEquipmentDeliveryVO vo = equipmentFeignClient.queryEquipmentByndid(devAccessParam.getNDid()).getData();
|
CsEquipmentDeliveryVO vo = equipmentFeignClient.queryEquipmentByndid(devAccessParam.getNDid()).getData();
|
||||||
List<CsLinePO> csLinePoList = new ArrayList<>();
|
List<CsLinePO> csLinePoList = new ArrayList<>();
|
||||||
|
List<CsDeviceRegistry> csDeviceRegistryList = new ArrayList<>();
|
||||||
List<AppLineTopologyDiagramPO> appLineTopologyDiagramPoList = new ArrayList<>();
|
List<AppLineTopologyDiagramPO> appLineTopologyDiagramPoList = new ArrayList<>();
|
||||||
//1.录入装置台账信息
|
//1.录入装置台账信息
|
||||||
CsLedgerParam csLedgerParam = new CsLedgerParam();
|
CsLedgerParam csLedgerParam = new CsLedgerParam();
|
||||||
@@ -237,6 +246,13 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
csDevModelRelationService.addDevModelRelation(csDevModelRelationAddParm);
|
csDevModelRelationService.addDevModelRelation(csDevModelRelationAddParm);
|
||||||
}
|
}
|
||||||
//3.监测点表录入关系
|
//3.监测点表录入关系
|
||||||
|
List<CsDeviceRegistry> data = csDeviceRegistryFeignClient.queryByCurrentNdid(devAccessParam.getNDid()).getData();
|
||||||
|
Map<Integer, String> clDidToIdMap;
|
||||||
|
if (CollUtil.isNotEmpty(data)) {
|
||||||
|
clDidToIdMap = data.stream().collect(Collectors.toMap(CsDeviceRegistry::getClDid, CsDeviceRegistry::getId, (a, b) -> a));
|
||||||
|
} else {
|
||||||
|
clDidToIdMap = new HashMap<>();
|
||||||
|
}
|
||||||
for (DevAccessParam.LineParam item : devAccessParam.getList()) {
|
for (DevAccessParam.LineParam item : devAccessParam.getList()) {
|
||||||
String location = dicDataFeignClient.getDicDataById(item.getPosition()).getData().getCode();
|
String location = dicDataFeignClient.getDicDataById(item.getPosition()).getData().getCode();
|
||||||
CsLinePO po = new CsLinePO();
|
CsLinePO po = new CsLinePO();
|
||||||
@@ -246,38 +262,48 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
po.setDeviceId(vo.getId());
|
po.setDeviceId(vo.getId());
|
||||||
po.setPosition(item.getPosition());
|
po.setPosition(item.getPosition());
|
||||||
po.setClDid(0);
|
po.setClDid(0);
|
||||||
|
String uuid = IdUtil.fastSimpleUUID();
|
||||||
if (Objects.equals(DicDataEnum.GRID_SIDE.getCode(),location)){
|
if (Objects.equals(DicDataEnum.GRID_SIDE.getCode(),location)){
|
||||||
po.setLineId(devAccessParam.getNDid() + "1");
|
if (!Objects.isNull(clDidToIdMap.get(1))) {
|
||||||
|
uuid = clDidToIdMap.get(1);
|
||||||
|
}
|
||||||
|
po.setLineId(uuid);
|
||||||
String id = Objects.requireNonNull(modelId.stream().filter(it -> Objects.equals(it.getDid(), 2)).findFirst().orElse(null)).getModelId();
|
String id = Objects.requireNonNull(modelId.stream().filter(it -> Objects.equals(it.getDid(), 2)).findFirst().orElse(null)).getModelId();
|
||||||
po.setDataModelId(id);
|
po.setDataModelId(id);
|
||||||
//获取模板下数据集
|
//获取模板下数据集
|
||||||
List<CsDataSet> dataSets = csDataSetService.getDataSetData(id);
|
List<CsDataSet> dataSets = csDataSetService.getDataSetData(id);
|
||||||
String dataSetId = Objects.requireNonNull(dataSets.stream().filter(it -> Objects.equals(it.getClDev(), 1)&&Objects.equals(it.getType(), 2)).findFirst().orElse(null)).getId();
|
String dataSetId = Objects.requireNonNull(dataSets.stream().filter(it -> Objects.equals(it.getClDev(), 1)&&Objects.equals(it.getType(), 2)).findFirst().orElse(null)).getId();
|
||||||
po.setDataSetId(dataSetId);
|
po.setDataSetId(dataSetId);
|
||||||
param.setId(devAccessParam.getNDid() + "1");
|
param.setId(uuid);
|
||||||
appLineTopologyDiagramPo.setLineId(devAccessParam.getNDid() + "1");
|
appLineTopologyDiagramPo.setLineId(uuid);
|
||||||
po.setClDid(1);
|
po.setClDid(1);
|
||||||
} else if (Objects.equals(DicDataEnum.LOAD_SIDE.getCode(),location)){
|
} else if (Objects.equals(DicDataEnum.LOAD_SIDE.getCode(),location)){
|
||||||
po.setLineId(devAccessParam.getNDid() + "2");
|
if (!Objects.isNull(clDidToIdMap.get(2))) {
|
||||||
|
uuid = clDidToIdMap.get(2);
|
||||||
|
}
|
||||||
|
po.setLineId(uuid);
|
||||||
String id = Objects.requireNonNull(modelId.stream().filter(it -> Objects.equals(it.getDid(), 2)).findFirst().orElse(null)).getModelId();
|
String id = Objects.requireNonNull(modelId.stream().filter(it -> Objects.equals(it.getDid(), 2)).findFirst().orElse(null)).getModelId();
|
||||||
po.setDataModelId(id);
|
po.setDataModelId(id);
|
||||||
//获取模板下数据集
|
//获取模板下数据集
|
||||||
List<CsDataSet> dataSets = csDataSetService.getDataSetData(id);
|
List<CsDataSet> dataSets = csDataSetService.getDataSetData(id);
|
||||||
String dataSetId = Objects.requireNonNull(dataSets.stream().filter(it -> Objects.equals(it.getClDev(), 2)&&Objects.equals(it.getType(), 2)).findFirst().orElse(null)).getId();
|
String dataSetId = Objects.requireNonNull(dataSets.stream().filter(it -> Objects.equals(it.getClDev(), 2)&&Objects.equals(it.getType(), 2)).findFirst().orElse(null)).getId();
|
||||||
po.setDataSetId(dataSetId);
|
po.setDataSetId(dataSetId);
|
||||||
param.setId(devAccessParam.getNDid() + "2");
|
param.setId(uuid);
|
||||||
appLineTopologyDiagramPo.setLineId(devAccessParam.getNDid() + "2");
|
appLineTopologyDiagramPo.setLineId(uuid);
|
||||||
po.setClDid(2);
|
po.setClDid(2);
|
||||||
} else {
|
} else {
|
||||||
po.setLineId(devAccessParam.getNDid() + "0");
|
if (!Objects.isNull(clDidToIdMap.get(0))) {
|
||||||
|
uuid = clDidToIdMap.get(0);
|
||||||
|
}
|
||||||
|
po.setLineId(uuid);
|
||||||
String id = Objects.requireNonNull(modelId.stream().filter(it -> Objects.equals(it.getDid(), 1)).findFirst().orElse(null)).getModelId();
|
String id = Objects.requireNonNull(modelId.stream().filter(it -> Objects.equals(it.getDid(), 1)).findFirst().orElse(null)).getModelId();
|
||||||
po.setDataModelId(id);
|
po.setDataModelId(id);
|
||||||
//获取模板下数据集
|
//获取模板下数据集
|
||||||
List<CsDataSet> dataSets = csDataSetService.getDataSetData(id);
|
List<CsDataSet> dataSets = csDataSetService.getDataSetData(id);
|
||||||
String dataSetId = Objects.requireNonNull(dataSets.stream().filter(it -> Objects.equals(it.getClDev(), 0)&&Objects.equals(it.getType(), 0)).findFirst().orElse(null)).getId();
|
String dataSetId = Objects.requireNonNull(dataSets.stream().filter(it -> Objects.equals(it.getClDev(), 0)&&Objects.equals(it.getType(), 0)).findFirst().orElse(null)).getId();
|
||||||
po.setDataSetId(dataSetId);
|
po.setDataSetId(dataSetId);
|
||||||
param.setId(devAccessParam.getNDid() + "0");
|
param.setId(uuid);
|
||||||
appLineTopologyDiagramPo.setLineId(devAccessParam.getNDid() + "0");
|
appLineTopologyDiagramPo.setLineId(uuid);
|
||||||
}
|
}
|
||||||
po.setStatus(1);
|
po.setStatus(1);
|
||||||
csLinePoList.add(po);
|
csLinePoList.add(po);
|
||||||
@@ -292,6 +318,16 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
appLineTopologyDiagramPo.setStatus("1");
|
appLineTopologyDiagramPo.setStatus("1");
|
||||||
appLineTopologyDiagramPo.setTarget(item.getTarget());
|
appLineTopologyDiagramPo.setTarget(item.getTarget());
|
||||||
appLineTopologyDiagramPoList.add(appLineTopologyDiagramPo);
|
appLineTopologyDiagramPoList.add(appLineTopologyDiagramPo);
|
||||||
|
if (CollUtil.isEmpty(data)) {
|
||||||
|
//存储设备注册表数据,用来后续保留监测点id
|
||||||
|
CsDeviceRegistry csDeviceRegistry = new CsDeviceRegistry();
|
||||||
|
csDeviceRegistry.setId(uuid);
|
||||||
|
csDeviceRegistry.setCurrentNdid(devAccessParam.getNDid());
|
||||||
|
csDeviceRegistry.setOldNdid(devAccessParam.getNDid());
|
||||||
|
csDeviceRegistry.setClDid(po.getClDid());
|
||||||
|
csDeviceRegistry.setFirstSeenTime(LocalDateTime.now());
|
||||||
|
csDeviceRegistryList.add(csDeviceRegistry);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
List<String> position = csLinePoList.stream().map(CsLinePO::getPosition).collect(Collectors.toList());
|
List<String> position = csLinePoList.stream().map(CsLinePO::getPosition).collect(Collectors.toList());
|
||||||
List<String> lineList = position.stream().filter(e-> Collections.frequency(position,e) > 1).distinct().collect(Collectors.toList());
|
List<String> lineList = position.stream().filter(e-> Collections.frequency(position,e) > 1).distinct().collect(Collectors.toList());
|
||||||
@@ -304,8 +340,18 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
//删除监测点稳态指标告警的默认指标配置
|
//删除监测点稳态指标告警的默认指标配置
|
||||||
List<String> lineIdList = csLinePoList.stream().map(CsLinePO::getLineId).collect(Collectors.toList());
|
List<String> lineIdList = csLinePoList.stream().map(CsLinePO::getLineId).collect(Collectors.toList());
|
||||||
csHarmonicPlanLineFeignClient.deleteByLineIds(lineIdList);
|
csHarmonicPlanLineFeignClient.deleteByLineIds(lineIdList);
|
||||||
|
List<CsHarmonicPlan> planList = csHarmonicPlanFeignClient.getByName("通用方案").getData();
|
||||||
|
if (CollectionUtil.isNotEmpty(planList)) {
|
||||||
|
CsHarmonicPlan plan = planList.get(0);
|
||||||
|
CsHarmonicPlanLineParam param1 = new CsHarmonicPlanLineParam();
|
||||||
|
param1.setId(plan.getId());
|
||||||
|
param1.setLineIds(lineIdList);
|
||||||
|
csHarmonicPlanLineFeignClient.savePlanLines(param1);
|
||||||
|
}
|
||||||
csLineService.saveBatch(csLinePoList);
|
csLineService.saveBatch(csLinePoList);
|
||||||
|
if (CollectionUtil.isNotEmpty(csDeviceRegistryList)) {
|
||||||
|
csDeviceRegistryFeignClient.add(csDeviceRegistryList);
|
||||||
|
}
|
||||||
redisUtil.saveByKeyWithExpire("accessLineInfo:" + devAccessParam.getNDid(),csLinePoList,30L);
|
redisUtil.saveByKeyWithExpire("accessLineInfo:" + devAccessParam.getNDid(),csLinePoList,30L);
|
||||||
//缓存监测点信息
|
//缓存监测点信息
|
||||||
LineInfoParam param = new LineInfoParam();
|
LineInfoParam param = new LineInfoParam();
|
||||||
@@ -402,6 +448,8 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
appLineTopologyDiagramPOQueryWrapper.in("line_id",collect);
|
appLineTopologyDiagramPOQueryWrapper.in("line_id",collect);
|
||||||
appLineTopologyDiagramService.remove(appLineTopologyDiagramPOQueryWrapper);
|
appLineTopologyDiagramService.remove(appLineTopologyDiagramPOQueryWrapper);
|
||||||
}
|
}
|
||||||
|
//清空主题
|
||||||
|
csTopicService.deleteByNDid(nDid);
|
||||||
redisUtil.deleteKeysByString(AppRedisKey.LINE_POSITION+nDid);
|
redisUtil.deleteKeysByString(AppRedisKey.LINE_POSITION+nDid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -453,9 +501,22 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
throwExceptionAndLog(nDid,AccessResponseEnum.MODEL_ERROR, logDto);
|
throwExceptionAndLog(nDid,AccessResponseEnum.MODEL_ERROR, logDto);
|
||||||
}
|
}
|
||||||
List<CsDataSet> list = csDataSetService.getDataSetData(modelList.get(0).getModelId());
|
List<CsDataSet> list = csDataSetService.getDataSetData(modelList.get(0).getModelId());
|
||||||
|
|
||||||
|
List<CsDeviceRegistry> csDeviceRegistryList = new ArrayList<>();
|
||||||
|
List<CsDeviceRegistry> data = csDeviceRegistryFeignClient.queryByCurrentNdid(nDid).getData();
|
||||||
|
Map<Integer, String> clDidToIdMap;
|
||||||
|
if (CollUtil.isNotEmpty(data)) {
|
||||||
|
clDidToIdMap = data.stream().collect(Collectors.toMap(CsDeviceRegistry::getClDid, CsDeviceRegistry::getId, (a, b) -> a));
|
||||||
|
} else {
|
||||||
|
clDidToIdMap = new HashMap<>();
|
||||||
|
}
|
||||||
list.forEach(item->{
|
list.forEach(item->{
|
||||||
|
String uuid = IdUtil.fastSimpleUUID();
|
||||||
|
if (!Objects.isNull(clDidToIdMap.get(item.getClDev()))) {
|
||||||
|
uuid = clDidToIdMap.get(item.getClDev());
|
||||||
|
}
|
||||||
CsLinePO po = new CsLinePO();
|
CsLinePO po = new CsLinePO();
|
||||||
po.setLineId(nDid + item.getClDev().toString());
|
po.setLineId(uuid);
|
||||||
po.setName(item.getClDev().toString() + "#监测点");
|
po.setName(item.getClDev().toString() + "#监测点");
|
||||||
po.setStatus(1);
|
po.setStatus(1);
|
||||||
po.setClDid(item.getClDev());
|
po.setClDid(item.getClDev());
|
||||||
@@ -470,14 +531,28 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
}
|
}
|
||||||
//3.生成台账树监测点数据
|
//3.生成台账树监测点数据
|
||||||
CsLedgerParam param = new CsLedgerParam();
|
CsLedgerParam param = new CsLedgerParam();
|
||||||
param.setId(nDid + item.getClDev().toString());
|
param.setId(uuid);
|
||||||
param.setPid(vo.getId());
|
param.setPid(vo.getId());
|
||||||
param.setName(item.getClDev().toString() + "#监测点");
|
param.setName(item.getClDev().toString() + "#监测点");
|
||||||
param.setLevel(3);
|
param.setLevel(3);
|
||||||
param.setSort(0);
|
param.setSort(0);
|
||||||
csLedgerService.addLedgerTree(param);
|
csLedgerService.addLedgerTree(param);
|
||||||
|
//4.存储设备注册表数据,用来后续保留监测点id
|
||||||
|
if (CollUtil.isEmpty(data)) {
|
||||||
|
//存储设备注册表数据,用来后续保留监测点id
|
||||||
|
CsDeviceRegistry csDeviceRegistry = new CsDeviceRegistry();
|
||||||
|
csDeviceRegistry.setId(uuid);
|
||||||
|
csDeviceRegistry.setCurrentNdid(nDid);
|
||||||
|
csDeviceRegistry.setOldNdid(nDid);
|
||||||
|
csDeviceRegistry.setClDid(po.getClDid());
|
||||||
|
csDeviceRegistry.setFirstSeenTime(LocalDateTime.now());
|
||||||
|
csDeviceRegistryList.add(csDeviceRegistry);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
csLineService.saveBatch(csLinePoList);
|
csLineService.saveBatch(csLinePoList);
|
||||||
|
if (CollectionUtil.isNotEmpty(csDeviceRegistryList)) {
|
||||||
|
csDeviceRegistryFeignClient.add(csDeviceRegistryList);
|
||||||
|
}
|
||||||
redisUtil.saveByKeyWithExpire("accessLineInfo:" + nDid,csLinePoList,30L);
|
redisUtil.saveByKeyWithExpire("accessLineInfo:" + nDid,csLinePoList,30L);
|
||||||
//缓存监测点信息
|
//缓存监测点信息
|
||||||
LineInfoParam param = new LineInfoParam();
|
LineInfoParam param = new LineInfoParam();
|
||||||
@@ -499,10 +574,10 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
Thread.sleep(2000);
|
Thread.sleep(2000);
|
||||||
String version = "V1";
|
String version = "V1";
|
||||||
devAccessAskTemplate(nDid,version,1);
|
devAccessAskTemplate(nDid,version,1);
|
||||||
//判断接入状态
|
|
||||||
Object object = redisUtil.getObjectByKey("online" + nDid);
|
|
||||||
for (int i = 0; i < 5; i++) {
|
for (int i = 0; i < 5; i++) {
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
|
//判断接入状态
|
||||||
|
Object object = redisUtil.getObjectByKey("online" + nDid);
|
||||||
if (Objects.nonNull(object)) {
|
if (Objects.nonNull(object)) {
|
||||||
result = "success";
|
result = "success";
|
||||||
break;
|
break;
|
||||||
@@ -575,11 +650,11 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
if (csLedger == null) {
|
if (csLedger == null) {
|
||||||
throw new BusinessException("未找到装置绑定的项目,请重新绑定");
|
throw new BusinessException("未找到装置绑定的项目,请重新绑定");
|
||||||
}
|
}
|
||||||
|
List<CsDeviceRegistry> csDeviceRegistryList = new ArrayList<>();
|
||||||
// 根据模板接入装置
|
// 根据模板接入装置
|
||||||
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.setOperate("系统端向监测装置端"+nDid+"发送注册、接入请求");
|
||||||
logDto.setResult(1);
|
logDto.setResult(1);
|
||||||
try {
|
try {
|
||||||
@@ -602,39 +677,111 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
csLedgerParam.setLevel(2);
|
csLedgerParam.setLevel(2);
|
||||||
csLedgerParam.setSort(0);
|
csLedgerParam.setSort(0);
|
||||||
csLedgerService.addLedgerTree(csLedgerParam);
|
csLedgerService.addLedgerTree(csLedgerParam);
|
||||||
//2.根据模板获取监测点个数,插入监测点表
|
//2.获取模板数据
|
||||||
Thread.sleep(2000);
|
List<CsModelDto> modelList = new ArrayList<>();
|
||||||
List<CsModelDto> modelList = channelObjectUtil.objectToList(redisUtil.getObjectByKey(AppRedisKey.MODEL + nDid),CsModelDto.class);
|
for (int i = 0; i < 2; i++) {
|
||||||
|
Thread.sleep(1000);
|
||||||
|
modelList = channelObjectUtil.objectToList(redisUtil.getObjectByKey(AppRedisKey.MODEL + nDid),CsModelDto.class);
|
||||||
|
if (CollUtil.isNotEmpty(modelList)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (CollUtil.isEmpty(modelList)) {
|
if (CollUtil.isEmpty(modelList)) {
|
||||||
throwExceptionAndLog(nDid,AccessResponseEnum.MODEL_ERROR, logDto);
|
throwExceptionAndLog(nDid,AccessResponseEnum.MODEL_ERROR, logDto);
|
||||||
}
|
}
|
||||||
List<CsDataSet> list = csDataSetService.getDataSetData(modelList.get(0).getModelId());
|
List<CsDataSet> list = csDataSetService.getDataSetData2(modelList.get(0).getModelId());
|
||||||
list.forEach(item->{
|
Map<Integer, List<CsDataSet>> map = list.stream().collect(Collectors.groupingBy(CsDataSet::getConType));
|
||||||
CsLinePO po = new CsLinePO();
|
//询问监测点个数
|
||||||
po.setLineId(nDid + item.getClDev().toString());
|
String version = redisUtil.getObjectByKey(nDid +":version").toString();
|
||||||
po.setName(item.getClDev().toString() + "#监测点");
|
if (Objects.isNull(version)) {
|
||||||
po.setStatus(1);
|
version = "V1";
|
||||||
po.setClDid(item.getClDev());
|
}
|
||||||
po.setLineNo(item.getClDev());
|
askDevData(nDid,version,2,2);
|
||||||
po.setRunStatus(0);
|
List<RspDataDto.LdevInfo> lDevInfos = new ArrayList<>();
|
||||||
po.setDeviceId(vo.getId());
|
for (int i = 0; i < 2; i++) {
|
||||||
po.setDataSetId(item.getId());
|
Thread.sleep(1000);
|
||||||
po.setDataModelId(item.getPid());
|
lDevInfos= channelObjectUtil.objectToList( redisUtil.getObjectByKey("lineInfo:"+nDid),RspDataDto.LdevInfo.class);
|
||||||
//防止主键重复
|
if (CollUtil.isNotEmpty(lDevInfos)) {
|
||||||
QueryWrapper<CsLinePO> qw = new QueryWrapper<>();
|
break;
|
||||||
qw.eq("line_id",po.getLineId());
|
|
||||||
if(csLineService.getBaseMapper().selectList(qw).isEmpty()){
|
|
||||||
csLinePoList.add(po);
|
|
||||||
}
|
}
|
||||||
//3.生成台账树监测点数据
|
}
|
||||||
|
if (CollUtil.isEmpty(lDevInfos)) {
|
||||||
|
throwExceptionAndLog(nDid,AccessResponseEnum.DEV_DATA_ERROR, logDto);
|
||||||
|
}
|
||||||
|
//查询是否存在历史记录存储
|
||||||
|
List<CsDeviceRegistry> data = csDeviceRegistryFeignClient.queryByCurrentNdid(nDid).getData();
|
||||||
|
// 1. 预加载已存在的 lineId,避免循环内查库
|
||||||
|
Set<String> existingLineIds = csLineService.getBaseMapper().selectList(null)
|
||||||
|
.stream()
|
||||||
|
.map(CsLinePO::getLineId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
// 2. 构建 clDid -> id 的映射(统一处理新增/已存在两种场景)
|
||||||
|
Map<Integer, String> clDidToIdMap;
|
||||||
|
if (CollUtil.isNotEmpty(data)) {
|
||||||
|
clDidToIdMap = data.stream().collect(Collectors.toMap(CsDeviceRegistry::getClDid, CsDeviceRegistry::getId, (a, b) -> a));
|
||||||
|
} else {
|
||||||
|
clDidToIdMap = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 提取公共默认 modelId
|
||||||
|
String defaultModelId = CollUtil.isNotEmpty(modelList) ? modelList.get(0).getModelId() : null;
|
||||||
|
// 4. 统一处理
|
||||||
|
for (RspDataDto.LdevInfo item : lDevInfos) {
|
||||||
|
Integer clDid = item.getClDid();
|
||||||
|
// 4.1 获取或生成 ID
|
||||||
|
String id = clDidToIdMap.computeIfAbsent(clDid, k -> {
|
||||||
|
String newId = IdUtil.fastSimpleUUID();
|
||||||
|
// 仅在不存在时创建注册表记录
|
||||||
|
CsDeviceRegistry registry = new CsDeviceRegistry();
|
||||||
|
registry.setId(newId);
|
||||||
|
registry.setCurrentNdid(nDid);
|
||||||
|
registry.setOldNdid(nDid);
|
||||||
|
registry.setClDid(k);
|
||||||
|
registry.setFirstSeenTime(LocalDateTime.now());
|
||||||
|
csDeviceRegistryList.add(registry);
|
||||||
|
return newId;
|
||||||
|
});
|
||||||
|
// 4.2 查找匹配的 DataSet(带空值保护)
|
||||||
|
int conTypeKey = Objects.equals(2, item.getConType()) ? 1 : item.getConType();
|
||||||
|
List<CsDataSet> dataSetList = map.getOrDefault(conTypeKey, Collections.emptyList());
|
||||||
|
CsDataSet dataSet = dataSetList.stream()
|
||||||
|
.filter(it -> Objects.equals(it.getClDev(), clDid))
|
||||||
|
.findFirst()
|
||||||
|
.orElseGet(() -> dataSetList.stream()
|
||||||
|
.filter(it -> Objects.equals(it.getClDev(), 1))
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null));
|
||||||
|
|
||||||
|
if (dataSet == null) {
|
||||||
|
log.warn("未找到匹配的 DataSet, clDid={}, conType={}", clDid, item.getConType());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 4.3 构建 CsLinePO(去重判断改为内存 Set 查询)
|
||||||
|
if (!existingLineIds.contains(id)) {
|
||||||
|
CsLinePO po = new CsLinePO();
|
||||||
|
po.setLineId(id);
|
||||||
|
po.setName(clDid + "#监测点");
|
||||||
|
po.setStatus(1);
|
||||||
|
po.setClDid(clDid);
|
||||||
|
po.setLineNo(clDid);
|
||||||
|
po.setRunStatus(0);
|
||||||
|
po.setDeviceId(vo.getId());
|
||||||
|
po.setDataSetId(dataSet.getId());
|
||||||
|
po.setDataModelId(defaultModelId);
|
||||||
|
csLinePoList.add(po);
|
||||||
|
existingLineIds.add(id);
|
||||||
|
}
|
||||||
|
// 4.4 生成台账树
|
||||||
CsLedgerParam param = new CsLedgerParam();
|
CsLedgerParam param = new CsLedgerParam();
|
||||||
param.setId(nDid + item.getClDev().toString());
|
param.setId(id);
|
||||||
param.setPid(vo.getId());
|
param.setPid(vo.getId());
|
||||||
param.setName(item.getClDev().toString() + "#监测点");
|
param.setName(clDid + "#监测点");
|
||||||
param.setLevel(3);
|
param.setLevel(3);
|
||||||
param.setSort(0);
|
param.setSort(clDid);
|
||||||
csLedgerService.addLedgerTree(param);
|
csLedgerService.addLedgerTree(param);
|
||||||
});
|
}
|
||||||
|
//存储监测点信息
|
||||||
|
csLinePoList.sort(Comparator.comparing(CsLinePO::getClDid));
|
||||||
csLineService.saveBatch(csLinePoList);
|
csLineService.saveBatch(csLinePoList);
|
||||||
redisUtil.saveByKeyWithExpire("accessLineInfo:" + nDid,csLinePoList,30L);
|
redisUtil.saveByKeyWithExpire("accessLineInfo:" + nDid,csLinePoList,30L);
|
||||||
//缓存监测点信息
|
//缓存监测点信息
|
||||||
@@ -642,6 +789,10 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
param.setNDid(nDid);
|
param.setNDid(nDid);
|
||||||
param.setList(csLinePoList);
|
param.setList(csLinePoList);
|
||||||
deviceMessageFeignClient.getLineInfo(param);
|
deviceMessageFeignClient.getLineInfo(param);
|
||||||
|
//存储装置注册表数据
|
||||||
|
if (CollUtil.isNotEmpty(csDeviceRegistryList)) {
|
||||||
|
csDeviceRegistryFeignClient.add(csDeviceRegistryList);
|
||||||
|
}
|
||||||
//4.生成装置和模板的关系表
|
//4.生成装置和模板的关系表
|
||||||
CsDevModelRelationAddParm csDevModelRelationAddParm = new CsDevModelRelationAddParm();
|
CsDevModelRelationAddParm csDevModelRelationAddParm = new CsDevModelRelationAddParm();
|
||||||
csDevModelRelationAddParm.setDevId(vo.getId());
|
csDevModelRelationAddParm.setDevId(vo.getId());
|
||||||
@@ -660,21 +811,31 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
//7.删除redis监测点模板信息
|
//7.删除redis监测点模板信息
|
||||||
redisUtil.delete(AppRedisKey.MODEL + nDid);
|
redisUtil.delete(AppRedisKey.MODEL + nDid);
|
||||||
redisUtil.delete(AppRedisKey.LINE + nDid);
|
redisUtil.delete(AppRedisKey.LINE + nDid);
|
||||||
|
//8.新增稳态事件指标配置
|
||||||
|
List<String> lineIdList = csLinePoList.stream().map(CsLinePO::getLineId).collect(Collectors.toList());
|
||||||
|
csHarmonicPlanLineFeignClient.deleteByLineIds(lineIdList);
|
||||||
|
List<CsHarmonicPlan> planList = csHarmonicPlanFeignClient.getByName("通用方案").getData();
|
||||||
|
if (CollectionUtil.isNotEmpty(planList)) {
|
||||||
|
CsHarmonicPlan plan = planList.get(0);
|
||||||
|
CsHarmonicPlanLineParam param1 = new CsHarmonicPlanLineParam();
|
||||||
|
param1.setId(plan.getId());
|
||||||
|
param1.setLineIds(lineIdList);
|
||||||
|
csHarmonicPlanLineFeignClient.savePlanLines(param1);
|
||||||
|
}
|
||||||
//发起自动接入请求
|
//发起自动接入请求
|
||||||
Thread.sleep(2000);
|
Thread.sleep(2000);
|
||||||
//先获取版本
|
//先获取版本
|
||||||
String version = "V1";
|
|
||||||
devAccessAskTemplate(nDid,version,1);
|
devAccessAskTemplate(nDid,version,1);
|
||||||
//判断接入状态
|
|
||||||
Object object = redisUtil.getObjectByKey("online" + nDid);
|
|
||||||
for (int i = 0; i < 5; i++) {
|
for (int i = 0; i < 5; i++) {
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
|
//判断接入状态
|
||||||
|
Object object = redisUtil.getObjectByKey("online" + nDid);
|
||||||
if (Objects.nonNull(object)) {
|
if (Objects.nonNull(object)) {
|
||||||
result = "success";
|
result = "success";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//8.存储日志
|
//9.存储日志
|
||||||
logMessageTemplate.sendMember(logDto);
|
logMessageTemplate.sendMember(logDto);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logDto.setResult(0);
|
logDto.setResult(0);
|
||||||
@@ -692,6 +853,103 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String accessByUpdateMac(String nDid) {
|
||||||
|
String result = "fail";
|
||||||
|
// 根据模板接入装置
|
||||||
|
LogMessage logDto = new LogMessage();
|
||||||
|
logDto.setUserIndex(RequestUtil.getUserNickname());
|
||||||
|
logDto.setLoginName(RequestUtil.getUsername());
|
||||||
|
logDto.setOperate("装置修改mac,系统端"+nDid+"发送接入请求");
|
||||||
|
logDto.setResult(1);
|
||||||
|
try {
|
||||||
|
// 装置状态判断
|
||||||
|
checkDeviceStatus(nDid);
|
||||||
|
// 询问装置支持的主题信息,并将支持的主题入库
|
||||||
|
askAndStoreTopics(nDid);
|
||||||
|
Thread.sleep(2000);
|
||||||
|
String version = redisUtil.getObjectByKey(nDid +":version").toString();
|
||||||
|
if (Objects.isNull(version)) {
|
||||||
|
version = "V1";
|
||||||
|
}
|
||||||
|
publisher.send("/Pfm/DevCmd/"+version+"/"+nDid, new Gson().toJson(getJson(1,TypeEnum.TYPE_5.getCode())), 1, false);
|
||||||
|
//判断接入状态
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
Thread.sleep(1000);
|
||||||
|
Object object = redisUtil.getObjectByKey("online" + nDid);
|
||||||
|
if (Objects.nonNull(object)) {
|
||||||
|
result = "success";
|
||||||
|
//修改设备注册表的接入状态
|
||||||
|
csDeviceRegistryFeignClient.updateIsAccessByCurrentNdid(nDid,1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//9.存储日志
|
||||||
|
logMessageTemplate.sendMember(logDto);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logDto.setResult(0);
|
||||||
|
logDto.setFailReason(e.getMessage());
|
||||||
|
logMessageTemplate.sendMember(logDto);
|
||||||
|
throw new BusinessException(e.getMessage());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* type含义
|
||||||
|
* 1:询问设备软件信息
|
||||||
|
* 2:模块信息
|
||||||
|
* 3:监测点pt/ct信息
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
reqAndResParam.setMid(mid);
|
||||||
|
reqAndResParam.setPri(AccessEnum.FIRST_CHANNEL.getCode());
|
||||||
|
reqAndResParam.setType(Integer.parseInt(TypeEnum.TYPE_6.getCode()));
|
||||||
|
reqAndResParam.setExpire(-1);
|
||||||
|
AskDataDto askDataDto = new AskDataDto();
|
||||||
|
askDataDto.setDataAttr(0);
|
||||||
|
askDataDto.setOperate(1);
|
||||||
|
askDataDto.setStartTime(-1);
|
||||||
|
askDataDto.setEndTime(-1);
|
||||||
|
switch (type) {
|
||||||
|
case 1:
|
||||||
|
reqAndResParam.setDid(0);
|
||||||
|
askDataDto.setCldid(0);
|
||||||
|
askDataDto.setDataType(1);
|
||||||
|
logDto.setOperate("系统端向装置端"+nDid+"询问软件信息");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
reqAndResParam.setDid(1);
|
||||||
|
askDataDto.setCldid(-1);
|
||||||
|
askDataDto.setDataType(2);
|
||||||
|
logDto.setOperate("系统端向装置端"+nDid+"询问逻辑设备1信息");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
reqAndResParam.setDid(2);
|
||||||
|
askDataDto.setCldid(-1);
|
||||||
|
askDataDto.setDataType(2);
|
||||||
|
logDto.setOperate("系统端向装置端"+nDid+"询问逻辑设备2信息");
|
||||||
|
break;
|
||||||
|
//询问工程信息
|
||||||
|
case 48:
|
||||||
|
reqAndResParam.setDid(1);
|
||||||
|
askDataDto.setCldid(1);
|
||||||
|
askDataDto.setDataType(48);
|
||||||
|
logDto.setOperate("系统端向装置端"+nDid+"询问工程信息");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
reqAndResParam.setMsg(askDataDto);
|
||||||
|
publisher.send("/Pfm/DevCmd/"+version+"/"+nDid, new Gson().toJson(reqAndResParam),1,false);
|
||||||
|
logMessageTemplate.sendMember(logDto);
|
||||||
|
}
|
||||||
|
|
||||||
private void checkDeviceStatus(String nDid) {
|
private void checkDeviceStatus(String nDid) {
|
||||||
LogMessage logDto = createLogDto("当前装置"+nDid+"状态判断");
|
LogMessage logDto = createLogDto("当前装置"+nDid+"状态判断");
|
||||||
CsEquipmentDeliveryVO csEquipmentDeliveryVO = csEquipmentDeliveryService.queryEquipmentBynDid(nDid);
|
CsEquipmentDeliveryVO csEquipmentDeliveryVO = csEquipmentDeliveryService.queryEquipmentBynDid(nDid);
|
||||||
|
|||||||
@@ -8,14 +8,8 @@ import com.njcn.access.utils.ChannelObjectUtil;
|
|||||||
import com.njcn.access.utils.RedisSetUtil;
|
import com.njcn.access.utils.RedisSetUtil;
|
||||||
import com.njcn.common.pojo.exception.BusinessException;
|
import com.njcn.common.pojo.exception.BusinessException;
|
||||||
import com.njcn.common.utils.PubUtils;
|
import com.njcn.common.utils.PubUtils;
|
||||||
import com.njcn.csdevice.api.CsLineFeignClient;
|
import com.njcn.csdevice.api.*;
|
||||||
import com.njcn.csdevice.api.DataArrayFeignClient;
|
import com.njcn.csdevice.pojo.po.*;
|
||||||
import com.njcn.csdevice.api.DataSetFeignClient;
|
|
||||||
import com.njcn.csdevice.api.EquipmentFeignClient;
|
|
||||||
import com.njcn.csdevice.pojo.po.CsDataArray;
|
|
||||||
import com.njcn.csdevice.pojo.po.CsDataSet;
|
|
||||||
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
|
|
||||||
import com.njcn.csdevice.pojo.po.CsLinePO;
|
|
||||||
import com.njcn.mq.message.AppAutoDataMessage;
|
import com.njcn.mq.message.AppAutoDataMessage;
|
||||||
import com.njcn.redis.utils.RedisUtil;
|
import com.njcn.redis.utils.RedisUtil;
|
||||||
import com.njcn.rt.enums.RtResponseEnum;
|
import com.njcn.rt.enums.RtResponseEnum;
|
||||||
@@ -53,12 +47,19 @@ public class RtServiceImpl implements IRtService {
|
|||||||
private final MqttPublisher publisher;
|
private final MqttPublisher publisher;
|
||||||
private final RedisSetUtil redisSetUtil;
|
private final RedisSetUtil redisSetUtil;
|
||||||
private final EquipmentFeignClient equipmentFeignClient;
|
private final EquipmentFeignClient equipmentFeignClient;
|
||||||
|
private final CsDeviceRegistryFeignClient csDeviceRegistryFeignClient;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void analysis(AppAutoDataMessage appAutoDataMessage) {
|
public void analysis(AppAutoDataMessage appAutoDataMessage) {
|
||||||
List<CsDataArray> dataArrayList;
|
List<CsDataArray> dataArrayList;
|
||||||
//监测点id
|
//监测点id
|
||||||
String lineId = appAutoDataMessage.getId() + appAutoDataMessage.getMsg().getClDid();
|
String lineId;
|
||||||
|
CsDeviceRegistry csDeviceRegistry = csDeviceRegistryFeignClient.queryByCurrentNdidAndClDid(appAutoDataMessage.getId(),appAutoDataMessage.getMsg().getClDid()).getData();
|
||||||
|
if (Objects.isNull(csDeviceRegistry)) {
|
||||||
|
lineId = appAutoDataMessage.getId() + appAutoDataMessage.getMsg().getClDid();
|
||||||
|
} else {
|
||||||
|
lineId = csDeviceRegistry.getId();
|
||||||
|
}
|
||||||
redisUtil.delete("cldRtDataOverTime:"+lineId);
|
redisUtil.delete("cldRtDataOverTime:"+lineId);
|
||||||
//获取监测点基础信息
|
//获取监测点基础信息
|
||||||
CsLinePO po = csLineFeignClient.getById(lineId).getData();
|
CsLinePO po = csLineFeignClient.getById(lineId).getData();
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ public class StatServiceImpl implements IStatService {
|
|||||||
}
|
}
|
||||||
//云前置设备
|
//云前置设备
|
||||||
else if (Objects.equals(DicDataEnum.DEV_CLD.getCode(),code)) {
|
else if (Objects.equals(DicDataEnum.DEV_CLD.getCode(),code)) {
|
||||||
lineId = appAutoDataMessage.getId() + appAutoDataMessage.getMsg().getClDid();
|
lineId = new Gson().fromJson(String.valueOf(redisUtil.getObjectByKey(AppRedisKey.LINE_POSITION+appAutoDataMessage.getId())), Map.class).get(appAutoDataMessage.getMsg().getClDid().toString()).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取当前设备信息
|
//获取当前设备信息
|
||||||
@@ -168,16 +168,16 @@ public class StatServiceImpl implements IStatService {
|
|||||||
csLineLatestDataFeignClient.addData(csLineLatestData);
|
csLineLatestDataFeignClient.addData(csLineLatestData);
|
||||||
}
|
}
|
||||||
//判断设备运行状态
|
//判断设备运行状态
|
||||||
if (!Objects.isNull(po.getRunStatus()) && po.getRunStatus() == 1) {
|
// if (!Objects.isNull(po.getRunStatus()) && po.getRunStatus() == 1) {
|
||||||
csDeviceFeignClient.updateRunStatus(appAutoDataMessage.getId(), AccessEnum.ONLINE.getCode());
|
// csDeviceFeignClient.updateRunStatus(appAutoDataMessage.getId(), AccessEnum.ONLINE.getCode());
|
||||||
//记录设备上线
|
// //记录设备上线
|
||||||
PqsCommunicateDto dto = new PqsCommunicateDto();
|
// PqsCommunicateDto dto = new PqsCommunicateDto();
|
||||||
dto.setTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
|
// dto.setTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
|
||||||
dto.setDevId(appAutoDataMessage.getId());
|
// dto.setDevId(appAutoDataMessage.getId());
|
||||||
dto.setType(1);
|
// dto.setType(1);
|
||||||
dto.setDescription("通讯正常");
|
// dto.setDescription("通讯正常");
|
||||||
csCommunicateFeignClient.insertion(dto);
|
// csCommunicateFeignClient.insertion(dto);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user