Procházet zdrojové kódy

refactor(admin): 重构共富体系用户奖励更新功能

- 在updateReward方法中新增remark参数并添加参数验证
- 将原有的单一方法拆分为三个专用处理方法:handleWithdrawalLimit、handleSharedProsperityReward和handleBrokerage
- 使用枚举常量替代硬编码数字,提高代码可维护性
- 优化提现额度、消费股/PV值和佣金的处理逻辑
- 添加UserWithdrawalLimitRecordDao依赖用于记录提现额度变更
- 统一时间处理和余额计算逻辑,增强代码一致性
shichen před 4 měsíci
rodič
revize
d73bc47fb0

+ 5 - 0
app/common/dao/user/UserDao.php

@@ -501,4 +501,9 @@ class UserDao extends BaseDao
501 501
     {
502 502
         return $this->getModel()::getDB()->where('uid', '=', $uid)->inc('brokerage_price',$number)->update();
503 503
     }
504
+
505
+    public function updateWithdrawalLimitByUid($uid,$number)
506
+    {
507
+        return $this->getModel()::getDB()->where('uid', '=', $uid)->inc('withdrawal_limit',$number)->update();
508
+    }
504 509
 }

+ 172 - 62
app/common/repositories/shared/SharedProsperityUserRepository.php

@@ -3,9 +3,11 @@
3 3
 namespace app\common\repositories\shared;
4 4
 
5 5
 use app\common\dao\shared\SharedProsperityGroupUserDao;
6
+use app\common\dao\shared\SharedProsperityRewardRecordDao;
6 7
 use app\common\dao\shared\SharedProsperityUserDao;
7 8
 use app\common\dao\shared\SharedProsperityUserLevelLogDao;
8 9
 use app\common\dao\user\UserDao;
10
+use app\common\dao\user\UserWithdrawalLimitRecordDao;
9 11
 use app\common\enum\CommonEnum;
10 12
 use app\common\enum\shared\SharedProsperityRewardRecordEnum;
11 13
 use app\common\enum\shared\SharedProsperityUserEnum;
@@ -791,79 +793,41 @@ class SharedProsperityUserRepository extends BaseRepository
791 793
      * @date 2026/2/27 15:16
792 794
      * 更新用户奖励
793 795
      */
794
-    public function updateReward($userId, $type, $number)
796
+    public function updateReward($userId, $type, $number, $remark)
795 797
     {
798
+        // 使用枚举常量代替硬编码数字
799
+        $typeConstants = SharedProsperityRewardRecordEnum::TYPE;
800
+        $CONSUMER_STOCKS_TYPE = $typeConstants['CONSUMER_STOCKS']['code'] ?? 1001;
801
+        $WITHDRAWAL_LIMIT_TYPE = $typeConstants['WITHDRAWAL_LIMIT']['code'] ?? 1002;
802
+        $PV_TYPE = $typeConstants['PV']['code'] ?? 1003;
803
+        
796 804
         $map = [
797
-            1001 => 'consumer_stocks',
798
-            1002 => 'withdrawal_limit',
799
-            1003 => 'pv'
805
+            $CONSUMER_STOCKS_TYPE => 'consumer_stocks',
806
+            $WITHDRAWAL_LIMIT_TYPE => 'withdrawal_limit',
807
+            $PV_TYPE => 'pv'
800 808
         ];
801 809
 
802 810
         try {
803 811
             Db::startTrans();
804 812
 
805
-            $pm = 1;
806
-            $remark = '后台操作增加' . $number;
807
-            if ($number < 0) {
808
-                $pm = 0;
809
-                $remark = '后台操作减少' . abs($number);
810
-            }
813
+            // 计算收支类型 (pm)
814
+            $pm = $number >= 0 ? 1 : 0;
815
+            $absNumber = abs($number);
816
+            $currentTime = date('Y-m-d H:i:s');
811 817
 
812 818
             if (isset($map[$type])) {
813
-                // 更新数据
814
-                $this->dao->updateRewardByUserId($userId, $map[$type], $number);
815
-                // 记录日志
816
-                $insertData = [
817
-                    'user_id' => $userId,
818
-                    'type' => $type,
819
-                    'pm' => $pm,
820
-                    'number' => abs($number),
821
-                    'balance' => 0,
822
-                    'status' => SharedProsperityRewardRecordEnum::STATUS['VALID']['code'],
823
-                    'type_shop' => SharedProsperityRewardRecordEnum::TYPE_SHOP['Platform']['code'],
824
-                    'order_sn' => 0,
825
-                    'take_time' => date('Y-m-d H:i:s', time()),
826
-                    'remark' => $remark,
827
-                    'create_time' => date('Y-m-d H:i:s', time()),
828
-                    'update_time' => date('Y-m-d H:i:s', time()),
829
-                ];
830
-                /** @var SharedProsperityRewardRecordDao $rewardRecordDao */
831
-                $rewardRecordDao = app()->make(SharedProsperityRewardRecordDao::class);
832
-                $rewardRecordDao->insertAll([$insertData]);
819
+                if ($type == $WITHDRAWAL_LIMIT_TYPE) {
820
+                    // 处理提现额度
821
+                    $this->handleWithdrawalLimit($userId, $number, $pm, $absNumber, $remark);
822
+                } else {
823
+                    // 处理消费股或PV值
824
+                    $this->handleSharedProsperityReward($userId, $type, $map[$type], $number, $pm, $absNumber, $remark, $currentTime);
825
+                }
833 826
             } else {
834
-                // 更新数据
835
-                /** @var UserDao $userDao */
836
-                $userDao = app()->make(UserDao::class);
837
-                $userDao->updateBrokeragePriceByUid($userId, $number);;
838
-                // 记录日志
839
-                $bill = [
840
-                    'uid' => $userId,
841
-                    'link_id' => 0,
842
-                    'pm' => $pm,
843
-                    'title' => $remark,
844
-                    'category' => 'now_money',
845
-                    'type' => 'commission',
846
-                    'number' => abs($number),
847
-                    'balance' => 0,
848
-                    'mark' => $remark,
849
-                    'create_time' => date('Y-m-d H:i:s'),
850
-                    'status' => 1,
851
-                    'commission_type' => CommonEnum::COMMISSION_TYPE['SHARED_PROSPERITY_PARTNER_COMMISSION']['code'],
852
-                    'order_sn' => 0,
853
-                    'tripartite' => 0,
854
-                    'type_shop' => 0,
855
-                    'mer_id' => 0,
856
-                    'source' => 0,
857
-                    'order_type' => 1,
858
-                    'is_red_brokerage' => 0,
859
-                    'gzc' => 3,
860
-                    'take_time' => time(),
861
-                    'district_id' => '',
862
-                    'street_id' => '',
863
-                    'month' => '',
864
-                ];
865
-                Db::name('user_bill')->insert($bill);
827
+                // 处理佣金
828
+                $this->handleBrokerage($userId, $number, $pm, $absNumber, $remark, $currentTime);
866 829
             }
830
+            
867 831
             Db::commit();
868 832
             return true;
869 833
         } catch (\Exception $e) {
@@ -873,6 +837,152 @@ class SharedProsperityUserRepository extends BaseRepository
873 837
     }
874 838
 
875 839
     /**
840
+     * 处理提现额度更新
841
+     * @param int $userId 用户ID
842
+     * @param float $number 变动金额
843
+     * @param int $pm 收支类型 (1:收入, 0:支出)
844
+     * @param float $absNumber 变动金额绝对值
845
+     * @param string $remark 备注
846
+     * @return void
847
+     */
848
+    private function handleWithdrawalLimit($userId, $number, $pm, $absNumber, $remark)
849
+    {
850
+        /** @var UserDao $userDao */
851
+        $userDao = app()->make(UserDao::class);
852
+        
853
+        // 更新提现额度
854
+        $userDao->updateWithdrawalLimitByUid($userId, $number);
855
+        
856
+        // 获取更新后的余额
857
+        $userData = $userDao->getWhere(['uid' => $userId]);
858
+        $balance = $userData->withdrawal_limit;
859
+        
860
+        // 记录日志
861
+        $insertData = [
862
+            'user_id' => $userId,
863
+            'pm' => $pm,
864
+            'number' => $absNumber,
865
+            'balance' => $balance,
866
+            'status' => 1,
867
+            'type_shop' => 0,
868
+            'take_time' => date('Y-m-d H:i:s'),
869
+            'remark' => $remark
870
+        ];
871
+        
872
+        /** @var UserWithdrawalLimitRecordDao $withdrawalRecordDao */
873
+        $withdrawalRecordDao = app()->make(UserWithdrawalLimitRecordDao::class);
874
+        $withdrawalRecordDao->create($insertData);
875
+    }
876
+
877
+    /**
878
+     * 处理共富体系奖励(消费股/PV值)
879
+     * @param int $userId 用户ID
880
+     * @param int $type 奖励类型
881
+     * @param string $field 数据库字段名
882
+     * @param float $number 变动金额
883
+     * @param int $pm 收支类型 (1:收入, 0:支出)
884
+     * @param float $absNumber 变动金额绝对值
885
+     * @param string $remark 备注
886
+     * @param string $currentTime 当前时间
887
+     * @return void
888
+     */
889
+    private function handleSharedProsperityReward($userId, $type, $field, $number, $pm, $absNumber, $remark, $currentTime)
890
+    {
891
+        // 使用枚举常量
892
+        $typeConstants = SharedProsperityRewardRecordEnum::TYPE;
893
+        $CONSUMER_STOCKS_TYPE = $typeConstants['CONSUMER_STOCKS']['code'] ?? 1001;
894
+        $PV_TYPE = $typeConstants['PV']['code'] ?? 1003;
895
+        
896
+        // 更新数据
897
+        $this->dao->updateRewardByUserId($userId, $field, $number);
898
+        
899
+        // 获取更新后的余额
900
+        $userData = $this->dao->getWhere(['user_id' => $userId]);
901
+        
902
+        // 根据类型确定余额字段
903
+        if ($type == $CONSUMER_STOCKS_TYPE) {
904
+            $balance = $userData->consumer_stocks;
905
+        } elseif ($type == $PV_TYPE) {
906
+            $balance = $userData->pv;
907
+        } else {
908
+            $balance = 0;
909
+        }
910
+        
911
+        // 记录日志
912
+        $insertData = [
913
+            'user_id' => $userId,
914
+            'type' => $type,
915
+            'pm' => $pm,
916
+            'number' => $absNumber,
917
+            'balance' => $balance,
918
+            'status' => SharedProsperityRewardRecordEnum::STATUS['VALID']['code'],
919
+            'type_shop' => SharedProsperityRewardRecordEnum::TYPE_SHOP['Platform']['code'],
920
+            'order_sn' => 0,
921
+            'take_time' => $currentTime,
922
+            'remark' => $remark,
923
+            'create_time' => $currentTime,
924
+            'update_time' => $currentTime,
925
+        ];
926
+        
927
+        /** @var SharedProsperityRewardRecordDao $rewardRecordDao */
928
+        $rewardRecordDao = app()->make(SharedProsperityRewardRecordDao::class);
929
+        $rewardRecordDao->insertAll([$insertData]);
930
+    }
931
+
932
+    /**
933
+     * 处理佣金更新
934
+     * @param int $userId 用户ID
935
+     * @param float $number 变动金额
936
+     * @param int $pm 收支类型 (1:收入, 0:支出)
937
+     * @param float $absNumber 变动金额绝对值
938
+     * @param string $remark 备注
939
+     * @param string $currentTime 当前时间
940
+     * @return void
941
+     */
942
+    private function handleBrokerage($userId, $number, $pm, $absNumber, $remark, $currentTime)
943
+    {
944
+        /** @var UserDao $userDao */
945
+        $userDao = app()->make(UserDao::class);
946
+        
947
+        // 更新佣金
948
+        $userDao->updateBrokeragePriceByUid($userId, $number);
949
+        
950
+        // 获取更新后的余额
951
+        $userData = $userDao->getWhere(['uid' => $userId]);
952
+        $balance = $userData->brokerage_price;
953
+        
954
+        // 记录账单
955
+        $bill = [
956
+            'uid' => $userId,
957
+            'link_id' => 0,
958
+            'pm' => $pm,
959
+            'title' => $remark,
960
+            'category' => 'now_money',
961
+            'type' => 'commission',
962
+            'number' => $absNumber,
963
+            'balance' => $balance,
964
+            'mark' => $remark,
965
+            'create_time' => $currentTime,
966
+            'status' => 1,
967
+            'commission_type' => CommonEnum::COMMISSION_TYPE['SHARED_PROSPERITY_PARTNER_COMMISSION']['code'],
968
+            'order_sn' => 0,
969
+            'tripartite' => 0,
970
+            'type_shop' => 0,
971
+            'mer_id' => 0,
972
+            'source' => 0,
973
+            'order_type' => 1,
974
+            'is_red_brokerage' => 0,
975
+            'gzc' => 3,
976
+            'take_time' => time(),
977
+            'district_id' => '',
978
+            'street_id' => '',
979
+            'month' => '',
980
+        ];
981
+        
982
+        Db::name('user_bill')->insert($bill);
983
+    }
984
+
985
+    /**
876 986
      * 第一次促销的 身份 升级方法
877 987
      * @param SharedProsperityUserEntity $sharedProsperityUserEntity
878 988
      * @return void

+ 5 - 2
app/controller/admin/system/sharedProsperity/SharedProsperityUser.php

@@ -51,8 +51,11 @@ class SharedProsperityUser
51 51
     {
52 52
         /** @var SharedProsperityUserRepository $repository */
53 53
         $repository = app()->make(SharedProsperityUserRepository::class);
54
-        $params = app('request')->params(['user_id', 'type', 'number']);
55
-        $res = $repository->updateReward($params['user_id'], $params['type'], $params['number']);
54
+        $params = app('request')->params(['user_id', 'type', 'number', 'remark']);
55
+        if (empty($params['user_id']) || empty($params['type']) || empty($params['number'] || empty($params['remark']))) {
56
+            return app('json')->fail('参数错误');
57
+        }
58
+        $res = $repository->updateReward($params['user_id'], $params['type'], $params['number'], $params['remark']);
56 59
         if (!$res) {
57 60
             return app('json')->fail('更新失败');
58 61
         }