Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3c369d0244 | |||
| c6f46cc319 |
@@ -49,4 +49,21 @@ public class MqttAccessSchedulerConfig {
|
|||||||
log.info("初始化MQTT接入信号量, 并发上限={}", concurrencyLimit);
|
log.info("初始化MQTT接入信号量, 并发上限={}", concurrencyLimit);
|
||||||
return new Semaphore(concurrencyLimit);
|
return new Semaphore(concurrencyLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MQTT消息异步处理线程池
|
||||||
|
* 用于将 @MqttSubscribe 回调中的重活(Feign调用、Kafka发送)异步化
|
||||||
|
* 避免阻塞Paho单线程回调,导致心跳消息排队延迟
|
||||||
|
*/
|
||||||
|
@Bean(destroyMethod = "shutdownNow")
|
||||||
|
public ExecutorService mqttMessageExecutor() {
|
||||||
|
return new ThreadPoolExecutor(
|
||||||
|
10, 20,
|
||||||
|
60L, TimeUnit.SECONDS,
|
||||||
|
new LinkedBlockingQueue<>(500),
|
||||||
|
r -> new Thread(r, "mqtt-msg-handler"),
|
||||||
|
new ThreadPoolExecutor.CallerRunsPolicy()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.njcn.access.config;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
|
||||||
|
import org.springframework.beans.BeansException;
|
||||||
|
import org.springframework.beans.factory.config.BeanPostProcessor;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class MqttOptionsFixer implements BeanPostProcessor {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
|
||||||
|
if (bean instanceof MqttConnectOptions) {
|
||||||
|
MqttConnectOptions options = (MqttConnectOptions) bean;
|
||||||
|
options.setMaxInflight(200);
|
||||||
|
}
|
||||||
|
return bean;
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -18,7 +18,7 @@ public class UpdateDevStatusTimer {
|
|||||||
|
|
||||||
private final ICsHeartService csHeartService;
|
private final ICsHeartService csHeartService;
|
||||||
|
|
||||||
@Scheduled(cron = "0 0/30 * * * ?")
|
@Scheduled(cron = "0 0/10 * * * ?")
|
||||||
public void timer() {
|
public void timer() {
|
||||||
csHeartService.updateDevStatus();
|
csHeartService.updateDevStatus();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ import com.njcn.system.pojo.param.CsWaveParam;
|
|||||||
import com.njcn.system.pojo.param.EleEpdPqdParam;
|
import com.njcn.system.pojo.param.EleEpdPqdParam;
|
||||||
import com.njcn.system.pojo.param.EleEvtParam;
|
import com.njcn.system.pojo.param.EleEvtParam;
|
||||||
import com.njcn.system.pojo.po.EleEpdPqd;
|
import com.njcn.system.pojo.po.EleEpdPqd;
|
||||||
|
import com.njcn.system.pojo.po.SysDicTreePO;
|
||||||
import com.njcn.system.pojo.vo.DictTreeVO;
|
import com.njcn.system.pojo.vo.DictTreeVO;
|
||||||
import com.njcn.web.utils.RequestUtil;
|
import com.njcn.web.utils.RequestUtil;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
@@ -125,7 +126,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
|
|||||||
//2.录入数据集、详细数据(主设备、模块、监测设备、便携式设备...)
|
//2.录入数据集、详细数据(主设备、模块、监测设备、便携式设备...)
|
||||||
analysisDataSet(templateDto,csDevModelPo.getId());
|
analysisDataSet(templateDto,csDevModelPo.getId());
|
||||||
//3.录入监测点模板表(记录当前模板有几个监测点,治理类型的模板目前规定1个监测点,电能质量模板根据逻辑子设备来)
|
//3.录入监测点模板表(记录当前模板有几个监测点,治理类型的模板目前规定1个监测点,电能质量模板根据逻辑子设备来)
|
||||||
addCsLineModel(templateDto,csDevModelPo.getId());
|
addCsLineModel(templateDto,csDevModelPo.getId(),devType);
|
||||||
//4.如果是云前置的模板录入,重新录入完需要将模板关系信息重新录入
|
//4.如果是云前置的模板录入,重新录入完需要将模板关系信息重新录入
|
||||||
if (Objects.equals(devType,DicDataEnum.DEV_CLD.getCode())) {
|
if (Objects.equals(devType,DicDataEnum.DEV_CLD.getCode())) {
|
||||||
List<CsEquipmentDeliveryPO> list = eequipmentFeignClient.getAll().getData();
|
List<CsEquipmentDeliveryPO> list = eequipmentFeignClient.getAll().getData();
|
||||||
@@ -1205,7 +1206,7 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
|
|||||||
/**
|
/**
|
||||||
* 根据模板文件来录入监测点模板
|
* 根据模板文件来录入监测点模板
|
||||||
*/
|
*/
|
||||||
private void addCsLineModel(TemplateDto templateDto,String pId) {
|
private void addCsLineModel(TemplateDto templateDto,String pId,String devType) {
|
||||||
List<CsLineModel> result = new ArrayList<>();
|
List<CsLineModel> result = new ArrayList<>();
|
||||||
//fixme 先用数据类型来区分模板的类型
|
//fixme 先用数据类型来区分模板的类型
|
||||||
if (templateDto.getDataList().contains("Apf") || templateDto.getDataList().contains("Dvr")){
|
if (templateDto.getDataList().contains("Apf") || templateDto.getDataList().contains("Dvr")){
|
||||||
@@ -1217,6 +1218,10 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
|
|||||||
result.add(csLineModel);
|
result.add(csLineModel);
|
||||||
} else {
|
} else {
|
||||||
List<ClDevDto> list = templateDto.getClDevDtoList();
|
List<ClDevDto> list = templateDto.getClDevDtoList();
|
||||||
|
//根据设备型号获取设备类型,根据设备类型生成监测点模板表数据
|
||||||
|
DictTreeVO vo1 = dictTreeFeignClient.queryByCode(devType).getData();
|
||||||
|
SysDicTreePO po1 = dictTreeFeignClient.queryById(vo1.getPid()).getData();
|
||||||
|
if (Objects.equals(po1.getCode(),"Direct_Connected_Device") || Objects.equals(po1.getCode(),"Portable")){
|
||||||
list.forEach(item->{
|
list.forEach(item->{
|
||||||
CsLineModel csLineModel = new CsLineModel();
|
CsLineModel csLineModel = new CsLineModel();
|
||||||
csLineModel.setLineId(IdUtil.fastSimpleUUID());
|
csLineModel.setLineId(IdUtil.fastSimpleUUID());
|
||||||
@@ -1227,9 +1232,22 @@ public class CsDevModelServiceImpl implements ICsDevModelService {
|
|||||||
} else if (Objects.equals(item.getClDid(),2) || Objects.equals(item.getLocation(), TypeEnum.LOAD.getCode())){
|
} else if (Objects.equals(item.getClDid(),2) || Objects.equals(item.getLocation(), TypeEnum.LOAD.getCode())){
|
||||||
csLineModel.setName("负载侧监测点");
|
csLineModel.setName("负载侧监测点");
|
||||||
csLineModel.setPosition(dicDataFeignClient.getDicDataByCode(DicDataEnum.LOAD_SIDE.getCode()).getData().getId());
|
csLineModel.setPosition(dicDataFeignClient.getDicDataByCode(DicDataEnum.LOAD_SIDE.getCode()).getData().getId());
|
||||||
|
} else {
|
||||||
|
csLineModel.setName("输出侧监测点");
|
||||||
|
csLineModel.setPosition(dicDataFeignClient.getDicDataByCode(DicDataEnum.OUTPUT_SIDE.getCode()).getData().getId());
|
||||||
}
|
}
|
||||||
result.add(csLineModel);
|
result.add(csLineModel);
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
list.forEach(item->{
|
||||||
|
CsLineModel csLineModel = new CsLineModel();
|
||||||
|
csLineModel.setLineId(IdUtil.fastSimpleUUID());
|
||||||
|
csLineModel.setPid(pId);
|
||||||
|
csLineModel.setName(item.getClDid() + "#监测点");
|
||||||
|
csLineModel.setPosition("");
|
||||||
|
result.add(csLineModel);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (CollectionUtil.isNotEmpty(result)){
|
if (CollectionUtil.isNotEmpty(result)){
|
||||||
csLineModelService.addList(result);
|
csLineModelService.addList(result);
|
||||||
|
|||||||
@@ -122,7 +122,8 @@ public class CsHeartServiceImpl implements ICsHeartService {
|
|||||||
csEquipmentDeliveryService.updateRunStatusBynDid(nDid, AccessEnum.OFFLINE.getCode());
|
csEquipmentDeliveryService.updateRunStatusBynDid(nDid, AccessEnum.OFFLINE.getCode());
|
||||||
//装置调整为注册状态
|
//装置调整为注册状态
|
||||||
csEquipmentDeliveryService.updateStatusBynDid(nDid,AccessEnum.REGISTERED.getCode(),null,null);
|
csEquipmentDeliveryService.updateStatusBynDid(nDid,AccessEnum.REGISTERED.getCode(),null,null);
|
||||||
sendMessage(nDid);
|
//设备离线通知关闭
|
||||||
|
//sendMessage(nDid);
|
||||||
//记录装置掉线时间
|
//记录装置掉线时间
|
||||||
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)));
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ public class HeartbeatServiceImpl implements IHeartbeatService {
|
|||||||
@Resource
|
@Resource
|
||||||
private RedisUtil redisUtil;
|
private RedisUtil redisUtil;
|
||||||
private static final String HEARTBEAT_REDIS_KEY_PREFIX = "HEARTBEAT:";
|
private static final String HEARTBEAT_REDIS_KEY_PREFIX = "HEARTBEAT:";
|
||||||
private static final int DELAY_LEVEL_4MIN = 7;
|
private static final int DELAY_LEVEL_3MIN = 7;
|
||||||
private static final long HEARTBEAT_EXPIRE_SECONDS = 180;
|
private static final long HEARTBEAT_EXPIRE_SECONDS = 180;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -29,14 +29,12 @@ public class HeartbeatServiceImpl implements IHeartbeatService {
|
|||||||
String redisKey = HEARTBEAT_REDIS_KEY_PREFIX + nDid;
|
String redisKey = HEARTBEAT_REDIS_KEY_PREFIX + nDid;
|
||||||
long currentTime = System.currentTimeMillis();
|
long currentTime = System.currentTimeMillis();
|
||||||
|
|
||||||
redisUtil.saveByKey(redisKey, currentTime);
|
redisUtil.saveByKeyWithExpire(redisKey, currentTime, HEARTBEAT_EXPIRE_SECONDS);
|
||||||
redisUtil.expire(redisKey, HEARTBEAT_EXPIRE_SECONDS);
|
|
||||||
|
|
||||||
HeartbeatTimeoutMessage message = new HeartbeatTimeoutMessage();
|
HeartbeatTimeoutMessage message = new HeartbeatTimeoutMessage();
|
||||||
|
|
||||||
message.setNDid(nDid);
|
message.setNDid(nDid);
|
||||||
message.setTimestamp(currentTime);
|
message.setTimestamp(currentTime);
|
||||||
message.setDelayLevel(DELAY_LEVEL_4MIN);
|
message.setDelayLevel(DELAY_LEVEL_3MIN);
|
||||||
heartbeatTimeoutMessageTemplate.sendMember(message);
|
heartbeatTimeoutMessageTemplate.sendMember(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -308,6 +308,9 @@ public class StatServiceImpl implements IStatService {
|
|||||||
tags.put(InfluxDBTableConstant.LINE_ID,lineId);
|
tags.put(InfluxDBTableConstant.LINE_ID,lineId);
|
||||||
tags.put(InfluxDBTableConstant.PHASIC_TYPE,dataArrayList.get(i).getPhase());
|
tags.put(InfluxDBTableConstant.PHASIC_TYPE,dataArrayList.get(i).getPhase());
|
||||||
tags.put(InfluxDBTableConstant.VALUE_TYPE,statMethod.toUpperCase());
|
tags.put(InfluxDBTableConstant.VALUE_TYPE,statMethod.toUpperCase());
|
||||||
|
tags.put(InfluxDBTableConstant.CL_DID,clDid.toString());
|
||||||
|
tags.put(InfluxDBTableConstant.PROCESS,process.toString());
|
||||||
|
|
||||||
if (Objects.isNull(item.getDataTag())) {
|
if (Objects.isNull(item.getDataTag())) {
|
||||||
tags.put(InfluxDBTableConstant.QUALITY_FLAG,"0");
|
tags.put(InfluxDBTableConstant.QUALITY_FLAG,"0");
|
||||||
} else {
|
} else {
|
||||||
@@ -320,8 +323,6 @@ public class StatServiceImpl implements IStatService {
|
|||||||
} else {
|
} else {
|
||||||
fields.put(dataArrayList.get(i).getInfluxDbName(),Objects.equals(floats.get(i),3.14159f) ? null:floats.get(i));
|
fields.put(dataArrayList.get(i).getInfluxDbName(),Objects.equals(floats.get(i),3.14159f) ? null:floats.get(i));
|
||||||
}
|
}
|
||||||
fields.put(InfluxDBTableConstant.CL_DID,clDid.toString());
|
|
||||||
fields.put(InfluxDBTableConstant.PROCESS,process.toString());
|
|
||||||
|
|
||||||
Point point = influxDbUtils.pointBuilder(tableName, adjustedTimeSec, TimeUnit.SECONDS, tags, fields);
|
Point point = influxDbUtils.pointBuilder(tableName, adjustedTimeSec, TimeUnit.SECONDS, tags, fields);
|
||||||
BatchPoints batchPoints = BatchPoints.database(influxDbUtils.getDbName()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build();
|
BatchPoints batchPoints = BatchPoints.database(influxDbUtils.getDbName()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build();
|
||||||
@@ -387,8 +388,8 @@ public class StatServiceImpl implements IStatService {
|
|||||||
data.forEach(item->{
|
data.forEach(item->{
|
||||||
DataArrayLiteDto dataArrayLiteDto = new DataArrayLiteDto();
|
DataArrayLiteDto dataArrayLiteDto = new DataArrayLiteDto();
|
||||||
dataArrayLiteDto.setName(item.getName());
|
dataArrayLiteDto.setName(item.getName());
|
||||||
dataArrayLiteDto.setInfluxDbName(item.getInfluxDbName());
|
|
||||||
dataArrayLiteDto.setPhase(item.getPhase());
|
dataArrayLiteDto.setPhase(item.getPhase());
|
||||||
|
dataArrayLiteDto.setInfluxDbName(item.getInfluxDbName());
|
||||||
result.add(dataArrayLiteDto);
|
result.add(dataArrayLiteDto);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import com.njcn.system.pojo.po.EleEpdPqd;
|
|||||||
import com.njcn.system.pojo.po.SysDicTreePO;
|
import com.njcn.system.pojo.po.SysDicTreePO;
|
||||||
import com.njcn.zlevent.mapper.CsEventMapper;
|
import com.njcn.zlevent.mapper.CsEventMapper;
|
||||||
import com.njcn.zlevent.pojo.po.CsEventLogs;
|
import com.njcn.zlevent.pojo.po.CsEventLogs;
|
||||||
//import com.njcn.zlevent.service.AppNotificationService;
|
|
||||||
import com.njcn.zlevent.service.ICsAlarmService;
|
import com.njcn.zlevent.service.ICsAlarmService;
|
||||||
import com.njcn.zlevent.service.ICsEventLogsService;
|
import com.njcn.zlevent.service.ICsEventLogsService;
|
||||||
import com.njcn.zlevent.service.ICsEventService;
|
import com.njcn.zlevent.service.ICsEventService;
|
||||||
@@ -138,11 +137,9 @@ public class CsAlarmServiceImpl extends ServiceImpl<CsEventMapper, CsEventPO> im
|
|||||||
if (Objects.isNull(item.getCode())){
|
if (Objects.isNull(item.getCode())){
|
||||||
msgSendParam.setEventName(item.getName());
|
msgSendParam.setEventName(item.getName());
|
||||||
msgSendFeignClient.appMsgSend(msgSendParam);
|
msgSendFeignClient.appMsgSend(msgSendParam);
|
||||||
// appNotificationService.sendAppNotification(2,item.getType(),po.getId(),item.getName(),eventTime,id,po.getNdid(),null,null,null);
|
|
||||||
} else {
|
} else {
|
||||||
msgSendParam.setEventName(item.getCode());
|
msgSendParam.setEventName(item.getCode());
|
||||||
msgSendFeignClient.appMsgSend(msgSendParam);
|
msgSendFeignClient.appMsgSend(msgSendParam);
|
||||||
// appNotificationService.sendAppNotification(2,item.getType(),po.getId(),item.getCode(),eventTime,id,po.getNdid(),null, null,null);
|
|
||||||
//更新字典信息
|
//更新字典信息
|
||||||
EleEpdPqd eleEpdPqd = epdFeignClient.findByName(item.getName()).getData();
|
EleEpdPqd eleEpdPqd = epdFeignClient.findByName(item.getName()).getData();
|
||||||
EleEpdPqdParam.EleEpdPqdUpdateParam updateParam = new EleEpdPqdParam.EleEpdPqdUpdateParam();
|
EleEpdPqdParam.EleEpdPqdUpdateParam updateParam = new EleEpdPqdParam.EleEpdPqdUpdateParam();
|
||||||
|
|||||||
@@ -247,6 +247,7 @@ public class EventServiceImpl implements IEventService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Objects.equals(item.getType(),"2")){
|
||||||
MsgSendParam msgSendParam = new MsgSendParam();
|
MsgSendParam msgSendParam = new MsgSendParam();
|
||||||
msgSendParam.setEventType(1);
|
msgSendParam.setEventType(1);
|
||||||
msgSendParam.setType("2");
|
msgSendParam.setType("2");
|
||||||
@@ -259,6 +260,7 @@ public class EventServiceImpl implements IEventService {
|
|||||||
msgSendParam.setPersistTime(persistTime);
|
msgSendParam.setPersistTime(persistTime);
|
||||||
msgSendParam.setDropZone(dropZone);
|
msgSendParam.setDropZone(dropZone);
|
||||||
msgSendFeignClient.appMsgSend(msgSendParam);
|
msgSendFeignClient.appMsgSend(msgSendParam);
|
||||||
|
}
|
||||||
//如果是暂降事件,则异步发送短信
|
//如果是暂降事件,则异步发送短信
|
||||||
if (Objects.equals(item.getName(), "Evt_Sys_DipStr")) {
|
if (Objects.equals(item.getName(), "Evt_Sys_DipStr")) {
|
||||||
MsgSendParam msgSendParam2 = new MsgSendParam();
|
MsgSendParam msgSendParam2 = new MsgSendParam();
|
||||||
@@ -312,7 +314,9 @@ public class EventServiceImpl implements IEventService {
|
|||||||
rmpEventDetailPo.setDealFlag(0);
|
rmpEventDetailPo.setDealFlag(0);
|
||||||
rmpEventDetailPo.setFileFlag(0);
|
rmpEventDetailPo.setFileFlag(0);
|
||||||
rmpEventDetailPo.setPhase(item.getPhase());
|
rmpEventDetailPo.setPhase(item.getPhase());
|
||||||
|
if (!Objects.isNull(item.getSagSource())) {
|
||||||
rmpEventDetailPo.setSagsource(getSagSource(item.getSagSource()));
|
rmpEventDetailPo.setSagsource(getSagSource(item.getSagSource()));
|
||||||
|
}
|
||||||
rmpEventDetailPo.setSeverity(item.getSeverity());
|
rmpEventDetailPo.setSeverity(item.getSeverity());
|
||||||
wlRmpEventDetailMapper.insert(rmpEventDetailPo);
|
wlRmpEventDetailMapper.insert(rmpEventDetailPo);
|
||||||
}
|
}
|
||||||
@@ -427,6 +431,7 @@ public class EventServiceImpl implements IEventService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void getCldEventData(CldLogMessage cldLogMessage) {
|
public void getCldEventData(CldLogMessage cldLogMessage) {
|
||||||
|
log.info("数据报文=====:" + cldLogMessage);
|
||||||
CsEventPO po = new CsEventPO();
|
CsEventPO po = new CsEventPO();
|
||||||
po.setStartTime(LocalDateTime.parse(cldLogMessage.getTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
po.setStartTime(LocalDateTime.parse(cldLogMessage.getTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
||||||
po.setTag(cldLogMessage.getLog());
|
po.setTag(cldLogMessage.getLog());
|
||||||
|
|||||||
Reference in New Issue
Block a user