链街Dcat后台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

240 lines
15 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. <?php
  2. namespace App\Admin\Repositories\v3;
  3. use App\Admin\Controllers\v3\OrderReportController;
  4. use App\Models\ImsCjdcOrderMain as Model;
  5. use Dcat\Admin\Grid\Model as GridModel;
  6. use Dcat\Admin\Repositories\EloquentRepository;
  7. use Illuminate\Support\Facades\DB;
  8. use App\Models\ImsCjdcOrderMain as OrderMainModel;
  9. use App\Models\FinancialRecord as FinancialRecordModel;
  10. use App\Models\StoreAccount as StoreAccountModel;
  11. use App\Models\v3\Store as StoreModel;
  12. use App\Models\v3\User as UserModel;
  13. class OrderReport extends EloquentRepository
  14. {
  15. /**
  16. * Model.
  17. *
  18. * @var string
  19. */
  20. protected $eloquentClass = Model::class;
  21. /**
  22. * 获取统计列表数据
  23. * 订单 用户
  24. * 订单总金额 现存用户总数
  25. * 新用户补贴金额 新增用户总数
  26. * 商户首单补贴金额
  27. */
  28. public function get(GridModel $model)
  29. {
  30. $marketId = request()->input('market_id');
  31. $startTime = request()->input('start_time');
  32. $endTime = request()->input('end_time');
  33. $time = date('Y-m-d',time());
  34. $today = $time;
  35. $yesterday = date("Y-m-d",strtotime("-1 days",strtotime($today)));
  36. // 日期
  37. // $date = request()->input('day');
  38. // if(!empty($date)){
  39. // $startTime = $date;
  40. // $endTime = $date;
  41. // }
  42. $orderMainOnline = OrderMainModel::select(DB::raw('COUNT(id) AS total_num, SUM(money) AS total_money'))->whereIn('state',[4,5])->where('type',OrderMainModel::ORDER_TYPE_ONLINE);
  43. $orderMainOffline = OrderMainModel::select(DB::raw('COUNT(id) AS total_num, SUM(money) AS total_money'))->whereIn('state',[4,5])->where('type',OrderMainModel::ORDER_TYPE_OFFLINE);
  44. // 旧商户流水
  45. $storeNewUser = StoreAccountModel::select(DB::raw("SUM( CASE WHEN note = '新用户下单成功,平台奖励' THEN 1 ELSE 0 END ) AS new_add_total, SUM( CASE WHEN note = '新用户下单成功,平台奖励' THEN money ELSE 0 END ) AS new_user_total_money,SUM( CASE WHEN note = '用户下单成功,平台奖励' THEN money ELSE 0 END ) AS store_total_money"));
  46. // 新商户流水 获取所有模型
  47. $financialRecordModelZero = FinancialRecordModel::getFinancialRecordModel(5);
  48. $financialRecordModelOne = FinancialRecordModel::getFinancialRecordModel(1);
  49. $financialRecordModelTwo = FinancialRecordModel::getFinancialRecordModel(2);
  50. $financialRecordModelThree = FinancialRecordModel::getFinancialRecordModel(3);
  51. $financialRecordModelFour = FinancialRecordModel::getFinancialRecordModel(4);
  52. $storeNewUserNewZero = $financialRecordModelZero::select(DB::raw('SUM( CASE WHEN money_type = 4 THEN 1 ELSE 0 END ) AS new_add_total, SUM( CASE WHEN money_type = 4 THEN money ELSE 0 END ) AS new_user_total_money, SUM( CASE WHEN money_type = 5 THEN money ELSE 0 END ) as store_total_money '))->where([['created_at','>',strtotime('2020-09-19 00:00:00')]]);
  53. $storeNewUserNewOne = $financialRecordModelOne::select(DB::raw('SUM( CASE WHEN money_type = 4 THEN 1 ELSE 0 END ) AS new_add_total, SUM( CASE WHEN money_type = 4 THEN money ELSE 0 END ) AS new_user_total_money, SUM( CASE WHEN money_type = 5 THEN money ELSE 0 END ) as store_total_money '))->where([['created_at','>',strtotime('2020-09-19 00:00:00')]]);
  54. $storeNewUserNewTwo = $financialRecordModelTwo::select(DB::raw('SUM( CASE WHEN money_type = 4 THEN 1 ELSE 0 END ) AS new_add_total, SUM( CASE WHEN money_type = 4 THEN money ELSE 0 END ) AS new_user_total_money, SUM( CASE WHEN money_type = 5 THEN money ELSE 0 END ) as store_total_money '))->where([['created_at','>',strtotime('2020-09-19 00:00:00')]]);
  55. $storeNewUserNewThree = $financialRecordModelThree::select(DB::raw('SUM( CASE WHEN money_type = 4 THEN 1 ELSE 0 END ) AS new_add_total, SUM( CASE WHEN money_type = 4 THEN money ELSE 0 END ) AS new_user_total_money, SUM( CASE WHEN money_type = 5 THEN money ELSE 0 END ) as store_total_money '))->where([['created_at','>',strtotime('2020-09-19 00:00:00')]]);
  56. $storeNewUserNewFour = $financialRecordModelFour::select(DB::raw('SUM( CASE WHEN money_type = 4 THEN 1 ELSE 0 END ) AS new_add_total, SUM( CASE WHEN money_type = 4 THEN money ELSE 0 END ) AS new_user_total_money, SUM( CASE WHEN money_type = 5 THEN money ELSE 0 END ) as store_total_money '))->where([['created_at','>',strtotime('2020-09-19 00:00:00')]]);
  57. $newUser = UserModel::select(DB::raw('count(id) AS total'));
  58. if($marketId){
  59. $orderMainOnline->where('market_id',$marketId);
  60. $orderMainOffline->where('market_id',$marketId);
  61. // 查询这个市场下的店铺id
  62. $storeIds = StoreModel::where('market_id',$marketId)->pluck('user_id','id')->toArray();
  63. $storeIdsArr = array_keys($storeIds);
  64. $userIdsArr = array_values($storeIds);//dd([$storeIdsArr,$userIdsArr]);
  65. $storeNewUser->whereIn('store_id',$storeIdsArr);
  66. $storeNewUserNewZero->whereIn('user_id',$userIdsArr)->where('user_type',5);
  67. $storeNewUserNewOne->whereIn('user_id',$userIdsArr)->where('user_type',5);
  68. $storeNewUserNewTwo->whereIn('user_id',$userIdsArr)->where('user_type',5);
  69. $storeNewUserNewThree->whereIn('user_id',$userIdsArr)->where('user_type',5);
  70. $storeNewUserNewFour->whereIn('user_id',$userIdsArr)->where('user_type',5);
  71. }
  72. if($startTime){
  73. $date = $startTime;
  74. $startTime = $startTime.' 00:00:00';
  75. $orderMainOnline->where([['created_at','>=',strtotime($startTime)]]);
  76. $orderMainOffline->where([['created_at','>=',strtotime($startTime)]]);
  77. $storeNewUser->where([['time','>=',$startTime]]);
  78. $storeNewUserNewZero->where([['created_at','>=',strtotime($startTime)]]);
  79. $storeNewUserNewOne->where([['created_at','>=',strtotime($startTime)]]);
  80. $storeNewUserNewTwo->where([['created_at','>=',strtotime($startTime)]]);
  81. $storeNewUserNewThree->where([['created_at','>=',strtotime($startTime)]]);
  82. $storeNewUserNewFour->where([['created_at','>=',strtotime($startTime)]]);
  83. // $newUser->where([['created_at','>=',strtotime($startTime)]]);
  84. }else{
  85. $date = '2020-06-01';
  86. }
  87. if($endTime){
  88. $date = $date.' 至 '.$endTime;
  89. $endTime = $endTime.' 23:59:59';
  90. $orderMainOnline->where([['created_at','<=',strtotime($endTime)]]);
  91. $orderMainOffline->where([['created_at','<=',strtotime($endTime)]]);
  92. $storeNewUser->where([['time','<=',$endTime]]);
  93. $storeNewUserNewZero->where([['created_at','<=',strtotime($endTime)]]);
  94. $storeNewUserNewOne->where([['created_at','<=',strtotime($endTime)]]);
  95. $storeNewUserNewTwo->where([['created_at','<=',strtotime($endTime)]]);
  96. $storeNewUserNewThree->where([['created_at','<=',strtotime($endTime)]]);
  97. $storeNewUserNewFour->where([['created_at','<=',strtotime($endTime)]]);
  98. // $newUser->where([['created_at','<=',strtotime($endTime)]]);
  99. }else{
  100. $date .= ' 至 '.$time;
  101. }
  102. if(empty($startTime) && empty($endTime)){
  103. $date = $time;
  104. $todayStart = $time.' 00:00:00';
  105. $todayEnd = $time.' 23:59:59';
  106. $orderMainOnline->where([['created_at','>=',strtotime($todayStart)]]);
  107. $orderMainOffline->where([['created_at','>=',strtotime($todayStart)]]);
  108. $storeNewUser->where([['time','>=',$todayStart]]);
  109. $storeNewUserNewZero->where([['created_at','>=',strtotime($todayStart)]]);
  110. $storeNewUserNewOne->where([['created_at','>=',strtotime($todayStart)]]);
  111. $storeNewUserNewTwo->where([['created_at','>=',strtotime($todayStart)]]);
  112. $storeNewUserNewThree->where([['created_at','>=',strtotime($todayStart)]]);
  113. $storeNewUserNewFour->where([['created_at','>=',strtotime($todayStart)]]);
  114. $orderMainOnline->where([['created_at','<=',strtotime($todayEnd)]]);
  115. $orderMainOffline->where([['created_at','<=',strtotime($todayEnd)]]);
  116. $storeNewUser->where([['time','<=',$todayEnd]]);
  117. $storeNewUserNewZero->where([['created_at','<=',strtotime($todayEnd)]]);
  118. $storeNewUserNewOne->where([['created_at','<=',strtotime($todayEnd)]]);
  119. $storeNewUserNewTwo->where([['created_at','<=',strtotime($todayEnd)]]);
  120. $storeNewUserNewThree->where([['created_at','<=',strtotime($todayEnd)]]);
  121. $storeNewUserNewFour->where([['created_at','<=',strtotime($todayEnd)]]);
  122. }
  123. // 订单总额
  124. $orderReportOnline = $orderMainOnline->get()->toArray();
  125. $orderReportOffline = $orderMainOffline->get()->toArray();
  126. // 补贴金额
  127. $storeNewUsers = $storeNewUser->get()->toArray();
  128. $storeNewUserNewsZero = $storeNewUserNewZero->get()->toArray();
  129. $storeNewUserNewsOne = $storeNewUserNewOne->get()->toArray();
  130. $storeNewUserNewsTwo = $storeNewUserNewTwo->get()->toArray();
  131. $storeNewUserNewsThree = $storeNewUserNewThree->get()->toArray();
  132. $storeNewUserNewsFour = $storeNewUserNewFour->get()->toArray();
  133. // 总用户
  134. $userTotal = $newUser->get()->toArray();
  135. $query = [
  136. 'order_total_num_online' => !empty($orderReportOnline[0]['total_num'])?$orderReportOnline[0]['total_num']:0,
  137. 'order_total_money_online' => !empty($orderReportOnline[0]['total_money'])?$orderReportOnline[0]['total_money']:0,
  138. 'order_total_num_offline' => !empty($orderReportOffline[0]['total_num'])?$orderReportOffline[0]['total_num']:0,
  139. 'order_total_money_offline' => !empty($orderReportOffline[0]['total_money'])?$orderReportOffline[0]['total_money']:0,
  140. 'new_user_total_money' => !empty($storeNewUsers[0]['new_user_total_money'])?$storeNewUsers[0]['new_user_total_money']:0,
  141. 'new_user_total_new_money_zero' => !empty($storeNewUserNewsZero[0]['new_user_total_money'])?$storeNewUserNewsZero[0]['new_user_total_money']:0,
  142. 'new_user_total_new_money_one' => !empty($storeNewUserNewsOne[0]['new_user_total_money'])?$storeNewUserNewsOne[0]['new_user_total_money']:0,
  143. 'new_user_total_new_money_two' => !empty($storeNewUserNewsTwo[0]['new_user_total_money'])?$storeNewUserNewsTwo[0]['new_user_total_money']:0,
  144. 'new_user_total_new_money_three' => !empty($storeNewUserNewsThree[0]['new_user_total_money'])?$storeNewUserNewsThree[0]['new_user_total_money']:0,
  145. 'new_user_total_new_money_four' => !empty($storeNewUserNewsFour[0]['new_user_total_money'])?$storeNewUserNewsFour[0]['new_user_total_money']:0,
  146. 'store_user_total_money' => !empty($storeNewUsers[0]['store_total_money'])?$storeNewUsers[0]['store_total_money']:0,
  147. 'store_user_total_new_money_zero' => !empty($storeNewUserNewsZero[0]['store_total_money'])?$storeNewUserNewsZero[0]['store_total_money']:0,
  148. 'store_user_total_new_money_one' => !empty($storeNewUserNewsOne[0]['store_total_money'])?$storeNewUserNewsOne[0]['store_total_money']:0,
  149. 'store_user_total_new_money_two' => !empty($storeNewUserNewsTwo[0]['store_total_money'])?$storeNewUserNewsTwo[0]['store_total_money']:0,
  150. 'store_user_total_new_money_three' => !empty($storeNewUserNewsThree[0]['store_total_money'])?$storeNewUserNewsThree[0]['store_total_money']:0,
  151. 'store_user_total_new_money_four' => !empty($storeNewUserNewsFour[0]['store_total_money'])?$storeNewUserNewsFour[0]['store_total_money']:0,
  152. 'new_add_user' => !empty($storeNewUsers[0]['new_add_total'])?$storeNewUsers[0]['new_add_total']:0,
  153. 'new_add_user_new_zero' => !empty($storeNewUserNewsZero[0]['new_add_total'])?$storeNewUserNewsZero[0]['new_add_total']:0,
  154. 'new_add_user_new_one' => !empty($storeNewUserNewsOne[0]['new_add_total'])?$storeNewUserNewsOne[0]['new_add_total']:0,
  155. 'new_add_user_new_two' => !empty($storeNewUserNewsTwo[0]['new_add_total'])?$storeNewUserNewsTwo[0]['new_add_total']:0,
  156. 'new_add_user_new_three' => !empty($storeNewUserNewsThree[0]['new_add_total'])?$storeNewUserNewsThree[0]['new_add_total']:0,
  157. 'new_add_user_new_four' => !empty($storeNewUserNewsFour[0]['new_add_total'])?$storeNewUserNewsFour[0]['new_add_total']:0,
  158. 'user_total' => !empty($userTotal[0]['total'])?$userTotal[0]['total']:0,
  159. ];
  160. $list = [
  161. [
  162. 'key' => 'user_total',
  163. 'name' => '现存用户总数(人)',
  164. 'value' => $query['user_total']
  165. ],
  166. [
  167. 'key' => 'new_add_user',
  168. 'name' => '新增用户数(人)',
  169. 'value' => $query['new_add_user'] + $query['new_add_user_new_zero'] + $query['new_add_user_new_one'] + $query['new_add_user_new_two'] + $query['new_add_user_new_three'] + $query['new_add_user_new_four']
  170. ],
  171. [
  172. 'key' => 'order_total_num_online',
  173. 'name' => '线上-订单总数(单)',
  174. 'value' => $query['order_total_num_online']
  175. ],
  176. [
  177. 'key' => 'order_total_money_online',
  178. 'name' => '线上-订单总额(元)',
  179. 'value' => $query['order_total_money_online']
  180. ],
  181. [
  182. 'key' => 'order_total_num_offline',
  183. 'name' => '线下-订单总数(单)',
  184. 'value' => $query['order_total_num_offline']
  185. ],
  186. [
  187. 'key' => 'order_total_money_offline',
  188. 'name' => '线下-订单总额(元)',
  189. 'value' => $query['order_total_money_offline']
  190. ],
  191. [
  192. 'key' => 'new_user_total_money',
  193. 'name' => '平台新用户补贴总额(元)',
  194. 'value' => $query['new_user_total_money'] + $query['new_user_total_new_money_zero'] + $query['new_user_total_new_money_one'] + $query['new_user_total_new_money_two'] + $query['new_user_total_new_money_three'] + $query['new_user_total_new_money_four']
  195. ],
  196. [
  197. 'key' => 'store_user_total_money',
  198. 'name' => '店铺用户每日首单补贴(元)',
  199. 'value' => $query['store_user_total_money'] + $query['store_user_total_new_money_zero'] + $query['store_user_total_new_money_one'] + $query['store_user_total_new_money_two'] + $query['store_user_total_new_money_three'] + $query['store_user_total_new_money_four']
  200. ],
  201. [
  202. 'key' => 'day',
  203. 'name' => '统计日期',
  204. 'value' => $date
  205. ]
  206. ];
  207. return $model->makePaginator(
  208. count($list),$list
  209. );
  210. }
  211. }