DeliveryOrderForm.php 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\admin\models;
  8. use app\constants\OptionSetting;
  9. use app\models\DeliveryInfo;
  10. use app\models\District;
  11. use app\models\Md;
  12. use app\models\Option;
  13. use app\models\Order;
  14. use app\models\Store;
  15. use yii\base\Model;
  16. use app\modules\admin\models\OrderListForm;
  17. class DeliveryOrderForm extends Model
  18. {
  19. public $state; //0=全部,1=未付款,2=待接单,3=待取货,4=配送中,5=已完成,6=已取消
  20. public $dateStart;
  21. public $dateEnd;
  22. public $mobile;
  23. public $order_no;
  24. public $name;
  25. public $store_id;
  26. public $rider_name;
  27. public function rules()
  28. {
  29. return [
  30. [[ 'state', 'status', 'is_auto', 'is_delete', 'source', 'apply_time', 'max_num', 'store_id'], 'integer'],
  31. [['dateStart', 'dateEnd', 'mobile', 'order_no', 'name', 'rider_name'], 'string', 'max' => 255]
  32. ];
  33. }
  34. public function search()
  35. {
  36. $query = Order::find()->alias('o')
  37. ->leftJoin(['di' => DeliveryInfo::tableName()], 'o.order_no = di.order_no')
  38. ->where(['o.order_type' => Order::ORDER_TYPE_STORE, 'di.is_local' => 1])
  39. ->select('o.*,di.fee,di.rider_id,di.rider_name,di.rider_mobile,di.local_status,di.serial_num, o.send_time rider_time, di.is_store_delivery_type')->orderBy('o.created_at DESC');;
  40. if ($this->store_id > 0) {
  41. $query->andWhere(['o.store_id' => $this->store_id]);
  42. }
  43. switch ($this->state) {
  44. case 1:
  45. //未付款
  46. $query->andWhere(['<>', 'o.trade_status', Order::ORDER_FLOW_CANCEL])->andWhere(['o.is_delete' => Order::IS_DELETE_FALSE, 'o.is_pay' => Order::IS_PAY_FALSE]);
  47. break;
  48. case 2:
  49. //待接单
  50. $query->andWhere([
  51. 'o.trade_status' => Order::ORDER_FLOW_NO_SEND,
  52. 'o.is_delete' => Order::IS_DELETE_FALSE
  53. ])->andWhere(['or', ['o.is_pay' => Order::IS_PAY_TRUE], ['o.pay_type' => Order::PAY_TYPE_COD]]);
  54. break;
  55. case 3:
  56. //待取货
  57. $query->andWhere([
  58. 'o.trade_status' => Order::ORDER_FLOW_SEND,
  59. 'o.is_delete' => Order::IS_DELETE_FALSE,
  60. 'di.local_status' => DeliveryInfo::LOCAL_STATUS_WAITING,
  61. ])->andWhere(['or', ['o.is_pay' => Order::IS_PAY_TRUE], ['o.pay_type' => Order::PAY_TYPE_COD]]);
  62. break;
  63. case 4:
  64. //配送中
  65. $query->andWhere([
  66. 'o.trade_status' => Order::ORDER_FLOW_SEND,
  67. 'o.is_delete' => Order::IS_DELETE_FALSE,
  68. 'di.local_status' => DeliveryInfo::LOCAL_STATUS_SENDING,
  69. ])->andWhere(['or', ['o.is_pay' => Order::IS_PAY_TRUE], ['o.pay_type' => Order::PAY_TYPE_COD]]);
  70. break;
  71. case 5:
  72. //已完成
  73. $query->andWhere([
  74. 'o.trade_status' => Order::ORDER_FLOW_CONFIRM,
  75. 'o.is_delete' => Order::IS_DELETE_FALSE
  76. ])->andWhere(['or', ['o.is_pay' => Order::IS_PAY_TRUE], ['o.pay_type' => Order::PAY_TYPE_COD]]);
  77. break;
  78. case 6:
  79. //已取消
  80. $query->andWhere(['or', ['o.trade_status' => Order::ORDER_FLOW_CANCEL],
  81. ['o.is_delete' => Order::IS_DELETE_TRUE]]);
  82. break;
  83. default:
  84. $query->andWhere([
  85. 'o.is_delete' => Order::IS_DELETE_FALSE
  86. ]);
  87. break;
  88. }
  89. if ($this->dateStart) {
  90. $query->andWhere(['>=', 'o.created_at', strtotime($this->dateStart)]);
  91. }
  92. if ($this->dateEnd) {
  93. $query->andWhere(['<=', 'o.created_at', strtotime($this->dateEnd)]);
  94. }
  95. if ($this->rider_name) {
  96. $query->andWhere(['LIKE', 'di.rider_name', $this->rider_name]);
  97. }
  98. if ($this->mobile) {
  99. $query->andWhere(['like', 'o.mobile', $this->mobile]);
  100. }
  101. if ($this->order_no) {
  102. $query->andWhere(['like', 'o.order_no', $this->order_no]);
  103. }
  104. if (!empty($this->name)) {
  105. $query->andWhere(['like', 'o.name', $this->name]);
  106. }
  107. $list = pagination_make($query);
  108. foreach ($list['list'] as &$val) {
  109. $val['is_store_delivery_type'] = intval($val['is_store_delivery_type']);
  110. $val['is_pay'] = intval($val['is_pay']);
  111. $val['pay_time'] = $val['pay_time'] > 0 ? date('Y-m-d H:i:s',$val['pay_time']) : '';
  112. $val['rider_time'] = $val['rider_time'] > 0 ? date('Y-m-d H:i:s',$val['rider_time']) : '';
  113. $val['created_at'] = date('Y-m-d H:i:s',$val['created_at']);
  114. switch ($val['trade_status']) {
  115. case 0:
  116. $val['order_status'] = '待接单';
  117. $val['order_status_color'] = "#C6C6C6";
  118. break;
  119. case 1:
  120. $val['order_status'] = '已取消';
  121. $val['order_status_color'] = "rgba(0, 0, 0, 0.25)";
  122. break;
  123. case 2:
  124. if($val['local_status'] == DeliveryInfo::LOCAL_STATUS_SENDING) {
  125. $val['order_status'] = '配送中';
  126. $val['order_status_color'] = "#1890FF";
  127. } elseif($val['local_status'] == DeliveryInfo::LOCAL_STATUS_WAITING) {
  128. $val['order_status'] = '待取货';
  129. $val['order_status_color'] = "#FAAD14";
  130. } elseif($val['local_status'] == DeliveryInfo::LOCAL_STATUS_CONFIRM) {
  131. $val['order_status'] = '已送达';
  132. $val['order_status_color'] = "#65C817";
  133. } else {
  134. $val['order_status'] = '订单状态异常:1';
  135. $val['order_status_color'] = "rgba(0, 0, 0, 0.25)";
  136. }
  137. break;
  138. case 3:
  139. if($val['local_status'] == DeliveryInfo::LOCAL_STATUS_CONFIRM) {
  140. $val['order_status'] = '已完成';
  141. $val['order_status_color'] = "#65C817";
  142. } else {
  143. $val['order_status'] = '订单状态异常:2';
  144. $val['order_status_color'] = "rgba(0, 0, 0, 0.25)";
  145. }
  146. break;
  147. default:
  148. if($val['is_pay'] == 0 && $val['is_delete'] == 0) {
  149. $val['order_status'] = '未付款';
  150. $val['order_status_color'] = "rgba(0, 0, 0, 0.25)";
  151. } else {
  152. $val['order_status'] = '订单状态异常:3';
  153. $val['order_status_color'] = "rgba(0, 0, 0, 0.25)";
  154. }
  155. break;
  156. }
  157. $form = new OrderListForm();
  158. $val['goods_list'] = $form->getOrderGoodsList($val['id']);
  159. $store = Store::findOne($val['store_id']);
  160. $val['store_name'] = !empty($store) ? $store->name : '';
  161. $val['store_info'] = [
  162. 'longitude' => $store->longitude,
  163. 'latitude' => $store->latitude
  164. ];
  165. if($val['mch_id']){
  166. $mch = \app\models\Mch::findOne($val['mch_id']);
  167. $val['store_name'] .= '-入驻商:' . $mch->name;
  168. $val['store_info'] = [
  169. 'longitude' => $mch->longitude,
  170. 'latitude' => $mch->latitude
  171. ];
  172. }
  173. $val['address_data'] = json_decode($val['address_data'], true);
  174. if (intval($val['is_delivery']) === 0 && $val['md_id'] > 0) {
  175. $md_info = Md::findOne($val['md_id']);
  176. $district = implode('', District::find()->where(['id' => [$md_info->province ?? 0, $md_info->city ?? 0, $md_info->district ?? 0]])->select('name')->column());
  177. $val['address'] = $district . $md_info->address;
  178. }
  179. }
  180. $tencent_map_key = Option::get('tencent_map_key', 0, 'saas', '')['value'];
  181. if ($this->store_id > 0) {
  182. $tencent_map_key = Option::get(OptionSetting::TENCENT_MAP_KEY, $this->store_id, 'pay', Option::get(OptionSetting::TENCENT_MAP_KEY, $this->store_id, 'store', '')['value'] ?: $tencent_map_key)['value'];
  183. }
  184. $data = [
  185. 'data' => $list['list'],
  186. 'pageNo' => $list['pageNo'],
  187. 'totalCount' => $list['totalCount'],
  188. 'tencent_map_key' => $tencent_map_key
  189. ];
  190. return [
  191. 'code' => 0,
  192. 'msg' => 'success',
  193. 'data' => $data
  194. ];
  195. }
  196. }