Delivery.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2025 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types=1);
  12. namespace app\store\model\order;
  13. use app\store\model\OrderAddress as OrderAddressModel;
  14. use app\common\model\order\Delivery as DeliveryModel;
  15. use app\common\service\Express as ExpressService;
  16. /**
  17. * 订单发货单模型
  18. * Class Delivery
  19. * @package app\store\model\order
  20. */
  21. class Delivery extends DeliveryModel
  22. {
  23. /**
  24. * 获取发货记录
  25. * @param array $param
  26. * @return \think\Paginator
  27. */
  28. public function getList(array $param): \think\Paginator
  29. {
  30. // 检索查询条件
  31. $filter = $this->getQueryFilter($param);
  32. return $this->with(['orderData' => ['user', 'address'], 'goods.goods.image', 'express'])
  33. ->alias('delivery')
  34. ->field($this->getAliasFields('delivery', ['eorder_html']))
  35. ->join('order', 'order.order_id = delivery.order_id')
  36. ->where($filter)
  37. ->order(['delivery.create_time' => 'desc', 'delivery.' . $this->getPk() => 'asc'])
  38. ->paginate(10);
  39. }
  40. /**
  41. * 设置检索查询条件
  42. * @param array $param
  43. * @return array
  44. */
  45. private function getQueryFilter(array $param): array
  46. {
  47. // 默认参数
  48. $params = $this->setQueryDefaultValue($param, [
  49. 'searchType' => '', // 关键词类型 (10订单号)
  50. 'searchValue' => '', // 关键词内容
  51. 'deliveryMethod' => -1, // 发货方式 DeliveryMethodEnum
  52. 'betweenTime' => [], // 起止时间
  53. ]);
  54. // 检索查询条件
  55. $filter = [];
  56. // 关键词
  57. if (!empty($params['searchValue'])) {
  58. $searchWhere = [
  59. 10 => ['order.order_no', 'like', "%{$params['searchValue']}%"]
  60. ];
  61. \array_key_exists($params['searchType'], $searchWhere) && $filter[] = $searchWhere[$params['searchType']];
  62. }
  63. // 发货时间
  64. if ($params['deliveryMethod'] > -1) {
  65. $filter[] = ['delivery_method', '=', (int)$params['deliveryMethod']];
  66. }
  67. // 起止时间
  68. if (!empty($params['betweenTime'])) {
  69. $times = between_time($params['betweenTime']);
  70. $filter[] = ['delivery.create_time', '>=', $times['start_time']];
  71. $filter[] = ['delivery.create_time', '<', $times['end_time'] + 86400];
  72. }
  73. return $filter;
  74. }
  75. /**
  76. * 查询指定发货单的物流跟踪信息
  77. * @param int $deliveryId
  78. * @return array
  79. * @throws \cores\exception\BaseException
  80. * @throws \think\db\exception\DataNotFoundException
  81. * @throws \think\db\exception\DbException
  82. * @throws \think\db\exception\ModelNotFoundException
  83. */
  84. public function getExpressTraces(int $deliveryId): array
  85. {
  86. // 发货单详情
  87. $detail = self::detail($deliveryId, ['express']);
  88. empty($detail) && throwError('未找到指定的发货单');
  89. // 订单收货地址
  90. $address = OrderAddressModel::detail(['order_id' => $detail['order_id']]);
  91. // 整理物流跟踪信息
  92. $Express = new ExpressService;
  93. return empty($detail['express']) ? []
  94. : $Express->traces($detail['express'], $detail['express_no'], $address, self::$storeId);
  95. }
  96. }