OrderPospalListForm.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662
  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\common\admin\order\CommonOrderSearch;
  10. use app\models\common\ExpressDetail;
  11. use app\models\DeliveryInfo;
  12. use app\models\Express;
  13. use app\models\FoodFlag;
  14. use app\models\Goods;
  15. use app\models\Md;
  16. use app\models\Order;
  17. use app\models\OrderDetail;
  18. use app\models\OrderPospal;
  19. use app\models\OrderPospalDetail;
  20. use app\models\OrderStateFlow;
  21. use app\models\SaasUser;
  22. use app\models\Shop;
  23. use app\models\StoreCloud;
  24. use app\models\User;
  25. use app\models\CloudGoodsBind;
  26. use app\models\OrderTransit;
  27. use app\models\Supplier;
  28. use app\models\VerifyCardSale;
  29. use app\utils\Delivery\Delivery;
  30. use app\utils\Export;
  31. use app\utils\ExportList;
  32. use app\utils\Tools;
  33. use yii\base\Model;
  34. use yii\db\Query;
  35. use yii\helpers\Json;
  36. use app\modules\admin\models\ShareOrderForm;
  37. class OrderPospalListForm extends Model
  38. {
  39. public $store_id;
  40. public $user_id;
  41. public $keyword;
  42. public $status;
  43. public $page;
  44. public $limit;
  45. public $md_name;
  46. public $order_no;
  47. public $goods_name;
  48. public $mobile;
  49. public $book_name;
  50. public $book_mobile;
  51. public $is_offline;
  52. public $clerk_id;
  53. public $parent_id;
  54. public $shop_id;
  55. public $order_type;
  56. public $dateStart;
  57. public $dateEnd;
  58. public $express_type;
  59. public $keywordType;
  60. public $seller_comments;
  61. public $fields;
  62. public $type;
  63. public $mch_id;
  64. public $flag; // 是否导出
  65. public $supplier_id;
  66. public $supplier;
  67. public $user_name;
  68. /**
  69. * @var 所属平台
  70. */
  71. public $platform;//所属平台
  72. /**
  73. * @var bool 是否是配送员订单
  74. */
  75. public $is_delivery = false;//是否是配送员订单
  76. /**
  77. * @var bool 是否是配送员订单
  78. */
  79. public $is_same_city = false;//是否是配送员订单
  80. /**
  81. * @var 获取默写城市的订单 例如:["\u5357\u5b81","\u4e0a\u6d77"]
  82. */
  83. public $shop_list;
  84. public $order_id;
  85. public function rules()
  86. {
  87. return [
  88. [['keyword', 'flag'], 'trim'],
  89. [['status', 'page', 'limit', 'user_id', 'is_offline', 'clerk_id', 'shop_id', 'keywordType', 'platform', 'order_type'], 'integer'],
  90. [['status',], 'default', 'value' => -1],
  91. [['page',], 'default', 'value' => 1],
  92. [['dateStart', 'dateEnd', 'express_type', 'md_name', 'order_no', 'goods_name', 'mobile'], 'trim'],
  93. [['seller_comments', 'flag', 'user_name'], 'string'],
  94. [['fields', 'is_delivery', 'shop_list', 'book_name', 'book_mobile'], 'safe']
  95. ];
  96. }
  97. public function search($is_scan_pay = false)
  98. {
  99. if (!$this->validate()) {
  100. return [
  101. 'code' => 1,
  102. 'msg' => $this->getErrorSummary(false)[0],
  103. ];
  104. }
  105. $query = OrderPospal::find()->alias('o')->where([
  106. 'o.store_id' => $this->store_id
  107. ])->andWhere(['!=','order_type', Order::ORDER_TYPE_Adopt]);
  108. if (get_md_id()) {
  109. $query->andWhere(['o.md_id' => get_md_id()]);
  110. }
  111. if (!is_null($this->order_type) && in_array($this->order_type, [0, 1, 2, 3])) {
  112. $query->andWhere([
  113. 'o.order_type' => $this->order_type
  114. ]);
  115. }
  116. $query->leftJoin(['u' => User::tableName()], 'u.id = o.user_id')
  117. ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile=u.binding')
  118. ->leftJoin(['od' => OrderPospalDetail::tableName()], 'od.order_id=o.id');
  119. switch ($this->status) {
  120. case 0:
  121. $query->andWhere(['o.is_delete' => Order::IS_DELETE_FALSE, 'is_pay' => Order::IS_PAY_FALSE]);
  122. break;
  123. case 1:
  124. $query->andWhere([
  125. 'o.trade_status' => Order::ORDER_FLOW_NO_SEND,
  126. 'o.is_delete' => Order::IS_DELETE_FALSE
  127. ])->andWhere(['or', ['o.is_pay' => Order::IS_PAY_TRUE], ['o.pay_type' => Order::PAY_TYPE_COD]]);
  128. break;
  129. case 2:
  130. $query->andWhere([
  131. 'o.trade_status' => Order::ORDER_FLOW_SEND,
  132. 'o.is_delete' => Order::IS_DELETE_FALSE
  133. ])->andWhere(['or', ['o.is_pay' => Order::IS_PAY_TRUE], ['o.pay_type' => Order::PAY_TYPE_COD]]);
  134. break;
  135. case 3:
  136. $query->andWhere([
  137. 'o.trade_status' => Order::ORDER_FLOW_CONFIRM,
  138. 'o.is_delete' => Order::IS_DELETE_FALSE
  139. ])->andWhere(['or', ['o.is_pay' => Order::IS_PAY_TRUE], ['o.pay_type' => Order::PAY_TYPE_COD]]);
  140. break;
  141. case 4:
  142. break;
  143. case 5:
  144. $query->andWhere(['or', ['o.trade_status' => Order::ORDER_FLOW_CANCEL],
  145. ['o.is_delete' => Order::IS_DELETE_TRUE]]);
  146. break;
  147. case 6:
  148. $query->andWhere(['and',['o.apply_delete' => Order::ORDER_APPLY_DELETE], ['!=', 'o.trade_status', Order::ORDER_FLOW_CANCEL]]);
  149. break;
  150. default:
  151. if (empty($this->order_id)) {
  152. $query->andWhere([
  153. 'o.is_delete' => Order::IS_DELETE_FALSE
  154. ]);
  155. }
  156. break;
  157. }
  158. if (get_params('is_recycle')) {
  159. $query->andWhere([
  160. 'o.is_recycle' => Order::IS_DELETE_TRUE
  161. ]);
  162. } else {
  163. $query->andWhere([
  164. 'o.is_recycle' => Order::IS_DELETE_FALSE
  165. ]);
  166. }
  167. if ($this->order_id && $this->order_id > 0) {
  168. $query->andWhere(['o.id' => $this->order_id]);
  169. }
  170. // TODO:
  171. $commonOrderSearch = new CommonOrderSearch();
  172. if (!$this->order_id) {
  173. // $query = $commonOrderSearch->search($query, $this);
  174. // $query = $commonOrderSearch->keyword($query, $this->keywordType, $this->keyword);
  175. if ($this->md_name) {
  176. $query->leftJoin(['md' => Md::tableName()], 'md.id=o.md_id')->andWhere(['like', 'md.name', $this->md_name]);
  177. }
  178. if ($this->order_no) {
  179. $query->andWhere(['like', 'o.order_no', $this->order_no]);
  180. }
  181. if ($this->mobile) {
  182. $query->andWhere([
  183. 'or',
  184. ['like', 'o.mobile', $this->mobile],
  185. ['like', 'u.binding', $this->mobile],
  186. ]);
  187. }
  188. if ($this->goods_name) {
  189. $query->andWhere(['like', 'od.goods_name', $this->goods_name]);
  190. }
  191. if ($this->user_name) {
  192. $query->andWhere(['like', 'o.name', $this->user_name]);
  193. }
  194. }
  195. if ($this->dateStart) {
  196. $query->andWhere(['>=', 'o.created_at', strtotime($this->dateStart)]);
  197. }
  198. if ($this->dateEnd) {
  199. $query->andWhere(['<=', 'o.created_at', strtotime($this->dateEnd)]);
  200. }
  201. if ($this->flag == Export::EXPORT) {
  202. $query_ex = clone $query;
  203. $list_ex = $query_ex;
  204. $export = new ExportList();
  205. // $export->is_offline = $this->is_offline;
  206. $export->order_type = 0;
  207. $export->fields = $this->fields;
  208. $export->dataTransform_new($list_ex);
  209. }
  210. // if (!$this->order_id) {
  211. // $query->andWhere(['o.is_offline' => $this->is_offline]);
  212. // }
  213. if ($this->platform !== null && $this->platform !== '') {
  214. $query->andWhere([
  215. 'u.platform' => $this->platform
  216. ]);
  217. }
  218. if($this->book_name){
  219. $query->andWhere(['like', 'o.book_info', $this->book_name]);
  220. }
  221. if($this->book_mobile){
  222. $query->andWhere(['like', 'o.book_info', $this->book_mobile]);
  223. }
  224. // $refundQuery1 = OrderRefund::find()->alias('or')
  225. // ->select('or.status, or.order_id, or.created_at')
  226. // ->where(['or.store_id' => $this->store_id, 'or.is_delete' => 0]);
  227. // $refundQuery = (new Query())->from(['or' => $refundQuery1])->where('`or`.order_id=o.id')
  228. // ->select('or.status')
  229. // ->orderBy(['or.created_at' => SORT_DESC])
  230. // ->limit(1);
  231. $query->orderBy('o.created_at DESC')
  232. ->select(['o.*', 'su.name as nickname', 'u.nickname as de_name', 'u.platform',
  233. 'od.delivery_type', 'od.attr', 'o.name user_name', 'o.mobile user_mobile', 'o.address user_address', 'su.avatar', 'od.order_transit_id']);
  234. $query->groupBy('o.order_no');
  235. $pagination = pagination_make($query);
  236. $listArray = $pagination['list'];
  237. foreach ($listArray as $i => &$item) {
  238. $item['book'] = [];
  239. if ($item['order_type'] == 1) {
  240. $attr = Json::decode($item['attr']);
  241. if (count($attr) > 1) {
  242. $date_data = current($attr)['date'] . '/' . end($attr)['date'];
  243. } else {
  244. $date_data = $attr[0]['date'];
  245. }
  246. $item['book'] = [
  247. 'date' => $date_data
  248. ];
  249. }
  250. if ($item['order_type'] == 2) {
  251. $tmp_attr = Json::decode($item['attr']);
  252. $item['book']['date'] = $tmp_attr['date'] . ' ' . $tmp_attr['time'];
  253. }
  254. if (!empty($item['food_flag_id'])) {
  255. $food_flag = FoodFlag::findOne($item['food_flag_id']);
  256. $item['food_table_num'] = $food_flag->table_num;
  257. }
  258. // $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
  259. $item['goods_list'] = $this->getOrderGoodsList($item['id']);
  260. $item['clerk_name'] = '';
  261. $shop = Shop::findOne($item['shop_id']);
  262. if ($shop) {
  263. $user = User::findOne(Shop::findOne($item['shop_id'])->user_id);
  264. if ($user) {
  265. $item['clerk_name'] = $user->nickname;
  266. }
  267. }
  268. $item['integral'] = json_decode($item['integral'], true);
  269. if (isset($item['address_data'])) {
  270. $item['address_data'] = json_decode($item['address_data']);
  271. }
  272. $item['flag'] = 0;
  273. $item['delivery_info'] = [];
  274. // 同城配送配送信息
  275. if ($item['delivery_type'] == OrderDetail::GOODS_DELIVERY_IM) {
  276. $delivery_info = DeliveryInfo::findOne(['order_no' => $item['order_no']]);
  277. $item['delivery_info'] = [
  278. 'waybill_id' => $delivery_info->waybill_id,
  279. 'status' => Delivery::$validOrderStatus[$delivery_info->status],
  280. 'reason' => $delivery_info->reason_id > 0 ? Delivery::$validReason[$delivery_info->reason_id] : '',
  281. 'fee' => $delivery_info->fee,
  282. 'duct_fee' => $delivery_info->deduct_fee,
  283. 'delivery_type' => Delivery::$deliveryType[$delivery_info->delivery_type],
  284. 'rider_name' => $delivery_info->rider_name,
  285. 'rider_mobile' => $delivery_info->rider_mobile
  286. ];
  287. }
  288. $item['md_info'] = null;
  289. if ($item['md_id']) {
  290. $item['md_info'] = Md::findOne($item['md_id']);
  291. }
  292. $item['pay_user_info'] = null;
  293. if ($item['pay_user_id'] > 0) {
  294. $pay_saas_user = SaasUser::findOne(['mobile' => User::findOne($item['pay_user_id'])->binding]);
  295. $item['pay_user_info'] = [
  296. 'name' => $pay_saas_user->name,
  297. 'mobile' => $pay_saas_user->mobile
  298. ];
  299. }
  300. $item['all_discount'] = sprintf("%.2f", ($item['integral']['forehead'] + $item['coupon_sub_price']));
  301. }
  302. // 获取可导出数据
  303. $f = new ExportList();
  304. $exportList = $f->getList();
  305. //处理订单是否存在云仓转单商品开始
  306. foreach($listArray as $listkey=>&$listgoodsInfo){
  307. //添加转单详情
  308. //一个订单一个供货商只能创建一次转单
  309. // $transitInfo = OrderTransit::find()->where(['order_id'=>$listgoodsInfo['id'],'is_delete'=>0])->all();
  310. // if($transitInfo){
  311. // $orderTransitInfo = [];
  312. // foreach($transitInfo as $transitInfoVal){
  313. // $orderTransitInfo[] = $transitInfoVal->attributes;
  314. // }
  315. // $listArray[$listkey]['orderTransitInfo'] = $orderTransitInfo;
  316. // }
  317. $verify_card = [];
  318. $integral = 0;
  319. if ((int)$listgoodsInfo['is_pay'] !== 0) {
  320. foreach($listgoodsInfo['goods_list'] as $goodskey=>&$goods){
  321. if($goods['goods_id'] && $goods['attr']){
  322. $goods_attr = json_decode($goods['attr'],true);
  323. //获取商品组对比属性信息
  324. $cloud_attrs = '';
  325. foreach($goods_attr as $val){
  326. if(isset($val['attr_id'])){
  327. $cloud_attrs .= $val['attr_id']."-";
  328. }
  329. }
  330. $cards = Goods::find()->where(['id' => $goods['goods_id']])->select('verify_card_id, integral')->one();
  331. if (!empty($cards->verify_card_id)) {
  332. $goods_model = Goods::findOne($goods['goods_id']);
  333. $ids = explode(',', $cards->verify_card_id);
  334. $order = OrderPospal::findOne($listgoodsInfo['id']);
  335. $card = Tools::getVerifyList($ids, $order, $goods_model);
  336. $verify_card = array_merge($verify_card, $card);
  337. }
  338. if (!empty($cards->integral)) {
  339. $goods_integral = json_decode($cards->integral, true);
  340. $integral += $goods_integral['give'];
  341. }
  342. $cloudGoodsInfo = CloudGoodsBind::find()->where(['goods_id'=>$goods['goods_id'],'is_delete'=>0])->one();
  343. if($cloudGoodsInfo && isset($cloudGoodsInfo['cloud_goods_id'])){
  344. $cloudInfo = [];
  345. $cloudInfo['cloud_goods_id'] = $cloudGoodsInfo['cloud_goods_id'];
  346. $cloudInfo['cloud_attr_id'] = $cloudGoodsInfo['cloud_attr_id'];
  347. $cloudInfo['cloud_supplier_id'] = $cloudGoodsInfo['cloud_supplier_id'];
  348. if( $cloudGoodsInfo['cloud_supplier_id'] > 0){
  349. $supplierInfo = Supplier::find()->select('name,logo')->where(['cloud_supplier_id'=>$cloudGoodsInfo['cloud_supplier_id'],'is_delete'=>0])->one();
  350. if($supplierInfo && $supplierInfo['name'] && $supplierInfo['logo']){
  351. $cloudInfo['cloud_supplier_name'] = $supplierInfo['name'];
  352. $cloudInfo['cloud_supplier_logo'] = $supplierInfo['logo'];
  353. }
  354. }
  355. $listArray[$listkey]['goods_list'][$goodskey]['cloud_bind'] = json_encode($cloudInfo);
  356. $listArray[$listkey]['is_cloud_bind'] = true;
  357. }
  358. }
  359. }
  360. $listgoodsInfo['verify_card'] = $verify_card;
  361. $listgoodsInfo['integral'] = $integral;
  362. }
  363. }
  364. $smf = new ShareOrderForm(['yinbao' => 1]);
  365. $smf->store_id = $this->store_id;
  366. foreach($listArray as &$item){
  367. $item['order_type'] = 's';
  368. $item['parent_id_3'] = $item['parent_id_2'];
  369. $item['parent_id_2'] = $item['parent_id_1'];
  370. $item['parent_id_1'] = $item['parent_id'];
  371. }
  372. $list = $smf->transform($listArray);
  373. foreach($list as &$item){
  374. $item['goods_list'] = $this->getOrderGoodsList($item['id']);
  375. }
  376. //处理订单是否存在云仓转单商品结束
  377. return [
  378. 'code' => 0,
  379. 'msg' => 'success',
  380. 'data' => [
  381. 'export_list' => $exportList,
  382. 'express_list' => $this->getExpressList(),
  383. 'data' => $list,
  384. 'pageNo' => $pagination['pageNo'],
  385. 'totalCount' => $pagination['totalCount'],
  386. // 'sql' => $query->createCommand()->getRawSql(),
  387. ],
  388. ];
  389. }
  390. //获取快递信息
  391. public function getExpressData()
  392. {
  393. try {
  394. $order_id = $this->order_id;
  395. $order = OrderPospal::find()->where(['id' => $order_id, 'is_pay' => 1])->select("express, express_no, mobile")->one();
  396. if ($order) {
  397. $OrderTransit = OrderTransit::findOne(['order_id' => $order->id]);
  398. if ($OrderTransit) {
  399. $order['express_name'] = $OrderTransit->express_name;
  400. $order['express_no'] = $OrderTransit->express_no;
  401. }
  402. }
  403. if (!empty($order['express']) && !empty($order['express_no'])) {
  404. // 查询物流信息
  405. $model = new ExpressDetail();
  406. $model->express = $order['express'];
  407. $model->express_no = $order['express_no'];
  408. $model->receive_mobile = $order['mobile'];
  409. $model->store_id = $this->store_id;
  410. $res = $model->search();
  411. if ($res['code'] != 0) {
  412. $res['code'] = 0;
  413. if (!$res['data']) {
  414. $res['data'] = [];
  415. }
  416. $res['data']['status'] = 0;
  417. $res['data']['status_text'] = '未知';
  418. }
  419. $res['data']['express'] = $order['express'];
  420. $res['data']['express_no'] = $order['express_no'];
  421. return $res;
  422. }
  423. return [
  424. 'code' => 0,
  425. 'msg' => "没有快递信息",
  426. 'data' => null
  427. ];
  428. } catch (\Exception $e) {
  429. return [
  430. 'code' => 1,
  431. 'msg' => $e->getMessage()
  432. ];
  433. }
  434. }
  435. /**
  436. * @param $data array 需要处理的数据
  437. */
  438. public function dataTransform($data)
  439. {
  440. //TODO 测试数据 需要换成真实的字段
  441. $newFields = [];
  442. foreach ($this->fields as &$item) {
  443. if ($this->is_offline == 1) {
  444. if (in_array($item['key'], ['clerk_name', 'shop_name'])) {
  445. $item['selected'] = 1;
  446. }
  447. } else {
  448. if (in_array($item['key'], ['express_price', 'express_no', 'express'])) {
  449. $item['selected'] = 1;
  450. }
  451. }
  452. if (isset($item['selected']) && $item['selected'] == 1) {
  453. $newFields[$item['key']] = $item['value'];
  454. }
  455. }
  456. $newList = [];
  457. foreach ($data as $datum) {
  458. $newItem = [];
  459. $newItem['order_no'] = $datum->order_no;
  460. $newItem['nickname'] = $datum->user->nickname;
  461. $newItem['name'] = $datum->name;
  462. $newItem['mobile'] = $datum->mobile;
  463. $newItem['address'] = $datum->address;
  464. $newItem['total_price'] = $datum->total_price;
  465. $newItem['pay_price'] = $datum->pay_price;
  466. $newItem['pay_time'] = $datum->pay_time ? date('Y-m-d H:i', $datum->pay_time) : '';
  467. $newItem['send_time'] = $datum->send_time ? date('Y-m-d H:i', $datum->send_time) : '';
  468. $newItem['confirm_time'] = $datum->confirm_time ? date('Y-m-d H:i', $datum->confirm_time) : '';
  469. $newItem['words'] = $datum->words;
  470. $newItem['goods_list'] = $this->getOrderGoodsList($datum['id']);
  471. $newItem['is_pay'] = $datum['is_pay'] == 1 ? "已付款" : "未付款";
  472. $newItem['addtime'] = date('Y-m-d H:i', $datum['created_at']);
  473. $newItem['express_price'] = $datum['express_price'] . "元";
  474. $newItem['apply_delete'] = ($datum['apply_delete'] == Order::ORDER_APPLY_DELETE) ? ($datum['trade_status'] == Order::ORDER_FLOW_CANCEL || $datum['is_delete'] == Order::IS_DELETE_TRUE ? '取消成功' : '取消中') : "无";
  475. $newItem['trade_status'] = OrderStateFlow::getFlowWords($datum['trade_status']);
  476. // 是否到店自提 0--否 1--是
  477. if ($datum['is_offline']) {
  478. $newItem['clerk_name'] = $datum->clerk ? $datum->clerk->nickname : '';
  479. $newItem['shop_name'] = $datum->shop ? $datum->shop->name : '';
  480. } else {
  481. $newItem['express_price'] = $datum->express_price;
  482. $newItem['express_no'] = $datum->express_no;
  483. $newItem['express'] = $datum->express;
  484. }
  485. if ($datum->orderForm) {
  486. $str = '';
  487. foreach ($datum->orderForm as $key => $item) {
  488. $str .= $item['key'] . ':' . $item['value'] . ',';
  489. }
  490. $newItem['content'] = rtrim($str, ',');
  491. } else {
  492. $newItem['content'] = $datum->content;
  493. }
  494. $newList[] = $newItem;
  495. }
  496. //Export::order_3($newList, $newFields);
  497. }
  498. public function getOrderGoodsList($order_id)
  499. {
  500. $orderDetailList = OrderPospalDetail::find()->alias('od')
  501. ->where([
  502. 'od.is_delete' => 0,
  503. 'od.order_id' => $order_id,
  504. ])->select(['od.num', 'od.total_price', 'od.attr', 'od.is_level', 'od.batch_price_tips', 'name' => 'od.goods_name','od.pic', 'od.goods_info', 'od.delivery_type', 'od.shop_id', 'od.goods_id'])->asArray()->all();
  505. foreach ($orderDetailList as &$item) {
  506. $item['form'] = [];
  507. $item['attr_list'] = json_decode($item['attr'], true);
  508. $item['unit'] = Json::decode($item['goods_info'])['unit'];
  509. $item['shop'] = [];
  510. if ($item['delivery_type'] == OrderDetail::GOODS_DELIVERY_SHOP) {
  511. $shop_info = Shop::find()->where(['id' => $item['shop_id']])->asArray()->one();
  512. if(!$shop_info) continue;
  513. $item['shop']['address'] = $shop_info['address'];
  514. $item['shop']['id'] = $shop_info['id'];
  515. $item['shop']['name'] = $shop_info['name'];
  516. $item['shop']['mobile'] = $shop_info['mobile'];
  517. }
  518. }
  519. if(!$orderDetailList){
  520. $orderDetailList = [
  521. [
  522. "goods_name" => "未知",
  523. "num" => "1",
  524. "total_price" => "0.00",
  525. "integral_price" => "0",
  526. "integral_difference_price" => "0.00",
  527. "created_at" => "0",
  528. "is_delete" => "0",
  529. "attr" => "[{\"attr_group_id\":\"2\",\"attr_group_name\":\"规格\",\"attr_id\":\"3\",\"attr_name\":\"默认\"}]",
  530. "pic" => "https://www.gqp58.com/web/v1/statics/images/yinbao.png",
  531. "integral" => "0",
  532. "is_level" => "1",
  533. "batch_price_tips" => null,
  534. "supplier_price" => "0.00",
  535. "goods_info" => "",
  536. "delivery_type" => "1",
  537. "shop_id" => "0",
  538. "is_refund" => "0",
  539. "profit" => "0.00",
  540. "user_id" => "0",
  541. "order_transit_id" => "0",
  542. "video_id" => "0",
  543. "name" => "未知",
  544. "unit" => "件",
  545. "attr_list" => [
  546. [
  547. "attr_group_id" => "2",
  548. "attr_group_name" => "规格",
  549. "attr_id" => "3",
  550. "attr_name" => "默认"
  551. ]
  552. ]
  553. ]
  554. ];
  555. }
  556. return $orderDetailList;
  557. }
  558. public static function getCountData($store_id)
  559. {
  560. $form = new OrderPospalListForm();
  561. $form->limit = 0;
  562. $form->store_id = $store_id;
  563. $data = [];
  564. $form->status = -1;
  565. $res = $form->search();
  566. $data['all'] = $res['row_count'];
  567. $form->status = 0;
  568. $res = $form->search();
  569. $data['status_0'] = $res['row_count'];
  570. $form->status = 1;
  571. $res = $form->search();
  572. $data['status_1'] = $res['row_count'];
  573. $form->status = 2;
  574. $res = $form->search();
  575. $data['status_2'] = $res['row_count'];
  576. $form->status = 3;
  577. $res = $form->search();
  578. $data['status_3'] = $res['row_count'];
  579. $form->status = 5;
  580. $res = $form->search();
  581. $data['status_5'] = $res['row_count'];
  582. return $data;
  583. }
  584. /**
  585. * @return array
  586. */
  587. private function getExpressList()
  588. {
  589. $storeExpressList = OrderPospal::find()
  590. ->select('express')
  591. ->where([
  592. 'and',
  593. ['store_id' => $this->store_id],
  594. ['is_pay' => Order::IS_PAY_TRUE],
  595. ['in', 'trade_status', [Order::ORDER_FLOW_SEND, Order::ORDER_FLOW_CONFIRM]],
  596. ['!=', 'express', ''],
  597. ])->groupBy('express, send_time')->orderBy('send_time DESC')->limit(5)->asArray()->all();
  598. $expressLst = Express::getExpressList();
  599. $newStoreExpressList = [];
  600. foreach ($storeExpressList as $i => $item) {
  601. foreach ($expressLst as $value) {
  602. if ($value['name'] == $item['express']) {
  603. $newStoreExpressList[] = $item['express'];
  604. break;
  605. }
  606. }
  607. }
  608. $newPublicExpressList = [];
  609. foreach ($expressLst as $i => $item) {
  610. $newPublicExpressList[] = $item['name'];
  611. }
  612. return array_merge($newStoreExpressList, $newPublicExpressList);
  613. }
  614. }