feat(device): 新增设备注册台账功能并优化数据查询
- 添加设备注册台账实体类CsDeviceRegistry及相关数据库映射 - 实现设备注册台账的增删改查控制器及服务接口 - 集成Feign客户端用于跨服务调用设备注册功能 - 修复设备交付服务中的空指针异常问题 - 优化相位数据显示,将"T"相位转换为"总" - 在数据集查询中添加存储标志过滤条件 - 实现设备MAC地址变更时的注册信息同步更新 - 添加设备注册状态字段到设备交付视图对象 - 完善事件处理中的逻辑子设备ID设置逻辑 - 重构线路台账服务中的线路类型判断逻辑 - 实现云前置线路创建时的唯一标识符生成机制
This commit is contained in:
@@ -141,6 +141,9 @@ public class CsAlarmServiceImpl extends ServiceImpl<CsAlarmMapper, CsAlarm> impl
|
||||
List<CsAlarmData.IntegrityAlarm.MonitorPointIntegrity> list2 = new ArrayList<>();
|
||||
//根据resultList 来查询在线率和完整是否有true的,如果有就设置alarmVO的属性
|
||||
resultList.forEach(item->{
|
||||
if (item == null) {
|
||||
return;
|
||||
}
|
||||
list1.add(item.getOnlineRate());
|
||||
list2.addAll(item.getIntegrity().getMonitorPoints());
|
||||
// 判断 onlineRate 是否有异常
|
||||
|
||||
@@ -448,7 +448,7 @@ public class CsEventPOServiceImpl extends ServiceImpl<CsEventPOMapper, CsEventPO
|
||||
eventPo.setStartTime(time);
|
||||
eventPo.setTag(getTag(param.getEventType()));
|
||||
eventPo.setType(0);
|
||||
eventPo.setClDid(Integer.parseInt(param.getMonitorId().substring(param.getMonitorId().length() - 1)));
|
||||
eventPo.setClDid(po.getClDid());
|
||||
eventPo.setLevel(2);
|
||||
eventPo.setProcess(4);
|
||||
eventPo.setPersistTime(param.getDuration());
|
||||
|
||||
@@ -121,6 +121,7 @@ public class DataServiceImpl implements IDataService {
|
||||
@Resource
|
||||
private ApfDataMapper apfDataMapper;
|
||||
private final DataSetFeignClient dataSetFeignClient;
|
||||
private final static Double NULL_DATA = 3.14159;
|
||||
|
||||
@Override
|
||||
public List<AppLineDetailVo> getRealTimeData(DataParam param) {
|
||||
@@ -926,9 +927,9 @@ public class DataServiceImpl implements IDataService {
|
||||
children2.sort(Comparator.comparingInt(AppLineDetailVo.targetDetail::getSort));
|
||||
children2.forEach(item2->{
|
||||
if (Objects.isNull(item2.getData())) {
|
||||
item2.setData(3.15159);
|
||||
item2.setData(NULL_DATA);
|
||||
}
|
||||
if (!Objects.equals(item2.getData(),3.14159)) {
|
||||
if (!Objects.equals(item2.getData(),NULL_DATA)) {
|
||||
item2.setData(BigDecimal.valueOf(item2.getData()).setScale(2, RoundingMode.HALF_UP).doubleValue());
|
||||
}
|
||||
});
|
||||
@@ -1106,18 +1107,18 @@ public class DataServiceImpl implements IDataService {
|
||||
EachModuleVO.DataVo vo1 = new EachModuleVO.DataVo();
|
||||
vo1.setTime(LocalDateTime.ofInstant(item.getTime().minus(8, ChronoUnit.HOURS), ZoneId.systemDefault()));
|
||||
vo1.setPhasicType(item.getPhaseType());
|
||||
vo1.setData(Objects.isNull(item.getValue()) ? 3.14159 : Double.parseDouble(df.format(item.getValue())));
|
||||
vo1.setData(Objects.isNull(item.getValue()) ? NULL_DATA : Double.parseDouble(df.format(item.getValue())));
|
||||
|
||||
EachModuleVO.DataVo vo2 = new EachModuleVO.DataVo();
|
||||
vo2.setTime(LocalDateTime.ofInstant(item.getTime().minus(8, ChronoUnit.HOURS), ZoneId.systemDefault()));
|
||||
vo2.setPhasicType(item.getPhaseType());
|
||||
vo2.setData(Objects.isNull(item.getAvgValue()) ? 3.14159 : Double.parseDouble(df.format(item.getAvgValue())));
|
||||
vo2.setData(Objects.isNull(item.getAvgValue()) ? NULL_DATA : Double.parseDouble(df.format(item.getAvgValue())));
|
||||
|
||||
if (Objects.equals(item.getPhaseType(),"T")) {
|
||||
EachModuleVO.DataVo vo3 = new EachModuleVO.DataVo();
|
||||
vo3.setTime(LocalDateTime.ofInstant(item.getTime().minus(8, ChronoUnit.HOURS), ZoneId.systemDefault()));
|
||||
vo3.setPhasicType(item.getPhaseType());
|
||||
vo3.setData(Objects.isNull(item.getMinValue()) ? 3.14159 : Double.parseDouble(df.format(item.getMinValue())));
|
||||
vo3.setData(Objects.isNull(item.getMinValue()) ? NULL_DATA : Double.parseDouble(df.format(item.getMinValue())));
|
||||
list4.add(vo3);
|
||||
}
|
||||
list2.add(vo1);
|
||||
@@ -1819,36 +1820,36 @@ public class DataServiceImpl implements IDataService {
|
||||
if (Objects.equals("Primary",dataLevel1)) {
|
||||
if (Objects.equals("Primary",dataLevel2)) {
|
||||
if (HarmonicConstant.POWER_LIST.contains(item.getName())) {
|
||||
re = Objects.isNull(item.getData()) ? 3.14159 : Double.parseDouble(df.format(item.getData() / 1000));
|
||||
re = Objects.isNull(item.getData()) ? NULL_DATA : Double.parseDouble(df.format(item.getData() / 1000));
|
||||
item.setData(re);
|
||||
unit = "k" + item.getUnit();
|
||||
} else {
|
||||
item.setData(Objects.isNull(item.getData()) ? 3.14159 : Double.parseDouble(df.format(item.getData())));
|
||||
item.setData(Objects.isNull(item.getData()) ? NULL_DATA : Double.parseDouble(df.format(item.getData())));
|
||||
unit = item.getUnit();
|
||||
}
|
||||
} else {
|
||||
if(Objects.nonNull(item.getPrimaryFormula())){
|
||||
switch (item.getPrimaryFormula()) {
|
||||
case "*PT":
|
||||
re = Objects.isNull(item.getData()) ? 3.14159 : item.getData() * pt / 1000;
|
||||
re = Objects.isNull(item.getData()) ? NULL_DATA : item.getData() * pt / 1000;
|
||||
unit = "k" + item.getUnit();
|
||||
break;
|
||||
case "*CT":
|
||||
re = Objects.isNull(item.getData()) ? 3.14159 : item.getData() * ct;
|
||||
re = Objects.isNull(item.getData()) ? NULL_DATA : item.getData() * ct;
|
||||
unit = item.getUnit();
|
||||
break;
|
||||
case "*PT*CT":
|
||||
re = Objects.isNull(item.getData()) ? 3.14159 : item.getData() * pt * ct / 1000;
|
||||
re = Objects.isNull(item.getData()) ? NULL_DATA : item.getData() * pt * ct / 1000;
|
||||
unit = "k" + item.getUnit();
|
||||
break;
|
||||
default:
|
||||
re = Objects.isNull(item.getData()) ? 3.14159 : item.getData();
|
||||
re = Objects.isNull(item.getData()) ? NULL_DATA : item.getData();
|
||||
unit = item.getUnit();
|
||||
break;
|
||||
}
|
||||
item.setData(Objects.equals(re,3.14159) ? 3.14159 : Double.parseDouble(df.format(re)));
|
||||
item.setData(Objects.equals(re,NULL_DATA) ? NULL_DATA : Double.parseDouble(df.format(re)));
|
||||
}else {
|
||||
item.setData(Objects.isNull(item.getData()) ? 3.14159 : Double.parseDouble(df.format(item.getData())));
|
||||
item.setData(Objects.isNull(item.getData()) ? NULL_DATA : Double.parseDouble(df.format(item.getData())));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -1856,19 +1857,19 @@ public class DataServiceImpl implements IDataService {
|
||||
if(Objects.nonNull(item.getPrimaryFormula())) {
|
||||
switch (item.getPrimaryFormula()) {
|
||||
case "*PT":
|
||||
re = Objects.isNull(item.getData()) ? 3.14159 : item.getData() / pt;
|
||||
re = Objects.isNull(item.getData()) ? NULL_DATA : item.getData() / pt;
|
||||
break;
|
||||
case "*CT":
|
||||
re = Objects.isNull(item.getData()) ? 3.14159 : item.getData() / ct;
|
||||
re = Objects.isNull(item.getData()) ? NULL_DATA : item.getData() / ct;
|
||||
break;
|
||||
case "*PT*CT":
|
||||
re = Objects.isNull(item.getData()) ? 3.14159 : item.getData() / pt / ct * 1000;
|
||||
re = Objects.isNull(item.getData()) ? NULL_DATA : item.getData() / pt / ct * 1000;
|
||||
break;
|
||||
default:
|
||||
re = Objects.isNull(item.getData()) ? 3.14159 : item.getData();
|
||||
re = Objects.isNull(item.getData()) ? NULL_DATA : item.getData();
|
||||
break;
|
||||
}
|
||||
item.setData(Objects.equals(re,3.14159) ? 3.14159 : Double.parseDouble(df.format(re)));
|
||||
item.setData(Objects.equals(re,NULL_DATA) ? NULL_DATA : Double.parseDouble(df.format(re)));
|
||||
}else {
|
||||
if (Objects.nonNull(item.getData())) {
|
||||
re = item.getData();
|
||||
@@ -1876,7 +1877,7 @@ public class DataServiceImpl implements IDataService {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
item.setData(Objects.isNull(item.getData()) ? 3.14159 : Double.parseDouble(df.format(item.getData())));
|
||||
item.setData(Objects.isNull(item.getData()) ? NULL_DATA : Double.parseDouble(df.format(item.getData())));
|
||||
}
|
||||
}
|
||||
item.setUnit(unit);
|
||||
@@ -2040,7 +2041,7 @@ public class DataServiceImpl implements IDataService {
|
||||
if (Objects.isNull(item2.getData())) {
|
||||
item2.setData(3.15159);
|
||||
}
|
||||
if (!Objects.equals(item2.getData(),3.14159)) {
|
||||
if (!Objects.equals(item2.getData(),NULL_DATA)) {
|
||||
item2.setData(BigDecimal.valueOf(item2.getData()).setScale(2, RoundingMode.HALF_UP).doubleValue());
|
||||
}
|
||||
});
|
||||
|
||||
@@ -15,9 +15,11 @@ import com.njcn.access.utils.ChannelObjectUtil;
|
||||
import com.njcn.access.utils.MqttUtil;
|
||||
import com.njcn.common.config.GeneralInfo;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
import com.njcn.csdevice.api.CsLineFeignClient;
|
||||
import com.njcn.csdevice.api.DeviceFtpFeignClient;
|
||||
import com.njcn.csdevice.api.EquipmentFeignClient;
|
||||
import com.njcn.csdevice.api.PortableOffLogFeignClient;
|
||||
import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO;
|
||||
import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO;
|
||||
import com.njcn.csharmonic.enums.CsHarmonicResponseEnum;
|
||||
import com.njcn.csharmonic.offline.constant.OfflineConstant;
|
||||
@@ -82,7 +84,7 @@ public class OfflineDataUploadServiceImpl implements OfflineDataUploadService {
|
||||
private final GeneralInfo generalInfo;
|
||||
private final PortableOffLogFeignClient portableOffLogFeignClient;
|
||||
private final EquipmentFeignClient equipmentFeignClient;
|
||||
|
||||
private final CsLineFeignClient csLineFeignClient;
|
||||
|
||||
@Override
|
||||
public byte[] uploadAnalysis(List<MultipartFile> files,String type) throws Exception{
|
||||
@@ -492,7 +494,8 @@ public class OfflineDataUploadServiceImpl implements OfflineDataUploadService {
|
||||
*/
|
||||
public void askProjectInfo(String lineId, String nDid, Integer type, String path, String topic) {
|
||||
if (StringUtils.isNotBlank(lineId)) {
|
||||
nDid = lineId.substring(0, lineId.length() - 1);
|
||||
CsEquipmentDeliveryPO po = equipmentFeignClient.getDevByLineId(lineId).getData();
|
||||
nDid = po.getNdid();
|
||||
}
|
||||
String version = csTopicFeignClient.find(nDid).getData();
|
||||
ReqAndResDto.Req reqAndResParam = createRequestParameters(lineId, type, path);
|
||||
|
||||
@@ -40,11 +40,10 @@ public class RealDataServiceImpl implements RealDataService {
|
||||
private final MqttUtil mqttUtil;
|
||||
private final DictTreeFeignClient dictTreeFeignClient;
|
||||
|
||||
// @Override
|
||||
@Override
|
||||
public boolean getBaseRealData(String lineId) {
|
||||
boolean result = true;
|
||||
boolean result = false;
|
||||
try {
|
||||
String nDid = lineId.substring(0, lineId.length() - 1);
|
||||
//判断设备类型 治理无线设备需要判断mqtt、云前置设备直接判断设备运行状态
|
||||
CsEquipmentDeliveryPO dev = equipmentFeignClient.getDevByLineId(lineId).getData();
|
||||
String devModelCode = dictTreeFeignClient.queryById(dev.getDevType()).getData().getCode();
|
||||
@@ -53,13 +52,12 @@ public class RealDataServiceImpl implements RealDataService {
|
||||
throw new BusinessException("装置离线");
|
||||
}
|
||||
} else {
|
||||
String clientName = "NJCN-" + nDid.substring(nDid.length() - 6);
|
||||
String clientName = "NJCN-" + dev.getNdid().substring(dev.getNdid().length() - 6);
|
||||
boolean mqttClient = mqttUtil.judgeClientOnline(clientName);
|
||||
if (!mqttClient) {
|
||||
throw new BusinessException("装置离线");
|
||||
}
|
||||
}
|
||||
Integer clDid = Integer.parseInt(lineId.substring(lineId.length() - 1));
|
||||
//获取装置所用模板
|
||||
CsLinePO po = csLineFeignClient.getById(lineId).getData();
|
||||
String modelId = po.getDataModelId();
|
||||
@@ -69,8 +67,8 @@ public class RealDataServiceImpl implements RealDataService {
|
||||
updateRedisUserSet("rtDataUserId:" + lineId, RequestUtil.getUserIndex(), 600L);
|
||||
updateRedisUserSet("cldRtDataOverTime:" + lineId, RequestUtil.getUserIndex(), 5L);
|
||||
} else {
|
||||
CsDataSet csDataSet = dataSetFeignClient.getBaseDataSet(modelId,clDid).getData();
|
||||
askDeviceDataFeignClient.askRealData(nDid,csDataSet.getIdx(),clDid);
|
||||
CsDataSet csDataSet = dataSetFeignClient.getBaseDataSet(modelId,po.getClDid()).getData();
|
||||
askDeviceDataFeignClient.askRealData(dev.getNdid(),csDataSet.getIdx(),po.getClDid());
|
||||
redisUtil.saveByKeyWithExpire("rtDataUserId:"+lineId, RequestUtil.getUserIndex(),600L);
|
||||
}
|
||||
//等待装置响应,获取询问结果
|
||||
@@ -80,15 +78,13 @@ public class RealDataServiceImpl implements RealDataService {
|
||||
if (Objects.equals(DicDataEnum.DEV_CLD.getCode(),devModelCode) && Objects.equals(dev.getDevAccessMethod(),"CLD")) {
|
||||
object = redisUtil.getObjectByKey("devResponse:" + lineId);
|
||||
} else {
|
||||
object = redisUtil.getObjectByKey("devResponse");
|
||||
object = redisUtil.getObjectByKey("devResponse:" + dev.getNdid());
|
||||
}
|
||||
if (Objects.isNull(object)) {
|
||||
result = false;
|
||||
//throw new BusinessException("数据获取失败,设备无响应");
|
||||
} else {
|
||||
int code = (Integer) object;
|
||||
if (code != 200) {
|
||||
result = false;
|
||||
//throw new BusinessException("数据获取失败,设备无响应");
|
||||
} else {
|
||||
result = true;
|
||||
@@ -106,7 +102,6 @@ public class RealDataServiceImpl implements RealDataService {
|
||||
public boolean getHarmRealData(String lineId, Integer target) {
|
||||
boolean result = true;
|
||||
try {
|
||||
String nDid = lineId.substring(0, lineId.length() - 1);
|
||||
//判断设备类型 治理无线设备需要判断mqtt、云前置设备直接判断设备运行状态
|
||||
CsEquipmentDeliveryPO dev = equipmentFeignClient.getDevByLineId(lineId).getData();
|
||||
String devModelCode = dictTreeFeignClient.queryById(dev.getDevType()).getData().getCode();
|
||||
@@ -115,13 +110,12 @@ public class RealDataServiceImpl implements RealDataService {
|
||||
throw new BusinessException("装置离线");
|
||||
}
|
||||
} else {
|
||||
String clientName = "NJCN-" + nDid.substring(nDid.length() - 6);
|
||||
String clientName = "NJCN-" + dev.getNdid().substring(dev.getNdid().length() - 6);
|
||||
boolean mqttClient = mqttUtil.judgeClientOnline(clientName);
|
||||
if (!mqttClient) {
|
||||
throw new BusinessException("装置离线");
|
||||
}
|
||||
}
|
||||
Integer clDid = Integer.parseInt(lineId.substring(lineId.length() - 1));
|
||||
//获取装置所用模板
|
||||
CsLinePO po = csLineFeignClient.getById(lineId).getData();
|
||||
String modelId = po.getDataModelId();
|
||||
@@ -130,8 +124,8 @@ public class RealDataServiceImpl implements RealDataService {
|
||||
CsDataSet csDataSet = dataSetFeignClient.getHarmonicDataSet(modelId,1,target).getData();
|
||||
askDeviceDataFeignClient.askCldRealData(dev.getId(),lineId,dev.getNodeId(),csDataSet.getIdx());
|
||||
} else {
|
||||
CsDataSet csDataSet = dataSetFeignClient.getHarmonicDataSet(modelId,clDid,target).getData();
|
||||
askDeviceDataFeignClient.askRealData(nDid,csDataSet.getIdx(),clDid);
|
||||
CsDataSet csDataSet = dataSetFeignClient.getHarmonicDataSet(modelId,po.getClDid(),target).getData();
|
||||
askDeviceDataFeignClient.askRealData(dev.getNdid(),csDataSet.getIdx(),po.getClDid());
|
||||
}
|
||||
//等待装置响应,获取询问结果
|
||||
Thread.sleep(2000);
|
||||
@@ -139,7 +133,7 @@ public class RealDataServiceImpl implements RealDataService {
|
||||
if (Objects.equals(DicDataEnum.DEV_CLD.getCode(),devModelCode) && Objects.equals(dev.getDevAccessMethod(),"CLD")) {
|
||||
object = redisUtil.getObjectByKey("devResponse:" + lineId);
|
||||
} else {
|
||||
object = redisUtil.getObjectByKey("devResponse");
|
||||
object = redisUtil.getObjectByKey("devResponse:" + dev.getNdid());
|
||||
}
|
||||
if (Objects.isNull(object)) {
|
||||
result = false;
|
||||
|
||||
Reference in New Issue
Block a user