ExternalUserSyncService.java 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package com.xuekairui.user.service;
  2. import lombok.Data;
  3. import java.util.List;
  4. import java.util.Map;
  5. /**
  6. * 外部用户系统(小程序后台)同步接口
  7. * <p>
  8. * 用于与外部小程序后台系统进行用户数据同步。
  9. * 默认提供基于 HTTP 的实现({@link com.xuekairui.user.service.impl.ExternalUserSyncServiceImpl}),
  10. * 后续可替换为 RPC、MQ 等方式。
  11. * <p>
  12. * 设计原则:
  13. * <ul>
  14. * <li>所有方法应具备容错能力,外部系统不可用时不应阻塞本地登录流程</li>
  15. * <li>返回值使用 Optional 语义(null 表示不存在或查询失败)</li>
  16. * </ul>
  17. *
  18. * @author ProPrice Team
  19. * @since 2026-07-06
  20. */
  21. public interface ExternalUserSyncService {
  22. /**
  23. * 检查用户是否存在于外部系统
  24. *
  25. * @param unionId 微信 UnionID
  26. * @return true=存在, false=不存在或外部系统不可用
  27. */
  28. boolean userExists(String unionId);
  29. /**
  30. * 在外部系统注册新用户
  31. *
  32. * @param userInfo 用户信息
  33. * @return 外部系统用户ID,失败返回 null
  34. */
  35. String registerUser(ExternalUserInfo userInfo);
  36. /**
  37. * 从外部系统拉取用户证书数据
  38. *
  39. * @param unionId 微信 UnionID
  40. * @return 证书数据列表,无证书或失败返回空列表
  41. */
  42. List<CertificateData> getCertificates(String unionId);
  43. /**
  44. * 外部系统用户信息
  45. */
  46. @Data
  47. class ExternalUserInfo {
  48. /** 微信 UnionID */
  49. private String unionId;
  50. /** 小程序 OpenID */
  51. private String miniProgramOpenId;
  52. /** 手机号 */
  53. private String phone;
  54. /** 昵称 */
  55. private String nickname;
  56. /** 头像 */
  57. private String avatar;
  58. }
  59. /**
  60. * 外部系统证书数据
  61. */
  62. @Data
  63. class CertificateData {
  64. /** 证书类型:BUSINESS_LICENSE / PHARMACY_LICENSE / MEDICAL_DEVICE_FILING */
  65. private String type;
  66. /** 外部系统记录ID */
  67. private String externalId;
  68. /** 证书字段数据(key 为字段名,value 为字段值) */
  69. private Map<String, Object> data;
  70. }
  71. }