Explorar el Código

refactor(shared): 重构共富感恩奖计算逻辑

- 将数据源从奖励记录改为用户佣金记录
- 新增用户佣金仓库查询方法获取佣金数据
- 修改数组键名从 user_id 改为 uid
- 添加非共富会员检查跳过逻辑
- 优化上级ID为0或积分小于等于0时的处理
- 添加详细日志记录便于调试追踪
shichen hace 5 meses
padre
commit
60c6343026

+ 41 - 0
app/common/dao/user/UserBillDao.php

@@ -316,4 +316,45 @@ class UserBillDao extends BaseDao
316 316
             return 0;
317 317
         }
318 318
     }
319
+
320
+    /**
321
+     * @param $params
322
+     * @return array
323
+     * @throws DataNotFoundException
324
+     * @throws DbException
325
+     * @throws ModelNotFoundException
326
+     * @author 史晨
327
+     * @date 2026/2/11 14:45
328
+     * 获取数据列表
329
+     */
330
+    public function getListData($params)
331
+    {
332
+        $query = $this::getModel()::getDB();
333
+        if (isset($params['start']) && $params['start'] != '') {
334
+            if (!is_numeric($params['start'])) {
335
+                $params['start'] = strtotime($params['start']);
336
+            }
337
+            $query->where('take_time', '>=', $params['start']);
338
+        }
339
+        if (isset($params['end']) && $params['end'] != '') {
340
+            if (!is_numeric($params['end'])) {
341
+                $params['end'] = strtotime($params['end']);
342
+            }
343
+            $query->where('take_time', '<=', $params['end']);
344
+        }
345
+
346
+        if (isset($params['status']) && $params['status'] != '') {
347
+            $query->where('status', '=', $params['status']);
348
+        }
349
+
350
+        if (isset($params['merId']) && $params['merId'] != '') {
351
+            $query->whereIn('mer_id', $params['merId']);
352
+        }
353
+
354
+        if (isset($params['commissionType']) && $params['commissionType'] != '') {
355
+            $query->whereIn('commission_type', $params['commissionType']);
356
+        }
357
+
358
+        return $query->select()->toArray();
359
+    }
319 360
 }

+ 24 - 8
app/common/repositories/shared/SharedProsperityTaskRepository.php

@@ -9,6 +9,7 @@ use app\common\dao\shared\SharedProsperityUserDao;
9 9
 use app\common\enum\CommonEnum;
10 10
 use app\common\enum\shared\SharedProsperityRewardRecordEnum;
11 11
 use app\common\repositories\BaseRepository;
12
+use app\common\repositories\user\UserBillRepository;
12 13
 use think\facade\Db;
13 14
 use think\facade\Log;
14 15
 
@@ -178,17 +179,23 @@ class SharedProsperityTaskRepository extends BaseRepository
178 179
         $start = $data['startTime'];
179 180
         $end = $data['endTime'];
180 181
 
181
-        // 获取pv
182
-        /** @var SharedProsperityRewardRecordRepository $rewardRecordRepository */
183
-        $rewardRecordRepository = app()->make(SharedProsperityRewardRecordRepository::class);
184
-        $rewardList = $rewardRecordRepository->getListByTime($start, $end, self::REWARD_TYPE_PV);
185
-        if (empty($rewardList)) {
186
-            throw new \Exception('没有订单');
182
+        // 获取收入
183
+        /** @var UserBillRepository $userBillRepository */
184
+        $userBillRepository = app()->make(UserBillRepository::class);
185
+        $billList = $userBillRepository->getListForSharedProsperityThank($start, $end);
186
+        if (empty($billList)) {
187
+            throw new \Exception('没有佣金记录,无需处理');
187 188
         }
189
+        // /** @var SharedProsperityRewardRecordRepository $rewardRecordRepository */
190
+        // $rewardRecordRepository = app()->make(SharedProsperityRewardRecordRepository::class);
191
+        // $rewardList = $rewardRecordRepository->getListByTime($start, $end, self::REWARD_TYPE_PV);
192
+        // if (empty($rewardList)) {
193
+        //     throw new \Exception('没有订单');
194
+        // }
188 195
 
189 196
         // user_id分区求和 [id]=>[number]
190
-        $groupedResult = array_reduce($rewardList, function ($carry, $item) {
191
-            $userId = $item['user_id'];
197
+        $groupedResult = array_reduce($billList, function ($carry, $item) {
198
+            $userId = $item['uid'];
192 199
             $number = floatval($item['number']);
193 200
 
194 201
             if (!isset($carry[$userId])) {
@@ -219,12 +226,21 @@ class SharedProsperityTaskRepository extends BaseRepository
219 226
                 $points = floor($value * $radio * 100) / 100;
220 227
                 // 获取上级
221 228
                 $userData = $userRepository->getSharedProsperityUserEntityByUserId($key);
229
+                if (empty($userData->getUserId())) {
230
+                    Log::info('共富感恩奖发放:' . $key . '不是共富会员,不发放感恩奖');
231
+                    continue;
232
+                }
222 233
                 $parentId = $userData->getParentId();
223 234
                 if ($parentId == 0) {
224 235
                     Log::info('共富感恩奖发放:' . $key . '的上级是0,不发放感恩奖');
236
+                    continue;
225 237
                 }
226 238
                 // 给上级发积分,记录日志
227 239
                 if ($parentId > 0) {
240
+                    if ($points <= 0) {
241
+                        Log::info('共富感恩奖发放:' . $key . '的收入是' . $value . ',奖励占比是' . $radio . ',积分是' . $value * $radio . '所以' . $parentId . '发放感恩奖');
242
+                        continue;
243
+                    }
228 244
                     $parentData = $userRepository->getSharedProsperityUserEntityByUserId($parentId);
229 245
                     // 记录日志
230 246
                     $logDao->create([

+ 31 - 0
app/common/repositories/user/UserBillRepository.php

@@ -13,6 +13,7 @@ namespace app\common\repositories\user;
13 13
 
14 14
 use app\common\dao\BaseDao;
15 15
 use app\common\dao\user\UserBillDao;
16
+use app\common\enum\CommonEnum;
16 17
 use app\common\enum\user\UserBillEnum;
17 18
 use app\common\enum\user\UserCertificationEnum;
18 19
 use app\common\model\user\UserBill;
@@ -646,4 +647,34 @@ class UserBillRepository extends BaseRepository
646 647
 
647 648
         return $idList;
648 649
     }
650
+
651
+    /**
652
+     * @param $start
653
+     * @param $end
654
+     * @return array
655
+     * @author 史晨
656
+     * @date 2026/2/11 14:29
657
+     * 共富感恩奖佣金查询
658
+     */
659
+    public function getListForSharedProsperityThank($start, $end)
660
+    {
661
+        $status = UserBillEnum::STATUS['VALID']['code'];
662
+        $merId = [
663
+            CommonEnum::DESIGN_MERCHANT_ID['WonderfulLiving']['code'],
664
+            CommonEnum::DESIGN_MERCHANT_ID['Repurchase']['code'],
665
+            CommonEnum::DESIGN_MERCHANT_ID['SharedProsperity']['code'],
666
+        ];
667
+        $commission_type = [
668
+            CommonEnum::COMMISSION_TYPE['DIRECT_REFERRAL']['code'],
669
+            CommonEnum::COMMISSION_TYPE['SHARE_EARNINGS']['code']
670
+        ];
671
+        $params = [
672
+            'start' => $start,
673
+            'end' => $end,
674
+            'status' => $status,
675
+            'merId' => $merId,
676
+            'commissionType' => $commission_type
677
+        ];
678
+        return $this->dao->getListData($params);
679
+    }
649 680
 }