package com.ruoyi.user.domain.vo; import com.ruoyi.user.domain.AccountProvider; /** * 服务商展示对象 * * 承载 join 与聚合出来的派生列:登录账号(account_user.username)、已授权数 * (account_user 里 supplier_id 指向本服务商的会员,按 system_level 分组计数)。 * * 这些列刻意不放进 AccountProvider 实体:实体的 insert/update 用 <if> 动态拼列, * 任何非本表列的属性都会被误捕成 SQL 列名,导致 Unknown column 错误 * (同 AccountCityCompanyVo 的注释)。 * * 详情接口复用本类,但**不含任何密码列**:password 读出来就是 BCrypt 密文, * 回给前端既没用又多一处泄露面(AccountUser.password 是 WRITE_ONLY,也只是防了它自己那条链路)。 * * @author ruoyi */ public class AccountProviderVo extends AccountProvider { private static final long serialVersionUID = 1L; /** * 登录账号(account_user.username)。 * 详情接口回填表单的「登录账号」用它,列表的「账号」列也用它。 */ private String userName; /** * 服务商名称筛选关键字(列表页「服务商名称」输入框)。 * * 只作为查询条件,不作为展示列——它同时糊匹配登录账号、昵称与联系人三个字段 * (见 AccountProviderMapper.xml 的列表注释)。不复用 userName 当条件, * 否则看代码的人会以为「输入框里填的是账号,怎么昵称也命中」。 */ private String providerName; /** 已授权数:L1(supplier_id 指向本服务商的会员数) */ private Integer l1Granted; /** 已授权数:L2 */ private Integer l2Granted; /** 已授权数:L3 */ private Integer l3Granted; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getProviderName() { return providerName; } public void setProviderName(String providerName) { this.providerName = providerName; } public Integer getL1Granted() { return l1Granted; } public void setL1Granted(Integer l1Granted) { this.l1Granted = l1Granted; } public Integer getL2Granted() { return l2Granted; } public void setL2Granted(Integer l2Granted) { this.l2Granted = l2Granted; } public Integer getL3Granted() { return l3Granted; } public void setL3Granted(Integer l3Granted) { this.l3Granted = l3Granted; } }