|
@@ -31,8 +31,6 @@ class Taskorderguquan
|
|
31
|
'insertPvSummary' => ['success' => 0, 'failed' => 0], // 优化: 汇总PV插入结果
|
31
|
'insertPvSummary' => ['success' => 0, 'failed' => 0], // 优化: 汇总PV插入结果
|
|
32
|
'errors' => [], // 优化: 统一记录错误信息
|
32
|
'errors' => [], // 优化: 统一记录错误信息
|
|
33
|
];
|
33
|
];
|
|
34
|
- $currentTime = time();
|
|
|
|
35
|
- $currentDateTime = date('Y-m-d H:i:s', $currentTime);
|
|
|
|
36
|
|
34
|
|
|
37
|
// --- 数据库查询部分 (保持不变,已优化) ---
|
35
|
// --- 数据库查询部分 (保持不变,已优化) ---
|
|
38
|
// 1. 查询用户
|
36
|
// 1. 查询用户
|
|
@@ -61,27 +59,29 @@ class Taskorderguquan
|
|
61
|
|
59
|
|
|
62
|
// 4. 查询已存在的贡献值记录
|
60
|
// 4. 查询已存在的贡献值记录
|
|
63
|
$gongXianListRaw = Db::name("user_sign_gongxian")
|
61
|
$gongXianListRaw = Db::name("user_sign_gongxian")
|
|
|
|
62
|
+ ->where('status', '!=', -1)
|
|
64
|
// 优化: 如果记录非常多,可以分批查询或只查相关用户的
|
63
|
// 优化: 如果记录非常多,可以分批查询或只查相关用户的
|
|
65
|
// ->whereIn('uid', array_merge($userIds, array_column($userList, 'spread_uid'))) // 查询购买者和潜在推广者
|
64
|
// ->whereIn('uid', array_merge($userIds, array_column($userList, 'spread_uid'))) // 查询购买者和潜在推广者
|
|
66
|
- ->field('uid, order_id, number')
|
|
|
|
|
|
65
|
+ ->field('uid, order_id, number, status')
|
|
67
|
->select()
|
66
|
->select()
|
|
68
|
->toArray();
|
67
|
->toArray();
|
|
69
|
|
68
|
|
|
70
|
// 5. 查询已存在的PV记录
|
69
|
// 5. 查询已存在的PV记录
|
|
71
|
$pvListRaw = Db::name("user_pv_log")
|
70
|
$pvListRaw = Db::name("user_pv_log")
|
|
|
|
71
|
+ ->where('status', '!=', -1)
|
|
72
|
// 优化: 同上
|
72
|
// 优化: 同上
|
|
73
|
// ->whereIn('uid', $userIds)
|
73
|
// ->whereIn('uid', $userIds)
|
|
74
|
- ->field('uid, order_id, pv')
|
|
|
|
|
|
74
|
+ ->field('uid, order_id, pv, status')
|
|
75
|
->select()
|
75
|
->select()
|
|
76
|
->toArray();
|
76
|
->toArray();
|
|
77
|
|
77
|
|
|
78
|
// --- 数据预处理部分
|
78
|
// --- 数据预处理部分
|
|
79
|
$existingGongXian = [];
|
79
|
$existingGongXian = [];
|
|
80
|
- foreach ($gongXianListRaw as $gx) $existingGongXian[$gx['uid'] . '_' . $gx['order_id']] = $gx['number'];
|
|
|
|
|
|
80
|
+ foreach ($gongXianListRaw as $gx) $existingGongXian[$gx['uid'] . '_' . $gx['order_id']] = ['number' => $gx['number'], 'status' => $gx['status']];
|
|
81
|
unset($gongXianListRaw);
|
81
|
unset($gongXianListRaw);
|
|
82
|
|
82
|
|
|
83
|
$existingPv = [];
|
83
|
$existingPv = [];
|
|
84
|
- foreach ($pvListRaw as $pv) $existingPv[$pv['uid'] . '_' . $pv['order_id']] = $pv['pv'];
|
|
|
|
|
|
84
|
+ foreach ($pvListRaw as $pv) $existingPv[$pv['uid'] . '_' . $pv['order_id']] = ['pv' => $pv['pv'], 'status' => $pv['status']];
|
|
85
|
unset($pvListRaw);
|
85
|
unset($pvListRaw);
|
|
86
|
|
86
|
|
|
87
|
$userOfGoodsByUid = [];
|
87
|
$userOfGoodsByUid = [];
|
|
@@ -155,24 +155,28 @@ class Taskorderguquan
|
|
155
|
break;
|
155
|
break;
|
|
156
|
}
|
156
|
}
|
|
157
|
|
157
|
|
|
|
|
158
|
+ $settlementTimeOld = $oldOrder['create_time'] ? date('Y-m-d H:i:s', $oldOrder['create_time']) : strtotime($user['create_time']);
|
|
158
|
// --- 收集贡献值插入数据 ---
|
159
|
// --- 收集贡献值插入数据 ---
|
|
159
|
$orderKey = $uid . '_' . $oldOrder['order_id'];
|
160
|
$orderKey = $uid . '_' . $oldOrder['order_id'];
|
|
160
|
if (isset($existingGongXian[$orderKey])) {
|
161
|
if (isset($existingGongXian[$orderKey])) {
|
|
161
|
$result['oldOrderExistGongXian'][] = ['uid' => $uid, 'order_id' => $oldOrder['order_id']];
|
162
|
$result['oldOrderExistGongXian'][] = ['uid' => $uid, 'order_id' => $oldOrder['order_id']];
|
|
162
|
- $userUpdateData[$uid]['contribute'] += $existingGongXian[$orderKey];
|
|
|
|
|
|
163
|
+ if ($existingGongXian[$orderKey]['status'] == 1) {
|
|
|
|
164
|
+ $userUpdateData[$uid]['contribute'] += $existingGongXian[$orderKey]['number'];
|
|
|
|
165
|
+ }
|
|
163
|
if (!empty($spreadUid) && isset($userUpdateData[$spreadUid])) {
|
166
|
if (!empty($spreadUid) && isset($userUpdateData[$spreadUid])) {
|
|
164
|
if (isset($existingGongXian[$spreadUid . '_' . $oldOrder['order_id']])) {
|
167
|
if (isset($existingGongXian[$spreadUid . '_' . $oldOrder['order_id']])) {
|
|
165
|
- $userUpdateData[$spreadUid]['per_contribute'] += $existingGongXian[$spreadUid . '_' . $oldOrder['order_id']];
|
|
|
|
|
|
168
|
+ if ($existingGongXian[$spreadUid . '_' . $oldOrder['order_id']]['status'] == 1) {
|
|
|
|
169
|
+ $userUpdateData[$spreadUid]['per_contribute'] += $existingGongXian[$spreadUid . '_' . $oldOrder['order_id']]['number'];
|
|
|
|
170
|
+ }
|
|
166
|
}
|
171
|
}
|
|
167
|
}
|
172
|
}
|
|
168
|
} else {
|
173
|
} else {
|
|
169
|
if ($totalPv > 0) {
|
174
|
if ($totalPv > 0) {
|
|
170
|
$userUpdateData[$uid]['contribute'] += $totalPv;
|
175
|
$userUpdateData[$uid]['contribute'] += $totalPv;
|
|
171
|
|
176
|
|
|
172
|
- $settlementTimeOld = $oldOrder['create_time'] ? date('Y-m-d H:i:s', $oldOrder['create_time']) : $currentDateTime;
|
|
|
|
173
|
// --- 收集贡献值插入数据 ---
|
177
|
// --- 收集贡献值插入数据 ---
|
|
174
|
$gongXianBase = [
|
178
|
$gongXianBase = [
|
|
175
|
- "number" => $totalPv, "addtime" => $currentTime, "status" => 1,
|
|
|
|
|
|
179
|
+ "number" => $totalPv, "addtime" => strtotime($settlementTimeOld), "status" => 1,
|
|
176
|
"order_type" => 1, "order_id" => $oldOrder['order_id'],
|
180
|
"order_type" => 1, "order_id" => $oldOrder['order_id'],
|
|
177
|
"desc" => '', "surplus" => 0, "type" => 1, 'settlement_time' => $settlementTimeOld
|
181
|
"desc" => '', "surplus" => 0, "type" => 1, 'settlement_time' => $settlementTimeOld
|
|
178
|
];
|
182
|
];
|
|
@@ -190,12 +194,13 @@ class Taskorderguquan
|
|
190
|
// --- 收集 PV 插入数据 ---
|
194
|
// --- 收集 PV 插入数据 ---
|
|
191
|
if (isset($existingPv[$orderKey])) {
|
195
|
if (isset($existingPv[$orderKey])) {
|
|
192
|
$result['oldOrderExistPv'][] = ['uid' => $uid, 'order_id' => $oldOrder['order_id']];
|
196
|
$result['oldOrderExistPv'][] = ['uid' => $uid, 'order_id' => $oldOrder['order_id']];
|
|
193
|
- $userUpdateData[$uid]['pv'] += $existingGongXian[$orderKey];
|
|
|
|
194
|
-
|
|
|
|
|
|
197
|
+ if ($existingPv[$orderKey]['status'] == 1) {
|
|
|
|
198
|
+ $userUpdateData[$uid]['pv'] += $existingPv[$orderKey]['pv'];
|
|
|
|
199
|
+ }
|
|
195
|
} else {
|
200
|
} else {
|
|
196
|
$userUpdateData[$uid]['pv'] += $totalPv;
|
201
|
$userUpdateData[$uid]['pv'] += $totalPv;
|
|
197
|
$pvDataToInsert[] = [
|
202
|
$pvDataToInsert[] = [
|
|
198
|
- "uid" => $uid, "pv" => $totalPv, "addtime" => $currentTime, "status" => 1,
|
|
|
|
|
|
203
|
+ "uid" => $uid, "pv" => $totalPv, "addtime" => strtotime($settlementTimeOld), "status" => 1,
|
|
199
|
"order_type" => 0, "order_id" => $oldOrder['order_id'],
|
204
|
"order_type" => 0, "order_id" => $oldOrder['order_id'],
|
|
200
|
"mark" => "1.0系统购买会员专区商品赠送PV", 'settlement_time' => $settlementTimeOld
|
205
|
"mark" => "1.0系统购买会员专区商品赠送PV", 'settlement_time' => $settlementTimeOld
|
|
201
|
];
|
206
|
];
|
|
@@ -235,15 +240,19 @@ class Taskorderguquan
|
|
235
|
}
|
240
|
}
|
|
236
|
// --- 收集贡献值插入数据 ---
|
241
|
// --- 收集贡献值插入数据 ---
|
|
237
|
$orderKey = $uid . '_' . $order['order_id'];
|
242
|
$orderKey = $uid . '_' . $order['order_id'];
|
|
238
|
- $settlementTimeNew = $order['create_time'] ?: $currentDateTime;
|
|
|
|
|
|
243
|
+ $settlementTimeNew = $order['create_time'] ?: date('Y-m-d H:i:s', $user['create_time']);
|
|
239
|
// --- 收集贡献值插入数据 ---
|
244
|
// --- 收集贡献值插入数据 ---
|
|
240
|
if (isset($existingGongXian[$orderKey])) {
|
245
|
if (isset($existingGongXian[$orderKey])) {
|
|
241
|
$result['orderExistGongXian'][] = ['uid' => $uid, 'order_id' => $order['order_id']];
|
246
|
$result['orderExistGongXian'][] = ['uid' => $uid, 'order_id' => $order['order_id']];
|
|
242
|
// 累加计算值
|
247
|
// 累加计算值
|
|
243
|
- $userUpdateData[$uid]['contribute'] += $existingGongXian[$orderKey];
|
|
|
|
|
|
248
|
+ if ($existingGongXian[$orderKey]['status'] == 1) {
|
|
|
|
249
|
+ $userUpdateData[$uid]['contribute'] += $existingGongXian[$orderKey]['member'];
|
|
|
|
250
|
+ }
|
|
244
|
if (!empty($spreadUid) && isset($userUpdateData[$spreadUid])) {
|
251
|
if (!empty($spreadUid) && isset($userUpdateData[$spreadUid])) {
|
|
245
|
if (isset($existingGongXian[$spreadUid . '_' . $order['order_id']])) {
|
252
|
if (isset($existingGongXian[$spreadUid . '_' . $order['order_id']])) {
|
|
246
|
- $userUpdateData[$spreadUid]['per_contribute'] += $existingGongXian[$spreadUid . '_' . $order['order_id']];
|
|
|
|
|
|
253
|
+ if ($existingGongXian[$spreadUid . '_' . $order['order_id']]['status'] == 1) {
|
|
|
|
254
|
+ $userUpdateData[$spreadUid]['per_contribute'] += $existingGongXian[$spreadUid . '_' . $order['order_id']]['member'];
|
|
|
|
255
|
+ }
|
|
247
|
}
|
256
|
}
|
|
248
|
}
|
257
|
}
|
|
249
|
|
258
|
|
|
@@ -252,7 +261,7 @@ class Taskorderguquan
|
|
252
|
// 累加计算值
|
261
|
// 累加计算值
|
|
253
|
$userUpdateData[$uid]['contribute'] += $totalPv;
|
262
|
$userUpdateData[$uid]['contribute'] += $totalPv;
|
|
254
|
$gongXianBase = [ // 优化: 提取公共字段
|
263
|
$gongXianBase = [ // 优化: 提取公共字段
|
|
255
|
- "number" => $totalPv, "addtime" => $currentTime, "status" => 1,
|
|
|
|
|
|
264
|
+ "number" => $totalPv, "addtime" => strtotime($settlementTimeNew), "status" => 1,
|
|
256
|
"order_type" => 1, "order_id" => $order['order_id'],
|
265
|
"order_type" => 1, "order_id" => $order['order_id'],
|
|
257
|
"desc" => '', "surplus" => 0, "type" => 1, 'settlement_time' => $settlementTimeNew
|
266
|
"desc" => '', "surplus" => 0, "type" => 1, 'settlement_time' => $settlementTimeNew
|
|
258
|
];
|
267
|
];
|
|
@@ -272,11 +281,13 @@ class Taskorderguquan
|
|
272
|
// --- 收集 PV 插入数据 ---
|
281
|
// --- 收集 PV 插入数据 ---
|
|
273
|
if (isset($existingPv[$orderKey])) {
|
282
|
if (isset($existingPv[$orderKey])) {
|
|
274
|
$result['orderExistPv'][] = ['uid' => $uid, 'order_id' => $order['order_id']];
|
283
|
$result['orderExistPv'][] = ['uid' => $uid, 'order_id' => $order['order_id']];
|
|
275
|
- $userUpdateData[$uid]['pv'] += $existingPv[$orderKey];
|
|
|
|
|
|
284
|
+ if ($existingPv[$orderKey]['status'] == 1) {
|
|
|
|
285
|
+ $userUpdateData[$uid]['pv'] += $existingPv[$orderKey]['pv'];
|
|
|
|
286
|
+ }
|
|
276
|
} else {
|
287
|
} else {
|
|
277
|
$userUpdateData[$uid]['pv'] += $totalPv;
|
288
|
$userUpdateData[$uid]['pv'] += $totalPv;
|
|
278
|
$pvDataToInsert[] = [
|
289
|
$pvDataToInsert[] = [
|
|
279
|
- "uid" => $uid, "pv" => $totalPv, "addtime" => $currentTime, "status" => 1,
|
|
|
|
|
|
290
|
+ "uid" => $uid, "pv" => $totalPv, "addtime" => strtotime($settlementTimeNew), "status" => 1,
|
|
280
|
"order_type" => 0, // 确认 PV log 的 order_type 是否与贡献一致或有区分
|
291
|
"order_type" => 0, // 确认 PV log 的 order_type 是否与贡献一致或有区分
|
|
281
|
"order_id" => $order['order_id'],
|
292
|
"order_id" => $order['order_id'],
|
|
282
|
"mark" => "2.0系统购买商品赠送PV", // 标记调整为更通用
|
293
|
"mark" => "2.0系统购买商品赠送PV", // 标记调整为更通用
|