AdoptCostOrderListForm.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\plugins\adopt\models\client;
  8. use app\constants\OptionSetting;
  9. use app\models\Goods;
  10. use app\models\GoodsBook;
  11. use app\models\Mch;
  12. use app\models\Option;
  13. use app\models\Order;
  14. use app\models\OrderDetail;
  15. use app\models\OrderRefund;
  16. use app\modules\client\models\v1\order\OrderForm;
  17. use app\plugins\adopt\models\AdoptCostOrder;
  18. use app\plugins\adopt\models\AdoptOrderInfo;
  19. use app\utils\Delivery\Delivery;
  20. use yii\base\BaseObject;
  21. use yii\data\Pagination;
  22. use app\utils\Notice\NoticeAction;
  23. use yii\helpers\Json;
  24. use app\models\DeliveryInfo;
  25. class AdoptCostOrderListForm extends OrderForm
  26. {
  27. public $store_id;
  28. public $user_id;
  29. public $status;
  30. public $delivery_status;
  31. public $delivery_type;
  32. public $page;
  33. public $limit = 20;
  34. public $order_id;
  35. public $order_no;
  36. public $key;
  37. public $nowlatitude;
  38. public $nowlongitude;
  39. public function rules()
  40. {
  41. return [
  42. [['page', 'limit', 'status', 'delivery_type'], 'integer'],
  43. [['page'], 'default', 'value' => 1],
  44. [['limit'], 'default', 'value' => 20],
  45. [['order_no'], 'default', 'value' => 0],
  46. [['order_id', 'key'],'trim'],
  47. [['nowlongitude', 'nowlatitude'], 'safe'],
  48. ];
  49. }
  50. public function search()
  51. {
  52. if (!$this->validate()) {
  53. return [
  54. 'code' => 1,
  55. 'msg' => $this->getErrorSummary(false)[0],
  56. ];
  57. }
  58. $query = AdoptCostOrder::find()->where([
  59. 'is_delete' => 0,
  60. 'store_id' => $this->store_id,
  61. 'user_id' => $this->user_id,
  62. 'user_delete' => 0
  63. ]);
  64. if (isset($this->status) && $this->status > -1) {
  65. $query->andWhere([
  66. '<>', 'trade_status', Order::ORDER_FLOW_CANCEL
  67. ]);
  68. }
  69. if (get_md_id()) {
  70. $query->andWhere(['md_id' => get_md_id()]);
  71. }
  72. if ($this->status == 0) {//待付款
  73. $query->andWhere([
  74. 'is_pay' => Order::IS_PAY_FALSE,
  75. ])->andWhere(['!=', 'pay_type' , 2])->andWhere(['!=', 'trade_status', 1]);
  76. }
  77. if ($this->status == 1) {//待发货
  78. $query->andWhere([
  79. 'or',
  80. ['trade_status' => Order::ORDER_FLOW_NO_SEND],
  81. ['pay_type' => 2, 'trade_status' => Order::ORDER_FLOW_DEFAULT]
  82. ])->andWhere(['or', ['is_pay' => 1], ['pay_type' => 2]]);
  83. }
  84. if ($this->status == 2) {//待收货
  85. $query->andWhere([
  86. 'trade_status' => Order::ORDER_FLOW_SEND,
  87. ]);
  88. }
  89. if ($this->status == 3) {//已完成
  90. $query->andWhere([
  91. 'trade_status' => Order::ORDER_FLOW_CONFIRM,
  92. ]);
  93. }
  94. $query->andWhere(['is_recycle' => 0]);
  95. $count = $query->count();
  96. $pagination = new Pagination(['totalCount' => $count, 'page' => $this->page - 1, 'pageSize' => $this->limit]);
  97. /* @var Order[] $list */
  98. $list = $query->limit($pagination->limit)->offset($pagination->offset)->orderBy('created_at DESC')->all();
  99. $new_list = [];
  100. foreach ($list as $order) {
  101. // // 预约订单超过15分钟未支付自动取消
  102. // if (time() - $order->created_at > 15 * 60 && $order->trade_status != Order::ORDER_FLOW_CANCEL && $order->is_pay == 0 && $order->pay_type != 2) {
  103. // $order->trade_status = Order::ORDER_FLOW_CANCEL;
  104. // $order->updated_at = time();
  105. // $order->save();
  106. // }
  107. $order_detail_list = OrderDetail::findAll(['order_id' => $order->order_id, 'is_delete' => 0]);
  108. $goods_list = [];
  109. foreach ($order_detail_list as $order_detail) {
  110. $goods = Json::encode($order_detail->goods_info);
  111. if (!$goods) {
  112. continue;
  113. }
  114. $goods_pic = isset($order_detail->pic) ? $order_detail->pic : $goods['cover_pic'];
  115. $goods_list[] = (object)[
  116. 'goods_id' => isset($goods['id']) ? $goods['id'] : $order_detail->goods_id,
  117. 'goods_pic' => $goods_pic,
  118. 'goods_name' => $order_detail->goods_name,
  119. 'num' => $order_detail->num,
  120. 'price' => $order_detail->total_price,
  121. 'attr_list' => json_decode($order_detail->attr),
  122. ];
  123. }
  124. $qrcode = null;
  125. if ($order->mch_id) {
  126. $mch = Mch::findOne($order->mch_id);
  127. $mch = [
  128. 'id' => $mch->id,
  129. 'name' => $mch->name,
  130. 'logo' => $mch->logo,
  131. ];
  132. } else {
  133. $mch = [
  134. 'id' => 0,
  135. 'name' => '平台自营',
  136. 'logo' => '',
  137. ];
  138. }
  139. $orderRefund = OrderRefund::find()->where(['store_id' => $order->store_id, 'order_id' => $order->id])->exists();
  140. $deliveryInfo = null;
  141. if ($order->is_delivery == 1) {
  142. $deliveryInfo = DeliveryInfo::find()->where(['order_no' => $order->order_no])->one();
  143. }
  144. $is_order_refund = $order_refund_enable = 0;
  145. if ($orderRefund) {
  146. $is_order_refund = 1;
  147. } else {
  148. $is_order_refund = 0;
  149. }
  150. if ($order->is_pay == 1 && ($order->trade_status == Order::ORDER_FLOW_SEND || $order->trade_status == Order::ORDER_FLOW_CONFIRM)) {
  151. $order_refund_enable = 1;
  152. } else {
  153. $order_refund_enable = 0;
  154. }
  155. if ($order->trade_status == Order::ORDER_FLOW_CONFIRM) {
  156. $after_sale_time = Option::get(OptionSetting::STORE_AFTER_SALE_TIME, $this->store_id);
  157. if ((time() - $order->confirm_time) > $after_sale_time['value'] * 86400) {//超过可售后时间
  158. $order_refund_enable = 0;
  159. }
  160. }
  161. $adopt_order = Order::find()->alias('o')
  162. ->leftJoin(['aoi' => AdoptOrderInfo::tableName()], 'o.id = aoi.order_id')
  163. ->where([
  164. 'o.id' => $order->order_id,
  165. 'o.store_id' => $this->store_id,
  166. 'o.order_type' => 5
  167. ])->select(['o.order_no','aoi.harvest_weight'])->asArray()->one();
  168. $new_list[] = (object)[
  169. 'is_order_refund' => $is_order_refund,
  170. 'order_refund_enable' => $order_refund_enable,
  171. 'order_id' => $order->id,
  172. 'order_no' => $order->order_no,
  173. 'add_time' => $order->created_at,
  174. 'goods_list' => $goods_list,
  175. 'total_price' => $order->total_price,
  176. 'pay_price' => $deliveryInfo ? sprintf("%1.2f", $order->pay_price + $deliveryInfo->fee) : $order->pay_price,
  177. 'is_pay' => $order->is_pay,
  178. 'is_comment' => $order->is_comment,
  179. 'is_offline' => $order->is_offline,
  180. 'qrcode' => $qrcode,
  181. 'offline_qrcode' => $order->offline_qrcode,
  182. 'express' => $order->express,
  183. 'mch' => $mch,
  184. 'pay_type' => $order->pay_type,
  185. 'refund' => $orderRefund,
  186. 'apply_delete' => $order->apply_delete,
  187. 'trade_status' => $order->trade_status,
  188. 'delivery_fee' => $deliveryInfo ? $deliveryInfo->fee : 0,
  189. 'is_delivery' => $order->is_delivery,
  190. 'order_type' => $order->order_type,
  191. 'weight' => $order->weight,
  192. 'adopt_order_no' => $adopt_order['order_no'],
  193. 'harvest_weight' => $adopt_order['harvest_weight'],
  194. ];
  195. }
  196. $pay_type_list = OrderForm::getPayType([],['huodao']);
  197. return [
  198. 'code' => 0,
  199. 'msg' => 'success',
  200. 'data' => [
  201. 'row_count' => $count,
  202. 'page_count' => $pagination->pageCount,
  203. 'list' => $new_list,
  204. 'pay_type_list' => $pay_type_list,
  205. 'revoke_tpl'=>'',
  206. 'template_id' => NoticeAction::getSendTamplateId(['order_cancel']),
  207. 'cancel_reason' => Delivery::$validReason
  208. ],
  209. ];
  210. }
  211. public static function getCountData($store_id, $user_id)
  212. {
  213. $form = new OrderListForm();
  214. $form->limit = 1;
  215. $form->store_id = $store_id;
  216. $form->user_id = $user_id;
  217. $data = [];
  218. $form->status = -1;
  219. $res = $form->searchOrderCount();
  220. $data['all'] = $res;
  221. $form->status = 0;
  222. $res = $form->searchOrderCount();
  223. $data['status_0'] = $res;
  224. $form->status = 1;
  225. $res = $form->searchOrderCount();
  226. $data['status_1'] = $res;
  227. $form->status = 2;
  228. $res = $form->searchOrderCount();
  229. $data['status_2'] = $res;
  230. $form->status = 3;
  231. $res = $form->searchOrderCount();
  232. $data['status_3'] = $res;
  233. return $data;
  234. }
  235. /**
  236. * 获取订单数方法
  237. * @return array|int|string
  238. */
  239. public function searchOrderCount()
  240. {
  241. $query = Order::find()->where([
  242. 'is_delete' => 0,
  243. 'user_delete' => 0,
  244. 'store_id' => $this->store_id,
  245. 'user_id' => $this->user_id,
  246. ]);
  247. if (get_md_id()) {
  248. $query->andWhere(['md_id' => get_md_id()]);
  249. }
  250. if (isset($this->status) && $this->status > -1) {
  251. $query->andWhere([
  252. '<>', 'trade_status', Order::ORDER_FLOW_CANCEL
  253. ]);
  254. }
  255. if ($this->status == 0) {//待付款
  256. $query->andWhere([
  257. 'is_pay' => Order::IS_PAY_FALSE,
  258. ])->andWhere(['!=', 'pay_type' , 2]);
  259. }
  260. if ($this->status == 1) {//待发货
  261. $query->andWhere([
  262. 'trade_status' => Order::ORDER_FLOW_NO_SEND,
  263. ])->andWhere(['or', ['is_pay' => 1], ['pay_type' => 2]]);
  264. }
  265. if ($this->status == 2) {//待收货
  266. $query->andWhere([
  267. 'trade_status' => Order::ORDER_FLOW_SEND,
  268. ]);
  269. }
  270. if ($this->status == 3) {//已完成
  271. $query->andWhere([
  272. 'trade_status' => Order::ORDER_FLOW_CONFIRM,
  273. ]);
  274. }
  275. $query->andWhere(['is_recycle' => 0]);
  276. return $query->count();
  277. }
  278. }