Browse Source

分红功能微调

sunxiaobiao 1 year ago
parent
commit
35211830cb

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

@@ -23,23 +23,19 @@ class TaskPartnerProfits
23
             $startTime = date('Y-m-d', strtotime('monday this week', $now)); // 这周星期一的开始时间
23
             $startTime = date('Y-m-d', strtotime('monday this week', $now)); // 这周星期一的开始时间
24
             $endTime = date('Y-m-d', strtotime('sunday this week', $now)); // 这周星期日的结束时间
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
         return ['startTime' => $startTime, 'endTime' => $endTime];
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
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
32
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
37
         $orders = Db::name("store_order")
33
         $orders = Db::name("store_order")
38
             ->where('mer_id', 496)
34
             ->where('mer_id', 496)
39
             ->whereNotIn('uid', $removeUserIdList)
35
             ->whereNotIn('uid', $removeUserIdList)
40
             ->whereIn('status', [0, 1, 2, 3])
36
             ->whereIn('status', [0, 1, 2, 3])
41
             ->whereIn("total_price", [1180, 11800, 10620, 2360, 9440])
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
             ->whereNotNull("pay_time") // 排除 pay_time 为 NULL 的订单
39
             ->whereNotNull("pay_time") // 排除 pay_time 为 NULL 的订单
44
             ->select();
40
             ->select();
45
 
41
 
@@ -68,24 +64,22 @@ class TaskPartnerProfits
68
         return $totalPv;
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
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
69
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
78
         $redEnvelopeList = Db::name("user_sign_hongbao")
70
         $redEnvelopeList = Db::name("user_sign_hongbao")
79
             ->whereNotIn('uid', $removeUserIdList)
71
             ->whereNotIn('uid', $removeUserIdList)
80
             ->where('status', 1)
72
             ->where('status', 1)
81
-            ->whereBetween("settlement_time", [$startTime . ' 00:00:00', $endTime . ' 23:59:59'])
73
+            ->whereBetween("settlement_time", [$startTime, $endTime])
82
             ->select()
74
             ->select()
83
             ->toArray();
75
             ->toArray();
84
         return floor(array_sum(array_column($redEnvelopeList, 'number')) * 100) / 100;
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
         //18973958920
84
         //18973958920
91
         //15186694339
85
         //15186694339
@@ -101,10 +95,17 @@ class TaskPartnerProfits
101
             ->select()
95
             ->select()
102
             ->toArray();
96
             ->toArray();
103
         $removeUserIdList = array_column($removeUserList, 'uid');
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
         $weekRecord -= $redEnvelope;
110
         $weekRecord -= $redEnvelope;
110
         if ($weekRecord <= 0) {
111
         if ($weekRecord <= 0) {
@@ -125,7 +126,7 @@ class TaskPartnerProfits
125
 
126
 
126
         // 3、获取 分红用户 信息 (`user_group` tinyint(1) DEFAULT '1' COMMENT '1消费者 2,推广业务员 3,业务经理 4初级合伙人5中级合伙人 6高级合伙人 7.懂事',)
127
         // 3、获取 分红用户 信息 (`user_group` tinyint(1) DEFAULT '1' COMMENT '1消费者 2,推广业务员 3,业务经理 4初级合伙人5中级合伙人 6高级合伙人 7.懂事',)
127
         $list = Db::name("user")
128
         $list = Db::name("user")
128
-//            ->whereNotIn('uid', $removeUserIdList)
129
+            //            ->whereNotIn('uid', $removeUserIdList)
129
             ->where("user_group", "IN", [4, 5, 6])
130
             ->where("user_group", "IN", [4, 5, 6])
130
             ->where("status", "<>", 0)
131
             ->where("status", "<>", 0)
131
             ->where('is_del', '<>', 1)
132
             ->where('is_del', '<>', 1)
@@ -142,33 +143,39 @@ class TaskPartnerProfits
142
                 $salesArr['高级']['divider_people'][] = $value['uid'];
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
         // 5、移除特定人员
151
         // 5、移除特定人员
147
         // 要移动的ID数组
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
         // 6、执行分开发放
180
         // 6、执行分开发放
174
         $partnerProfitsPvListByUid = [];
181
         $partnerProfitsPvListByUid = [];
@@ -176,14 +183,16 @@ class TaskPartnerProfits
176
             // 6.1 计算可分红金额
183
             // 6.1 计算可分红金额
177
             //比如这个周的总业绩是 8400
184
             //比如这个周的总业绩是 8400
178
             //周总业绩(8400) * 合伙人级别的分佣比例(15%) = 可分红的佣金(1260)
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
             $salesArr[$key]['fs_money_nums'] = floor(($weekRecord * ($value['profit_rate'] / 100)) * 100) / 100;
187
             $salesArr[$key]['fs_money_nums'] = floor(($weekRecord * ($value['profit_rate'] / 100)) * 100) / 100;
181
             //可分红的业绩(分为两半,各50%,一部分是分给双联盟比例,一部分是小业绩比例)
188
             //可分红的业绩(分为两半,各50%,一部分是分给双联盟比例,一部分是小业绩比例)
182
             //把本周的业绩(8400) * 合伙人级别的分佣比例(15%) * 0.5 = 630(可分红佣金的 50%)
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
             $salesArr[$key]['fs_money'] = floor(($salesArr[$key]['fs_money_nums'] / 2) * 100) / 100;
191
             $salesArr[$key]['fs_money'] = floor(($salesArr[$key]['fs_money_nums'] / 2) * 100) / 100;
185
 
192
 
186
             // 6.2 计算所有人的 PV值
193
             // 6.2 计算所有人的 PV值
194
+            $salesArr[$key]['weekRecord'] = $weekRecord;
195
+            $salesArr[$key]['redEnvelope'] = $redEnvelope;
187
             $salesArr[$key]['maxValueAll'] = 0;
196
             $salesArr[$key]['maxValueAll'] = 0;
188
             $salesArr[$key]['sumOfOthersAll'] = 0;
197
             $salesArr[$key]['sumOfOthersAll'] = 0;
189
             $salesArr[$key]['dividerPeoplePv'] = [];
198
             $salesArr[$key]['dividerPeoplePv'] = [];
@@ -239,14 +248,14 @@ class TaskPartnerProfits
239
                 //个人小区(佣金少的一部分) 权重 计算权重
248
                 //个人小区(佣金少的一部分) 权重 计算权重
240
                 //返回是数组,下标0是最小的值(业绩小的),下标1是最大的值(业绩大的)
249
                 //返回是数组,下标0是最小的值(业绩小的),下标1是最大的值(业绩大的)
241
                 $userPvSmallNum = $value['dividerPeoplePv'][$v]['sumOfOthers'] ?? 0;
250
                 $userPvSmallNum = $value['dividerPeoplePv'][$v]['sumOfOthers'] ?? 0;
242
-//                $myMixMoney = round($amount * ($userPvSmallNum / $sumOfOthersAll), 2);
251
+                //                $myMixMoney = round($amount * ($userPvSmallNum / $sumOfOthersAll), 2);
243
                 $myMixMoney = floor(($amount * (floor(($userPvSmallNum / $sumOfOthersAll) * 100) / 100)) * 100) / 100;
252
                 $myMixMoney = floor(($amount * (floor(($userPvSmallNum / $sumOfOthersAll) * 100) / 100)) * 100) / 100;
244
 
253
 
245
                 //个人双区总佣金 权重 计算
254
                 //个人双区总佣金 权重 计算
246
                 $myBill = $value['dividerPeoplePv'][$v]['maxValue'] ?? 0;
255
                 $myBill = $value['dividerPeoplePv'][$v]['maxValue'] ?? 0;
247
                 //中级合伙人。userid=17可以分到双区可分红的金额
256
                 //中级合伙人。userid=17可以分到双区可分红的金额
248
                 //可分红的佣金 * (中级合伙人个人的双区总业绩 / 当前等级所有合伙人的双联盟业绩) = 当前用户可以获取到的分红佣金(双区联盟总业绩加权佣金),287742 * (61.95/431032)=41.36
257
                 //可分红的佣金 * (中级合伙人个人的双区总业绩 / 当前等级所有合伙人的双联盟业绩) = 当前用户可以获取到的分红佣金(双区联盟总业绩加权佣金),287742 * (61.95/431032)=41.36
249
-//                $myWeightMoney = round($amount * ($myBill / $maxValueAll), 2);
258
+                //                $myWeightMoney = round($amount * ($myBill / $maxValueAll), 2);
250
                 $myWeightMoney = floor(($amount * (floor((($myBill + $userPvSmallNum) / ($maxValueAll + $sumOfOthersAll)) * 100) / 100)) * 100) / 100;
259
                 $myWeightMoney = floor(($amount * (floor((($myBill + $userPvSmallNum) / ($maxValueAll + $sumOfOthersAll)) * 100) / 100)) * 100) / 100;
251
 
260
 
252
 
261
 
@@ -254,7 +263,6 @@ class TaskPartnerProfits
254
                 $salesArr[$key]['dividerPeoplePv'][$v]['myMixMoney'] = $myMixMoney;
263
                 $salesArr[$key]['dividerPeoplePv'][$v]['myMixMoney'] = $myMixMoney;
255
                 $salesArr[$key]['dividerPeoplePv'][$v]['maxValueAll'] = $maxValueAll;
264
                 $salesArr[$key]['dividerPeoplePv'][$v]['maxValueAll'] = $maxValueAll;
256
                 $salesArr[$key]['dividerPeoplePv'][$v]['sumOfOthersAll'] = $sumOfOthersAll;
265
                 $salesArr[$key]['dividerPeoplePv'][$v]['sumOfOthersAll'] = $sumOfOthersAll;
257
-                $salesArr[$key]['dividerPeoplePv'][$v]['weekRecord'] = $weekRecord;
258
 
266
 
259
                 # code...
267
                 # code...
260
                 $allAward = $myWeightMoney + $myMixMoney;
268
                 $allAward = $myWeightMoney + $myMixMoney;
@@ -266,7 +274,7 @@ class TaskPartnerProfits
266
 
274
 
267
                 $userdatassss = db::name("old_user_jbp")->where("id", $v)->find();
275
                 $userdatassss = db::name("old_user_jbp")->where("id", $v)->find();
268
                 $datas_log = [
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
                     'create_time' => date('Y-m-d H:i:s')
278
                     'create_time' => date('Y-m-d H:i:s')
271
                 ];
279
                 ];
272
                 $con_data = Db::name('test_log')->insert($datas_log);   //数据存到2.0数据表中
280
                 $con_data = Db::name('test_log')->insert($datas_log);   //数据存到2.0数据表中
@@ -285,7 +293,7 @@ class TaskPartnerProfits
285
                 //入账星级分红记录表
293
                 //入账星级分红记录表
286
                 $week_data = [];
294
                 $week_data = [];
287
                 $week_data['user_id'] = $v;
295
                 $week_data['user_id'] = $v;
288
-                $week_data['user_star_id'] = $key;
296
+                $week_data['user_star_id'] = $value['id'];
289
                 $week_data['award_num'] = $myWeightMoney;
297
                 $week_data['award_num'] = $myWeightMoney;
290
                 $week_data['award_num_sm'] = $myMixMoney;
298
                 $week_data['award_num_sm'] = $myMixMoney;
291
                 $week_data['remark'] = "星级分红主动执行:" . $yj_90;
299
                 $week_data['remark'] = "星级分红主动执行:" . $yj_90;
@@ -295,7 +303,6 @@ class TaskPartnerProfits
295
                 $week_data['owner_bill'] = $maxValueAll;  //总流水金额
303
                 $week_data['owner_bill'] = $maxValueAll;  //总流水金额
296
                 $week_data['my_bill'] = $myBill;  //我的流水
304
                 $week_data['my_bill'] = $myBill;  //我的流水
297
                 $week_data['create_time'] = time();
305
                 $week_data['create_time'] = time();
298
-
299
                 Db::name("old_user_weekaward")->insert($week_data);
306
                 Db::name("old_user_weekaward")->insert($week_data);
300
 
307
 
301
                 $this->bill_user_log111111($v, "合伙人分佣", $yj_90, "合伙人分佣明细入账", 11);//联创分佣明细2.0系统
308
                 $this->bill_user_log111111($v, "合伙人分佣", $yj_90, "合伙人分佣明细入账", 11);//联创分佣明细2.0系统
@@ -578,10 +585,10 @@ class TaskPartnerProfits
578
 
585
 
579
         // 计算除去特定值后的总和
586
         // 计算除去特定值后的总和
580
         $otherMoneyRecords = [];
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
         $otherMoneySum = 0;
592
         $otherMoneySum = 0;
586
         foreach ($otherMoneyRecords as $record) {
593
         foreach ($otherMoneyRecords as $record) {
587
             $otherMoneySum += $record['money'];
594
             $otherMoneySum += $record['money'];

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

@@ -7,22 +7,16 @@
7
 
7
 
8
 namespace app\controller\api\store\merchant;
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
 use think\facade\Db;
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
     public function lst6()
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
         //18973958920
21
         //18973958920
28
         //15186694339
22
         //15186694339
@@ -38,16 +32,25 @@ class Taskorderguquan extends BaseController
38
             ->select()
32
             ->select()
39
             ->toArray();
33
             ->toArray();
40
         $removeUserIdList = array_column($removeUserList, 'uid');
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
         $stockuserdatas = db::name("old_user_stock")->select();//获取所有用户
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
             foreach ($stockuserdatas as &$v) {
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
                 $v['update_time'] = time();
77
                 $v['update_time'] = time();
65
 
78
 
66
                 $yj_90 = $v['getcomm'] * 0.9;
79
                 $yj_90 = $v['getcomm'] * 0.9;
@@ -73,46 +86,47 @@ class Taskorderguquan extends BaseController
73
                     'update_time' => $v['update_time']
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
                     $week_data = [];
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
                     $week_data['my_bill'] = 0;  //我的流水
110
                     $week_data['my_bill'] = 0;  //我的流水
98
                     $week_data['create_time'] = time();
111
                     $week_data['create_time'] = time();
99
 
112
 
100
 
113
 
101
                     Db::name("old_user_weekaward")->insert($week_data);
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
                     $datas_log = [
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
                     $con_data = Db::name('test_log')->insert($datas_log);   //数据存到2.0数据表中
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
         //股权分红 end
130
         //股权分红 end
117
     }
131
     }
118
 
132
 
@@ -252,19 +266,15 @@ class Taskorderguquan extends BaseController
252
         return ['startTime' => $startTime, 'endTime' => $endTime];
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
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
271
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
262
         $orders = Db::name("store_order")
272
         $orders = Db::name("store_order")
263
             ->where('mer_id', 496)
273
             ->where('mer_id', 496)
264
             ->whereNotIn('uid', $removeUserIdList)
274
             ->whereNotIn('uid', $removeUserIdList)
265
             ->whereIn('status', [0, 1, 2, 3])
275
             ->whereIn('status', [0, 1, 2, 3])
266
             ->whereIn("total_price", [1180, 11800, 10620, 2360, 9440])
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
             ->whereNotNull("pay_time") // 排除 pay_time 为 NULL 的订单
278
             ->whereNotNull("pay_time") // 排除 pay_time 为 NULL 的订单
269
             ->select();
279
             ->select();
270
 
280
 
@@ -293,17 +303,13 @@ class Taskorderguquan extends BaseController
293
         return $totalPv;
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
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
308
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
303
         $redEnvelopeList = Db::name("user_sign_hongbao")
309
         $redEnvelopeList = Db::name("user_sign_hongbao")
304
             ->whereNotIn('uid', $removeUserIdList)
310
             ->whereNotIn('uid', $removeUserIdList)
305
             ->where('status', 1)
311
             ->where('status', 1)
306
-            ->whereBetween("settlement_time", [$startTime . ' 00:00:00', $endTime . ' 23:59:59'])
312
+            ->whereBetween("settlement_time", [$startTime, $endTime])
307
             ->select()
313
             ->select()
308
             ->toArray();
314
             ->toArray();
309
         return floor(array_sum(array_column($redEnvelopeList, 'number')) * 100) / 100;
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
 namespace app\controller\api\store\merchant;
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
 use think\facade\Db;
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
     public function lst2()
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
         //18973958920
279
         //18973958920
287
         //15186694339
280
         //15186694339
@@ -297,17 +290,26 @@ class Taskorderlianc extends BaseController
297
             ->select()
290
             ->select()
298
             ->toArray();
291
             ->toArray();
299
         $removeUserIdList = array_column($removeUserList, 'uid');
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
         // foreach($list as $k=>$v){
314
         // foreach($list as $k=>$v){
313
         //     var_dump($v);
315
         //     var_dump($v);
@@ -318,14 +320,16 @@ class Taskorderlianc extends BaseController
318
         $sum_money = Db::name("old_user_lianc")->sum("number");
320
         $sum_money = Db::name("old_user_lianc")->sum("number");
319
 
321
 
320
         $lianc_list = Db::name("old_user_lianc")->order("id desc")->field("id,number,title")->select()->toArray();
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
         foreach ($list as $key => $value) {
333
         foreach ($list as $key => $value) {
330
             # code...
334
             # code...
331
             $user_arr[$value['originator_id_old']]['people'][] = $value['uid'];
335
             $user_arr[$value['originator_id_old']]['people'][] = $value['uid'];
@@ -334,22 +338,32 @@ class Taskorderlianc extends BaseController
334
             $user_arr[$value['originator_id_old']]['id'] = $lianc_list_arr[$value['originator_id_old']]['id'];
338
             $user_arr[$value['originator_id_old']]['id'] = $lianc_list_arr[$value['originator_id_old']]['id'];
335
         }
339
         }
336
 
340
 
337
-
338
         //处理计算权重 和平均分配的金额
341
         //处理计算权重 和平均分配的金额
339
         $total_num = 0;
342
         $total_num = 0;
340
         $count_num = 0;
343
         $count_num = 0;
341
         foreach ($user_arr as $key => $value) {
344
         foreach ($user_arr as $key => $value) {
345
+            $user_arr[$key]['people_count'] = count($user_arr[$key]['people']);
342
             # code...
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
             $count_num += count($value['people']);
356
             $count_num += count($value['people']);
345
         }
357
         }
346
         foreach ($user_arr as $key => $value) {
358
         foreach ($user_arr as $key => $value) {
347
             # code...
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
             $user_arr[$key]['rate'] = $rate;
362
             $user_arr[$key]['rate'] = $rate;
350
-            $distribution_money = round($originator_award * $rate, 2);
363
+            $distribution_money = floor($originator_award * $rate * 100) / 100;
351
             $user_arr[$key]['distribution_money'] = $distribution_money;
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
         $count = 0;
369
         $count = 0;
@@ -359,7 +373,6 @@ class Taskorderlianc extends BaseController
359
             foreach ($value['people'] as $k => $v) {
373
             foreach ($value['people'] as $k => $v) {
360
                 # code...
374
                 # code...
361
                 $award = $value['people_award'];
375
                 $award = $value['people_award'];
362
-
363
                 //90给佣金,10给复购金
376
                 //90给佣金,10给复购金
364
                 $yj_90 = $award * 0.9;
377
                 $yj_90 = $award * 0.9;
365
                 $fg_10 = $award * 0.1;
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
         return ['startTime' => $startTime, 'endTime' => $endTime];
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
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
636
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
627
         $orders = Db::name("store_order")
637
         $orders = Db::name("store_order")
628
             ->where('mer_id', 496)
638
             ->where('mer_id', 496)
629
             ->whereNotIn('uid', $removeUserIdList)
639
             ->whereNotIn('uid', $removeUserIdList)
630
             ->whereIn('status', [0, 1, 2, 3])
640
             ->whereIn('status', [0, 1, 2, 3])
631
             ->whereIn("total_price", [1180, 11800, 10620, 2360, 9440])
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
             ->whereNotNull("pay_time") // 排除 pay_time 为 NULL 的订单
643
             ->whereNotNull("pay_time") // 排除 pay_time 为 NULL 的订单
634
             ->select();
644
             ->select();
635
 
645
 
@@ -658,17 +668,13 @@ class Taskorderlianc extends BaseController
658
         return $totalPv;
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
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
673
         // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
668
         $redEnvelopeList = Db::name("user_sign_hongbao")
674
         $redEnvelopeList = Db::name("user_sign_hongbao")
669
             ->whereNotIn('uid', $removeUserIdList)
675
             ->whereNotIn('uid', $removeUserIdList)
670
             ->where('status', 1)
676
             ->where('status', 1)
671
-            ->whereBetween("settlement_time", [$startTime . ' 00:00:00', $endTime . ' 23:59:59'])
677
+            ->whereBetween("settlement_time", [$startTime, $endTime])
672
             ->select()
678
             ->select()
673
             ->toArray();
679
             ->toArray();
674
         return floor(array_sum(array_column($redEnvelopeList, 'number')) * 100) / 100;
680
         return floor(array_sum(array_column($redEnvelopeList, 'number')) * 100) / 100;