AggregateStatisticsController.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823
  1. <?php
  2. namespace App\Http\Controllers\App;
  3. use App\Filters\BikeFilter;
  4. use App\Filters\DepositFilter;
  5. use App\Filters\OrderFilter;
  6. use App\Filters\OrderRentFilter;
  7. use App\Filters\UserFilter;
  8. use App\Filters\WalletLogFilter;
  9. use App\Filters\WorkOrderFilter;
  10. use App\Models\AdminUser;
  11. use App\Models\Bike;
  12. use App\Models\DepositOrder;
  13. use App\Models\Order;
  14. use App\Models\OrderRent;
  15. use App\Models\User;
  16. use App\Models\WorkOrder;
  17. use App\Utils\Admin;
  18. use Carbon\Carbon;
  19. use Illuminate\Http\Request;
  20. use App\Http\Controllers\Controller;
  21. use Illuminate\Support\Facades\DB;
  22. class AggregateStatisticsController extends AppBaseController
  23. {
  24. //
  25. /**
  26. * userStatistics 用户统计
  27. *
  28. * @param UserFilter $filter
  29. * @param OrderFilter $orderFilter
  30. * @return array
  31. * @author Fx
  32. *
  33. */
  34. public function userStatistics(UserFilter $filter,OrderFilter $orderFilter){
  35. $area_ids = self::$areaIds;
  36. // 总用户
  37. $totalUser = User::query()
  38. ->whereIn('register_area_id',$area_ids)
  39. ->filter($filter)
  40. ->count('id');
  41. // 押金用户
  42. $depositUser = User::query()
  43. ->whereIn('register_area_id',$area_ids)
  44. ->where('is_deposit',User::DEPOSIT_OK)
  45. ->filter($filter)
  46. ->count('id');
  47. //有效用户
  48. $cardUser = User::query()
  49. ->whereIn('register_area_id',$area_ids)
  50. ->where('is_card_certified',User::CARD_OK)
  51. ->filter($filter)
  52. ->count('id');
  53. //今日新增
  54. $todayAddUser = User::query()
  55. ->whereIn('register_area_id',$area_ids)
  56. ->where('is_card_certified',User::CARD_OK)
  57. ->where('created_at','>',Carbon::today())
  58. ->filter($filter)
  59. ->count('id');
  60. // 今日活跃
  61. $todayActiveOrder = Order::query()
  62. ->whereIn('area_id',$area_ids)
  63. ->where('created_at','>',Carbon::today())
  64. ->filter($orderFilter)
  65. ->get(['user_id'])
  66. ->toArray();
  67. $todayActiveUserArr = [];
  68. foreach ($todayActiveOrder as $v){
  69. $todayActiveUserArr[] = $v['user_id'];
  70. }
  71. $todayActiveUser = count(array_unique($todayActiveUserArr)); //去重复后计算总数
  72. $data1 = [
  73. 'totalUser' => $totalUser ?? 0,
  74. 'depositUser' => $depositUser ?? 0,
  75. 'cardUser' => $cardUser ?? 0,
  76. 'todayAddUser' => $todayAddUser ?? 0,
  77. 'todayActiveUser' => $todayActiveUser ?? 0
  78. ];
  79. return $data1;
  80. }
  81. /**
  82. * bikeStatistics 车辆统计
  83. *
  84. * @param BikeFilter $filter
  85. * @return array
  86. * @author Fx
  87. *
  88. */
  89. public function bikeStatistics(BikeFilter $filter)
  90. {
  91. $data = [];
  92. $area_ids = self::$areaIds;
  93. // 总车辆数
  94. $data['total_bikes'] = Bike::query()
  95. ->whereIn('put_area_id', $area_ids)
  96. ->filter($filter)
  97. ->count('id');
  98. // 上线车辆数
  99. $data['put_total_bikes'] = Bike::query()
  100. ->whereIn('put_area_id', $area_ids)
  101. ->filter($filter)
  102. ->where('put_status', Bike::PUT_STATUS_YES)
  103. ->count('id');
  104. // 在线车辆数
  105. $data['line_total_bikes'] = Bike::query()
  106. ->whereIn('put_area_id', $area_ids)
  107. ->filter($filter)
  108. ->where('is_link', Bike::LINK_ONLINE)
  109. ->count('id');
  110. //故障车辆
  111. $data['trouble_total_bikes'] = Bike::query()
  112. ->whereIn('put_area_id', $area_ids)
  113. ->filter($filter)
  114. ->where('is_trouble', Bike::TROUBLE_YES)
  115. ->count('id');
  116. //今日使用
  117. $data['today_use_total_bikes'] = Bike::query()
  118. ->whereIn('put_area_id', $area_ids)
  119. ->filter($filter)
  120. ->where('last_use_bike_end_time', '>', Carbon::today())
  121. ->count('id');
  122. //低电量
  123. $data['low_battery_total_bikes'] = Bike::query()
  124. ->whereIn('put_area_id', $area_ids)
  125. ->filter($filter)
  126. ->where('is_low_battery_power', Bike::BATTERY_POWER_LOW)
  127. ->count('id');
  128. //骑行中
  129. $data['riding_total_bikes'] = Bike::query()
  130. ->whereIn('put_area_id', $area_ids)
  131. ->filter($filter)
  132. ->where('is_riding', Bike::RIDING_YES)
  133. ->count('id');
  134. //未使用
  135. $data['not_riding_total_bikes'] = Bike::query()
  136. ->whereIn('put_area_id', $area_ids)
  137. ->filter($filter)
  138. ->where('is_riding', Bike::RIDING_NO)
  139. ->count('id');
  140. return $data;
  141. }
  142. /**
  143. * orderStatistics 订单统计
  144. *
  145. * @param OrderFilter $filter
  146. * @return array
  147. * @author Fx
  148. *
  149. */
  150. public function orderStatistics(OrderFilter $filter)
  151. {
  152. $area_ids = self::$areaIds;
  153. // 总订单数
  154. $order_total = Order::query()
  155. ->whereIn('area_id', $area_ids)
  156. ->filter($filter)
  157. ->where('status', Order::STATUS_COMPLETE_ORDER)
  158. ->count('id');
  159. $order_rent_total = OrderRent::query()
  160. ->whereIn('area_id', $area_ids)
  161. ->filter($filter)
  162. ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
  163. ->count('id');
  164. $order_total += $order_rent_total;
  165. // 今日新增订单数
  166. $today_add_order = Order::query()
  167. ->whereIn('area_id', $area_ids)
  168. ->filter($filter)
  169. ->where('created_at', '>', Carbon::today())
  170. ->where('status', Order::STATUS_COMPLETE_ORDER)
  171. ->count('id');
  172. $today_add_order_rent = OrderRent::query()
  173. ->whereIn('area_id', $area_ids)
  174. ->filter($filter)
  175. ->where('pay_time', '>', Carbon::today())
  176. ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
  177. ->count('id');
  178. $today_add_order += $today_add_order_rent;
  179. // 骑行中订单数
  180. $riding_status = [
  181. Order::STATUS_RIDE_BIKE,
  182. // Order::STATUS_CLOSE_BIKE, // 待支付
  183. Order::STATUS_PAUSE_BIKE,
  184. ];
  185. $riding_order = Order::query()
  186. ->whereIn('area_id', $area_ids)
  187. ->filter($filter)
  188. ->whereIn('status', $riding_status)
  189. ->count('id');
  190. $riding_order_rent = OrderRent::query()
  191. ->whereIn('area_id', $area_ids)
  192. ->filter($filter)
  193. ->where('status', OrderRent::STATUS_RENT_BIKE)
  194. ->count('id');
  195. $riding_order += $riding_order_rent;
  196. // 待支付
  197. $waiting_pay_order = Order::query()
  198. ->whereIn('area_id', $area_ids)
  199. ->filter($filter)
  200. ->where('status', Order::STATUS_CLOSE_BIKE)
  201. ->count('id');
  202. $waiting_pay_rent = OrderRent::query()
  203. ->whereIn('area_id', $area_ids)
  204. ->filter($filter)
  205. ->where('status', OrderRent::STATUS_CLOSE_RENT_BIKE)
  206. ->count('id');
  207. $waiting_pay_order += $waiting_pay_rent;
  208. // 今日新增收入
  209. $today_add_money = Order::query()
  210. ->whereIn('area_id', $area_ids)
  211. ->filter($filter)
  212. ->where('pay_time', '>', Carbon::today())
  213. ->where('status', Order::STATUS_COMPLETE_ORDER)
  214. ->sum('pay_money');
  215. $today_add_money_rent = OrderRent::query()
  216. ->whereIn('area_id', $area_ids)
  217. ->filter($filter)
  218. ->where('pay_time', '>', Carbon::today())
  219. ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
  220. ->sum('pay_money');
  221. $today_add_money += $today_add_money_rent;
  222. $order = [
  223. 'order_total' => $order_total ?? 0,
  224. 'today_add_order' => $today_add_order ?? 0,
  225. 'riding_order' => $riding_order ?? 0,
  226. 'today_add_money' => $today_add_money ?? 0,
  227. 'waiting_pay' => $waiting_pay_order ?? 0,
  228. ];
  229. return $order;
  230. }
  231. /**
  232. * workOrderStatistics 工单统计
  233. *
  234. * @param WorkOrderFilter $filter
  235. * @return array
  236. * @author Fx
  237. *
  238. */
  239. public function workOrderStatistics(WorkOrderFilter $filter)
  240. {
  241. $area_ids = self::$areaIds;
  242. $type_num = WorkOrder::query()
  243. ->whereIn('area_id', $area_ids)
  244. ->where('status', WorkOrder::STATUS_NO)
  245. ->filter($filter)
  246. ->groupBy(['type'])
  247. ->select('type', DB::raw('COUNT(id) as type_num'))
  248. ->get()
  249. ->toArray();
  250. $data = [
  251. 'charge_num' => 0,
  252. 'watch_num' => 0,
  253. 'power_failure_num' => 0,
  254. 'alert_num' => 0,
  255. 'steal_num' => 0,
  256. 'headman_num' => 0,
  257. 'trouble_num' => 0,
  258. 'help_num' => 0,
  259. 'other_num' => 0,
  260. 'offline_num' => 0,
  261. 'planned_meet_num' => 0, // 未认领
  262. 'planned_work_num' => 0, // 处理中
  263. 'planned_worked_num' => 0, // 已处理
  264. 'planned_over_num' => 0,// 完结
  265. ];
  266. foreach ($type_num as $v) {
  267. switch ($v['type']) {
  268. case WorkOrder::TYPE_CHARGE:
  269. $data['charge_num'] = $v['type_num'];
  270. break;
  271. case WorkOrder::TYPE_WATCH:
  272. $data['watch_num'] = $v['type_num'];
  273. break;
  274. case WorkOrder::TYPE_POWER_FAILURE:
  275. $data['power_failure_num'] = $v['type_num'];
  276. break;
  277. case WorkOrder::TYPE_ALERT:
  278. $data['alert_num'] = $v['type_num'];
  279. break;
  280. case WorkOrder::TYPE_STEAL:
  281. $data['steal_num'] = $v['type_num'];
  282. break;
  283. case WorkOrder::TYPE_HEADMAN:
  284. $data['headman_num'] = $v['type_num'];
  285. break;
  286. case WorkOrder::TYPE_TROUBLE:
  287. $data['trouble_num'] = $v['type_num'];
  288. break;
  289. case WorkOrder::TYPE_HELP:
  290. $data['help_num'] = $v['type_num'];
  291. break;
  292. case WorkOrder::TYPE_OFFLINE:
  293. $data['offline_num'] = $v['type_num'];
  294. break;
  295. case WorkOrder::TYPE_OTHER:
  296. $data['other_num'] = $v['type_num'];
  297. break;
  298. default;
  299. }
  300. }
  301. $planned_num = WorkOrder::query()
  302. ->filter($filter)
  303. ->groupBy('planned')
  304. ->select('planned', DB::raw('COUNT(id) as planned_num'))
  305. ->get()
  306. ->toArray();
  307. foreach ($planned_num as $v) {
  308. switch ($v['planned']) {
  309. case WorkOrder::PLANNED_STATUS_MEET:
  310. $data['planned_meet_num'] = $v['planned_num'];
  311. break;
  312. case WorkOrder::PLANNED_STATUS_WORK:
  313. $data['planned_work_num'] = $v['planned_num'];
  314. break;
  315. case WorkOrder::PLANNED_STATUS_WORKED:
  316. $data['planned_worked_num'] = $v['planned_num'];
  317. break;
  318. case WorkOrder::PLANNED_STATUS_OVER:
  319. $data['planned_over_num'] = $v['planned_num'];
  320. break;
  321. default;
  322. }
  323. }
  324. return $data;
  325. }
  326. /**
  327. * orderProfitStatistics 订单收益统计
  328. *
  329. * @param WalletLogFilter $walletLogFilter
  330. * @param DepositFilter $depositFilter
  331. * @param OrderFilter $orderFilter
  332. * @param OrderRentFilter $orderRentFilter
  333. * @return array
  334. * @author Fx
  335. *
  336. */
  337. public function orderProfitStatistics(WalletLogFilter $walletLogFilter, DepositFilter $depositFilter, OrderFilter $orderFilter, OrderRentFilter $orderRentFilter)
  338. {
  339. $area_ids = self::$areaIds;
  340. $admin_type = Admin::user()->type;
  341. if ($admin_type == AdminUser::TYPE_WORKER) {
  342. $data = [
  343. 'totalProfit' => $totalProfit ?? 0,
  344. 'depositTotal' => $depositTotal ?? 0,
  345. 'todayProfit' => $todayProfit ?? 0,
  346. 'depositToday' => $depositToday ?? 0,
  347. 'monthProfit' => $monthProfit ?? 0,
  348. ];
  349. return $this->ok($data);
  350. }
  351. // 总收益
  352. // $totalProfit = WalletLog::query()
  353. // ->whereIn('area_id', $area_ids)
  354. // ->filter($walletLogFilter)
  355. // ->whereIn('type', WalletLog::$subType)
  356. // ->sum('money');
  357. $totalOrderProfit = Order::query()
  358. ->whereIn('area_id', $area_ids)
  359. ->filter($orderFilter)
  360. ->where('status', Order::STATUS_COMPLETE_ORDER)
  361. ->sum('pay_money');
  362. $totalOrderRentProfit = OrderRent::query()
  363. ->whereIn('area_id', $area_ids)
  364. ->filter($orderFilter)
  365. ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
  366. ->sum('pay_money');
  367. $totalProfit = bcadd($totalOrderProfit, $totalOrderRentProfit, 0);
  368. // 总押金
  369. $depositTotal = DepositOrder::query()
  370. ->where('pay_status', DepositOrder::PAY_STATUS_OK)
  371. ->where('is_refund', DepositOrder::REFUND_NO)
  372. ->whereIn('area_id', $area_ids)
  373. ->filter($depositFilter)
  374. ->sum('pay_money');
  375. // 今日收益
  376. // $todayProfit = WalletLog::query()
  377. // ->whereIn('area_id', $area_ids)
  378. // ->filter($walletLogFilter)
  379. // ->whereIn('type', WalletLog::$subType)
  380. // ->where('created_at', '>', Carbon::today())
  381. // ->sum('money');
  382. $todayOrderProfit = Order::query()
  383. ->whereIn('area_id', $area_ids)
  384. ->filter($orderFilter)
  385. ->where('status', Order::STATUS_COMPLETE_ORDER)
  386. ->where('created_at', '>', Carbon::today())
  387. ->sum('pay_money');
  388. $todayOrderRentProfit = OrderRent::query()
  389. ->whereIn('area_id', $area_ids)
  390. ->filter($orderFilter)
  391. ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
  392. ->where('created_at', '>', Carbon::today())
  393. ->sum('pay_money');
  394. $todayProfit = bcadd($todayOrderProfit, $todayOrderRentProfit, 0);
  395. // 今日新增押金
  396. $depositToday = DepositOrder::query()
  397. ->where('pay_status', DepositOrder::PAY_STATUS_OK)
  398. ->where('is_refund', DepositOrder::REFUND_NO)
  399. ->whereIn('area_id', $area_ids)
  400. ->filter($depositFilter)
  401. ->where('created_at', '>', Carbon::today())
  402. ->sum('pay_money');
  403. // 本月收益
  404. // $monthProfit = WalletLog::query()
  405. // ->whereIn('area_id', $area_ids)
  406. // ->filter($walletLogFilter)
  407. // ->whereIn('type', WalletLog::$subType)
  408. // ->where('created_at', '>', Carbon::today()->format('Y-m-01 00:00:00'))
  409. // ->sum('money');
  410. $monthOrderProfit = Order::query()
  411. ->whereIn('area_id', $area_ids)
  412. ->filter($orderFilter)
  413. ->where('status', Order::STATUS_COMPLETE_ORDER)
  414. ->where('created_at', '>', Carbon::today()->format('Y-m-01 00:00:00'))
  415. ->sum('pay_money');
  416. $monthOrderRentProfit = OrderRent::query()
  417. ->whereIn('area_id', $area_ids)
  418. ->filter($orderFilter)
  419. ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
  420. ->where('created_at', '>', Carbon::today()->format('Y-m-01 00:00:00'))
  421. ->sum('pay_money');
  422. $monthProfit = bcadd($monthOrderProfit, $monthOrderRentProfit, 0);
  423. $data = [
  424. 'totalProfit' => floor(abs($totalProfit)) ?? 0,
  425. 'depositTotal' => floor($depositTotal) ?? 0,
  426. 'todayProfit' => floor($todayProfit) ?? 0,
  427. 'depositToday' => floor($depositToday) ?? 0,
  428. 'monthProfit' => floor($monthProfit) ?? 0,
  429. ];
  430. return $data;
  431. }
  432. public function statistics(UserFilter $filter,OrderFilter $orderFilter,BikeFilter $bikeFilter,WorkOrderFilter $workOrderFilter,WalletLogFilter $walletLogFilter, DepositFilter $depositFilter,OrderRentFilter $orderRentFilter){
  433. $area_ids = self::$areaIds;
  434. // 总用户
  435. $totalUser = User::query()
  436. ->whereIn('register_area_id',$area_ids)
  437. ->filter($filter)
  438. ->count('id');
  439. // 押金用户
  440. $depositUser = User::query()
  441. ->whereIn('register_area_id',$area_ids)
  442. ->where('is_deposit',User::DEPOSIT_OK)
  443. ->filter($filter)
  444. ->count('id');
  445. //有效用户
  446. $cardUser = User::query()
  447. ->whereIn('register_area_id',$area_ids)
  448. ->where('is_card_certified',User::CARD_OK)
  449. ->filter($filter)
  450. ->count('id');
  451. //今日新增
  452. $todayAddUser = User::query()
  453. ->whereIn('register_area_id',$area_ids)
  454. ->where('is_card_certified',User::CARD_OK)
  455. ->where('created_at','>',Carbon::today())
  456. ->filter($filter)
  457. ->count('id');
  458. // 今日活跃
  459. $todayActiveOrder = Order::query()
  460. ->whereIn('area_id',$area_ids)
  461. ->where('created_at','>',Carbon::today())
  462. ->filter($orderFilter)
  463. ->get(['user_id'])
  464. ->toArray();
  465. $todayActiveUserArr = [];
  466. foreach ($todayActiveOrder as $v){
  467. $todayActiveUserArr[] = $v['user_id'];
  468. }
  469. $todayActiveUser = count(array_unique($todayActiveUserArr)); //去重复后计算总数
  470. $data1 = [
  471. 'totalUser' => $totalUser ?? 0,
  472. 'depositUser' => $depositUser ?? 0,
  473. 'cardUser' => $cardUser ?? 0,
  474. 'todayAddUser' => $todayAddUser ?? 0,
  475. 'todayActiveUser' => $todayActiveUser ?? 0
  476. ];
  477. $data2['total_bikes'] = Bike::query()
  478. ->whereIn('put_area_id', $area_ids)
  479. ->filter($bikeFilter)
  480. ->count('id');
  481. // 上线车辆数
  482. $data2['put_total_bikes'] = Bike::query()
  483. ->whereIn('put_area_id', $area_ids)
  484. ->filter($bikeFilter)
  485. ->where('put_status', Bike::PUT_STATUS_YES)
  486. ->count('id');
  487. // 在线车辆数
  488. $data2['line_total_bikes'] = Bike::query()
  489. ->whereIn('put_area_id', $area_ids)
  490. ->filter($bikeFilter)
  491. ->where('is_link', Bike::LINK_ONLINE)
  492. ->count('id');
  493. //故障车辆
  494. $data2['trouble_total_bikes'] = Bike::query()
  495. ->whereIn('put_area_id', $area_ids)
  496. ->filter($bikeFilter)
  497. ->where('is_trouble', Bike::TROUBLE_YES)
  498. ->count('id');
  499. //今日使用
  500. $data2['today_use_total_bikes'] = Bike::query()
  501. ->whereIn('put_area_id', $area_ids)
  502. ->filter($bikeFilter)
  503. ->where('last_use_bike_end_time', '>', Carbon::today())
  504. ->count('id');
  505. //低电量
  506. $data2['low_battery_total_bikes'] = Bike::query()
  507. ->whereIn('put_area_id', $area_ids)
  508. ->filter($bikeFilter)
  509. ->where('is_low_battery_power', Bike::BATTERY_POWER_LOW)
  510. ->count('id');
  511. //骑行中
  512. $data2['riding_total_bikes'] = Bike::query()
  513. ->whereIn('put_area_id', $area_ids)
  514. ->filter($bikeFilter)
  515. ->where('is_riding', Bike::RIDING_YES)
  516. ->count('id');
  517. //未使用
  518. $data2['not_riding_total_bikes'] = Bike::query()
  519. ->whereIn('put_area_id', $area_ids)
  520. ->filter($bikeFilter)
  521. ->where('is_riding', Bike::RIDING_NO)
  522. ->count('id');
  523. // 总订单数
  524. $order_total = Order::query()
  525. ->whereIn('area_id', $area_ids)
  526. ->filter($orderFilter)
  527. ->where('status', Order::STATUS_COMPLETE_ORDER)
  528. ->count('id');
  529. $order_rent_total = OrderRent::query()
  530. ->whereIn('area_id', $area_ids)
  531. ->filter($orderFilter)
  532. ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
  533. ->count('id');
  534. $order_total += $order_rent_total;
  535. // 今日新增订单数
  536. $today_add_order = Order::query()
  537. ->whereIn('area_id', $area_ids)
  538. ->filter($orderFilter)
  539. ->where('created_at', '>', Carbon::today())
  540. ->where('status', Order::STATUS_COMPLETE_ORDER)
  541. ->count('id');
  542. $today_add_order_rent = OrderRent::query()
  543. ->whereIn('area_id', $area_ids)
  544. ->filter($orderRentFilter)
  545. ->where('pay_time', '>', Carbon::today())
  546. ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
  547. ->count('id');
  548. $today_add_order += $today_add_order_rent;
  549. // 骑行中订单数
  550. $riding_status = [
  551. Order::STATUS_RIDE_BIKE,
  552. // Order::STATUS_CLOSE_BIKE, // 待支付
  553. Order::STATUS_PAUSE_BIKE,
  554. ];
  555. $riding_order = Order::query()
  556. ->whereIn('area_id', $area_ids)
  557. ->filter($orderFilter)
  558. ->whereIn('status', $riding_status)
  559. ->count('id');
  560. $riding_order_rent = OrderRent::query()
  561. ->whereIn('area_id', $area_ids)
  562. ->filter($orderRentFilter)
  563. ->where('status', OrderRent::STATUS_RENT_BIKE)
  564. ->count('id');
  565. $riding_order += $riding_order_rent;
  566. // 待支付
  567. $waiting_pay_order = Order::query()
  568. ->whereIn('area_id', $area_ids)
  569. ->filter($orderFilter)
  570. ->where('status', Order::STATUS_CLOSE_BIKE)
  571. ->count('id');
  572. $waiting_pay_rent = OrderRent::query()
  573. ->whereIn('area_id', $area_ids)
  574. ->filter($orderRentFilter)
  575. ->where('status', OrderRent::STATUS_CLOSE_RENT_BIKE)
  576. ->count('id');
  577. $waiting_pay_order += $waiting_pay_rent;
  578. // 今日新增收入
  579. $today_add_money = Order::query()
  580. ->whereIn('area_id', $area_ids)
  581. ->filter($orderFilter)
  582. ->where('pay_time', '>', Carbon::today())
  583. ->where('status', Order::STATUS_COMPLETE_ORDER)
  584. ->sum('pay_money');
  585. $today_add_money_rent = OrderRent::query()
  586. ->whereIn('area_id', $area_ids)
  587. ->filter($orderRentFilter)
  588. ->where('pay_time', '>', Carbon::today())
  589. ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
  590. ->sum('pay_money');
  591. $today_add_money += $today_add_money_rent;
  592. $order = [
  593. 'order_total' => $order_total ?? 0,
  594. 'today_add_order' => $today_add_order ?? 0,
  595. 'riding_order' => $riding_order ?? 0,
  596. 'today_add_money' => $today_add_money ?? 0,
  597. 'waiting_pay' => $waiting_pay_order ?? 0,
  598. ];
  599. $type_num = WorkOrder::query()
  600. ->whereIn('area_id', $area_ids)
  601. ->where('status', WorkOrder::STATUS_NO)
  602. ->filter($workOrderFilter)
  603. ->groupBy(['type'])
  604. ->select('type', DB::raw('COUNT(id) as type_num'))
  605. ->get()
  606. ->toArray();
  607. $data = [
  608. 'charge_num' => 0,
  609. 'watch_num' => 0,
  610. 'power_failure_num' => 0,
  611. 'alert_num' => 0,
  612. 'steal_num' => 0,
  613. 'headman_num' => 0,
  614. 'trouble_num' => 0,
  615. 'help_num' => 0,
  616. 'other_num' => 0,
  617. 'offline_num' => 0,
  618. 'planned_meet_num' => 0, // 未认领
  619. 'planned_work_num' => 0, // 处理中
  620. 'planned_worked_num' => 0, // 已处理
  621. 'planned_over_num' => 0,// 完结
  622. ];
  623. foreach ($type_num as $v) {
  624. switch ($v['type']) {
  625. case WorkOrder::TYPE_CHARGE:
  626. $data['charge_num'] = $v['type_num'];
  627. break;
  628. case WorkOrder::TYPE_WATCH:
  629. $data['watch_num'] = $v['type_num'];
  630. break;
  631. case WorkOrder::TYPE_POWER_FAILURE:
  632. $data['power_failure_num'] = $v['type_num'];
  633. break;
  634. case WorkOrder::TYPE_ALERT:
  635. $data['alert_num'] = $v['type_num'];
  636. break;
  637. case WorkOrder::TYPE_STEAL:
  638. $data['steal_num'] = $v['type_num'];
  639. break;
  640. case WorkOrder::TYPE_HEADMAN:
  641. $data['headman_num'] = $v['type_num'];
  642. break;
  643. case WorkOrder::TYPE_TROUBLE:
  644. $data['trouble_num'] = $v['type_num'];
  645. break;
  646. case WorkOrder::TYPE_HELP:
  647. $data['help_num'] = $v['type_num'];
  648. break;
  649. case WorkOrder::TYPE_OFFLINE:
  650. $data['offline_num'] = $v['type_num'];
  651. break;
  652. case WorkOrder::TYPE_OTHER:
  653. $data['other_num'] = $v['type_num'];
  654. break;
  655. default;
  656. }
  657. }
  658. $planned_num = WorkOrder::query()
  659. ->filter($workOrderFilter)
  660. ->groupBy('planned')
  661. ->select('planned', DB::raw('COUNT(id) as planned_num'))
  662. ->get()
  663. ->toArray();
  664. foreach ($planned_num as $v) {
  665. switch ($v['planned']) {
  666. case WorkOrder::PLANNED_STATUS_MEET:
  667. $data['planned_meet_num'] = $v['planned_num'];
  668. break;
  669. case WorkOrder::PLANNED_STATUS_WORK:
  670. $data['planned_work_num'] = $v['planned_num'];
  671. break;
  672. case WorkOrder::PLANNED_STATUS_WORKED:
  673. $data['planned_worked_num'] = $v['planned_num'];
  674. break;
  675. case WorkOrder::PLANNED_STATUS_OVER:
  676. $data['planned_over_num'] = $v['planned_num'];
  677. break;
  678. default;
  679. }
  680. }
  681. $admin_type = Admin::user()->type;
  682. // if ($admin_type == AdminUser::TYPE_WORKER) {
  683. //
  684. // $data = [
  685. // 'totalProfit' => $totalProfit ?? 0,
  686. // 'depositTotal' => $depositTotal ?? 0,
  687. // 'todayProfit' => $todayProfit ?? 0,
  688. // 'depositToday' => $depositToday ?? 0,
  689. // 'monthProfit' => $monthProfit ?? 0,
  690. // ];
  691. // return $this->ok($data);
  692. //
  693. // }
  694. // 总收益
  695. // $totalProfit = WalletLog::query()
  696. // ->whereIn('area_id', $area_ids)
  697. // ->filter($walletLogFilter)
  698. // ->whereIn('type', WalletLog::$subType)
  699. // ->sum('money');
  700. $totalOrderProfit = Order::query()
  701. ->whereIn('area_id', $area_ids)
  702. ->filter($orderFilter)
  703. ->where('status', Order::STATUS_COMPLETE_ORDER)
  704. ->sum('pay_money');
  705. $totalOrderRentProfit = OrderRent::query()
  706. ->whereIn('area_id', $area_ids)
  707. ->filter($orderRentFilter)
  708. ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
  709. ->sum('pay_money');
  710. $totalProfit = bcadd($totalOrderProfit, $totalOrderRentProfit, 0);
  711. // 总押金
  712. $depositTotal = DepositOrder::query()
  713. ->where('pay_status', DepositOrder::PAY_STATUS_OK)
  714. ->where('is_refund', DepositOrder::REFUND_NO)
  715. ->whereIn('area_id', $area_ids)
  716. ->filter($depositFilter)
  717. ->sum('pay_money');
  718. // 今日收益
  719. // $todayProfit = WalletLog::query()
  720. // ->whereIn('area_id', $area_ids)
  721. // ->filter($walletLogFilter)
  722. // ->whereIn('type', WalletLog::$subType)
  723. // ->where('created_at', '>', Carbon::today())
  724. // ->sum('money');
  725. $todayOrderProfit = Order::query()
  726. ->whereIn('area_id', $area_ids)
  727. ->filter($orderFilter)
  728. ->where('status', Order::STATUS_COMPLETE_ORDER)
  729. ->where('created_at', '>', Carbon::today())
  730. ->sum('pay_money');
  731. $todayOrderRentProfit = OrderRent::query()
  732. ->whereIn('area_id', $area_ids)
  733. ->filter($orderRentFilter)
  734. ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
  735. ->where('created_at', '>', Carbon::today())
  736. ->sum('pay_money');
  737. $todayProfit = bcadd($todayOrderProfit, $todayOrderRentProfit, 0);
  738. // 今日新增押金
  739. $depositToday = DepositOrder::query()
  740. ->where('pay_status', DepositOrder::PAY_STATUS_OK)
  741. ->where('is_refund', DepositOrder::REFUND_NO)
  742. ->whereIn('area_id', $area_ids)
  743. ->filter($depositFilter)
  744. ->where('created_at', '>', Carbon::today())
  745. ->sum('pay_money');
  746. // 本月收益
  747. // $monthProfit = WalletLog::query()
  748. // ->whereIn('area_id', $area_ids)
  749. // ->filter($walletLogFilter)
  750. // ->whereIn('type', WalletLog::$subType)
  751. // ->where('created_at', '>', Carbon::today()->format('Y-m-01 00:00:00'))
  752. // ->sum('money');
  753. $monthOrderProfit = Order::query()
  754. ->whereIn('area_id', $area_ids)
  755. ->filter($orderFilter)
  756. ->where('status', Order::STATUS_COMPLETE_ORDER)
  757. ->where('created_at', '>', Carbon::today()->format('Y-m-01 00:00:00'))
  758. ->sum('pay_money');
  759. $monthOrderRentProfit = OrderRent::query()
  760. ->whereIn('area_id', $area_ids)
  761. ->filter($orderRentFilter)
  762. ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
  763. ->where('created_at', '>', Carbon::today()->format('Y-m-01 00:00:00'))
  764. ->sum('pay_money');
  765. $monthProfit = bcadd($monthOrderProfit, $monthOrderRentProfit, 0);
  766. $data3 = [
  767. 'totalProfit' => floor(abs($totalProfit)) ?? 0,
  768. 'depositTotal' => floor($depositTotal) ?? 0,
  769. 'todayProfit' => floor($todayProfit) ?? 0,
  770. 'depositToday' => floor($depositToday) ?? 0,
  771. 'monthProfit' => floor($monthProfit) ?? 0,
  772. ];
  773. $res = [
  774. 'userData' => $data1,
  775. 'bikeData' => $data2,
  776. 'orderData' => $order,
  777. 'workOrderData' => $data,
  778. 'profitData' => $data3,
  779. ];
  780. return $this->ok($res);
  781. }
  782. }