Parcourir la source

feature: 同步业务完善
1.人员修改时根据是否推送消息开关推送修改后的部门信息

luo.yibo@datuai.com il y a 1 an
Parent
commit
c9ac9ac098
17 fichiers modifiés avec 275 ajouts et 38 suppressions
  1. 9 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemoteUserAccountBo.java
  2. 20 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/vo/RemoteUserAccountVo.java
  3. 18 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/bo/RemoteUserBo.java
  4. 15 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteUserVo.java
  5. 10 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CloudMqEventConstants.java
  6. 29 9
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/bo/PtUserAccountBo.java
  7. 20 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/vo/PtUserAccountVo.java
  8. 19 7
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java
  9. 16 4
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java
  10. 3 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java
  11. 24 8
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
  12. 4 4
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/user/SyncRemoteUserService.java
  13. 41 0
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/cloud/AccountPushEventStrategyImpl.java
  14. 1 2
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/cloud/DeptPushEventStrategyImpl.java
  15. 41 0
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/cloud/UserPushEventStrategyImpl.java
  16. 1 1
      ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/service/SyncGraduateService.java
  17. 4 2
      ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/service/SyncTrainService.java

+ 9 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemoteUserAccountBo.java

@@ -137,5 +137,14 @@ public class RemoteUserAccountBo implements Serializable {
      * 第三方人员状态
      */
     private String userState;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
 
 }

+ 20 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/vo/RemoteUserAccountVo.java

@@ -148,4 +148,24 @@ public class RemoteUserAccountVo implements Serializable {
      * 部门唯一身份标识,第三方统一身份认证ID
      */
     private String otherDeptId;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
 }

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

@@ -176,6 +176,24 @@ public class RemoteUserBo implements Serializable {
     private Long cardId;
 
     private Long cardNo;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
     /*
      * 人员部门列表,一人多部门情况
      */

+ 15 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/domain/vo/RemoteUserVo.java

@@ -96,4 +96,19 @@ public class RemoteUserVo implements Serializable {
      */
     private Date createTime;
 
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
 }

+ 10 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CloudMqEventConstants.java

@@ -26,4 +26,14 @@ public interface CloudMqEventConstants {
      * 部门数据
      */
     String DEPT = SENDER + "00002";
+
+    /**
+     * 用户数据
+     */
+    String USER = SENDER + "00003";
+
+    /**
+     * 一卡通账户数据
+     */
+    String ACCOUNT = SENDER + "00004";
 }

+ 29 - 9
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/bo/PtUserAccountBo.java

@@ -188,15 +188,15 @@ public class PtUserAccountBo extends TenantEntity {
      */
     private String remark;
 
-    /**
-     * 最后登录IP
-     */
-    private String loginIp;
-
-    /**
-     * 最后登录时间
-     */
-    private Date loginDate;
+    // /**
+    //  * 最后登录IP
+    //  */
+    // private String loginIp;
+    //
+    // /**
+    //  * 最后登录时间
+    //  */
+    // private Date loginDate;
 
     /**
      * 账户状态,见sys_normal_disable字典类型
@@ -224,6 +224,26 @@ public class PtUserAccountBo extends TenantEntity {
 
     private Long cardNo;
 
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
     // 构建器类
     public static class Builder {
         private Long userId;

+ 20 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/vo/PtUserAccountVo.java

@@ -241,4 +241,24 @@ public class PtUserAccountVo implements Serializable {
      * 部门唯一身份标识,第三方统一身份认证ID
      */
     private String otherDeptId;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
 }

+ 19 - 7
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java

@@ -3,25 +3,18 @@ package org.dromara.system.domain.bo;
 import io.github.linpeilie.annotations.AutoMapper;
 import jakarta.validation.constraints.Email;
 import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.Size;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 import org.dromara.common.core.constant.UserConstants;
-import org.dromara.common.core.validate.AddGroup;
-import org.dromara.common.core.validate.EditGroup;
 import org.dromara.common.core.xss.Xss;
 import org.dromara.common.encrypt.annotation.EncryptField;
 import org.dromara.common.encrypt.enumd.AlgorithmType;
-import org.dromara.common.mybatis.core.domain.BaseEntity;
-import org.dromara.common.sensitive.annotation.Sensitive;
-import org.dromara.common.sensitive.core.SensitiveStrategy;
 import org.dromara.common.tenant.core.TenantEntity;
 import org.dromara.system.domain.SysUser;
 
 import java.io.Serial;
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -171,6 +164,25 @@ public class SysUserBo extends TenantEntity {
 
     private Long cardNo;
 
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
     public SysUserBo(Long userId) {
         this.userId = userId;
     }

+ 16 - 4
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java

@@ -2,13 +2,11 @@ package org.dromara.system.domain.vo;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import org.dromara.common.sensitive.annotation.Sensitive;
-import org.dromara.common.sensitive.core.SensitiveStrategy;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
 import org.dromara.common.translation.annotation.Translation;
 import org.dromara.common.translation.constant.TransConstant;
 import org.dromara.system.domain.SysUser;
-import io.github.linpeilie.annotations.AutoMapper;
-import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
@@ -136,6 +134,20 @@ public class SysUserVo implements Serializable {
      * 创建时间
      */
     private Date createTime;
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
 
     /**
      * 部门名

+ 3 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java

@@ -293,7 +293,9 @@ public class SysDeptServiceImpl implements ISysDeptService {
     public SysDeptVo insertDeptBo(SysDeptBo bo) {
         int count = this.insertDept(bo);
         if (count > 0) {
-            return baseMapper.selectVoById(bo.getDeptId());
+            SysDeptVo vo = baseMapper.selectVoById(bo.getDeptId());
+            sendCloudConsume(vo);
+            return vo;
         }
         return null;
     }

+ 24 - 8
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

@@ -17,10 +17,7 @@ import org.apache.dubbo.config.annotation.DubboReference;
 import org.dromara.backstage.api.RemotePtParameterService;
 import org.dromara.backstage.api.RemoteUserAccountService;
 import org.dromara.backstage.api.domain.bo.RemoteUserAccountBo;
-import org.dromara.common.core.constant.CacheNames;
-import org.dromara.common.core.constant.Constants;
-import org.dromara.common.core.constant.HttpStatus;
-import org.dromara.common.core.constant.UserConstants;
+import org.dromara.common.core.constant.*;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.exception.user.UserException;
@@ -30,6 +27,8 @@ import org.dromara.common.core.utils.StreamUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.encrypt.interceptor.MybatisDecryptInterceptor;
 import org.dromara.common.encrypt.interceptor.MybatisEncryptInterceptor;
+import org.dromara.common.message.kafka.domain.KafkaHeader;
+import org.dromara.common.message.kafka.domain.KafkaMessage;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.helper.DataBaseHelper;
@@ -39,11 +38,9 @@ import org.dromara.system.domain.SysUser;
 import org.dromara.system.domain.SysUserRole;
 import org.dromara.system.domain.bo.SysUserBo;
 import org.dromara.system.domain.bo.UserDeptBo;
-import org.dromara.system.domain.vo.SysPostVo;
-import org.dromara.system.domain.vo.SysRoleVo;
-import org.dromara.system.domain.vo.SysUserExportVo;
-import org.dromara.system.domain.vo.SysUserVo;
+import org.dromara.system.domain.vo.*;
 import org.dromara.system.mapper.*;
+import org.dromara.system.mq.KafkaNormalProducer;
 import org.dromara.system.service.ISysUserService;
 import org.dromara.system.service.IUserDeptService;
 import org.springframework.cache.annotation.CacheEvict;
@@ -71,6 +68,7 @@ public class SysUserServiceImpl implements ISysUserService {
     private final SysPostMapper postMapper;
     private final SysUserRoleMapper userRoleMapper;
     private final IUserDeptService userDeptService;
+    private final KafkaNormalProducer kafkaNormalProducer;
 
     @DubboReference
     private final RemotePtParameterService remotePtParameterService;
@@ -384,6 +382,7 @@ public class SysUserServiceImpl implements ISysUserService {
                 remoteUserAccountBo.setAccountStatus("0");
                 remoteUserAccountService.insertByBo(remoteUserAccountBo);
             }
+            sendCloudConsume(baseMapper.selectVoById(user.getUserId()));
             return rows;
         } catch (Exception e) {
             log.error(e.getMessage(), e);
@@ -734,4 +733,21 @@ public class SysUserServiceImpl implements ISysUserService {
             });
         }
     }
+
+    private void sendCloudConsume(SysUserVo vo) {
+        String pushData = remotePtParameterService.getPtParameterByKey("PUSH_MQ_DATA");
+        if (ObjectUtil.isNotEmpty(pushData) && ObjectUtil.equals(pushData, "1")) {
+            KafkaMessage<SysUserVo> message = new KafkaMessage<>();
+            KafkaHeader header = message.getHeader();
+            header.setTimestamp(System.currentTimeMillis());
+            header.setEventId(CloudMqEventConstants.USER);
+            header.setEventType(CloudMqEventConstants.USER);
+            header.setSender(CloudMqEventConstants.SENDER);
+
+            message.setHeader(header);
+            message.setBody(vo);
+
+            kafkaNormalProducer.sendKafkaMessage(CloudMqEventConstants.TOPIC, message);
+        }
+    }
 }

+ 4 - 4
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/user/SyncRemoteUserService.java

@@ -116,10 +116,10 @@ public class SyncRemoteUserService {
      */
     private R<RemoteUserBo> setUserInfo(ResourcePerson person, RemoteUserVo remoteUserVo) {
         String tenantId = person.getTenantId();
-        if (StrUtil.isEmpty(tenantId)) {
-            tenantId = DefaultConstants.TENANT_ID;
-            person.setTenantId(tenantId);
-        }
+        // if (StrUtil.isEmpty(tenantId)) {
+        //     tenantId = DefaultConstants.TENANT_ID;
+        //     person.setTenantId(tenantId);
+        // }
         // 获取人员对应的部门信息
         RemoteDeptVo remoteDeptVo = remoteDeptService.selectDeptByOtherId(person.getDeptId(), tenantId);
         if (remoteDeptVo == null) {

+ 41 - 0
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/cloud/AccountPushEventStrategyImpl.java

@@ -0,0 +1,41 @@
+package org.dromara.server.mq.event.kafka.impl.cloud;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.constant.CloudMqEventConstants;
+import org.dromara.server.mq.event.kafka.IEventStrategy;
+import org.dromara.system.api.RemoteUserService;
+import org.dromara.system.api.domain.bo.RemoteUserBo;
+import org.springframework.stereotype.Service;
+
+/**
+ * @ClassName AccountPushEventStrategyImpl
+ * @Description 一卡通账户消息队列数据处理
+ * @Author luoyibo
+ * @Date 2024-11-12 11:52
+ * @Version 1.0
+ * @since jdk17
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service(CloudMqEventConstants.USER)
+public class AccountPushEventStrategyImpl implements IEventStrategy {
+    @DubboReference
+    private final RemoteUserService remoteUserService;
+
+    @Override
+    public void doMsgHandle(JSONObject data) {
+        RemoteUserBo remoteUserBo = JSONUtil.toBean(data, RemoteUserBo.class);
+
+        log.info("[处理用户消息队列]-[用户信息:{}]", JSONUtil.toJsonStr(remoteUserBo));
+        if (ObjectUtil.isNotEmpty(remoteUserBo.getUserId())) {
+            remoteUserService.updateUser(remoteUserBo);
+        } else {
+            remoteUserService.insertUser(remoteUserBo);
+        }
+    }
+}

+ 1 - 2
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/teacher/DeptPushEventStrategyImpl.java → ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/cloud/DeptPushEventStrategyImpl.java

@@ -1,4 +1,4 @@
-package org.dromara.server.mq.event.kafka.impl.teacher;
+package org.dromara.server.mq.event.kafka.impl.cloud;
 
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONObject;
@@ -37,6 +37,5 @@ public class DeptPushEventStrategyImpl implements IEventStrategy {
         } else {
             remoteDeptService.insertDept(remoteDeptBo);
         }
-
     }
 }

+ 41 - 0
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/cloud/UserPushEventStrategyImpl.java

@@ -0,0 +1,41 @@
+package org.dromara.server.mq.event.kafka.impl.cloud;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.constant.CloudMqEventConstants;
+import org.dromara.server.mq.event.kafka.IEventStrategy;
+import org.dromara.system.api.RemoteUserService;
+import org.dromara.system.api.domain.bo.RemoteUserBo;
+import org.springframework.stereotype.Service;
+
+/**
+ * @ClassName UserPushEventStrategyImpl
+ * @Description 用户消息队列数据处理
+ * @Author luoyibo
+ * @Date 2024-11-12 11:52
+ * @Version 1.0
+ * @since jdk17
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service(CloudMqEventConstants.USER)
+public class UserPushEventStrategyImpl implements IEventStrategy {
+    @DubboReference
+    private final RemoteUserService remoteUserService;
+
+    @Override
+    public void doMsgHandle(JSONObject data) {
+        RemoteUserBo remoteUserBo = JSONUtil.toBean(data, RemoteUserBo.class);
+
+        log.info("[处理用户消息队列]-[用户信息:{}]", JSONUtil.toJsonStr(remoteUserBo));
+        if (ObjectUtil.isNotEmpty(remoteUserBo.getUserId())) {
+            remoteUserService.updateUser(remoteUserBo);
+        } else {
+            remoteUserService.insertUser(remoteUserBo);
+        }
+    }
+}

+ 1 - 1
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/service/SyncGraduateService.java

@@ -123,7 +123,7 @@ public class SyncGraduateService {
             person.setCategory("3");
             person.setPostCode(DefaultConstants.GRADUATE_CODE);
             person.setOperatorId(DefaultConstants.FULL_SYNC_ADMIN);
-            person.setTenantId(DefaultConstants.TENANT_ID);
+            person.setTenantId(defaultConfig.getTenantId());
             resourcePersonList.add(person);
         }
         return resourcePersonList;

+ 4 - 2
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/service/SyncTrainService.java

@@ -7,6 +7,7 @@ import cn.hutool.http.HttpResponse;
 import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.config.DefaultConfig;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.server.base.service.dept.strategy.SyncDeptStrategyContent;
 import org.dromara.server.base.service.user.strategy.SyncUserStrategyContent;
@@ -38,6 +39,7 @@ import java.util.List;
 public class SyncTrainService {
     private final SyncDeptStrategyContent syncDeptStrategyContent;
     private final SyncUserStrategyContent syncUserStrategyContent;
+    private final DefaultConfig defaultConfig;
 
     /**
      * 全量同步教务培训班级信息
@@ -526,7 +528,7 @@ public class SyncTrainService {
         dept.setPlanCount(Integer.parseInt(list.get(10)));
         dept.setDept_num(list.get(34));
         // TODO 2024-11-15 luoyibo 这处租户Id原则上是从全量接口获取,暂时设置为默认值
-        dept.setTenantId(DefaultConstants.TENANT_ID);
+        dept.setTenantId(defaultConfig.getTenantId());
         dept.setOperatorId(DefaultConstants.FULL_SYNC_ADMIN);
         return dept;
     }
@@ -539,7 +541,6 @@ public class SyncTrainService {
      */
     @NotNull
     private List<ResourcePersonDept> getResourcePersonDeptList(SyncFullDataBo classTraineeDataBo) {
-        String delFlag = "2";
         List<ResourcePersonDept> resourcePersonDeptList = new ArrayList<>();
         for (List<String> personDeptSr : classTraineeDataBo.getResponseParam().getResourceInfos().get(0).getDataInfo()) {
             ResourcePersonDept personDept = new ResourcePersonDept();
@@ -582,6 +583,7 @@ public class SyncTrainService {
             person.setIdNumber(list.get(6));
             person.setCategory("2");
             person.setOperatorId(DefaultConstants.FULL_SYNC_ADMIN);
+            person.setTenantId(defaultConfig.getTenantId());
             resourcePersonList.add(person);
         }
         return resourcePersonList;