| | |
| | | |
| | | ### 2.7 表结构缺口 |
| | | |
| | | `account_user` 无推荐码、无推荐人字段 → 新增 `my_referral_code`、`referrer_user_id`。 |
| | | `account_user` 无推荐码字段 → 新增 `my_referral_code`;推荐关系复用既有 `referrer_id`(权威库已存在),不新增重复列。 |
| | | |
| | | ### 2.8 既有代码缺陷 |
| | | |
| | |
| | | |
| | | ```sql |
| | | ALTER TABLE `account_user` |
| | | ADD COLUMN `my_referral_code` varchar(20) DEFAULT NULL COMMENT '本人推荐码(注册时生成,全局唯一)' AFTER `remark`, |
| | | ADD COLUMN `referrer_user_id` bigint(20) DEFAULT NULL COMMENT '推荐人会员ID(关联 account_user.user_id)' AFTER `my_referral_code`; |
| | | ADD COLUMN `my_referral_code` varchar(20) DEFAULT NULL COMMENT '本人推荐码(注册时生成,全局唯一)' AFTER `remark`; |
| | | |
| | | -- 推荐码全局唯一:随机生成且不重复使用,逻辑删除行占用不影响业务 |
| | | CREATE UNIQUE INDEX `uk_account_user_referral_code` ON `account_user` (`my_referral_code`); |
| | | -- 推荐关系复用既有 referrer_id(权威库已存在),不新增 referrer_user_id |
| | | ``` |
| | | |
| | | 回滚: |
| | | |
| | | ```sql |
| | | DROP INDEX `uk_account_user_referral_code` ON `account_user`; |
| | | ALTER TABLE `account_user` DROP COLUMN `referrer_user_id`, DROP COLUMN `my_referral_code`; |
| | | ALTER TABLE `account_user` DROP COLUMN `my_referral_code`; |
| | | ``` |
| | | |
| | | 说明: |
| | |
| | | STEP 5: Feign 调 ruoyi-user 注册: |
| | | 5.1 按推荐码查推荐人,不存在抛「推荐人码无效」;推荐人 status=1 抛「推荐人账号异常」 |
| | | 5.2 生成唯一 my_referral_code(随机 8 位大写字母数字,库内查重,冲突重试 ≤5 次) |
| | | 5.3 组装 AccountUser:userName=phone、phone、nickname=phone、myReferralCode、referrerUserId、status=0、delFlag=0 |
| | | 5.3 组装 AccountUser:userName=phone、phone、nickname=phone、myReferralCode、referrerId、status=0、delFlag=0 |
| | | 5.4 插入(无密码,password 为空) |
| | | STEP 6: 删除验证码 key;finally 释放锁 |
| | | ``` |
| | |
| | | |
| | | 通用推荐码(ruoyi-user) |
| | | AccountUserServiceImpl.registerMember 定位推荐人前先判定: |
| | | 命中「配置的通用推荐码」→ 跳过推荐人查询与校验,referrerUserId 留空(不绑定推荐人) |
| | | 否则走原有「按码查推荐人 → 不存在/停用则拒绝」逻辑 |
| | | 命中「配置的通用推荐码」→ 跳过推荐人查询与校验,referrerId 留空(不绑定推荐人); |
| | | 同时直接发放 L4 会员等级(system_level = L4) |
| | | 否则走原有「按码查推荐人 → 不存在/停用则拒绝」逻辑,且不设等级(走库默认值 C) |
| | | ``` |
| | | |
| | | 命中通用码时打印 WARN 日志留痕(手机号脱敏)。 |
| | |
| | | | 服务 | 配置项 | 示例值 | 说明 | |
| | | | --- | --- | --- | --- | |
| | | | ruoyi-auth | `hugray.auth.universal-sms-code` | `999999` | 空 = 关闭;仅 `login` / `register` 场景生效 | |
| | | | ruoyi-user | `hugray.user.universal-referral-code` | `HUGRAY88` | 空 = 关闭;命中则不绑定推荐人 | |
| | | | ruoyi-user | `hugray.user.universal-referral-code` | `HUGRAY88` | 空 = 关闭;命中则不绑定推荐人,且注册用户直接为 L4 等级 | |
| | | |
| | | --- |
| | | |
| | |
| | | |
| | | | 文件 | 改动 | |
| | | | --- | --- | |
| | | | ruoyi-user `domain/AccountUser.java` | 新增 `myReferralCode`、`referrerUserId` 字段与注释、toString | |
| | | | ruoyi-user `domain/AccountUser.java` | 新增 `myReferralCode` 字段与注释、toString;推荐关系复用既有 `referrerId`(源 `referrer_id`) | |
| | | | ruoyi-user `mapper/AccountUserMapper.java` + `resources/mapper/user/AccountUserMapper.xml` | resultMap/列/insert/update 增列;新增 `selectAccountUserByReferralCode` | |
| | | | ruoyi-user `service/impl/AccountUserServiceImpl.insertAccountUser` | 密码为空时跳过加密(当前无条件 `encryptPassword`,C 端无密码会 NPE) | |
| | | | `sql/hugray_account_20261012.sql` | 新增 DDL 脚本 | |
| | |
| | | | 20 | 验证码登录:手机号未注册 | 下发(scene=login)即拦「该手机号未注册,请先注册」;登录接口再兜底,均**不消费验证码** | |
| | | | 21 | 验证码登录:账号停用 / 删除 | 「账号已停用,请联系管理员」/「账号不存在」,校验在消费验证码之前 | |
| | | | 22 | 通用验证码命中(`login` / `register` 且 `hugray.auth.universal-sms-code` 已配置) | 直接放行:不读缓存、不计数、不消费;`reset` / `common` 场景不生效;配置为空即关闭 | |
| | | | 23 | 通用推荐码命中(`hugray.user.universal-referral-code` 已配置且有值) | 跳过推荐人查询与校验,`referrerUserId` 留空(不绑定推荐人);命中通用码时不再校验「推荐人码无效 / 推荐人账号异常」 | |
| | | | 23 | 通用推荐码命中(`hugray.user.universal-referral-code` 已配置且有值) | 跳过推荐人查询与校验,`referrerId` 留空(不绑定推荐人),且注册用户等级直接为 `L4`;命中通用码时不再校验「推荐人码无效 / 推荐人账号异常」 | |
| | | |
| | | --- |
| | | |
| | |
| | | 6. 登录页双按钮(微信一键登录 / 手机验证登录),「手机验证登录」为页内嵌面板;后端 `POST /miniapp/auth/phone/code-login` 与 `SmsSceneEnum.LOGIN` 同步落地。✔ |
| | | 7. 登录页按 `.pen` 设计稿 + `static/` 素材做视觉 1:1 还原(背景装饰、Logo、背书图标、标语卡、按钮尺寸与渐变、协议行、Home 条),规格见 3.5 节。✔ |
| | | 8. 登录页 UI 缺陷修复:微信一键登录恢复通栏;协议行字号 23rpx → 26rpx;展开验证码面板后隐藏「手机验证登录」按钮并在面板内提供「收起」入口。✔ |
| | | 9. 测试便利:通用验证码 `999999`(`hugray.auth.universal-sms-code`,仅 `login` / `register` 生效)+ 通用推荐码 `HUGRAY88`(`hugray.user.universal-referral-code`,命中不绑定推荐人);均通过 nacos 配置开启,配置为空即关闭,命中打印 WARN 留痕。✔ |
| | | 9. 测试便利:通用验证码 `999999`(`hugray.auth.universal-sms-code`,仅 `login` / `register` 生效)+ 通用推荐码 `HUGRAY88`(`hugray.user.universal-referral-code`,命中不绑定推荐人且注册用户直接发放 `L4` 等级);均通过 nacos 配置开启,配置为空即关闭,命中打印 WARN 留痕。✔ |
| | | 10. 注册流程:注册页**无需阅读/勾选协议**(提交仅校验手机号 / 验证码 / 推荐码);注册成功页与登录/注册页视觉统一(渐变底 + 装饰层 + 居中结果区 + 渐变胶囊「返回登录」按钮 + Home 条),规格见 3.7 节。✔ |
| | | |
| | | > 编码顺序:常量 → DDL → Feign/内部接口 → auth 服务与控制器 → 网关配置 → 前端前缀对齐 → `GetDiagnostics` 校验 → 单测。 |