quanwei
7 days ago 30563323a53b0d0260c97d08a9e8bd4cc8227a95
admin/app/common/model/plus/vip/Order.php
@@ -15,7 +15,8 @@
{
    protected $name = 'vip_area_order';
    protected $pk = 'id';
    public $append=['vip_area_type_text'];
    public $append = ['vip_area_type_text'];
    /**
     * VIP专区订单类型
     * @param $value
@@ -24,7 +25,7 @@
    public function getVipAreaTypeTextAttr($value, $data)
    {
        $types = VipAreaTypeEnum::getTypeName();
        return  $types[$data['vip_area_type']];
        return $types[$data['vip_area_type']];
    }
    /**
@@ -83,7 +84,7 @@
            ->where('order_type', '=', $orderType)
            ->find();
    }
    /**
     * 获取订单的所有VIP专区订单记录
     */
@@ -109,13 +110,13 @@
        if ($order['order_status']['value'] != 30) {
            return false;
        }
        // 获取该订单的所有VIP专区订单记录
        $models = self::getAllDetailsByOrderId($order['order_id'], $orderType);
        if ($models->isEmpty()) {
            return false;
        }
        // 佣金结算天数
        $settleDays = Setting::getItem('settlement', $order['app_id'])['settle_days'];
        $success = false;
@@ -126,16 +127,16 @@
            if ($model['is_settled'] == 1) {
                continue;
            }
            // 写入结算时间
            $deadlineTime = $model['settle_time'] ?: 0;
            if($deadlineTime == 0){
                $deadlineTime = $order['receipt_time'] + $settleDays  * 86400;
            if ($deadlineTime == 0) {
                $deadlineTime = $order['receipt_time'] + $settleDays * 86400;
                $model->save([
                    'settle_time' => $deadlineTime
                ]);
            }
            // 未到结算时间,跳过
            if ($deadlineTime > time()) {
                continue;
@@ -143,36 +144,36 @@
            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'] == 10 || $model['vip_area_type'] == 20) {
                // 获取下级用户的推荐人(即上级用户)
                $superiorUser = UserModel::detail($model['vip_area_user_id']);
                if ($superiorUser && $superiorUser['referee_id']) {
                    $vipUser = VipUserModel::detail($superiorUser['vip_area_user_id']);
                    if ($vipUser['grade']['operating_subsidy']>0){
                    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专区补贴');
                        User::grantMoney($superiorUser['referee_id'], $subsidyAmount, '下级收益补贴');
                        // 记录分销订单
                        self::createDistributionOrder($order, $superiorUser['referee_id'], $subsidyAmount, 'vip_subsidy',$model['vip_area_money']);
                        self::createDistributionOrder($order, $superiorUser['referee_id'], $subsidyAmount, 'vip_subsidy', $model['vip_area_money']);
                    }
                }
            }
            // 发放平台直推佣金(满足直推条件后)
            //self::grantPlatformCommission($order, $model);
            // 更新VIP订单记录
            $model->save([
                'is_settled' => 1,
                'settle_time' => time()
            ]);
            $success = true;
        }
        return $success;
    }
@@ -187,22 +188,22 @@
        // 获取平台直推佣金设置
        $setting = Setting::getItem('basic', $order['app_id']);
        $requiredReferralCount = $setting['referee_buy_count'] ?? 0;
        // 如果设置了直推条件且用户有推荐人
        if ($requiredReferralCount > 0 && $model['vip_area_user_id'] > 0) {
            // 检查推荐人是否满足直推条件(直推用户数量)
            $directReferralsCount = UserModel::where('referee_id', '=', $model['vip_area_user_id'])->count();
            if ($directReferralsCount >= $requiredReferralCount) {
                // 计算平台直推佣金
                $platformCommissionRate = $setting['platform_commission_rate'] ?? 5;
                $platformCommissionAmount = bcmul($model['order_price'], bcdiv((string)$platformCommissionRate, '100', 4), 2);
                // 发放平台直推佣金
                User::grantMoney($model['vip_area_user_id'], $platformCommissionAmount, '平台直推佣金');
                // 记录分销订单
                self::createDistributionOrder($order, $model['vip_area_user_id'], $platformCommissionAmount, 'platform_commission',$model['vip_area_money']);
                self::createDistributionOrder($order, $model['vip_area_user_id'], $platformCommissionAmount, 'platform_commission', $model['vip_area_money']);
            }
        }
    }
@@ -215,12 +216,12 @@
     * @param $type
     * @return bool
     */
    protected static function createDistributionOrder($order, $userId, $amount, $type,$subordinate_money)
    protected static function createDistributionOrder($order, $userId, $amount, $type, $subordinate_money)
    {
        // 创建分销订单记录以跟踪各种类型的佣金
        $distributionOrder = new self();
        $vip_area_type = 0;
        switch($type) {
        switch ($type) {
            case 'vip_subsidy':
                $vip_area_type = 30; // VIP专区补贴
                break;
@@ -228,7 +229,7 @@
                $vip_area_type = 40; // 平台直推佣金
                break;
        }
        return $distributionOrder->save([
            'user_id' => $userId,
            'order_id' => $order['order_id'],
@@ -277,10 +278,10 @@
                'settle_time' => 0,
                'app_id' => $order['app_id']
            ];
            $list=[];
            $list = [];
            // 计算佣金金额
            $orderPrice = bcsub(bcsub($order['pay_price'], $order['express_price'], 2), $order['settlement_price'], 2);
            $viewpoint_money=0;
            //$viewpoint_money = 0;
            // 获取当前买家的推荐人信息
            $userModel = UserModel::detail($order['user_id']);
            if (!empty($userModel) && !empty($userModel['referee_id'])) {
@@ -293,77 +294,110 @@
                    $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'])||$product['is_vip']) {
                                    // 获取商品数量
                                    $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 = (new self())->getPurchaseCount($order['user_id']);
                        $vip_quantity=0;
                        $product_price_repurchase=0;
                        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']) || $product['is_vip']) {
                                // 获取商品数量
                                $vip_quantity = bcadd($vip_quantity, $product['total_num'], 2);
                                // 为每个商品生成分红订单
                                /*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++;
                                        }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++;
                                            }
                                        }
                                    }
                                }*/
                            }
                            //复购专区利润
                            if($product['is_repurchase']){
                                $product_price_repurchase=bcadd($product_price_repurchase, bcsub($product['total_pay_price'], $product['total_settlement_price'], 2));
                            }
                        }
                        if ($vip_quantity>0){
                            if ($purchase_count == 1) {
                                $list[] = array_merge($data, ['vip_area_type' => 10, 'vip_area_money' => bcmul($vipGrade['agent_money'],$vip_quantity,2), 'is_vip' => 1, 'purchase_count' => $purchase_count]);
                            } else {
                                if ($vipGrade['repurchase_money'] > 0) {
                                    $list[] = array_merge($data, ['vip_area_type' => 20, 'vip_area_money' => bcmul($vipGrade['repurchase_money'],$vip_quantity,2), 'is_vip' => 1, 'purchase_count' => $purchase_count]);
                                }
                            }
                        }
                        if ($product_price_repurchase>0){
                            //复购专区级差奖
                            if ($setting['jcaward']){
                                $refereeJc=User::getAllJcUser($userModel['user_id']);
                                foreach ($refereeJc as $v){
                                    $list[] = array_merge($data, ['vip_area_type' => 70, 'vip_area_money' =>bcmul($product_price_repurchase, bcdiv($v['bonus_percent'], 100, 4), 2),'vip_area_user_id'=>$v['user_id']]);
                                }
                            }
                            //复购专区平级奖
                            if ($setting['pjaward']){
                                $refereeJc=User::getAllPjUser($userModel['user_id'],$setting['pjaward_level']);
                                foreach ($refereeJc as $v){
                                    $list[] = array_merge($data, ['vip_area_type' => 80, 'vip_area_money' => bcmul($product_price_repurchase, bcdiv($v['bonus_percent'], 100, 4), 2),'vip_area_user_id'=>$v['user_id']]);
                                }
                            }
                        }
                        // 检查并处理直推佣金
                        $directReferralsCount=0;
                        $user=UserModel::detail($order['user_id']);
                        $directReferralsCount = 0;
                        $user = UserModel::detail($order['user_id']);
                        //见点奖
                        if (!empty($user['referee_id'])){
                       /* if (!empty($user['referee_id'])) {
                            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 (!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){
                        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]);
                            $list[] = array_merge($data, ['vip_area_type' => 40, 'vip_area_money' => $commissionAmount]);
                        }
                    }
                }
            }
            // 处理供应商推荐人佣金
            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){
            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']]);
                        $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']]);
                    }
                }
            }
            log_write($list);
            if (empty($list)){
            if (empty($list)) {
                return true;
            }
            // 保存VIP专区订单记录
            return $model->saveAll($list);
        }catch (\Exception $e){
            log_write('创建VIP专区订单失败:'.$e->getMessage());
        } catch (\Exception $e) {
            log_write('创建VIP专区订单失败:' . $e->getMessage());
            return false;
        }
    }
    public function getPurchaseCount($user_id)
    {
        return self::where(['user_id'=>$user_id,'is_vip'=>1])->count()+1;
        return self::where(['user_id' => $user_id, 'is_vip' => 1,'is_invalid'=>0])->count() + 1;
    }
}