Kaynağa Gözat

feat:分组预警消息

fantingwei 1 yıl önce
ebeveyn
işleme
2faf688bb0

+ 39 - 4
smsb-customer-manager-app/src/main/java/com/inspur/customer/service/org/SmsbMessageGroupMemberServiceImpl.java

@@ -19,12 +19,10 @@ import com.inspur.customer.object.org.SmsbMessageMemberUpdateDto;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.util.CollectionUtils;
 
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -125,4 +123,41 @@ public class SmsbMessageGroupMemberServiceImpl extends ServiceImpl<SmsbMessageGr
         return success ? Response.buildSuccess() : Response.buildFailure("400","删除失败");
     }
 
+    @Override
+    public Map<Long, List<KeycloakUserCO>> getByGroupIds(List<Long> groupIds) {
+        Map<Long, List<SmsbMessageGroupMemberDO>> memberMap = lambdaQuery()
+            .in(!CollectionUtils.isEmpty(groupIds), SmsbMessageGroupMemberDO::getGroupId, groupIds)
+            .eq(SmsbMessageGroupMemberDO::getEnabled, 1)
+            .list()
+            .stream()
+            .collect(Collectors.groupingBy(SmsbMessageGroupMemberDO::getGroupId));
+
+        Map<Long, List<KeycloakUserCO>> resultMap = new HashMap<>();
+
+        for (Map.Entry<Long, List<SmsbMessageGroupMemberDO>> entry : memberMap.entrySet()) {
+            Long groupId = entry.getKey();
+            List<SmsbMessageGroupMemberDO> memberDOList = entry.getValue();
+            List<KeycloakUserCO> keycloakUserCOS = new ArrayList<>();
+
+            memberDOList.forEach(
+                memberDO -> {
+                    // 获取要通知人的keycloak信息,并设置主送抄送类型
+                    String userId = smsbDepartmentUserService
+                        .listByIds(Collections.singletonList(memberDO.getDepartmentUserId()))
+                        .stream()
+                        .map(SmsbMessageMemberCO::getUserId)
+                        .collect(Collectors.toList())
+                        .get(0);
+
+                    KeycloakUserCO userCO = keycloakService.getUsersByIds(Collections.singletonList(userId)).get(0);
+                    userCO.setRecipientType(memberDO.getRecipientType());
+                    keycloakUserCOS.add(userCO);
+                }
+            );
+            resultMap.put(groupId, keycloakUserCOS);
+        }
+
+        return resultMap;
+    }
+
 }

+ 33 - 0
smsb-customer-manager-app/src/main/java/com/inspur/customer/service/org/SmsbMessageGroupServiceImpl.java

@@ -7,19 +7,26 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.inspur.customer.client.org.SmsbMessageGroupMemberService;
 import com.inspur.customer.client.org.SmsbMessageGroupService;
 import com.inspur.customer.infrastructure.mapper.org.SmsbMessageGroupMapper;
 import com.inspur.customer.infrastructure.object.org.SmsbMessageGroupDO;
+import com.inspur.customer.object.keycloak.KeycloakUserCO;
 import com.inspur.customer.object.org.SmsbMessageGroupDto;
 import com.inspur.customer.object.org.SmsbMessageGroupQuery;
 import com.inspur.customer.utils.BeanCopyUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.util.CollectionUtils;
 
 import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @author fantingwei
@@ -29,6 +36,8 @@ import java.util.Objects;
 @DubboService(interfaceClass = SmsbMessageGroupService.class)
 public class SmsbMessageGroupServiceImpl extends ServiceImpl<SmsbMessageGroupMapper, SmsbMessageGroupDO> implements SmsbMessageGroupService {
 
+    @DubboReference
+    private SmsbMessageGroupMemberService smsbMessageGroupMemberService;
 
     @Override
     public Response add(SmsbMessageGroupDto smsbMessageGroupDto) {
@@ -84,4 +93,28 @@ public class SmsbMessageGroupServiceImpl extends ServiceImpl<SmsbMessageGroupMap
         return PageResponse.of(page.getRecords(), (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent());
     }
 
+    @Override
+    public Map<Long, List<KeycloakUserCO>> listUserByInformLevel(String tenant, int informLevel, int errorId) {
+        // 获取消息分组中,当前启用的,符合tenant、informLevel、errorId的分组
+        List<SmsbMessageGroupDO> messageList = lambdaQuery()
+            .eq(StringUtils.isNotEmpty(tenant), SmsbMessageGroupDO::getTenant, tenant)
+            .ne(SmsbMessageGroupDO::getInformLevel, -1)
+            .eq(SmsbMessageGroupDO::getEnabled, 1)
+            .and(wrapper -> wrapper.nested(nestedWrapper -> nestedWrapper.eq(SmsbMessageGroupDO::getInformLevel, 9999)
+                    .apply("FIND_IN_SET({0}, REPLACE(REPLACE(inform_type, '[', ''), ']', '')) > 0", errorId))
+                .or()
+                .between(SmsbMessageGroupDO::getInformLevel, 0, informLevel))
+            .list();
+        // 获取需要通知的groupIds
+        List<Long> groupIds = messageList.stream().map(SmsbMessageGroupDO::getId).collect(Collectors.toList());
+
+        if (CollectionUtils.isEmpty(groupIds)) {
+            return new HashMap<>();
+        }
+
+        // key为groupId,value为对应的用户(包含主送抄送状态)
+        Map<Long, List<KeycloakUserCO>> map = smsbMessageGroupMemberService.getByGroupIds(groupIds);
+
+        return map;
+    }
 }

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

@@ -2,6 +2,7 @@ package com.inspur.customer.service.tenant;
 
 import com.inspur.customer.client.keycloak.KeycloakService;
 import com.inspur.customer.client.org.SmsbDepartmentUserService;
+import com.inspur.customer.client.org.SmsbMessageGroupService;
 import com.inspur.customer.client.tenant.TenantExceptionInformStrategyService;
 import com.inspur.customer.client.tenant.UserInformService;
 import com.inspur.customer.context.inform.InformLevelEnum;
@@ -20,6 +21,7 @@ import javax.annotation.Nullable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -36,6 +38,8 @@ public class UserInformServiceImpl implements UserInformService {
     private SmsbDepartmentUserService departmentUserService;
     @DubboReference
     private TenantExceptionInformStrategyService tenantExceptionInformStrategyService;
+    @DubboReference
+    private SmsbMessageGroupService smsbMessageGroupService;
 
     /**
      * 三个地方引用,其中1个是AI审核的,1个是测试的,最后一个预警策略的,只关注最后一项即可。
@@ -101,9 +105,9 @@ public class UserInformServiceImpl implements UserInformService {
             users.addAll(orgKeyCloakUserList);
         }
 
-        // TODO:informAddressee这里加驿站屏收件人、抄送人
-
-
+        // key为groupId,value为用户(包含主送、抄送类型)
+        Map<Long, List<KeycloakUserCO>> memberMap = smsbMessageGroupService.listUserByInformLevel(tenant, informLevel.getId(), errorId);
+        informAddressee.setMemberMap(memberMap);
         informAddressee.setUsers(users);
         return informAddressee;
     }

+ 9 - 0
smsb-customer-manager-client/src/main/java/com/inspur/customer/client/org/SmsbMessageGroupMemberService.java

@@ -1,10 +1,14 @@
 package com.inspur.customer.client.org;
 
 import com.alibaba.cola.dto.Response;
+import com.inspur.customer.object.keycloak.KeycloakUserCO;
 import com.inspur.customer.object.org.SmsbMessageGroupQuery;
 import com.inspur.customer.object.org.SmsbMessageMemberAddDto;
 import com.inspur.customer.object.org.SmsbMessageMemberUpdateDto;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author fantingwei
  * @date 2024/6/17
@@ -32,4 +36,9 @@ public interface SmsbMessageGroupMemberService {
      */
     Response deleteByDepartmentUserIds(SmsbMessageMemberUpdateDto updateDto);
 
+    /**
+     * 根据groupIds获取启用的成员数据,key为groupId,value为对应成员
+     */
+    Map<Long, List<KeycloakUserCO>> getByGroupIds(List<Long> groupIds);
+
 }

+ 9 - 0
smsb-customer-manager-client/src/main/java/com/inspur/customer/client/org/SmsbMessageGroupService.java

@@ -1,9 +1,13 @@
 package com.inspur.customer.client.org;
 
 import com.alibaba.cola.dto.Response;
+import com.inspur.customer.object.keycloak.KeycloakUserCO;
 import com.inspur.customer.object.org.SmsbMessageGroupDto;
 import com.inspur.customer.object.org.SmsbMessageGroupQuery;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author fantingwei
  * @date 2024/6/17
@@ -29,4 +33,9 @@ public interface SmsbMessageGroupService {
      * 分页查询
      */
     Response pq(SmsbMessageGroupQuery query);
+
+    /**
+     * 根据租户、通知等级、预警枚举类,获取分组预警中收件人和抄送人,key为groupId,value为收件人和抄送人信息
+     */
+    Map<Long, List<KeycloakUserCO>> listUserByInformLevel(String tenant, int informLevel, int errorId);
 }

+ 3 - 0
smsb-customer-manager-client/src/main/java/com/inspur/customer/object/keycloak/KeycloakUserCO.java

@@ -31,6 +31,9 @@ public class KeycloakUserCO implements Serializable {
 
     private String wechatAppletOpenId;
 
+    // 主送抄送类型,1-主送,2-抄送
+    private Integer recipientType;
+
     public void setPhone(@Nullable List<String> phones) {
         if (phones != null && !phones.isEmpty()) {
             phone = phones.get(0);

+ 5 - 0
smsb-customer-manager-client/src/main/java/com/inspur/customer/object/org/SmsbMessageGroupMemberDto.java

@@ -71,4 +71,9 @@ public class SmsbMessageGroupMemberDto implements Serializable {
     private String createBy;
 
     private String createUser;
+
+    /**
+     * keycloakUserId
+     */
+    private String keycloakUserId;
 }

+ 6 - 0
smsb-customer-manager-client/src/main/java/com/inspur/customer/object/tenant/InformAddresseeCO.java

@@ -8,6 +8,7 @@ import org.apache.commons.lang3.StringUtils;
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -26,6 +27,11 @@ public class InformAddresseeCO implements Serializable {
     @Getter
     private List<KeycloakUserCO> users;
 
+    // key为groupId,value为通知用户
+    @Setter
+    @Getter
+    private Map<Long, List<KeycloakUserCO>> memberMap;
+
     public List<String> getEmailAddressees() {
         if (Boolean.TRUE.equals(informStrategy.getEmail())) {
             return users.stream().map(KeycloakUserCO::getEmail).filter(StringUtils::isNotBlank).distinct().collect(Collectors.toList());