|
|
@@ -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'];
|