refactor(device): 重构设备监测点信息缓存逻辑并优化数据处理

- 引入 DeviceMessageFeignClient 替代原有的 Redis 缓存监测点信息逻辑
- 移除 CsDeviceServiceImpl 中重复的监测点信息缓存代码,统一调用远程服务
- 将 phase 默认值从 "M" 修改为 "T",更新所有相关数据处理逻辑
- 优化 RtServiceImpl 中 CT 和 PT 变比计算逻辑,支持双变比处理
- 更新实时数据分析中的相别标识符,从 "M" 改为 "T"
- 在 StatServiceImpl 中完善数据标签处理和质量标志设置逻辑
This commit is contained in:
xy
2026-05-20 14:16:36 +08:00
parent 6983cd39fe
commit 2eeabddf5c
6 changed files with 76 additions and 139 deletions

View File

@@ -399,7 +399,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
eleEpdPqdParam.setStatMethod(apf.getStatMethod());
eleEpdPqdParam.setDataType(id);
if (Objects.isNull(apf.getPhase())){
eleEpdPqdParam.setPhase("M");
eleEpdPqdParam.setPhase("T");
} else {
eleEpdPqdParam.setPhase(apf.getPhase());
}
@@ -433,7 +433,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
eleEpdPqdParam.setEventType(evt.getEventType());
eleEpdPqdParam.setDataType(id);
if (Objects.isNull(evt.getPhase())){
eleEpdPqdParam.setPhase("M");
eleEpdPqdParam.setPhase("T");
} else {
eleEpdPqdParam.setPhase(evt.getPhase());
}
@@ -494,7 +494,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
//告警code到时候推送给用户告警码+事件时间
eleEpdPqdParam.setDefaultValue(alm.getCode());
if (Objects.isNull(alm.getPhase())){
eleEpdPqdParam.setPhase("M");
eleEpdPqdParam.setPhase("T");
} else {
eleEpdPqdParam.setPhase(alm.getPhase());
}
@@ -521,7 +521,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
eleEpdPqdParam.setTranRule(sts.getTranRule());
eleEpdPqdParam.setDataType(id);
if (Objects.isNull(sts.getPhase())){
eleEpdPqdParam.setPhase("M");
eleEpdPqdParam.setPhase("T");
} else {
eleEpdPqdParam.setPhase(sts.getPhase());
}
@@ -553,7 +553,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
eleEpdPqdParam.setDefaultValue(parm.getDefaultValue());
eleEpdPqdParam.setDataType(id);
if (Objects.isNull(parm.getPhase())){
eleEpdPqdParam.setPhase("M");
eleEpdPqdParam.setPhase("T");
} else {
eleEpdPqdParam.setPhase(parm.getPhase());
}
@@ -582,7 +582,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
eleEpdPqdParam.setUnit(set.getUnit());
eleEpdPqdParam.setDataType(id);
if (Objects.isNull(set.getPhase())){
eleEpdPqdParam.setPhase("M");
eleEpdPqdParam.setPhase("T");
} else {
eleEpdPqdParam.setPhase(set.getPhase());
}
@@ -614,7 +614,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
eleEpdPqdParam.setMinNum(ctrl.getMinNum());
eleEpdPqdParam.setDataType(id);
if (Objects.isNull(ctrl.getPhase())){
eleEpdPqdParam.setPhase("M");
eleEpdPqdParam.setPhase("T");
} else {
eleEpdPqdParam.setPhase(ctrl.getPhase());
}
@@ -638,7 +638,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
eleEpdPqdParam.setSort(epd.getIdx());
eleEpdPqdParam.setType(epd.getType());
if (Objects.isNull(epd.getPhase())){
eleEpdPqdParam.setPhase("M");
eleEpdPqdParam.setPhase("T");
} else {
eleEpdPqdParam.setPhase(epd.getPhase());
}
@@ -674,7 +674,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
eleEpdPqdParam.setSort(pqd.getIdx());
eleEpdPqdParam.setType(pqd.getType());
if (Objects.isNull(pqd.getPhase())){
eleEpdPqdParam.setPhase("M");
eleEpdPqdParam.setPhase("T");
} else {
eleEpdPqdParam.setPhase(pqd.getPhase());
}
@@ -710,7 +710,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
eleEpdPqdParam.setSort(bmd.getIdx());
eleEpdPqdParam.setType(bmd.getType());
if (Objects.isNull(bmd.getPhase())){
eleEpdPqdParam.setPhase("M");
eleEpdPqdParam.setPhase("T");
} else {
eleEpdPqdParam.setPhase(bmd.getPhase());
}
@@ -741,7 +741,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
eleEpdPqdParam.setTranFlag(di.getTranFlag());
eleEpdPqdParam.setTranRule(di.getTranRule());
if (Objects.isNull(di.getPhase())){
eleEpdPqdParam.setPhase("M");
eleEpdPqdParam.setPhase("T");
} else {
eleEpdPqdParam.setPhase(di.getPhase());
}
@@ -767,7 +767,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
eleEpdPqdParam.setCurSts(dto.getCurSts());
eleEpdPqdParam.setCtlSts(dto.getCtlSts());
if (Objects.isNull(dto.getPhase())){
eleEpdPqdParam.setPhase("M");
eleEpdPqdParam.setPhase("T");
} else {
eleEpdPqdParam.setPhase(dto.getPhase());
}
@@ -797,7 +797,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
eleEpdPqdParam.setUnit(inSet.getUnit());
eleEpdPqdParam.setDataType(id);
if (Objects.isNull(inSet.getPhase())){
eleEpdPqdParam.setPhase("M");
eleEpdPqdParam.setPhase("T");
} else {
eleEpdPqdParam.setPhase(inSet.getPhase());
}
@@ -820,7 +820,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
eleEpdPqdParam.setShowName(wave.getName());
eleEpdPqdParam.setSort(wave.getIdx());
eleEpdPqdParam.setDataType(id);
eleEpdPqdParam.setPhase("M");
eleEpdPqdParam.setPhase("T");
eleEpdPqdParam.setClassId(classId);
EleEpdPqd po = epdFeignClient.add(eleEpdPqdParam).getData();
if (CollectionUtil.isNotEmpty(wave.getParam())){
@@ -1025,91 +1025,91 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
List<ApfDto> apfList = templateDto.getApfDto();
ApfDto apfDto = apfList.get(idx);
name = apfDto.getName();
phase = apfDto.getPhase() == null ? "M":apfDto.getPhase();
phase = apfDto.getPhase() == null ? "T":apfDto.getPhase();
break;
case DataModel.EVT:
log.info("查询evt字典数据");
List<EvtDto> evtList = templateDto.getEvtDto();
EvtDto evtDto = evtList.get(idx);
name = evtDto.getName();
phase = evtDto.getPhase() == null ? "M":evtDto.getPhase();
phase = evtDto.getPhase() == null ? "T":evtDto.getPhase();
break;
case DataModel.ALM:
log.info("查询alm字典数据");
List<AlmDto> almList = templateDto.getAlmDto();
AlmDto almDto = almList.get(idx);
name = almDto.getName();
phase = almDto.getPhase() == null ? "M":almDto.getPhase();
phase = almDto.getPhase() == null ? "T":almDto.getPhase();
break;
case DataModel.STS:
log.info("查询sts字典数据");
List<StsDto> stsList = templateDto.getStsDto();
StsDto stsDto = stsList.get(idx);
name = stsDto.getName();
phase = stsDto.getPhase() == null ? "M":stsDto.getPhase();
phase = stsDto.getPhase() == null ? "T":stsDto.getPhase();
break;
case DataModel.PARM:
log.info("查询parm字典数据");
List<ParmDto> parmList = templateDto.getParmDto();
ParmDto parmDto = parmList.get(idx);
name = parmDto.getName();
phase = parmDto.getPhase() == null ? "M":parmDto.getPhase();
phase = parmDto.getPhase() == null ? "T":parmDto.getPhase();
break;
case DataModel.SET:
log.info("查询set字典数据");
List<SetDto> setList = templateDto.getSetDto();
SetDto setDto = setList.get(idx);
name = setDto.getName();
phase = setDto.getPhase() == null ? "M":setDto.getPhase();
phase = setDto.getPhase() == null ? "T":setDto.getPhase();
break;
case DataModel.CTRL:
log.info("查询ctrl字典数据");
List<CtrlDto> ctrlList = templateDto.getCtrlDto();
CtrlDto ctrlDto = ctrlList.get(idx);
name = ctrlDto.getName();
phase = ctrlDto.getPhase() == null ? "M":ctrlDto.getPhase();
phase = ctrlDto.getPhase() == null ? "T":ctrlDto.getPhase();
break;
case DataModel.EPD:
log.info("查询epd字典数据");
List<EpdPqdDto> epdList = templateDto.getEpdDto();
EpdPqdDto epdDto = epdList.get(idx);
name = epdDto.getName();
phase = epdDto.getPhase() == null ? "M":epdDto.getPhase();
phase = epdDto.getPhase() == null ? "T":epdDto.getPhase();
break;
case DataModel.PQD:
log.info("查询pqd字典数据");
List<EpdPqdDto> pqdList = templateDto.getPqdDto();
EpdPqdDto pqdDto = pqdList.get(idx);
name = pqdDto.getName();
phase = pqdDto.getPhase() == null ? "M":pqdDto.getPhase();
phase = pqdDto.getPhase() == null ? "T":pqdDto.getPhase();
break;
case DataModel.BMD:
log.info("查询bmd字典数据");
List<BmdDto> bmdList = templateDto.getBmdDto();
BmdDto bmdDto = bmdList.get(idx);
name = bmdDto.getName();
phase = bmdDto.getPhase() == null ? "M":bmdDto.getPhase();
phase = bmdDto.getPhase() == null ? "T":bmdDto.getPhase();
break;
case DataModel.DI:
log.info("查询di字典数据");
List<DiDto> diList = templateDto.getDiDto();
DiDto diDto = diList.get(idx);
name = diDto.getName();
phase = diDto.getPhase() == null ? "M":diDto.getPhase();
phase = diDto.getPhase() == null ? "T":diDto.getPhase();
break;
case DataModel.DO:
log.info("查询do字典数据");
List<DoDto> doList = templateDto.getDoDto();
DoDto doDto = doList.get(idx);
name = doDto.getName();
phase = doDto.getPhase() == null ? "M":doDto.getPhase();
phase = doDto.getPhase() == null ? "T":doDto.getPhase();
break;
case DataModel.INSET:
log.info("查询inset字典数据");
List<InSetDto> inSetList = templateDto.getInSetDto();
InSetDto inSetDto = inSetList.get(idx);
name = inSetDto.getName();
phase = inSetDto.getPhase() == null ? "M":inSetDto.getPhase();
phase = inSetDto.getPhase() == null ? "T":inSetDto.getPhase();
break;
default:
break;
@@ -1119,7 +1119,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
log.info("指标名称:"+name+",数据类型:"+id+",相别:"+phase);
throw new BusinessException(AccessResponseEnum.DICT_MISSING);
}
// M 代表没有数据,因为influxDB要录入数据此字段是主键给个默认值
// T 代表没有数据,因为influxDB要录入数据此字段是主键给个默认值
if (!Objects.isNull(eleEpdPqd.getHarmStart()) && !Objects.isNull(eleEpdPqd.getHarmEnd())){
if (Objects.equals(eleEpdPqd.getHarmStart(),1)){
for (int i = eleEpdPqd.getHarmStart(); i <= eleEpdPqd.getHarmEnd(); i++) {
@@ -1142,7 +1142,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
CsDataArray.setDataId(eleEpdPqd.getId());
CsDataArray.setName(eleEpdPqd.getName() + "_" + i);
CsDataArray.setAnotherName((i-0.5) + "" +eleEpdPqd.getShowName());
CsDataArray.setStatMethod("M");
CsDataArray.setStatMethod("T");
CsDataArray.setDataType(eleEpdPqd.getType());
CsDataArray.setPhase(eleEpdPqd.getPhase());
list.add(CsDataArray);
@@ -1169,7 +1169,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
CsDataArray.setDataId(eleEpdPqd.getId());
CsDataArray.setName(eleEpdPqd.getName() + "_" + i);
CsDataArray.setAnotherName(i + "" +eleEpdPqd.getShowName());
CsDataArray.setStatMethod("M");
CsDataArray.setStatMethod("T");
CsDataArray.setDataType(eleEpdPqd.getType());
CsDataArray.setPhase(eleEpdPqd.getPhase());
list.add(CsDataArray);
@@ -1196,7 +1196,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
CsDataArray.setDataId(eleEpdPqd.getId());
CsDataArray.setName(eleEpdPqd.getName());
CsDataArray.setAnotherName(eleEpdPqd.getShowName());
CsDataArray.setStatMethod("M");
CsDataArray.setStatMethod("T");
CsDataArray.setDataType(eleEpdPqd.getType());
CsDataArray.setPhase(eleEpdPqd.getPhase());
list.add(CsDataArray);

View File

@@ -86,6 +86,7 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
private final UserFeignClient userFeignClient;
private final EngineeringFeignClient engineeringFeignClient;
private final AppProjectFeignClient appProjectFeignClient;
private final DeviceMessageFeignClient deviceMessageFeignClient;
@Override
@Transactional(rollbackFor = {Exception.class})
@@ -289,22 +290,7 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
csLineService.saveBatch(csLinePoList);
redisUtil.saveByKeyWithExpire("accessLineInfo:" + devAccessParam.getNDid(),csLinePoList,30L);
//缓存监测点信息
Map<Integer,String> map = new HashMap<>();
for (CsLinePO item : csLinePoList) {
if (Objects.isNull(item.getPosition())){
map.put(item.getClDid(),item.getLineId());
} else {
DictData dictData = dicDataFeignClient.getDicDataById(item.getPosition()).getData();
if (Objects.equals(dictData.getCode(), DicDataEnum.OUTPUT_SIDE.getCode())){
map.put(0,item.getLineId());
} else if (Objects.equals(dictData.getCode(), DicDataEnum.GRID_SIDE.getCode())){
map.put(1,item.getLineId());
} else if (Objects.equals(dictData.getCode(), DicDataEnum.LOAD_SIDE.getCode())){
map.put(2,item.getLineId());
}
}
}
redisUtil.saveByKey(AppRedisKey.LINE_POSITION+devAccessParam.getNDid(),map);
deviceMessageFeignClient.getLineInfo(devAccessParam.getNDid(),csLinePoList);
//4.监测点拓扑图表录入关系
appLineTopologyDiagramService.saveBatch(appLineTopologyDiagramPoList);
//5.绑定装置和人的关系
@@ -477,22 +463,7 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
csLineService.saveBatch(csLinePoList);
redisUtil.saveByKeyWithExpire("accessLineInfo:" + nDid,csLinePoList,30L);
//缓存监测点信息
Map<Integer,String> map = new HashMap<>();
for (CsLinePO item : csLinePoList) {
if (Objects.isNull(item.getPosition())){
map.put(item.getClDid(),item.getLineId());
} else {
DictData dictData = dicDataFeignClient.getDicDataById(item.getPosition()).getData();
if (Objects.equals(dictData.getCode(), DicDataEnum.OUTPUT_SIDE.getCode())){
map.put(0,item.getLineId());
} else if (Objects.equals(dictData.getCode(), DicDataEnum.GRID_SIDE.getCode())){
map.put(1,item.getLineId());
} else if (Objects.equals(dictData.getCode(), DicDataEnum.LOAD_SIDE.getCode())){
map.put(2,item.getLineId());
}
}
}
redisUtil.saveByKey(AppRedisKey.LINE_POSITION+nDid,map);
deviceMessageFeignClient.getLineInfo(nDid,csLinePoList);
//4.生成装置和模板的关系表
CsDevModelRelationAddParm csDevModelRelationAddParm = new CsDevModelRelationAddParm();
csDevModelRelationAddParm.setDevId(vo.getId());
@@ -635,23 +606,7 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
csLineService.saveBatch(csLinePoList);
redisUtil.saveByKeyWithExpire("accessLineInfo:" + nDid,csLinePoList,30L);
//缓存监测点信息
//缓存监测点信息
Map<Integer,String> map = new HashMap<>();
for (CsLinePO item : csLinePoList) {
if (Objects.isNull(item.getPosition())){
map.put(item.getClDid(),item.getLineId());
} else {
DictData dictData = dicDataFeignClient.getDicDataById(item.getPosition()).getData();
if (Objects.equals(dictData.getCode(), DicDataEnum.OUTPUT_SIDE.getCode())){
map.put(0,item.getLineId());
} else if (Objects.equals(dictData.getCode(), DicDataEnum.GRID_SIDE.getCode())){
map.put(1,item.getLineId());
} else if (Objects.equals(dictData.getCode(), DicDataEnum.LOAD_SIDE.getCode())){
map.put(2,item.getLineId());
}
}
}
redisUtil.saveByKey(AppRedisKey.LINE_POSITION+nDid,map);
deviceMessageFeignClient.getLineInfo(nDid,csLinePoList);
//4.生成装置和模板的关系表
CsDevModelRelationAddParm csDevModelRelationAddParm = new CsDevModelRelationAddParm();
csDevModelRelationAddParm.setDevId(vo.getId());
@@ -934,32 +889,9 @@ public class CsDeviceServiceImpl implements ICsDeviceService {
csDevModelRelationService.addRelation(po);
modelMap.put(item.getType(), item.getModelId());
}
List<CsLinePO> lineList;
Object object = redisUtil.getObjectByKey("accessLineInfo:" + nDid);
if (Objects.isNull(object)) {
Map<Integer,String> map = new HashMap<>();
lineList = csLineFeignClient.findByNdid(nDid).getData();
for (CsLinePO item : lineList) {
if (item.getClDid() == 0) {
updateLineIds(modelMap.get(0), item.getClDid(), nDid);
} else {
updateLineIds(modelMap.get(1), item.getClDid(), nDid);
}
//缓存监测点信息
if (Objects.isNull(item.getPosition())){
map.put(item.getClDid(),item.getLineId());
} else {
DictData dictData = dicDataFeignClient.getDicDataById(item.getPosition()).getData();
if (Objects.equals(dictData.getCode(), DicDataEnum.OUTPUT_SIDE.getCode())){
map.put(0,item.getLineId());
} else if (Objects.equals(dictData.getCode(), DicDataEnum.GRID_SIDE.getCode())){
map.put(1,item.getLineId());
} else if (Objects.equals(dictData.getCode(), DicDataEnum.LOAD_SIDE.getCode())){
map.put(2,item.getLineId());
}
}
}
redisUtil.saveByKey(AppRedisKey.LINE_POSITION+nDid,map);
deviceMessageFeignClient.getLineInfo(nDid,null);
}
publisher.send("/Pfm/DevCmd/"+version+"/"+nDid, new Gson().toJson(getJson(mid,TypeEnum.TYPE_5.getCode())), 1, false);
result = true;