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.

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