Explorar o código

fix:删除预警人员检查是否在使用中

陈长荣 hai 5 meses
pai
achega
1bfa82af96

+ 26 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/alarmuser/service/impl/AlarmUserServiceImpl.java

@@ -14,6 +14,8 @@ package vip.xiaonuo.coldchain.modular.alarmuser.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
@@ -28,6 +30,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
 import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
+import vip.xiaonuo.coldchain.core.alarm.bean.SensorAlarmUser;
 import vip.xiaonuo.coldchain.modular.alarmuser.dto.ExtendUserDTO;
 import vip.xiaonuo.coldchain.modular.alarmuser.entity.AlarmUser;
 import vip.xiaonuo.coldchain.modular.alarmuser.mapper.AlarmUserMapper;
@@ -36,6 +39,8 @@ import vip.xiaonuo.coldchain.modular.alarmuser.param.AlarmUserEditParam;
 import vip.xiaonuo.coldchain.modular.alarmuser.param.AlarmUserIdParam;
 import vip.xiaonuo.coldchain.modular.alarmuser.param.AlarmUserPageParam;
 import vip.xiaonuo.coldchain.modular.alarmuser.service.AlarmUserService;
+import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
+import vip.xiaonuo.coldchain.modular.monitortarget.mapper.MonitorTargetMapper;
 import vip.xiaonuo.coldchain.modular.push.entity.WeChatUser;
 import vip.xiaonuo.coldchain.modular.push.utils.PushUtil;
 import vip.xiaonuo.common.enums.CommonDeleteFlagEnum;
@@ -72,6 +77,8 @@ public class AlarmUserServiceImpl extends ServiceImpl<AlarmUserMapper, AlarmUser
     private SysUserService sysUserService;
     @Resource
     private DevConfigApi devConfigApi;
+    @Resource
+    private MonitorTargetMapper monitorTargetMapper;
 
     @Override
     public Page<ExtendUserDTO> page(AlarmUserPageParam alarmUserPageParam) {
@@ -152,8 +159,26 @@ public class AlarmUserServiceImpl extends ServiceImpl<AlarmUserMapper, AlarmUser
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void delete(List<AlarmUserIdParam> alarmUserIdParamList) {
+        List<String> userIds = CollStreamUtil.toList(alarmUserIdParamList, AlarmUserIdParam::getId);
+
+        //检查报警接收人是否在使用
+        List<MonitorTarget> monitorTargets = monitorTargetMapper.selectList(new LambdaQueryWrapper<>(MonitorTarget.class)
+                .select(MonitorTarget::getAlarmUsers)
+                .eq(MonitorTarget::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE));
+        if (CollUtil.isNotEmpty(monitorTargets)) {
+            List<String> sensorAlarmUserOpenIdList = monitorTargets.stream()
+                    .flatMap(x -> x.getAlarmUsers().stream())
+                    .map(SensorAlarmUser::getOpenId)
+                    .filter(StrUtil::isNotBlank)
+                    .distinct().toList();
+            long usedUser = count(new LambdaQueryWrapper<>(AlarmUser.class).eq(AlarmUser::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE)
+                    .in(AlarmUser::getOpenId, sensorAlarmUserOpenIdList)
+                    .in(AlarmUser::getId, userIds));
+            Assert.isTrue(usedUser == 0, "报警接收人正在使用中,无法删除");
+        }
+
         // 执行删除
-        this.removeByIds(CollStreamUtil.toList(alarmUserIdParamList, AlarmUserIdParam::getId));
+        this.removeByIds(userIds);
     }
 
     @Override