update:调整数据同步用户-部门,用户-岗位同步顺序

This commit is contained in:
hewencai
2025-12-22 11:03:15 +08:00
parent 9b0e63a33e
commit 7ef5545dc0
15 changed files with 494 additions and 102 deletions

View File

@@ -1,56 +1,101 @@
package com.zt.plat.framework.databus.client.handler.userdept;
import com.zt.plat.module.databus.api.data.DatabusUserDeptData;
import com.zt.plat.module.system.api.userdept.UserDeptApi;
import com.zt.plat.module.system.api.userdept.dto.UserDeptSaveReqDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;
/**
* 用户-部门关系同步服务实现
* 用户-部门关系同步服务实现(通过 Feign API 调用远程服务)
* <p>
* 使用条件:
* 1. zt.databus.sync.client.enabled=true
* 2. 系统中存在 UserDeptApi 接口Feign 客户端)
* <p>
* 注意:由于用户-部门关系通常集成在用户管理中,此实现为占位符。
* 分公司可以根据实际情况:
* 1. 自定义实现此接口,直接操作本地数据库
* 2. 或者通过用户管理 API 间接处理关联关系
* 如果分公司需要自定义实现,可以创建自己的 UserDeptSyncService Bean
* 此默认实现会自动失效(@ConditionalOnMissingBean
*
* @author ZT
*/
@Slf4j
@Service
@ConditionalOnProperty(prefix = "zt.databus.sync.client", name = "enabled", havingValue = "true")
@ConditionalOnClass(name = "com.zt.plat.module.system.api.userdept.UserDeptApi")
public class UserDeptSyncServiceImpl implements UserDeptSyncService {
@Autowired(required = false)
private UserDeptApi userDeptApi; // Feign 远程调用接口
@Override
public void create(DatabusUserDeptData data) {
log.info("[UserDeptSync] 收到创建用户-部门关系请求, userId={}, deptId={}",
data.getUserId(), data.getDeptId());
log.warn("[UserDeptSync] 用户-部门关系同步服务需要分公司自定义实现,当前为占位符实现");
// TODO: 分公司需要实现此方法,通过本地 API 或直接数据库操作完成同步
if (userDeptApi == null) {
log.warn("[UserDeptSync] UserDeptApi未注入跳过创建用户-部门关系, userId={}", data.getUserId());
return;
}
UserDeptSaveReqDTO dto = buildUserDeptDTO(data);
userDeptApi.createUserDept(dto).checkError();
log.info("[UserDeptSync] 用户-部门关系创建成功, userId={}, deptId={}", data.getUserId(), data.getDeptId());
}
@Override
public void update(DatabusUserDeptData data) {
log.info("[UserDeptSync] 收到更新用户-部门关系请求, userId={}, deptId={}",
data.getUserId(), data.getDeptId());
log.warn("[UserDeptSync] 用户-部门关系同步服务需要分公司自定义实现,当前为占位符实现");
// TODO: 分公司需要实现此方法
if (userDeptApi == null) {
log.warn("[UserDeptSync] UserDeptApi未注入跳过更新用户-部门关系, userId={}", data.getUserId());
return;
}
UserDeptSaveReqDTO dto = buildUserDeptDTO(data);
userDeptApi.updateUserDept(dto).checkError();
log.info("[UserDeptSync] 用户-部门关系更新成功, userId={}, deptId={}", data.getUserId(), data.getDeptId());
}
@Override
public void delete(Long id) {
log.info("[UserDeptSync] 收到删除用户-部门关系请求, id={}", id);
log.warn("[UserDeptSync] 用户-部门关系同步服务需要分公司自定义实现,当前为占位符实现");
// TODO: 分公司需要实现此方法
if (userDeptApi == null) {
log.warn("[UserDeptSync] UserDeptApi未注入跳过删除用户-部门关系, id={}", id);
return;
}
userDeptApi.deleteUserDept(id).checkError();
log.info("[UserDeptSync] 用户-部门关系删除成功, id={}", id);
}
@Override
public void fullSync(DatabusUserDeptData data) {
log.info("[UserDeptSync] 收到全量同步用户-部门关系请求, userId={}, deptId={}",
data.getUserId(), data.getDeptId());
log.warn("[UserDeptSync] 用户-部门关系同步服务需要分公司自定义实现,当前为占位符实现");
// TODO: 分公司需要实现此方法,逻辑:存在则更新,不存在则插入
if (userDeptApi == null) {
log.warn("[UserDeptSync] UserDeptApi未注入跳过全量同步用户-部门关系, userId={}", data.getUserId());
return;
}
UserDeptSaveReqDTO dto = buildUserDeptDTO(data);
try {
// 尝试获取,存在则更新,不存在则创建
var existing = userDeptApi.getUserDept(dto.getId());
if (existing.isSuccess() && existing.getData() != null) {
userDeptApi.updateUserDept(dto).checkError();
log.info("[UserDeptSync] 用户-部门关系全量同步-更新成功, id={}", dto.getId());
} else {
userDeptApi.createUserDept(dto).checkError();
log.info("[UserDeptSync] 用户-部门关系全量同步-创建成功, id={}", dto.getId());
}
} catch (Exception e) {
// 获取失败,尝试创建
log.warn("[UserDeptSync] 用户-部门关系获取失败,尝试创建, id={}", dto.getId());
userDeptApi.createUserDept(dto).checkError();
log.info("[UserDeptSync] 用户-部门关系全量同步-创建成功, id={}", dto.getId());
}
}
/**
* 构建用户部门关系 DTO用于 Feign 调用)
*/
private UserDeptSaveReqDTO buildUserDeptDTO(DatabusUserDeptData data) {
UserDeptSaveReqDTO dto = new UserDeptSaveReqDTO();
dto.setId(data.getId());
dto.setUserId(data.getUserId());
dto.setDeptId(data.getDeptId());
dto.setRemark(data.getRemark());
return dto;
}
}

View File

@@ -1,56 +1,100 @@
package com.zt.plat.framework.databus.client.handler.userpost;
import com.zt.plat.module.databus.api.data.DatabusUserPostData;
import com.zt.plat.module.system.api.userpost.UserPostApi;
import com.zt.plat.module.system.api.userpost.dto.UserPostSaveReqDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;
/**
* 用户-岗位关系同步服务实现
* 用户-岗位关系同步服务实现(通过 Feign API 调用远程服务)
* <p>
* 使用条件:
* 1. zt.databus.sync.client.enabled=true
* 2. 系统中存在 UserPostApi 接口Feign 客户端)
* <p>
* 注意:由于用户-岗位关系通常集成在用户管理中,此实现为占位符。
* 分公司可以根据实际情况:
* 1. 自定义实现此接口,直接操作本地数据库
* 2. 或者通过用户管理 API 间接处理关联关系
* 如果分公司需要自定义实现,可以创建自己的 UserPostSyncService Bean
* 此默认实现会自动失效(@ConditionalOnMissingBean
*
* @author ZT
*/
@Slf4j
@Service
@ConditionalOnProperty(prefix = "zt.databus.sync.client", name = "enabled", havingValue = "true")
@ConditionalOnClass(name = "com.zt.plat.module.system.api.userpost.UserPostApi")
public class UserPostSyncServiceImpl implements UserPostSyncService {
@Autowired(required = false)
private UserPostApi userPostApi; // Feign 远程调用接口
@Override
public void create(DatabusUserPostData data) {
log.info("[UserPostSync] 收到创建用户-岗位关系请求, userId={}, postId={}",
data.getUserId(), data.getPostId());
log.warn("[UserPostSync] 用户-岗位关系同步服务需要分公司自定义实现,当前为占位符实现");
// TODO: 分公司需要实现此方法,通过本地 API 或直接数据库操作完成同步
if (userPostApi == null) {
log.warn("[UserPostSync] UserPostApi未注入跳过创建用户-岗位关系, userId={}", data.getUserId());
return;
}
UserPostSaveReqDTO dto = buildUserPostDTO(data);
userPostApi.createUserPost(dto).checkError();
log.info("[UserPostSync] 用户-岗位关系创建成功, userId={}, postId={}", data.getUserId(), data.getPostId());
}
@Override
public void update(DatabusUserPostData data) {
log.info("[UserPostSync] 收到更新用户-岗位关系请求, userId={}, postId={}",
data.getUserId(), data.getPostId());
log.warn("[UserPostSync] 用户-岗位关系同步服务需要分公司自定义实现,当前为占位符实现");
// TODO: 分公司需要实现此方法
if (userPostApi == null) {
log.warn("[UserPostSync] UserPostApi未注入跳过更新用户-岗位关系, userId={}", data.getUserId());
return;
}
UserPostSaveReqDTO dto = buildUserPostDTO(data);
userPostApi.updateUserPost(dto).checkError();
log.info("[UserPostSync] 用户-岗位关系更新成功, userId={}, postId={}", data.getUserId(), data.getPostId());
}
@Override
public void delete(Long id) {
log.info("[UserPostSync] 收到删除用户-岗位关系请求, id={}", id);
log.warn("[UserPostSync] 用户-岗位关系同步服务需要分公司自定义实现,当前为占位符实现");
// TODO: 分公司需要实现此方法
if (userPostApi == null) {
log.warn("[UserPostSync] UserPostApi未注入跳过删除用户-岗位关系, id={}", id);
return;
}
userPostApi.deleteUserPost(id).checkError();
log.info("[UserPostSync] 用户-岗位关系删除成功, id={}", id);
}
@Override
public void fullSync(DatabusUserPostData data) {
log.info("[UserPostSync] 收到全量同步用户-岗位关系请求, userId={}, postId={}",
data.getUserId(), data.getPostId());
log.warn("[UserPostSync] 用户-岗位关系同步服务需要分公司自定义实现,当前为占位符实现");
// TODO: 分公司需要实现此方法,逻辑:存在则更新,不存在则插入
if (userPostApi == null) {
log.warn("[UserPostSync] UserPostApi未注入跳过全量同步用户-岗位关系, userId={}", data.getUserId());
return;
}
UserPostSaveReqDTO dto = buildUserPostDTO(data);
try {
// 尝试获取,存在则更新,不存在则创建
var existing = userPostApi.getUserPost(dto.getId());
if (existing.isSuccess() && existing.getData() != null) {
userPostApi.updateUserPost(dto).checkError();
log.info("[UserPostSync] 用户-岗位关系全量同步-更新成功, id={}", dto.getId());
} else {
userPostApi.createUserPost(dto).checkError();
log.info("[UserPostSync] 用户-岗位关系全量同步-创建成功, id={}", dto.getId());
}
} catch (Exception e) {
// 获取失败,尝试创建
log.warn("[UserPostSync] 用户-岗位关系获取失败,尝试创建, id={}", dto.getId());
userPostApi.createUserPost(dto).checkError();
log.info("[UserPostSync] 用户-岗位关系全量同步-创建成功, id={}", dto.getId());
}
}
/**
* 构建用户岗位关系 DTO用于 Feign 调用)
*/
private UserPostSaveReqDTO buildUserPostDTO(DatabusUserPostData data) {
UserPostSaveReqDTO dto = new UserPostSaveReqDTO();
dto.setId(data.getId());
dto.setUserId(data.getUserId());
dto.setPostId(data.getPostId());
return dto;
}
}