feat(fsgx): 完成全部24项开发任务 Phase1-7
Phase1 后端核心:
- 新增 fsgx_v1.sql 迁移脚本(is_queue_goods/frozen_points/available_points/no_assess)
- SystemConfigServices 返佣设置扩展(周期人数/分档比例/范围/时机)
- StoreOrderCreateServices 周期循环佣金计算
- StoreOrderTakeServices 佣金发放后同步冻结积分
- StoreProductServices/StoreProduct 保存 is_queue_goods
Phase2 后端接口:
- GET /api/hjf/brokerage/progress 佣金周期进度
- GET /api/hjf/assets/overview 资产总览
- HjfPointsServices 每日 frozen_points 0.4‰ 释放定时任务
- PUT /adminapi/hjf/member/{uid}/no_assess 不考核接口
- GET /adminapi/hjf/points/release_log 积分日志接口
Phase3 前端清理:
- hjfCustom.js 路由精简(仅保留 points/log)
- hjfQueue.js/hjfMember.js API 清理/重定向至 CRMEB 原生接口
- pages.json 公排→推荐佣金/佣金记录/佣金规则
Phase4-5 前端改造:
- queue/status.vue 推荐佣金进度页整体重写
- 商品详情/订单确认/支付结果页文案与逻辑改造
- 个人中心/资产页/引导页/规则页文案改造
- HjfQueueProgress/HjfRefundNotice/HjfAssetCard 组件改造
- 推广中心嵌入佣金进度摘要
- hjfMockData.js 全量更新(公排字段→佣金字段)
Phase6 Admin 增强:
- 用户列表新增 frozen_points/available_points 列及不考核操作按钮
- hjfPoints.js USE_MOCK=false 对接真实积分日志接口
Phase7 配置文档:
- docs/fsgx-phase7-config-checklist.md 后台配置与全链路验收清单
Made-with: Cursor
This commit is contained in:
@@ -294,12 +294,55 @@ class StoreOrderTakeServices extends BaseServices
|
||||
$res2 = $userServices->bcInc($one_spread_uid, 'brokerage_price', $brokeragePrice, 'uid');
|
||||
//给上级发送获得佣金的模板消息
|
||||
$this->sendBackOrderBrokerage($orderInfo, $one_spread_uid, $brokeragePrice);
|
||||
|
||||
// fsgx: 若推荐人有分销等级(创客及以上),在佣金发放时同步发放积分到 frozen_points
|
||||
$this->grantFrozenPointsByBrokerage($one_spread_uid, $brokeragePrice, $orderInfo);
|
||||
|
||||
// 一级返佣成功 跳转二级返佣
|
||||
$res = $res1 && $res2 && $this->backOrderBrokerageTwo($orderInfo, $userInfo, $isSelfBrokerage, $frozen_time);
|
||||
return $res;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* fsgx: 佣金发放后,根据推荐人分销等级给予待释放积分奖励
|
||||
* 积分奖励规则:每获得1元佣金,发放100积分到 frozen_points(可在后台配置调整)
|
||||
* @param int $spreadUid 推荐人uid
|
||||
* @param string|float $brokeragePrice 本次佣金金额
|
||||
* @param array $orderInfo 订单信息
|
||||
*/
|
||||
protected function grantFrozenPointsByBrokerage(int $spreadUid, $brokeragePrice, array $orderInfo): void
|
||||
{
|
||||
try {
|
||||
if ($spreadUid <= 0 || $brokeragePrice <= 0) return;
|
||||
/** @var UserServices $userServices */
|
||||
$userServices = app()->make(UserServices::class);
|
||||
$spreadUser = $userServices->get($spreadUid, ['uid', 'agent_level', 'frozen_points']);
|
||||
// 只有拥有分销等级(创客及以上 agent_level > 0)的用户才获得积分
|
||||
if (!$spreadUser || (int)($spreadUser['agent_level'] ?? 0) <= 0) return;
|
||||
// 积分换算:每1元佣金 → 100积分,可通过后台配置 brokerage_points_ratio 调整
|
||||
$pointsRatio = (int)sys_config('brokerage_points_ratio', 100);
|
||||
$points = (int)bcmul((string)$brokeragePrice, (string)$pointsRatio, 0);
|
||||
if ($points <= 0) return;
|
||||
// 写入 frozen_points
|
||||
$userServices->bcInc($spreadUid, 'frozen_points', $points, 'uid');
|
||||
// 写积分日志(使用 UserBill)
|
||||
/** @var \app\services\user\UserBillServices $userBillServices */
|
||||
$userBillServices = app()->make(\app\services\user\UserBillServices::class);
|
||||
$userBillServices->income('frozen_points_brokerage', $spreadUid, [
|
||||
'number' => $points,
|
||||
'mark' => '推荐佣金赠积分,订单号:' . ($orderInfo['order_id'] ?? ''),
|
||||
'balance' => (int)(($spreadUser['frozen_points'] ?? 0) + $points),
|
||||
'type' => 'integral',
|
||||
'title' => '推荐佣金',
|
||||
'pm' => 1,
|
||||
], (int)(($spreadUser['frozen_points'] ?? 0) + $points), $orderInfo['id'] ?? 0);
|
||||
} catch (\Throwable $e) {
|
||||
// 积分发放失败不影响主流程
|
||||
\think\facade\Log::error('fsgx grantFrozenPointsByBrokerage error: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 二级推广返佣
|
||||
* @param $orderInfo
|
||||
|
||||
Reference in New Issue
Block a user