sunxiaobiao 1 год назад
Родитель
Сommit
35211830cb

+ 60 - 53
app/controller/api/store/merchant/TaskPartnerProfits.php

@@ -23,23 +23,19 @@ class TaskPartnerProfits
23 23
             $startTime = date('Y-m-d', strtotime('monday this week', $now)); // 这周星期一的开始时间
24 24
             $endTime = date('Y-m-d', strtotime('sunday this week', $now)); // 这周星期日的结束时间
25 25
         }
26
-//        return ['startTime' => '2025-03-10', 'endTime' => '2025-03-23'];
26
+        //        return ['startTime' => '2025-03-10', 'endTime' => '2025-03-23'];
27 27
         return ['startTime' => $startTime, 'endTime' => $endTime];
28 28
     }
29 29
 
30
-    public function getTeamPvByTime($timePeriod = 'last_week', $removeUserIdList = [])
30
+    public function getTeamPvByTime($startTime, $endTime, $removeUserIdList = [])
31 31
     {
32
-        $timeMap = $this->getTime($timePeriod);
33
-        $startTime = $timeMap['startTime'];
34
-        $endTime = $timeMap['endTime'];
35
-
36 32
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
37 33
         $orders = Db::name("store_order")
38 34
             ->where('mer_id', 496)
39 35
             ->whereNotIn('uid', $removeUserIdList)
40 36
             ->whereIn('status', [0, 1, 2, 3])
41 37
             ->whereIn("total_price", [1180, 11800, 10620, 2360, 9440])
42
-            ->whereBetween("pay_time", [$startTime . ' 00:00:00', $endTime . ' 23:59:59'])
38
+            ->whereBetween("pay_time", [$startTime, $endTime])
43 39
             ->whereNotNull("pay_time") // 排除 pay_time 为 NULL 的订单
44 40
             ->select();
45 41
 
@@ -68,24 +64,22 @@ class TaskPartnerProfits
68 64
         return $totalPv;
69 65
     }
70 66
 
71
-    public function getRedEnvelopeByTime($timePeriod = 'last_week', $removeUserIdList = [])
67
+    public function getRedEnvelopeByTime($startTime, $endTime, $removeUserIdList = [])
72 68
     {
73
-        $timeMap = $this->getTime($timePeriod);
74
-        $startTime = $timeMap['startTime'];
75
-        $endTime = $timeMap['endTime'];
76
-
77 69
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
78 70
         $redEnvelopeList = Db::name("user_sign_hongbao")
79 71
             ->whereNotIn('uid', $removeUserIdList)
80 72
             ->where('status', 1)
81
-            ->whereBetween("settlement_time", [$startTime . ' 00:00:00', $endTime . ' 23:59:59'])
73
+            ->whereBetween("settlement_time", [$startTime, $endTime])
82 74
             ->select()
83 75
             ->toArray();
84 76
         return floor(array_sum(array_column($redEnvelopeList, 'number')) * 100) / 100;
85 77
     }
86 78
 
87
-    public function partnerProfits()
79
+    public function partnerProfits($startTime = '', $endTime = '')
88 80
     {
81
+        $startTime = '2025-03-10';
82
+        $endTime = '2025-03-30';
89 83
         // 查询测试人员账号信息
90 84
         //18973958920
91 85
         //15186694339
@@ -101,10 +95,17 @@ class TaskPartnerProfits
101 95
             ->select()
102 96
             ->toArray();
103 97
         $removeUserIdList = array_column($removeUserList, 'uid');
98
+
99
+        if (empty($startTime) || empty($endTime)) {
100
+            $timeMap = $this->getTime('last_week');
101
+            $startTime = $timeMap['startTime'] . ' 00:00:00';
102
+            $endTime = $timeMap['endTime'] . ' 23:59:59';
103
+        }
104
+
104 105
         // 定义分红金额
105
-        $weekRecord = $this->getTeamPvByTime('last_week', $removeUserIdList);
106
+        $weekRecord = $this->getTeamPvByTime($startTime, $endTime, $removeUserIdList);
106 107
         // 分红金额 - 红包金额
107
-        $redEnvelope = $this->getRedEnvelopeByTime('last_week', $removeUserIdList);
108
+        $redEnvelope = $this->getRedEnvelopeByTime($startTime, $endTime, $removeUserIdList);
108 109
 
109 110
         $weekRecord -= $redEnvelope;
110 111
         if ($weekRecord <= 0) {
@@ -125,7 +126,7 @@ class TaskPartnerProfits
125 126
 
126 127
         // 3、获取 分红用户 信息 (`user_group` tinyint(1) DEFAULT '1' COMMENT '1消费者 2,推广业务员 3,业务经理 4初级合伙人5中级合伙人 6高级合伙人 7.懂事',)
127 128
         $list = Db::name("user")
128
-//            ->whereNotIn('uid', $removeUserIdList)
129
+            //            ->whereNotIn('uid', $removeUserIdList)
129 130
             ->where("user_group", "IN", [4, 5, 6])
130 131
             ->where("status", "<>", 0)
131 132
             ->where('is_del', '<>', 1)
@@ -142,33 +143,39 @@ class TaskPartnerProfits
142 143
                 $salesArr['高级']['divider_people'][] = $value['uid'];
143 144
             }
144 145
         }
146
+        $salesArr['初级']['divider_people_count'] = count($salesArr['初级']['divider_people']);
147
+        $salesArr['中级']['divider_people_count'] = count($salesArr['中级']['divider_people']);
148
+        $salesArr['高级']['divider_people_count'] = count($salesArr['高级']['divider_people']);
149
+
145 150
 
146 151
         // 5、移除特定人员
147 152
         // 要移动的ID数组
148
-//        $ids_to_remove_from_junior = array(12, 69, 144); // 从初级中移除的ID
149
-//        $ids_to_remove_from_intermediate = array(49); // 从中级中移除的ID
150
-//        // 查找初级并获取其divider_people
151
-//        $junior = &$salesArr['初级']['divider_people']; // 使用引用,以便直接修改数组
152
-//        // 查找中级并获取其divider_people
153
-//        $intermediate = &$salesArr['中级']['divider_people']; // 使用引用,以便直接修改数组
154
-//        // 从初级的divider_people中移除特定的ID
155
-//        foreach ($ids_to_remove_from_junior as $id) {
156
-//            $key = array_search($id, $junior);
157
-//            if ($key !== false) {
158
-//                unset($junior[$key]); // 移除初级中的特定ID
159
-//            }
160
-//        }
161
-//        // 从中级的divider_people中移除特定的ID
162
-//        foreach ($ids_to_remove_from_intermediate as $id) {
163
-//            $key = array_search($id, $intermediate);
164
-//            if ($key !== false) {
165
-//                unset($intermediate[$key]); // 移除中级中的特定ID
166
-//            }
167
-//        }
168
-//        // 重置数组的索引,因为unset会留下空位
169
-//        $salesArr['初级']['divider_people'] = array_values($junior);
170
-//        $salesArr['中级']['divider_people'] = array_values($intermediate);
171
-
153
+        //        $ids_to_remove_from_junior = array(12, 69, 144); // 从初级中移除的ID
154
+        //        $ids_to_remove_from_intermediate = array(49); // 从中级中移除的ID
155
+        //        // 查找初级并获取其divider_people
156
+        //        $junior = &$salesArr['初级']['divider_people']; // 使用引用,以便直接修改数组
157
+        //        // 查找中级并获取其divider_people
158
+        //        $intermediate = &$salesArr['中级']['divider_people']; // 使用引用,以便直接修改数组
159
+        //        // 从初级的divider_people中移除特定的ID
160
+        //        foreach ($ids_to_remove_from_junior as $id) {
161
+        //            $key = array_search($id, $junior);
162
+        //            if ($key !== false) {
163
+        //                unset($junior[$key]); // 移除初级中的特定ID
164
+        //            }
165
+        //        }
166
+        //        // 从中级的divider_people中移除特定的ID
167
+        //        foreach ($ids_to_remove_from_intermediate as $id) {
168
+        //            $key = array_search($id, $intermediate);
169
+        //            if ($key !== false) {
170
+        //                unset($intermediate[$key]); // 移除中级中的特定ID
171
+        //            }
172
+        //        }
173
+        //        // 重置数组的索引,因为unset会留下空位
174
+        //        $salesArr['初级']['divider_people'] = array_values($junior);
175
+        //        $salesArr['中级']['divider_people'] = array_values($intermediate);
176
+
177
+        // 获取查询合伙人 团队贡献值 最深的到哪一层
178
+        $depth = Db::name("system_config_value")->where(["config_key" => "team_commission_recursion_depth"])->value("value");
172 179
 
173 180
         // 6、执行分开发放
174 181
         $partnerProfitsPvListByUid = [];
@@ -176,14 +183,16 @@ class TaskPartnerProfits
176 183
             // 6.1 计算可分红金额
177 184
             //比如这个周的总业绩是 8400
178 185
             //周总业绩(8400) * 合伙人级别的分佣比例(15%) = 可分红的佣金(1260)
179
-//            $salesArr[$key]['fs_money_nums'] = round($weekRecord * $value['profit_rate'], 2);
186
+            //            $salesArr[$key]['fs_money_nums'] = round($weekRecord * $value['profit_rate'], 2);
180 187
             $salesArr[$key]['fs_money_nums'] = floor(($weekRecord * ($value['profit_rate'] / 100)) * 100) / 100;
181 188
             //可分红的业绩(分为两半,各50%,一部分是分给双联盟比例,一部分是小业绩比例)
182 189
             //把本周的业绩(8400) * 合伙人级别的分佣比例(15%) * 0.5 = 630(可分红佣金的 50%)
183
-//            $salesArr[$key]['fs_money'] = round($salesArr[$key]['fs_money_nums'] / 2, 2);
190
+            //            $salesArr[$key]['fs_money'] = round($salesArr[$key]['fs_money_nums'] / 2, 2);
184 191
             $salesArr[$key]['fs_money'] = floor(($salesArr[$key]['fs_money_nums'] / 2) * 100) / 100;
185 192
 
186 193
             // 6.2 计算所有人的 PV值
194
+            $salesArr[$key]['weekRecord'] = $weekRecord;
195
+            $salesArr[$key]['redEnvelope'] = $redEnvelope;
187 196
             $salesArr[$key]['maxValueAll'] = 0;
188 197
             $salesArr[$key]['sumOfOthersAll'] = 0;
189 198
             $salesArr[$key]['dividerPeoplePv'] = [];
@@ -239,14 +248,14 @@ class TaskPartnerProfits
239 248
                 //个人小区(佣金少的一部分) 权重 计算权重
240 249
                 //返回是数组,下标0是最小的值(业绩小的),下标1是最大的值(业绩大的)
241 250
                 $userPvSmallNum = $value['dividerPeoplePv'][$v]['sumOfOthers'] ?? 0;
242
-//                $myMixMoney = round($amount * ($userPvSmallNum / $sumOfOthersAll), 2);
251
+                //                $myMixMoney = round($amount * ($userPvSmallNum / $sumOfOthersAll), 2);
243 252
                 $myMixMoney = floor(($amount * (floor(($userPvSmallNum / $sumOfOthersAll) * 100) / 100)) * 100) / 100;
244 253
 
245 254
                 //个人双区总佣金 权重 计算
246 255
                 $myBill = $value['dividerPeoplePv'][$v]['maxValue'] ?? 0;
247 256
                 //中级合伙人。userid=17可以分到双区可分红的金额
248 257
                 //可分红的佣金 * (中级合伙人个人的双区总业绩 / 当前等级所有合伙人的双联盟业绩) = 当前用户可以获取到的分红佣金(双区联盟总业绩加权佣金),287742 * (61.95/431032)=41.36
249
-//                $myWeightMoney = round($amount * ($myBill / $maxValueAll), 2);
258
+                //                $myWeightMoney = round($amount * ($myBill / $maxValueAll), 2);
250 259
                 $myWeightMoney = floor(($amount * (floor((($myBill + $userPvSmallNum) / ($maxValueAll + $sumOfOthersAll)) * 100) / 100)) * 100) / 100;
251 260
 
252 261
 
@@ -254,7 +263,6 @@ class TaskPartnerProfits
254 263
                 $salesArr[$key]['dividerPeoplePv'][$v]['myMixMoney'] = $myMixMoney;
255 264
                 $salesArr[$key]['dividerPeoplePv'][$v]['maxValueAll'] = $maxValueAll;
256 265
                 $salesArr[$key]['dividerPeoplePv'][$v]['sumOfOthersAll'] = $sumOfOthersAll;
257
-                $salesArr[$key]['dividerPeoplePv'][$v]['weekRecord'] = $weekRecord;
258 266
 
259 267
                 # code...
260 268
                 $allAward = $myWeightMoney + $myMixMoney;
@@ -266,7 +274,7 @@ class TaskPartnerProfits
266 274
 
267 275
                 $userdatassss = db::name("old_user_jbp")->where("id", $v)->find();
268 276
                 $datas_log = [
269
-                    'note' => "名称:" . $userdatassss['nick_name'] . " 用户:" . $v . " 双联盟总业绩:" . $maxValueAll . " 我的双区业绩:" . $myBill . " 小区总业绩:" . $sumOfOthersAll . " 我的业绩小的:" . $userPvSmallNum[0] . "  可分红佣金:" . $amount . "  可分红总佣金:" . $fsMoneyNums . "  小区业绩可分红:" . $myMixMoney . " 区业绩可分红:" . $myWeightMoney . " 实际分得:" . $yj_90,
277
+                    'note' => "名称:" . $userdatassss['nick_name'] . " 用户:" . $v . " 双联盟总业绩:" . $maxValueAll . " 我的双区业绩:" . $myBill . " 小区总业绩:" . $userPvSmallNum . " 我的业绩小的:" . $myMixMoney . "  可分红佣金:" . $amount . "  可分红总佣金:" . $fsMoneyNums . "  小区业绩可分红:" . $myMixMoney . " 区业绩可分红:" . $myWeightMoney . " 实际分得:" . $yj_90,
270 278
                     'create_time' => date('Y-m-d H:i:s')
271 279
                 ];
272 280
                 $con_data = Db::name('test_log')->insert($datas_log);   //数据存到2.0数据表中
@@ -285,7 +293,7 @@ class TaskPartnerProfits
285 293
                 //入账星级分红记录表
286 294
                 $week_data = [];
287 295
                 $week_data['user_id'] = $v;
288
-                $week_data['user_star_id'] = $key;
296
+                $week_data['user_star_id'] = $value['id'];
289 297
                 $week_data['award_num'] = $myWeightMoney;
290 298
                 $week_data['award_num_sm'] = $myMixMoney;
291 299
                 $week_data['remark'] = "星级分红主动执行:" . $yj_90;
@@ -295,7 +303,6 @@ class TaskPartnerProfits
295 303
                 $week_data['owner_bill'] = $maxValueAll;  //总流水金额
296 304
                 $week_data['my_bill'] = $myBill;  //我的流水
297 305
                 $week_data['create_time'] = time();
298
-
299 306
                 Db::name("old_user_weekaward")->insert($week_data);
300 307
 
301 308
                 $this->bill_user_log111111($v, "合伙人分佣", $yj_90, "合伙人分佣明细入账", 11);//联创分佣明细2.0系统
@@ -578,10 +585,10 @@ class TaskPartnerProfits
578 585
 
579 586
         // 计算除去特定值后的总和
580 587
         $otherMoneyRecords = [];
581
-//        $otherMoneyRecords = Db::name("old_user_of_goods")
582
-//            ->whereIn("user_id", $userIdList)
583
-//            ->whereNotIn('money', [1180, 11800, 10620, 9440, 2360])
584
-//            ->select();
588
+        //        $otherMoneyRecords = Db::name("old_user_of_goods")
589
+        //            ->whereIn("user_id", $userIdList)
590
+        //            ->whereNotIn('money', [1180, 11800, 10620, 9440, 2360])
591
+        //            ->select();
585 592
         $otherMoneySum = 0;
586 593
         foreach ($otherMoneyRecords as $record) {
587 594
             $otherMoneySum += $record['money'];

+ 58 - 52
app/controller/api/store/merchant/Taskorderguquan.php

@@ -7,22 +7,16 @@
7 7
 
8 8
 namespace app\controller\api\store\merchant;
9 9
 
10
-use think\App;
11
-use crmeb\basic\BaseController;
12
-use app\common\repositories\system\merchant\MerchantRepository as repository;
13 10
 use think\facade\Db;
14
-use think\facade\Log;
15
-use function Symfony\Component\VarDumper\Dumper\esc;
16 11
 
17
-class Taskorderguquan extends BaseController
12
+class Taskorderguquan
18 13
 {
19 14
 
20 15
 
21 16
     public function lst6()
22 17
     {
23
-
24
-        $week_record = 10500 + 50000; //20250310
25
-
18
+        $startTime = '2025-03-10';
19
+        $endTime = '2025-03-30';
26 20
         // 查询测试人员账号信息
27 21
         //18973958920
28 22
         //15186694339
@@ -38,16 +32,25 @@ class Taskorderguquan extends BaseController
38 32
             ->select()
39 33
             ->toArray();
40 34
         $removeUserIdList = array_column($removeUserList, 'uid');
41
-        // 定义分红金额
42
-        $week_record = $this->getTeamPvByTime('last_week', $removeUserIdList);
43
-        // 分红金额 - 红包金额
44
-        $redEnvelope = $this->getRedEnvelopeByTime('last_week', $removeUserIdList);
45 35
 
46
-        $week_record -= $redEnvelope;
36
+        if (empty($startTime) || empty($endTime)) {
37
+            $timeMap = $this->getTime('last_week');
38
+            $startTime = $timeMap['startTime'] . ' 00:00:00';
39
+            $endTime = $timeMap['endTime'] . ' 23:59:59';
40
+        }
47 41
 
42
+        // 定义分红金额
43
+        $weekRecord = $this->getTeamPvByTime($startTime, $endTime, $removeUserIdList);
44
+        // 分红金额 - 红包金额
45
+        $redEnvelope = $this->getRedEnvelopeByTime($startTime, $endTime, $removeUserIdList);
48 46
 
49
-        $stock_comm = round($week_record * 0.05 ,2);
47
+        $weekRecord -= $redEnvelope;
48
+        if ($weekRecord <= 0) {
49
+            return json('无效分红金额');
50
+        }
50 51
 
52
+        // $stock_comm = round($weekRecord * 0.05 ,2);
53
+        $stock_comm = floor(($weekRecord * 0.05) * 100) / 100;
51 54
 
52 55
         //获取股权分红的人
53 56
 
@@ -55,12 +58,22 @@ class Taskorderguquan extends BaseController
55 58
 
56 59
         $stockuserdatas = db::name("old_user_stock")->select();//获取所有用户
57 60
 
58
-        if(count($stockuserdatas) > 0){
59
-            $one_pack_comm_data = round($stock_comm / $GetAllUserPackNum,2);//获取每份的单佣金
61
+        $salesArr = [];
62
+        if (count($stockuserdatas) > 0) {
63
+            // $one_pack_comm_data = round($stock_comm / $GetAllUserPackNum,2);//获取每份的单佣金
64
+            $one_pack_comm_data = floor(($stock_comm / $GetAllUserPackNum) * 100) / 100;
60 65
 
61 66
             foreach ($stockuserdatas as &$v) {
62
-                $v['getcomm'] = $v['pack'] * $one_pack_comm_data;
63
-                $v['allgetcomm'] =  $v['allgetcomm'] + $v['getcomm'];
67
+                $salesArr[] = [
68
+                    'stock_comm' => $stock_comm,
69
+                    'GetAllUserPackNum' => $GetAllUserPackNum,
70
+                    'uid' => $v['user_id'],
71
+                    'pack' => $v['pack'],
72
+                    'one_pack_comm_data' => $one_pack_comm_data,
73
+                    'getcomm' => floor(($v['pack'] * $one_pack_comm_data) * 100) / 100
74
+                ];
75
+                $v['getcomm'] = floor(($v['pack'] * $one_pack_comm_data) * 100) / 100;
76
+                $v['allgetcomm'] = $v['allgetcomm'] + $v['getcomm'];
64 77
                 $v['update_time'] = time();
65 78
 
66 79
                 $yj_90 = $v['getcomm'] * 0.9;
@@ -73,46 +86,47 @@ class Taskorderguquan extends BaseController
73 86
                     'update_time' => $v['update_time']
74 87
                 ]);
75 88
 
76
-                Db::name("user")->where("uid",$v['user_id'])->inc("brokerage_price", $yj_90)->save();
77
-                $res1 = Db::name("user")->where("uid",$v['user_id'])->inc("total_amount_old", $yj_90)->save();
78
-                $res2 = Db::name("user")->where("uid",$v['user_id'])->inc("amount_old", $yj_90)->save();
89
+                Db::name("user")->where("uid", $v['user_id'])->inc("brokerage_price", $yj_90)->save();
90
+                $res1 = Db::name("user")->where("uid", $v['user_id'])->inc("total_amount_old", $yj_90)->save();
91
+                $res2 = Db::name("user")->where("uid", $v['user_id'])->inc("amount_old", $yj_90)->save();
79 92
 
80
-                $res3 = Db::name("user")->where("uid",$v['user_id'])->inc("fugou", $fg_10)->save();
93
+                $res3 = Db::name("user")->where("uid", $v['user_id'])->inc("fugou", $fg_10)->save();
81 94
 
82
-                $res =true;
83
-                if($res){
84
-                    $das = $this->change_user_log($v['user_id'],'amount_old',1, $yj_90,"member_award_stock","股权分红入账"."-".$v['pack']);//释放佣金
95
+                $res = true;
96
+                if ($res) {
97
+                    $das = $this->change_user_log($v['user_id'], 'amount_old', 1, $yj_90, "member_award_stock", "股权分红入账" . "-" . $v['pack']);//释放佣金
85 98
 
86 99
                     //入账星级分红记录表
87 100
                     $week_data = [];
88
-                    $week_data['user_id'] =  $v['user_id'];
89
-                    $week_data['user_star_id'] =  0;
90
-                    $week_data['award_num'] =  0;
91
-                    $week_data['award_num_sm'] =  0;
92
-                    $week_data['remark'] =  "股权分红主动执行" . $yj_90;
93
-                    $week_data['week_record'] =  $week_record;
94
-                    $week_data['all_amount'] =  $stock_comm;
95
-                    $week_data['radio'] =  2;
96
-                    $week_data['owner_bill'] =  0;  //总流水金额
101
+                    $week_data['user_id'] = $v['user_id'];
102
+                    $week_data['user_star_id'] = 0;
103
+                    $week_data['award_num'] = 0;
104
+                    $week_data['award_num_sm'] = 0;
105
+                    $week_data['remark'] = "股权分红主动执行" . $yj_90;
106
+                    $week_data['week_record'] = $weekRecord;
107
+                    $week_data['all_amount'] = $stock_comm;
108
+                    $week_data['radio'] = 2;
109
+                    $week_data['owner_bill'] = 0;  //总流水金额
97 110
                     $week_data['my_bill'] = 0;  //我的流水
98 111
                     $week_data['create_time'] = time();
99 112
 
100 113
 
101 114
                     Db::name("old_user_weekaward")->insert($week_data);
102 115
 
103
-                    $userdatassss = db::name("old_user_jbp")->where("id",$v['user_id'])->find();
116
+                    $userdatassss = db::name("old_user_jbp")->where("id", $v['user_id'])->find();
104 117
                     $datas_log = [
105
-                        'note'=>"名称:".  $userdatassss['nick_name']  . " 用户:".  $v['user_id'] . " 新增股权佣金:" .  $yj_90,
106
-                        'create_time'=>date('Y-m-d H:i:s')
118
+                        'note' => "名称:" . $userdatassss['nick_name'] . " 用户:" . $v['user_id'] . " 新增股权佣金:" . $yj_90,
119
+                        'create_time' => date('Y-m-d H:i:s')
107 120
                     ];
108 121
                     $con_data = Db::name('test_log')->insert($datas_log);   //数据存到2.0数据表中
109 122
 
110
-                    $this->bill_user_log111111($v['user_id'],"股权分佣",  $yj_90,"股权明细入账",13);//股权分佣明细2.0系统
123
+                    $this->bill_user_log111111($v['user_id'], "股权分佣", $yj_90, "股权明细入账", 13);//股权分佣明细2.0系统
111 124
 
112
-                    $this->fugou_user_log($v['user_id'],$fg_10,16,1,1);//复购金明细入账
125
+                    $this->fugou_user_log($v['user_id'], $fg_10, 16, 1, 1);//复购金明细入账
113 126
                 }
114 127
             }
115 128
         }
129
+        return json($salesArr);
116 130
         //股权分红 end
117 131
     }
118 132
 
@@ -252,19 +266,15 @@ class Taskorderguquan extends BaseController
252 266
         return ['startTime' => $startTime, 'endTime' => $endTime];
253 267
     }
254 268
 
255
-    public function getTeamPvByTime($timePeriod = 'last_week', $removeUserIdList = [])
269
+    public function getTeamPvByTime($startTime, $endTime, $removeUserIdList = [])
256 270
     {
257
-        $timeMap = $this->getTime($timePeriod);
258
-        $startTime = $timeMap['startTime'];
259
-        $endTime = $timeMap['endTime'];
260
-
261 271
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
262 272
         $orders = Db::name("store_order")
263 273
             ->where('mer_id', 496)
264 274
             ->whereNotIn('uid', $removeUserIdList)
265 275
             ->whereIn('status', [0, 1, 2, 3])
266 276
             ->whereIn("total_price", [1180, 11800, 10620, 2360, 9440])
267
-            ->whereBetween("pay_time", [$startTime . ' 00:00:00', $endTime . ' 23:59:59'])
277
+            ->whereBetween("pay_time", [$startTime, $endTime])
268 278
             ->whereNotNull("pay_time") // 排除 pay_time 为 NULL 的订单
269 279
             ->select();
270 280
 
@@ -293,17 +303,13 @@ class Taskorderguquan extends BaseController
293 303
         return $totalPv;
294 304
     }
295 305
 
296
-    public function getRedEnvelopeByTime($timePeriod = 'last_week', $removeUserIdList = [])
306
+    public function getRedEnvelopeByTime($startTime, $endTime, $removeUserIdList = [])
297 307
     {
298
-        $timeMap = $this->getTime($timePeriod);
299
-        $startTime = $timeMap['startTime'];
300
-        $endTime = $timeMap['endTime'];
301
-
302 308
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
303 309
         $redEnvelopeList = Db::name("user_sign_hongbao")
304 310
             ->whereNotIn('uid', $removeUserIdList)
305 311
             ->where('status', 1)
306
-            ->whereBetween("settlement_time", [$startTime . ' 00:00:00', $endTime . ' 23:59:59'])
312
+            ->whereBetween("settlement_time", [$startTime, $endTime])
307 313
             ->select()
308 314
             ->toArray();
309 315
         return floor(array_sum(array_column($redEnvelopeList, 'number')) * 100) / 100;

+ 45 - 39
app/controller/api/store/merchant/Taskorderlianc.php

@@ -7,14 +7,9 @@
7 7
 
8 8
 namespace app\controller\api\store\merchant;
9 9
 
10
-use think\App;
11
-use crmeb\basic\BaseController;
12
-use app\common\repositories\system\merchant\MerchantRepository as repository;
13 10
 use think\facade\Db;
14
-use think\facade\Log;
15
-use function Symfony\Component\VarDumper\Dumper\esc;
16 11
 
17
-class Taskorderlianc extends BaseController
12
+class Taskorderlianc
18 13
 {
19 14
 
20 15
     /**
@@ -278,10 +273,8 @@ class Taskorderlianc extends BaseController
278 273
 
279 274
     public function lst2()
280 275
     {
281
-
282
-
283
-        $week_record = 10500 + 50000; //20250310
284
-
276
+        $startTime = '2025-03-10';
277
+        $endTime = '2025-03-30';
285 278
         // 查询测试人员账号信息
286 279
         //18973958920
287 280
         //15186694339
@@ -297,17 +290,26 @@ class Taskorderlianc extends BaseController
297 290
             ->select()
298 291
             ->toArray();
299 292
         $removeUserIdList = array_column($removeUserList, 'uid');
293
+
294
+        if (empty($startTime) || empty($endTime)) {
295
+            $timeMap = $this->getTime('last_week');
296
+            $startTime = $timeMap['startTime'] . ' 00:00:00';
297
+            $endTime = $timeMap['endTime'] . ' 23:59:59';
298
+        }
299
+
300 300
         // 定义分红金额
301
-        $week_record = $this->getTeamPvByTime('last_week', $removeUserIdList);
301
+        $weekRecord = $this->getTeamPvByTime($startTime, $endTime, $removeUserIdList);
302 302
         // 分红金额 - 红包金额
303
-        $redEnvelope = $this->getRedEnvelopeByTime('last_week', $removeUserIdList);
303
+        $redEnvelope = $this->getRedEnvelopeByTime($startTime, $endTime, $removeUserIdList);
304 304
 
305
-        $week_record -= $redEnvelope;
305
+        $weekRecord -= $redEnvelope;
306
+        if ($weekRecord <= 0) {
307
+            return json('无效分红金额');
308
+        }
306 309
 
307 310
 
308
-        $originator_award = round(($week_record * 0.05), 2);
311
+        $originator_award = round(($weekRecord * 0.05), 2);
309 312
 
310
-        $list = Db::name("user")->where("originator_id_old", ">", 0)->where("status", 1)->field("uid,originator_id_old")->select()->toArray();
311 313
 
312 314
         // foreach($list as $k=>$v){
313 315
         //     var_dump($v);
@@ -318,14 +320,16 @@ class Taskorderlianc extends BaseController
318 320
         $sum_money = Db::name("old_user_lianc")->sum("number");
319 321
 
320 322
         $lianc_list = Db::name("old_user_lianc")->order("id desc")->field("id,number,title")->select()->toArray();
321
-        $user_arr = [];
322 323
 
323
-        $lianc_list_arr = [];
324
-        foreach ($lianc_list as $key => $value) {
325
-            # code...
326
-            $lianc_list_arr[$value['id']] = $value;
327
-        }
324
+        $lianc_list_arr = array_column($lianc_list, null, 'id');
328 325
 
326
+        $list = Db::name("user")
327
+            ->where("originator_id_old", ">", 0)
328
+            ->where("status", 1)
329
+            ->field("uid,originator_id_old")
330
+            ->select()
331
+            ->toArray();
332
+        $user_arr = [];
329 333
         foreach ($list as $key => $value) {
330 334
             # code...
331 335
             $user_arr[$value['originator_id_old']]['people'][] = $value['uid'];
@@ -334,22 +338,32 @@ class Taskorderlianc extends BaseController
334 338
             $user_arr[$value['originator_id_old']]['id'] = $lianc_list_arr[$value['originator_id_old']]['id'];
335 339
         }
336 340
 
337
-
338 341
         //处理计算权重 和平均分配的金额
339 342
         $total_num = 0;
340 343
         $count_num = 0;
341 344
         foreach ($user_arr as $key => $value) {
345
+            $user_arr[$key]['people_count'] = count($user_arr[$key]['people']);
342 346
             # code...
343
-            $total_num += round($value['money'] * count($value['people']) / 1000, 2);
347
+            // floor(($weekRecord * ($value['profit_rate'] / 100)) * 100) / 100;
348
+            // $total_num += round($value['money'] * count($value['people']) / 1000, 2);
349
+            $total_num += floor(($value['money'] * count($value['people'])) * 100) / 100;
350
+
351
+            if (isset($user_arr[$key]['total_num'])) {
352
+                $user_arr[$key]['total_num'] += floor(($value['money'] * count($value['people'])) * 100) / 100;
353
+            } else {
354
+                $user_arr[$key]['total_num'] = 0;
355
+            }
344 356
             $count_num += count($value['people']);
345 357
         }
346 358
         foreach ($user_arr as $key => $value) {
347 359
             # code...
348
-            $rate = round((count($value['people']) * $value['money']) / $total_num, 2) / 1000;
360
+            // $rate = round((count($value['people']) * $value['money']) / $total_num, 2) / 1000;
361
+            $rate = floor(($value['money'] * count($value['people']) / $total_num) * 100) / 100;
349 362
             $user_arr[$key]['rate'] = $rate;
350
-            $distribution_money = round($originator_award * $rate, 2);
363
+            $distribution_money = floor($originator_award * $rate * 100) / 100;
351 364
             $user_arr[$key]['distribution_money'] = $distribution_money;
352
-            $user_arr[$key]['people_award'] = round($distribution_money / count($value['people']), 2);//可分配佣金
365
+            // $user_arr[$key]['people_award'] = round($distribution_money / count($value['people']), 2);//可分配佣金
366
+            $user_arr[$key]['people_award'] = floor($distribution_money / count($value['people']) * 100) / 100;//可分配佣金
353 367
         }
354 368
 
355 369
         $count = 0;
@@ -359,7 +373,6 @@ class Taskorderlianc extends BaseController
359 373
             foreach ($value['people'] as $k => $v) {
360 374
                 # code...
361 375
                 $award = $value['people_award'];
362
-
363 376
                 //90给佣金,10给复购金
364 377
                 $yj_90 = $award * 0.9;
365 378
                 $fg_10 = $award * 0.1;
@@ -399,6 +412,7 @@ class Taskorderlianc extends BaseController
399 412
                 }
400 413
             }
401 414
         }
415
+        return json($user_arr);
402 416
     }
403 417
 
404 418
     //添加复购金
@@ -617,19 +631,15 @@ class Taskorderlianc extends BaseController
617 631
         return ['startTime' => $startTime, 'endTime' => $endTime];
618 632
     }
619 633
 
620
-    public function getTeamPvByTime($timePeriod = 'last_week', $removeUserIdList = [])
634
+    public function getTeamPvByTime($startTime, $endTime, $removeUserIdList = [])
621 635
     {
622
-        $timeMap = $this->getTime($timePeriod);
623
-        $startTime = $timeMap['startTime'];
624
-        $endTime = $timeMap['endTime'];
625
-
626 636
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
627 637
         $orders = Db::name("store_order")
628 638
             ->where('mer_id', 496)
629 639
             ->whereNotIn('uid', $removeUserIdList)
630 640
             ->whereIn('status', [0, 1, 2, 3])
631 641
             ->whereIn("total_price", [1180, 11800, 10620, 2360, 9440])
632
-            ->whereBetween("pay_time", [$startTime . ' 00:00:00', $endTime . ' 23:59:59'])
642
+            ->whereBetween("pay_time", [$startTime, $endTime])
633 643
             ->whereNotNull("pay_time") // 排除 pay_time 为 NULL 的订单
634 644
             ->select();
635 645
 
@@ -658,17 +668,13 @@ class Taskorderlianc extends BaseController
658 668
         return $totalPv;
659 669
     }
660 670
 
661
-    public function getRedEnvelopeByTime($timePeriod = 'last_week', $removeUserIdList = [])
671
+    public function getRedEnvelopeByTime($startTime, $endTime, $removeUserIdList = [])
662 672
     {
663
-        $timeMap = $this->getTime($timePeriod);
664
-        $startTime = $timeMap['startTime'];
665
-        $endTime = $timeMap['endTime'];
666
-
667 673
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
668 674
         $redEnvelopeList = Db::name("user_sign_hongbao")
669 675
             ->whereNotIn('uid', $removeUserIdList)
670 676
             ->where('status', 1)
671
-            ->whereBetween("settlement_time", [$startTime . ' 00:00:00', $endTime . ' 23:59:59'])
677
+            ->whereBetween("settlement_time", [$startTime, $endTime])
672 678
             ->select()
673 679
             ->toArray();
674 680
         return floor(array_sum(array_column($redEnvelopeList, 'number')) * 100) / 100;