quanwei
2 days ago 04102f7237efefa744090ed7c25f7b5d0807b679
admin/app/common/service/order/OrderCompleteService.php
@@ -2,15 +2,20 @@
namespace app\common\service\order;
use app\common\model\plus\coupon\UserCoupon as UserCouponModel;
use app\common\model\plus\team\Apply as teamApplyModel;
use app\common\library\helper;
use app\common\model\plus\bonus\Order as BonusOrderModel;
use app\common\model\settings\Setting;
use app\common\model\supplier\Capital as SupplierCapitalModel;
use app\common\model\supplier\Supplier as SupplierModel;
use app\common\model\user\ActivationCode;
use app\common\model\user\User as UserModel;
use app\common\model\settings\Setting as SettingModel;
use app\common\model\plus\agent\Order as AgentOrderModel;
use app\common\model\plus\team\Order as TeamOrderModel;
use app\common\model\user\PointsLog as PointsLogModel;
use app\common\model\user\ConsumptionLog as ConsumptionLogModel;
use app\common\enum\order\OrderTypeEnum;
use app\common\model\order\OrderSettled as OrderSettledModel;
use app\supplier\model\store\Order as StoreOrderModel;
@@ -20,7 +25,8 @@
use app\common\model\plus\shareholder\Apply as ShareholderApplyModel;
use app\common\model\plus\shareholder\Setting as ShareholderSettingModel;
use app\common\model\plus\shareholder\Bonus as ShareholderBonusModel;
use app\common\model\plus\vip\Order as VipOrderModel;
use app\common\model\plus\operations\Order as OperationsOrderModel;
/**
 * 已完成订单结算服务类
 */
@@ -76,15 +82,49 @@
        }
        // 发放分销商佣金,发放团队分红
        foreach ($orderList as $order) {
            // 赠送等级积分给用户
            $user = UserModel::detail($order['user_id']);
            if ($order['is_newcomer']==1){
                $points = $order['pay_price'];
                if($order['supplier']['gift_type']==10){
                    $user->setIncPoints($points, '新人专区购买商品专享订单奖励积分');
                }else{
                    $user->setIncConsumption($points, '新人专区购买商品专享订单奖励消费券');
                }
            }
            if ($order['product_type']==10){
                $points = $order['pay_price'];
                $user->setIncPoints($points, '品牌专区购买商品专享订单奖励积分',0,true,1);
            }
            (new teamApplyModel())->becomeTeamByAgent($order['user_id'],70,$order['app_id']);
            //生成激活码
            (new ActivationCode())->generateCodes($order);
            foreach ($order['product'] as $product){
                //赠送优惠券
                if ($product['open_coupon'] && $product['open_coupons']) {
                    $open_coupons=$product['open_coupons'];
                    if(!is_array($open_coupons)){
                        $open_coupons=json_decode($open_coupons,1);
                    }
                    (new UserCouponModel)->addUserCardCoupon($open_coupons, $user,$order['order_id']);
                }
            }
            AgentOrderModel::grantMoney($order, $this->orderType);
            // 发放运营中心佣金
            OperationsOrderModel::grantMoney($order, $this->orderType);
            // 发放团队分红 by yj
         TeamOrderModel::grantMoney($order, $this->orderType);
            // 发放会员分红
            VipOrderModel::grantMoney($order);
            //发放分红
            BonusOrderModel::grantMoney($order, $this->orderType);
            // 生成区域代理订单 by yj
            RegionOrderModel::createOrder($order);
            // 生成股东分红订单 by yj
            ShareholderOrderModel::createOrder($order);
            // 更新队长等级 by yj
            event('TeamUserGrade', $order['user_id']);
            event('VipUserGrade', $order['user_id']);
            if (ShareholderSettingModel::getItem('basic')['self_buy_money']) {
                // 更新股东等级 by lyzflash
                $shareholderModel = new ShareholderApplyModel;
@@ -106,6 +146,8 @@
        $this->setIncUserExpend($orderList);
        // 处理订单赠送的积分
        $this->setGiftPointsBonus($orderList);
        // 处理订单赠送的消费券
        $this->setGiftConsumptionBonus($orderList);
        // 将订单设置为已结算
        $this->model->onBatchUpdate($orderIds, ['is_settled' => 1,'settled_time' => time(),'is_settled_team' => 1]);
        // 供应商结算
@@ -285,6 +327,47 @@
        }
        return true;
    }
    /**
     * 处理订单赠送的消费券
    */
    private function setGiftConsumptionBonus($orderList)
    {
        // 计算用户所得消费券
        $userData = [];
        $logData = [];
        foreach ($orderList as $order) {
            // 计算用户所得消费券
            $pointsBonus = $order['consumption_bonus'];
            if ($pointsBonus <= 0) continue;
            // 减去订单退款的积分
            foreach ($order['product'] as $product) {
                if (
                    !empty($product['refund'])
                    && $product['refund']['type']['value'] == 10      // 售后类型:退货退款
                    && $product['refund']['is_agree']['value'] == 10  // 商家审核:已同意
                ) {
                    $pointsBonus -= $product['consumption_bonus'];
                }
            }
            // 计算用户所得积分
            !isset($userData[$order['user_id']]) && $userData[$order['user_id']] = 0;
            $userData[$order['user_id']] += $pointsBonus;
            // 整理用户积分变动明细
            $logData[] = [
                'user_id' => $order['user_id'],
                'value' => $pointsBonus,
                'describe' => "订单赠送:{$order['order_no']}",
                'app_id' => $order['app_id'],
            ];
        }
        if (!empty($userData)) {
            // 累积到会员表记录
            $this->UserModel->onBatchIncConsumption($userData);
            // 批量新增积分明细记录
            (new ConsumptionLogModel)->onBatchAdd($logData);
        }
        return true;
    }
    /**
     * 累积用户实际消费金额