9 Commits

Author SHA1 Message Date
xy
004de8f307 微调 2026-01-20 16:26:17 +08:00
xy
bda31ce52a 微调 2026-01-20 11:12:57 +08:00
xy
4d1af87153 微调 2026-01-15 15:48:50 +08:00
xy
e34b5ba46e 微调 2026-01-14 20:51:14 +08:00
xy
33b9fae9ef 微调 2026-01-14 20:41:24 +08:00
xy
a369ae6160 微调 2026-01-14 20:32:57 +08:00
xy
6714a6f582 微调 2026-01-13 14:42:10 +08:00
xy
2910770be1 基于云前置系统-新增监测设备的告警等级 2026-01-08 18:39:17 +08:00
xy
cd8cf60683 云前置改造 2025-11-14 10:02:52 +08:00
7 changed files with 146 additions and 76 deletions

View File

@@ -15,7 +15,6 @@ import com.github.tocrhz.mqtt.publisher.MqttPublisher;
import com.njcn.access.enums.AccessEnum;
import com.njcn.access.enums.AccessResponseEnum;
import com.njcn.access.enums.TypeEnum;
import com.njcn.access.mapper.OverlimitMapper;
import com.njcn.access.pojo.RspDataDto;
import com.njcn.access.pojo.dto.*;
import com.njcn.access.pojo.dto.file.FileDto;
@@ -34,6 +33,7 @@ import com.njcn.csdevice.api.*;
import com.njcn.csdevice.pojo.dto.PqsCommunicateDto;
import com.njcn.csdevice.pojo.param.CsLineParam;
import com.njcn.csdevice.pojo.po.*;
import com.njcn.device.biz.mapper.OverLimitWlMapper;
import com.njcn.device.biz.pojo.po.Overlimit;
import com.njcn.device.biz.utils.COverlimitUtil;
import com.njcn.mq.message.AppAutoDataMessage;
@@ -69,6 +69,8 @@ import java.util.stream.Collectors;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
;
/**
* @author hongawen
* @version 1.0.0
@@ -96,7 +98,7 @@ public class MqttMessageHandler {
private final CsLineFeignClient csLineFeignClient;
private final DevCapacityFeignClient devCapacityFeignClient;
private final EquipmentFeignClient equipmentFeignClient;
private final OverlimitMapper overlimitMapper;
private final OverLimitWlMapper overLimitWlMapper;
private final ChannelObjectUtil channelObjectUtil;
private final WaveFeignClient waveFeignClient;
private final RtFeignClient rtFeignClient;
@@ -380,32 +382,27 @@ public class MqttMessageHandler {
if (Objects.equals(res.getDid(),1)){
log.info("{},设备数据应答--->更新治理监测点信息和设备容量", nDid);
List<CsDevCapacityPO> list3 = new ArrayList<>();
devInfo.forEach(item->{
//1.更新治理监测点信息
CsLineParam csLineParam = new CsLineParam();
if (Objects.equals(item.getClDid(),0)){
csLineParam.setLineId(nDid.concat("0"));
boolean hasZeroClDid = devInfo.stream().anyMatch(item -> item.getClDid() == 0);
//治理设备
if (hasZeroClDid) {
devInfo.forEach(item->{
if (Objects.equals(item.getClDid(),0)){
updateLineInfo(nDid,item);
}
//2.录入各个模块设备容量
CsDevCapacityPO csDevCapacity = new CsDevCapacityPO();
csDevCapacity.setLineId(nDid.concat("0"));
csDevCapacity.setCldid(item.getClDid());
csDevCapacity.setCapacity(Objects.isNull(item.getCapacityA())?0.0:item.getCapacityA());
list3.add(csDevCapacity);
} else {
csLineParam.setLineId(nDid.concat(item.getClDid().toString()));
}
csLineParam.setVolGrade(item.getVolGrade());
csLineParam.setPtRatio(item.getPtRatio());
csLineParam.setCtRatio(item.getCtRatio());
csLineParam.setConType(item.getConType());
csLineParam.setLineInterval(item.getStatCycle());
csLineFeignClient.updateLine(csLineParam);
//生成监测点限值
Overlimit overlimit = COverlimitUtil.globalAssemble(item.getVolGrade().floatValue(),10f,10f,10f,0,0);
overlimit.setId(nDid.concat(item.getClDid().toString()));
overlimitMapper.deleteById(nDid.concat(item.getClDid().toString()));
overlimitMapper.insert(overlimit);
});
});
}
//其余设备
else {
devInfo.forEach(item->{
updateLineInfo(nDid,item);
});
}
if (CollectionUtil.isNotEmpty(list3)) {
devCapacityFeignClient.addList(list3);
//3.更新设备模块个数
@@ -416,14 +413,7 @@ public class MqttMessageHandler {
logDto.setOperate(nDid + "更新电网侧、负载侧监测点信息");
//1.更新电网侧、负载侧监测点相关信息
devInfo.forEach(item->{
CsLineParam csLineParam = new CsLineParam();
csLineParam.setLineId(nDid.concat(item.getClDid().toString()));
csLineParam.setVolGrade(item.getVolGrade());
csLineParam.setPtRatio(item.getPtRatio());
csLineParam.setCtRatio(item.getCtRatio());
csLineParam.setConType(item.getConType());
csLineParam.setLineInterval(item.getStatCycle());
csLineFeignClient.updateLine(csLineParam);
updateLineInfo(nDid,item);
});
}
}
@@ -468,6 +458,22 @@ public class MqttMessageHandler {
}
}
public void updateLineInfo(String nDid,RspDataDto.LdevInfo item) {
CsLineParam csLineParam = new CsLineParam();
csLineParam.setLineId(nDid.concat(item.getClDid().toString()));
csLineParam.setVolGrade(item.getVolGrade());
csLineParam.setPtRatio(item.getPtRatio());
csLineParam.setCtRatio(item.getCtRatio());
csLineParam.setConType(item.getConType());
csLineParam.setLineInterval(item.getStatCycle());
csLineFeignClient.updateLine(csLineParam);
//生成监测点限值
Overlimit overlimit = COverlimitUtil.globalAssemble(item.getVolGrade().floatValue(),10f,10f,10f,0,0);
overlimit.setId(nDid.concat(item.getClDid().toString()));
overLimitWlMapper.deleteById(nDid.concat(item.getClDid().toString()));
overLimitWlMapper.insert(overlimit);
}
/**
* 装置心跳 && 主动数据上送
* fixme 这边由于接收文件数据时间跨度会很长,途中有其他请求进来会中断之前的程序,目前是记录中断的位置,等处理完成再继续请求接收文件

View File

@@ -1,21 +1,21 @@
package com.njcn.access.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.device.biz.pojo.po.Overlimit;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author xy
*/
@DS("sjzx")
@Mapper
public interface OverlimitMapper extends BaseMapper<Overlimit> {
}
//package com.njcn.access.mapper;
//
//
//import com.baomidou.dynamic.datasource.annotation.DS;
//import com.baomidou.mybatisplus.core.mapper.BaseMapper;
//import com.njcn.device.biz.pojo.po.Overlimit;
//import org.apache.ibatis.annotations.Mapper;
//
//
///**
// * <p>
// * Mapper 接口
// * </p>
// *
// * @author xy
// */
//@DS("sjzx")
//@Mapper
//public interface OverlimitMapper extends BaseMapper<Overlimit> {
//
//}

View File

@@ -133,8 +133,11 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
if (ObjectUtil.isNotNull(object)) {
csLineFeignClient.updateDataByList(devList,csDevModelPo.getId(),object.toString());
}
}
}
//5.清空模板缓存
redisUtil.deleteKeysByString(AppRedisKey.DEV_MODEL);
csLogsFeignClient.addUserLog(logDto);
} catch (Exception e) {
logDto.setResult(0);
@@ -964,7 +967,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
if(CollectionUtil.isNotEmpty(setList)) {
csDataSetService.addList(setList);
setList.forEach(item->{
if (Objects.equals(item.getName(),"统计数据")) {
if (Objects.equals(item.getName(),"Ds$Pqd$Stat$01")) {
redisUtil.saveByKeyWithExpire("setId:" + pId,item.getId(),30L);
}
});
@@ -1271,19 +1274,26 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
showName = "APF模块8数据模板";
break;
case "Ds$Pqd$Stat$01":
if (Objects.equals(code, DicDataEnum.CONNECT_DEV.getCode()) || Objects.isNull(code)){
if (Objects.equals(code, DicDataEnum.CONNECT_DEV.getCode())){
showName = "电网侧数据模板";
} else if (Objects.equals(code, DicDataEnum.PORTABLE.getCode())){
showName = "监测1#数据模板";
} else {
showName = "统计数据";
}
break;
case "Ds$Pqd$Stat$02":
if (Objects.equals(code, DicDataEnum.CONNECT_DEV.getCode()) || Objects.isNull(code)){
if (Objects.equals(code, DicDataEnum.CONNECT_DEV.getCode())){
showName = "负载侧数据模板";
} else if (Objects.equals(code, DicDataEnum.PORTABLE.getCode())){
showName = "监测2#数据模板";
} else {
showName = "统计数据";
}
break;
case "Ds$Pqd$Rt$01":
showName = "实时数据";
break;
//波形参数名称
case "Wave_Param_Position":
showName = "录波记录位置";

View File

@@ -88,7 +88,7 @@ public class RtServiceImpl implements IRtService {
long timestamp = item.getDataTimeSec() - 8*3600;
baseRealDataSet.setDataTime(getTime(timestamp));
publisher.send("/Web/RealData/" + lineId, new Gson().toJson(baseRealDataSet), 1, false);
} else if (dataSet.getName().contains("实时数据")) {
} else if (dataSet.getName().contains("实时数据") || dataSet.getName().contains("Ds$Pqd$Rt$01")) {
//用户Id
Object redisObject = redisUtil.getObjectByKey("rtDataUserId:"+lineId);
if (ObjectUtil.isNotNull(redisObject)) {
@@ -225,9 +225,15 @@ public class RtServiceImpl implements IRtService {
baseRealDataSet.setVRmsC(FloatUtils.get2Float(map.get("Pq_RmsLUCA")));
}
//基波电压幅值
baseRealDataSet.setV1A(FloatUtils.get2Float(map.get("Pq_RmsFundUA")));
baseRealDataSet.setV1B(FloatUtils.get2Float(map.get("Pq_RmsFundUB")));
baseRealDataSet.setV1C(FloatUtils.get2Float(map.get("Pq_RmsFundUC")));
if (conType == 0) {
baseRealDataSet.setV1A(FloatUtils.get2Float(map.get("Pq_RmsFundUA")));
baseRealDataSet.setV1B(FloatUtils.get2Float(map.get("Pq_RmsFundUB")));
baseRealDataSet.setV1C(FloatUtils.get2Float(map.get("Pq_RmsFundUC")));
} else {
baseRealDataSet.setV1A(FloatUtils.get2Float(map.get("Pq_RmsFundLUAB")));
baseRealDataSet.setV1B(FloatUtils.get2Float(map.get("Pq_RmsFundLUBC")));
baseRealDataSet.setV1C(FloatUtils.get2Float(map.get("Pq_RmsFundLUCA")));
}
//电流有效值
baseRealDataSet.setIRmsA(FloatUtils.get2Float(map.get("Pq_RmsIA")));
baseRealDataSet.setIRmsB(FloatUtils.get2Float(map.get("Pq_RmsIB")));
@@ -237,21 +243,39 @@ public class RtServiceImpl implements IRtService {
baseRealDataSet.setI1B(FloatUtils.get2Float(map.get("Pq_RmsFundIB")));
baseRealDataSet.setI1C(FloatUtils.get2Float(map.get("Pq_RmsFundIC")));
//电压偏差
baseRealDataSet.setVDevA(FloatUtils.get2Float(map.get("Pq_UDevA")));
baseRealDataSet.setVDevB(FloatUtils.get2Float(map.get("Pq_UDevB")));
baseRealDataSet.setVDevC(FloatUtils.get2Float(map.get("Pq_UDevC")));
if (conType == 0) {
baseRealDataSet.setVDevA(FloatUtils.get2Float(map.get("Pq_UDevA")));
baseRealDataSet.setVDevB(FloatUtils.get2Float(map.get("Pq_UDevB")));
baseRealDataSet.setVDevC(FloatUtils.get2Float(map.get("Pq_UDevC")));
} else {
baseRealDataSet.setVDevA(FloatUtils.get2Float(map.get("Pq_LUDevAB")));
baseRealDataSet.setVDevB(FloatUtils.get2Float(map.get("Pq_LUDevBC")));
baseRealDataSet.setVDevC(FloatUtils.get2Float(map.get("Pq_LUDevCA")));
}
//基波电压相位
baseRealDataSet.setV1AngA(FloatUtils.get2Float(map.get("Pq_FundUAngA")));
baseRealDataSet.setV1AngB(FloatUtils.get2Float(map.get("Pq_FundUAngB")));
baseRealDataSet.setV1AngC(FloatUtils.get2Float(map.get("Pq_FundUAngC")));
if (conType == 0) {
baseRealDataSet.setV1AngA(FloatUtils.get2Float(map.get("Pq_FundUAngA")));
baseRealDataSet.setV1AngB(FloatUtils.get2Float(map.get("Pq_FundUAngB")));
baseRealDataSet.setV1AngC(FloatUtils.get2Float(map.get("Pq_FundUAngC")));
} else {
baseRealDataSet.setV1AngA(FloatUtils.get2Float(map.get("Pq_FundLUAngAB")));
baseRealDataSet.setV1AngB(FloatUtils.get2Float(map.get("Pq_FundLUAngBC")));
baseRealDataSet.setV1AngC(FloatUtils.get2Float(map.get("Pq_FundLUAngCA")));
}
//基波电流相位
baseRealDataSet.setI1AngA(FloatUtils.get2Float(map.get("Pq_FundIAngA")));
baseRealDataSet.setI1AngB(FloatUtils.get2Float(map.get("Pq_FundIAngB")));
baseRealDataSet.setI1AngC(FloatUtils.get2Float(map.get("Pq_FundIAngC")));
//电压总谐波畸变率
baseRealDataSet.setVThdA(FloatUtils.get2Float(map.get("Pq_ThdUA")));
baseRealDataSet.setVThdB(FloatUtils.get2Float(map.get("Pq_ThdUB")));
baseRealDataSet.setVThdC(FloatUtils.get2Float(map.get("Pq_ThdUC")));
if (conType == 0) {
baseRealDataSet.setVThdA(FloatUtils.get2Float(map.get("Pq_ThdUA")));
baseRealDataSet.setVThdB(FloatUtils.get2Float(map.get("Pq_ThdUB")));
baseRealDataSet.setVThdC(FloatUtils.get2Float(map.get("Pq_ThdUC")));
} else {
baseRealDataSet.setVThdA(FloatUtils.get2Float(map.get("Pq_ThdLUAB")));
baseRealDataSet.setVThdB(FloatUtils.get2Float(map.get("Pq_ThdLUBC")));
baseRealDataSet.setVThdC(FloatUtils.get2Float(map.get("Pq_ThdLUCA")));
}
//电流总谐波畸变率
baseRealDataSet.setIThdA(FloatUtils.get2Float(map.get("Pq_ThdIA")));
baseRealDataSet.setIThdB(FloatUtils.get2Float(map.get("Pq_ThdIB")));
@@ -281,10 +305,10 @@ public class RtServiceImpl implements IRtService {
baseRealDataSet.setPfC(FloatUtils.get2Float(map.get("Pq_PFC")));
baseRealDataSet.setPfTot(FloatUtils.get2Float(map.get("Pq_TotPFM")));
//基波功率因数
baseRealDataSet.setDpfA(FloatUtils.get2Float(map.get("Pq_DPFA")));
baseRealDataSet.setDpfB(FloatUtils.get2Float(map.get("Pq_DPFB")));
baseRealDataSet.setDpfC(FloatUtils.get2Float(map.get("Pq_DPFC")));
baseRealDataSet.setDpfTot(FloatUtils.get2Float(map.get("Pq_TotDPFM")));
baseRealDataSet.setDpfA(FloatUtils.get2Float(map.get("Pq_DFA")));
baseRealDataSet.setDpfB(FloatUtils.get2Float(map.get("Pq_DFB")));
baseRealDataSet.setDpfC(FloatUtils.get2Float(map.get("Pq_DFC")));
baseRealDataSet.setDpfTot(FloatUtils.get2Float(map.get("Pq_TotDFM")));
return baseRealDataSet;
}

View File

@@ -57,6 +57,11 @@ public class StatServiceImpl implements IStatService {
private final RedisUtil redisUtil;
private final ChannelObjectUtil channelObjectUtil;
private final CsLineLatestDataFeignClient csLineLatestDataFeignClient;
private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{
put("AB", "A");
put("BC", "B");
put("CA", "C");
}};
@Override
@Transactional(rollbackFor = Exception.class)
@@ -180,7 +185,7 @@ public class StatServiceImpl implements IStatService {
}
}
}
redisUtil.saveByKey(AppRedisKey.LINE_POSITION+id,map);
redisUtil.saveByKeyWithExpire(AppRedisKey.LINE_POSITION+id,map,30L);
}
/**
@@ -216,9 +221,12 @@ public class StatServiceImpl implements IStatService {
Map<String, String> tags = new HashMap<>();
tags.put(InfluxDBTableConstant.LINE_ID,lineId);
tags.put(InfluxDBTableConstant.PHASIC_TYPE,dataArrayList.get(i).getPhase());
//todo 不清楚之前为啥要修改相别,这边按字典配置相别无法查询到数据,先改回来
//tags.put(InfluxDBTableConstant.PHASIC_TYPE,Objects.isNull(PHASE_MAPPING.get(dataArrayList.get(i).getPhase()))?dataArrayList.get(i).getPhase():PHASE_MAPPING.get(dataArrayList.get(i).getPhase()));
tags.put(InfluxDBTableConstant.VALUE_TYPE,statMethod);
tags.put(InfluxDBTableConstant.CL_DID,clDid.toString());
tags.put(InfluxDBTableConstant.PROCESS,process.toString());
tags.put(InfluxDBTableConstant.QUALITY_FLAG,"0");
Map<String,Object> fields = new HashMap<>();
//这边特殊处理如果数据为3.14159则将数据置为null
fields.put(dataArrayList.get(i).getName(),Objects.equals(floats.get(i),3.14159f) ? null:floats.get(i));
@@ -243,5 +251,4 @@ public class StatServiceImpl implements IStatService {
}
return urlList;
}
}

View File

@@ -184,6 +184,6 @@ public class CsWaveAnalysisServiceImpl implements ICsWaveAnalysisService {
map.put(2,item.getLineId());
}
}
redisUtil.saveByKeyWithExpire(AppRedisKey.LINE_POSITION+id,map,600L);
redisUtil.saveByKeyWithExpire(AppRedisKey.LINE_POSITION+id,map,30L);
}
}

View File

@@ -265,7 +265,7 @@ public class EventServiceImpl implements IEventService {
po.setStartTime(LocalDateTime.parse(cldLogMessage.getTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
po.setTag(cldLogMessage.getLog());
po.setClDid(1);
po.setLevel(3);
po.setLevel(channelLevel(cldLogMessage.getGrade()));
po.setProcess(4);
po.setCode(cldLogMessage.getCode());
//前置告警
@@ -289,6 +289,29 @@ public class EventServiceImpl implements IEventService {
csEventService.save(po);
}
/**
* 处理告警等级
*/
public int channelLevel(String grade) {
int result;
switch (grade) {
case "DEBUG":
result = 4;
break;
case "WARN":
result = 6;
break;
case "ERROR":
result = 7;
break;
default:
result = 5;
break;
}
return result;
}
/**
* 处理电压
* @param vol
@@ -347,7 +370,7 @@ public class EventServiceImpl implements IEventService {
map.put(2,item.getLineId());
}
}
redisUtil.saveByKeyWithExpire(AppRedisKey.LINE_POSITION+id,map,600L);
redisUtil.saveByKeyWithExpire(AppRedisKey.LINE_POSITION+id,map,30L);
}
/**