quanwei
2025-12-10 898043fc97d2ab8b793fd317a049b874ed207c6d
admin/app/common/model/plus/vip/Order.php
@@ -140,17 +140,9 @@
            if ($deadlineTime > time()) {
                continue;
            }
            // 发放推广佣金(首次购买VIP商品)
            if ($model['vip_area_type'] == 10) {
                $model['vip_area_user_id'] > 0 && User::grantMoney($model['vip_area_user_id'], $model['vip_area_money'], '推广佣金');
            if ($model['vip_area_user_id'] != 0) {
                User::grantMoney($model['vip_area_user_id'], $model['vip_area_money'], VipAreaTypeEnum::getTypeName()[$model['vip_area_type']]);
            }
            // 发放推广复购佣金(非首次购买VIP商品)
            if ($model['vip_area_type'] == 20) {
                $model['vip_area_user_id'] > 0 && User::grantMoney($model['vip_area_user_id'], $model['vip_area_money'], '推广复购佣金');
            }
            // 发放VIP专区补贴给下级用户(当下级获得推广佣金或复购佣金时)
            if ($model['vip_area_type'] == 10 || $model['vip_area_type'] == 20) {
                // 获取下级用户的推荐人(即上级用户)
@@ -160,15 +152,12 @@
                    if ($vipUser['grade']['operating_subsidy']>0){
                        // 获取补贴比例设置
                        $subsidyRate = $vipUser['grade']['operating_subsidy'];
                        // 计算VIP专区补贴
                        $subsidyAmount = bcmul($model['vip_area_money'], bcdiv((string)$subsidyRate, '100', 4), 2);
                        User::grantMoney($superiorUser['referee_id'], $subsidyAmount, 'VIP专区补贴');
                        // 记录分销订单
                        self::createDistributionOrder($order, $superiorUser['referee_id'], $subsidyAmount, 'vip_subsidy',$model['vip_area_money']);
                    }
                }
            }
            
@@ -259,6 +248,9 @@
    /**
     * 创建VIP专区订单记录
     * @param array $order 订单信息数组
     * @param int $order_type 订单类型,默认为OrderTypeEnum::MASTER
     * @return bool|\think\Collection 是否成功创建订单
     */
    public static function createOrder($order, $order_type = OrderTypeEnum::MASTER)
    {
@@ -271,36 +263,14 @@
            if (!$setting['is_open']) {
                return false;
            }
            // 获取当前买家的推荐人信息
            $userModel = UserModel::detail($order['user_id']);
            if (!$userModel || !$userModel['referee_id']) {
                return false;
            }
            // 检查推荐人是否为VIP专区用户
            $vipUser = User::detail($userModel['referee_id']);
            if (!$vipUser) {
                return false;
            }
            // 获取VIP等级设置
            $vipGrade = Grade::detail($vipUser['grade_id']);
            if (!$vipGrade) {
                return false;
            }
            // 验证是否设置
            $config = Setting::getItem('basic', $order['app_id']);
            if (empty($config['become__buy_product_ids'])) {
                return false;
            }
            $data = [
                'user_id' => $order['user_id'],
                'order_id' => $order['order_id'],
                'order_type' => $order_type,
                'order_price' => $order['pay_price'],
                'vip_area_user_id' => $vipUser['user_id'],
                'referee_id' => $userModel['referee_id'],
                'settlement_price' => $order['settlement_price'],
                'vip_area_user_id' => 0,
                'referee_id' => 0,
                'vip_area_money' => 0,
                'vip_area_type' => 0,
                'is_settled' => 0,
@@ -309,38 +279,78 @@
            ];
            $list=[];
            // 计算佣金金额
            $orderPrice = bcsub($order['pay_price'], $order['express_price'], 2);
            $purchase_count=(new self())->getPurchaseCount($order['user_id']);
            foreach ($order['product'] as $product){
                if (in_array($product['product_id'], $config['become__buy_product_ids'])) {
                    // 获取商品数量
                    $quantity = $product['total_num'];
                    // 为每个商品生成分红订单
                    for ($i = 0; $i < $quantity; $i++) {
                        if ($purchase_count==1){
                            $list[]=array_merge($data,['vip_area_type'=>10,'vip_area_money'=>$vipGrade['agent_money'],'is_vip'=>1,'purchase_count'=>$purchase_count]);
                                $purchase_count++;
                        }else{
                            if ($vipGrade['repurchase_money']>0){
                                $list[]=array_merge($data,['vip_area_type'=>20,'vip_area_money'=>$vipGrade['repurchase_money'],'is_vip'=>1,'purchase_count'=>$purchase_count]);
                                $purchase_count++;
            $orderPrice = bcsub(bcsub($order['pay_price'], $order['express_price'], 2), $order['settlement_price'], 2);
            $viewpoint_money=0;
            // 获取当前买家的推荐人信息
            $userModel = UserModel::detail($order['user_id']);
            if (!empty($userModel) && !empty($userModel['referee_id'])) {
                // 检查推荐人是否为VIP专区用户
                $vipUser = User::detail($userModel['referee_id']);
                if ($vipUser) {
                    $data['vip_area_user_id'] = $vipUser['user_id'];
                    $data['referee_id'] = $userModel['referee_id'];
                    // 获取VIP等级设置
                    $vipGrade = Grade::detail($vipUser['grade_id']);
                    if ($vipGrade) {
                        $config = Setting::getItem('basic', $order['app_id']);
                        if (!empty($config['become__buy_product_ids'])) {
                            $purchase_count=(new self())->getPurchaseCount($order['user_id']);
                            foreach ($order['product'] as $product){
                                if ($product['is_repurchase']==1){
                                    $viewpoint_money=bcadd($viewpoint_money,($product['is_viewpoint_money']?$product['viewpoint_money']:$vipGrade['viewpoint_money']),2);
                                }
                                if (in_array($product['product_id'], $config['become__buy_product_ids'])) {
                                    // 获取商品数量
                                    $quantity = $product['total_num'];
                                    // 为每个商品生成分红订单
                                    for ($i = 0; $i < $quantity; $i++) {
                                        if ($purchase_count==1){
                                            $list[]=array_merge($data,['vip_area_type'=>10,'vip_area_money'=>$vipGrade['agent_money'],'is_vip'=>1,'purchase_count'=>$purchase_count]);
                                            $purchase_count++;
                                        }else{
                                            if ($vipGrade['repurchase_money']>0){
                                                $list[]=array_merge($data,['vip_area_type'=>20,'vip_area_money'=>$vipGrade['repurchase_money'],'is_vip'=>1,'purchase_count'=>$purchase_count]);
                                                $purchase_count++;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        // 检查并处理直推佣金
                        $directReferralsCount=0;
                        $user=UserModel::detail($order['user_id']);
                        //见点奖
                        if (!empty($user['referee_id'])){
                            // 检查推荐人是否满足直推条件(直推用户数量)
                            $directReferralsCount = UserModel::where('referee_id', '=', $user['referee_id'])->count();
                            if ($viewpoint_money>0&&(new User())->getViewpointMoneyQualification($user['referee_id'],$setting)){
                                $list[]=array_merge($data,['vip_area_type'=>60,'vip_area_money'=>$viewpoint_money]);
                            }
                        }
                        $requiredReferralCount = $setting['referee_buy_count'] ?? 0;
                        if ($vipGrade['commission']>0 && $directReferralsCount >= $requiredReferralCount&&$orderPrice>0){
                            // 计算平台直推佣金金额
                            $commissionAmount = bcmul($orderPrice, bcdiv($vipGrade['commission'], '100', 4), 2);
                            $list[]=array_merge($data,['vip_area_type'=>40,'vip_area_money'=>$commissionAmount]);
                        }
                    }
                }
            }
            $directReferralsCount=0;
            $user=UserModel::detail($order['user_id']);
            if (!empty($user['referee_id'])){
                // 检查推荐人是否满足直推条件(直推用户数量)
                $directReferralsCount = UserModel::where('referee_id', '=', $user['referee_id'])->count();
            // 处理供应商推荐人佣金
            if($order['supplier']['referee_id']!=0){
                $supplierReferee=VipUserModel::detail($order['supplier']['referee_id']);
                if ($supplierReferee){
                    $vipGradeSupplier=Grade::detail($supplierReferee['grade_id']);
                    if ($vipGradeSupplier['supplier_money']>0&&$orderPrice>0){
                        // 计算直推店铺交易额佣金金额
                        $supplier_money = bcmul($orderPrice, bcdiv($vipGrade['supplier_money'], '100', 4), 2);
                        $list[]=array_merge($data,['vip_area_type'=>50,'vip_area_money'=>$supplier_money,'vip_area_user_id'=>$supplierReferee['user_id'],'referee_id'=>$supplierReferee['referee_id']]);
                    }
                }
            }
            $requiredReferralCount = $setting['referee_buy_count'] ?? 0;
            if ($vipGrade['commission']>0 && $directReferralsCount >= $requiredReferralCount){
                // 计算佣金金额
                $commissionAmount = bcmul($orderPrice, bcdiv($vipGrade['commission'], '100', 4), 2);
                $list[]=array_merge($data,['vip_area_type'=>40,'vip_area_money'=>$commissionAmount]);
            }
            log_write($list);
            if (empty($list)){
                return true;
            }