fix(sync): 修复用户同步到 websopy 的数据格式及完整性问题

- 修正同步数据中的 tenant 字段名称为 tenant_id 以匹配 websopy 数据库字段
- 增加 tenantId 值的日志输出便于调试和校验
- 在 wx 官方控制器同步用户时先从数据库重新加载用户数据,保证同步数据完整性
- 若重新加载失败则回退使用当前用户对象进行同步
- 优化用户角色保存后同步操作的可靠性和准确性
This commit is contained in:
2026-04-07 00:50:51 +08:00
parent 9ec04fef3a
commit 03c94624d0
2 changed files with 21 additions and 5 deletions

View File

@@ -274,9 +274,15 @@ public class WxOfficialController extends BaseController {
userRole.setTenantId(user.getTenantId());
userRole.setRoleId(user.getRoleId());
userRoleService.save(userRole);
// 同步到 websopy
// 同步到 websopy - 从数据库重新加载确保有完整数据
User savedUser = userService.getAllByUserId(String.valueOf(userId));
if (savedUser != null) {
userSyncService.syncUserToWebsopy(savedUser);
} else {
// 如果无法重新加载,使用当前对象
userSyncService.syncUserToWebsopy(user);
}
}
System.out.println("新微信公众号用户 userId = " + userId);
}
@@ -690,9 +696,15 @@ public class WxOfficialController extends BaseController {
userRole.setTenantId(user.getTenantId());
userRole.setRoleId(user.getRoleId());
userRoleService.save(userRole);
// 同步到 websopy
// 同步到 websopy - 从数据库重新加载确保有完整数据
User savedUser = userService.getAllByUserId(String.valueOf(userId));
if (savedUser != null) {
userSyncService.syncUserToWebsopy(savedUser);
} else {
// 如果无法重新加载,使用当前对象
userSyncService.syncUserToWebsopy(user);
}
}
System.out.println("数据不一致:创建新用户 userId = " + userId);
}

View File

@@ -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<String, String> headers = new HashMap<>();