Procházet zdrojové kódy

优化用户下单方法-进行中

sunxbiao před 1 rokem
rodič
revize
bc94e33ff5

+ 15 - 11
app/common/dao/user/UserBillDao.php

@@ -193,22 +193,26 @@ class UserBillDao extends BaseDao
193 193
     }
194 194
 
195 195
     /**
196
-     * @param $uid
197
-     * @return CommonEntity
196
+     * @param array $billIdList
197
+     * @return UserBillEntity[]
198 198
      */
199
-    public function getUserBillEntityByBillId($uid): CommonEntity
199
+    public function getUserBillEntityListByBillIdList(array $billIdList): array
200 200
     {
201
-        $data = [];
201
+        $entityList = [];
202 202
         try {
203
-            $dataRes = UserBill::getDB()
204
-                ->where('id', $uid)
205
-                ->find();
206
-            if (!empty($dataRes)) {
207
-                $data = $dataRes->toArray();
203
+            $dataList = UserBill::getDB()
204
+                ->whereIn('bill_id', $billIdList)
205
+                ->select()
206
+                ->toArray();
207
+            if (!empty($dataList)) {
208
+                $entityList = array_map(function ($data) {
209
+                    return UserBillEntity::newInstance($data);
210
+                }, $dataList);
208 211
             }
209
-        } catch (\Exception $e) {
212
+        } catch (DataNotFoundException|ModelNotFoundException|DbException $e) {
213
+
210 214
         }
211
-        return UserBillEntity::newInstance($data);
215
+        return $entityList;
212 216
     }
213 217
 
214 218
     /**

+ 15 - 13
app/common/dao/user/UserDao.php

@@ -409,25 +409,27 @@ class UserDao extends BaseDao
409 409
         return $this::getModel()::getDB()->where('test_user', '=', 1)->whereOr('is_del', '=', 1)->column('uid');
410 410
     }
411 411
 
412
-
413 412
     /**
414
-     * @param $uid
415
-     * @return CommonEntity
413
+     * @param array $uidList
414
+     * @return UserEntity[]
416 415
      */
417
-    public function getUserEntityByUid($uid): CommonEntity
416
+    public function getUserEntityListByUidList(array $uidList): array
418 417
     {
419
-        $userData = [];
418
+        $entityList = [];
420 419
         try {
421
-            $userDataRes = User::getDB()
422
-                ->where('uid', $uid)
420
+            $dataList = User::getDB()
421
+                ->whereIn('uid', $uidList)
423 422
                 ->where('is_del', '=', UserEnum::IS_DEL['No']['code'])
424
-                ->where('status', '=', UserEnum::STATUS['Normal']['code'])
425
-                ->find();
426
-            if (!empty($userDataRes)) {
427
-                $userData = $userDataRes->toArray();
423
+                ->select()
424
+                ->toArray();
425
+            if (!empty($dataList)) {
426
+                $entityList = array_map(function ($data) {
427
+                    return UserEntity::newInstance($data);
428
+                }, $dataList);
428 429
             }
429
-        } catch (\Exception $e) {
430
+        } catch (DataNotFoundException|ModelNotFoundException|DbException $e) {
431
+
430 432
         }
431
-        return UserEntity::newInstance($userData);
433
+        return $entityList;
432 434
     }
433 435
 }

+ 10 - 0
app/common/enum/user/UserBillEnum.php

@@ -12,6 +12,16 @@ class UserBillEnum extends CommonEnum
12 12
         'INCOME' => ['code' => 1, 'name' => '获得'],
13 13
     ];
14 14
 
15
+    // 明细种类
16
+    const CATEGORY = [
17
+        'NowMoney' => ['code' => 'now_money', 'name' => 'now_money']
18
+    ];
19
+
20
+    // 明细类型  commission佣金
21
+    const TYPE = [
22
+        'Commission' => ['code' => 'commission', 'name' => '佣金']
23
+    ];
24
+
15 25
     // 状态
16 26
     const STATUS = [
17 27
         'PENDING' => ['code' => 0, 'name' => '待确定'],

+ 97 - 44
app/common/repositories/store/order/StoreOrderRepository.php

@@ -11353,10 +11353,15 @@ class StoreOrderRepository extends BaseRepository
11353 11353
             $userBillRepository = app()->make(UserBillRepository::class);
11354 11354
             $userBillRepository->addUserBill(
11355 11355
                 $storeOrderEntity->getUid(),
11356
-                UserBillEnum::TYPE_SHOP['Platform']['code'],
11357
-                $storeOrderEntity->getOrderId(),
11358 11356
                 UserBillEnum::COMMISSION_TYPE['PENSION']['code'],
11357
+                UserBillEnum::PM['INCOME']['code'],
11359 11358
                 $yanglaojin,
11359
+                UserBillEnum::CATEGORY['NowMoney']['code'],
11360
+                UserBillEnum::TYPE['Commission']['code'],
11361
+                UserBillEnum::SOURCE['ONLINE']['code'],
11362
+                UserBillEnum::ORDER_TYPE['SELF_OPERATED']['code'],
11363
+                UserBillEnum::TYPE_SHOP['Platform']['code'],
11364
+                $storeOrderEntity->getOrderId(),
11360 11365
                 '购买精彩生活商品赠送养老金'
11361 11366
             );
11362 11367
 
@@ -11444,11 +11449,16 @@ class StoreOrderRepository extends BaseRepository
11444 11449
                     /** @var UserBillRepository $userBillRepository */
11445 11450
                     $userBillRepository = app()->make(UserBillRepository::class);
11446 11451
                     $userBillRepository->addUserBill(
11447
-                        $userEntityBySpreadUid->getUid(),
11448
-                        UserBillEnum::TYPE_SHOP['Platform']['code'],
11449
-                        $storeOrderEntity->getOrderId(),
11452
+                        $storeOrderEntity->getUid(),
11450 11453
                         UserBillEnum::COMMISSION_TYPE['DIRECT_REFERRAL']['code'],
11454
+                        UserBillEnum::PM['INCOME']['code'],
11451 11455
                         $brokeragePriceBySpreadUid,
11456
+                        UserBillEnum::CATEGORY['NowMoney']['code'],
11457
+                        UserBillEnum::TYPE['Commission']['code'],
11458
+                        UserBillEnum::SOURCE['ONLINE']['code'],
11459
+                        UserBillEnum::ORDER_TYPE['SELF_OPERATED']['code'],
11460
+                        UserBillEnum::TYPE_SHOP['Platform']['code'],
11461
+                        $storeOrderEntity->getOrderId(),
11452 11462
                         '推广精彩生活区商品赠送佣金'
11453 11463
                     );
11454 11464
 
@@ -11487,11 +11497,16 @@ class StoreOrderRepository extends BaseRepository
11487 11497
                         /** @var UserBillRepository $userBillRepository */
11488 11498
                         $userBillRepository = app()->make(UserBillRepository::class);
11489 11499
                         $userBillRepository->addUserBill(
11490
-                            $userEntityBySpreadUid->getUid(),
11491
-                            UserBillEnum::TYPE_SHOP['Platform']['code'],
11492
-                            $storeOrderEntity->getOrderId(),
11500
+                            $storeOrderEntity->getUid(),
11493 11501
                             UserBillEnum::COMMISSION_TYPE['PENSION']['code'],
11502
+                            UserBillEnum::PM['INCOME']['code'],
11494 11503
                             $yanglaojinBySpreadUid,
11504
+                            UserBillEnum::CATEGORY['NowMoney']['code'],
11505
+                            UserBillEnum::TYPE['Commission']['code'],
11506
+                            UserBillEnum::SOURCE['ONLINE']['code'],
11507
+                            UserBillEnum::ORDER_TYPE['SELF_OPERATED']['code'],
11508
+                            UserBillEnum::TYPE_SHOP['Platform']['code'],
11509
+                            $storeOrderEntity->getOrderId(),
11495 11510
                             '推广精彩生活区商品获得养老金'
11496 11511
                         );
11497 11512
                     }
@@ -11508,11 +11523,16 @@ class StoreOrderRepository extends BaseRepository
11508 11523
                     /** @var UserBillRepository $userBillRepository */
11509 11524
                     $userBillRepository = app()->make(UserBillRepository::class);
11510 11525
                     $userBillRepository->addUserBill(
11511
-                        $userEntityByShareUid->getUid(),
11512
-                        UserBillEnum::TYPE_SHOP['Platform']['code'],
11513
-                        $storeOrderEntity->getOrderId(),
11526
+                        $storeOrderEntity->getUid(),
11514 11527
                         UserBillEnum::COMMISSION_TYPE['SHARE_EARNINGS']['code'],
11528
+                        UserBillEnum::PM['INCOME']['code'],
11515 11529
                         $brokeragePriceByShareUid,
11530
+                        UserBillEnum::CATEGORY['NowMoney']['code'],
11531
+                        UserBillEnum::TYPE['Commission']['code'],
11532
+                        UserBillEnum::SOURCE['ONLINE']['code'],
11533
+                        UserBillEnum::ORDER_TYPE['SELF_OPERATED']['code'],
11534
+                        UserBillEnum::TYPE_SHOP['Platform']['code'],
11535
+                        $storeOrderEntity->getOrderId(),
11516 11536
                         '分享精彩生活区商品赠送佣金'
11517 11537
                     );
11518 11538
                     // 计算 复购金
@@ -11544,14 +11564,18 @@ class StoreOrderRepository extends BaseRepository
11544 11564
                     /** @var UserBillRepository $userBillRepository */
11545 11565
                     $userBillRepository = app()->make(UserBillRepository::class);
11546 11566
                     $userBillRepository->addUserBill(
11547
-                        $merchantEntity->getUid(),
11548
-                        UserBillEnum::TYPE_SHOP['Platform']['code'],
11549
-                        $storeOrderEntity->getOrderId(),
11567
+                        $storeOrderEntity->getUid(),
11550 11568
                         UserBillEnum::COMMISSION_TYPE['LOCKED_CUSTOMER']['code'],
11569
+                        UserBillEnum::PM['INCOME']['code'],
11551 11570
                         $brokeragePriceByMerId,
11571
+                        UserBillEnum::CATEGORY['NowMoney']['code'],
11572
+                        UserBillEnum::TYPE['Commission']['code'],
11573
+                        UserBillEnum::SOURCE['ONLINE']['code'],
11574
+                        UserBillEnum::ORDER_TYPE['SELF_OPERATED']['code'],
11575
+                        UserBillEnum::TYPE_SHOP['Platform']['code'],
11576
+                        $storeOrderEntity->getOrderId(),
11552 11577
                         '锁客佣金(精彩生活区商品赠送)'
11553 11578
                     );
11554
-
11555 11579
                     // 计算 复购金
11556 11580
                     $fugouByMerId = bcmul($storeOrderEntity->getConPri(), CommonEnum::ORDER_EARNING_ALLOCATION['WonderfulLiving']['Lock']['Fugou']['Ratio']['code'], CommonEnum::DECIMAL_PLACES_OF_THE_AMOUNT);
11557 11581
                     // 添加复购金记录
@@ -11578,10 +11602,15 @@ class StoreOrderRepository extends BaseRepository
11578 11602
                 $userBillRepository = app()->make(UserBillRepository::class);
11579 11603
                 $userBillRepository->addUserBill(
11580 11604
                     $storeOrderEntity->getUid(),
11581
-                    UserBillEnum::TYPE_SHOP['Platform']['code'],
11582
-                    $storeOrderEntity->getOrderId(),
11583 11605
                     UserBillEnum::COMMISSION_TYPE['PENSION']['code'],
11606
+                    UserBillEnum::PM['INCOME']['code'],
11584 11607
                     $yanglaojin,
11608
+                    UserBillEnum::CATEGORY['NowMoney']['code'],
11609
+                    UserBillEnum::TYPE['Commission']['code'],
11610
+                    UserBillEnum::SOURCE['ONLINE']['code'],
11611
+                    UserBillEnum::ORDER_TYPE['SELF_OPERATED']['code'],
11612
+                    UserBillEnum::TYPE_SHOP['Platform']['code'],
11613
+                    $storeOrderEntity->getOrderId(),
11585 11614
                     '购买会员专区商品赠送养老金'
11586 11615
                 );
11587 11616
 
@@ -11655,11 +11684,16 @@ class StoreOrderRepository extends BaseRepository
11655 11684
                             /** @var UserBillRepository $userBillRepository */
11656 11685
                             $userBillRepository = app()->make(UserBillRepository::class);
11657 11686
                             $userBillRepository->addUserBill(
11658
-                                $userEntityBySpreadUid->getUid(),
11659
-                                UserBillEnum::TYPE_SHOP['Platform']['code'],
11660
-                                $storeOrderEntity->getOrderId(),
11687
+                                $storeOrderEntity->getUid(),
11661 11688
                                 UserBillEnum::COMMISSION_TYPE['DIRECT_REFERRAL']['code'],
11689
+                                UserBillEnum::PM['INCOME']['code'],
11662 11690
                                 $brokeragePriceBySpreadUid,
11691
+                                UserBillEnum::CATEGORY['NowMoney']['code'],
11692
+                                UserBillEnum::TYPE['Commission']['code'],
11693
+                                UserBillEnum::SOURCE['ONLINE']['code'],
11694
+                                UserBillEnum::ORDER_TYPE['SELF_OPERATED']['code'],
11695
+                                UserBillEnum::TYPE_SHOP['Platform']['code'],
11696
+                                $storeOrderEntity->getOrderId(),
11663 11697
                                 '推广会员专区商品赠送佣金'
11664 11698
                             );
11665 11699
                         }
@@ -11708,11 +11742,16 @@ class StoreOrderRepository extends BaseRepository
11708 11742
                             /** @var UserBillRepository $userBillRepository */
11709 11743
                             $userBillRepository = app()->make(UserBillRepository::class);
11710 11744
                             $userBillRepository->addUserBill(
11711
-                                $userEntityBySpreadUid->getUid(),
11712
-                                UserBillEnum::TYPE_SHOP['Platform']['code'],
11713
-                                $storeOrderEntity->getOrderId(),
11745
+                                $storeOrderEntity->getUid(),
11714 11746
                                 UserBillEnum::COMMISSION_TYPE['PENSION']['code'],
11747
+                                UserBillEnum::PM['INCOME']['code'],
11715 11748
                                 $yanglaojinBySpreadUid,
11749
+                                UserBillEnum::CATEGORY['NowMoney']['code'],
11750
+                                UserBillEnum::TYPE['Commission']['code'],
11751
+                                UserBillEnum::SOURCE['ONLINE']['code'],
11752
+                                UserBillEnum::ORDER_TYPE['SELF_OPERATED']['code'],
11753
+                                UserBillEnum::TYPE_SHOP['Platform']['code'],
11754
+                                $storeOrderEntity->getOrderId(),
11716 11755
                                 '推广会员专区商品获得养老金'
11717 11756
                             );
11718 11757
                         }
@@ -11778,10 +11817,15 @@ class StoreOrderRepository extends BaseRepository
11778 11817
             $userBillRepository = app()->make(UserBillRepository::class);
11779 11818
             $userBillRepository->addUserBill(
11780 11819
                 $storeOrderEntity->getUid(),
11781
-                UserBillEnum::TYPE_SHOP['Platform']['code'],
11782
-                $storeOrderEntity->getOrderId(),
11783 11820
                 UserBillEnum::COMMISSION_TYPE['PENSION']['code'],
11821
+                UserBillEnum::PM['INCOME']['code'],
11784 11822
                 $yanglaojin,
11823
+                UserBillEnum::CATEGORY['NowMoney']['code'],
11824
+                UserBillEnum::TYPE['Commission']['code'],
11825
+                UserBillEnum::SOURCE['ONLINE']['code'],
11826
+                UserBillEnum::ORDER_TYPE['SELF_OPERATED']['code'],
11827
+                UserBillEnum::TYPE_SHOP['Platform']['code'],
11828
+                $storeOrderEntity->getOrderId(),
11785 11829
                 '购买商贸区商品赠送养老金'
11786 11830
             );
11787 11831
 
@@ -11882,14 +11926,18 @@ class StoreOrderRepository extends BaseRepository
11882 11926
                     /** @var UserBillRepository $userBillRepository */
11883 11927
                     $userBillRepository = app()->make(UserBillRepository::class);
11884 11928
                     $userBillRepository->addUserBill(
11885
-                        $userEntityBySpreadUid->getUid(),
11886
-                        UserBillEnum::TYPE_SHOP['Platform']['code'],
11887
-                        $storeOrderEntity->getOrderId(),
11929
+                        $storeOrderEntity->getUid(),
11888 11930
                         UserBillEnum::COMMISSION_TYPE['DIRECT_REFERRAL']['code'],
11931
+                        UserBillEnum::PM['INCOME']['code'],
11889 11932
                         $brokeragePriceBySpreadUid,
11933
+                        UserBillEnum::CATEGORY['NowMoney']['code'],
11934
+                        UserBillEnum::TYPE['Commission']['code'],
11935
+                        UserBillEnum::SOURCE['ONLINE']['code'],
11936
+                        UserBillEnum::ORDER_TYPE['SELF_OPERATED']['code'],
11937
+                        UserBillEnum::TYPE_SHOP['Platform']['code'],
11938
+                        $storeOrderEntity->getOrderId(),
11890 11939
                         '推广商贸区商品赠送佣金'
11891 11940
                     );
11892
-
11893 11941
                     // 初始胡 贡献值
11894 11942
                     $gongxianBySpreadUid = bcmul($storeOrderEntity->getConPri(), CommonEnum::ORDER_EARNING_ALLOCATION['CommercialDistrict']['Spread']['Gongxian']['Ratio']['code'], CommonEnum::DECIMAL_PLACES_OF_THE_AMOUNT);
11895 11943
                     // 赠送贡献值
@@ -11925,11 +11973,16 @@ class StoreOrderRepository extends BaseRepository
11925 11973
                         /** @var UserBillRepository $userBillRepository */
11926 11974
                         $userBillRepository = app()->make(UserBillRepository::class);
11927 11975
                         $userBillRepository->addUserBill(
11928
-                            $userEntityBySpreadUid->getUid(),
11929
-                            UserBillEnum::TYPE_SHOP['Platform']['code'],
11930
-                            $storeOrderEntity->getOrderId(),
11976
+                            $storeOrderEntity->getUid(),
11931 11977
                             UserBillEnum::COMMISSION_TYPE['PENSION']['code'],
11978
+                            UserBillEnum::PM['INCOME']['code'],
11932 11979
                             $yanglaojinBySpreadUid,
11980
+                            UserBillEnum::CATEGORY['NowMoney']['code'],
11981
+                            UserBillEnum::TYPE['Commission']['code'],
11982
+                            UserBillEnum::SOURCE['ONLINE']['code'],
11983
+                            UserBillEnum::ORDER_TYPE['SELF_OPERATED']['code'],
11984
+                            UserBillEnum::TYPE_SHOP['Platform']['code'],
11985
+                            $storeOrderEntity->getOrderId(),
11933 11986
                             '推广商贸区商品获得养老金'
11934 11987
                         );
11935 11988
                     }
@@ -11948,11 +12001,16 @@ class StoreOrderRepository extends BaseRepository
11948 12001
                     /** @var UserBillRepository $userBillRepository */
11949 12002
                     $userBillRepository = app()->make(UserBillRepository::class);
11950 12003
                     $userBillRepository->addUserBill(
11951
-                        $merchantEntityByLock->getUid(),
11952
-                        UserBillEnum::TYPE_SHOP['Platform']['code'],
11953
-                        $storeOrderEntity->getOrderId(),
12004
+                        $storeOrderEntity->getUid(),
11954 12005
                         UserBillEnum::COMMISSION_TYPE['LOCKED_CUSTOMER']['code'],
12006
+                        UserBillEnum::PM['INCOME']['code'],
11955 12007
                         $brokeragePriceByMerId,
12008
+                        UserBillEnum::CATEGORY['NowMoney']['code'],
12009
+                        UserBillEnum::TYPE['Commission']['code'],
12010
+                        UserBillEnum::SOURCE['ONLINE']['code'],
12011
+                        UserBillEnum::ORDER_TYPE['SELF_OPERATED']['code'],
12012
+                        UserBillEnum::TYPE_SHOP['Platform']['code'],
12013
+                        $storeOrderEntity->getOrderId(),
11956 12014
                         '锁客佣金(精彩生活区商品赠送)'
11957 12015
                     );
11958 12016
 
@@ -12023,15 +12081,10 @@ class StoreOrderRepository extends BaseRepository
12023 12081
             $userBillRepository = app()->make(UserBillRepository::class);
12024 12082
             $userBillEntityList = $userBillRepository->getUserBillEntityListByOrderIdListAndPending(UserBillEnum::TYPE_SHOP['Platform']['code'], $existOrderIdList);
12025 12083
             if (!empty($userBillEntityList)) {
12026
-                foreach ($userBillEntityList as $userBillEntity) {
12027
-                    if ($userBillEntity->getCommissionType() == UserBillEnum::COMMISSION_TYPE['PENSION']['code']) {
12028
-                        // 养老金
12029
-                        $userEntity = $userRepository->getUserEntityByUid($userBillEntity->getUid());
12030
-
12031
-                    } else if ($userBillEntity->getCommissionType() == UserBillEnum::COMMISSION_TYPE['DIRECT_REFERRAL']['code']) {
12032
-                        // 直推奖 佣金
12033
-                    }
12034
-                }
12084
+                $billIdList = array_map(function ($userBillEntity) {
12085
+                    return $userBillEntity->getBillId();
12086
+                }, $userBillEntityList);
12087
+                $userBillRepository->executeByIdList($billIdList);
12035 12088
             }
12036 12089
 
12037 12090
 

+ 82 - 49
app/common/repositories/user/UserBillRepository.php

@@ -18,6 +18,7 @@ use app\common\model\user\UserBill;
18 18
 use app\common\repositories\BaseRepository;
19 19
 use app\common\repositories\store\order\StoreOrderRepository;
20 20
 use app\entity\data\user\UserBillEntity;
21
+use app\entity\data\user\UserEntity;
21 22
 use app\utils\ArrayUtil;
22 23
 use think\db\exception\DbException;
23 24
 use think\exception\ValidateException;
@@ -382,11 +383,17 @@ class UserBillRepository extends BaseRepository
382 383
     /**
383 384
      * 添加 bill 数据
384 385
      * @param int $uid
385
-     * @param int $typeShop
386
-     * @param int $orderId
387 386
      * @param int $commissionType
387
+     * @param int $pm
388 388
      * @param float $number
389
+     * @param string $category
390
+     * @param string $type
391
+     * @param string $source
392
+     * @param int $orderType
393
+     * @param int $typeShop
394
+     * @param int $orderId
389 395
      * @param string $mark
396
+     * @param string $title
390 397
      * @return UserBillEntity
391 398
      */
392 399
     public function addUserBill(int $uid, int $commissionType, int $pm, float $number, string $category, string $type, string $source, int $orderType, int $typeShop = 0, int $orderId = 0, string $mark = '', string $title = ''): UserBillEntity
@@ -451,24 +458,24 @@ class UserBillRepository extends BaseRepository
451 458
      */
452 459
     public function getUserBillEntityByBillId(int $billId): UserBillEntity
453 460
     {
454
-        /** @var UserBillEntity $entity */
455
-        $entity = $this->dao->getUserBillEntityByBillId($billId);
456
-        return $entity;
461
+        $entityList = $this->getUserBillEntityListByBillIdList([$billId]);
462
+        $entity = array_shift($entityList);
463
+        if ($entity instanceof UserBillEntity) {
464
+            return $entity;
465
+        } else {
466
+            /** @var UserBillEntity */
467
+            return UserBillEntity::newInstance();
468
+        }
457 469
     }
458 470
 
459 471
     /**
460
-     * 更新记录的状态
461
-     * @param int $billId
462
-     * @param int $status
463
-     * @return int
472
+     * 获取Bill实体集合 根据 Id集合
473
+     * @param array $billIdList
474
+     * @return UserBillEntity[]
464 475
      */
465
-    public function updateStatusByBillId(int $billId, int $status): int
476
+    public function getUserBillEntityListByBillIdList(array $billIdList): array
466 477
     {
467
-        try {
468
-            return $this->dao->update($billId, ['status' => $status]);
469
-        } catch (DbException $e) {
470
-            throw new ValidateException('更新记录状态失败');
471
-        }
478
+        return $this->dao->getUserBillEntityListByBillIdList($billIdList);
472 479
     }
473 480
 
474 481
     /**
@@ -482,47 +489,73 @@ class UserBillRepository extends BaseRepository
482 489
         return $this->dao->getUserBillEntityListByOrderIdListAndPending($typeShop, $orderIdList);
483 490
     }
484 491
 
492
+
485 493
     /**
486
-     * 将 Vr 记录设置为生效状态 并对用户的 Vr 字段进行增减
487
-     * @param int $id
494
+     * 将 账单 记录设置为生效状态 并对用户的 对应 字段进行增减
495
+     * @param array $idList
488 496
      * @return UserBillEntity
489 497
      */
490
-    public function execute(int $id): UserBillEntity
498
+    public function executeByIdList(array $idList): UserBillEntity
491 499
     {
492
-        $UserBillEntity = $this->getUserBillEntityByBillId($id);
493
-        if (empty($UserBillEntity->getBillId()) || empty($UserBillEntity->getUid())) {
494
-            throw new ValidateException('无效的账单记录');
495
-        }
496
-        if (!empty($UserBillEntity->getTakeTime())) {
497
-            throw new ValidateException('该账单记录已更新,请勿重复操作');
498
-        }
500
+        $userBillEntityList = $this->getUserBillEntityListByBillIdList($idList);
501
+        if (!empty($userBillEntityList)) {
502
+            $userIdList = array_map(function ($userBillEntity) {
503
+                return $userBillEntity->getUid();
504
+            }, $userBillEntityList);
505
+            /** @var UserEntity[] $userEntityList */
506
+            $userEntityList = [];
507
+            $userEntityMapByUid = [];
508
+
509
+            if (!empty($userIdList)) {
510
+                /** @var UserRepository $userRepository */
511
+                $userRepository = app()->make(UserRepository::class);
512
+                $userEntityList = $userRepository->getUserEntityListByUidList($userIdList);
513
+                $userEntityMapByUid = array_map(function ($userEntity) {
514
+
515
+                }, $userEntityList);
516
+            }
499 517
 
500
-        /** @var UserRepository $userRepository */
501
-        $userRepository = app()->make(UserRepository::class);
502
-        $userEntity = $userRepository->getUserEntityByUid($UserBillEntity->getUid());
503
-        if (empty($userEntity->getUid())) {
504
-            throw new ValidateException('未查询到用户信息');
505
-        }
506
-        if ($UserBillEntity->getType() == UserBill::TYPE['Consume']['code']) {
507
-            $surplus = bcsub($userEntity->getVr(), $UserBillEntity->getNumber(), 2);
508
-            if ($surplus < 0.00) {
509
-                throw new ValidateException('用户VR不足');
518
+            foreach ($userBillEntityList as $userBillEntity) {
519
+                if (empty($userBillEntity->getBillId()) || empty($userBillEntity->getUid())) {
520
+                    throw new ValidateException('无效的账单记录');
521
+                }
522
+                if (!empty($userBillEntity->getTakeTime())) {
523
+                    throw new ValidateException('该账单记录已更新,请勿重复操作');
524
+                }
525
+
526
+                $userEntity = $userRepository->getUserEntityByUid($userBillEntity->getUid());
527
+                if (empty($userEntity->getUid())) {
528
+                    throw new ValidateException('未查询到用户信息');
529
+                }
530
+                if ($userBillEntity->getType() == UserBillEnum::COMMISSION_TYPE['DIRECT_REFERRAL']['code']) {
531
+                    // 直推奖
532
+                    $surplus = bcsub($userEntity->getVr(), $userBillEntity->getNumber(), 2);
533
+                    if ($surplus < 0.00) {
534
+                        throw new ValidateException('用户VR不足');
535
+                    }
536
+                } else {
537
+                    $surplus = bcadd($userEntity->getVr(), $userBillEntity->getNumber(), 2);
538
+                }
539
+
540
+
541
+                try {
542
+                    $userBillEntity
543
+                        ->setSurplus($surplus)
544
+                        ->setSettlementTime(date('Y-m-d H:i:s'));
545
+                    $userRepository->update($userEntity->getUid(), ['vr' => $surplus]);
546
+                    $this->dao->update($userBillEntity->getId(), [
547
+                        'surplus' => $userBillEntity->getSurplus(),
548
+                        'settlement_time' => $userBillEntity->getSettlementTime()
549
+                    ]);
550
+                } catch (DbException $e) {
551
+
552
+                }
510 553
             }
511
-        } else {
512
-            $surplus = bcadd($userEntity->getVr(), $UserBillEntity->getNumber(), 2);
513 554
         }
514
-        try {
515
-            $UserBillEntity
516
-                ->setSurplus($surplus)
517
-                ->setSettlementTime(date('Y-m-d H:i:s'));
518
-            $userRepository->update($userEntity->getUid(), ['vr' => $surplus]);
519
-            $this->dao->update($UserBillEntity->getId(), [
520
-                'surplus' => $UserBillEntity->getSurplus(),
521
-                'settlement_time' => $UserBillEntity->getSettlementTime()
522
-            ]);
523
-        } catch (DbException $e) {
524 555
 
525
-        }
526
-        return $UserBillEntity;
556
+
557
+
558
+
559
+        return $userBillEntity;
527 560
     }
528 561
 }

+ 18 - 3
app/common/repositories/user/UserRepository.php

@@ -4399,9 +4399,24 @@ class UserRepository extends BaseRepository
4399 4399
      */
4400 4400
     public function getUserEntityByUid(int $uid): UserEntity
4401 4401
     {
4402
-        /** @var UserEntity $userEntity */
4403
-        $userEntity = $this->dao->getUserEntityByUid($uid);
4404
-        return $userEntity;
4402
+        $entityList = $this->getUserEntityListByUidList([$uid]);
4403
+        $entity = array_shift($entityList);
4404
+        if ($entity instanceof UserEntity) {
4405
+            return $entity;
4406
+        } else {
4407
+            /** @var UserEntity */
4408
+            return UserEntity::newInstance();
4409
+        }
4410
+    }
4411
+
4412
+    /**
4413
+     * 获取用户实体集合 根据 uid集合
4414
+     * @param array $uidList
4415
+     * @return UserEntity[]
4416
+     */
4417
+    public function getUserEntityListByUidList(array $uidList): array
4418
+    {
4419
+        return $this->dao->getUserEntityListByUidList($uidList);
4405 4420
     }
4406 4421
 
4407 4422
     /**