|
|
@@ -24,7 +24,7 @@ class SharedProsperityTaskRepository extends BaseRepository
|
|
24
|
24
|
* @throws \Exception
|
|
25
|
25
|
* @author 史晨
|
|
26
|
26
|
* @date 2026/2/10 10:10
|
|
27
|
|
- * 合伙人分红
|
|
|
27
|
+ * 合伙人分红(加权分配)
|
|
28
|
28
|
*/
|
|
29
|
29
|
public function partner($data)
|
|
30
|
30
|
{
|
|
|
@@ -62,63 +62,43 @@ class SharedProsperityTaskRepository extends BaseRepository
|
|
62
|
62
|
|
|
63
|
63
|
Db::startTrans();
|
|
64
|
64
|
try {
|
|
65
|
|
- foreach ($users as $key => $user) {
|
|
|
65
|
+ foreach ($users as $key => $userIds) {
|
|
66
|
66
|
if ($key == 0) {
|
|
67
|
67
|
continue;
|
|
68
|
68
|
}
|
|
69
|
69
|
$radio = $config[$key];
|
|
70
|
|
- $userNum = count($user);
|
|
|
70
|
+ // 该等级总分红
|
|
|
71
|
+ $levelTotal = floor(($conPri * ($radio / 100)) * 100) / 100;
|
|
71
|
72
|
|
|
72
|
|
- foreach ($user as $u) {
|
|
73
|
|
- // 计算每个用户分配的利润
|
|
74
|
|
- $userReward = floor(($conPri * ($radio / 100) / $userNum) * 100) / 100;
|
|
75
|
|
- // 记录日志
|
|
76
|
|
- $userData = $userDao->getWhere(['user_id' => $u])->toArray();
|
|
77
|
|
- $balanceDao->create([
|
|
78
|
|
- 'user_id' => $u,
|
|
79
|
|
- 'level' => $userData['partner_level'],
|
|
80
|
|
- 'radio' => $radio,
|
|
81
|
|
- 'total_profit' => $conPri,
|
|
82
|
|
- 'old' => $userData['balance'],
|
|
83
|
|
- 'number' => $userReward,
|
|
84
|
|
- 'after' => $userData['balance'] + $userReward
|
|
85
|
|
- ]);
|
|
|
73
|
+ // 获取该等级所有用户的基本信息
|
|
|
74
|
+ $userInfos = $userDao->getSharedProsperityUserEntityListByUserIdList($userIds);
|
|
|
75
|
+ if (empty($userInfos)) {
|
|
|
76
|
+ continue;
|
|
|
77
|
+ }
|
|
86
|
78
|
|
|
87
|
|
- $bill = [
|
|
88
|
|
- 'uid' => $u,
|
|
89
|
|
- 'link_id' => 0,//关联订单id
|
|
90
|
|
- 'pm' => 1,//0:支出,1:获得
|
|
91
|
|
- 'title' => '共富体系合伙人分佣',//账单标题
|
|
92
|
|
- 'category' => 'now_money',//明细种类
|
|
93
|
|
- 'type' => 'commission',//明细类型
|
|
94
|
|
- 'number' => $userReward,//明细数字
|
|
95
|
|
- 'balance' => 0,//剩余
|
|
96
|
|
- 'mark' => '共富体系合伙人分佣明细入账',//备注
|
|
97
|
|
- 'create_time' => date('Y-m-d H:i:s'),//添加时间
|
|
98
|
|
- 'status' => 1,//0待确定,1有效,-1无效
|
|
99
|
|
- 'commission_type' => CommonEnum::COMMISSION_TYPE['SHARED_PROSPERITY_PARTNER_COMMISSION']['code'],//佣金类型 1代理费 2 消费佣金 3直推奖√ 4辖区佣金\r\n5 养老金√ 6 广告费
|
|
100
|
|
- //7 跨店奖励√ 8平台奖励 9渠道商\r\n10 推荐创客收益√ 11分红奖金√ 12代理区域收益√ 13消费循环佣金
|
|
101
|
|
- //14-推荐代理收益√ 15邀请小区团长升级√ 16大v分享奖√ 17创客合伙人√ 18积分奖励√ 19创客补贴√’
|
|
102
|
|
- 'order_sn' => 0,//订单号
|
|
103
|
|
- 'tripartite' => 0,//
|
|
104
|
|
- 'type_shop' => 0,//0平台1多多进宝2唯品会3苏宁易购4网易考拉5淘宝客6京东联盟7饿了么8线上
|
|
105
|
|
- 'mer_id' => 0,//商户id
|
|
106
|
|
- 'source' => 0,//1线下 0线上
|
|
107
|
|
- 'order_type' => 1,//1自营 2 第三方 订单类型
|
|
108
|
|
- 'is_red_brokerage' => 0,//1红积分对冲佣金 0正常佣金
|
|
109
|
|
- 'gzc' => 3,//养老金是否已进入公证处log表0:未进入。1:已进入
|
|
110
|
|
- 'take_time' => time(),//结算时间
|
|
111
|
|
- 'district_id' => '',//
|
|
112
|
|
- 'street_id' => '',//
|
|
113
|
|
- 'month' => '',//月份
|
|
114
|
|
-
|
|
115
|
|
-
|
|
116
|
|
- ];
|
|
117
|
|
-
|
|
118
|
|
- Db::name('user_bill')->insert($bill);
|
|
119
|
|
-
|
|
120
|
|
- // 发放佣金
|
|
121
|
|
- $userDao->updateByUserId($u, ['balance' => ['inc', $userReward]]);
|
|
|
79
|
+ // 计算每个用户的团队业绩(实时统计)
|
|
|
80
|
+ $teamPvMap = [];
|
|
|
81
|
+ $totalTeamPv = 0;
|
|
|
82
|
+ foreach ($userInfos as $userInfo) {
|
|
|
83
|
+ $teamPv = $userDao->getTeamPvSum($userInfo->getUserId());
|
|
|
84
|
+ $teamPvMap[$userInfo->getUserId()] = $teamPv;
|
|
|
85
|
+ $totalTeamPv += $teamPv;
|
|
|
86
|
+ }
|
|
|
87
|
+ // 如果总团队业绩为0,则平均分配
|
|
|
88
|
+ if ($totalTeamPv == 0) {
|
|
|
89
|
+ $userNum = count($userInfos);
|
|
|
90
|
+ $eachReward = floor(($levelTotal / $userNum) * 100) / 100;
|
|
|
91
|
+ foreach ($userInfos as $userInfo) {
|
|
|
92
|
+ $userReward = $eachReward;
|
|
|
93
|
+ $this->distributeReward($userInfo, $userReward, $radio, $levelTotal, $balanceDao, $userDao);
|
|
|
94
|
+ }
|
|
|
95
|
+ } else {
|
|
|
96
|
+ // 加权分配
|
|
|
97
|
+ foreach ($userInfos as $userInfo) {
|
|
|
98
|
+ $weight = $teamPvMap[$userInfo->getUserId()] / $totalTeamPv;
|
|
|
99
|
+ $userReward = floor($levelTotal * $weight * 100) / 100;
|
|
|
100
|
+ $this->distributeReward($userInfo, $userReward, $radio, $levelTotal, $balanceDao, $userDao);
|
|
|
101
|
+ }
|
|
122
|
102
|
}
|
|
123
|
103
|
}
|
|
124
|
104
|
Db::commit();
|
|
|
@@ -129,6 +109,60 @@ class SharedProsperityTaskRepository extends BaseRepository
|
|
129
|
109
|
}
|
|
130
|
110
|
|
|
131
|
111
|
/**
|
|
|
112
|
+ * 分发奖励(记录日志和更新余额)
|
|
|
113
|
+ * @param $userInfo
|
|
|
114
|
+ * @param $userReward
|
|
|
115
|
+ * @param $radio
|
|
|
116
|
+ * @param $levelTotal
|
|
|
117
|
+ * @param $balanceDao
|
|
|
118
|
+ * @param $userDao
|
|
|
119
|
+ * @return void
|
|
|
120
|
+ */
|
|
|
121
|
+ private function distributeReward($userInfo, $userReward, $radio, $levelTotal, $balanceDao, $userDao)
|
|
|
122
|
+ {
|
|
|
123
|
+ $userId = $userInfo->getUserId();
|
|
|
124
|
+ $balanceDao->create([
|
|
|
125
|
+ 'user_id' => $userId,
|
|
|
126
|
+ 'level' => $userInfo->getPartnerLevel(),
|
|
|
127
|
+ 'radio' => $radio,
|
|
|
128
|
+ 'total_profit' => $levelTotal,
|
|
|
129
|
+ 'old' => $userInfo->getBalance(),
|
|
|
130
|
+ 'number' => $userReward,
|
|
|
131
|
+ 'after' => $userInfo->getBalance() + $userReward
|
|
|
132
|
+ ]);
|
|
|
133
|
+
|
|
|
134
|
+ $bill = [
|
|
|
135
|
+ 'uid' => $userId,
|
|
|
136
|
+ 'link_id' => 0,
|
|
|
137
|
+ 'pm' => 1,
|
|
|
138
|
+ 'title' => '共富体系合伙人分佣(加权)',
|
|
|
139
|
+ 'category' => 'now_money',
|
|
|
140
|
+ 'type' => 'commission',
|
|
|
141
|
+ 'number' => $userReward,
|
|
|
142
|
+ 'balance' => 0,
|
|
|
143
|
+ 'mark' => '共富体系合伙人分佣明细入账(加权)',
|
|
|
144
|
+ 'create_time' => date('Y-m-d H:i:s'),
|
|
|
145
|
+ 'status' => 1,
|
|
|
146
|
+ 'commission_type' => CommonEnum::COMMISSION_TYPE['SHARED_PROSPERITY_PARTNER_COMMISSION']['code'],
|
|
|
147
|
+ 'order_sn' => 0,
|
|
|
148
|
+ 'tripartite' => 0,
|
|
|
149
|
+ 'type_shop' => 0,
|
|
|
150
|
+ 'mer_id' => 0,
|
|
|
151
|
+ 'source' => 0,
|
|
|
152
|
+ 'order_type' => 1,
|
|
|
153
|
+ 'is_red_brokerage' => 0,
|
|
|
154
|
+ 'gzc' => 3,
|
|
|
155
|
+ 'take_time' => time(),
|
|
|
156
|
+ 'district_id' => '',
|
|
|
157
|
+ 'street_id' => '',
|
|
|
158
|
+ 'month' => '',
|
|
|
159
|
+ ];
|
|
|
160
|
+
|
|
|
161
|
+ Db::name('user_bill')->insert($bill);
|
|
|
162
|
+ $userDao->updateByUserId($userId, ['balance' => ['inc', $userReward]]);
|
|
|
163
|
+ }
|
|
|
164
|
+
|
|
|
165
|
+ /**
|
|
132
|
166
|
* @param $data
|
|
133
|
167
|
* @return true
|
|
134
|
168
|
* @throws \think\db\exception\DataNotFoundException
|