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.

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