package com.ruoyi.user.domain; import java.util.Date; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import com.ruoyi.common.core.annotation.Excel; import com.ruoyi.common.core.annotation.Excel.ColumnType; import com.ruoyi.common.core.web.domain.BaseEntity; /** * C端会员用户表 account_user * * @author ruoyi */ public class AccountUser extends BaseEntity { private static final long serialVersionUID = 1L; /** 会员ID */ @Excel(name = "会员ID", cellType = ColumnType.NUMERIC) private Long userId; /** * 用户名 * * 注意:属性名刻意用驼峰 userName,与上游 SysUser.userName 一致。网关的 AuthFilter 会 * 给每个转发请求加上请求头 username=<登录名>(SecurityConstants.DETAILS_USERNAME), * 而 Spring 6+ 的 @ModelAttribute 会把请求头一并绑定到命令对象——若此处叫 username, * 列表/导出接口在未显式传参时会被注入当前登录名,导致查询结果被静默过滤(实测列表恒为空)。 */ @Excel(name = "用户名") private String userName; /** 手机号 */ @Excel(name = "手机号") private String phone; /** 密码(BCrypt 存储)。只入不出,避免密码随响应回传 */ @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private String password; /** 昵称 */ @Excel(name = "昵称") private String nickname; /** 头像地址 */ private String avatar; /** 性别(0男 1女 2未知,对齐 sys_user_sex 字典) */ @Excel(name = "性别", readConverterExp = "0=男,1=女,2=未知") private String gender; /** 生日 */ @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "生日", width = 30, dateFormat = "yyyy-MM-dd") private Date birthday; /** 状态(0正常 1停用) */ @Excel(name = "状态", readConverterExp = "0=正常,1=停用") private String status; /** 删除标志(0存在 2删除) */ private String delFlag; public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } @NotBlank(message = "用户名不能为空") @Size(min = 0, max = 64, message = "用户名长度不能超过64个字符") public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Size(min = 0, max = 20, message = "手机号长度不能超过20个字符") public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } @Size(min = 0, max = 20, message = "密码长度必须在5到20个字符之间") public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Size(min = 0, max = 64, message = "昵称长度不能超过64个字符") public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getAvatar() { return avatar; } public void setAvatar(String avatar) { this.avatar = avatar; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getDelFlag() { return delFlag; } public void setDelFlag(String delFlag) { this.delFlag = delFlag; } @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) .append("userId", getUserId()) .append("userName", getUserName()) .append("phone", getPhone()) .append("nickname", getNickname()) .append("avatar", getAvatar()) .append("gender", getGender()) .append("birthday", getBirthday()) .append("status", getStatus()) .append("delFlag", getDelFlag()) .append("createBy", getCreateBy()) .append("createTime", getCreateTime()) .append("updateBy", getUpdateBy()) .append("updateTime", getUpdateTime()) .append("remark", getRemark()) .toString(); } }