orderSend(); //处理转单 $this->orderTransitSend(); } public function orderTransitSend() { try { //代理佣金抽取 $time = time(); $supplier_id = $this->supplier_id; $supplier = Supplier::findOne(['cloud_supplier_id' => $supplier_id]); $after_sale_time = $supplier->sale_day; $sale_time = $time - ($after_sale_time * 86400); $order_list = OrderTransit::find()->alias('o') ->where([ 'and', ['o.cloud_supplier_id' => $supplier_id], ['o.is_delete' => 0, 'o.status' => 2, 'o.is_sale' => 0], ['<=', 'o.confirm_time', $sale_time], ['o.cancel_examine' => 0], ])->andWhere(['<>', 'status', -1]) ->select(['o.*'])->groupBy('o.id') ->offset(0)->limit(10)->asArray()->all(); foreach ($order_list as $index => $value) { $OrderTransit = OrderTransit::find()->where(['order_id' => $value['order_id'], 'is_sale' => 0])->select('id')->asArray()->all(); $order_detail = OrderDetail::find()->where(['order_id' => $value['order_id']])->count(); if ((int)$order_detail === (int)count($OrderTransit)) { foreach ($OrderTransit as $item) { $this->PurchaseOrderAgencyPrice($item['id']); $order = OrderTransit::findOne($item['id']); $order->is_sale = 1; $order->save(); } } } } catch (\Exception $e) { } } /** * 处理过了售后期且没有售后的订单 */ private function orderSend() { $time = time(); $supplier_id = $this->supplier_id; $supplier = Supplier::findOne(['cloud_supplier_id' => $supplier_id]); $after_sale_time = $supplier->sale_day; $sale_time = $time - ($after_sale_time * 86400); $order_list = PurchaseOrder::find()->alias('o') ->where([ 'and', ['o.supplier_id' => $supplier_id], ['o.is_delete' => 0, 'o.trade_status' => Order::ORDER_FLOW_CONFIRM, 'o.is_sale' => 0], ['<=', 'o.confirm_time', $sale_time], ['o.cancel_examine' => 0], ])->andWhere(['<>', 'trade_status', Order::ORDER_FLOW_CANCEL]) ->select(['o.*'])->groupBy('o.id') ->offset(0)->limit(10)->asArray()->all(); foreach ($order_list as $index => $value) { $this->agencyPrice($value['id']); $order = PurchaseOrder::findOne($value['id']); $order->is_sale = 1; $order->save(); } } //转单订单抽佣 private function PurchaseOrderAgencyPrice($order_id){ $supplier_id = $this->supplier_id; $order = OrderTransit::find()->where(['id' => $order_id, 'is_sale' => 0])->asArray()->one(); $price = $order['order_price']; $supplier = Supplier::findOne(['cloud_supplier_id' => $supplier_id]); $this->supplierParentPrice($supplier, $order); $old_order = Order::findOne($order['order_id']); $store = Store::findOne($old_order->store_id); $option = Option::get('agency_price_config', 0, 'saas', [])['value']; if ($option) { $option = json_decode($option, true); } $province_percent = $option['supplier_province_percent'] ?? 0; $city_percent = $option['supplier_city_percent'] ?? 0; $district_percent = $option['supplier_district_percent'] ?? 0; $admin_list = Admin::find()->where(['province_id' => $supplier->province_id, 'is_delete' => 0, 'type' => 'admin'])->andWhere(['>', 'area_level', 0])->asArray()->all(); foreach ($admin_list as $item) { $ag_rebate = 0; $rate = 0; $desc = ''; //省 if ((int)$item['area_level'] === 3) { $ag_rebate = $price * ($province_percent / 100) * ($supplier->rate / 100); $ag_rebate = sprintf("%.2f", $ag_rebate); $rate = $province_percent; $desc = '商户'. $store->name .'订单'. $old_order->order_no .'转单-发放 '. $ag_rebate .'元省代佣金'; } //市 if ((int)$item['area_level'] === 2 && (int)$item['city_id'] === (int)$supplier->city_id) { $ag_rebate = $price * ($city_percent / 100) * ($supplier->rate / 100); $ag_rebate = sprintf("%.2f", $ag_rebate); $rate = $city_percent; $desc = '商户'. $store->name .'订单'. $old_order->order_no .'转单-发放 '. $ag_rebate .'元市代佣金'; } //区 if ((int)$item['area_level'] === 1 && (int)$item['city_id'] === (int)$supplier->city_id && (int)$item['district_id'] === (int)$supplier->district_id) { $ag_rebate = $price * ($district_percent / 100) * ($supplier->rate / 100); $ag_rebate = sprintf("%.2f", $ag_rebate); $rate = $district_percent; $desc = '商户'. $store->name .'订单'. $old_order->order_no .'转单-发放 '. $ag_rebate .'元区代佣金'; } if ($ag_rebate <= 0) { continue; } $SaasUser = SaasUser::findOne($item['saas_user_id']); if ($SaasUser) { $SaasUser->share_profit = ($SaasUser->share_profit * 1) + ($ag_rebate * 1); $res = $SaasUser->save(); if ($res) { $form = new StoreShareMoney(); $form->user_id = $item['saas_user_id']; $form->store_id = $order->store_id ?? get_store_id(); $form->profit = $rate; $form->total_price = $price; $form->desc = $desc; $form->order_id = $order['order_id']; $form->created_at = time(); $form->status = StoreShareMoney::STATUS_STORE_ORDER; $form->type = StoreShareMoney::TYPE_AREA_AGENT; $form->commission = $ag_rebate; $form->cloud_type = 1; $form->is_send = 1; $form->save(); } else { debug_log(json_encode($SaasUser->errors)); } } } } //采购商抽佣 private function agencyPrice($order_id){ try { $order = PurchaseOrder::find()->where(['id' => $order_id, 'is_sale' => 0])->asArray()->one(); $supplier = Supplier::findOne(['cloud_supplier_id' => $order['supplier_id']]); $this->supplierParentPrice($supplier, $order); $option = Option::get('agency_price_config', 0, 'saas'); if ($option['value']) { $option = json_decode($option['value'], true); } $province_id = $supplier->province_id; $city_id = $supplier->city_id; $district_id = $supplier->district_id; $city_percent = $option['supplier_city_percent'] ?? 0; $district_percent = $option['supplier_district_percent'] ?? 0; $province_percent = $option['supplier_province_percent'] ?? 0; $rate = 0; $admin_list = Admin::find()->where(['is_delete' => 0, 'province_id' => $province_id])->andWhere(['>', 'area_level', 0])->asArray()->all(); $store_user = StoreCloud::findOne(['saas_user_id' => $order['saas_id']]); foreach ($admin_list as $item) { $price = 0; $desc = ''; if ((int)$item['area_level'] === 3) { $price = $order['pay_price'] * ($province_percent / 100) * ($supplier->rate / 100); $price = sprintf("%.2f", $price); $desc = '商户'. $store_user->name .'订单'. $order['order_no'] .'采购订单-发放 '. $price .'元省代佣金'; } if ((int)$item['area_level'] === 2 && (int)$item['city_id'] === $city_id) { $price = $order['pay_price'] * ($city_percent / 100) * ($supplier->rate / 100); $price = sprintf("%.2f", $price); $desc = '商户'. $store_user->name .'订单'. $order['order_no'] .'采购订单-发放 '. $price .'元市代佣金'; } if ((int)$item['area_level'] === 1 && (int)$item['city_id'] === (int)$city_id && (int)$item['district_id'] === (int)$district_id) { $price = $order['pay_price'] * ($district_percent / 100) * ($supplier->rate / 100); $price = sprintf("%.2f", $price); $desc = '商户'. $store_user->name .'订单'. $order['order_no'] .'采购订单-发放 '. $price .'元区代佣金'; } if ($price <= 0) { continue; } //给用户增加佣金 $SaasUser = SaasUser::find()->where(['id' => $item['saas_user_id']])->one(); if ($SaasUser) { $SaasUser->share_profit = ($SaasUser->share_profit * 1) + ($price * 1); $res = $SaasUser->save(); //增加记录 if ($res) { $form = new StoreShareMoney(); $form->user_id = $item['saas_user_id']; $form->store_id = $order['store_id']; $form->profit = $rate; $form->total_price = $order['pay_price']; $form->desc = $desc; $form->order_id = $order_id; $form->created_at = time(); $form->status = StoreShareMoney::STATUS_STORE_ORDER; $form->commission = $price; $form->order_type = 1; $form->cloud_type = 1; $form->type = StoreShareMoney::TYPE_AREA_AGENT; $form->is_send = 1; $form->save(); } } } } catch (\Exception $e) { debug_log('抽佣' . $e->getMessage() . $e->getLine()); \Yii::error($e->getMessage()); } } private function supplierParentPrice($supplier, $order) { try { $saasSupplierReferral = SaasSupplierReferral::findOne(['supplier_id' => $supplier['id'], 'is_enable' => 1]); if(!$saasSupplierReferral){ return; } $log_type = SaasUserPriceLog::LOG_TYPE_INCOME; $amount_type = SaasUserPriceLog::AMOUNT_TYPE_SUPPLIER_PARENT; $desc = '供货商推荐人分佣'; $defaultSet = Option::get(OptionSetting::SHARE_SAAS_SUPPLIER_REFERRAL_DEFAULT_SETTING, -1, OptionSetting::SHARE_GROUP_NAME, '{}')['value']; $defaultSet = json_decode($defaultSet, true); if(($saasSupplierReferral['referral_rebate'] == 0) && (!empty($defaultSet['is_enable']) && !empty($defaultSet['referral_rebate']))){ $saasSupplierReferral['referral_rebate'] = $defaultSet['referral_rebate']; } $saas_id = $saasSupplierReferral['referral_id']; $price = $order['pay_price'] * ($saasSupplierReferral['referral_rebate'] / 100) * ($supplier['rate'] / 100); $saveLog = SaasUserPriceLog::saveLog($saas_id, $price, $amount_type, $log_type, $order['order_no'], $desc, $supplier['id']); \Yii::warning(['---- supplierParentPrice ----', $saveLog, $saas_id, $price, $amount_type, $log_type, $order['order_no'], $desc]); } catch (\Exception $e) { \Yii::warning('---- supplierParentPrice Err ----' . __LINE__, $e); } } }