WIN-2308041133\Administrator 2 hete
szülő
commit
d443db1216

+ 18 - 0
app/admin/controller/order/StoreOrder.php

@@ -9,6 +9,7 @@ namespace app\admin\controller\order;
 
 use app\admin\controller\AuthController;
 use app\admin\model\order\StoreOrderCartInfo;
+use app\admin\model\system\AwardLake;
 use app\admin\model\system\Express;
 use crmeb\repositories\OrderRepository;
 use crmeb\repositories\ShortLetterRepositories;
@@ -613,6 +614,23 @@ class StoreOrder extends AuthController
             }
 
             BaseModel::commitTrans();
+//            退款扣除今日奖池
+            // 检查是否有add_time为今天0点时间戳的数据
+            $today_start_timestamp = strtotime('today midnight');
+            $award_lake = AwardLake::where('add_time', $today_start_timestamp)->find();
+
+        if ($award_lake) {
+            // 如果有,则将$order['total_price']的值加到num字段上
+            $new_num = bcsub($award_lake->num, $product['refund_price'], 2);
+            AwardLake::where('id', $award_lake->id)->update(['num' => $new_num]);
+        } else {
+            // 如果没有,则新建一条数据
+            AwardLake::create([
+                'add_time' => $today_start_timestamp,
+                'num' =>bcmul($product['refund_price'], -1, 2),
+                'update_time' => time()
+            ]);
+        }
             return Json::successful('修改成功!');
         } else {
             StoreOrderStatus::setStatus($id, 'refund_price', '退款给用户' . $refund_price . '元失败');

+ 44 - 0
app/admin/model/system/AwardLake.php

@@ -0,0 +1,44 @@
+<?php
+/**
+ *
+ * @author: wuhaotian<442384644@qq.com>
+ * @day: 2019/12/07
+ */
+
+namespace app\admin\model\system;
+
+use crmeb\basic\BaseModel;
+use crmeb\traits\ModelTrait;
+
+/**
+ * Class AwardLake
+ * @package app\admin\model\user
+ */
+class AwardLake extends BaseModel
+{
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+
+    /**
+     * 模型名称
+     * @var string
+     */
+    protected $name = 'award_lake';
+
+    use ModelTrait;
+
+    /**
+     * @param $where
+     * @return array
+     */
+    public static function getList($where)
+    {
+
+        $data = self::page((int)$where['page'], (int)$where['limit'])->select();
+        $count = $data->count();
+        return compact('count', 'data');
+    }
+}

+ 75 - 27
app/api/controller/user/UserController.php

@@ -79,9 +79,8 @@ class UserController
                 ->sum('achievement');
         }
         $info['personal_achievement'] = $personal_achievement > 0 ? $personal_achievement : 0;
-
-        // 3. 添加团队业绩字段:包括下级推荐人的所有下级以及不断延续下去的团队所有用户的achievement字段值的总和
-        $teamUids = $this->getAllTeamMembers($info['uid']);
+// 3. 添加团队业绩字段:包括下级推荐人的所有下级以及不断延续下去的团队所有用户的achievement字段值的总和
+        $teamUids = self::getAllTeamMembers($info['uid']);
         $team_achievement = 0;
         if (!empty($teamUids)) {
             $team_achievement = User::whereIn('uid', $teamUids)
@@ -89,33 +88,13 @@ class UserController
         }
         $info['team_achievement'] = $team_achievement > 0 ? $team_achievement : 0;
 
-//        $minGrade = SystemGroupLevel::where('grade', '>', $info['group_level'])
-//            ->min('grade');
-//        if ($minGrade === null){
-//            $quota = SystemGroupLevel::where('grade', $minGrade)->value('quota');
-//            if ($quota <= $info['team_achievement']){
-//                User::where('uid', $info['uid'])->update(['group_level' => $minGrade]);
-//                $level_id = SystemGroupLevel::where('grade', $minGrade)->value('id');
-//                $name = SystemGroupLevel::where('grade', $minGrade)->value('name');
-//                UserGroupLevel::create([
-//                    'is_forever' =>1,
-//                    'status' => 1,
-//                    'is_del' => 0,
-//                    'grade' => $minGrade,
-//                    'uid' =>  $info['uid'],
-//                    'add_time' => time(),
-//                    'level_id' => $level_id,
-//                    'discount' => 100,
-//                    'valid_time' => 0,
-//                    'mark' => '尊敬的用户【' . $info['nickname'] . '】在' . date('Y-m-d H:i:s', time()) . '成为' . $name . '会员',
-//                ]);
-//            }
-//        }
+
         $info['level_name'] = SystemUserLevel::where('id', $info['level'])->value('name');
-//        $info['group_level_name'] = SystemGroupLevel::where('id', $info['group_level'])->value('name');
+        $info['group_level_name'] = SystemGroupLevel::where('id', $info['group_level'])->value('name');
 //        等级任务
 //        SystemUserLevel::getLevelList($info['uid']);
         UserLevel::setLevelComplete($info['uid']);
+        self::group_level_up($info,$info['team_achievement']);
 //        $list = SystemUserLevel::setWhere()->field('name,discount,image,icon,explain,id,grade')->order('grade asc')->select();
 //        foreach ($list as &$item){
 //            $task = SystemUserTask::getTashList($item['id'], $info['uid']);
@@ -123,6 +102,76 @@ class UserController
 
         return app('json')->success($info);
     }
+    public static function group_level_up($user_info,$team_achievement){
+// 3. 添加团队业绩字段:包括下级推荐人的所有下级以及不断延续下去的团队所有用户的achievement字段值的总和
+//        $teamUids = self::getAllTeamMembers($user_info['uid']);
+//        $team_achievement = 0;
+//        if (!empty($teamUids)) {
+//            $team_achievement = User::whereIn('uid', $teamUids)
+//                ->sum('achievement');
+//        }
+//        $info['team_achievement'] = $team_achievement > 0 ? $team_achievement : 0;
+
+        $minGrade = SystemGroupLevel::where('grade', '>', $user_info['group_level'])
+            ->min('grade');
+        if ($minGrade === null){
+            $quota = SystemGroupLevel::where('grade', $minGrade)->value('quota');  //总额度要求
+            $community = SystemGroupLevel::where('grade', $minGrade)->value('community');  //小区额度要求
+            $directSubordinateUids = User::where('spread_uid', $user_info['uid'])->column('uid');  //直属下级
+
+            $max = 0;
+
+//            $teamUids = UserController::getAllTeamMembers($uid);  //获取团队所有成员
+//            $team_achievement = 0;
+//            if (!empty($teamUids)) {
+//                $team_achievement = User::whereIn('uid', $teamUids)
+//                    ->sum('achievement');
+//            }
+            if (!empty($directSubordinateUids)) {
+//            $directSubordinateUids = array_unique($directSubordinateUids);
+                $directSubordinateUids = array_values($directSubordinateUids);  //整理键值对
+                foreach ($directSubordinateUids as $value){
+                    $personal_achievement =0;
+                    $teamUids2 = UserController::getAllTeamMembers($value);  //获取直推下级的团队所有成员
+                    if (!empty($teamUids2)) {
+//                    $teamUids2=array_unique($teamUids2);
+                        $teamUids2=array_values($teamUids2);
+                        $personal_achievement = User::whereIn('uid', $teamUids2)
+                            ->sum('achievement');
+//                    $team_achievement += $personal_achievement;
+
+                    }
+                    $user_achievement = User::where('uid', $value)->value('achievement');
+                    $personal_achievement = bcadd($personal_achievement, $user_achievement, 2);  //团队累计消费
+
+                    if ($personal_achievement > $max){  //获取最高消费团队
+                        $max = $personal_achievement;
+                    }
+                }
+            }
+
+            $community_achievement = bcsub($team_achievement, $max, 2);  //小区消费
+
+
+            if ( $user_info['team_achievement'] >= $quota&&$community_achievement>=$community){
+                User::where('uid', $user_info['uid'])->update(['group_level' => $minGrade]);
+                $level_id = SystemGroupLevel::where('grade', $minGrade)->value('id');
+                $name = SystemGroupLevel::where('grade', $minGrade)->value('name');
+                UserGroupLevel::create([
+                    'is_forever' =>1,
+                    'status' => 1,
+                    'is_del' => 0,
+                    'grade' => $minGrade,
+                    'uid' =>  $user_info['uid'],
+                    'add_time' => time(),
+                    'level_id' => $level_id,
+                    'discount' => 100,
+                    'valid_time' => 0,
+                    'mark' => '尊敬的用户【' . $user_info['nickname'] . '】在' . date('Y-m-d H:i:s', time()) . '成为' . $name . '会员',
+                ]);
+            }
+        }
+    }
 
     /**
      * 递归获取所有团队成员
@@ -131,7 +180,6 @@ class UserController
      */
     public static function getAllTeamMembers($uid, &$teamUids = [])
     {
-        @file_put_contents('quanju.txt', $uid . "-你人呢\r\n", 8);
         // 获取直接下级
         $directSubordinates = User::where('spread_uid', $uid)->column('uid');
 

+ 0 - 1
app/api/controller/user/UserLevelController.php

@@ -25,7 +25,6 @@ class UserLevelController
     public function detection(Request $request)
     {
         UserLevel::beginTrans();
-        @file_put_contents('quanju.txt',  "-触发一\r\n", 8);
         $res = UserLevel::setLevelComplete($request->uid());
         UserLevel::checkTrans($res);
         return app('json')->successful($res);

+ 33 - 0
app/models/store/StoreOrder.php

@@ -7,8 +7,10 @@
 
 namespace app\models\store;
 
+use app\admin\model\system\AwardLake;
 use app\admin\model\system\ShippingTemplatesFree;
 use app\admin\model\system\ShippingTemplatesRegion;
+use app\admin\model\user\UserReincarnation;
 use crmeb\basic\BaseModel;
 use think\db\exception\DataNotFoundException;
 use think\db\exception\DbException;
@@ -850,7 +852,38 @@ class StoreOrder extends BaseModel
             $achievement = User::where('uid', $order['uid'])->value('achievement');
             $achievement = bcadd($achievement, $order['total_price'], 2);
             User::where('uid', $order['uid'])->update(['achievement' => $achievement]);
+            $reincarnation_achievement = UserReincarnation::where('uid',$order)->value('achievement');  //转生业绩
+            if ($achievement === null) {
+                UserReincarnation::create([
+                    'uid'=>$order,
+                    'achievement' => $achievement,
+                    'update_time' => time(),
+                    'num' =>0
+                ]);
+            }else{
+                $reincarnation_achievement = bcadd($reincarnation_achievement,$achievement,2);
+                UserReincarnation::where('uid', $order['uid'])->update(['achievement' => $reincarnation_achievement, 'update_time' => time()]);
+            }
         }
+//       添加奖池
+        $today_start_timestamp = strtotime('today midnight');
+
+// 检查是否有add_time为今天0点时间戳的数据
+        $award_lake = AwardLake::where('add_time', $today_start_timestamp)->find();
+
+        if ($award_lake) {
+            // 如果有,则将$order['total_price']的值加到num字段上
+            $new_num = bcadd($award_lake->num, $order['total_price'], 2);
+            AwardLake::where('id', $award_lake->id)->update(['num' => $new_num]);
+        } else {
+            // 如果没有,则新建一条数据
+            AwardLake::create([
+                'add_time' => $today_start_timestamp,
+                'num' => $order['total_price'],
+                'update_time' => time() // 可以根据需要选择是否添加这个字段
+            ]);
+        }
+
         $res = $res1 && $resPink && UserSpread::setSpreadSure($order['uid']) && User::backOrderBrokerage($order);
         return false !== $res;
     }

+ 0 - 8
app/models/system/SystemUserLevel.php

@@ -82,16 +82,11 @@ class SystemUserLevel extends BaseModel
         $level = ['id' => 0];
         $task = [];
         $id = UserLevel::getUserLevel($uid);
-        @file_put_contents('quanju.txt',   "-测试1\r\n", 8);
         if ($id !== false){
-            @file_put_contents('quanju.txt',   "-测试2\r\n", 8);
             $level = UserLevel::getUserLevelInfo($id);
         }
-        @file_put_contents('quanju.txt',   "-测试3\r\n", 8);
         $list = self::getLevelListAndGrade($level['id'], $isArray);
-        @file_put_contents('quanju.txt',   $list[0]."-第二步\r\n", 8);
         if (isset($list[0]) && $isArray){
-            @file_put_contents('quanju.txt',   "-第三步\r\n", 8);
             $task = SystemUserTask::getTashList($list[0]['id'], $uid, $level);
         }
         if ($isArray) return [$list, $task];
@@ -129,7 +124,6 @@ class SystemUserLevel extends BaseModel
                 $grade = $item['grade'];
 
             if ($isArray){
-                @file_put_contents('quanju.txt', $item['id'] . "-平时这里怎么就不能循环了\r\n", 8);
                 $item['task_list'] = SystemUserTask::getTashList($item['id']);
             }
 
@@ -189,9 +183,7 @@ class SystemUserLevel extends BaseModel
      */
     public static function getLevelList($uid)
     {
-        @file_put_contents('quanju.txt',   $uid."-第一步\r\n", 8);
         list($list, $task) = self::getLevelInfo($uid, true);
-        @file_put_contents('quanju.txt',   json_encode($task)."-这返回了啥呀\r\n", 8);
         return ['list' => $list, 'task' => $task];
     }
 

+ 13 - 31
app/models/system/SystemUserTask.php

@@ -2,6 +2,7 @@
 
 namespace app\models\system;
 
+use app\admin\model\user\UserReincarnation;
 use app\api\controller\user\UserController;
 use app\models\store\StoreOrder;
 use app\models\user\User;
@@ -13,6 +14,7 @@ use crmeb\basic\BaseModel;
 use think\db\exception\DataNotFoundException;
 use think\db\exception\DbException;
 use think\db\exception\ModelNotFoundException;
+use think\db\Where;
 
 /**
  * TODO 设置等级任务Model
@@ -146,18 +148,20 @@ class SystemUserTask extends BaseModel
      * */
     public static function ConsumptionAmount($task_id, $uid = 0, $start_time = 0, $number = 0)
     {
-        @file_put_contents('quanju.txt',   "-第八步\r\n", 8);
         $isComplete = false;
 //        $SumPayPrice = StoreOrder::where('paid', 1)->where('refund_status', 0)->where('is_del', 0)->where('uid', $uid)->where('add_time', '>', $start_time)->sum('pay_price');
-        $directSubordinateUids = User::where('spread_uid', $uid)->column('uid');
-        $personal_achievement = 0;
-        if (!empty($directSubordinateUids)) {
-            $personal_achievement = User::whereIn('uid', $directSubordinateUids)
-                ->sum('achievement');
+        $reincarnation = User::where('user',$uid)->value('reincarnation');
+        if ($reincarnation == 1){
+            $SumPayPrice = UserReincarnation::where('uid', $uid)->value('achievement');
+        }else{
+            $directSubordinateUids = User::where('spread_uid', $uid)->column('uid');
+            $personal_achievement = 0;
+            if (!empty($directSubordinateUids)) {
+                $personal_achievement = User::whereIn('uid', $directSubordinateUids)
+                    ->sum('achievement');
+            }
+            $SumPayPrice =$personal_achievement;
         }
-        @file_put_contents('quanju.txt', $personal_achievement . "-直推下级消费金额\r\n", 8);
-        @file_put_contents('quanju.txt', $number . "-直推下级消费金额要求\r\n", 8);
-        $SumPayPrice =$personal_achievement;
         if ($SumPayPrice >= $number) $isComplete = UserTaskFinish::setFinish($uid, $task_id) ? true : false;
         return ['还需消费{$num}元', $SumPayPrice, $isComplete];
     }
@@ -173,14 +177,12 @@ class SystemUserTask extends BaseModel
     {
         $isComplete = false;
 //        $SumPayPrice = StoreOrder::where('paid', 1)->where('refund_status', 0)->where('is_del', 0)->where('uid', $uid)->where('add_time', '>', $start_time)->sum('pay_price');
-        @file_put_contents('quanju.txt',   "-第九步\r\n", 8);
         $teamUids = UserController::getAllTeamMembers($uid);  //获取团队所有成员
         $team_achievement = 0;
         if (!empty($teamUids)) {
             $team_achievement = User::whereIn('uid', $teamUids)
                 ->sum('achievement');
         }
-        @file_put_contents('quanju.txt', $team_achievement . "-总消费金额\r\n", 8);
         $SumPayPrice =$team_achievement;
         if ($SumPayPrice >= $number) $isComplete = UserTaskFinish::setFinish($uid, $task_id) ? true : false;
         return ['还需消费{$num}元', $SumPayPrice, $isComplete];
@@ -195,7 +197,6 @@ class SystemUserTask extends BaseModel
      * */
     public static function CommunityConsumptionAmount($task_id, $uid = 0, $start_time = 0, $number = 0)
     {
-        @file_put_contents('quanju.txt',   "-第十步\r\n", 8);
         $isComplete = false;
 //        $SumPayPrice = StoreOrder::where('paid', 1)->where('refund_status', 0)->where('is_del', 0)->where('uid', $uid)->where('add_time', '>', $start_time)->sum('pay_price');
         $directSubordinateUids = User::where('spread_uid', $uid)->column('uid');
@@ -203,7 +204,6 @@ class SystemUserTask extends BaseModel
         $max = 0;
         $team_achievement=0;
         $teamUids = UserController::getAllTeamMembers($uid);  //获取团队所有成员
-        @file_put_contents('quanju.txt', json_encode($teamUids) . "-团队直属下级uid\r\n", 8);
         $team_achievement = 0;
         if (!empty($teamUids)) {
             $team_achievement = User::whereIn('uid', $teamUids)
@@ -212,16 +212,12 @@ class SystemUserTask extends BaseModel
         if (!empty($directSubordinateUids)) {
 //            $directSubordinateUids = array_unique($directSubordinateUids);
             $directSubordinateUids = array_values($directSubordinateUids);
-            @file_put_contents('quanju.txt', json_encode($directSubordinateUids) . "-直属下级uid\r\n", 8);
             foreach ($directSubordinateUids as $value){
                 $personal_achievement =0;
-                @file_put_contents('quanju.txt', $value . "-这谁的uid啊\r\n", 8);
                 $teamUids2 = UserController::getAllTeamMembers($value);  //获取直推下级的团队所有成员
-                @file_put_contents('quanju.txt', json_encode($teamUids2) . "-你直属下级呢\r\n", 8);
                 if (!empty($teamUids2)) {
 //                    $teamUids2=array_unique($teamUids2);
                     $teamUids2=array_values($teamUids2);
-                    @file_put_contents('quanju.txt', json_encode($teamUids2) . "-各直属下级团队uid\r\n", 8);
                     $personal_achievement = User::whereIn('uid', $teamUids2)
                         ->sum('achievement');
 //                    $team_achievement += $personal_achievement;
@@ -229,21 +225,15 @@ class SystemUserTask extends BaseModel
                 }
                 $user_achievement = User::where('uid', $value)->value('achievement');
                 $personal_achievement = bcadd($personal_achievement, $user_achievement, 2);  //团队累计消费
-                @file_put_contents('quanju.txt', $personal_achievement. "-小团体消费\r\n", 8);
 
                 if ($personal_achievement > $max){  //获取最高消费团队
                     $max = $personal_achievement;
                 }
             }
         }
-        @file_put_contents('quanju.txt', $max . "-大区业绩\r\n", 8);
 
         $community_achievement = bcsub($team_achievement, $max, 2);  //小区消费
-        @file_put_contents('quanju.txt', $team_achievement . "-总消费\r\n", 8);
-        @file_put_contents('quanju.txt', $max . "-大区消费\r\n", 8);
-        @file_put_contents('quanju.txt', $community_achievement . "-小区消费\r\n", 8);
         $SumPayPrice =$community_achievement;
-        @file_put_contents('quanju.txt', $number . "-小区消费指标\r\n", 8);
         if ($SumPayPrice >= $number) $isComplete = UserTaskFinish::setFinish($uid, $task_id) ? true : false;
         return ['还需消费{$num}元', $SumPayPrice, $isComplete];
     }
@@ -398,8 +388,6 @@ class SystemUserTask extends BaseModel
         $level_id = is_string($level_id) ? (int)$level_id : $level_id;
         $list = self::visibleWhere()->where('level_id', $level_id)->field('name,real_name,task_type,illustrate,number,id')->order('sort desc')->select();
         $list = count($list) ? $list->toArray() : [];
-        @file_put_contents('quanju.txt',   $level_id."-第四步这是什么id\r\n", 8);
-        @file_put_contents('quanju.txt',   $uid."-第四步这uid不可能等于零吧\r\n", 8);
         if ($uid == 0) return $list;
         if ($level === null) $level = SystemUserLevel::getLevelInfo($uid);
         //获取下一个vip的id
@@ -407,7 +395,6 @@ class SystemUserTask extends BaseModel
         $is_clear = SystemUserLevel::getClear($level['id']);
         if ($is_clear == false && $LeveId == $level_id) $is_clear = true;
         $reach_count = self::getTaskComplete($level_id, $uid, true);
-        @file_put_contents('quanju.txt',   "-第四步\r\n", 8);
         return [
             'list' => $list,
             'reach_count' => $reach_count,
@@ -424,7 +411,6 @@ class SystemUserTask extends BaseModel
      * */
     protected static function set_task_type($item, $uid, $startTime = 0)
     {
-        @file_put_contents('quanju.txt',   "-第七步\r\n", 8);
         $task = ['task_type_title' => '', 'new_number' => 0, 'speed' => 0, 'finish' => 0];
         $task_type = $item['task_type'];
         switch ($task_type) {
@@ -509,11 +495,8 @@ class SystemUserTask extends BaseModel
      * */
     public static function tidyTask($task, $uid, $is_clear, $startTime)
     {
-        @file_put_contents('quanju.txt',   json_encode($task)."-第五步\r\n", 8);
         if (!is_array($task)) return $task;
         foreach ($task as &$item) {
-            @file_put_contents('quanju.txt',   json_encode($item)."-这是什么东西\r\n", 8);
-            @file_put_contents('quanju.txt',   UserTaskFinish::where('uid', $uid)->where('task_id', $item['id'])->count()."-这是什么\r\n", 8);
             //如果已完成该任务进度直接为100
             if (UserTaskFinish::where('uid', $uid)->where('task_id', $item['id'])->count()) {
                 $item['new_number'] = $item['number'];
@@ -521,7 +504,6 @@ class SystemUserTask extends BaseModel
                 $item['finish'] = 1;
                 $item['task_type_title'] = '';
             } else {
-                @file_put_contents('quanju.txt',   "-第六步\r\n", 8);
 //                if($is_clear){
                 list($new_number, $speed, $task_type_title, $finish) = self::set_task_type($item, $uid, $startTime);
                 $item['new_number'] = $new_number;

+ 115 - 27
app/models/user/DividendsRecord.php

@@ -8,6 +8,7 @@
 
 namespace app\models\user;
 
+use app\admin\model\system\AwardLake;
 use app\models\store\StoreOrder;
 use app\models\system\SystemGroupLevel;
 use app\models\system\SystemUserLevel;
@@ -134,37 +135,124 @@ class DividendsRecord extends BaseModel
         return $data;
     }
 //    全网分红
-    public static function wholeNetworkDividend(){
-        $pool = sys_config('dividend_pool');
-        if (!$pool|| $pool <= 0) return false;
-        $user_list = Db::name('User')->where('level', '>', 0)
-            ->whereOr('group_level', '>', 0)
-            ->select();
-        @file_put_contents('quanju.txt', json_encode($user_list) . "-分红用户列表\r\n", 8);
-        foreach ($user_list as $user){
-            $dividends=0;
-            if ($user['level'] > 0){
-                $level_grade = SystemUserLevel::where('id', $user['level'])->value('grade');
-                $level_dividends = SystemUserLevel::where('grade', '<=', $level_grade)->sum('dividends');
-                $dividends = bcadd($level_dividends, $dividends, 2);
+    public static function spread_rewards(){
+//        $pool = sys_config('dividend_pool');
+//        if (!$pool|| $pool <= 0) return false;
+//        $user_list = Db::name('User')->where('level', '>', 0)
+//            ->whereOr('group_level', '>', 0)
+//            ->select();
+//
+//        foreach ($user_list as $user){
+//            $dividends=0;
+//            if ($user['level'] > 0){
+//                $level_grade = SystemUserLevel::where('id', $user['level'])->value('grade');
+//                $level_dividends = SystemUserLevel::where('grade', '<=', $level_grade)->sum('dividends');
+//                $dividends = bcadd($level_dividends, $dividends, 2);
+//            }
+//            if ($user['group_level'] > 0){
+//                $group_level_grade = SystemGroupLevel::where('id', $user['group_level'])->value('grade');
+//                $group_level_dividends = SystemGroupLevel::where('grade', '<=', $group_level_grade)->sum('dividends');
+//                $dividends = bcadd($group_level_dividends, $dividends, 2);
+//            }
+//
+//            if ($dividends > 0){
+//                $brokerage = bcmul($pool, bcdiv($dividends, 100, 2), 2);
+//
+//                $id = self::income('全网分红', $user['uid'], 'brokerage_price', $brokerage, '订单推荐佣金');
+//                $blance = bcadd($user['brokerage_price'], $brokerage, 2);
+//                UserBill::income('全网分红', $user['uid'], 'brokerage_price', 'dividend', $brokerage, $id, $blance, '全网分红奖励');
+//                User::where('uid', $user['uid'])->update(['brokerage_price' => $blance]);
+//            }
+//        }
+
+
+        return true;
+    }
+
+
+    public static function wholeNetworkDividend($order)
+    {
+        try {
+            $spread_uid = User::where('uid', $order['uid'])->value('spread_uid');
+
+            // 获取今日0点的时间戳
+            $today_start_timestamp = strtotime('today midnight');
+
+            // 获取奖池
+            $award_lake = AwardLake::where('add_time', $today_start_timestamp)->find();
+            if (!$award_lake) {
+                // 如果今天0点时间戳的数据不存在,则新建一条数据
+                $award_lake = AwardLake::create([
+                    'add_time' => $today_start_timestamp,
+                    'num' => $order['total_price'],
+                    'update_time' => time()
+                ]);
             }
-            if ($user['group_level'] > 0){
-                $group_level_grade = SystemGroupLevel::where('id', $user['group_level'])->value('grade');
-                $group_level_dividends = SystemGroupLevel::where('grade', '<=', $group_level_grade)->sum('dividends');
-                $dividends = bcadd($group_level_dividends, $dividends, 2);
+            $pool = $award_lake->num;
+
+            // 获取所有用户
+//            $user_list = User::all();
+
+            // 处理会员等级分红
+            $user_levels = SystemUserLevel::where('is_del',0)->order('grade', 'asc')->select();
+            foreach ($user_levels as $level) {
+                // 计算当前等级及以下所有等级的分红比例总和
+                $total_dividends = SystemUserLevel::where('grade', $level->grade)->value('dividends'); //奖池比例
+
+                // 计算当前等级及以下所有等级的用户人数
+                $user_count = User::where('level', '<=', $level->id)->count();
+
+                if ($user_count > 0) {
+                    // 计算当前等级的奖池
+                    $level_pool = bcmul($pool, bcdiv($total_dividends, 100, 2), 2);
+
+                    // 计算每个用户的分红金额
+                    $brokerage_per_user = bcdiv($level_pool, $user_count, 2);
+
+                    // 更新每个用户的分红金额
+                    $users = User::where('level', '<=', $level->id)->select();
+                    foreach ($users as $user) {
+                        $new_brokerage = bcadd($user->brokerage_price, $brokerage_per_user, 2);
+                        $id = self::income('全网分红', $user['uid'], 'brokerage_price', $brokerage_per_user, $level->name.'会员等级分红');
+                        UserBill::income('全网分红', $user->uid, 'brokerage_price', 'dividend', $brokerage_per_user, $id, $new_brokerage, $level->name.'会员等级分红');
+
+                        User::where('uid', $user->uid)->update(['brokerage_price' => $new_brokerage]);
+                    }
+                }
             }
-            @file_put_contents('quanju.txt', $dividends . "-分红比例\r\n", 8);
-            @file_put_contents('quanju.txt', $pool . "-分红奖池\r\n", 8);
-            if ($dividends > 0){
-                $brokerage = bcmul($pool, bcdiv($dividends, 100, 2), 2);
-
-                $id = self::income('全网分红', $user['uid'], 'brokerage_price', $brokerage, '订单推荐佣金');
-                $blance = bcadd($user['brokerage_price'], $brokerage, 2);
-                UserBill::income('全网分红', $user['uid'], 'brokerage_price', 'dividend', $brokerage, $id, $blance, '全网分红奖励');
-                User::where('uid', $user['uid'])->update(['brokerage_price' => $blance]);
+
+            // 处理团队等级分红
+            $group_levels = SystemGroupLevel::where('is_del',0)->order('grade', 'asc')->select();
+            foreach ($group_levels as $group_level) {
+                // 计算当前团队等级的奖池
+                $group_pool = bcmul($pool, bcdiv($group_level->dividends, 100, 2), 2);
+
+                // 计算当前团队等级的用户人数
+                $group_user_count = User::where('group_level', $group_level->id)->count();
+
+                if ($group_user_count > 0) {
+                    // 计算每个用户的分红金额
+                    $group_brokerage_per_user = bcdiv($group_pool, $group_user_count, 2);
+
+                    // 更新每个用户的分红金额
+                    $group_users = User::where('group_level', $group_level->id)->select();
+                    foreach ($group_users as $user) {
+                        $new_brokerage = bcadd($user->brokerage_price, $group_brokerage_per_user, 2);
+                        $id = self::income('全网分红', $user['uid'], 'brokerage_price', $group_brokerage_per_user, '团队等级分红');
+                        UserBill::income('团队分红', $user->uid, 'brokerage_price', 'dividend', $group_brokerage_per_user, $id, $new_brokerage, '团队分红奖励');
+                        User::where('uid', $user->uid)->update(['brokerage_price' => $new_brokerage]);
+                    }
+                }
             }
+
+            return true;
+        } catch (\Exception $e) {
+            // 处理异常
+            @file_put_contents('quanju.txt', json_encode(['line' => $e->getLine(), 'message' => $e->getMessage(), 'file' => $e->getFile()]) . "-全网分红报错内容\r\n", 8);
+
+            return false;
         }
-        return true;
     }
 
+
 }

+ 11 - 2
app/models/user/UserLevel.php

@@ -2,6 +2,7 @@
 
 namespace app\models\user;
 
+use app\admin\model\user\UserReincarnation;
 use app\models\system\SystemUserLevel;
 use app\models\system\SystemUserTask;
 use crmeb\basic\BaseModel;
@@ -91,7 +92,6 @@ class UserLevel extends BaseModel
             User::where('uid', $uid)->update(['level' => $level_id]);
             return self::where('uid', $uid)->where('level_id', $level_id)->update($data);
         } else {
-            @file_put_contents('quanju.txt',  "-怎么触发的\r\n", 8);
             $data = [
                 'is_forever' => $vipinfo->is_forever,
                 'status' => 1,
@@ -135,6 +135,16 @@ class UserLevel extends BaseModel
             if ($level->status == 1) {
                 $level->status = 0;
                 $level->save();
+//                三级代理过期那前面的一二级代理也肯定过期了,不考虑低等级比高等级时间长的可能性
+                $reincarnation = User::where('uid', $uid)->value('reincarnation');
+                if ($reincarnation==1){  //转生过
+                    //转生过,重新统计直推下级业绩
+                    $num = UserReincarnation::where('uid',$uid)->value('num');
+                    UserReincarnation::where('uid', $uid)->update(['achievement' => 0,'update_time'=>time(),'num'=>bcadd($num,1)]);
+                }else{  //没转生过
+                    UserReincarnation::create(['uid' => $uid, 'achievement' => 0, 'update_time' => time(), 'num' => 1]);
+                    User::where('uid', $uid)->update(['reincarnation' => 1]);
+                }
             }
             return self::getUserLevel($uid, $level->grade);
         } else
@@ -180,7 +190,6 @@ class UserLevel extends BaseModel
      */
     public static function setLevelComplete($uid, $leveNowId = false)
     {
-        @file_put_contents('quanju.txt',  $uid."-购买时怎么触发这里\r\n", 8);
         $user = User::where('uid', $uid)->find();
         if (!$user) return self::setErrorInfo('没有此用户,无法检测升级会员');
         $level = self::getUserLevel($uid);

+ 0 - 1
crmeb/subscribes/UserSubscribe.php

@@ -108,7 +108,6 @@ class UserSubscribe
     public function onUserLevelAfter($event)
     {
         list($userUid) = $event;
-        @file_put_contents('quanju.txt',  $userUid."-触发二\r\n", 8);
         UserLevel::setLevelComplete($userUid);
     }