Prechádzať zdrojové kódy

chore: 修改设备异常推送到租户及部门的逻辑

zengweijie 2 rokov pred
rodič
commit
5f89562a1e

+ 14 - 13
smsb-customer-manager-app/src/main/java/com/inspur/customer/service/org/SmsbDepartmentUserServiceImpl.java

@@ -174,27 +174,28 @@ public class SmsbDepartmentUserServiceImpl extends ServiceImpl<SmsbDepartmentUse
 
     /**
      * 获取指定org下接收级别<=informLevel的用户
+     * level 告警级别,不接收为-1
+     * 第一步部门内推送,属于部门内 且 level >= inform >= 0
+     * 第二步租户内推送,level + 1000 >= inform>= 1000
      *
      * @param org         指定org
      * @param informLevel 指定informLevel
      * @return 指定部门下接收级别<= informLevel的用户
      */
     @Override
-    public List<SmsbSimpleUserCO> listUserByOrgAndInformLevel(String tenant, List<String> org, int informLevel) {
-        List<SmsbDepartmentUserDO> list = new ArrayList<>(this.list(Wrappers.lambdaQuery(SmsbDepartmentUserDO.class)
-            .eq(SmsbDepartmentUserDO::getTenant, tenant)
-            .eq(SmsbDepartmentUserDO::getEnabled, 1)
-            .eq(SmsbDepartmentUserDO::getInformLevel, 9999)));
-        if (!CollectionUtils.isEmpty(org)) {
-
-            LambdaQueryWrapper<SmsbDepartmentUserDO> queryWrapper = Wrappers.lambdaQuery();
+    public List<SmsbSimpleUserCO> listUserByInformLevel(String tenant, List<String> org, int informLevel) {
+        LambdaQueryWrapper<SmsbDepartmentUserDO> queryWrapper = Wrappers.lambdaQuery();
 
-            queryWrapper.in(SmsbDepartmentUserDO::getPath, org);
-            queryWrapper.eq(SmsbDepartmentUserDO::getEnabled, 1);
-            queryWrapper.gt(SmsbDepartmentUserDO::getInformLevel, informLevel);
+        queryWrapper.eq(SmsbDepartmentUserDO::getTenant, tenant)
+            .ne(SmsbDepartmentUserDO::getInformLevel, -1)
+            .eq(SmsbDepartmentUserDO::getEnabled, 1)
+            .between(SmsbDepartmentUserDO::getInformLevel, 1000, 1000 + informLevel)
+            .or(!CollectionUtils.isEmpty(org), q -> q.ne(SmsbDepartmentUserDO::getInformLevel, -1)
+                .in(SmsbDepartmentUserDO::getPath, org)
+                .eq(SmsbDepartmentUserDO::getEnabled, 1)
+                .between(SmsbDepartmentUserDO::getInformLevel, 0, informLevel));
 
-            list.addAll(this.list(queryWrapper));
-        }
+        List<SmsbDepartmentUserDO> list = this.list(queryWrapper);
 
         List<SmsbSimpleUserCO> smsbSimpleUserList = Lists.newArrayListWithCapacity(list.size());
         list.forEach(user -> {

+ 1 - 1
smsb-customer-manager-app/src/main/java/com/inspur/customer/service/tenant/UserInformServiceImpl.java

@@ -78,7 +78,7 @@ public class UserInformServiceImpl implements UserInformService {
         //关联的org需要对该org下的用户进行预警,并且需要用户的接收级别<=异常级别,这里我们用informLevel的id表示级别的递增
         if (!CollectionUtils.isEmpty(org)) {
             log.debug("users:{}", users);
-            List<SmsbSimpleUserCO> orgUserList = departmentUserService.listUserByOrgAndInformLevel(tenant, org, informLevel.getId());
+            List<SmsbSimpleUserCO> orgUserList = departmentUserService.listUserByInformLevel(tenant, org, informLevel.getId());
             List<String> existedUserIdList = users.stream().map(KeycloakUserCO::getId).collect(Collectors.toList());
             List<String> orgUserIdList = orgUserList.stream().map(SmsbSimpleUserCO::getUserId).distinct().collect(Collectors.toList());
             orgUserIdList.removeAll(existedUserIdList);

+ 1 - 1
smsb-customer-manager-client/src/main/java/com/inspur/customer/client/org/SmsbDepartmentUserService.java

@@ -102,5 +102,5 @@ public interface SmsbDepartmentUserService {
      * @param informLevel 指定informLevel
      * @return 指定部门下接收级别<= informLevel的用户
      */
-    List<SmsbSimpleUserCO> listUserByOrgAndInformLevel(String tenant, List<String> org, int informLevel);
+    List<SmsbSimpleUserCO> listUserByInformLevel(String tenant, List<String> org, int informLevel);
 }

+ 6 - 0
smsb-customer-manager-client/src/main/java/com/inspur/customer/context/inform/InformLevelEnum.java

@@ -3,9 +3,15 @@ package com.inspur.customer.context.inform;
 import lombok.Getter;
 
 import java.util.Arrays;
+import java.util.List;
 
 /**
+ * id不要大于1000,否则租户及部门消息推送规则会被毁掉
+ * com.inspur.device.constants.device.WarningLevelEnum
+ * com.inspur.customer.service.tenant.UserInformServiceImpl#getInformAddresseesByInformLevel(String, String, List, InformLevelEnum)
+ * com.inspur.customer.service.org.SmsbDepartmentUserServiceImpl#listUserByInformLevel(String, List, int)
  * inform level enum
+ *
  * @author linwenhua
  */
 public enum InformLevelEnum {