Browse Source

订单结算-修改佣金结算发放体系

sunxbiao 5 months ago
parent
commit
ff048d9fa3

+ 11 - 0
app/common/enum/shared/SharedProsperityBalanceLogEnum.php

@@ -16,5 +16,16 @@ class SharedProsperityBalanceLogEnum extends CommonEnum
16 16
     const TYPE = [
17 17
         'PARTNER' => ['code' => 1, 'name' => '合伙人分红'],
18 18
         'GROUP' => ['code' => 2, 'name' => '共富奖'],
19
+        'DIRECT_REFERRAL' => ['code' => 3, 'name' => '直推奖'],
20
+        'LOCKED_CUSTOMER' => ['code' => 7, 'name' => '锁客收益'],
21
+        'PLATFORM_REWARD' => ['code' => 8, 'name' => '平台奖励'],
22
+        'SHARE_EARNINGS' => ['code' => 20, 'name' => '分享收益'],
23
+    ];
24
+
25
+    // 状态
26
+    const STATUS = [
27
+        'PENDING' => ['code' => 0, 'name' => '待确定'],
28
+        'VALID' => ['code' => 1, 'name' => '有效'],
29
+        'INVALID' => ['code' => -1, 'name' => '无效'],
19 30
     ];
20 31
 }

+ 137 - 18
app/common/repositories/user/UserBillRepository.php

@@ -12,14 +12,19 @@ namespace app\common\repositories\user;
12 12
 
13 13
 
14 14
 use app\common\dao\BaseDao;
15
+use app\common\dao\shared\SharedProsperityBalanceLogDao;
15 16
 use app\common\dao\user\UserBillDao;
16 17
 use app\common\enum\CommonEnum;
18
+use app\common\enum\shared\SharedProsperityBalanceLogEnum;
17 19
 use app\common\enum\user\UserBillEnum;
18 20
 use app\common\enum\user\UserCertificationEnum;
19 21
 use app\common\model\user\UserBill;
20 22
 use app\common\repositories\BaseRepository;
21 23
 use app\common\repositories\gzc\GzcLogRepository;
24
+use app\common\repositories\shared\SharedProsperityUserRepository;
22 25
 use app\common\repositories\store\order\StoreOrderRepository;
26
+use app\entity\data\shared\SharedProsperityBalanceLogEntity;
27
+use app\entity\data\shared\SharedProsperityUserEntity;
23 28
 use app\entity\data\user\UserBillEntity;
24 29
 use app\entity\data\user\UserCertificationEntity;
25 30
 use app\entity\data\user\UserEntity;
@@ -544,6 +549,15 @@ class UserBillRepository extends BaseRepository
544 549
             if (!empty($userIdList)) {
545 550
                 $userEntityMapByUid = $userRepository->getUserEntityMapByUidList($userIdList);
546 551
             }
552
+
553
+            // 获取所有用户是否有 共富身份
554
+            /** @var SharedProsperityUserRepository $sharedProsperityUserRepository */
555
+            $sharedProsperityUserRepository = app()->make(SharedProsperityUserRepository::class);
556
+            $sharedProsperityUserEntityMapUserId = [];
557
+            if (!empty($sharedProsperityUserIdList)) {
558
+                $sharedProsperityUserEntityMapUserId = $sharedProsperityUserRepository->getSharedProsperityUserEntityMapByUserIdList($userIdList);
559
+            }
560
+
547 561
             // 获取实名认证 映射信息 (养老金记录 结算时 需要确定 所属人是否已经实名认证 如果实名认证了 需要推到养老金公证处明细表里 并修改养老金记录的推送状态)
548 562
             /** @var UserCertificationEntity[] $userCertificationEntityMapByUid */
549 563
             $userCertificationEntityMapByUid = [];
@@ -555,7 +569,13 @@ class UserBillRepository extends BaseRepository
555 569
             /** @var GzcLogRepository $gzcLogRepository */
556 570
             $gzcLogRepository = app()->make(GzcLogRepository::class);
557 571
 
572
+            // 需要更新的 用户信息-基础信息- 会员身份信息
558 573
             $updateUserEntityList = [];
574
+            // 需要更新的 共富体系身份信息
575
+            $updateSharedProsperityUserEntityList = [];
576
+            // 共富区 佣金收入支出记录
577
+            /** @var SharedProsperityBalanceLogEntity[] $insertSharedProsperityBalanceLogEntityList */
578
+            $insertSharedProsperityBalanceLogEntityList = [];
559 579
             $updateUserBillEntityList = [];
560 580
             foreach ($userBillEntityList as $userBillEntity) {
561 581
                 if (empty($userBillEntity->getBillId()) || empty($userBillEntity->getUid())) {
@@ -566,15 +586,16 @@ class UserBillRepository extends BaseRepository
566 586
                     throw new ValidateException("该账单记录已更新,请勿重复操作({$userBillEntity->getBillId()})");
567 587
                 }
568 588
 
589
+                // 判断用户是否存在
569 590
                 $userEntity = $userEntityMapByUid[$userBillEntity->getUid()];
570 591
                 if (empty($userEntity) || empty($userEntity->getUid())) {
571 592
                     throw new ValidateException("未查询到用户信息({$userBillEntity->getBillId()})");
572 593
                 }
573 594
 
574
-                // 更新 用户信息
575
-                /** @var UserEntity $updateUserEntity */
576
-                $updateUserEntity = $updateUserEntityList[$userEntity->getUid()] ?? UserEntity::newInstance();
577
-                $updateUserEntity->setUid($userEntity->getUid());
595
+                // 要更新的用户信息
596
+                $updateUserEntity = null;
597
+                // 要更新的 共富用户信息
598
+                $updateSharedProsperityUserEntity = null;
578 599
                 // 更新 账单 记录
579 600
                 /** @var UserBillEntity $updateUserBillEntity */
580 601
                 $updateUserBillEntity = $updateUserBillEntityList[$userBillEntity->getBillId()] ?? UserBillEntity::newInstance();
@@ -583,22 +604,97 @@ class UserBillRepository extends BaseRepository
583 604
                     ->setBillId($userBillEntity->getBillId())
584 605
                     ->setStatus(UserBillEnum::STATUS['VALID']['code'])
585 606
                     ->setTakeTime(time());
607
+                // 直推佣金 锁客佣金 平台奖励佣金 分享佣金
608
+                if (in_array($userBillEntity->getCommissionType(), [
609
+                    UserBillEnum::COMMISSION_TYPE['DIRECT_REFERRAL']['code'],
610
+                    UserBillEnum::COMMISSION_TYPE['LOCKED_CUSTOMER']['code'],
611
+                    UserBillEnum::COMMISSION_TYPE['PLATFORM_REWARD']['code'],
612
+                    UserBillEnum::COMMISSION_TYPE['SHARE_EARNINGS']['code']
613
+                ])) {
614
+                    // 首先判断 是否有共富会员身份
615
+                    $sharedProsperityUserEntity = $sharedProsperityUserEntityMapUserId[$userBillEntity->getUid()] ?? null;
616
+                    // 如果拥有共富身份 并且非 会员专区 专属奖励 则发放到 共富身份中
617
+                    if (
618
+                        $userBillEntity->getMerId() != CommonEnum::DESIGN_MERCHANT_ID['MemberZone']['code']
619
+                        && !empty($sharedProsperityUserEntity)
620
+                        && $sharedProsperityUserEntity instanceof SharedProsperityUserEntity
621
+                        && !empty($sharedProsperityUserEntity->getId())
622
+                    ) {
623
+                        // 更新 共富用户信息
624
+                        /** @var SharedProsperityUserEntity $updateSharedProsperityUserEntity */
625
+                        $updateSharedProsperityUserEntity = $updateSharedProsperityUserEntityList[$userBillEntity->getUid()] ?? SharedProsperityUserEntity::newInstance();
626
+                        $updateSharedProsperityUserEntity
627
+                            ->setId($sharedProsperityUserEntity->getId())
628
+                            ->setUserId($sharedProsperityUserEntity->getUserId());
629
+                        // 佣金
630
+                        if (is_null($updateSharedProsperityUserEntity->getBalance())) {
631
+                            $updateSharedProsperityUserEntity->setBalance($sharedProsperityUserEntity->getBalance());
632
+                        }
586 633
 
587
-                if ($userBillEntity->getCommissionType() == UserBillEnum::COMMISSION_TYPE['DIRECT_REFERRAL']['code']) {
588
-                    // 直推奖
589
-                    if (is_null($updateUserEntity->getBrokeragePrice())) {
590
-                        $updateUserEntity->setBrokeragePrice($userEntity->getBrokeragePrice());
591
-                    }
592
-                    // 更新用户 佣金 信息
593
-                    if ($userBillEntity->getPm() == UserBillEnum::PM['EXPEND']['code']) {
594
-                        if ($updateUserEntity->getBrokeragePrice() < $userBillEntity->getNumber()) {
595
-                            throw new ValidateException('用户佣金不足');
634
+                        switch ($userBillEntity->getCommissionType()) {
635
+                            case UserBillEnum::COMMISSION_TYPE['DIRECT_REFERRAL']['code']:
636
+                                $sharedProsperityBalanceLogType = SharedProsperityBalanceLogEnum::TYPE['DIRECT_REFERRAL']['code'];
637
+                                break;
638
+
639
+                            case UserBillEnum::COMMISSION_TYPE['LOCKED_CUSTOMER']['code']:
640
+                                $sharedProsperityBalanceLogType = SharedProsperityBalanceLogEnum::TYPE['LOCKED_CUSTOMER']['code'];
641
+                                break;
642
+
643
+                            case UserBillEnum::COMMISSION_TYPE['PLATFORM_REWARD']['code']:
644
+                                $sharedProsperityBalanceLogType = SharedProsperityBalanceLogEnum::TYPE['PLATFORM_REWARD']['code'];
645
+                                break;
646
+
647
+                            case UserBillEnum::COMMISSION_TYPE['SHARE_EARNINGS']['code']:
648
+                                $sharedProsperityBalanceLogType = SharedProsperityBalanceLogEnum::TYPE['SHARE_EARNINGS']['code'];
649
+                                break;
650
+
651
+                            default:
652
+                                $sharedProsperityBalanceLogType = null;
653
+                                break;
654
+                        }
655
+                        $sharedProsperityBalanceLogEntity = SharedProsperityBalanceLogEntity::newInstance()
656
+                            ->setUserId($sharedProsperityUserEntity->getUserId())
657
+                            ->setType($sharedProsperityBalanceLogType)
658
+                            ->setLevel($sharedProsperityUserEntity->getPartnerLevel())
659
+                            ->setNumber($userBillEntity->getNumber())
660
+                            ->setStatus(SharedProsperityBalanceLogEnum::STATUS['VALID']['code'])
661
+                        ;
662
+
663
+                        // 更新用户 佣金 信息
664
+                        if ($userBillEntity->getPm() == UserBillEnum::PM['EXPEND']['code']) {
665
+                            if ($updateSharedProsperityUserEntity->getBalance() < $userBillEntity->getNumber()) {
666
+                                throw new ValidateException('用户佣金不足');
667
+                            }
668
+                            $updateSharedProsperityUserEntity->setBalance(bcsub($updateSharedProsperityUserEntity->getBalance(), $userBillEntity->getNumber(), 2));
669
+
670
+                            $sharedProsperityBalanceLogEntity->setPm(SharedProsperityBalanceLogEnum::PM['EXPEND']['code']);
671
+                        } else {
672
+                            $updateSharedProsperityUserEntity->setBalance(bcadd($updateSharedProsperityUserEntity->getBalance(), $userBillEntity->getNumber(), 2));
673
+
674
+                            $sharedProsperityBalanceLogEntity->setPm(SharedProsperityBalanceLogEnum::PM['INCOME']['code']);
596 675
                         }
597
-                        $updateUserEntity->setBrokeragePrice(bcsub($updateUserEntity->getBrokeragePrice(), $userBillEntity->getNumber(), 2));
676
+                        // 插入 共富区 佣金记录 变动表
677
+                        $insertSharedProsperityBalanceLogEntityList[] = $sharedProsperityBalanceLogEntity
678
+                            ->setAfter($updateSharedProsperityUserEntity->getBalance());
598 679
                     } else {
599
-                        $updateUserEntity->setBrokeragePrice(bcadd($updateUserEntity->getBrokeragePrice(), $userBillEntity->getNumber(), 2));
680
+                        // 更新 用户信息
681
+                        /** @var UserEntity $updateUserEntity */
682
+                        $updateUserEntity = $updateUserEntityList[$userEntity->getUid()] ?? UserEntity::newInstance();
683
+                        $updateUserEntity->setUid($userEntity->getUid());
684
+                        // 直推奖
685
+                        if (is_null($updateUserEntity->getBrokeragePrice())) {
686
+                            $updateUserEntity->setBrokeragePrice($userEntity->getBrokeragePrice());
687
+                        }
688
+                        // 更新用户 佣金 信息
689
+                        if ($userBillEntity->getPm() == UserBillEnum::PM['EXPEND']['code']) {
690
+                            if ($updateUserEntity->getBrokeragePrice() < $userBillEntity->getNumber()) {
691
+                                throw new ValidateException('用户佣金不足');
692
+                            }
693
+                            $updateUserEntity->setBrokeragePrice(bcsub($updateUserEntity->getBrokeragePrice(), $userBillEntity->getNumber(), 2));
694
+                        } else {
695
+                            $updateUserEntity->setBrokeragePrice(bcadd($updateUserEntity->getBrokeragePrice(), $userBillEntity->getNumber(), 2));
696
+                        }
600 697
                     }
601
-
602 698
                 } else if ($userBillEntity->getCommissionType() == UserBillEnum::COMMISSION_TYPE['PENSION']['code']) {
603 699
 
604 700
                     if ($userBillEntity->getGzc() == UserBillEnum::GZC_STATUS['NOT_ENTERED']['code']) {
@@ -614,7 +710,10 @@ class UserBillRepository extends BaseRepository
614 710
                                 $userBillEntity->getLinkId(),
615 711
                                 $userBillEntity->getNumber()
616 712
                             );
617
-
713
+                            // 更新 用户信息
714
+                            /** @var UserEntity $updateUserEntity */
715
+                            $updateUserEntity = $updateUserEntityList[$userEntity->getUid()] ?? UserEntity::newInstance();
716
+                            $updateUserEntity->setUid($userEntity->getUid());
618 717
                             // 养老金
619 718
                             if (is_null($updateUserEntity->getAnnuity())) {
620 719
                                 $updateUserEntity->setAnnuity($userEntity->getAnnuity());
@@ -635,7 +734,12 @@ class UserBillRepository extends BaseRepository
635 734
                     }
636 735
                 }
637 736
 
638
-                $updateUserEntityList[$userEntity->getUid()] = $updateUserEntity;
737
+                if (!empty($updateUserEntity)) {
738
+                    $updateUserEntityList[$userEntity->getUid()] = $updateUserEntity;
739
+                }
740
+                if (!empty($updateSharedProsperityUserEntity)) {
741
+                    $updateSharedProsperityUserEntityList[$updateSharedProsperityUserEntity->getUserId()] = $updateSharedProsperityUserEntity;
742
+                }
639 743
                 $updateUserBillEntityList[$userBillEntity->getBillId()] = $updateUserBillEntity;
640 744
             }
641 745
             if (!empty($updateUserEntityList)) {
@@ -646,6 +750,21 @@ class UserBillRepository extends BaseRepository
646 750
                 );
647 751
             }
648 752
 
753
+            if (!empty($updateSharedProsperityUserEntityList)) {
754
+                $sharedProsperityUserRepository->batchUpdateSharedProsperityUserDataByDataList(
755
+                    array_map(function (SharedProsperityUserEntity $updateSharedProsperityUserEntity) {
756
+                        return $updateSharedProsperityUserEntity->toUnderlineArray();
757
+                    }, $updateSharedProsperityUserEntityList)
758
+                );
759
+            }
760
+            if (!empty($insertSharedProsperityBalanceLogEntityList)) {
761
+                /** @var SharedProsperityBalanceLogDao $balanceDao */
762
+                $balanceDao = app()->make(SharedProsperityBalanceLogDao::class);
763
+                $balanceDao->insertAll(array_map(function ($insertSharedProsperityBalanceLogEntity) {
764
+                    return $insertSharedProsperityBalanceLogEntity->toUnderlineArray();
765
+                }, $insertSharedProsperityBalanceLogEntityList));
766
+            }
767
+
649 768
             if (!empty($updateUserBillEntityList)) {
650 769
                 $this->batchUpdateUserBillDataByDataList(
651 770
                     array_map(function (UserBillEntity $updateUserBillEntity) {