Переглянути джерело

feat(order): 添加订单分享收益功能

- 实现分享人佣金计算逻辑
- 添加会员专区、精彩生活区、复购区排除规则
- 集成系统配置中的用户组分享比例设置
- 添加用户账单记录分享佣金收入
- 实现精确的小数位金额计算处理
- 完善订单分享收益业务流程
shichen 2 місяців тому
батько
коміт
73cd34f484

+ 41 - 0
app/common/repositories/store/order/StoreOrderRepository.php

@@ -12124,6 +12124,47 @@ class StoreOrderRepository extends BaseRepository
12124 12124
                 '消费获得提现额度'
12125 12125
             );
12126 12126
         }
12127
+
12128
+        // 分享收益,订单有分享人会给收益  会员专区,精彩生活区,复购区不给分享奖励
12129
+        $storeOrderEntity->getMerId() ==
12130
+        $shareMerchantIds = [
12131
+            CommonEnum::DESIGN_MERCHANT_ID['MemberZone']['code'],
12132
+            CommonEnum::DESIGN_MERCHANT_ID['WonderfulLiving']['code'],
12133
+            CommonEnum::DESIGN_MERCHANT_ID['Repurchase']['code']
12134
+        ];
12135
+        if (!in_array($storeOrderEntity->getMerId(), $shareMerchantIds)) {
12136
+            $orderShareUid = $storeOrderEntity->getShareUid();
12137
+            if ($orderShareUid) {
12138
+                // 计算 佣金
12139
+                $user_group_share_rate = Db::name("system_config_value")->where(["config_key" => "user_group_share_rate"])->value("value");
12140
+                $user_group_share_rate = json_decode($user_group_share_rate, true);
12141
+                $user_group_share_rate = array_column($user_group_share_rate, 'rate', 'user_groub');
12142
+
12143
+                /** @var UserRepository $userRepository */
12144
+                $userRepository = app()->make(UserRepository::class);
12145
+                $userEntityByShareUserEntity = $userRepository->getUserEntityByUid($orderShareUid);
12146
+                $userGroup = $userEntityByShareUserEntity->getUserGroup();
12147
+                $rate = ($user_group_share_rate[$userGroup] ?? 0) / 100;
12148
+
12149
+                $brokeragePriceByShareUser = bcmul($storeOrderEntity->getConPri(), $rate, CommonEnum::DECIMAL_PLACES_OF_THE_AMOUNT);
12150
+                // 添加佣金记录
12151
+                /** @var UserBillRepository $userBillRepository */
12152
+                $userBillRepository = app()->make(UserBillRepository::class);
12153
+                $userBillRepository->addUserBill(
12154
+                    $orderShareUid,
12155
+                    UserBillEnum::COMMISSION_TYPE['SHARE_EARNINGS']['code'],
12156
+                    UserBillEnum::PM['INCOME']['code'],
12157
+                    $brokeragePriceByShareUser,
12158
+                    UserBillEnum::CATEGORY['NowMoney']['code'],
12159
+                    UserBillEnum::TYPE['Commission']['code'],
12160
+                    UserBillEnum::SOURCE['ONLINE']['code'],
12161
+                    UserBillEnum::ORDER_TYPE['SELF_OPERATED']['code'],
12162
+                    UserBillEnum::TYPE_SHOP['Platform']['code'],
12163
+                    $storeOrderEntity->getOrderId(),
12164
+                    '分享商品获得佣金'
12165
+                );
12166
+            }
12167
+        }
12127 12168
     }
12128 12169
 
12129 12170
     /**