123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- <?php
- /*
- * This file is part of the Jiannei/lumen-api-starter.
- *
- * (c) Jiannei <longjian.huang@foxmail.com>
- *
- * 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_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)) {
- 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_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_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)) {
- $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_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_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_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_admin_id' => 0,
- 'check_time' => $now,
- 'type_id' => BillTypeEnum::BONUS_COACH_3,
- 'disburse' => BillDisburseEnum::OUT,
- 'money' => $money,
- 'is_give' => 0,
- ]);
- break;
- }
- }
- }
- }
|