feat(fsgx): 更新用户列表直推/伞下统计并同步测试文档
补充用户列表中的直推人数与伞下订单数统计逻辑,便于验证分销链路数据;同时更新验收与问题文档,记录当前手测结论和检查项。 Made-with: Cursor
This commit is contained in:
@@ -103,11 +103,10 @@
|
||||
- 同设备/同账号异常刷单需支持风控拦截
|
||||
- 后台人工取消订单时,需同步返现逆操作并记录审计日志
|
||||
|
||||
### 3.2 会员等级体系
|
||||
### 3.2 分销等级体系
|
||||
|
||||
| 等级 | 升级条件 | 直推积分奖励 | 伞下积分奖励 | 说明 |
|
||||
|---|---|---:|---:|---|
|
||||
| 普通会员 | 注册即得 | 0 | 0 | 可参与推荐返现 |
|
||||
| 创客 | 直推满3单 | 500 | 0 | 阈值可配置 |
|
||||
| 云店 | 伞下满30单(至少3直推) | 800 | 300 | 级差计算 |
|
||||
| 服务商 | 伞下满100单(至少3直推) | 1000 | 200 | 级差计算 |
|
||||
@@ -132,6 +131,8 @@
|
||||
- 日释放比例默认 0.4%(千分之四),后台可调
|
||||
- 积分不可转赠,不可直接提现
|
||||
- 报单商品不允许积分支付
|
||||
- 更新相关推荐会员(直推积分奖励、伞下积分奖励获得者)的待释放积分(`frozen_points`)
|
||||
- 同时记录报单商品订单产生的待释放积分明细记录:eb_user_bill表中status=0,type=integral,title=直推积分奖励 | 伞下积分奖励
|
||||
|
||||
### 3.4 多单购买与升级联动
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ mysql -u root -p fsgx-shop < pro_v3.5.1/help/migrations/fsgx_v1.sql
|
||||
|
||||
- [ ] 用户B 购买报单商品并支付成功
|
||||
- [ ] 验证用户A 获得第1周期佣金(应为商品价格的 **20%**)
|
||||
- [ ] 验证用户A 的 `frozen_points` 增加(100积分/元)
|
||||
- [ ] 验证用户A 的 `frozen_points` 增加
|
||||
- [ ] 小程序"推荐佣金"页:`cycle_current = 1/3`
|
||||
|
||||
#### Step 3:购买报单商品(第2人)
|
||||
|
||||
@@ -20,7 +20,10 @@
|
||||
|
||||
## 定时任务页面,路径:/admin/system/crontab
|
||||
|
||||
1. **已修复**增加“手动触发”功能按钮,可以手动触发即执行任务立,
|
||||
1. 增加“手动触发”功能按钮,可以手动触发即执行任务立,
|
||||
|
||||
## 用户列表页面,路径:/admin/user/list
|
||||
1. **已修复**“直推人数满、伞下订单数”没有显示数据,参考分销员管理页面实现逻辑(/admin/agent/agent_manage/index)实现数据显示。
|
||||
|
||||
---
|
||||
|
||||
@@ -28,7 +31,7 @@
|
||||
# uniapp移动端
|
||||
|
||||
## 修改密码页面
|
||||
1. 点击获取验证,去除安全验证,直接发送验证码
|
||||
1. **已修复**点击获取验证,去除安全验证,直接发送验证码
|
||||
|
||||
---
|
||||
|
||||
@@ -36,7 +39,16 @@
|
||||
|
||||
## 测试数据:
|
||||
|
||||
1. 测试账号:UID:1, 手机号:18621813282; UID:2, 手机号:15821676725 ;UID:3, 手机号:17887996868 ;
|
||||
UID:4, 手机号:15324401259。
|
||||
2. 推荐关系: uid=1推荐uid=2推荐uid=3推荐uid=4
|
||||
1. 测试账号:UID:1, 手机号:1860001111; UID:2, 手机号:18621813282 ;UID:3, 手机号:17887996868 ;
|
||||
UID:4, 手机号:15324401259;UID:5, 手机号:17887996868; UID:6, 手机号:15821676725; 测试账号密码默认:A123456
|
||||
2. 推荐关系: uid=2推荐uid=4,uid=5, uid=6
|
||||
3. uid=4,5,6购买报单商品后推荐人uid=2没有佣金/返现产生,
|
||||
4. 分销会员uid=2的积分奖励“待释放(冻结)积分”没有
|
||||
|
||||
## 手动测试问题
|
||||
|
||||
1. 排查原因:eb_store_order中id=11在管理后台中的2个页面看不到返现佣金明细和奖励积分明细,
|
||||
2. 积分日志页面/admin/marketing/user_point/index看不到奖励积分明细,
|
||||
3. 佣金记录页面/admin/finance/finance/commission中用户返现佣金记录详情中看不到返现佣金明细
|
||||
4. **相关文件**:`docs/PRD_fsgx_V1.0.md` `docs/page-dev-specs-fsgx.md`,
|
||||
|
||||
|
||||
@@ -819,6 +819,38 @@ class UserServices extends BaseServices
|
||||
$agentLevelServices = app()->make(AgentLevelServices::class);
|
||||
$hjfLevelMaps = $agentLevelServices->loadHjfUserListLevelMaps();
|
||||
|
||||
// 直推人数:统计 spread_uid 在 $uids 中的用户数
|
||||
$directCountRaw = $this->dao->search(['spread_uid' => $uids])
|
||||
->group('spread_uid')
|
||||
->field('spread_uid, count(*) as cnt')
|
||||
->select()->toArray();
|
||||
$directCountMap = array_column($directCountRaw, 'cnt', 'spread_uid');
|
||||
|
||||
// 伞下订单数:先取 spread_uid 在 $uids 中的下级用户 uid → spread_uid 映射,再统计订单
|
||||
$subUsersRaw = $this->dao->search(['spread_uid' => $uids])
|
||||
->field('uid, spread_uid')
|
||||
->select()->toArray();
|
||||
// subUidToSpread: [sub_uid => spread_uid]
|
||||
$subUidToSpread = array_column($subUsersRaw, 'spread_uid', 'uid');
|
||||
$subUids = array_keys($subUidToSpread);
|
||||
$umbrellaMap = [];
|
||||
if ($subUids) {
|
||||
$umbrellaOrdersRaw = \think\facade\Db::name('store_order')
|
||||
->whereIn('uid', $subUids)
|
||||
->where('paid', 1)
|
||||
->where('pid', 0)
|
||||
->whereIn('refund_status', [0, 3])
|
||||
->field('uid, count(*) as cnt')
|
||||
->group('uid')
|
||||
->select()->toArray();
|
||||
foreach ($umbrellaOrdersRaw as $row) {
|
||||
$spreadUid = $subUidToSpread[$row['uid']] ?? null;
|
||||
if ($spreadUid !== null) {
|
||||
$umbrellaMap[$spreadUid] = ($umbrellaMap[$spreadUid] ?? 0) + (int)$row['cnt'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 补充信息
|
||||
$extendInfo = SystemConfigService::get('user_extend_info', []);
|
||||
$is_extend_info = false;
|
||||
@@ -906,6 +938,10 @@ class UserServices extends BaseServices
|
||||
$item['available_points'] = (int)($item['available_points'] ?? 0);
|
||||
$item['frozen_points'] = (int)($item['frozen_points'] ?? 0);
|
||||
|
||||
// 直推人数 & 伞下订单数
|
||||
$item['direct_count'] = (int)($directCountMap[$item['uid']] ?? 0);
|
||||
$item['umbrella_orders'] = (int)($umbrellaMap[$item['uid']] ?? 0);
|
||||
|
||||
// 标签
|
||||
$item['labels'] = $userlabel[$item['uid']] ?? '';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user