验收3-设备保护告警同步本地

This commit is contained in:
2025-11-13 00:02:47 +08:00
parent f1e819ba2b
commit 38ade0c2ed
13 changed files with 960 additions and 62 deletions

View File

@ -0,0 +1,158 @@
package com.xzzn.ems.domain;
import com.xzzn.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.xzzn.common.annotation.Excel;
/**
* MQTT云上本地同步日志对象 mqtt_sync_log
*
* @author xzzn
* @date 2025-11-12
*/
public class MqttSyncLog extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键 */
private Long id;
/** 同步消息唯一标识与消息中的syncId一致 */
@Excel(name = "同步消息唯一标识", readConverterExp = "与=消息中的syncId一致")
private String syncId;
/** MQTT主题 */
@Excel(name = "MQTT主题")
private String topic;
/** 操作类型INSERT/UPDATE/DELETE */
@Excel(name = "操作类型INSERT/UPDATE/DELETE")
private String operateType;
/** 涉及的表名 */
@Excel(name = "涉及的表名")
private String tableName;
/** 同步数据内容JSON格式 */
@Excel(name = "同步数据内容", readConverterExp = "J=SON格式")
private String content;
/** 处理状态SUCCESS/FAIL */
@Excel(name = "处理状态SUCCESS/FAIL")
private String status;
/** 失败原因status=FAIL时填写 */
@Excel(name = "失败原因", readConverterExp = "s=tatus=FAIL时填写")
private String errorMsg;
/** 同步目标 */
@Excel(name = "同步目标")
private String target;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setSyncId(String syncId)
{
this.syncId = syncId;
}
public String getSyncId()
{
return syncId;
}
public void setTopic(String topic)
{
this.topic = topic;
}
public String getTopic()
{
return topic;
}
public void setOperateType(String operateType)
{
this.operateType = operateType;
}
public String getOperateType()
{
return operateType;
}
public void setTableName(String tableName)
{
this.tableName = tableName;
}
public String getTableName()
{
return tableName;
}
public void setContent(String content)
{
this.content = content;
}
public String getContent()
{
return content;
}
public void setStatus(String status)
{
this.status = status;
}
public String getStatus()
{
return status;
}
public void setErrorMsg(String errorMsg)
{
this.errorMsg = errorMsg;
}
public String getErrorMsg()
{
return errorMsg;
}
public void setTarget(String target)
{
this.target = target;
}
public String getTarget()
{
return target;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("syncId", getSyncId())
.append("topic", getTopic())
.append("operateType", getOperateType())
.append("tableName", getTableName())
.append("content", getContent())
.append("status", getStatus())
.append("errorMsg", getErrorMsg())
.append("target", getTarget())
.append("createTime", getCreateTime())
.toString();
}
}

View File

@ -2,6 +2,7 @@ package com.xzzn.ems.mapper;
import java.util.List;
import com.xzzn.ems.domain.EmsFaultProtectionPlan;
import org.apache.ibatis.annotations.Param;
/**
* 故障告警保护方案Mapper接口
@ -58,4 +59,9 @@ public interface EmsFaultProtectionPlanMapper
* @return 结果
*/
public int deleteEmsFaultProtectionPlanByIds(Long[] ids);
// 根据站点+faultName+faultLevel 同步删除
public void deleteEmsFaultProtectionPlan(@Param("siteId")String siteId,
@Param("faultName")String faultName,
@Param("faultLevel")Integer faultLevel);
}

View File

@ -0,0 +1,63 @@
package com.xzzn.ems.mapper;
import java.util.List;
import com.xzzn.ems.domain.MqttSyncLog;
/**
* MQTT云上本地同步日志Mapper接口
*
* @author xzzn
* @date 2025-11-12
*/
public interface MqttSyncLogMapper
{
/**
* 查询MQTT云上本地同步日志
*
* @param id MQTT云上本地同步日志主键
* @return MQTT云上本地同步日志
*/
public MqttSyncLog selectMqttSyncLogById(Long id);
/**
* 查询MQTT云上本地同步日志列表
*
* @param mqttSyncLog MQTT云上本地同步日志
* @return MQTT云上本地同步日志集合
*/
public List<MqttSyncLog> selectMqttSyncLogList(MqttSyncLog mqttSyncLog);
/**
* 新增MQTT云上本地同步日志
*
* @param mqttSyncLog MQTT云上本地同步日志
* @return 结果
*/
public int insertMqttSyncLog(MqttSyncLog mqttSyncLog);
/**
* 修改MQTT云上本地同步日志
*
* @param mqttSyncLog MQTT云上本地同步日志
* @return 结果
*/
public int updateMqttSyncLog(MqttSyncLog mqttSyncLog);
/**
* 删除MQTT云上本地同步日志
*
* @param id MQTT云上本地同步日志主键
* @return 结果
*/
public int deleteMqttSyncLogById(Long id);
/**
* 批量删除MQTT云上本地同步日志
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteMqttSyncLogByIds(Long[] ids);
public MqttSyncLog selectMqttSyncLogBySyncId(String syncId);
}

View File

@ -58,4 +58,7 @@ public interface IEmsFaultProtectionPlanService
* @return 结果
*/
public int deleteEmsFaultProtectionPlanById(Long id);
// 处理云上同步设备保护告警信息
public void dealSyncData(String content, String operateType);
}

View File

@ -0,0 +1,66 @@
package com.xzzn.ems.service;
import java.util.List;
import com.xzzn.ems.domain.MqttSyncLog;
/**
* MQTT云上本地同步日志Service接口
*
* @author xzzn
* @date 2025-11-12
*/
public interface IMqttSyncLogService
{
/**
* 查询MQTT云上本地同步日志
*
* @param id MQTT云上本地同步日志主键
* @return MQTT云上本地同步日志
*/
public MqttSyncLog selectMqttSyncLogById(Long id);
/**
* 查询MQTT云上本地同步日志列表
*
* @param mqttSyncLog MQTT云上本地同步日志
* @return MQTT云上本地同步日志集合
*/
public List<MqttSyncLog> selectMqttSyncLogList(MqttSyncLog mqttSyncLog);
/**
* 新增MQTT云上本地同步日志
*
* @param mqttSyncLog MQTT云上本地同步日志
* @return 结果
*/
public int insertMqttSyncLog(MqttSyncLog mqttSyncLog);
/**
* 修改MQTT云上本地同步日志
*
* @param mqttSyncLog MQTT云上本地同步日志
* @return 结果
*/
public int updateMqttSyncLog(MqttSyncLog mqttSyncLog);
/**
* 批量删除MQTT云上本地同步日志
*
* @param ids 需要删除的MQTT云上本地同步日志主键集合
* @return 结果
*/
public int deleteMqttSyncLogByIds(Long[] ids);
/**
* 删除MQTT云上本地同步日志信息
*
* @param id MQTT云上本地同步日志主键
* @return 结果
*/
public int deleteMqttSyncLogById(Long id);
// 处理策略信息
public void handleMqttStrategyData(String payload);
// 处理设备告警保护信息
public void handleMqttPlanData(MqttSyncLog planLog);
}

View File

@ -1,7 +1,13 @@
package com.xzzn.ems.service.impl;
import java.util.List;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.domain.EmsStrategyRunning;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xzzn.ems.mapper.EmsFaultProtectionPlanMapper;
@ -93,4 +99,44 @@ public class EmsFaultProtectionPlanServiceImpl implements IEmsFaultProtectionPla
{
return emsFaultProtectionPlanMapper.deleteEmsFaultProtectionPlanById(id);
}
@Override
public void dealSyncData(String content, String operateType) {
if (StringUtils.isEmpty(content)) {
return;
}
EmsFaultProtectionPlan faultProtectionPlan = JSON.parseObject(content, EmsFaultProtectionPlan.class);
switch(operateType) {
case "INSERT":
insertEmsFaultProtectionPlan(faultProtectionPlan);
break;
case "UPDATE":
updateEmsFaultProtectionPlan(faultProtectionPlan);
break;
case "DELETE":
// 根据站点+faultName+faultLevel 删除
String siteId = faultProtectionPlan.getSiteId();
String faultName = faultProtectionPlan.getFaultName();
Integer faultLevel = faultProtectionPlan.getFaultLevel();
emsFaultProtectionPlanMapper.deleteEmsFaultProtectionPlan(siteId, faultName, faultLevel);
break;
default:
break;
}
}
private static Long[] convertJsonToLongArray(String json) {
// 解析 JSON 为 JSONObject
JSONObject jsonObject = JSON.parseObject(json);
// 获取 "id" 对应的 JSONArray
JSONArray idArray = jsonObject.getJSONArray("id");
if (idArray == null) {
return new Long[0]; // 数组不存在时返回空数组
}
// 转换为 Long 数组
return idArray.toArray(new Long[0]);
}
}

View File

@ -71,10 +71,32 @@ public class EmsStrategyServiceImpl implements IEmsStrategyService
if (StringUtils.isEmpty(content)) {
return;
}
// switch (operateType) {
// case "INSERT":
// EmsStrategyRunning emsStrategyRunning = JSON.parseObject(content, EmsStrategyRunning.class);
// emsStrategyRunningMapper.insertEmsStrategyRunning(emsStrategyRunning);
// }
EmsStrategyRunning emsStrategyRunning = JSON.parseObject(content, EmsStrategyRunning.class);
switch (operateType) {
case "INSERT":
emsStrategyRunningMapper.insertEmsStrategyRunning(emsStrategyRunning);
break;
case "STOP":
Long id = emsStrategyRunning.getId();
emsStrategyRunningMapper.stopEmsStrategyRunning(id);
break;
case "UPDATE":
String siteId = emsStrategyRunning.getSiteId();
Long mainId = emsStrategyRunning.getMainStrategyId();
Long auxId = emsStrategyRunning.getAuxiliaryStrategyId();
EmsStrategyRunning existStrategy = emsStrategyRunningMapper.getRunningStrategy(siteId);
if (existStrategy != null) { // 存在正在运行的则更新
existStrategy.setMainStrategyId(mainId);
existStrategy.setAuxiliaryStrategyId(auxId);
emsStrategyRunningMapper.updateEmsStrategyRunning(emsStrategyRunning);
} else { // 不存在着插入
emsStrategyRunning.setCreateTime(DateUtils.getNowDate());
emsStrategyRunningMapper.insertEmsStrategyRunning(emsStrategyRunning);
}
break;
default:
// 未知操作类型-不同步
break;
}
}
}

View File

@ -0,0 +1,150 @@
package com.xzzn.ems.service.impl;
import java.util.List;
import com.alibaba.fastjson2.JSON;
import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.service.IEmsFaultProtectionPlanService;
import com.xzzn.ems.service.IEmsStrategyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xzzn.ems.mapper.MqttSyncLogMapper;
import com.xzzn.ems.domain.MqttSyncLog;
import com.xzzn.ems.service.IMqttSyncLogService;
/**
* MQTT云上本地同步日志Service业务层处理
*
* @author xzzn
* @date 2025-11-12
*/
@Service
public class MqttSyncLogServiceImpl implements IMqttSyncLogService
{
@Autowired
private MqttSyncLogMapper mqttSyncLogMapper;
@Autowired
private IEmsFaultProtectionPlanService emsFaultProtectionPlanService;
@Autowired
private IEmsStrategyService emsStrategyService;
/**
* 查询MQTT云上本地同步日志
*
* @param id MQTT云上本地同步日志主键
* @return MQTT云上本地同步日志
*/
@Override
public MqttSyncLog selectMqttSyncLogById(Long id)
{
return mqttSyncLogMapper.selectMqttSyncLogById(id);
}
/**
* 查询MQTT云上本地同步日志列表
*
* @param mqttSyncLog MQTT云上本地同步日志
* @return MQTT云上本地同步日志
*/
@Override
public List<MqttSyncLog> selectMqttSyncLogList(MqttSyncLog mqttSyncLog)
{
return mqttSyncLogMapper.selectMqttSyncLogList(mqttSyncLog);
}
/**
* 新增MQTT云上本地同步日志
*
* @param mqttSyncLog MQTT云上本地同步日志
* @return 结果
*/
@Override
public int insertMqttSyncLog(MqttSyncLog mqttSyncLog)
{
mqttSyncLog.setCreateTime(DateUtils.getNowDate());
return mqttSyncLogMapper.insertMqttSyncLog(mqttSyncLog);
}
/**
* 修改MQTT云上本地同步日志
*
* @param mqttSyncLog MQTT云上本地同步日志
* @return 结果
*/
@Override
public int updateMqttSyncLog(MqttSyncLog mqttSyncLog)
{
return mqttSyncLogMapper.updateMqttSyncLog(mqttSyncLog);
}
/**
* 批量删除MQTT云上本地同步日志
*
* @param ids 需要删除的MQTT云上本地同步日志主键
* @return 结果
*/
@Override
public int deleteMqttSyncLogByIds(Long[] ids)
{
return mqttSyncLogMapper.deleteMqttSyncLogByIds(ids);
}
/**
* 删除MQTT云上本地同步日志信息
*
* @param id MQTT云上本地同步日志主键
* @return 结果
*/
@Override
public int deleteMqttSyncLogById(Long id)
{
return mqttSyncLogMapper.deleteMqttSyncLogById(id);
}
/**
* 处理云上运行策略数据
* @param payload
*/
@Override
public void handleMqttStrategyData(String payload) {
MqttSyncLog syncLog = JSON.parseObject(payload, MqttSyncLog.class);
if (syncLog != null) {
// 校验是否存在
String syncId = syncLog.getSyncId();
MqttSyncLog existLog = mqttSyncLogMapper.selectMqttSyncLogBySyncId(syncId);
if (existLog == null) {
// 根据不同操作更新
String operateType = syncLog.getOperateType();
if (!StringUtils.isEmpty(operateType)) {
emsStrategyService.dealStrategyData(syncLog.getContent(),operateType);
}
}
// 保存日志
insertMqttSyncLog(syncLog);
}
}
/**
* 处理云上同步的告警保护信息
* @param planLog
*/
@Override
public void handleMqttPlanData(MqttSyncLog planLog) {
// 校验是否存在
String syncId = planLog.getSyncId();
MqttSyncLog existLog = mqttSyncLogMapper.selectMqttSyncLogBySyncId(syncId);
if (existLog != null) {
return;
}
// 保存日志
insertMqttSyncLog(planLog);
// 处理数据
String operateType = planLog.getOperateType();
if (!StringUtils.isEmpty(operateType)) {
emsFaultProtectionPlanService.dealSyncData(planLog.getContent(),operateType);
}
}
}