|
@@ -9,6 +9,7 @@ namespace app\models\store;
|
|
|
|
|
|
|
|
use app\admin\model\system\ShippingTemplatesFree;
|
|
use app\admin\model\system\ShippingTemplatesFree;
|
|
|
use app\admin\model\system\ShippingTemplatesRegion;
|
|
use app\admin\model\system\ShippingTemplatesRegion;
|
|
|
|
|
+use app\models\system\SystemUserLevel;
|
|
|
use crmeb\basic\BaseModel;
|
|
use crmeb\basic\BaseModel;
|
|
|
use think\db\exception\DataNotFoundException;
|
|
use think\db\exception\DataNotFoundException;
|
|
|
use think\db\exception\DbException;
|
|
use think\db\exception\DbException;
|
|
@@ -863,9 +864,88 @@ class StoreOrder extends BaseModel
|
|
|
UserBill::expend('购买商品', $order['uid'], 'now_money', 'pay_money', $order['pay_price'], $order['id'], $now_money, '支付' . floatval($order['pay_price']) . '元购买商品');
|
|
UserBill::expend('购买商品', $order['uid'], 'now_money', 'pay_money', $order['pay_price'], $order['id'], $now_money, '支付' . floatval($order['pay_price']) . '元购买商品');
|
|
|
//支付成功后
|
|
//支付成功后
|
|
|
event('OrderPaySuccess', [$order, $formId]);
|
|
event('OrderPaySuccess', [$order, $formId]);
|
|
|
|
|
+ $type = User::where('uid', $order['uid'])->value('is_first');
|
|
|
|
|
+ if ($type == 1){
|
|
|
|
|
+ self::team_rewards($order, 2); //分发团队奖励 2复购
|
|
|
|
|
+ }else{
|
|
|
|
|
+ self::team_rewards($order, 1); //分发团队奖励 1首单
|
|
|
|
|
+ }
|
|
|
$res = $res1 && $resPink && UserSpread::setSpreadSure($order['uid']) && User::backOrderBrokerage($order);
|
|
$res = $res1 && $resPink && UserSpread::setSpreadSure($order['uid']) && User::backOrderBrokerage($order);
|
|
|
return false !== $res;
|
|
return false !== $res;
|
|
|
}
|
|
}
|
|
|
|
|
+// 分发团队奖励 1首单 2复购
|
|
|
|
|
+ public function team_rewards($order, $type)
|
|
|
|
|
+ {
|
|
|
|
|
+ try {
|
|
|
|
|
+ $user_spread_group = $this->get_spread_user($order['uid']); //获取所有上级id
|
|
|
|
|
+ $group_info = User::where('uid', 'in', $user_spread_group)->column('uid,level'); //获取所有上级信息
|
|
|
|
|
+ // 提取所有level组成新数组
|
|
|
|
|
+ $groupIds = array_column($group_info, 'level');
|
|
|
|
|
+ // 统计每个level出现的次数
|
|
|
|
|
+ $levelCounts = array_count_values($groupIds);
|
|
|
|
|
+ $model = new User();
|
|
|
|
|
+ if ($type == 1) {
|
|
|
|
|
+ $field = 'first_ratio';
|
|
|
|
|
+ $title = '首单奖励';
|
|
|
|
|
+ }elseif ($type == 2){
|
|
|
|
|
+ $field = 'ratio';
|
|
|
|
|
+ $title = '复购奖励';
|
|
|
|
|
+ }
|
|
|
|
|
+ foreach ($levelCounts as $k => $v) { //遍历所有等级
|
|
|
|
|
+
|
|
|
|
|
+ $level_group = User::where('level', $k)->column('uid,nickname,brokerage_price,level'); //获取这个等级的所有用户
|
|
|
|
|
+ $make = app()->make(SystemUserLevel::class);
|
|
|
|
|
+ $level = $make->where('level',$k)->find(); //用户等级
|
|
|
|
|
+ if ($level) {
|
|
|
|
|
+ $ratio = bcmul($level[$field],0.01,2); //奖励比例
|
|
|
|
|
+ $award_price = bcmul($order['pay_price'], $ratio, 2); //奖励金额
|
|
|
|
|
+ $user_award = bcdiv($award_price,$v,2); //每个用户奖励金额
|
|
|
|
|
+ foreach ($level_group as $key => $value){
|
|
|
|
|
+ $after = bcadd($value['brokerage_price'], $user_award, 2); //更新用户奖励金额
|
|
|
|
|
+ $mark = $value.'获得分账健康币'.$title . ':' . $award_price . '元';
|
|
|
|
|
+ $res = UserBill::income('获得分账健康币', $value['uid'], 'brokerage_price', 'spread_award', $award_price, $order['id'], $after, $mark, 0);
|
|
|
|
|
+ User::where('uid', $value['uid'])->update(['brokerage_price' => $after]);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception $e) {
|
|
|
|
|
+ @file_put_contents('quanju.txt', $e->getMessage() . "-团队奖励错误信息\r\n", 8);
|
|
|
|
|
+ @file_put_contents('quanju.txt', $e->getLine() . "-团队奖励错误位置\r\n", 8);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //获取所有上级id
|
|
|
|
|
+ public function get_spread_user($id, $init = true, $parentMap = null)
|
|
|
|
|
+ {
|
|
|
|
|
+ if ($init) {
|
|
|
|
|
+ // 获取所有用户的上级映射 (uid => spread_uid)
|
|
|
|
|
+ $us = \app\admin\model\user\User::column('spread_uid', 'uid');
|
|
|
|
|
+ $parentMap = $us; // 存储 uid->上级ID 的映射
|
|
|
|
|
+ $id = (array)$id; // 确保ID转为数组
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $result = []; // 存储所有上级ID
|
|
|
|
|
+ $visited = []; // 防止循环引用
|
|
|
|
|
+ $queue = (array)$id; // 初始化队列
|
|
|
|
|
+
|
|
|
|
|
+ while (!empty($queue)) {
|
|
|
|
|
+ $current = array_shift($queue); // 取出当前用户ID
|
|
|
|
|
+
|
|
|
|
|
+ // 如果当前用户未处理过且有上级
|
|
|
|
|
+ if (!isset($visited[$current]) && isset($parentMap[$current]) && $parentMap[$current] > 0) {
|
|
|
|
|
+ $parentId = $parentMap[$current]; // 获取直接上级ID
|
|
|
|
|
+ $visited[$current] = true; // 标记当前用户已访问
|
|
|
|
|
+
|
|
|
|
|
+ // 避免重复处理
|
|
|
|
|
+ if (!isset($visited[$parentId])) {
|
|
|
|
|
+ $result[] = $parentId; // 添加到结果
|
|
|
|
|
+ $queue[] = $parentId; // 将上级加入队列继续查找
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return array_unique($result); // 返回去重后的上级ID列表
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
|
* 线下支付消息通知
|
|
* 线下支付消息通知
|