Sfoglia il codice sorgente

feature: 同步功能完善
1.修复部门删除没有同步到本地的bug

luo.yibo@datuai.com 1 anno fa
parent
commit
17ad418a9c

+ 3 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java

@@ -194,4 +194,7 @@ public interface RemoteUserService {
     Boolean delByUserId(Long userId, Long operatorId);
 
     Boolean insertOrUpdateLocalUser(RemoteUserBo remoteUserBo);
+
+    Boolean delLocalUserId(Long userId, Long operatorId);
+
 }

+ 4 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteUserBo.java

@@ -194,6 +194,10 @@ public class RemoteUserBo implements Serializable {
      */
     private Long userNo;
 
+    /**
+     * 删除标志
+     */
+    private String delFlag;
     public boolean isSuperAdmin() {
         return UserConstants.SUPER_ADMIN_ID.equals(this.userId);
     }

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java

@@ -227,6 +227,6 @@ public class RemoteDeptServiceImpl implements RemoteDeptService {
 
     @Override
     public Boolean deleteLocalDept(Long deptId) {
-        return deleteLocalDept(deptId);
+        return sysDeptService.deleteLocalDept(deptId);
     }
 }

+ 5 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java

@@ -434,6 +434,11 @@ public class RemoteUserServiceImpl implements RemoteUserService {
         return userService.insertOrUpdateLocalUser(bo);
     }
 
+    @Override
+    public Boolean delLocalUserId(Long userId, Long operatorId) {
+        return userService.delLocalUserId(userId, operatorId);
+    }
+
     private void setUserDept(SysUserBo bo, RemoteUserBo remoteBo){
         List<UserDeptBo> userDeptBoList = new ArrayList<>();
         if(ObjectUtil.isNotEmpty(remoteBo.getUserDeptList())){

+ 2 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java

@@ -313,4 +313,6 @@ public interface ISysUserService {
     Boolean delByUserAndDeptId(Long userId, Long deptId, Long operatorId);
 
     Boolean insertOrUpdateLocalUser(SysUserBo user);
+
+    Boolean delLocalUserId(Long userId, Long operatorId);
 }

+ 10 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
@@ -810,6 +811,15 @@ public class SysUserServiceImpl implements ISysUserService {
         return TenantHelper.ignore(() -> baseMapper.insertOrUpdate(entity));
     }
 
+    @Override
+    public Boolean delLocalUserId(Long userId, Long operatorId) {
+        return TenantHelper.ignore(() -> baseMapper.update(null, new LambdaUpdateWrapper<SysUser>()
+            .set(SysUser::getDelFlag, DefaultConstants.DELETED)
+            .set(SysUser::getUpdateBy, operatorId)
+            .set(SysUser::getUpdateTime, DateUtil.date())
+            .eq(SysUser::getUserId, userId)) > 0);
+    }
+
     private void insertUserDept(SysUserBo bo, List<UserDeptBo> userDeptBoList) {
         // 将已有的人员部门关系设置成非主部门
         userDeptService.updateMainDeptByUserId(bo.getUserId());

+ 6 - 8
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/local/SystemEventStrategyImpl.java

@@ -45,7 +45,7 @@ public class SystemEventStrategyImpl implements IYktEventStrategy {
                 RemoteDeptBo remoteDeptBo = JSONUtil.toBean(JSONUtil.parseObj(msg), RemoteDeptBo.class);
                 log.info("[处理云端->本地部门同步请求]-[部门信息:{}]", JSONUtil.toJsonStr(remoteDeptBo));
                 if(remoteDeptBo.getDelFlag().equals(DefaultConstants.DELETED)){
-
+                    remoteDeptService.deleteLocalDept(remoteDeptBo.getDeptId());
                 }
                 else {
                     remoteDeptService.insertOrUpdateLocalDept(remoteDeptBo);
@@ -81,13 +81,11 @@ public class SystemEventStrategyImpl implements IYktEventStrategy {
             case EventTypeConstants.USER -> {
                 RemoteUserBo remoteBo = JSONUtil.toBean(JSONUtil.parseObj(msg), RemoteUserBo.class);
                 log.info("[处理云端->本地用户同步请求]-[用户信息:{}]", JSONUtil.toJsonStr(remoteBo));
-                remoteUserService.insertOrUpdateLocalUser(remoteBo);
-                // RemoteUserVo remoteVo = remoteUserService.selectUserById(remoteBo.getUserId());
-                // if (ObjectUtil.isEmpty(remoteVo)) {
-                //     remoteUserService.insertUser(remoteBo);
-                // } else {
-                //     remoteUserService.updateUser(remoteBo);
-                // }
+                if (remoteBo.getDelFlag().equals(DefaultConstants.DELETED)) {
+                    remoteUserService.delLocalUserId(remoteBo.getUserId(), remoteBo.getUpdateBy());
+                } else {
+                    remoteUserService.insertOrUpdateLocalUser(remoteBo);
+                }
             }
         }
     }

+ 25 - 8
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/domain/vo/SysUserVo.java

@@ -2,21 +2,13 @@ package org.dromara.server.sync.domain.vo;
 
 import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
-import org.dromara.common.encrypt.annotation.EncryptField;
-import org.dromara.common.encrypt.enumd.AlgorithmType;
-import org.dromara.common.translation.annotation.Translation;
-import org.dromara.common.translation.constant.TransConstant;
 import org.dromara.server.sync.domain.SysUser;
 
 import java.io.Serial;
 import java.io.Serializable;
 import java.util.Date;
-import java.util.List;
 
 
 /**
@@ -194,4 +186,29 @@ public class SysUserVo implements Serializable {
      * 第三方人员状态
      */
     private String userState;
+
+    /**
+     * 删除标志
+     */
+    private String delFlag;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
 }

+ 4 - 0
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/domain/vo/UserAccountVo.java

@@ -210,6 +210,10 @@ public class UserAccountVo implements Serializable {
      */
     private String tenantId;
 
+    /**
+     * 删除标志
+     */
+    private String delFlag;
     /**
      * 微信二维码使用
      */

+ 9 - 0
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/service/IUserAccountService.java

@@ -26,4 +26,13 @@ public interface IUserAccountService {
      */
     Boolean doUserAccount(UserAccountBo bo);
 
+    /**
+     * 根据userId删除账户
+     * @param userId 用户Id
+     * @return 删除结果
+     */
+    Boolean deleteById(String userId);
+
+    Boolean deleteById(Long userId,Long operationId);
+
 }

+ 34 - 0
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/service/impl/UserAccountServiceImpl.java

@@ -1,14 +1,18 @@
 package org.dromara.server.sync.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.message.kafka.constant.EventTypeConstants;
 import org.dromara.common.message.kafka.constant.KafkaTopicConstants;
 import org.dromara.common.message.kafka.enums.EventSenderEnum;
+import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.server.sync.business.card.CardBusiness;
 import org.dromara.server.sync.domain.UserAccount;
 import org.dromara.server.sync.domain.bo.UserAccountBo;
@@ -90,4 +94,34 @@ public class UserAccountServiceImpl implements IUserAccountService {
         kafkaNormalProducer.sendKafkaMessage(KafkaTopicConstants.SYNC_DATA_TOPIC, EventTypeConstants.ACCOUNT, EventSenderEnum.BACKSTAGE.code(), vo);
         return true;
     }
+    /**
+     * 根据userId删除账户
+     * @param userId 用户Id
+     * @return 删除结果
+     */
+    @Override
+    public Boolean deleteById(String userId) {
+        UserAccountVo vo = baseMapper.selectVoById(userId);
+        vo.setDelFlag(DefaultConstants.DELETED);
+        kafkaNormalProducer.sendKafkaMessage(KafkaTopicConstants.SYNC_DATA_TOPIC, EventTypeConstants.ACCOUNT, EventSenderEnum.BACKSTAGE.code(), vo);
+        return TenantHelper.ignore(() -> baseMapper.update(null, new LambdaUpdateWrapper<UserAccount>()
+            .set(UserAccount::getDelFlag, DefaultConstants.DELETED)
+            .set(UserAccount::getUpdateBy, userId)
+            .set(UserAccount::getUpdateTime, DateUtil.date())
+            .eq(UserAccount::getUserId, userId)) > 0);
+    }
+
+    @Override
+    public Boolean deleteById(Long userId, Long operationId) {
+        UserAccountVo vo = baseMapper.selectVoById(userId);
+        vo.setDelFlag(DefaultConstants.DELETED);
+        vo.setUpdateBy(operationId);
+        vo.setUpdateTime(DateUtil.date());
+        kafkaNormalProducer.sendKafkaMessage(KafkaTopicConstants.SYNC_DATA_TOPIC, EventTypeConstants.ACCOUNT, EventSenderEnum.BACKSTAGE.code(), vo);
+        return TenantHelper.ignore(() -> baseMapper.update(null, new LambdaUpdateWrapper<UserAccount>()
+            .set(UserAccount::getDelFlag, DefaultConstants.DELETED)
+            .set(UserAccount::getUpdateBy, operationId)
+            .set(UserAccount::getUpdateTime, DateUtil.date())
+            .eq(UserAccount::getUserId, userId)) > 0);
+    }
 }

+ 8 - 0
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/service/impl/UserServiceImpl.java

@@ -94,12 +94,20 @@ public class UserServiceImpl implements IUserService {
         baseMapper.delUserRoleByUserId(userId);
         // 删除人员部门对应关系
         baseMapper.delUserDeptByUserId(DefaultConstants.DELETED, operatorId.toString(), DateUtil.formatDate(new Date()), userId);
+
+        SysUserVo vo = TenantHelper.ignore(()->baseMapper.selectVoById(userId));
+        vo.setDelFlag(DefaultConstants.DELETED);
+        vo.setUpdateBy(operatorId);
+
+        kafkaNormalProducer.sendKafkaMessage(KafkaTopicConstants.SYNC_DATA_TOPIC, EventTypeConstants.USER, EventSenderEnum.SYSTEM.code(), vo);
+        userAccountService.deleteById(Long.valueOf(userId), operatorId);
         // 删除人员
         return TenantHelper.ignore(() -> baseMapper.update(null, new LambdaUpdateWrapper<SysUser>()
                                                                      .set(SysUser::getDelFlag, DefaultConstants.DELETED)
                                                                      .set(SysUser::getUpdateBy, operatorId)
                                                                      .set(SysUser::getUpdateTime, DateUtil.date())
                                                                      .eq(SysUser::getUserId, userId)) > 0);
+
     }
 
     private void insertUserDept(SysUserBo bo, List<UserDeptBo> userDeptBoList) {