StatisticsController.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php
  2. namespace app\admin\controller\order;
  3. use app\model\PayDetail;
  4. use support\Db;
  5. use support\Request;
  6. class StatisticsController
  7. {
  8. public function order(Request $request)
  9. {
  10. $orderCategory = $request->get('order_category');
  11. $searchTime = $request->get('order_addtimes');
  12. if (!empty($searchTime)){
  13. $searchTime[0] = strtotime($searchTime[0]);
  14. $searchTime[1] = strtotime($searchTime[1]);
  15. }
  16. if (!$orderCategory) {
  17. return json_fail('参数异常');
  18. }
  19. if ($orderCategory == 'SERVICE') {
  20. $orderCategory = ['SERVICE', 'CHNMED', 'CHNNCD'];
  21. } else {
  22. $orderCategory = [$orderCategory];
  23. }
  24. $orderCategoryStr = "'" . implode("','", $orderCategory) . "'";
  25. $todayTimeUnix = strtotime(date('Y-m-d'));
  26. $yesterdayStart = strtotime(date('Y-m-d', strtotime("-1 days")));
  27. $yesterdayEnd = strtotime(date('Y-m-d 23:59:59', strtotime("-1 days")));
  28. $monthStart = strtotime(date('Y-m-01'));
  29. $monthEnd = strtotime(date('Y-m-t 23:59:59'));
  30. // 今日收入
  31. $statistics['todayRevenue'] = PayDetail::whereRaw('CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) >= ? ', [$todayTimeUnix])
  32. ->where('pay_status', 'SUCCESS')
  33. ->whereIn('pay_category', $orderCategory)
  34. ->sum('pay_amount');
  35. $todayRevenueOrderNbrModel = Db::select("select count(1) as total from (select join_pay_order_id,JSON_EXTRACT(join_pay_object_json,'$.order_id') as order_id from app_pay_detail where
  36. CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) >= {$todayTimeUnix}
  37. and pay_status = 'SUCCESS'
  38. and pay_category in ({$orderCategoryStr})
  39. group by join_pay_order_id,order_id) count");
  40. $statistics['todayRevenueOrderNbr'] = $todayRevenueOrderNbrModel[0]->total;
  41. // 昨日收入
  42. $statistics['yesterdayRevenue'] = PayDetail::whereRaw('CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) >= ? and CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) <= ?', [$yesterdayStart, $yesterdayEnd])
  43. ->where('pay_status', 'SUCCESS')
  44. ->whereIn('pay_category', $orderCategory)
  45. ->sum('pay_amount');
  46. $yesterdayRevenueOrderNbrModel = Db::select("select count(1) as total from (select join_pay_order_id,JSON_EXTRACT(join_pay_object_json,'$.order_id') as order_id from app_pay_detail where
  47. CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) >= {$yesterdayStart} and CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) <= {$yesterdayEnd}
  48. and pay_status = 'SUCCESS'
  49. and pay_category in ({$orderCategoryStr})
  50. group by join_pay_order_id,order_id) count");
  51. $statistics['yesterdayRevenueOrderNbr'] = $yesterdayRevenueOrderNbrModel[0]->total;
  52. // 本月收入
  53. $statistics['monthRevenue'] = PayDetail::whereRaw('CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) >= ? and CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) <= ?', [$monthStart, $monthEnd])
  54. ->where('pay_status', 'SUCCESS')
  55. ->whereIn('pay_category', $orderCategory)
  56. ->sum('pay_amount');
  57. $monthRevenueOrderNbrModel = Db::select("select count(1) as total from (select join_pay_order_id,JSON_EXTRACT(join_pay_object_json,'$.order_id') as order_id from app_pay_detail where
  58. CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) >= {$monthStart} and CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) <= {$monthEnd}
  59. and pay_status = 'SUCCESS'
  60. and pay_category in ({$orderCategoryStr})
  61. group by join_pay_order_id,order_id) count");
  62. $statistics['monthRevenueOrderNbr'] = $monthRevenueOrderNbrModel[0]->total;
  63. // 累计收入
  64. // $statistics['totalRevenue'] = PayDetail::where('pay_status', 'SUCCESS')
  65. // ->whereIn('pay_category', $orderCategory)
  66. // ->sum('pay_amount');
  67. // 今日退款
  68. $todayRefundItem = Db::select("select SUM(d2.pay_amount) as amount,count(1) as total from app_pay_detail d1
  69. inner join app_pay_detail d2 ON d1.join_pay_order_id=d2.join_pay_order_id and d2.pay_category='REFUND'
  70. where CAST(UNIX_TIMESTAMP(d2.pay_paytimes) as SIGNED) >= ? AND d1.pay_category in ({$orderCategoryStr})
  71. ", [$todayTimeUnix]);
  72. $statistics['todayRefund'] = $todayRefundItem[0]->amount;
  73. $statistics['todayRefundNbr'] = $todayRefundItem[0]->total;
  74. // 累计退款
  75. $totalRefundItem = Db::select("select SUM(d2.pay_amount) as amount,count(1) as total from app_pay_detail d1
  76. inner join app_pay_detail d2 ON d1.join_pay_order_id=d2.join_pay_order_id and d2.pay_category='REFUND'
  77. where d1.pay_category in ({$orderCategoryStr})
  78. ");
  79. $statistics['totalRefund'] = $totalRefundItem[0]->amount;
  80. $statistics['totalRefundNbr'] = $totalRefundItem[0]->total;
  81. if (in_array('MEALS',$orderCategory)){
  82. // 挂账
  83. $sql = "select SUM(order_amount_pay) as amount, count(1) as total from app_order where order_status_payment = 'AWAITING'";
  84. if (!empty($searchTime)){
  85. $sql .= " and order_addtimes > {$searchTime[0]} and order_addtimes < $searchTime[1]";
  86. }
  87. $awaitingModel = Db::select($sql);
  88. $statistics['awaitingRevenue'] = $awaitingModel[0]->amount;
  89. $statistics['awaitingRevenueOrderNbr'] = $awaitingModel[0]->total;
  90. }
  91. return json_success('success', $statistics);
  92. }
  93. }