ShopOrderLists.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace app\workerapi\lists\shops;
  3. use app\common\model\shops\ShopOrders;
  4. use app\workerapi\lists\BaseWorkerDataLists;
  5. use think\db\Query;
  6. class ShopOrderLists extends BaseWorkerDataLists
  7. {
  8. protected $count = 0;
  9. public function querySearch(): array
  10. {
  11. $where = [];
  12. $where[] = ['worker_id', '=', $this->userId];
  13. if (isset($this->params['shop_order_type']) && $this->params['shop_order_type'] != 'all') {
  14. $where[] = ['shop_order_type', '=', $this->params['shop_order_type']];
  15. }
  16. return $where;
  17. }
  18. public function lists(): array
  19. {
  20. $lists = ShopOrders::with(['orderGoods' => function (Query $query) {
  21. $query->field(['sn', 'goods_name', 'goods_image', 'number', 'service_fee', 'service_total', 'company_name', 'delivery_type', 'shop_goods_type', 'goods_specs_inventory_id', 'specs_type', 'custom_attribute_items', 'specs'])->append(['spec_arr', 'delivery_type_text', 'shop_goods_type_text']);
  22. $query->with(['goodsSpecsInventory' => function (Query $query) {
  23. $query->field(['id', 'remaining_inventory']);
  24. }]);
  25. }])->where($this->querySearch())
  26. ->when(!empty($this->params['name']), function (Query $query) {
  27. $query->where(function (Query $query) {
  28. $name = '%' . $this->params['name'] . '%';
  29. $query->where('sn', 'like', '%' . $name . '%');
  30. $query->whereOr('EXISTS(SELECT 1 FROM la_shop_order_goods og
  31. left JOIN la_shop_orders o ON og.sn = o.sn
  32. WHERE og.goods_name LIKE "' . $name . '" and o.sn=la_shop_orders.sn) ');
  33. $query->whereOr(' EXISTS(SELECT 1 FROM la_shop_order_logistic ol
  34. left JOIN la_shop_orders o ON ol.order_id = o.id
  35. WHERE ol.logistic_number LIKE "' . $name . '" and ol.order_id=la_shop_orders.id)');
  36. });
  37. })
  38. ->field(['id, sn, real_name, mobile, address, pay_time, paw_way, pay_status, refund_status, create_time, amount_total, address_json, order_amount,shop_order_type'])
  39. ->append(['pay_way_text', 'pay_status_text', 'refund_status_text'])
  40. ->limit($this->limitOffset, $this->limitLength)
  41. ->order('id', 'desc')
  42. ->select()
  43. ->toArray();
  44. foreach ($lists as &$item) {
  45. $companyNameArr = array_unique(array_column($item['orderGoods'], 'company_name'));
  46. $orderGoodsArr = [];
  47. foreach ($companyNameArr as $val) {
  48. $orderGoods = [];
  49. foreach ($item['orderGoods'] as $goodVal) {
  50. $goodVal['remaining_inventory'] = isset($goodVal['goodsSpecsInventory']['remaining_inventory']) ? $goodVal['goodsSpecsInventory']['remaining_inventory'] : 0;
  51. if ($val == $goodVal['company_name']) {
  52. unset($goodVal['goodsSpecsInventory'], $goodVal['custom_attribute_items'], $goodVal['specs'], $goodVal['sn'], $goodVal['goods_specs_inventory_id'], $goodVal['company_name']);
  53. $orderGoods[] = $goodVal;
  54. }
  55. }
  56. if (!empty($orderGoods)) {
  57. $orderGoodsArr[] = [
  58. 'company_name' => $val,
  59. 'goods' => $orderGoods
  60. ];
  61. }
  62. }
  63. $item['orderGoods'] = $orderGoodsArr;
  64. }
  65. return $lists;
  66. }
  67. public function count(): int
  68. {
  69. return ShopOrders::where($this->querySearch())
  70. ->when(!empty($this->params['name']), function (Query $query) {
  71. $query->where(function (Query $query) {
  72. $name = '%' . $this->params['name'] . '%';
  73. $query->where('sn', 'like', '%' . $name . '%');
  74. $query->whereOr(' EXISTS(SELECT 1 FROM la_shop_order_goods og
  75. left JOIN la_shop_orders o ON og.sn = o.sn
  76. WHERE og.goods_name LIKE "' . $name . '" and o.sn=la_shop_orders.sn)');
  77. $query->whereOr(' EXISTS(SELECT 1 FROM la_shop_order_logistic ol
  78. left JOIN la_shop_orders o ON ol.order_id = o.id
  79. WHERE ol.logistic_number LIKE "' . $name . '" and ol.order_id=la_shop_orders.id)');
  80. });
  81. })->count();
  82. }
  83. }