StatisticsRepository.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. <?php
  2. namespace App\Repositories;
  3. use Carbon\Carbon;
  4. use Illuminate\Support\Facades\Log;
  5. class StatisticsRepository
  6. {
  7. public function __construct()
  8. {
  9. }
  10. /**
  11. * 获取付款订单总金额,总支付人数,总订单数
  12. * @param string $start
  13. * @param string $end
  14. * @return array
  15. */
  16. public function getOrderPayInfo($start = '', $end = '', $shopId = '')
  17. {
  18. $params = [
  19. "index" => config('customer.order_statistics_index_name'),
  20. "type" => "_doc",
  21. "body" => [
  22. "size" => 0,
  23. "query" => [
  24. "bool" => [
  25. "must" => [
  26. [
  27. "terms" => [
  28. "status" => [1, 2, 3, 4, 5, 6]
  29. ]
  30. ],
  31. [
  32. "term" => [
  33. "shop_id" => $shopId
  34. ]
  35. ],
  36. [
  37. "range" => [
  38. "created_at" => [
  39. "from" => $start,
  40. "to" => $end,
  41. "include_lower" => true,
  42. "include_upper" => true,
  43. ]
  44. ]
  45. ]
  46. ]
  47. ]
  48. ],
  49. "aggs" => [
  50. "total_fee" => [
  51. "sum" => [
  52. "field" => "real_price"
  53. ]
  54. ],
  55. "pay_user_num" => [
  56. "cardinality" => [
  57. "field" => "uid"
  58. ]
  59. ],
  60. "pay_order_num" => [
  61. "cardinality" => [
  62. "field" => "id"
  63. ]
  64. ]
  65. ]
  66. ]
  67. ];
  68. $result = \Elasticsearch::search($params);
  69. Log::debug('get-order-payinfo:' . json_encode($params));
  70. return [
  71. 'total_fee' => $result['aggregations']['total_fee']['value'],
  72. 'pay_user_num' => $result['aggregations']['pay_user_num']['value'],
  73. 'pay_order_num' => $result['aggregations']['pay_order_num']['value'],
  74. ];
  75. }
  76. /**
  77. * 获取待发货订单数
  78. * @param string $start
  79. * @param string $end
  80. * @return array
  81. */
  82. public function getDfhOrder($start = '', $end = '', $shopId = '')
  83. {
  84. $params = [
  85. "index" => config('customer.order_statistics_index_name'),
  86. "type" => "_doc",
  87. "body" => [
  88. "size" => 0,
  89. "query" => [
  90. "bool" => [
  91. "must" => [
  92. [
  93. "term" => [
  94. "status" => [
  95. "value" => 1
  96. ]
  97. ]
  98. ],
  99. [
  100. "term" => [
  101. "shop_id" => $shopId
  102. ]
  103. ],
  104. [
  105. "range" => [
  106. "created_at" => [
  107. "from" => $start,
  108. "to" => $end,
  109. "include_lower" => true,
  110. "include_upper" => true,
  111. ]
  112. ]
  113. ]
  114. ]
  115. ]
  116. ],
  117. "aggs" => [
  118. "dfh_order_num" => [
  119. "cardinality" => [
  120. "field" => "id"
  121. ]
  122. ]
  123. ]
  124. ]
  125. ];
  126. $result = \Elasticsearch::search($params);
  127. Log::debug('get-dfh-order:' . json_encode($params));
  128. return [
  129. 'dfh_order_num' => $result['aggregations']['dfh_order_num']['value']
  130. ];
  131. }
  132. /**
  133. * 获取完成订单数
  134. * @param string $start
  135. * @param string $end
  136. * @return array
  137. */
  138. public function getFinishOrder($start = '', $end = '', $shopId = '')
  139. {
  140. $params = [
  141. "index" => config('customer.order_statistics_index_name'),
  142. "type" => "_doc",
  143. "body" => [
  144. "size" => 0,
  145. "query" => [
  146. "bool" => [
  147. "must" => [
  148. [
  149. "terms" => [
  150. "status" => [5, 6]
  151. ]
  152. ],
  153. [
  154. "term" => [
  155. "shop_id" => $shopId
  156. ]
  157. ],
  158. [
  159. "range" => [
  160. "created_at" => [
  161. "from" => $start,
  162. "to" => $end,
  163. "include_lower" => true,
  164. "include_upper" => true,
  165. ]
  166. ]
  167. ]
  168. ]
  169. ]
  170. ],
  171. "aggs" => [
  172. "total_fee" => [
  173. "sum" => [
  174. "field" => "real_price"
  175. ]
  176. ],
  177. "finish_order_num" => [
  178. "cardinality" => [
  179. "field" => "id"
  180. ]
  181. ]
  182. ]
  183. ]
  184. ];
  185. $result = \Elasticsearch::search($params);
  186. Log::debug('get-finish-order:' . json_encode($params));
  187. return [
  188. 'finish_total_fee' => $result['aggregations']['total_fee']['value'],
  189. 'finish_order_num' => $result['aggregations']['finish_order_num']['value']
  190. ];
  191. }
  192. /**
  193. * 获取总订单数
  194. * @param string $start
  195. * @param string $end
  196. * @return array
  197. */
  198. public function getOrderNum($start = '', $end = '', $shopId = '')
  199. {
  200. $params = [
  201. "index" => config('customer.order_statistics_index_name'),
  202. "type" => "_doc",
  203. "body" => [
  204. "size" => 0,
  205. "query" => [
  206. "bool" => [
  207. "must" => [
  208. [
  209. "term" => [
  210. "shop_id" => $shopId
  211. ]
  212. ],
  213. [
  214. "range" => [
  215. "created_at" => [
  216. "from" => $start,
  217. "to" => $end,
  218. "include_lower" => true,
  219. "include_upper" => true,
  220. ]
  221. ]
  222. ]
  223. ]
  224. ]
  225. ],
  226. "aggs" => [
  227. "total_order_num" => [
  228. "cardinality" => [
  229. "field" => "id"
  230. ]
  231. ]
  232. ]
  233. ]
  234. ];
  235. $result = \Elasticsearch::search($params);
  236. Log::debug('get-order-num:' . json_encode($params));
  237. return [
  238. 'total_order_num' => $result['aggregations']['total_order_num']['value']
  239. ];
  240. }
  241. /**
  242. * 获取总退单数
  243. * @param string $start
  244. * @param string $end
  245. * @return array
  246. */
  247. public function getRefundOrderNum($start = '', $end = '', $shopId = '')
  248. {
  249. $params = [
  250. "index" => config('customer.order_statistics_index_name'),
  251. "type" => "_doc",
  252. "body" => [
  253. "size" => 0,
  254. "query" => [
  255. "bool" => [
  256. "must" => [
  257. [
  258. "terms" => [
  259. "feedback_status" => [1, 2]
  260. ]
  261. ],
  262. [
  263. "term" => [
  264. "shop_id" => $shopId
  265. ]
  266. ],
  267. [
  268. "range" => [
  269. "created_at" => [
  270. "from" => $start,
  271. "to" => $end,
  272. "include_lower" => true,
  273. "include_upper" => true,
  274. ]
  275. ]
  276. ]
  277. ]
  278. ]
  279. ],
  280. "aggs" => [
  281. "refund_order_num" => [
  282. "cardinality" => [
  283. "field" => "id"
  284. ]
  285. ]
  286. ]
  287. ]
  288. ];
  289. $result = \Elasticsearch::search($params);
  290. Log::debug('get-refund-order:' . json_encode($params));
  291. return [
  292. 'refund_order_num' => $result['aggregations']['refund_order_num']['value']
  293. ];
  294. }
  295. /**
  296. * 获取维权订单数
  297. * @param string $start
  298. * @param string $end
  299. * @return array
  300. */
  301. public function getFeedBackOrderNum($start = '', $end = '', $shopId = '')
  302. {
  303. $params = [
  304. "index" => config('customer.order_statistics_index_name'),
  305. "type" => "_doc",
  306. "body" => [
  307. "size" => 0,
  308. "query" => [
  309. "bool" => [
  310. "must" => [
  311. [
  312. "terms" => [
  313. "feedback_status" => [1, 2, 3]
  314. ]
  315. ],
  316. [
  317. "term" => [
  318. "shop_id" => $shopId
  319. ]
  320. ],
  321. [
  322. "range" => [
  323. "created_at" => [
  324. "from" => $start,
  325. "to" => $end,
  326. "include_lower" => true,
  327. "include_upper" => true,
  328. ]
  329. ]
  330. ]
  331. ]
  332. ]
  333. ],
  334. "aggs" => [
  335. "feedback_order_num" => [
  336. "cardinality" => [
  337. "field" => "id"
  338. ]
  339. ]
  340. ]
  341. ]
  342. ];
  343. $result = \Elasticsearch::search($params);
  344. Log::debug('get-feedback-ordernum:' . json_encode($params));
  345. return [
  346. 'feedback_order_num' => $result['aggregations']['feedback_order_num']['value']
  347. ];
  348. }
  349. /**
  350. * 获取销售额
  351. * @param string $start
  352. * @param string $end
  353. * @return array
  354. */
  355. public function getSaleMoney($start = '', $end = '', $shopId = '')
  356. {
  357. $params = [
  358. "index" => config('customer.order_statistics_index_name'),
  359. "type" => "_doc",
  360. "body" => [
  361. "size" => 0,
  362. "query" => [
  363. "bool" => [
  364. "must" => [
  365. [
  366. "terms" => [
  367. "status" => [1, 2, 3, 4, 5, 6]
  368. ]
  369. ],
  370. [
  371. "term" => [
  372. "shop_id" => $shopId
  373. ]
  374. ],
  375. [
  376. "range" => [
  377. "created_at" => [
  378. "from" => $start,
  379. "to" => $end,
  380. "include_lower" => true,
  381. "include_upper" => true,
  382. ]
  383. ]
  384. ]
  385. ]
  386. ]
  387. ],
  388. "aggs" => [
  389. "sale_per_day" => [
  390. "date_histogram" => [
  391. "field" => "created_at",
  392. "interval" => "1d",
  393. "min_doc_count" => 0,
  394. "format" => "yyyy-MM-dd",
  395. "extended_bounds" => [
  396. "min" => Carbon::parse($start)->format('Y-m-d'),
  397. "max" => Carbon::parse($end)->format('Y-m-d'),
  398. ]
  399. ],
  400. "aggs" => [
  401. "total_fee" => [
  402. "sum" => [
  403. "field" => "real_price"
  404. ]
  405. ],
  406. "pay_user_num" => [
  407. "cardinality" => [
  408. "field" => "uid"
  409. ]
  410. ]
  411. ]
  412. ]
  413. ]
  414. ]
  415. ];
  416. $result = \Elasticsearch::search($params);
  417. Log::debug('get-sale-money:' . json_encode($params));
  418. $tmp = [];
  419. foreach ($result['aggregations']['sale_per_day']['buckets'] as $row) {
  420. $tmpDate = Carbon::parse($row['key_as_string'])->format('m-d');
  421. $tmp[$tmpDate] = [
  422. 'pay_user_num' => $row['pay_user_num']['value'],
  423. 'total_fee' => $row['total_fee']['value'],
  424. ];
  425. }
  426. return $tmp;
  427. }
  428. }