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.

203 lines
7.6 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
  1. <?php
  2. namespace App\Service\v3\Implementations;
  3. use App\Constants\v3\OrderState;
  4. use App\Constants\v3\OrderType;
  5. use App\Model\v3\OrderMain;
  6. use App\Model\v3\Order;
  7. use App\Service\v3\Interfaces\BadgeServiceInterface;
  8. use App\Service\v3\Interfaces\OrderListServiceInterface;
  9. use Hyperf\Di\Annotation\Inject;
  10. use Hyperf\Utils\ApplicationContext;
  11. class OrderListService implements OrderListServiceInterface
  12. {
  13. /**
  14. * @Inject
  15. * @var BadgeServiceInterface
  16. */
  17. protected $badgeService;
  18. public function do()
  19. {
  20. // TODO: Implement do() method.
  21. }
  22. public function check()
  23. {
  24. // TODO: Implement check() method.
  25. }
  26. public function undo()
  27. {
  28. // TODO: Implement undo() method.
  29. }
  30. public function onlineByUser($userId, $tab, $page=1, $pagesize=10)
  31. {
  32. $builder = OrderMain::query()
  33. ->with(['orderGoods', 'market'])
  34. ->where(['user_id' => $userId, 'type' => OrderType::ONLINE]);
  35. switch ($tab) {
  36. case 'all':
  37. break;
  38. case 'finish':
  39. $builder->whereIn('state', OrderState::FINISH);
  40. break;
  41. case 'unpaid':
  42. $builder->where(['state' => OrderState::UNPAID]);
  43. break;
  44. case 'receiving':
  45. $builder->whereIn('state', OrderState::RECEIVING);
  46. break;
  47. case 'refund':
  48. $builder->whereIn('state', OrderState::REFUND);
  49. break;
  50. }
  51. // 清除badge
  52. $this->badgeService->clearUserOrder($userId, $tab);
  53. co(function () use ($userId) {
  54. // 自动取消超时订单
  55. $this->autoCancel($userId);
  56. });
  57. $paginate = $builder->orderBy('created_at', 'desc')->paginate($pagesize);
  58. $orders = $paginate->toArray();
  59. return ['has_more_pages' => $paginate->hasMorePages(), 'orders' => $orders['data'], 'note' => '待付款订单15分钟后将自动取消,请尽快支付!'];
  60. }
  61. public function onlineByStore($storeId, $tab, $page=1, $pagesize=10)
  62. {
  63. // $builder = Order::join('lanzu_order_main','lanzu_order.order_main_id','lanzu_order_main.global_order_id')
  64. // ->select(
  65. // 'lanzu_order.*',
  66. // 'lanzu_order_main.state',
  67. // 'lanzu_order_main.address',
  68. // 'lanzu_order_main.name',
  69. // 'lanzu_order_main.delivery_time_note',
  70. // 'lanzu_order_main.shipping_type',
  71. // 'lanzu_order_main.global_order_id',
  72. // 'lanzu_order_main.lat',
  73. // 'lanzu_order_main.lng'
  74. // )
  75. // ->with('orderGoods')
  76. // ->where('lanzu_order.store_id', $storeId)
  77. // ->where('lanzu_order_main.type',1);
  78. $mainTable = ApplicationContext::getContainer()->get(OrderMain::class)->getTable();
  79. $childTable = ApplicationContext::getContainer()->get(Order::class)->getTable();
  80. $builder = Order::query()
  81. ->select(''.$childTable.'.*')
  82. ->join($mainTable, ''.$childTable.'.order_main_id', '=', ''.$mainTable.'.global_order_id')
  83. ->with(['orderMain', 'orderGoods'])
  84. ->where(['store_id' => $storeId, ''.$mainTable.'.type' => OrderType::ONLINE]);
  85. switch ($tab) {
  86. case 'all':
  87. break;
  88. case 'paid':
  89. $builder->where(''.$mainTable.'.state', OrderState::PAID);
  90. break;
  91. case 'delivery':
  92. $builder->where([''.$mainTable.'.state' => OrderState::DELIVERY]);
  93. break;
  94. case 'finish':
  95. $builder->whereIn(''.$mainTable.'.state', OrderState::FINISH);
  96. break;
  97. case 'refund':
  98. $builder->whereIn(''.$mainTable.'.state', OrderState::REFUND);
  99. break;
  100. }
  101. $paginate = $builder->orderBy(''.$mainTable.'.created_at', 'desc')->paginate($pagesize);
  102. $orders = $paginate->toArray();
  103. // $stateTxet = [
  104. // OrderState::UNPAID => '待付款',
  105. // OrderState::PAID => '待接单',
  106. // OrderState::DELIVERY => '待送达',
  107. // OrderState::COMPLETED => '已完成',
  108. // OrderState::EVALUATED => '已评价',
  109. // OrderState::CANCELED => '已取消',
  110. // OrderState::REJECTION => '已拒单',
  111. // OrderState::REFUNDING => '退款中',
  112. // OrderState::REFUNDED => '已退款',
  113. // OrderState::REFUND_REFUSE => '拒绝退款'
  114. // ];
  115. $res = ['has_more_pages' => $paginate->hasMorePages(), 'orders' => $orders['data']];
  116. // foreach ($res['orders'] as &$v){
  117. // switch ($v['shipping_type']) {
  118. // case 1:
  119. // $v['delivery_text'] = '服务站配送';
  120. // break;
  121. // case 2:
  122. // $v['delivery_text'] = '达达配送';
  123. // break;
  124. // }
  125. // $v['state_text'] = $stateTxet[$v['state']];
  126. // }
  127. $this->badgeService->clearStoreOrder($storeId, $tab);
  128. return $res;
  129. }
  130. public function offlineByStore($storeId, $page=1, $pagesize=10 ,$start_time = '',$end_time = '')
  131. {
  132. // $builder = Order::join('lanzu_order_main','lanzu_order.order_main_id','lanzu_order_main.global_order_id')
  133. // ->where('store_id', $storeId)
  134. // ->where('lanzu_order_main.type',4)
  135. // ->with('user');
  136. $mainTable = ApplicationContext::getContainer()->get(OrderMain::class)->getTable();
  137. $childTable = ApplicationContext::getContainer()->get(Order::class)->getTable();
  138. $builder = OrderMain::query()
  139. ->select(''.$mainTable.'.*', ''.$childTable.'.order_num')
  140. ->join($childTable, ''.$childTable.'.order_main_id', '=', ''.$mainTable.'.global_order_id')
  141. ->where([''.$childTable.'.store_id' => $storeId, ''.$mainTable.'.type' => OrderType::OFFLINE])
  142. ->with('user');
  143. // if(!empty($start_time) && !empty($end_time)){
  144. // $builder->whereBetween(''.$mainTable.'.created_at',[strtotime($start_time.' 00:00:00'),strtotime($end_time.' 23:59:59')]);
  145. // }
  146. if (!empty($start_time)) {
  147. $builder->where(''.$mainTable.'.created_at', '>=', strtotime($start_time.' 00:00:00'));
  148. }
  149. if (!empty($end_time)) {
  150. $builder->where(''.$mainTable.'.created_at', '<=', strtotime($end_time.' 23:59:59'));
  151. }
  152. $paginate = $builder->orderBy(''.$mainTable.'.created_at', 'desc')->paginate($pagesize);
  153. $orders = $paginate->toArray();
  154. return ['has_more_pages' => $paginate->hasMorePages(), 'orders' => $orders['data']];
  155. }
  156. public function offlineByUser($userId, $page=1, $pagesize=10)
  157. {
  158. $builder = OrderMain::query()
  159. ->with(['orders' => function($query) {
  160. $query->with('store');
  161. }])
  162. ->where(['user_id' => $userId, 'type' => OrderType::OFFLINE])
  163. ->whereIn('state', [OrderState::PAID,OrderState::DELIVERY,OrderState::COMPLETED]);
  164. $paginate = $builder->orderBy('created_at', 'desc')->paginate($pagesize);
  165. $orders = $paginate->toArray();
  166. return ['has_more_pages' => $paginate->hasMorePages(), 'orders' => $orders['data']];
  167. }
  168. public function autoCancel($userId)
  169. {
  170. return OrderMain::query()
  171. ->where(['user_id' => $userId, 'state' => OrderState::UNPAID])
  172. ->where('created_at', '<', time()-900)
  173. ->update(['state' => OrderState::CANCELED]);
  174. }
  175. }