فهرست منبع

fix:分组邮件中,用户启停用状态与安播云用户状态一致

fantingwei 1 سال پیش
والد
کامیت
1fe76d7c99

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

@@ -14,6 +14,7 @@ import com.google.common.collect.Lists;
 import com.inspur.customer.client.keycloak.KeycloakService;
 import com.inspur.customer.client.org.SmsbDepartmentService;
 import com.inspur.customer.client.org.SmsbDepartmentUserService;
+import com.inspur.customer.client.org.SmsbMessageGroupMemberService;
 import com.inspur.customer.constant.Constant;
 import com.inspur.customer.infrastructure.convertor.SmsbDepartmentConvertor;
 import com.inspur.customer.infrastructure.mapper.org.SmsbDepartmentUserMapper;
@@ -51,6 +52,10 @@ public class SmsbDepartmentUserServiceImpl extends ServiceImpl<SmsbDepartmentUse
     @Resource
     private KeycloakService keycloakService;
 
+    @Lazy
+    @Resource
+    private SmsbMessageGroupMemberService memberService;
+
     @Override
     public Boolean addUserDepartment(String userId, SmsbUserAdd smsbUserAdd) {
         return super.save(SmsbDepartmentConvertor.toDataObjectForCreate(userId , smsbUserAdd));
@@ -114,6 +119,16 @@ public class SmsbDepartmentUserServiceImpl extends ServiceImpl<SmsbDepartmentUse
 
     @Override
     public Boolean enableSwitch(SwitchDTO switchDTO) {
+        // 同步修改邮件分组中的用户状态
+        Long id = lambdaQuery()
+            .eq(SmsbDepartmentUserDO::getUserId, switchDTO.getUserId())
+            .one()
+            .getId();
+        SmsbMessageMemberUpdateDto updateDto = new SmsbMessageMemberUpdateDto();
+        updateDto.setEnabled(switchDTO.getEnabled() ? 1 : 0);
+        updateDto.setDepartmentUserId(id);
+        memberService.updateStatus(updateDto);
+
         return super.update(new LambdaUpdateWrapper<>(SmsbDepartmentUserDO.class)
             .set(SmsbDepartmentUserDO::getEnabled, switchDTO.getEnabled()?
                 Constant.AccountNumberEnum.ENABLE.value() :Constant.AccountNumberEnum.DISABLE.value())

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

@@ -10,15 +10,19 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.inspur.customer.client.keycloak.KeycloakService;
 import com.inspur.customer.client.org.SmsbDepartmentUserService;
 import com.inspur.customer.client.org.SmsbMessageGroupMemberService;
+import com.inspur.customer.constant.Constant;
 import com.inspur.customer.infrastructure.mapper.org.SmsbMessageGroupMemberMapper;
 import com.inspur.customer.infrastructure.object.org.SmsbMessageGroupMemberDO;
 import com.inspur.customer.object.keycloak.KeycloakUserCO;
+import com.inspur.customer.object.keycloak.SwitchDTO;
 import com.inspur.customer.object.org.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
+import org.hibernate.validator.internal.util.stereotypes.Lazy;
 import org.springframework.util.CollectionUtils;
 
+import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -37,6 +41,10 @@ public class SmsbMessageGroupMemberServiceImpl extends ServiceImpl<SmsbMessageGr
     @DubboReference
     private KeycloakService keycloakService;
 
+    @Lazy
+    @Resource
+    private SmsbDepartmentUserService userService;
+
     @Override
     public Response pageByGroupId(SmsbMessageGroupQuery query) {
         Page<SmsbMessageGroupMemberDO> page = new Page<>(query.getPageIndex(), query.getPageSize());
@@ -60,8 +68,11 @@ public class SmsbMessageGroupMemberServiceImpl extends ServiceImpl<SmsbMessageGr
             KeycloakUserCO keycloakUser = userMap.get(member.getUserId());
             member.setEmail(Objects.nonNull(keycloakUser) ? keycloakUser.getEmail() : null);
             member.setPhone(Objects.nonNull(keycloakUser) ? keycloakUser.getPhone() : null);
-            member.setRecipientType(memberMap.get(member.getId()).getRecipientType());
-            member.setEnabled(memberMap.get(member.getId()).getEnabled());
+            SmsbMessageGroupMemberDO memberDO = memberMap.get(member.getId());
+            member.setRecipientType(memberDO.getRecipientType());
+            member.setEnabled(memberDO.getEnabled());
+            member.setCreateTime(memberDO.getCreateTime());
+            member.setUpdateTime(memberDO.getUpdateTime());
         });
 
         smsbMessageMemberCOS = smsbMessageMemberCOS.stream()
@@ -126,30 +137,39 @@ public class SmsbMessageGroupMemberServiceImpl extends ServiceImpl<SmsbMessageGr
 
     @Override
     public Response updateByDepartmentUserId(SmsbMessageMemberUpdateDto updateDto) {
-        // 获取有效的主送人信息
-        List<SmsbMessageGroupMemberDO> curList = lambdaQuery()
-            .eq(SmsbMessageGroupMemberDO::getGroupId, updateDto.getGroupId())
-            .eq(SmsbMessageGroupMemberDO::getEnabled, 1)
-            .eq(SmsbMessageGroupMemberDO::getRecipientType, 1)
-            .list();
-
-        // 修改用户状态、主抄送类型时,如果修改的是将主送修改成抄送,则要判断该用户是否是唯一的主送,如果是,则报错提示
-        if (Objects.equals(curList.size(), 1) && Objects.equals(updateDto.getDepartmentUserId(), curList.get(0).getDepartmentUserId())) {
-            if (Objects.nonNull(updateDto.getRecipientType()) && updateDto.getRecipientType() == 2) {
-                return Response.buildFailure("400","请至少保留一个收件人");
-            }
-            if (Objects.nonNull(updateDto.getEnabled()) && updateDto.getEnabled() == 0) {
-                return Response.buildFailure("400","请至少保留一个启用的收件人");
-            }
+//        // 获取有效的主送人信息
+//        List<SmsbMessageGroupMemberDO> curList = lambdaQuery()
+//            .eq(SmsbMessageGroupMemberDO::getGroupId, updateDto.getGroupId())
+//            .eq(SmsbMessageGroupMemberDO::getEnabled, 1)
+//            .eq(SmsbMessageGroupMemberDO::getRecipientType, 1)
+//            .list();
+//
+//        // 修改用户状态、主抄送类型时,如果修改的是将主送修改成抄送,则要判断该用户是否是唯一的主送,如果是,则报错提示
+//        if (Objects.equals(curList.size(), 1) && Objects.equals(updateDto.getDepartmentUserId(), curList.get(0).getDepartmentUserId())) {
+//            if (Objects.nonNull(updateDto.getRecipientType()) && updateDto.getRecipientType() == 2) {
+//                return Response.buildFailure("400","请至少保留一个收件人");
+//            }
+//            if (Objects.nonNull(updateDto.getEnabled()) && updateDto.getEnabled() == 0) {
+//                return Response.buildFailure("400","请至少保留一个启用的收件人");
+//            }
+//        }
+        boolean update;
+        if (Objects.nonNull(updateDto.getRecipientType())) {
+            // 主抄送类型只改该分组下的
+            update = this.update(new LambdaUpdateWrapper<SmsbMessageGroupMemberDO>()
+                .eq(SmsbMessageGroupMemberDO::getDepartmentUserId, updateDto.getDepartmentUserId())
+                .eq(SmsbMessageGroupMemberDO::getGroupId, updateDto.getGroupId())
+                .set(SmsbMessageGroupMemberDO::getRecipientType, updateDto.getRecipientType())
+                .set(SmsbMessageGroupMemberDO::getUpdateTime, LocalDateTime.now()));
+        } else {
+            // 启用禁用时各个分组都要修改状态,也要把安播云账号的启用禁用状态修改
+            SwitchDTO switchDTO = new SwitchDTO();
+            switchDTO.setUserId(userService.listByIds(Collections.singletonList(updateDto.getDepartmentUserId())).get(0).getUserId());
+            switchDTO.setEnabled(updateDto.getEnabled() == 1 ? Boolean.TRUE : Boolean.FALSE);
+            update = userService.enableSwitch(switchDTO);
+            keycloakService.updateUser(switchDTO.getUserId(), switchDTO, Constant.ENABLE);
         }
 
-        boolean update = this.update(new LambdaUpdateWrapper<SmsbMessageGroupMemberDO>()
-            .eq(SmsbMessageGroupMemberDO::getDepartmentUserId, updateDto.getDepartmentUserId())
-            .eq(SmsbMessageGroupMemberDO::getGroupId, updateDto.getGroupId())
-            .set(Objects.nonNull(updateDto.getEnabled()), SmsbMessageGroupMemberDO::getEnabled, updateDto.getEnabled())
-            .set(Objects.nonNull(updateDto.getRecipientType()), SmsbMessageGroupMemberDO::getRecipientType, updateDto.getRecipientType())
-            .set(SmsbMessageGroupMemberDO::getUpdateTime, LocalDateTime.now()));
-
         return update ? Response.buildSuccess() : Response.buildFailure("400", "更新失败");
     }
 
@@ -180,6 +200,7 @@ public class SmsbMessageGroupMemberServiceImpl extends ServiceImpl<SmsbMessageGr
 
     @Override
     public Map<Long, List<KeycloakUserCO>> getByGroupIds(List<Long> groupIds) {
+        // key为分组id,value为要通知的用户
         Map<Long, List<SmsbMessageGroupMemberDO>> memberMap = lambdaQuery()
             .in(!CollectionUtils.isEmpty(groupIds), SmsbMessageGroupMemberDO::getGroupId, groupIds)
             .eq(SmsbMessageGroupMemberDO::getEnabled, 1)
@@ -197,16 +218,24 @@ public class SmsbMessageGroupMemberServiceImpl extends ServiceImpl<SmsbMessageGr
             memberDOList.forEach(
                 memberDO -> {
                     // 获取要通知人的keycloak信息,并设置主送抄送类型
-                    String userId = smsbDepartmentUserService
+                    List<String> userList = 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);
+                        .collect(Collectors.toList());
+                    if (CollectionUtils.isEmpty(userList)) {
+                        // 账号已注销,删除该用户在表中的信息
+                        this.removeById(memberDO.getId());
+                        return;
+                    }
+                    List<KeycloakUserCO> keycloakUserList = keycloakService.getUsersByIds(Collections.singletonList(userList.get(0)));
+                    if (CollectionUtils.isEmpty(keycloakUserList)) {
+                        // keycloak上无用户信息
+                        log.error("无用户对应的keycloak信息");
+                        return;
+                    }
+                    keycloakUserList.get(0).setRecipientType(memberDO.getRecipientType());
+                    keycloakUserCOS.add(keycloakUserList.get(0));
                 }
             );
             resultMap.put(groupId, keycloakUserCOS);
@@ -215,6 +244,15 @@ public class SmsbMessageGroupMemberServiceImpl extends ServiceImpl<SmsbMessageGr
         return resultMap;
     }
 
+    @Override
+    public void updateStatus(SmsbMessageMemberUpdateDto updateDto) {
+        this.update(new LambdaUpdateWrapper<SmsbMessageGroupMemberDO>()
+            .eq(SmsbMessageGroupMemberDO::getDepartmentUserId, updateDto.getDepartmentUserId())
+            .set(SmsbMessageGroupMemberDO::getEnabled, updateDto.getEnabled())
+            .set(SmsbMessageGroupMemberDO::getUpdateTime, LocalDateTime.now()));
+    }
+
+
     // 新增、修改、删除组员时要保证组内必须至少有一个收件人
     private Boolean isLeagle (Long groupId){
         return lambdaQuery().eq(SmsbMessageGroupMemberDO::getGroupId, groupId)

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

@@ -42,4 +42,9 @@ public interface SmsbMessageGroupMemberService {
      */
     Map<Long, List<KeycloakUserCO>> getByGroupIds(List<Long> groupIds);
 
+    /**
+     * 根据用户部门主键id,更新状态
+     */
+    void updateStatus(SmsbMessageMemberUpdateDto updateDto);
+
 }

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

@@ -1,8 +1,11 @@
 package com.inspur.customer.object.org;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
+import java.time.LocalDateTime;
 
 /**
  * @Author fantingwei
@@ -51,4 +54,12 @@ public class SmsbMessageMemberCO implements Serializable {
      * 用户启停用状态
      */
     private Integer enabled;
+
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
 }