diff --git a/os-ems/src/main/java/com/os/ems/base/service/impl/EmsAlarmActionStepServiceImpl.java b/os-ems/src/main/java/com/os/ems/base/service/impl/EmsAlarmActionStepServiceImpl.java index 982c7ff..0a1e6c5 100644 --- a/os-ems/src/main/java/com/os/ems/base/service/impl/EmsAlarmActionStepServiceImpl.java +++ b/os-ems/src/main/java/com/os/ems/base/service/impl/EmsAlarmActionStepServiceImpl.java @@ -5,6 +5,7 @@ import java.io.File; import java.net.URLDecoder; import com.os.common.config.RuoYiConfig; +import com.os.common.exception.ServiceException; import com.os.common.utils.DateUtils; import com.os.common.utils.StringUtils; import com.os.common.utils.uuid.IdUtils; @@ -96,21 +97,67 @@ public class EmsAlarmActionStepServiceImpl implements IEmsAlarmActionStepService * @return 结果 */ @Override + @Transactional(rollbackFor = Exception.class) public int deleteEmsAlarmActionStepByObjIds(String[] objIds) { - return emsAlarmActionStepMapper.deleteEmsAlarmActionStepByObjIds(objIds); + try { + int result = 0; + for (String objId : objIds) { + result += deleteEmsAlarmActionStepByObjId(objId); + } + return result; + } catch (Exception e) { + throw new RuntimeException("批量删除措施步骤失败: " + e.getMessage(), e); + } } /** - * 删除报警规则具体措施步骤信息 + * 删除报警规则具体措施步骤信息(级联删除关联的图片文件) * * @param objId 报警规则具体措施步骤主键 * @return 结果 */ @Override + @Transactional(rollbackFor = Exception.class) public int deleteEmsAlarmActionStepByObjId(String objId) { - return emsAlarmActionStepMapper.deleteEmsAlarmActionStepByObjId(objId); + try { + // 1. 查询要删除的措施步骤信息 + EmsAlarmActionStep actionStep = emsAlarmActionStepMapper.selectEmsAlarmActionStepByObjId(objId); + if (actionStep == null) { + throw new RuntimeException("措施步骤不存在 "); + } + + // 2. 删除该步骤关联的所有图片文件 + EmsAlarmActionStepImage imageQuery = new EmsAlarmActionStepImage(); + imageQuery.setActionStepObjId(objId); + List images = emsAlarmActionStepImageMapper.selectEmsAlarmActionStepImageList(imageQuery); + + if (images != null && !images.isEmpty()) { + for (EmsAlarmActionStepImage image : images) { + try { + // 删除物理文件 + deleteImageFile(image.getImageUrl()); + // 删除数据库记录 + emsAlarmActionStepImageMapper.deleteEmsAlarmActionStepImageByObjId(image.getObjId()); + } catch (Exception e) { + throw new RuntimeException("删除措施步骤图片失败,导致事务回滚: " + e.getMessage(), e); + } + } + System.out.println("删除措施步骤 " + actionStep.getDescription() + " 关联的 " + images.size() + " 张图片"); + } + + // 3. 最后删除措施步骤本身 + int result = emsAlarmActionStepMapper.deleteEmsAlarmActionStepByObjId(objId); + + if (result > 0) { + System.out.println("成功删除措施步骤: " + actionStep.getDescription() + " (ID: " + objId + ")"); + } + + return result; + } catch (Exception e) { + throw new RuntimeException("删除措施步骤失败: " + e.getMessage(), e); + } } /** diff --git a/os-ems/src/main/java/com/os/ems/base/service/impl/EmsBaseMonitorInfoServiceImpl.java b/os-ems/src/main/java/com/os/ems/base/service/impl/EmsBaseMonitorInfoServiceImpl.java index da1f401..92880d8 100644 --- a/os-ems/src/main/java/com/os/ems/base/service/impl/EmsBaseMonitorInfoServiceImpl.java +++ b/os-ems/src/main/java/com/os/ems/base/service/impl/EmsBaseMonitorInfoServiceImpl.java @@ -5,11 +5,15 @@ import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; +import com.os.common.exception.ServiceException; import com.os.common.utils.DateUtils; import com.os.common.utils.StringUtils; import com.os.ems.base.domain.TreeSelects; +import com.os.ems.record.service.IEmsRecordAlarmRuleService; +import com.os.ems.record.domain.EmsRecordAlarmRule; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import com.os.ems.base.mapper.EmsBaseMonitorInfoMapper; import com.os.ems.base.domain.EmsBaseMonitorInfo; import com.os.ems.base.service.IEmsBaseMonitorInfoService; @@ -26,6 +30,9 @@ public class EmsBaseMonitorInfoServiceImpl implements IEmsBaseMonitorInfoService @Autowired private EmsBaseMonitorInfoMapper emsBaseMonitorInfoMapper; + @Autowired + private IEmsRecordAlarmRuleService emsRecordAlarmRuleService; + /** * 查询计量设备信息 * @@ -93,21 +100,60 @@ public class EmsBaseMonitorInfoServiceImpl implements IEmsBaseMonitorInfoService * @return 结果 */ @Override + @Transactional(rollbackFor = Exception.class) public int deleteEmsBaseMonitorInfoByObjIds(Long[] objIds) { + for (Long objId : objIds){ + // 3. 检查子设备(如果存在,则抛出异常) + EmsBaseMonitorInfo childQuery = new EmsBaseMonitorInfo(); + childQuery.setParentId(objId); + List childDevices = emsBaseMonitorInfoMapper.selectEmsBaseMonitorInfoList(childQuery); + if (childDevices != null && !childDevices.isEmpty()) { + throw new ServiceException("存在子节点,无法删除设备信息 "); + } + } return emsBaseMonitorInfoMapper.deleteEmsBaseMonitorInfoByObjIds(objIds); } /** - * 删除计量设备信息信息 + * 删除计量设备信息信息(级联删除关联的异常规则和措施步骤) * * @param objId 计量设备信息主键 * @return 结果 */ @Override + @Transactional(rollbackFor = Exception.class) public int deleteEmsBaseMonitorInfoByObjId(Long objId) { - return emsBaseMonitorInfoMapper.deleteEmsBaseMonitorInfoByObjId(objId); + // 1. 查询要删除的设备信息 + EmsBaseMonitorInfo monitorInfo = emsBaseMonitorInfoMapper.selectEmsBaseMonitorInfoByObjId(objId); + if (monitorInfo == null) { + throw new RuntimeException("设备信息不存在 " ); + } + // 3. 检查子设备(如果存在,则抛出异常) + EmsBaseMonitorInfo childQuery = new EmsBaseMonitorInfo(); + childQuery.setParentId(objId); + List childDevices = emsBaseMonitorInfoMapper.selectEmsBaseMonitorInfoList(childQuery); + if (childDevices != null && !childDevices.isEmpty()) { + throw new ServiceException("存在子节点,无法删除设备信息 "); + } + + // 4. 删除该设备关联的所有异常规则(会级联删除措施步骤和图片) + EmsRecordAlarmRule alarmRuleQuery = new EmsRecordAlarmRule(); + alarmRuleQuery.setMonitorId(monitorInfo.getMonitorCode()); + List alarmRules = emsRecordAlarmRuleService.selectEmsRecordAlarmRuleList(alarmRuleQuery); + + if (alarmRules != null && !alarmRules.isEmpty()) { + Long[] ruleIds = alarmRules.stream() + .map(EmsRecordAlarmRule::getObjId) + .toArray(Long[]::new); + // 级联删除异常规则(会自动删除关联的措施步骤和图片) + emsRecordAlarmRuleService.deleteEmsRecordAlarmRuleByObjIds(ruleIds); + + } + // 5. 最后删除设备本身 + int result = emsBaseMonitorInfoMapper.deleteEmsBaseMonitorInfoByObjId(objId); + return result; } /** diff --git a/os-ems/src/main/java/com/os/ems/record/service/impl/EmsRecordAlarmRuleServiceImpl.java b/os-ems/src/main/java/com/os/ems/record/service/impl/EmsRecordAlarmRuleServiceImpl.java index a8b62dc..e0d8864 100644 --- a/os-ems/src/main/java/com/os/ems/record/service/impl/EmsRecordAlarmRuleServiceImpl.java +++ b/os-ems/src/main/java/com/os/ems/record/service/impl/EmsRecordAlarmRuleServiceImpl.java @@ -2,8 +2,11 @@ package com.os.ems.record.service.impl; import java.util.List; import com.os.common.utils.DateUtils; +import com.os.ems.base.service.IEmsAlarmActionStepService; +import com.os.ems.base.domain.EmsAlarmActionStep; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import com.os.ems.record.mapper.EmsRecordAlarmRuleMapper; import com.os.ems.record.domain.EmsRecordAlarmRule; import com.os.ems.record.service.IEmsRecordAlarmRuleService; @@ -20,6 +23,9 @@ public class EmsRecordAlarmRuleServiceImpl implements IEmsRecordAlarmRuleService @Autowired private EmsRecordAlarmRuleMapper emsRecordAlarmRuleMapper; + @Autowired + private IEmsAlarmActionStepService emsAlarmActionStepService; + /** * 查询异常告警规则 * @@ -77,21 +83,61 @@ public class EmsRecordAlarmRuleServiceImpl implements IEmsRecordAlarmRuleService * @return 结果 */ @Override + @Transactional(rollbackFor = Exception.class) public int deleteEmsRecordAlarmRuleByObjIds(Long[] objIds) { - return emsRecordAlarmRuleMapper.deleteEmsRecordAlarmRuleByObjIds(objIds); + try { + int result = 0; + for (Long objId : objIds) { + result += deleteEmsRecordAlarmRuleByObjId(objId); + } + return result; + } catch (Exception e) { + throw new RuntimeException("批量删除异常规则失败: " + e.getMessage(), e); + } } /** - * 删除异常告警规则信息 + * 删除异常告警规则信息(级联删除关联的措施步骤和图片) * * @param objId 异常告警规则主键 * @return 结果 */ @Override + @Transactional(rollbackFor = Exception.class) public int deleteEmsRecordAlarmRuleByObjId(Long objId) { - return emsRecordAlarmRuleMapper.deleteEmsRecordAlarmRuleByObjId(objId); + try { + // 1. 查询要删除的异常规则信息 + EmsRecordAlarmRule alarmRule = emsRecordAlarmRuleMapper.selectEmsRecordAlarmRuleByObjId(objId); + if (alarmRule == null) { + throw new RuntimeException("异常规则不存在,ID: " + objId); + } + + // 2. 删除该规则关联的所有措施步骤(会级联删除图片文件) + List actionSteps = emsAlarmActionStepService.selectEmsAlarmActionStepByRuleObjId(objId.toString()); + + if (actionSteps != null && !actionSteps.isEmpty()) { + String[] stepIds = actionSteps.stream() + .map(EmsAlarmActionStep::getObjId) + .toArray(String[]::new); + + // 级联删除措施步骤(会自动删除关联的图片文件) + int deletedSteps = emsAlarmActionStepService.deleteEmsAlarmActionStepByObjIds(stepIds); + System.out.println("删除异常规则 " + alarmRule.getRuleName() + " 关联的 " + deletedSteps + " 个措施步骤"); + } + + // 3. 最后删除异常规则本身 + int result = emsRecordAlarmRuleMapper.deleteEmsRecordAlarmRuleByObjId(objId); + + if (result > 0) { + System.out.println("成功删除异常规则: " + alarmRule.getRuleName() + " (ID: " + objId + ")"); + } + + return result; + } catch (Exception e) { + throw new RuntimeException("删除异常规则失败: " + e.getMessage(), e); + } } /**