diff --git a/ems-framework/src/main/java/com/xzzn/framework/aspectj/FaultPlanAlarmAspect.java b/ems-framework/src/main/java/com/xzzn/framework/aspectj/FaultPlanAlarmAspect.java new file mode 100644 index 0000000..f7096c7 --- /dev/null +++ b/ems-framework/src/main/java/com/xzzn/framework/aspectj/FaultPlanAlarmAspect.java @@ -0,0 +1,104 @@ +package com.xzzn.framework.aspectj; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.xzzn.common.utils.StringUtils; +import com.xzzn.ems.domain.EmsAlarmRecords; +import com.xzzn.ems.domain.MqttSyncLog; +import com.xzzn.ems.mapper.EmsMqttTopicConfigMapper; +import com.xzzn.ems.mapper.MqttSyncLogMapper; +import com.xzzn.framework.web.service.MqttPublisher; +import org.apache.juli.logging.Log; +import org.apache.juli.logging.LogFactory; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.UUID; + +/** + * 本地保护告警信息同步云端 + * 本地 - 云端 + * @author xzzn + */ +@Aspect +@Component +public class FaultPlanAlarmAspect +{ + + private static final Log logger = LogFactory.getLog(FaultPlanAlarmAspect.class); + + private static final ObjectMapper objectMapper = new ObjectMapper(); + @Autowired + private MqttSyncLogMapper mqttSyncLogMapper; + @Autowired + private MqttPublisher mqttPublisher; + @Autowired + private EmsMqttTopicConfigMapper emsMqttTopicConfigMapper; + + private static final String MQTT_TOPIC = "FAULT_ALARM_RECORD_UP"; + private static final String TABLE_NAME = "ems_alarm_records"; + // 切入点:拦截所有添加了@SyncAfterInsert注解的方法 + @Pointcut("@annotation(com.xzzn.common.annotation.SyncAfterInsert)") + public void syncInsertPointcut() {} + + // 方法执行成功后同步数据 + @AfterReturning(pointcut = "syncInsertPointcut()", returning = "result") + public void afterInsert(JoinPoint joinPoint, Integer result) { + logger.info("【新增保护策略告警数据切面进入成功】"); + if (result == 0) { + return; + } + // 校验是否配置监听topic-监听则不发布 + String topic = emsMqttTopicConfigMapper.checkTopicIsExist(MQTT_TOPIC); + if (!StringUtils.isEmpty(topic)) { + return; + } + + // 获取参数中的EmsAlarmRecords对象 + Object[] args = joinPoint.getArgs(); + EmsAlarmRecords alarmRecords = null; + for (Object arg : args) { + if (arg instanceof EmsAlarmRecords) { + alarmRecords = (EmsAlarmRecords) arg; + break; + } + } + if (alarmRecords == null) { + return; + } + + // 构建日志同步消息 + MqttSyncLog message = createMessageObject("INSERT", alarmRecords.getSiteId()); + try { + // 同步内容 + String content = objectMapper.writeValueAsString(alarmRecords); + message.setContent(content); + + // 发布到MQTT主题-同步到云端 + mqttPublisher.publish(MQTT_TOPIC, objectMapper.writeValueAsString(message), 1); + } catch (Exception e) { + message.setStatus("FAIL"); + message.setErrorMsg(e.getMessage()); + } + // 存储同步信息 + mqttSyncLogMapper.insertMqttSyncLog(message); + } + + // 构建同步信息 + private MqttSyncLog createMessageObject(String operateType, String siteId) { + MqttSyncLog message = new MqttSyncLog(); + message.setSyncId(UUID.randomUUID().toString()); + message.setOperateType(operateType); + message.setTableName(TABLE_NAME); + message.setCreateTime(new Date()); + message.setTopic(MQTT_TOPIC); + message.setStatus("SUCCESS"); + message.setSyncObject(siteId); + message.setTarget("CLOUD"); + return message; + } +} diff --git a/ems-framework/src/main/java/com/xzzn/framework/aspectj/FaultPlanIssueAspect.java b/ems-framework/src/main/java/com/xzzn/framework/aspectj/FaultPlanIssueAspect.java new file mode 100644 index 0000000..c23842f --- /dev/null +++ b/ems-framework/src/main/java/com/xzzn/framework/aspectj/FaultPlanIssueAspect.java @@ -0,0 +1,98 @@ +package com.xzzn.framework.aspectj; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.xzzn.common.utils.StringUtils; +import com.xzzn.ems.domain.EmsFaultIssueLog; +import com.xzzn.ems.domain.MqttSyncLog; +import com.xzzn.ems.mapper.EmsMqttTopicConfigMapper; +import com.xzzn.ems.mapper.MqttSyncLogMapper; +import com.xzzn.framework.web.service.MqttPublisher; +import org.apache.juli.logging.Log; +import org.apache.juli.logging.LogFactory; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +/** + * 保护告警方案下发日志同步 + * 本地 - 云端 + */ +@Aspect +@Component +public class FaultPlanIssueAspect { + + private static final Log logger = LogFactory.getLog(FaultPlanIssueAspect.class); + @Autowired + private MqttPublisher mqttPublisher; + + private static final ObjectMapper objectMapper = new ObjectMapper(); + private static final String MQTT_TOPIC = "FAULT_PLAN_ISSUE_UP"; + private static final String TABLE_NAME = "ems_fault_issue_log"; + @Autowired + private EmsMqttTopicConfigMapper emsMqttTopicConfigMapper; + @Autowired + private MqttSyncLogMapper mqttSyncLogMapper; + + // 定义切点:拦截策略相关表的Mapper方法 + @Pointcut("(execution(* com.xzzn.ems.mapper.EmsFaultIssueLogMapper.insertEmsFaultIssueLog(..)) && args(insertEntity)) ") + public void insertPointCut(EmsFaultIssueLog insertEntity) { + logger.info("【新增保护告警策略下发数据】FaultPlanIssueAspect 实例化"); + } + + // 方法执行成功后发布同步消息 + @AfterReturning(pointcut = "insertPointCut(insertEntity)", returning = "result") + public void afterInsert(JoinPoint joinPoint, EmsFaultIssueLog insertEntity, Integer result) { + logger.info("【新增保护告警策略下发数据切面进入成功】"); + if (result == 0 || insertEntity == null) { + return; + } + // 校验是否配置监听topic-监听则不发布 + String topic = emsMqttTopicConfigMapper.checkTopicIsExist(MQTT_TOPIC); + if (!StringUtils.isEmpty(topic)) { + return; + } + + // 解析方法名,获取操作类型(INSERT/UPDATE/DELETE)和表名 + String operateType = "INSERT"; + String siteId = insertEntity.getSiteId(); + + // 构建日志同步消息 + MqttSyncLog message = createMessageObject(operateType,siteId); + + try { + // 数据转换 + String content = objectMapper.writeValueAsString(insertEntity); + message.setContent(content); + + // mqtt同步到云端 + mqttPublisher.publish(MQTT_TOPIC, objectMapper.writeValueAsString(message), 1); + } catch (Exception e) { + message.setStatus("FAIL"); + message.setErrorMsg(e.getMessage()); + } + // 存储同步信息 + mqttSyncLogMapper.insertMqttSyncLog(message); + } + + // 构建同步信息 + private MqttSyncLog createMessageObject(String operateType, String siteId) { + MqttSyncLog message = new MqttSyncLog(); + message.setSyncId(UUID.randomUUID().toString()); + message.setOperateType(operateType); + message.setTableName(TABLE_NAME); + message.setCreateTime(new Date()); + message.setTopic(MQTT_TOPIC); + message.setStatus("SUCCESS"); + message.setSyncObject(siteId); + message.setTarget("CLOUD"); + return message; + } +} \ No newline at end of file diff --git a/ems-quartz/src/main/java/com/xzzn/quartz/task/ProtectionPlanTask.java b/ems-quartz/src/main/java/com/xzzn/quartz/task/ProtectionPlanTask.java index b3f74bf..a809cae 100644 --- a/ems-quartz/src/main/java/com/xzzn/quartz/task/ProtectionPlanTask.java +++ b/ems-quartz/src/main/java/com/xzzn/quartz/task/ProtectionPlanTask.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import com.xzzn.common.annotation.SyncAfterInsert; import com.xzzn.common.constant.RedisKeyConstants; import com.xzzn.common.core.redis.RedisCache; import com.xzzn.common.enums.AlarmLevelStatus; @@ -11,16 +12,10 @@ import com.xzzn.common.enums.AlarmStatus; import com.xzzn.common.enums.ProtPlanStatus; import com.xzzn.common.enums.StrategyStatus; import com.xzzn.common.utils.StringUtils; -import com.xzzn.ems.domain.EmsAlarmRecords; -import com.xzzn.ems.domain.EmsDevicesSetting; -import com.xzzn.ems.domain.EmsFaultProtectionPlan; -import com.xzzn.ems.domain.EmsStrategyRunning; +import com.xzzn.ems.domain.*; import com.xzzn.ems.domain.vo.ProtectionPlanVo; import com.xzzn.ems.domain.vo.ProtectionSettingVo; -import com.xzzn.ems.mapper.EmsAlarmRecordsMapper; -import com.xzzn.ems.mapper.EmsDevicesSettingMapper; -import com.xzzn.ems.mapper.EmsFaultProtectionPlanMapper; -import com.xzzn.ems.mapper.EmsStrategyRunningMapper; +import com.xzzn.ems.mapper.*; import com.xzzn.ems.service.IEmsFaultProtectionPlanService; import com.xzzn.framework.manager.ModbusConnectionManager; import com.xzzn.framework.manager.ModbusConnectionWrapper; @@ -33,10 +28,7 @@ import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; @@ -70,6 +62,8 @@ public class ProtectionPlanTask { private ModbusConnectionManager connectionManager; @Autowired private ModbusService modbusService; + @Autowired + private EmsFaultIssueLogMapper emsFaultIssueLogMapper; public ProtectionPlanTask(IEmsFaultProtectionPlanService iEmsFaultProtectionPlanService) { this.iEmsFaultProtectionPlanService = iEmsFaultProtectionPlanService; @@ -110,6 +104,8 @@ public class ProtectionPlanTask { } // 处理告警保护方案-返回触发下发方案时是否最高等级 + // 需要同步云端 + @SyncAfterInsert private boolean dealWithProtectionPlan(EmsFaultProtectionPlan plan, List protSettings) { boolean isHighLevel = false; @@ -140,7 +136,7 @@ public class ProtectionPlanTask { String protPlanJson = plan.getProtectionPlan(); if (protPlanJson != null && !protPlanJson.isEmpty()) { logger.info("<下发保护方案> 方案内容:{}", protPlanJson); - //executeProtectionActions(protPlanJson,siteId,plan.getId()); // 执行Modbus指令 + executeProtectionActions(protPlanJson,siteId,plan.getId(),plan.getFaultLevel()); // 执行Modbus指令 } // 更新方案状态为“已启用” @@ -181,7 +177,7 @@ public class ProtectionPlanTask { } // 下发保护方案 - private void executeProtectionActions(String protPlanJson, String siteId, Long planId){ + private void executeProtectionActions(String protPlanJson, String siteId, Long planId, Integer faultLevel){ final List protPlanList; try { protPlanList = objectMapper.readValue( @@ -197,6 +193,10 @@ public class ProtectionPlanTask { if (StringUtils.isEmpty(plan.getDeviceId()) || StringUtils.isEmpty(plan.getPoint())) { return; } + // 给设备发送指令记录日志,并同步云端 + EmsFaultIssueLog faultIssueLog = createLogEntity(plan,siteId); + faultIssueLog.setLogLevel(faultLevel); + emsFaultIssueLogMapper.insertEmsFaultIssueLog(faultIssueLog); // 通过modbus连接设备,发送数据 executeSinglePlan(plan,siteId); @@ -208,6 +208,19 @@ public class ProtectionPlanTask { } } + private EmsFaultIssueLog createLogEntity(ProtectionPlanVo plan,String siteId) { + EmsFaultIssueLog faultIssueLog = new EmsFaultIssueLog(); + faultIssueLog.setLogId(UUID.randomUUID().toString()); + faultIssueLog.setLogTime(new Date()); + faultIssueLog.setSiteId(siteId); + faultIssueLog.setDeviceId(plan.getDeviceId()); + faultIssueLog.setPoint(plan.getPoint()); + faultIssueLog.setValue(plan.getValue()); + faultIssueLog.setCreateBy("sys"); + faultIssueLog.setCreateTime(new Date()); + return faultIssueLog; + } + private void executeSinglePlan(ProtectionPlanVo plan, String siteId) throws Exception { String deviceId = plan.getDeviceId(); // 获取设备地址信息 diff --git a/ems-system/src/main/java/com/xzzn/ems/domain/EmsFaultIssueLog.java b/ems-system/src/main/java/com/xzzn/ems/domain/EmsFaultIssueLog.java new file mode 100644 index 0000000..5e1b042 --- /dev/null +++ b/ems-system/src/main/java/com/xzzn/ems/domain/EmsFaultIssueLog.java @@ -0,0 +1,150 @@ +package com.xzzn.ems.domain; + +import java.math.BigDecimal; +import java.util.Date; + +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; + +/** + * 告警保护方案下发日志对象 ems_fault_issue_log + * + * @author xzzn + * @date 2025-11-15 + */ +public class EmsFaultIssueLog extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 日志ID(UUID) */ + @Excel(name = "日志ID", readConverterExp = "U=UID") + private String logId; + + /** 日志时间(精确到秒) */ + @Excel(name = "日志时间", readConverterExp = "精=确到秒") + private Date logTime; + + /** 日志等级(同方案等级1/2/3等) */ + @Excel(name = "日志等级", readConverterExp = "同=方案等级1/2/3等") + private Integer logLevel; + + /** 站点名称/编号 */ + @Excel(name = "站点名称/编号") + private String siteId; + + /** 设备ID */ + @Excel(name = "设备ID") + private String deviceId; + + /** 操作点位 */ + @Excel(name = "操作点位") + private String point; + + /** 设置数据 */ + @Excel(name = "设置数据") + private BigDecimal value; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + + public void setLogId(String logId) + { + this.logId = logId; + } + + public String getLogId() + { + return logId; + } + + public void setLogTime(Date logTime) + { + this.logTime = logTime; + } + + public Date getLogTime() + { + return logTime; + } + + public void setLogLevel(Integer logLevel) + { + this.logLevel = logLevel; + } + + public Integer getLogLevel() + { + return logLevel; + } + + public void setSiteId(String siteId) + { + this.siteId = siteId; + } + + public String getSiteId() + { + return siteId; + } + + public void setDeviceId(String deviceId) + { + this.deviceId = deviceId; + } + + public String getDeviceId() + { + return deviceId; + } + + public void setPoint(String point) + { + this.point = point; + } + + public String getPoint() + { + return point; + } + + public void setValue(BigDecimal value) + { + this.value = value; + } + + public BigDecimal getValue() + { + return value; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("logId", getLogId()) + .append("logTime", getLogTime()) + .append("logLevel", getLogLevel()) + .append("site", getSiteId()) + .append("deviceId", getDeviceId()) + .append("point", getPoint()) + .append("value", getValue()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsFaultIssueLogMapper.java b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsFaultIssueLogMapper.java new file mode 100644 index 0000000..47380ad --- /dev/null +++ b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsFaultIssueLogMapper.java @@ -0,0 +1,64 @@ +package com.xzzn.ems.mapper; + +import java.util.List; +import com.xzzn.ems.domain.EmsFaultIssueLog; + +/** + * 告警保护方案下发日志Mapper接口 + * + * @author xzzn + * @date 2025-11-15 + */ +public interface EmsFaultIssueLogMapper +{ + /** + * 查询告警保护方案下发日志 + * + * @param id 告警保护方案下发日志主键 + * @return 告警保护方案下发日志 + */ + public EmsFaultIssueLog selectEmsFaultIssueLogById(Long id); + + /** + * 查询告警保护方案下发日志列表 + * + * @param emsFaultIssueLog 告警保护方案下发日志 + * @return 告警保护方案下发日志集合 + */ + public List selectEmsFaultIssueLogList(EmsFaultIssueLog emsFaultIssueLog); + + /** + * 新增告警保护方案下发日志 + * + * @param emsFaultIssueLog 告警保护方案下发日志 + * @return 结果 + */ + public int insertEmsFaultIssueLog(EmsFaultIssueLog emsFaultIssueLog); + + /** + * 修改告警保护方案下发日志 + * + * @param emsFaultIssueLog 告警保护方案下发日志 + * @return 结果 + */ + public int updateEmsFaultIssueLog(EmsFaultIssueLog emsFaultIssueLog); + + /** + * 删除告警保护方案下发日志 + * + * @param id 告警保护方案下发日志主键 + * @return 结果 + */ + public int deleteEmsFaultIssueLogById(Long id); + + /** + * 批量删除告警保护方案下发日志 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteEmsFaultIssueLogByIds(Long[] ids); + + // 根据logId获取日志 + public EmsFaultIssueLog selectEmsFaultIssueLogByLogId(String logId); +} diff --git a/ems-system/src/main/java/com/xzzn/ems/service/IEmsAlarmRecordsService.java b/ems-system/src/main/java/com/xzzn/ems/service/IEmsAlarmRecordsService.java index 139d857..38e66bf 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/IEmsAlarmRecordsService.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/IEmsAlarmRecordsService.java @@ -95,4 +95,7 @@ public interface IEmsAlarmRecordsService // 根据site_id和deviceId更新对应的redis public void updateRedisAlarmRecords(String siteId, String deviceId); + + // 处理本地端同步的保护策略告警信息 + public void dealSyncData(String content, String operateType); } diff --git a/ems-system/src/main/java/com/xzzn/ems/service/IEmsFaultIssueLogService.java b/ems-system/src/main/java/com/xzzn/ems/service/IEmsFaultIssueLogService.java new file mode 100644 index 0000000..d4071c3 --- /dev/null +++ b/ems-system/src/main/java/com/xzzn/ems/service/IEmsFaultIssueLogService.java @@ -0,0 +1,64 @@ +package com.xzzn.ems.service; + +import java.util.List; +import com.xzzn.ems.domain.EmsFaultIssueLog; + +/** + * 告警保护方案下发日志Service接口 + * + * @author xzzn + * @date 2025-11-15 + */ +public interface IEmsFaultIssueLogService +{ + /** + * 查询告警保护方案下发日志 + * + * @param id 告警保护方案下发日志主键 + * @return 告警保护方案下发日志 + */ + public EmsFaultIssueLog selectEmsFaultIssueLogById(Long id); + + /** + * 查询告警保护方案下发日志列表 + * + * @param emsFaultIssueLog 告警保护方案下发日志 + * @return 告警保护方案下发日志集合 + */ + public List selectEmsFaultIssueLogList(EmsFaultIssueLog emsFaultIssueLog); + + /** + * 新增告警保护方案下发日志 + * + * @param emsFaultIssueLog 告警保护方案下发日志 + * @return 结果 + */ + public int insertEmsFaultIssueLog(EmsFaultIssueLog emsFaultIssueLog); + + /** + * 修改告警保护方案下发日志 + * + * @param emsFaultIssueLog 告警保护方案下发日志 + * @return 结果 + */ + public int updateEmsFaultIssueLog(EmsFaultIssueLog emsFaultIssueLog); + + /** + * 批量删除告警保护方案下发日志 + * + * @param ids 需要删除的告警保护方案下发日志主键集合 + * @return 结果 + */ + public int deleteEmsFaultIssueLogByIds(Long[] ids); + + /** + * 删除告警保护方案下发日志信息 + * + * @param id 告警保护方案下发日志主键 + * @return 结果 + */ + public int deleteEmsFaultIssueLogById(Long id); + + // 处理本地端同步的告警保护下发日志信息 + public void dealSyncData(String content, String operateType); +} diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsAlarmRecordsServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsAlarmRecordsServiceImpl.java index 08fcc62..0d37974 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsAlarmRecordsServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsAlarmRecordsServiceImpl.java @@ -4,6 +4,7 @@ import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import com.alibaba.fastjson2.JSON; import com.xzzn.common.constant.RedisKeyConstants; import com.xzzn.common.core.domain.entity.SysUser; import com.xzzn.common.core.redis.RedisCache; @@ -18,7 +19,6 @@ import com.xzzn.ems.domain.vo.AlarmRecordListRequestVo; import com.xzzn.ems.domain.vo.AlarmRecordListResponseVo; import com.xzzn.ems.mapper.EmsAlarmMatchDataMapper; import com.xzzn.ems.mapper.EmsTicketMapper; -import com.xzzn.ems.service.IEmsTicketService; import com.xzzn.system.mapper.SysUserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -292,5 +292,21 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService redisCache.setAllCacheMapValue(redisKey, newAlarms); } + @Override + public void dealSyncData(String content, String operateType) { + if (StringUtils.isEmpty(content)) { + return; + } + + EmsAlarmRecords alarmRecords = JSON.parseObject(content, EmsAlarmRecords.class); + switch(operateType) { + case "INSERT": + insertEmsAlarmRecords(alarmRecords); + break; + default: + break; + } + } + } diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsFaultIssueLogServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsFaultIssueLogServiceImpl.java new file mode 100644 index 0000000..99712be --- /dev/null +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsFaultIssueLogServiceImpl.java @@ -0,0 +1,129 @@ +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.domain.EmsAlarmRecords; +import com.xzzn.ems.service.IFXXAlarmDataProcessService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.xzzn.ems.mapper.EmsFaultIssueLogMapper; +import com.xzzn.ems.domain.EmsFaultIssueLog; +import com.xzzn.ems.service.IEmsFaultIssueLogService; + +/** + * 告警保护方案下发日志Service业务层处理 + * + * @author xzzn + * @date 2025-11-15 + */ +@Service +public class EmsFaultIssueLogServiceImpl implements IEmsFaultIssueLogService +{ + @Autowired + private EmsFaultIssueLogMapper emsFaultIssueLogMapper; + + /** + * 查询告警保护方案下发日志 + * + * @param id 告警保护方案下发日志主键 + * @return 告警保护方案下发日志 + */ + @Override + public EmsFaultIssueLog selectEmsFaultIssueLogById(Long id) + { + return emsFaultIssueLogMapper.selectEmsFaultIssueLogById(id); + } + + /** + * 新增告警保护方案下发日志 + * + * @param emsFaultIssueLog 告警保护方案下发日志 + * @return 结果 + */ + @Override + public int insertEmsFaultIssueLog(EmsFaultIssueLog emsFaultIssueLog) + { + emsFaultIssueLog.setCreateTime(DateUtils.getNowDate()); + return emsFaultIssueLogMapper.insertEmsFaultIssueLog(emsFaultIssueLog); + } + + /** + * 查询告警保护方案下发日志列表 + * + * @param emsFaultIssueLog 告警保护方案下发日志 + * @return 告警保护方案下发日志 + */ + @Override + public List selectEmsFaultIssueLogList(EmsFaultIssueLog emsFaultIssueLog) + { + return emsFaultIssueLogMapper.selectEmsFaultIssueLogList(emsFaultIssueLog); + } + + /** + * 修改告警保护方案下发日志 + * + * @param emsFaultIssueLog 告警保护方案下发日志 + * @return 结果 + */ + @Override + public int updateEmsFaultIssueLog(EmsFaultIssueLog emsFaultIssueLog) + { + emsFaultIssueLog.setUpdateTime(DateUtils.getNowDate()); + return emsFaultIssueLogMapper.updateEmsFaultIssueLog(emsFaultIssueLog); + } + + /** + * 批量删除告警保护方案下发日志 + * + * @param ids 需要删除的告警保护方案下发日志主键 + * @return 结果 + */ + @Override + public int deleteEmsFaultIssueLogByIds(Long[] ids) + { + return emsFaultIssueLogMapper.deleteEmsFaultIssueLogByIds(ids); + } + + /** + * 删除告警保护方案下发日志信息 + * + * @param id 告警保护方案下发日志主键 + * @return 结果 + */ + @Override + public int deleteEmsFaultIssueLogById(Long id) + { + return emsFaultIssueLogMapper.deleteEmsFaultIssueLogById(id); + } + + @Override + public void dealSyncData(String content, String operateType) { + if (StringUtils.isEmpty(content)) { + return; + } + + EmsFaultIssueLog issueLog = JSON.parseObject(content, EmsFaultIssueLog.class); + String logId = issueLog.getLogId(); + if (checkLogIsExist(logId)) { + return; + } + switch(operateType) { + case "INSERT": + insertEmsFaultIssueLog(issueLog); + break; + default: + break; + } + } + + private boolean checkLogIsExist(String logId) { + EmsFaultIssueLog issueLog = emsFaultIssueLogMapper.selectEmsFaultIssueLogByLogId(logId); + if (issueLog != null) { + return true; + } + return false; + } +} diff --git a/ems-system/src/main/resources/mapper/ems/EmsFaultIssueLogMapper.xml b/ems-system/src/main/resources/mapper/ems/EmsFaultIssueLogMapper.xml new file mode 100644 index 0000000..15ebfe7 --- /dev/null +++ b/ems-system/src/main/resources/mapper/ems/EmsFaultIssueLogMapper.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + select id, log_id, log_time, log_level, site_id, device_id, point, value, create_by, create_time, update_by, update_time, remark from ems_fault_issue_log + + + + + + + + insert into ems_fault_issue_log + + log_id, + log_time, + log_level, + site_id, + device_id, + point, + value, + create_by, + create_time, + update_by, + update_time, + remark, + + + #{logId}, + #{logTime}, + #{logLevel}, + #{siteId}, + #{deviceId}, + #{point}, + #{value}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, + + + + + update ems_fault_issue_log + + log_id = #{logId}, + log_time = #{logTime}, + log_level = #{logLevel}, + site_id = #{siteId}, + device_id = #{deviceId}, + point = #{point}, + value = #{value}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + remark = #{remark}, + + where id = #{id} + + + + delete from ems_fault_issue_log where id = #{id} + + + + delete from ems_fault_issue_log where id in + + #{id} + + + + + \ No newline at end of file