| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\events;
- use app\models\Admin;
- use app\models\Option;
- use app\models\Order;
- use app\models\OrderDetail;
- use app\models\OrderTransit;
- use app\models\Purchase;
- use app\models\PurchaseOrder;
- use app\models\SaasUser;
- use app\models\Store;
- use app\models\StoreCloud;
- use app\models\StoreShareMoney;
- use app\models\Supplier;
- use app\models\SaasUserPriceLog;
- use app\models\SaasSupplierReferral;
- use app\constants\OptionSetting;
- /**
- * 事件类
- * Class TestEvent
- * @package app\events
- */
- class SupplierOrderEvent
- {
- public $supplier_id = 1;
- public function onLoad() {
- // 处理过了售后期且没有售后的订单
- $this->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);
- }
- }
- }
|