From 03c94624d0b3bd266863e5a35193435a35452c35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Tue, 7 Apr 2026 00:50:51 +0800 Subject: [PATCH] =?UTF-8?q?fix(sync):=20=E4=BF=AE=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=90=8C=E6=AD=A5=E5=88=B0=20websopy=20=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=A0=BC=E5=BC=8F=E5=8F=8A=E5=AE=8C=E6=95=B4?= =?UTF-8?q?=E6=80=A7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修正同步数据中的 tenant 字段名称为 tenant_id 以匹配 websopy 数据库字段 - 增加 tenantId 值的日志输出便于调试和校验 - 在 wx 官方控制器同步用户时先从数据库重新加载用户数据,保证同步数据完整性 - 若重新加载失败则回退使用当前用户对象进行同步 - 优化用户角色保存后同步操作的可靠性和准确性 --- .../controller/WxOfficialController.java | 20 +++++++++++++++---- .../system/service/UserSyncService.java | 6 +++++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java b/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java index 90b7083..6a5b7d1 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java @@ -274,8 +274,14 @@ public class WxOfficialController extends BaseController { userRole.setTenantId(user.getTenantId()); userRole.setRoleId(user.getRoleId()); userRoleService.save(userRole); - // 同步到 websopy - userSyncService.syncUserToWebsopy(user); + // 同步到 websopy - 从数据库重新加载确保有完整数据 + User savedUser = userService.getAllByUserId(String.valueOf(userId)); + if (savedUser != null) { + userSyncService.syncUserToWebsopy(savedUser); + } else { + // 如果无法重新加载,使用当前对象 + userSyncService.syncUserToWebsopy(user); + } } System.out.println("新微信公众号用户 userId = " + userId); } @@ -690,8 +696,14 @@ public class WxOfficialController extends BaseController { userRole.setTenantId(user.getTenantId()); userRole.setRoleId(user.getRoleId()); userRoleService.save(userRole); - // 同步到 websopy - userSyncService.syncUserToWebsopy(user); + // 同步到 websopy - 从数据库重新加载确保有完整数据 + User savedUser = userService.getAllByUserId(String.valueOf(userId)); + if (savedUser != null) { + userSyncService.syncUserToWebsopy(savedUser); + } else { + // 如果无法重新加载,使用当前对象 + userSyncService.syncUserToWebsopy(user); + } } System.out.println("数据不一致:创建新用户 userId = " + userId); } diff --git a/src/main/java/com/gxwebsoft/common/system/service/UserSyncService.java b/src/main/java/com/gxwebsoft/common/system/service/UserSyncService.java index 2326252..4c42d5b 100644 --- a/src/main/java/com/gxwebsoft/common/system/service/UserSyncService.java +++ b/src/main/java/com/gxwebsoft/common/system/service/UserSyncService.java @@ -65,8 +65,9 @@ public class UserSyncService { userCache.put("status", user.getStatus()); userCache.put("updateTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); // tenantId 可能为 null,但在 websopy 端是必填字段,至少传 0 + // 注意:websopy 端数据库字段是 tenant_id(下划线),不是 tenantId(驼峰) Integer tenantIdValue = user.getTenantId() != null ? user.getTenantId() : 0; - userCache.put("tenantId", tenantIdValue); + userCache.put("tenant_id", tenantIdValue); String url = websopyBaseUrl + "/api/app/user-sync/single"; String body = userCache.toJSONString(); @@ -74,6 +75,9 @@ public class UserSyncService { log.info("同步用户到 websopy: userId={}, username={}, nickname={}, phone={}, tenantId={}, url={}", user.getUserId(), user.getUsername(), user.getNickname(), user.getPhone(), user.getTenantId(), url); log.debug("同步用户请求体: {}", body); + // 额外日志:tenantId 值检查 + log.debug("tenantId检查 - 原始值: {}, 转换后值: {}, 请求体中tenant_id字段: {}", + user.getTenantId(), tenantIdValue, userCache.get("tenant_id")); // 发送 HTTP POST 请求 Map headers = new HashMap<>();