Przeglądaj źródła

feature: 同步修改测试

luoyb 1 rok temu
rodzic
commit
e156b56679

+ 0 - 1
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/business/kafka/SyncKafkaService.java

@@ -27,7 +27,6 @@ public class SyncKafkaService {
 
     public void syncTeacherDept(JSONObject data) {
         List<ResourceDept> resourceDeptlist = TeacherUtils.getSyncDept(data);
-        //log.info("[业中同步测试->部门同步]-[部门信息:{}]", JSONUtil.toJsonStr(resourceDeptlist));
         ISyncDeptStrategy syncDeptStrategy = SpringUtils.getBean(SyncResourceConstants.HR_DEPT, ISyncDeptStrategy.class);
         syncDeptStrategy.syncDept(resourceDeptlist);
     }

+ 6 - 14
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/domain/SysUser.java

@@ -135,32 +135,32 @@ public class SysUser extends TenantEntity {
     /**
      * 一卡通账户状态(0-未开户  1-已开户  -1已销户)
      */
-    private String accountStatus;
+    //private String accountStatus;
 
     /**
      * 账户是否被冻结,见sys_yes_no字典类型
      */
-    private String freezeStatus;
+    //private String freezeStatus;
 
     /**
      * 消费密码
      */
-    private String consumePwd;
+    //private String consumePwd;
 
     /**
      * 账户流水号
      */
-    private Long userNo;
+    //private Long userNo;
 
     /**
      * 账户卡片类型
      */
-    private Long cardType;
+    //private Long cardType;
 
     /**
      * 账户有效期
      */
-    private Date lifespan;
+    //private Date lifespan;
 
     /**
      * 64位2进制数据,某位的数据1代表具备某个属性
@@ -192,12 +192,4 @@ public class SysUser extends TenantEntity {
      */
     private String userState;
 
-    public SysUser(Long userId) {
-        this.userId = userId;
-    }
-
-    public boolean isSuperAdmin() {
-        return UserConstants.SUPER_ADMIN_ID.equals(this.userId);
-    }
-
 }

+ 73 - 0
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/domain/UserDept.java

@@ -0,0 +1,73 @@
+package org.dromara.server.sync.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.tenant.core.TenantEntity;
+
+import java.io.Serial;
+import java.util.Date;
+
+/**
+ * 用户部门对象 t_user_dept
+ *
+ * @author LionLi
+ * @date 2024-09-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("t_user_dept")
+public class UserDept extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户部门Id,主键
+     */
+    @TableId(value = "user_dept_id")
+    private Long userDeptId;
+
+    /**
+     * 用户Id
+     */
+    private Long userId;
+
+    /**
+     * 部门Id
+     */
+    private Long deptId;
+
+    /**
+     * 岗位Id
+     */
+    private Long postId;
+
+    /**
+     * 是否主部门,见sys_yes_no字典类别
+     */
+    private String mainDept;
+
+    /**
+     * 报到状态,见sys_yes_no字典类别,学员报到专用
+     */
+    private String checkStatus;
+
+    /**
+     * 报到时间,学员报到专用
+     */
+    private Date checkDate;
+
+    /**
+     * 缴费状态,见sys_yes_no字典类别,学员报到专用
+     */
+    private String payStatus;
+
+    /**
+     * 缴费时间,学员报到专用
+     */
+    private Date payDate;
+
+}

+ 199 - 0
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/domain/bo/SysUserBo.java

@@ -0,0 +1,199 @@
+package org.dromara.server.sync.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import jakarta.validation.constraints.Email;
+import jakarta.validation.constraints.NotBlank;
+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.xss.Xss;
+import org.dromara.common.encrypt.annotation.EncryptField;
+import org.dromara.common.encrypt.enumd.AlgorithmType;
+import org.dromara.common.tenant.core.TenantEntity;
+import org.dromara.server.sync.domain.SysUser;
+
+import java.io.Serial;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 用户信息业务对象 sys_user
+ *
+ * @author Michelle.Chung
+ */
+
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = SysUser.class, reverseConvertGenerate = false)
+public class SysUserBo extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 3998379076407791877L;
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+    /**
+     * 岗位Id
+     */
+    private Long postId;
+    /**
+     * 用户账号
+     */
+    @Xss(message = "用户账号不能包含脚本字符")
+    @NotBlank(message = "用户账号不能为空")
+    @Size(min = 0, max = 30, message = "用户账号长度不能超过{max}个字符")
+    private String userName;
+
+    /**
+     * 学/工号
+     */
+    @Xss(message = "学/工号不能包含脚本字符")
+    @NotBlank(message = "学/工号不能为空")
+    @Size(min = 0, max = 30, message = "学/工号长度不能超过{max}个字符")
+    private String userNumb;
+    /**
+     * 用户昵称
+     */
+    private String nickName;
+    /**
+     * 用户姓名
+     */
+    private String realName;
+    /**
+     * 用户类型(sys_user系统用户)
+     */
+    private String userType;
+
+    /**
+     * 用户身份(0=内部用户 1=老师 2=学生 3=家长  4=其他人员)
+     */
+    private String category;
+    /**
+    /**
+     * 用户邮箱
+     */
+    @Email(message = "邮箱格式不正确")
+    @Size(min = 0, max = 50, message = "邮箱长度不能超过{max}个字符")
+    private String email;
+
+    /**
+     * 手机号码
+     */
+    @EncryptField(algorithm = AlgorithmType.BASE64)
+    private String phone;
+
+    /**
+     * 用户性别(0男 1女 2未知)
+     */
+    private String sex;
+
+    /**
+     * 密码
+     */
+    private String password;
+
+    /**
+     * 帐号状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 角色组
+     */
+    @Size(min = 1, message = "用户角色不能为空")
+    private Long[] roleIds;
+
+    /**
+     * 岗位组
+     */
+    //private Long[] postIds;
+
+    /**
+     * 数据权限 当前角色ID
+     */
+    private Long roleId;
+
+    /**
+     * 账户卡片类型
+     */
+    //private Long cardType;
+
+    /**
+     * 账户有效期
+     */
+    //private Date lifespan;
+
+    /**
+     * 身份证号
+     */
+    private String idNumber;
+
+    /**
+     * 第三方统一标识Id
+     */
+    private String otherId;
+    /**
+     * 第三方人员状态
+     */
+    private String userState;
+    /*
+    人员所属部门
+     */
+    List<UserDeptBo> userDeptBoList;
+    /**
+     * 排除不查询的用户(工作流用)
+     */
+    private String excludeUserIds;
+
+    private Long cardId;
+    /**
+     * 卡流水号
+     */
+    //private Long cardNo;
+
+    /**
+     * 用户流水号
+     */
+    //private Long userNo;
+    /**
+     * 创建时间
+     */
+    //private Date createTime;
+    /**
+     * 创建者
+     */
+    //private Long createBy;
+
+    /**
+     * 更新者
+     */
+    //private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    //private Date updateTime;
+
+    //public SysUserBo(Long userId) {
+    //    this.userId = userId;
+    //}
+
+    //public boolean isSuperAdmin() {
+    //    return UserConstants.SUPER_ADMIN_ID.equals(this.userId);
+    //}
+
+}

+ 77 - 0
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/domain/bo/UserDeptBo.java

@@ -0,0 +1,77 @@
+package org.dromara.server.sync.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.server.sync.domain.UserDept;
+
+import java.util.Date;
+
+/**
+ * 用户部门业务对象 t_user_dept
+ *
+ * @author LionLi
+ * @date 2024-09-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = UserDept.class, reverseConvertGenerate = false)
+public class UserDeptBo extends BaseEntity {
+
+    /**
+     * 用户部门Id,主键
+     */
+    @NotNull(message = "用户部门Id,主键不能为空", groups = { EditGroup.class })
+    private Long userDeptId;
+
+    /**
+     * 用户Id
+     */
+    @NotNull(message = "用户Id不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long userId;
+
+    /**
+     * 部门Id
+     */
+    @NotNull(message = "部门Id不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long deptId;
+
+    /**
+     * 岗位Id
+     */
+    @NotNull(message = "岗位Id不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long postId;
+
+    /**
+     * 是否主部门,见sys_yes_no字典类别
+     */
+    @NotBlank(message = "是否主部门不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String mainDept;
+
+    /**
+     * 报到状态,见sys_yes_no字典类别,学员报到专用
+     */
+    private String checkStatus;
+
+    /**
+     * 报到时间,学员报到专用
+     */
+    private Date checkDate;
+
+    /**
+     * 缴费状态,见sys_yes_no字典类别,学员报到专用
+     */
+    private String payStatus;
+
+    /**
+     * 缴费时间,学员报到专用
+     */
+    private Date payDate;
+
+
+}

+ 197 - 0
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/domain/vo/SysUserVo.java

@@ -0,0 +1,197 @@
+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;
+
+
+/**
+ * 用户信息视图对象 sys_user
+ *
+ * @author Michelle.Chung
+ */
+@Data
+@AutoMapper(target = SysUser.class)
+public class SysUserVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 岗位Id
+     */
+    private Long postId;
+
+    /**
+     * 用户账号
+     */
+    private String userName;
+    /**
+     * 学/工号
+     */
+    private String userNumb;
+
+    /**
+     * 用户昵称
+     */
+    private String nickName;
+
+    /**
+     * 用户姓名
+     */
+    private String realName;
+
+    /**
+     * 通信地址
+     */
+    private String address;
+
+    /**
+     * 身份证号
+     */
+    private String idNumber;
+
+    /**
+     * 用户类型(sys_user系统用户)
+     */
+    private String userType;
+
+    /**
+     * 用户身份(0=内部用户 1=老师 2=学生 3=家长  4=其他人员)
+     */
+    private String category;
+    /**
+     * 用户邮箱
+     */
+    private String email;
+
+    /**
+     * 手机号码
+     */
+    private String phone;
+
+    /**
+     * 用户性别
+     */
+    private String sex;
+
+    /**
+     * 用户头像
+     */
+    private Long avatar;
+
+    /**
+     * 密码
+     */
+    @TableField(
+        insertStrategy = FieldStrategy.NOT_EMPTY,
+        updateStrategy = FieldStrategy.NOT_EMPTY,
+        whereStrategy = FieldStrategy.NOT_EMPTY
+    )
+    private String password;
+
+    /**
+     * 帐号状态(0正常 1停用)
+     */
+    private String status;
+
+
+    /**
+     * 最后登录IP
+     */
+    private String loginIp;
+
+    /**
+     * 最后登录时间
+     */
+    private Date loginDate;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 一卡通账户状态(0-未开户  1-已开户  -1已销户)
+     */
+    //private String accountStatus;
+
+    /**
+     * 账户是否被冻结,见sys_yes_no字典类型
+     */
+    //private String freezeStatus;
+
+    /**
+     * 消费密码
+     */
+    //private String consumePwd;
+
+    /**
+     * 账户流水号
+     */
+    //private Long userNo;
+
+    /**
+     * 账户卡片类型
+     */
+    //private Long cardType;
+
+    /**
+     * 账户有效期
+     */
+    //private Date lifespan;
+
+    /**
+     * 64位2进制数据,某位的数据1代表具备某个属性
+     */
+    private Long userAttr;
+
+    /**
+     * 人脸照片地址
+     */
+    private String photo;
+
+    /**
+     * 人员编制,对应 ZXXBZLB 字典类型
+     */
+    private String formation;
+
+    /**
+     * 是否隐藏,见sys_yes_no字典类型,内置的系统账号是需要隐藏的
+     */
+    private String hidden;
+
+    /**
+     * 唯一身份标识,第三方统一身份认证ID
+     */
+    private String otherId;
+
+    /**
+     * 第三方人员状态
+     */
+    private String userState;
+}

+ 0 - 1
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/service/impl/DeptServiceImpl.java

@@ -39,7 +39,6 @@ public class DeptServiceImpl implements IDeptService {
     public SysDeptVo selectByOtherId(String otherId, String tenantId) {
         return TenantHelper.ignore(
             () -> deptMapper.selectVoOne(new LambdaQueryWrapper<SysDept>().eq(SysDept::getOtherId, otherId).eq(SysDept::getTenantId, tenantId)));
-
     }
 
     @Override

+ 0 - 1
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/strategy/dept/impl/HrDeptStrategyImpl.java

@@ -35,7 +35,6 @@ import java.util.List;
 @RequiredArgsConstructor
 @Service(SyncResourceConstants.HR_DEPT)
 public class HrDeptStrategyImpl implements ISyncDeptStrategy {
-    private final SyncRemoteDeptService syncRemoteDeptService;
     private final IDeptService deptService;
 
     @Override

+ 32 - 0
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/strategy/user/ISyncUserStrategy.java

@@ -0,0 +1,32 @@
+package org.dromara.server.sync.strategy.user;
+
+import org.dromara.server.common.domain.bo.ResourcePerson;
+
+import java.util.List;
+
+/**
+ * name: ISyncUserStrategy
+ * package: org.dromara.server.base.user.service.strategy
+ * description: 人员同步写入策略
+ * date: 2024-10-23 11:13:28 11:13
+ *
+ * @author luoyibo
+ * @version 0.1
+ * @since JDK 1.8
+ */
+public interface ISyncUserStrategy {
+
+    /**
+     * 人员同步处理
+     * @param persons 源人员列表
+     * @return 同步结果
+     */
+    boolean syncUser(List<ResourcePerson> persons);
+
+    /**
+     * 人员同步删除处理
+     * @param persons 源人员列表
+     * @return 同步结果
+     */
+    boolean syncDelUser(List<ResourcePerson> persons);
+}

+ 66 - 0
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/strategy/user/impl/SyncTeacherStrategyImpl.java

@@ -0,0 +1,66 @@
+package org.dromara.server.sync.strategy.user.impl;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.domain.model.ErrorInfo;
+import org.dromara.common.json.utils.JsonUtils;
+import org.dromara.server.base.service.user.SyncRemoteUserService;
+import org.dromara.server.base.service.user.strategy.ISyncUserStrategy;
+import org.dromara.server.common.constant.SyncResourceConstants;
+import org.dromara.server.common.domain.bo.ResourcePerson;
+import org.dromara.system.api.domain.vo.RemoteUserVo;
+import org.springframework.stereotype.Service;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * name: SyncTeacherStrategyImpl
+ * package: org.dromara.server.base.dept.service.strategy.impl
+ * description: 教职工同步处理策略
+ * date: 2024-10-18 14:40:23 14:40
+ *
+ * @author luoyibo
+ * @version 0.1
+ * @since JDK 1.8
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service(SyncResourceConstants.TEACHER)
+public class SyncTeacherStrategyImpl implements ISyncUserStrategy {
+    private final SyncRemoteUserService syncUserService;
+
+    @Override
+    public boolean syncUser(List<ResourcePerson> persons) {
+        List<String> syncMessage = new ArrayList<>();
+
+        persons.forEach(person -> {
+            R<RemoteUserVo> result = syncUserService.syncPeron(person);
+            if (result.getCode() == R.SUCCESS) {
+                syncMessage.add(MessageFormat.format("[同步教职工成功]-[{0}]", JsonUtils.toJsonString(person)));
+            } else {
+                syncMessage.add(MessageFormat.format("[同步教职工失败]-[{0}]-[{1}]", JsonUtils.toJsonString(person), result.getMsg()));
+            }
+        });
+        syncMessage.forEach(log::info);
+        return true;
+    }
+
+    @Override
+    public boolean syncDelUser(List<ResourcePerson> persons) {
+        List<String> syncDelMessage = new ArrayList<>();
+        persons.forEach(person -> {
+            R<ErrorInfo> result = syncUserService.syncDelPeron(person);
+            if (R.isSuccess(result)) {
+                syncDelMessage.add(MessageFormat.format("[同步删除教职工成功]-[{0}]", JsonUtils.toJsonString(person)));
+            } else {
+                syncDelMessage.add(MessageFormat.format("[同步删除教职工失败]-[{0}]-[{1}]", JsonUtils.toJsonString(person), result.getMsg()));
+            }
+
+        });
+        syncDelMessage.forEach(System.out::println);
+        return true;
+    }
+}