* * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace App\Observers; use App\Repositories\Enums\Base\PayStatusEnum; use App\Repositories\Enums\Car\BillDisburseEnum; use App\Repositories\Enums\Car\BillTypeEnum; use App\Repositories\Enums\Car\OrderDrivingStatusEnum; use App\Repositories\Enums\Car\OrderPayTypeEnum; use App\Repositories\Enums\Check\StatusEnum; use App\Repositories\Enums\ModelStatusEnum; use App\Repositories\Enums\RoleEnum; use App\Repositories\Models\Base\Admin; use App\Repositories\Models\Base\Setting; use App\Repositories\Models\Car\Bill; use App\Repositories\Models\Car\Grade; use App\Repositories\Models\Car\Order; use App\Repositories\Models\Car\OrderLog; use App\Repositories\Models\Car\Shop; use Carbon\Carbon; use Illuminate\Support\Facades\DB; class OrderObserver { public function saved(Order $order) { $settings = Setting::byCodesGetSettings([ 'shop_manage_bonus', 'salesman_all_bonus', 'time_salesman_all_bonus', 'salesman_0_bonus', 'time_salesman_0_bonus', 'coach_car_2_bonus', 'coach_car_3_bonus', ]); //分成 if ($order->isDirty('driving_status')) { $now = Carbon::now()->toDateTimeString(); switch ((int)$order->driving_status) { case OrderDrivingStatusEnum::WAIT_HEALTH: //新学员分成 //2.店长老师 $shop_admin_id = Shop::query()->where('id', $order->shop_id)->value('shop_admin_id'); if ($shop_admin_id) { if ($order->pay_type == OrderPayTypeEnum::PAY_ALL) { Bill::query()->create([ 'user_id' => $order->user_id, 'order_id' => $order->id, 'shop_id' => $order->shop_id, 'admin_id' => $shop_admin_id, // 'check_status' => StatusEnum::SUCCESS, 'check_status' => StatusEnum::WAIT, 'check_admin_id' => 0, // 'check_time' => $now, 'type_id' => BillTypeEnum::BONUS_SHOP, 'disburse' => BillDisburseEnum::OUT, 'money' => $settings['shop_manage_bonus'], 'is_give' => 0, 'is_lock' => 0, ]); } else { Bill::query()->create([ 'user_id' => $order->user_id, 'order_id' => $order->id, 'shop_id' => $order->shop_id, 'admin_id' => $shop_admin_id, 'check_status' => StatusEnum::STAGE, 'check_admin_id' => 0, 'check_time' => $now, 'type_id' => BillTypeEnum::BONUS_SHOP, 'disburse' => BillDisburseEnum::OUT, 'money' => $settings['shop_manage_bonus'], 'is_give' => 0, 'is_lock' => 1, ]); } } //1.招生老师 if ($order->salesman_admin_id) { $salesman_admin = Admin::query()->where('id', $order->salesman_admin_id)->first(); if ($salesman_admin) { switch ($order->pay_type) { case OrderPayTypeEnum::PAY_ALL: if (!$salesman_admin->hasRole(RoleEnum::BUSINESS_TEMP)) { Bill::query()->create([ 'user_id' => $order->user_id, 'order_id' => $order->id, 'shop_id' => $order->shop_id, 'admin_id' => $order->salesman_admin_id, // 'check_status' => StatusEnum::SUCCESS, 'check_status' => StatusEnum::WAIT, 'check_admin_id' => 0, // 'check_time' => $now, 'type_id' => BillTypeEnum::BONUS_BUSINESS, 'disburse' => BillDisburseEnum::OUT, 'money' => $settings['salesman_all_bonus'], ]); } else { Bill::query()->create([ 'user_id' => $order->user_id, 'order_id' => $order->id, 'shop_id' => $order->shop_id, 'admin_id' => $order->salesman_admin_id, // 'check_status' => StatusEnum::SUCCESS, 'check_status' => StatusEnum::WAIT, 'check_admin_id' => 0, // 'check_time' => $now, 'type_id' => BillTypeEnum::BONUS_BUSINESS, 'disburse' => BillDisburseEnum::OUT, 'money' => $settings['time_salesman_all_bonus'], 'is_give' => 0, ]); } break; case OrderPayTypeEnum::PAY_AGING: if (!$salesman_admin->hasRole(RoleEnum::BUSINESS_TEMP)) { $salesman_0_bonus_arr = str2arr($settings['salesman_0_bonus']); if (isset($salesman_0_bonus_arr[0]) && $salesman_0_bonus_arr[0]) { Bill::query()->create([ 'user_id' => $order->user_id, 'order_id' => $order->id, 'shop_id' => $order->shop_id, 'admin_id' => $order->salesman_admin_id, // 'check_status' => StatusEnum::SUCCESS, 'check_status' => StatusEnum::WAIT, 'check_admin_id' => 0, // 'check_time' => $now, 'type_id' => BillTypeEnum::BONUS_BUSINESS, 'disburse' => BillDisburseEnum::OUT, 'money' => $salesman_0_bonus_arr[0], 'is_give' => 0, ]); } if (isset($salesman_0_bonus_arr[1]) && $salesman_0_bonus_arr[1]) { Bill::query()->create([ 'user_id' => $order->user_id, 'order_id' => $order->id, 'shop_id' => $order->shop_id, 'admin_id' => $order->salesman_admin_id, 'check_status' => StatusEnum::STAGE, 'check_admin_id' => 0, 'check_time' => $now, 'type_id' => BillTypeEnum::BONUS_BUSINESS, 'disburse' => BillDisburseEnum::OUT, 'is_lock' => 1, 'money' => $salesman_0_bonus_arr[1], 'is_give' => 0, ]); } } else { $time_salesman_0_bonus_arr = str2arr($settings['time_salesman_0_bonus']); if (isset($time_salesman_0_bonus_arr[0]) && $time_salesman_0_bonus_arr[0]) { Bill::query()->create([ 'user_id' => $order->user_id, 'order_id' => $order->id, 'shop_id' => $order->shop_id, 'admin_id' => $order->salesman_admin_id, // 'check_status' => StatusEnum::SUCCESS, 'check_status' => StatusEnum::WAIT, 'check_admin_id' => 0, // 'check_time' => $now, 'type_id' => BillTypeEnum::BONUS_BUSINESS, 'disburse' => BillDisburseEnum::OUT, 'money' => $time_salesman_0_bonus_arr[0], 'is_give' => 0, ]); } if (isset($time_salesman_0_bonus_arr[1]) && $time_salesman_0_bonus_arr[1]) { Bill::query()->create([ 'user_id' => $order->user_id, 'order_id' => $order->id, 'shop_id' => $order->shop_id, 'admin_id' => $order->salesman_admin_id, 'check_status' => StatusEnum::STAGE, 'check_admin_id' => 0, 'check_time' => $now, 'type_id' => BillTypeEnum::BONUS_BUSINESS, 'disburse' => BillDisburseEnum::OUT, 'is_lock' => 1, 'money' => $time_salesman_0_bonus_arr[1], 'is_give' => 0, ]); } } break; } } } break; case OrderDrivingStatusEnum::STUDY_KM_1_FAIL: DB::table('car_orders')->where('id', $order->id)->update([ 'ke_1_nums' => $order->ke_1_nums + 1 ]); break; case OrderDrivingStatusEnum::STUDY_KM_2_FAIL: DB::table('car_orders')->where('id', $order->id)->update([ 'ke_2_nums' => $order->ke_2_nums + 1 ]); break; case OrderDrivingStatusEnum::STUDY_KM_3_FAIL: DB::table('car_orders')->where('id', $order->id)->update([ 'ke_3_nums' => $order->ke_3_nums + 1 ]); break; case OrderDrivingStatusEnum::STUDY_KM_3: //科二提成 $nums = OrderLog::query()->where('order_id', $order->id)->where('driving_status', OrderDrivingStatusEnum::STUDY_KM_2_FAIL)->where('status', ModelStatusEnum::OK)->count(); if ($order->ke_2_nums != $nums) { DB::table('car_orders')->where('id', $order->id)->update([ 'ke_2_nums' => $nums ]); } $moneys = str2arr($settings['coach_car_2_bonus']); $money = 0; if (isset($moneys[$nums])) { $money = $moneys[$nums]; } Bill::query()->create([ 'user_id' => $order->user_id, 'order_id' => $order->id, 'shop_id' => $order->shop_id, 'admin_id' => $order->subject_2_admin_id, // 'check_status' => StatusEnum::SUCCESS, 'check_status' => StatusEnum::WAIT, 'check_admin_id' => 0, // 'check_time' => $now, 'type_id' => BillTypeEnum::BONUS_COACH_2, 'disburse' => BillDisburseEnum::OUT, 'money' => $money, 'is_give' => 0, ]); break; case OrderDrivingStatusEnum::STUDY_KM_4: //科三提成 $nums = OrderLog::query()->where('order_id', $order->id)->where('driving_status', OrderDrivingStatusEnum::STUDY_KM_3_FAIL)->where('status', ModelStatusEnum::OK)->count(); if ($order->ke_3_nums != $nums) { DB::table('car_orders')->where('id', $order->id)->update([ 'ke_3_nums' => $nums ]); } $moneys = str2arr($settings['coach_car_3_bonus']); $money = 0; if (isset($moneys[$nums])) { $money = $moneys[$nums]; } Bill::query()->create([ 'user_id' => $order->user_id, 'order_id' => $order->id, 'shop_id' => $order->shop_id, 'admin_id' => $order->subject_3_admin_id, // 'check_status' => StatusEnum::SUCCESS, 'check_status' => StatusEnum::WAIT, 'check_admin_id' => 0, // 'check_time' => $now, 'type_id' => BillTypeEnum::BONUS_COACH_3, 'disburse' => BillDisburseEnum::OUT, 'money' => $money, 'is_give' => 0, ]); break; } } } }