AdoptOrderListForm.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617
  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\AdoptGoods;
  19. use app\plugins\adopt\models\AdoptOrderInfo;
  20. use app\utils\Delivery\Delivery;
  21. use yii\base\BaseObject;
  22. use yii\data\Pagination;
  23. use app\utils\Notice\NoticeAction;
  24. use yii\helpers\Json;
  25. use app\models\DeliveryInfo;
  26. class AdoptOrderListForm extends OrderForm
  27. {
  28. public $store_id;
  29. public $user_id;
  30. public $status;
  31. public $delivery_status;
  32. public $delivery_type;
  33. public $page;
  34. public $limit = 20;
  35. public $order_id;
  36. public $order_no;
  37. public $key;
  38. public $nowlatitude;
  39. public $nowlongitude;
  40. public function rules()
  41. {
  42. return [
  43. [['page', 'limit', 'status', 'delivery_type'], 'integer'],
  44. [['page'], 'default', 'value' => 1],
  45. [['limit'], 'default', 'value' => 20],
  46. [['order_no'], 'default', 'value' => 0],
  47. [['order_id', 'key'],'trim'],
  48. [['nowlongitude', 'nowlatitude'], 'safe'],
  49. ];
  50. }
  51. public function search()
  52. {
  53. if (!$this->validate()) {
  54. return [
  55. 'code' => 1,
  56. 'msg' => $this->getErrorSummary(false)[0],
  57. ];
  58. }
  59. $query = Order::find()->alias('o')
  60. ->leftJoin(['aoi' => AdoptOrderInfo::tableName()], 'o.id = aoi.order_id')
  61. ->where([
  62. 'o.is_delete' => 0,
  63. 'o.store_id' => $this->store_id,
  64. 'o.user_id' => $this->user_id,
  65. 'o.user_delete' => 0,
  66. 'o.order_type' => 5
  67. ]);
  68. if (isset($this->status) && $this->status > -1) {
  69. $query->andWhere([
  70. '<>', 'o.trade_status', Order::ORDER_FLOW_CANCEL
  71. ]);
  72. }
  73. if (get_md_id()) {
  74. $query->andWhere(['o.md_id' => get_md_id()]);
  75. }
  76. if ($this->status == 0) {//待付款
  77. $query->andWhere([
  78. 'o.is_pay' => Order::IS_PAY_FALSE,
  79. ])->andWhere(['!=', 'o.pay_type' , 2])->andWhere(['!=', 'o.trade_status', 1]);
  80. }
  81. if ($this->status == 1) {//待成熟
  82. $query->andWhere([
  83. 'aoi.is_mature' => AdoptOrderInfo::ORDER_FLOW_NO_MATURE,
  84. 'o.is_delete' => Order::IS_DELETE_FALSE
  85. ])->andWhere(['or', ['o.is_pay' => 1], ['o.pay_type' => 2]]);
  86. }
  87. if ($this->status == 2) {//已成熟
  88. $query->andWhere([
  89. 'aoi.is_mature' => AdoptOrderInfo::ORDER_FLOW_MATURE,
  90. 'aoi.is_preserve' => AdoptOrderInfo::ORDER_FLOW_WAIT_PRESERVE,
  91. 'o.is_delete' => Order::IS_DELETE_FALSE,
  92. ])->andWhere(['!=', 'o.trade_status' , Order::ORDER_FLOW_CONFIRM]);
  93. // ->andWhere(['or', ['aoi.pick_method' => AdoptOrderInfo::ORDER_FLOW_SELF_PICK], ['aoi.pick_method' => AdoptOrderInfo::ORDER_FLOW_OTHER_PICK]]);
  94. }
  95. if ($this->status == 3) {//托管中
  96. $query->andWhere([
  97. 'aoi.is_preserve' => AdoptOrderInfo::ORDER_FLOW_PRESERVE,
  98. 'o.is_delete' => Order::IS_DELETE_FALSE,
  99. 'aoi.pick_treatment_method' => AdoptOrderInfo::ORDER_FLOW_PICK_STORAGE,
  100. ])->andWhere(['!=', 'o.trade_status' , Order::ORDER_FLOW_CONFIRM]);
  101. }
  102. if ($this->status == 4) {//已完成
  103. $query->andWhere([
  104. 'o.trade_status' => Order::ORDER_FLOW_CONFIRM,
  105. ]);
  106. }
  107. if ($this->status == 5) {//售后订单
  108. return $this->getRefundList();
  109. }
  110. $query->andWhere(['o.is_recycle' => 0]);
  111. $count = $query->count();
  112. $pagination = new Pagination(['totalCount' => $count, 'page' => $this->page - 1, 'pageSize' => $this->limit]);
  113. /* @var Order[] $list */
  114. $list = $query->limit($pagination->limit)->offset($pagination->offset)->orderBy('o.created_at DESC')
  115. ->select(['o.*', 'aoi.name as adopt_name', 'aoi.mobile as adopt_mobile',
  116. 'aoi.is_mature', 'aoi.mature_time', 'aoi.pick_method', 'aoi.pick_time',
  117. 'aoi.is_storage', 'aoi.storage_time', 'aoi.is_preserve', 'aoi.preserve_time', 'aoi.harvest_weight',
  118. 'aoi.confirm_self_pick', 'aoi.confirm_self_pick_time', 'aoi.harvest_storage_pic_url', 'aoi.confirm_self_pick_book',
  119. 'aoi.confirm_self_pick_book_time', 'aoi.start_self_pick', 'aoi.start_self_pick_time', 'aoi.end_self_pick',
  120. 'aoi.end_self_pick_time','aoi.pick_treatment_method', 'aoi.pick_treatment_method_time',])
  121. ->asArray()->all();
  122. $new_list = [];
  123. foreach ($list as $order) {
  124. // // 预约订单超过15分钟未支付自动取消
  125. // if (time() - $order->created_at > 15 * 60 && $order->trade_status != Order::ORDER_FLOW_CANCEL && $order->is_pay == 0 && $order->pay_type != 2) {
  126. // $order->trade_status = Order::ORDER_FLOW_CANCEL;
  127. // $order->updated_at = time();
  128. // $order->save();
  129. // }
  130. $order_detail_list = OrderDetail::findAll(['order_id' => $order['id'], 'is_delete' => 0]);
  131. $goods_list = [];
  132. foreach ($order_detail_list as $order_detail) {
  133. $goods = Json::encode($order_detail->goods_info);
  134. if (!$goods) {
  135. continue;
  136. }
  137. $goods_pic = isset($order_detail->pic) ? $order_detail->pic : $goods['cover_pic'];
  138. $adopt_goods = AdoptGoods::find()->andWhere(['goods_id' => $order_detail->goods_id])->asArray()->one();
  139. $self_pick_date = $adopt_goods['self_pick_date'] ? json_decode($adopt_goods['self_pick_date']) : [];
  140. $self_pick_date = $this->periodTime(strtotime($self_pick_date[0]),strtotime($self_pick_date[1]));
  141. $goods_list[] = (object)[
  142. 'goods_id' => isset($goods['id']) ? $goods['id'] : $order_detail->goods_id,
  143. 'goods_pic' => $goods_pic,
  144. 'goods_name' => $order_detail->goods_name,
  145. 'num' => $order_detail->num,
  146. 'price' => $order_detail->total_price,
  147. 'attr_list' => json_decode($order_detail->attr),
  148. 'self_pick_date' =>$self_pick_date,
  149. 'self_pick_times' => $adopt_goods['self_pick_times'] ? json_decode($adopt_goods['self_pick_times']) : [],
  150. ];
  151. }
  152. $qrcode = null;
  153. if ($order['mch_id']) {
  154. $mch = Mch::findOne($order['mch_id']);
  155. $mch = [
  156. 'id' => $mch->id,
  157. 'name' => $mch->name,
  158. 'logo' => $mch->logo,
  159. ];
  160. } else {
  161. $mch = [
  162. 'id' => 0,
  163. 'name' => '平台自营',
  164. 'logo' => '',
  165. ];
  166. }
  167. $orderRefund = OrderRefund::find()->where(['store_id' => $order['store_id'], 'order_id' => $order['id']])->exists();
  168. $deliveryInfo = null;
  169. if ($order['is_delivery'] == 1) {
  170. $deliveryInfo = DeliveryInfo::find()->where(['order_no' => $order['order_no']])->one();
  171. }
  172. $is_order_refund = $order_refund_enable = 0;
  173. if ($orderRefund) {
  174. $is_order_refund = 1;
  175. } else {
  176. $is_order_refund = 0;
  177. }
  178. if ($order['is_pay'] == 1 && ($order['trade_status'] == Order::ORDER_FLOW_SEND || $order['trade_status'] == Order::ORDER_FLOW_CONFIRM)) {
  179. $order_refund_enable = 1;
  180. } else {
  181. $order_refund_enable = 0;
  182. }
  183. if ($order['trade_status'] == Order::ORDER_FLOW_CONFIRM) {
  184. $after_sale_time = Option::get(OptionSetting::STORE_AFTER_SALE_TIME, $this->store_id);
  185. if ((time() - $order['confirm_time']) > $after_sale_time['value'] * 86400) {//超过可售后时间
  186. $order_refund_enable = 0;
  187. }
  188. }
  189. $status = "";
  190. $order_status_code = -1;
  191. if ($order['is_pay'] == 0) {
  192. $status = '订单未付款';
  193. $order_status_code = 0;
  194. } elseif (($order['is_pay'] == Order::IS_PAY_TRUE || $order['pay_type'] == Order::PAY_TYPE_COD) && $order['is_mature'] == AdoptOrderInfo::ORDER_FLOW_NO_MATURE) {
  195. $status = '订单待成熟';
  196. $order_status_code = 1;
  197. } elseif (($order['is_pay'] == Order::IS_PAY_TRUE || $order['pay_type'] == Order::PAY_TYPE_COD) &&
  198. $order['is_mature'] == AdoptOrderInfo::ORDER_FLOW_MATURE && $order['pick_method'] == AdoptOrderInfo::ORDER_FLOW_NO_PICK) {
  199. $status = '已成熟待收取';
  200. $order_status_code = 2;
  201. } elseif (($order['is_pay'] == Order::IS_PAY_TRUE || $order['pay_type'] == Order::PAY_TYPE_COD) &&
  202. $order['is_mature'] == AdoptOrderInfo::ORDER_FLOW_MATURE &&
  203. $order['pick_method'] == AdoptOrderInfo::ORDER_FLOW_SELF_PICK &&
  204. $order['confirm_self_pick_book'] == AdoptOrderInfo::ORDER_FLOW_NO_CONFIRM_SELF_PICK_BOOK) {
  205. $status = '待后台确认自采预约';
  206. $order_status_code = 3;
  207. } elseif (($order['is_pay'] == Order::IS_PAY_TRUE || $order['pay_type'] == Order::PAY_TYPE_COD) &&
  208. $order['is_mature'] == AdoptOrderInfo::ORDER_FLOW_MATURE &&
  209. $order['pick_method'] == AdoptOrderInfo::ORDER_FLOW_SELF_PICK &&
  210. $order['confirm_self_pick_book'] == AdoptOrderInfo::ORDER_FLOW_CONFIRM_SELF_PICK_BOOK && $order['start_self_pick'] == AdoptOrderInfo::ORDER_FLOW_NO_CONFIRM_START_SELF_PICK) {
  211. $status = '等待自采中';
  212. $order_status_code = 4;
  213. } elseif (($order['is_pay'] == Order::IS_PAY_TRUE || $order['pay_type'] == Order::PAY_TYPE_COD) &&
  214. $order['is_mature'] == AdoptOrderInfo::ORDER_FLOW_MATURE &&
  215. $order['pick_method'] == AdoptOrderInfo::ORDER_FLOW_SELF_PICK &&
  216. $order['start_self_pick'] == AdoptOrderInfo::ORDER_FLOW_CONFIRM_START_SELF_PICK &&
  217. $order['end_self_pick'] == AdoptOrderInfo::ORDER_FLOW_NO_CONFIRM_END_SELF_PICK) {
  218. $status = '自采中';
  219. $order_status_code = 5;
  220. }
  221. elseif (($order['is_pay'] == Order::IS_PAY_TRUE || $order['pay_type'] == Order::PAY_TYPE_COD) && $order['is_mature'] == AdoptOrderInfo::ORDER_FLOW_MATURE &&
  222. ($order['pick_method'] == AdoptOrderInfo::ORDER_FLOW_OTHER_PICK ) &&
  223. $order['is_storage'] == AdoptOrderInfo::ORDER_FLOW_NO_STORAGE) {
  224. $status = '农场采摘中';
  225. $order_status_code = 6;
  226. } elseif (($order['is_pay'] == Order::IS_PAY_TRUE || $order['pay_type'] == Order::PAY_TYPE_COD) &&
  227. $order['is_mature'] == AdoptOrderInfo::ORDER_FLOW_MATURE &&
  228. (($order['pick_method'] == AdoptOrderInfo::ORDER_FLOW_SELF_PICK &&
  229. $order['pick_treatment_method'] != AdoptOrderInfo::ORDER_FLOW_PICK_TAKE &&
  230. $order['end_self_pick'] == AdoptOrderInfo::ORDER_FLOW_CONFIRM_END_SELF_PICK)
  231. || $order['pick_method'] == AdoptOrderInfo::ORDER_FLOW_OTHER_PICK) &&
  232. $order['is_storage'] == AdoptOrderInfo::ORDER_FLOW_NO_STORAGE) {
  233. $status = '已收取待入库';
  234. $order_status_code = 7;
  235. } elseif (($order['is_pay'] == Order::IS_PAY_TRUE || $order['pay_type'] == Order::PAY_TYPE_COD) &&
  236. $order['is_mature'] == AdoptOrderInfo::ORDER_FLOW_MATURE &&
  237. $order['pick_treatment_method'] == AdoptOrderInfo::ORDER_FLOW_PICK_STORAGE &&
  238. $order['is_storage'] == AdoptOrderInfo::ORDER_FLOW_STORAGE && $order['is_preserve'] == AdoptOrderInfo::ORDER_FLOW_WAIT_PRESERVE) {
  239. $status = '已入库待保管';
  240. $order_status_code = 8;
  241. } elseif (($order['is_pay'] == Order::IS_PAY_TRUE || $order['pay_type'] == Order::PAY_TYPE_COD) &&
  242. $order['is_mature'] == AdoptOrderInfo::ORDER_FLOW_MATURE &&
  243. $order['pick_treatment_method'] == AdoptOrderInfo::ORDER_FLOW_PICK_STORAGE &&
  244. $order['is_storage'] == AdoptOrderInfo::ORDER_FLOW_STORAGE && $order['is_preserve'] == AdoptOrderInfo::ORDER_FLOW_PRESERVE &&
  245. $order['trade_status'] != Order::ORDER_FLOW_CONFIRM
  246. ) {
  247. $status = '保管中';
  248. $order_status_code = 9;
  249. } elseif ($order['trade_status'] == Order::ORDER_FLOW_CONFIRM) {
  250. $status = '订单已完成';
  251. $order_status_code = 10;
  252. }
  253. $adopt_cost_order = AdoptCostOrder::find()->where(['order_type' => 0, 'is_pay' => 1, 'order_id' => $order['id']])->one();
  254. $is_pay_pick_fee = $adopt_cost_order ? 1 : 0;
  255. $pick_fee_pay_status= $adopt_cost_order ? "已支付" : "未支付";
  256. $new_list[] = (object)[
  257. 'is_order_refund' => $is_order_refund,
  258. 'order_refund_enable' => $order_refund_enable,
  259. 'order_id' => $order['id'],
  260. 'order_no' => $order['order_no'],
  261. 'add_time' => $order['created_at'],
  262. 'goods_list' => $goods_list,
  263. 'total_price' => $order['total_price'],
  264. 'pay_price' => $deliveryInfo ? sprintf("%1.2f", $order['pay_price'] + $deliveryInfo->fee) : $order['pay_price'],
  265. 'is_pay' => $order['is_pay'],
  266. 'is_comment' => $order['is_comment'],
  267. 'is_offline' => $order['is_offline'],
  268. 'qrcode' => $qrcode,
  269. 'offline_qrcode' => $order['offline_qrcode'],
  270. 'express' => $order['express'],
  271. 'mch' => $mch,
  272. 'type' => $order['type'],
  273. 'pay_type' => $order['pay_type'],
  274. 'refund' => $orderRefund,
  275. 'apply_delete' => $order['apply_delete'],
  276. 'trade_status' => $order['trade_status'],
  277. 'status' => $status,
  278. 'status_code' => $order_status_code,
  279. 'delivery_fee' => $deliveryInfo ? $deliveryInfo->fee : 0,
  280. 'is_delivery' => $order['is_delivery'],
  281. 'order_type' => $order['order_type'],
  282. 'adopt_name' => $order['adopt_name'],
  283. 'adopt_mobile' => $order['adopt_mobile'],
  284. 'is_mature' => $order['is_mature'],
  285. 'mature_time' => date('Y-m-d H:i:s', $order['mature_time']),
  286. 'pick_method' => $order['pick_method'],
  287. 'pick_time' => date('Y-m-d H:i:s', $order['pick_time']),
  288. 'is_storage' => $order['is_storage'],
  289. 'storage_time' => date('Y-m-d H:i:s', $order['storage_time']),
  290. 'is_preserve' => $order['is_preserve'],
  291. 'preserve_time' => date('Y-m-d H:i:s', $order['preserve_time']),
  292. 'harvest_weight' => $order['harvest_weight'],
  293. 'is_pay_pick_fee' => $is_pay_pick_fee,
  294. 'pick_fee_pay_status' => $pick_fee_pay_status,
  295. 'confirm_self_pick' => $order['confirm_self_pick'],
  296. 'confirm_self_pick_time' => $order['confirm_self_pick_time'],
  297. 'harvest_storage_pic_url' => $order['harvest_storage_pic_url'],
  298. 'confirm_self_pick_book' => $order['confirm_self_pick_book'],
  299. 'confirm_self_pick_book_time' => date('Y-m-d H:i:s', $order['confirm_self_pick_book_time']),
  300. 'start_self_pick' => $order['start_self_pick'],
  301. 'start_self_pick_time' => date('Y-m-d H:i:s', $order['start_self_pick_time']),
  302. 'end_self_pick' => $order['end_self_pick'],
  303. 'end_self_pick_time' => date('Y-m-d H:i:s', $order['end_self_pick_time']),
  304. 'pick_treatment_method' => $order['pick_treatment_method'],
  305. 'pick_treatment_method_time' => date('Y-m-d H:i:s', $order['pick_treatment_method_time']),
  306. ];
  307. }
  308. $pay_type_list = OrderForm::getPayType([],['huodao']);
  309. return [
  310. 'code' => 0,
  311. 'msg' => 'success',
  312. 'data' => [
  313. 'row_count' => $count,
  314. 'page_count' => $pagination->pageCount,
  315. 'list' => $new_list,
  316. 'pay_type_list' => $pay_type_list,
  317. 'revoke_tpl'=>'',
  318. 'self_pick_template_id' => NoticeAction::getSendTamplateId(['adopt_order_self_pick','adopt_order_confirm_self_pick_book']),
  319. 'other_pick_template_id' => NoticeAction::getSendTamplateId(['adopt_order_other_pick','adopt_order_confirm_storage', 'adopt_storage']),
  320. 'take_delivery_template_id' => NoticeAction::getSendTamplateId(['order_pay', 'order_submit', 'order_send']),
  321. 'start_self_pick_template_id' => NoticeAction::getSendTamplateId(['adopt_order_start_self_pick','adopt_order_end_self_pick']),
  322. 'end_self_pick_template_id' => NoticeAction::getSendTamplateId(['adopt_order_end_self_pick', 'adopt_order_confirm_self_pick_finish']),
  323. 'pick_take_template_id' => NoticeAction::getSendTamplateId(['adopt_order_pick_take',]),
  324. 'storage_template_id' => NoticeAction::getSendTamplateId(['adopt_order_storage', 'adopt_order_confirm_storage','adopt_storage']),
  325. 'preserve_template_id' => NoticeAction::getSendTamplateId(['adopt_order_preserve', 'adopt_preserve']),
  326. 'no_preserve_template_id' => NoticeAction::getSendTamplateId(['adopt_order_no_preserve']),
  327. 'cancel_reason' => Delivery::$validReason
  328. ],
  329. ];
  330. }
  331. function periodTime($beginTime, $endTime) {
  332. $i = 0;
  333. $arr = [];
  334. while ($beginTime <= $endTime) {
  335. $arr[$i] = date('Y-m-d',$beginTime);
  336. $beginTime = strtotime('+1 day', $beginTime);
  337. $i++;
  338. }
  339. return $arr;
  340. }
  341. private function getRefundList()
  342. {
  343. $query = OrderRefund::find()->alias('or')
  344. ->leftJoin(['od' => OrderDetail::tableName()], 'od.id=or.order_detail_id')
  345. ->leftJoin(['o' => Order::tableName()], 'o.id=or.order_id')
  346. ->where([
  347. 'or.store_id' => $this->store_id,
  348. 'or.user_id' => $this->user_id,
  349. 'or.is_delete' => 0,
  350. 'o.is_delete' => 0,
  351. 'od.is_delete' => 0,
  352. ]);
  353. if($this->order_id){
  354. $query->andWhere(['o.id' => $this->order_id]);
  355. }
  356. $count = $query->count();
  357. $pagination = new Pagination(['totalCount' => $count, 'page' => $this->page - 1, 'pageSize' => $this->limit]);
  358. $list = $query->select('o.id AS order_id,o.order_no,or.id AS order_refund_id,od.goods_id,or.created_at,od.num,od.total_price,od.attr,or.refund_price,or.type,or.status,or.is_agree,or.is_user_send,od.goods_info, od.goods_name, od.pic')
  359. ->limit($pagination->limit)->offset($pagination->offset)->orderBy('or.id DESC')->asArray()->all();
  360. $new_list = [];
  361. foreach ($list as $item) {
  362. $goods = Json::decode($item['goods_info']) ?:Goods::find()->where(['id' => $item['goods_id']])->asArray()->one();
  363. if (!$goods) {
  364. continue;
  365. }
  366. $new_list[] = (object)[
  367. 'order_id' => intval($item['order_id']),
  368. 'order_no' => $item['order_no'],
  369. 'goods_list' => [(object)[
  370. 'goods_id' => intval($goods->id),
  371. 'goods_pic' => $item['pic'] ?: $goods['cover_pic'],
  372. 'goods_name' => $item['goods_name'],
  373. 'num' => intval($item['num']),
  374. 'price' => doubleval(sprintf('%.2f', $item['total_price'])),
  375. 'attr_list' => json_decode($item['attr']),
  376. ]],
  377. 'addtime' => date('Y-m-d H:i', $item['created_at']),
  378. 'refund_price' => doubleval(sprintf('%.2f', $item['refund_price'])),
  379. 'refund_type' => $item['type'],
  380. 'refund_status' => $item['status'],
  381. 'order_refund_id' => $item['order_refund_id'],
  382. 'is_agree' => $item['is_agree'],
  383. 'is_user_send' => $item['is_user_send'],
  384. ];
  385. }
  386. return [
  387. 'code' => 0,
  388. 'msg' => 'success',
  389. 'data' => [
  390. 'row_count' => $count,
  391. 'page_count' => $pagination->pageCount,
  392. 'list' => $new_list,
  393. ],
  394. ];
  395. }
  396. public function getNewRefundList()
  397. {
  398. $after_sale_time = Option::get(OptionSetting::STORE_AFTER_SALE_TIME, $this->store_id);
  399. $new_list = [];
  400. if (!$this->status) {
  401. $query = Order::find()->alias('o')
  402. ->where([
  403. 'o.store_id' => $this->store_id,
  404. 'o.user_id' => $this->user_id,
  405. 'o.is_delete' => 0,
  406. ]);
  407. if (get_md_id()) {
  408. $query->andWhere(['o.md_id' => get_md_id()]);
  409. }
  410. $query->andWhere(['o.trade_status' => Order::ORDER_FLOW_CONFIRM]);
  411. $query->andWhere(['>', 'o.confirm_time', time() - $after_sale_time['value'] * 86400]);
  412. $list = $query->select('o.pay_price, o.confirm_time, o.id AS order_id,o.order_no,o.created_at')->orderBy('o.id DESC')->asArray()->all();
  413. foreach ($list as $item) {
  414. $detail_goods = OrderDetail::find()->where(['order_id' => $item['order_id'], 'is_refund' => 0])->asArray()->all();
  415. if (empty($detail_goods)) {
  416. continue;
  417. }
  418. $detail_goods = OrderDetail::find()->where(['order_id' => $item['order_id']])->asArray()->all();
  419. $order_data = [
  420. 'order_id' => intval($item['order_id']),
  421. 'order_no' => $item['order_no'],
  422. 'pay_price' => $item['pay_price'],
  423. 'goods_list' => [],
  424. 'addtime' => date('Y-m-d H:i', $item['created_at']),
  425. 'refund_price' => isset($item['refund_price']) ? doubleval(sprintf('%.2f', $item['refund_price'])) : 0,
  426. 'refund_type' => isset($item['type']) ? $item['type'] : 0,
  427. 'refund_status' => isset($item['status']) ? $item['status'] : 0,
  428. 'order_refund_id' => isset($item['order_refund_id']) ? $item['order_refund_id'] : 0,
  429. 'is_agree' => isset($item['is_agree']) ? $item['is_agree'] : 0,
  430. 'is_user_send' => isset($item['is_user_send']) ? $item['is_user_send'] : 0,
  431. ];
  432. $goods_list = [];
  433. foreach ($detail_goods as $detail) {
  434. $goods_list[] = [
  435. 'goods_id' => intval($detail['goods_id']),
  436. 'goods_pic' => $detail['pic'],
  437. 'goods_name' => $detail['goods_name'],
  438. 'num' => intval($detail['num']),
  439. 'price' => doubleval(sprintf('%.2f', $detail['total_price'])),
  440. 'attr_list' => json_decode($detail['attr']),
  441. ];
  442. }
  443. $order_data['goods_list'] = $goods_list;
  444. $new_list[] = $order_data;
  445. }
  446. }
  447. // 处理中 或者 已完成
  448. if ($this->status == 1 || $this->status == 2) {
  449. $query = OrderRefund::find()->alias('or')
  450. ->leftJoin(['o' => Order::tableName()], 'o.id=or.order_id')
  451. ->where([
  452. 'or.store_id' => $this->store_id,
  453. 'or.user_id' => $this->user_id,
  454. 'or.is_delete' => 0,
  455. 'o.is_delete' => 0,
  456. 'or.user_delete' => 0
  457. ]);
  458. if (get_md_id()) {
  459. $query->andWhere(['or.md_id' => get_md_id()]);
  460. }
  461. if ($this->status == 1) {
  462. $query->andWhere(['or.status' => OrderRefund::STATUS_IN, 'or.is_user_cancel' => 0]);
  463. }
  464. if ($this->status == 2) {
  465. $query->andWhere(['or', ['or.is_user_cancel' => 1], ['in', 'or.status', OrderRefund::$is_handle_status]]);
  466. }
  467. $list = $query->select('or.is_user_cancel, or.order_detail_id,o.pay_price, o.confirm_time, o.id AS order_id,o.order_no,or.id AS order_refund_id,or.created_at,or.refund_price,or.type,or.status,or.is_agree,or.is_user_send')->orderBy('or.id DESC')->asArray()->all();
  468. if (!empty($list)) {
  469. foreach ($list as $item) {
  470. $order_data = [
  471. 'is_user_cancel' => intval($item['is_user_cancel']),
  472. 'order_id' => intval($item['order_id']),
  473. 'order_no' => $item['order_no'],
  474. 'pay_price' => $item['pay_price'],
  475. 'goods_list' => [],
  476. 'addtime' => date('Y-m-d H:i', $item['created_at']),
  477. 'refund_price' => isset($item['refund_price']) ? doubleval(sprintf('%.2f', $item['refund_price'])) : 0,
  478. 'refund_type' => isset($item['type']) ? $item['type'] : 0,
  479. 'refund_status' => isset($item['status']) ? $item['status'] : 0,
  480. 'order_refund_id' => isset($item['order_refund_id']) ? $item['order_refund_id'] : 0,
  481. 'is_agree' => isset($item['is_agree']) ? $item['is_agree'] : 0,
  482. 'is_user_send' => isset($item['is_user_send']) ? $item['is_user_send'] : 0,
  483. ];
  484. $detail_id = Json::decode($item['order_detail_id']);
  485. $detail_goods = OrderDetail::find()->where(['order_id' => $item['order_id'], 'is_refund' => 1])->andWhere(['in', 'id', $detail_id])->asArray()->all();
  486. $goods_list = [];
  487. $price = 0;
  488. foreach ($detail_goods as $detail) {
  489. $goods_list[] = [
  490. 'goods_id' => intval($detail['goods_id']),
  491. 'goods_pic' => $detail['pic'],
  492. 'goods_name' => $detail['goods_name'],
  493. 'num' => intval($detail['num']),
  494. 'price' => doubleval(sprintf('%.2f', $detail['total_price'])),
  495. 'attr_list' => json_decode($detail['attr']),
  496. 'is_refund' => $detail['is_refund']
  497. ];
  498. $price += $detail['total_price'];
  499. }
  500. $order_data['pay_price'] = $price;
  501. $order_data['goods_list'] = $goods_list;
  502. $new_list[] = $order_data;
  503. }
  504. }
  505. }
  506. $data = array_slice($new_list, ($this->page - 1) * $this->limit, $this->limit);
  507. return [
  508. 'code' => 0,
  509. 'msg' => 'success',
  510. 'data' => [
  511. 'row_count' => count($new_list),
  512. 'page_count' => ceil(count($new_list) / $this->limit),
  513. 'list' => $data,
  514. ],
  515. ];
  516. }
  517. public static function getCountData($store_id, $user_id)
  518. {
  519. $form = new OrderListForm();
  520. $form->limit = 1;
  521. $form->store_id = $store_id;
  522. $form->user_id = $user_id;
  523. $data = [];
  524. $form->status = -1;
  525. $res = $form->searchOrderCount();
  526. $data['all'] = $res;
  527. $form->status = 0;
  528. $res = $form->searchOrderCount();
  529. $data['status_0'] = $res;
  530. $form->status = 1;
  531. $res = $form->searchOrderCount();
  532. $data['status_1'] = $res;
  533. $form->status = 2;
  534. $res = $form->searchOrderCount();
  535. $data['status_2'] = $res;
  536. $form->status = 3;
  537. $res = $form->searchOrderCount();
  538. $data['status_3'] = $res;
  539. return $data;
  540. }
  541. /**
  542. * 获取订单数方法
  543. * @return array|int|string
  544. */
  545. public function searchOrderCount()
  546. {
  547. $query = Order::find()->where([
  548. 'is_delete' => 0,
  549. 'user_delete' => 0,
  550. 'store_id' => $this->store_id,
  551. 'user_id' => $this->user_id,
  552. ]);
  553. if (get_md_id()) {
  554. $query->andWhere(['md_id' => get_md_id()]);
  555. }
  556. if (isset($this->status) && $this->status > -1) {
  557. $query->andWhere([
  558. '<>', 'trade_status', Order::ORDER_FLOW_CANCEL
  559. ]);
  560. }
  561. if ($this->status == 0) {//待付款
  562. $query->andWhere([
  563. 'is_pay' => Order::IS_PAY_FALSE,
  564. ])->andWhere(['!=', 'pay_type' , 2]);
  565. }
  566. if ($this->status == 1) {//待发货
  567. $query->andWhere([
  568. 'trade_status' => Order::ORDER_FLOW_NO_SEND,
  569. ])->andWhere(['or', ['is_pay' => 1], ['pay_type' => 2]]);
  570. }
  571. if ($this->status == 2) {//待收货
  572. $query->andWhere([
  573. 'trade_status' => Order::ORDER_FLOW_SEND,
  574. ]);
  575. }
  576. if ($this->status == 3) {//已完成
  577. $query->andWhere([
  578. 'trade_status' => Order::ORDER_FLOW_CONFIRM,
  579. ]);
  580. }
  581. $query->andWhere(['is_recycle' => 0]);
  582. return $query->count();
  583. }
  584. }