普兆健康管家后端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

233 lines
8.4 KiB

  1. # 小程序用户实体类配置说明
  2. ## 配置目标
  3. 完善小程序用户实体类,直接使用AppletUser作为登录对象,实现与后台用户体系的完全分离。
  4. ## 实现方案
  5. ### 1. 完善AppletUser实体类
  6. #### 1.1 修改文件
  7. - `jeecg-boot/jeecg-boot-module/jeecgboot-boot-applet/src/main/java/org/jeecg/modules/appletBackground/appletUser/entity/AppletUser.java`
  8. #### 1.2 新增字段
  9. ```java
  10. // 基础信息
  11. private String username; // 用户名
  12. private String password; // 密码
  13. private String realname; // 真实姓名
  14. private Date birthday; // 生日
  15. private Integer sex; // 性别(1:男 2:女)
  16. private String email; // 邮箱
  17. private Integer status; // 状态(1:正常 2:冻结)
  18. private Integer delFlag; // 删除标志(0代表存在 1代表删除)
  19. private Integer userIdentity; // 用户身份(1 普通用户 2 VIP用户)
  20. // 健康信息
  21. private BigDecimal height; // 身高(cm)
  22. private BigDecimal weight; // 体重(kg)
  23. private Integer age; // 年龄
  24. // 联系信息
  25. private String address; // 地址
  26. private String emergencyContact; // 紧急联系人
  27. private String emergencyPhone; // 紧急联系人电话
  28. // 会员信息
  29. private String memberLevel; // 会员等级
  30. private Integer points; // 积分
  31. // 系统信息
  32. private Date lastLoginTime; // 最后登录时间
  33. private String deviceId; // 设备ID
  34. private String loginIp; // 登录IP
  35. private String remark; // 备注
  36. ```
  37. ### 2. 直接使用AppletUser作为登录对象
  38. #### 2.1 配置说明
  39. - 直接使用`AppletUser`实体类作为登录对象
  40. - 不需要额外的VO类转换
  41. - 简化了代码结构,减少了维护成本
  42. #### 2.2 核心特性
  43. ```java
  44. @Data
  45. @TableName("applet_user")
  46. @Accessors(chain = true)
  47. @EqualsAndHashCode(callSuper = false)
  48. @Schema(description="小程序用户")
  49. public class AppletUser implements Serializable {
  50. // 基础信息
  51. private String id; // 用户ID
  52. private String username; // 用户名
  53. private String realname; // 真实姓名
  54. private String name; // 昵称
  55. private String password; // 密码
  56. private String openid; // 第三方认证id
  57. private String avatar; // 头像
  58. // 健康信息
  59. private BigDecimal bmi; // 体总指数
  60. private BigDecimal fat; // 脂肪
  61. private BigDecimal height; // 身高
  62. private BigDecimal weight; // 体重
  63. private Integer age; // 年龄
  64. // 其他信息
  65. private Integer userIdentity; // 用户身份
  66. private String memberLevel; // 会员等级
  67. private Integer points; // 积分
  68. private String deviceId; // 设备ID
  69. // ... 其他字段
  70. }
  71. ```
  72. ### 3. 修改小程序Realm
  73. #### 3.1 修改文件
  74. - `jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/AppletShiroRealm.java`
  75. #### 3.2 配置变更
  76. ```java
  77. @Override
  78. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
  79. if (principals != null) {
  80. AppletUser appletUser = (AppletUser) principals.getPrimaryPrincipal();
  81. username = appletUser.getUsername();
  82. userId = appletUser.getId();
  83. }
  84. // 小程序专用的权限认证逻辑
  85. return info;
  86. }
  87. @Override
  88. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken auth) throws AuthenticationException {
  89. // 直接使用AppletUser进行身份认证
  90. AppletUser loginUser = this.checkAppletUserTokenIsEffect(token);
  91. return new SimpleAuthenticationInfo(loginUser, token, getName());
  92. }
  93. ```
  94. ## 用户体系分离效果
  95. ### 1. 后台管理系统用户
  96. - **实体类**:`SysUser`
  97. - **登录对象**:`LoginUser`
  98. - **Realm**:`ShiroRealm`
  99. - **适用场景**:后台管理系统的所有用户
  100. ### 2. 小程序用户
  101. - **实体类**:`AppletUser`
  102. - **登录对象**:`AppletUser`(直接使用实体类)
  103. - **Realm**:`AppletShiroRealm`
  104. - **适用场景**:小程序相关的所有用户
  105. ## 配置优势
  106. ### 1. 完全独立的用户体系
  107. - 小程序和后台使用不同的用户表
  108. - 可以配置不同的用户属性和业务逻辑
  109. - 支持不同的用户管理策略
  110. ### 2. 更好的业务适配
  111. - 小程序用户包含健康相关的字段(BMI、身高、体重等)
  112. - 支持会员等级和积分系统
  113. - 包含紧急联系人等小程序特有功能
  114. ### 3. 便于维护和扩展
  115. - 小程序用户相关的逻辑独立管理
  116. - 可以独立升级和配置
  117. - 便于调试和问题排查
  118. ## 使用示例
  119. ### 1. 小程序用户注册
  120. ```java
  121. @PostMapping("/register")
  122. @Operation(summary = "小程序用户注册")
  123. public Result<AppletUser> register(@RequestBody AppletUser appletUser) {
  124. // 小程序用户注册逻辑
  125. return Result.OK(appletUser);
  126. }
  127. ```
  128. ### 2. 小程序用户登录
  129. ```java
  130. @PostMapping("/login")
  131. @Operation(summary = "小程序用户登录")
  132. public Result<AppletUser> login(@RequestBody LoginRequest request) {
  133. // 小程序用户登录逻辑
  134. AppletUser loginUser = appletUserService.login(request);
  135. return Result.OK(loginUser);
  136. }
  137. ```
  138. ### 3. 获取小程序用户信息
  139. ```java
  140. @GetMapping("/user/info")
  141. @Operation(summary = "获取小程序用户信息")
  142. public Result<AppletUser> getUserInfo() {
  143. // 获取当前登录的小程序用户信息
  144. AppletUser user = (AppletUser) SecurityUtils.getSubject().getPrincipal();
  145. return Result.OK(user);
  146. }
  147. ```
  148. ## 数据库表结构
  149. ### applet_user表字段
  150. ```sql
  151. CREATE TABLE `applet_user` (
  152. `id` varchar(32) NOT NULL COMMENT '主键',
  153. `create_by` varchar(32) DEFAULT NULL COMMENT '创建人',
  154. `create_time` datetime DEFAULT NULL COMMENT '创建日期',
  155. `update_by` varchar(32) DEFAULT NULL COMMENT '更新人',
  156. `update_time` datetime DEFAULT NULL COMMENT '更新日期',
  157. `sys_org_code` varchar(64) DEFAULT NULL COMMENT '所属部门',
  158. `name` varchar(100) DEFAULT NULL COMMENT '昵称',
  159. `openid` varchar(100) DEFAULT NULL COMMENT '第三方认证id',
  160. `phone` varchar(45) DEFAULT NULL COMMENT '手机号',
  161. `bmi` decimal(10,2) DEFAULT NULL COMMENT '体总指数',
  162. `fat` decimal(10,2) DEFAULT NULL COMMENT '脂肪',
  163. `avatar` varchar(255) DEFAULT NULL COMMENT '头像',
  164. `username` varchar(100) DEFAULT NULL COMMENT '用户名',
  165. `password` varchar(255) DEFAULT NULL COMMENT '密码',
  166. `realname` varchar(100) DEFAULT NULL COMMENT '真实姓名',
  167. `birthday` date DEFAULT NULL COMMENT '生日',
  168. `sex` int DEFAULT NULL COMMENT '性别(1:男 2:女)',
  169. `email` varchar(45) DEFAULT NULL COMMENT '邮箱',
  170. `status` int DEFAULT NULL COMMENT '状态(1:正常 2:冻结)',
  171. `del_flag` int DEFAULT NULL COMMENT '删除标志(0代表存在 1代表删除)',
  172. `user_identity` int DEFAULT NULL COMMENT '用户身份(1 普通用户 2 VIP用户)',
  173. `height` decimal(10,2) DEFAULT NULL COMMENT '身高(cm)',
  174. `weight` decimal(10,2) DEFAULT NULL COMMENT '体重(kg)',
  175. `age` int DEFAULT NULL COMMENT '年龄',
  176. `address` varchar(500) DEFAULT NULL COMMENT '地址',
  177. `emergency_contact` varchar(100) DEFAULT NULL COMMENT '紧急联系人',
  178. `emergency_phone` varchar(45) DEFAULT NULL COMMENT '紧急联系人电话',
  179. `member_level` varchar(50) DEFAULT NULL COMMENT '会员等级',
  180. `points` int DEFAULT NULL COMMENT '积分',
  181. `last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
  182. `device_id` varchar(100) DEFAULT NULL COMMENT '设备ID',
  183. `login_ip` varchar(100) DEFAULT NULL COMMENT '登录IP',
  184. `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  185. PRIMARY KEY (`id`)
  186. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='小程序用户表';
  187. ```
  188. ## 注意事项
  189. 1. **用户体系隔离**:小程序和后台使用完全不同的用户表
  190. 2. **字段差异**:小程序用户包含健康相关的字段
  191. 3. **业务逻辑**:小程序用户支持会员等级和积分系统
  192. 4. **安全策略**:可以为小程序配置不同的安全策略
  193. 5. **缓存策略**:可以为小程序用户配置独立的缓存策略
  194. ## 后续开发建议
  195. 1. **实现getAppletUser方法**:需要根据实际的AppletUser服务来实现
  196. 2. **添加小程序用户服务**:创建AppletUserService来处理用户相关业务
  197. 3. **配置小程序用户权限**:为小程序用户配置独立的角色和权限体系
  198. 4. **添加健康数据管理**:实现BMI、体重等健康数据的计算和管理
  199. 5. **实现会员系统**:实现会员等级和积分系统