普兆健康管家后端代码仓库
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.
 
 
 
 
 
 

8.4 KiB

小程序用户实体类配置说明

配置目标

完善小程序用户实体类,直接使用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 新增字段

// 基础信息
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 核心特性

@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 配置变更

@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
  • RealmShiroRealm
  • 适用场景:后台管理系统的所有用户

2. 小程序用户

  • 实体类AppletUser
  • 登录对象AppletUser(直接使用实体类)
  • RealmAppletShiroRealm
  • 适用场景:小程序相关的所有用户

配置优势

1. 完全独立的用户体系

  • 小程序和后台使用不同的用户表
  • 可以配置不同的用户属性和业务逻辑
  • 支持不同的用户管理策略

2. 更好的业务适配

  • 小程序用户包含健康相关的字段(BMI、身高、体重等)
  • 支持会员等级和积分系统
  • 包含紧急联系人等小程序特有功能

3. 便于维护和扩展

  • 小程序用户相关的逻辑独立管理
  • 可以独立升级和配置
  • 便于调试和问题排查

使用示例

1. 小程序用户注册

@PostMapping("/register")
@Operation(summary = "小程序用户注册")
public Result<AppletUser> register(@RequestBody AppletUser appletUser) {
    // 小程序用户注册逻辑
    return Result.OK(appletUser);
}

2. 小程序用户登录

@PostMapping("/login")
@Operation(summary = "小程序用户登录")
public Result<AppletUser> login(@RequestBody LoginRequest request) {
    // 小程序用户登录逻辑
    AppletUser loginUser = appletUserService.login(request);
    return Result.OK(loginUser);
}

3. 获取小程序用户信息

@GetMapping("/user/info")
@Operation(summary = "获取小程序用户信息")
public Result<AppletUser> getUserInfo() {
    // 获取当前登录的小程序用户信息
    AppletUser user = (AppletUser) SecurityUtils.getSubject().getPrincipal();
    return Result.OK(user);
}

数据库表结构

applet_user表字段

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. 实现会员系统:实现会员等级和积分系统