# 小程序用户实体类配置说明 ## 配置目标 完善小程序用户实体类,直接使用AppletUser作为登录对象,实现与后台用户体系的完全分离。 ## 实现方案 ### 1. 完善AppletUser实体类 #### 1.1 修改文件 - `jeecg-boot/jeecg-boot-module/jeecgboot-boot-applet/src/main/java/org/jeecg/modules/appletBackground/appletUser/entity/AppletUser.java` #### 1.2 新增字段 ```java // 基础信息 private String username; // 用户名 private String password; // 密码 private String realname; // 真实姓名 private Date birthday; // 生日 private Integer sex; // 性别(1:男 2:女) private String email; // 邮箱 private Integer status; // 状态(1:正常 2:冻结) private Integer delFlag; // 删除标志(0代表存在 1代表删除) private Integer userIdentity; // 用户身份(1 普通用户 2 VIP用户) // 健康信息 private BigDecimal height; // 身高(cm) private BigDecimal weight; // 体重(kg) private Integer age; // 年龄 // 联系信息 private String address; // 地址 private String emergencyContact; // 紧急联系人 private String emergencyPhone; // 紧急联系人电话 // 会员信息 private String memberLevel; // 会员等级 private Integer points; // 积分 // 系统信息 private Date lastLoginTime; // 最后登录时间 private String deviceId; // 设备ID private String loginIp; // 登录IP private String remark; // 备注 ``` ### 2. 直接使用AppletUser作为登录对象 #### 2.1 配置说明 - 直接使用`AppletUser`实体类作为登录对象 - 不需要额外的VO类转换 - 简化了代码结构,减少了维护成本 #### 2.2 核心特性 ```java @Data @TableName("applet_user") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) @Schema(description="小程序用户") public class AppletUser implements Serializable { // 基础信息 private String id; // 用户ID private String username; // 用户名 private String realname; // 真实姓名 private String name; // 昵称 private String password; // 密码 private String openid; // 第三方认证id private String avatar; // 头像 // 健康信息 private BigDecimal bmi; // 体总指数 private BigDecimal fat; // 脂肪 private BigDecimal height; // 身高 private BigDecimal weight; // 体重 private Integer age; // 年龄 // 其他信息 private Integer userIdentity; // 用户身份 private String memberLevel; // 会员等级 private Integer points; // 积分 private String deviceId; // 设备ID // ... 其他字段 } ``` ### 3. 修改小程序Realm #### 3.1 修改文件 - `jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/AppletShiroRealm.java` #### 3.2 配置变更 ```java @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { if (principals != null) { AppletUser appletUser = (AppletUser) principals.getPrimaryPrincipal(); username = appletUser.getUsername(); userId = appletUser.getId(); } // 小程序专用的权限认证逻辑 return info; } @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken auth) throws AuthenticationException { // 直接使用AppletUser进行身份认证 AppletUser loginUser = this.checkAppletUserTokenIsEffect(token); return new SimpleAuthenticationInfo(loginUser, token, getName()); } ``` ## 用户体系分离效果 ### 1. 后台管理系统用户 - **实体类**:`SysUser` - **登录对象**:`LoginUser` - **Realm**:`ShiroRealm` - **适用场景**:后台管理系统的所有用户 ### 2. 小程序用户 - **实体类**:`AppletUser` - **登录对象**:`AppletUser`(直接使用实体类) - **Realm**:`AppletShiroRealm` - **适用场景**:小程序相关的所有用户 ## 配置优势 ### 1. 完全独立的用户体系 - 小程序和后台使用不同的用户表 - 可以配置不同的用户属性和业务逻辑 - 支持不同的用户管理策略 ### 2. 更好的业务适配 - 小程序用户包含健康相关的字段(BMI、身高、体重等) - 支持会员等级和积分系统 - 包含紧急联系人等小程序特有功能 ### 3. 便于维护和扩展 - 小程序用户相关的逻辑独立管理 - 可以独立升级和配置 - 便于调试和问题排查 ## 使用示例 ### 1. 小程序用户注册 ```java @PostMapping("/register") @Operation(summary = "小程序用户注册") public Result register(@RequestBody AppletUser appletUser) { // 小程序用户注册逻辑 return Result.OK(appletUser); } ``` ### 2. 小程序用户登录 ```java @PostMapping("/login") @Operation(summary = "小程序用户登录") public Result login(@RequestBody LoginRequest request) { // 小程序用户登录逻辑 AppletUser loginUser = appletUserService.login(request); return Result.OK(loginUser); } ``` ### 3. 获取小程序用户信息 ```java @GetMapping("/user/info") @Operation(summary = "获取小程序用户信息") public Result getUserInfo() { // 获取当前登录的小程序用户信息 AppletUser user = (AppletUser) SecurityUtils.getSubject().getPrincipal(); return Result.OK(user); } ``` ## 数据库表结构 ### applet_user表字段 ```sql CREATE TABLE `applet_user` ( `id` varchar(32) NOT NULL COMMENT '主键', `create_by` varchar(32) DEFAULT NULL COMMENT '创建人', `create_time` datetime DEFAULT NULL COMMENT '创建日期', `update_by` varchar(32) DEFAULT NULL COMMENT '更新人', `update_time` datetime DEFAULT NULL COMMENT '更新日期', `sys_org_code` varchar(64) DEFAULT NULL COMMENT '所属部门', `name` varchar(100) DEFAULT NULL COMMENT '昵称', `openid` varchar(100) DEFAULT NULL COMMENT '第三方认证id', `phone` varchar(45) DEFAULT NULL COMMENT '手机号', `bmi` decimal(10,2) DEFAULT NULL COMMENT '体总指数', `fat` decimal(10,2) DEFAULT NULL COMMENT '脂肪', `avatar` varchar(255) DEFAULT NULL COMMENT '头像', `username` varchar(100) DEFAULT NULL COMMENT '用户名', `password` varchar(255) DEFAULT NULL COMMENT '密码', `realname` varchar(100) DEFAULT NULL COMMENT '真实姓名', `birthday` date DEFAULT NULL COMMENT '生日', `sex` int DEFAULT NULL COMMENT '性别(1:男 2:女)', `email` varchar(45) DEFAULT NULL COMMENT '邮箱', `status` int DEFAULT NULL COMMENT '状态(1:正常 2:冻结)', `del_flag` int DEFAULT NULL COMMENT '删除标志(0代表存在 1代表删除)', `user_identity` int DEFAULT NULL COMMENT '用户身份(1 普通用户 2 VIP用户)', `height` decimal(10,2) DEFAULT NULL COMMENT '身高(cm)', `weight` decimal(10,2) DEFAULT NULL COMMENT '体重(kg)', `age` int DEFAULT NULL COMMENT '年龄', `address` varchar(500) DEFAULT NULL COMMENT '地址', `emergency_contact` varchar(100) DEFAULT NULL COMMENT '紧急联系人', `emergency_phone` varchar(45) DEFAULT NULL COMMENT '紧急联系人电话', `member_level` varchar(50) DEFAULT NULL COMMENT '会员等级', `points` int DEFAULT NULL COMMENT '积分', `last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间', `device_id` varchar(100) DEFAULT NULL COMMENT '设备ID', `login_ip` varchar(100) DEFAULT NULL COMMENT '登录IP', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='小程序用户表'; ``` ## 注意事项 1. **用户体系隔离**:小程序和后台使用完全不同的用户表 2. **字段差异**:小程序用户包含健康相关的字段 3. **业务逻辑**:小程序用户支持会员等级和积分系统 4. **安全策略**:可以为小程序配置不同的安全策略 5. **缓存策略**:可以为小程序用户配置独立的缓存策略 ## 后续开发建议 1. **实现getAppletUser方法**:需要根据实际的AppletUser服务来实现 2. **添加小程序用户服务**:创建AppletUserService来处理用户相关业务 3. **配置小程序用户权限**:为小程序用户配置独立的角色和权限体系 4. **添加健康数据管理**:实现BMI、体重等健康数据的计算和管理 5. **实现会员系统**:实现会员等级和积分系统