OrderObserver.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. <?php
  2. /*
  3. * This file is part of the Jiannei/lumen-api-starter.
  4. *
  5. * (c) Jiannei <longjian.huang@foxmail.com>
  6. *
  7. * This source file is subject to the MIT license that is bundled
  8. * with this source code in the file LICENSE.
  9. */
  10. namespace App\Observers;
  11. use App\Repositories\Enums\Base\PayStatusEnum;
  12. use App\Repositories\Enums\Car\BillDisburseEnum;
  13. use App\Repositories\Enums\Car\BillTypeEnum;
  14. use App\Repositories\Enums\Car\OrderDrivingStatusEnum;
  15. use App\Repositories\Enums\Car\OrderPayTypeEnum;
  16. use App\Repositories\Enums\Check\StatusEnum;
  17. use App\Repositories\Enums\ModelStatusEnum;
  18. use App\Repositories\Enums\RoleEnum;
  19. use App\Repositories\Models\Base\Admin;
  20. use App\Repositories\Models\Base\Setting;
  21. use App\Repositories\Models\Car\Bill;
  22. use App\Repositories\Models\Car\Grade;
  23. use App\Repositories\Models\Car\Order;
  24. use App\Repositories\Models\Car\OrderLog;
  25. use App\Repositories\Models\Car\Shop;
  26. use Carbon\Carbon;
  27. use Illuminate\Support\Facades\DB;
  28. class OrderObserver
  29. {
  30. public function saved(Order $order)
  31. {
  32. $settings = Setting::byCodesGetSettings([
  33. 'shop_manage_bonus',
  34. 'salesman_all_bonus',
  35. 'time_salesman_all_bonus',
  36. 'salesman_0_bonus',
  37. 'time_salesman_0_bonus',
  38. 'coach_car_2_bonus',
  39. 'coach_car_3_bonus',
  40. ]);
  41. //分成
  42. if ($order->isDirty('driving_status')) {
  43. $now = Carbon::now()->toDateTimeString();
  44. switch ((int)$order->driving_status) {
  45. case OrderDrivingStatusEnum::WAIT_HEALTH:
  46. //新学员分成
  47. //2.店长老师
  48. $shop_admin_id = Shop::query()->where('id', $order->shop_id)->value('shop_admin_id');
  49. if ($shop_admin_id) {
  50. if ($order->pay_type == OrderPayTypeEnum::PAY_ALL) {
  51. Bill::query()->create([
  52. 'user_id' => $order->user_id,
  53. 'order_id' => $order->id,
  54. 'shop_id' => $order->shop_id,
  55. 'admin_id' => $shop_admin_id,
  56. 'check_status' => StatusEnum::SUCCESS,
  57. 'check_admin_id' => 0,
  58. 'check_time' => $now,
  59. 'type_id' => BillTypeEnum::BONUS_SHOP,
  60. 'disburse' => BillDisburseEnum::OUT,
  61. 'money' => $settings['shop_manage_bonus'],
  62. 'is_give' => 0,
  63. 'is_lock' => 0,
  64. ]);
  65. } else {
  66. Bill::query()->create([
  67. 'user_id' => $order->user_id,
  68. 'order_id' => $order->id,
  69. 'shop_id' => $order->shop_id,
  70. 'admin_id' => $shop_admin_id,
  71. 'check_status' => StatusEnum::STAGE,
  72. 'check_admin_id' => 0,
  73. 'check_time' => $now,
  74. 'type_id' => BillTypeEnum::BONUS_SHOP,
  75. 'disburse' => BillDisburseEnum::OUT,
  76. 'money' => $settings['shop_manage_bonus'],
  77. 'is_give' => 0,
  78. 'is_lock' => 1,
  79. ]);
  80. }
  81. }
  82. //1.招生老师
  83. if ($order->salesman_admin_id) {
  84. $salesman_admin = Admin::query()->where('id', $order->salesman_admin_id)->first();
  85. if ($salesman_admin) {
  86. switch ($order->pay_type) {
  87. case OrderPayTypeEnum::PAY_ALL:
  88. if ($salesman_admin->hasRole(RoleEnum::BUSINESS)) {
  89. Bill::query()->create([
  90. 'user_id' => $order->user_id,
  91. 'order_id' => $order->id,
  92. 'shop_id' => $order->shop_id,
  93. 'admin_id' => $order->salesman_admin_id,
  94. 'check_status' => StatusEnum::SUCCESS,
  95. 'check_admin_id' => 0,
  96. 'check_time' => $now,
  97. 'type_id' => BillTypeEnum::BONUS_BUSINESS,
  98. 'disburse' => BillDisburseEnum::OUT,
  99. 'money' => $settings['salesman_all_bonus'],
  100. ]);
  101. } else {
  102. Bill::query()->create([
  103. 'user_id' => $order->user_id,
  104. 'order_id' => $order->id,
  105. 'shop_id' => $order->shop_id,
  106. 'admin_id' => $order->salesman_admin_id,
  107. 'check_status' => StatusEnum::SUCCESS,
  108. 'check_admin_id' => 0,
  109. 'check_time' => $now,
  110. 'type_id' => BillTypeEnum::BONUS_BUSINESS,
  111. 'disburse' => BillDisburseEnum::OUT,
  112. 'money' => $settings['time_salesman_all_bonus'],
  113. 'is_give' => 0,
  114. ]);
  115. }
  116. break;
  117. case OrderPayTypeEnum::PAY_AGING:
  118. if ($salesman_admin->hasRole(RoleEnum::BUSINESS)) {
  119. $salesman_0_bonus_arr = str2arr($settings['salesman_0_bonus']);
  120. if (isset($salesman_0_bonus_arr[0]) && $salesman_0_bonus_arr[0]) {
  121. Bill::query()->create([
  122. 'user_id' => $order->user_id,
  123. 'order_id' => $order->id,
  124. 'shop_id' => $order->shop_id,
  125. 'admin_id' => $order->salesman_admin_id,
  126. 'check_status' => StatusEnum::SUCCESS,
  127. 'check_admin_id' => 0,
  128. 'check_time' => $now,
  129. 'type_id' => BillTypeEnum::BONUS_BUSINESS,
  130. 'disburse' => BillDisburseEnum::OUT,
  131. 'money' => $salesman_0_bonus_arr[0],
  132. 'is_give' => 0,
  133. ]);
  134. }
  135. if (isset($salesman_0_bonus_arr[1]) && $salesman_0_bonus_arr[1]) {
  136. Bill::query()->create([
  137. 'user_id' => $order->user_id,
  138. 'order_id' => $order->id,
  139. 'shop_id' => $order->shop_id,
  140. 'admin_id' => $order->salesman_admin_id,
  141. 'check_status' => StatusEnum::STAGE,
  142. 'check_admin_id' => 0,
  143. 'check_time' => $now,
  144. 'type_id' => BillTypeEnum::BONUS_BUSINESS,
  145. 'disburse' => BillDisburseEnum::OUT,
  146. 'is_lock' => 1,
  147. 'money' => $salesman_0_bonus_arr[1],
  148. 'is_give' => 0,
  149. ]);
  150. }
  151. } else {
  152. $time_salesman_0_bonus_arr = str2arr($settings['time_salesman_0_bonus']);
  153. if (isset($time_salesman_0_bonus_arr[0]) && $time_salesman_0_bonus_arr[0]) {
  154. Bill::query()->create([
  155. 'user_id' => $order->user_id,
  156. 'order_id' => $order->id,
  157. 'shop_id' => $order->shop_id,
  158. 'admin_id' => $order->salesman_admin_id,
  159. 'check_status' => StatusEnum::SUCCESS,
  160. 'check_admin_id' => 0,
  161. 'check_time' => $now,
  162. 'type_id' => BillTypeEnum::BONUS_BUSINESS,
  163. 'disburse' => BillDisburseEnum::OUT,
  164. 'money' => $time_salesman_0_bonus_arr[0],
  165. 'is_give' => 0,
  166. ]);
  167. }
  168. if (isset($time_salesman_0_bonus_arr[1]) && $time_salesman_0_bonus_arr[1]) {
  169. Bill::query()->create([
  170. 'user_id' => $order->user_id,
  171. 'order_id' => $order->id,
  172. 'shop_id' => $order->shop_id,
  173. 'admin_id' => $order->salesman_admin_id,
  174. 'check_status' => StatusEnum::STAGE,
  175. 'check_admin_id' => 0,
  176. 'check_time' => $now,
  177. 'type_id' => BillTypeEnum::BONUS_BUSINESS,
  178. 'disburse' => BillDisburseEnum::OUT,
  179. 'is_lock' => 1,
  180. 'money' => $time_salesman_0_bonus_arr[1],
  181. 'is_give' => 0,
  182. ]);
  183. }
  184. }
  185. break;
  186. }
  187. }
  188. }
  189. break;
  190. case OrderDrivingStatusEnum::STUDY_KM_1_FAIL:
  191. DB::table('car_orders')->where('id', $order->id)->update([
  192. 'ke_1_nums' => $order->ke_1_nums + 1
  193. ]);
  194. break;
  195. case OrderDrivingStatusEnum::STUDY_KM_2_FAIL:
  196. DB::table('car_orders')->where('id', $order->id)->update([
  197. 'ke_2_nums' => $order->ke_2_nums + 1
  198. ]);
  199. break;
  200. case OrderDrivingStatusEnum::STUDY_KM_3_FAIL:
  201. DB::table('car_orders')->where('id', $order->id)->update([
  202. 'ke_3_nums' => $order->ke_3_nums + 1
  203. ]);
  204. break;
  205. case OrderDrivingStatusEnum::STUDY_KM_3:
  206. //科二提成
  207. $nums = OrderLog::query()->where('order_id', $order->id)->where('driving_status', OrderDrivingStatusEnum::STUDY_KM_2_FAIL)->where('status', ModelStatusEnum::OK)->count();
  208. if ($order->ke_2_nums != $nums) {
  209. DB::table('car_orders')->where('id', $order->id)->update([
  210. 'ke_2_nums' => $nums
  211. ]);
  212. }
  213. $moneys = str2arr($settings['coach_car_2_bonus']);
  214. $money = 0;
  215. if (isset($moneys[$nums])) {
  216. $money = $moneys[$nums];
  217. }
  218. Bill::query()->create([
  219. 'user_id' => $order->user_id,
  220. 'order_id' => $order->id,
  221. 'shop_id' => $order->shop_id,
  222. 'admin_id' => $order->subject_2_admin_id,
  223. 'check_status' => StatusEnum::SUCCESS,
  224. 'check_admin_id' => 0,
  225. 'check_time' => $now,
  226. 'type_id' => BillTypeEnum::BONUS_COACH_2,
  227. 'disburse' => BillDisburseEnum::OUT,
  228. 'money' => $money,
  229. 'is_give' => 0,
  230. ]);
  231. break;
  232. case OrderDrivingStatusEnum::STUDY_KM_4:
  233. //科三提成
  234. $nums = OrderLog::query()->where('order_id', $order->id)->where('driving_status', OrderDrivingStatusEnum::STUDY_KM_3_FAIL)->where('status', ModelStatusEnum::OK)->count();
  235. if ($order->ke_3_nums != $nums) {
  236. DB::table('car_orders')->where('id', $order->id)->update([
  237. 'ke_3_nums' => $nums
  238. ]);
  239. }
  240. $moneys = str2arr($settings['coach_car_3_bonus']);
  241. $money = 0;
  242. if (isset($moneys[$nums])) {
  243. $money = $moneys[$nums];
  244. }
  245. Bill::query()->create([
  246. 'user_id' => $order->user_id,
  247. 'order_id' => $order->id,
  248. 'shop_id' => $order->shop_id,
  249. 'admin_id' => $order->subject_3_admin_id,
  250. 'check_status' => StatusEnum::SUCCESS,
  251. 'check_admin_id' => 0,
  252. 'check_time' => $now,
  253. 'type_id' => BillTypeEnum::BONUS_COACH_3,
  254. 'disburse' => BillDisburseEnum::OUT,
  255. 'money' => $money,
  256. 'is_give' => 0,
  257. ]);
  258. break;
  259. }
  260. }
  261. }
  262. }