OrderController.php 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988
  1. <?php
  2. namespace addons\Store\api\modules\v1\controllers;
  3. use addons\ReservationService\common\services\OrderService;
  4. use addons\PlatformStoreClerk\common\models\PlatformStoreClerkGoodsSetting;
  5. use addons\PlatformStoreClerk\common\models\PlatformStoreClerkOrderDetail;
  6. use addons\Store\common\enums\StoreEnum;
  7. use addons\Store\common\logic\order\OrderFormLogic;
  8. use addons\Store\common\logic\order\OrderInitDataLogic;
  9. use addons\Store\common\logic\order\OrderLimitLogic;
  10. use addons\Store\common\logic\order\OrderMarketingLogic;
  11. use addons\Store\common\models\Store;
  12. use addons\Store\common\models\StoreCashierOrder;
  13. use addons\Store\common\models\StoreClerk;
  14. use addons\Store\common\models\StoreGoods;
  15. use addons\Store\common\models\StoreOrder;
  16. use addons\Store\common\models\StoreOrderCredit;
  17. use addons\Store\common\models\StoreOrderDetail;
  18. use api\controllers\OnAuthController;
  19. use common\enums\AddonsEnum;
  20. use common\enums\AppEnum;
  21. use common\enums\ClerkEnum;
  22. use common\enums\MarketingTypeEnum;
  23. use common\enums\OrderStatusEnum;
  24. use common\enums\PayTypeEnum;
  25. use common\enums\PreviewTypeEnum;
  26. use common\enums\RefundReasonEnum;
  27. use common\enums\RefundStatusEnum;
  28. use common\enums\RefundTypeEnum;
  29. use common\enums\ShippingTypeEnum;
  30. use common\enums\StatusEnum;
  31. use common\globals\GlobalInvoke;
  32. use common\helpers\LocationHelper;
  33. use common\models\common\Express;
  34. use common\models\common\PaymentTrade;
  35. use common\models\common\PaymentTradeOrder;
  36. use common\models\common\RechargeOrders;
  37. use common\models\common\Region;
  38. use common\models\goods\Goods;
  39. use common\models\mall\MallAddons;
  40. use common\models\order\Order;
  41. use common\models\order\OrderDetail;
  42. use common\models\order\OrderMarketing;
  43. use common\models\order\OrderRefund;
  44. use common\models\order\OrderRefundStep;
  45. use common\models\user\UserAddress;
  46. use common\models\user\UserPartitionRelationship;
  47. use Yii;
  48. /**
  49. * Class OrderController
  50. * @package api\modules\order\controllers
  51. */
  52. class OrderController extends OnAuthController
  53. {
  54. public $modelClass = '';
  55. /**
  56. * 不用进行登录验证的方法
  57. *
  58. * 例如: ['index', 'update', 'create', 'view', 'delete']
  59. * 默认全部需要验证
  60. *
  61. * @var array
  62. */
  63. protected $authOptional = [];
  64. /**
  65. * 订单预览
  66. * @Author bing
  67. * @DateTime 2021-09-24 19:46:46
  68. * @return void
  69. * @copyright: Copyright (c) 2020 广东七件事集团
  70. */
  71. public function actionPreview()
  72. {
  73. $orderFormLogic = new OrderFormLogic();
  74. $form = $orderFormLogic->getDefaultform($this->mall_id, $this->user_id);
  75. $post = Yii::$app->request->post();
  76. $form->attributes = $post;
  77. $form['action'] = AppEnum::ACTION_PREVIEW;
  78. !empty($form->shipping_type) && $form->shipping_type = ShippingTypeEnum::LOGISTICS;
  79. // 初始化订单数据
  80. $orderInitDataLogic = new OrderInitDataLogic();
  81. $form = $orderInitDataLogic->execute($form, $form->type);
  82. if ($form === false) return $this->error($orderInitDataLogic->getError());
  83. $is_bind_popups = UserPartitionRelationship::getIsNeedPopups($this->mall_id, $this->user_id);
  84. if($is_bind_popups == 1) return $this->error('请进入商品详情页,绑定邀请码!');
  85. // 购买限制验证
  86. $orderLimitLogic = new OrderLimitLogic();
  87. $form = $orderLimitLogic->run($form);
  88. if ($form === false) return $this->error($orderLimitLogic->getError());
  89. // 获取收货地址
  90. $address_info = UserAddress::getUserAddress($this->user_id, $form->address_id);
  91. $form->address_id = $address_info['id'] ?? 0;
  92. // 营销减免活动
  93. $orderMarketingLogic = new OrderMarketingLogic();
  94. $form = $orderMarketingLogic->run($form);
  95. if ($form === false) return $this->error($orderMarketingLogic->getError());
  96. $group_order_goods = $form['group_order_goods'];
  97. $group_order_goods_list = [];
  98. foreach ($group_order_goods as $val) {
  99. $group_order_goods_list[] = $val;
  100. }
  101. $marketing = $form['marketing'];
  102. $freight_type = $form['freight_type'];
  103. $pay_type_list = \Yii::$app->services->pay->getEnablePayment($this->mall_id, $this->platform);
  104. if ($form['total_pay_money'] <= 0) {
  105. $tmp = [];
  106. foreach ($pay_type_list as $item) {
  107. if ($item['trade_type'] == 'default') {
  108. $tmp[] = $item;
  109. break;
  110. }
  111. }
  112. $pay_type_list = $tmp;
  113. }
  114. $shipping_type_list = $form->type == PreviewTypeEnum::RESERVE_NOW ? ShippingTypeEnum::getReserveMap() : ShippingTypeEnum::getMap();
  115. $shipping_type_arr = [];
  116. if( $form->type == PreviewTypeEnum::RESERVE_NOW){
  117. foreach ($form['group_order_goods']['0_'.$post['data']['store_id']]['goods'] as $good){
  118. switch ($good['reserve']['service_type']){
  119. case ShippingTypeEnum::RESERVE_TO:
  120. $shipping_type_arr[]=['id'=>ShippingTypeEnum::RESERVE_TO,'name'=>$shipping_type_list[ShippingTypeEnum::RESERVE_TO]];
  121. break;
  122. case ShippingTypeEnum::RESERVE_FROM:
  123. $shipping_type_arr[]=['id'=>ShippingTypeEnum::RESERVE_FROM,'name'=>$shipping_type_list[ShippingTypeEnum::RESERVE_FROM]];
  124. break;
  125. case 3:
  126. $shipping_type_arr[]=['id'=>ShippingTypeEnum::RESERVE_TO,'name'=>$shipping_type_list[ShippingTypeEnum::RESERVE_TO]];
  127. $shipping_type_arr[]=['id'=>ShippingTypeEnum::RESERVE_FROM,'name'=>$shipping_type_list[ShippingTypeEnum::RESERVE_FROM]];
  128. break;
  129. }
  130. }
  131. }else{
  132. if (is_string($freight_type)) {
  133. $t_freight_type = explode(",", $freight_type);
  134. } else {
  135. $t_freight_type = $freight_type;
  136. }
  137. //查询名字自定义
  138. $goodsStoreSetting = \Yii::$app->services->setting->addons->get($this->mall_id, StoreEnum::ADDONS_NAME, 'goodsStore');
  139. $express_title_arr = $goodsStoreSetting['express_title_arr'] ?? '';
  140. $express_title_arr = $express_title_arr ? json_decode($express_title_arr,true) :[];
  141. foreach ($shipping_type_list as $k => $v) {
  142. $v = $express_title_arr[$k] ?? $v;
  143. if (in_array($k, $t_freight_type)) {
  144. $shipping_type_arr[] = ['id' => $k, 'name' => $v];
  145. }
  146. }
  147. }
  148. $info = compact('group_order_goods', 'marketing', 'address_info', 'pay_type_list', 'shipping_type_list');
  149. $info['total_pay_money'] = '¥' . $form['total_pay_money'];
  150. $info['total_pay_money_not_coupon'] = $form['total_pay_money_not_coupon'] ?? 0;
  151. $info['is_address'] = $form['is_address'] ?? 0;
  152. $info['shipping_type_list'] = $shipping_type_arr;
  153. $info['store_address'] = $form['store_address'];
  154. $info['out_of_range'] = $form['out_of_range'];
  155. $info['initial_delivery_amount'] = $form['initial_delivery_amount'];
  156. $info['group_order_goods'] = $group_order_goods_list;
  157. $info['is_virtual'] = $form['is_virtual'] ?? 0;
  158. $info['goods_stock'] = array_column($form->sku, 'stock', 'id');
  159. // 判断是否有技师
  160. if (!empty($form['data']['tech_id'])) {
  161. $info['tech'] = (new OrderService())->findByTech($form['data']['tech_id'], $form['data']['latitude'], $form['data']['longitude'], $this->mall_id);
  162. } else {
  163. $store = Store::getOne([['id' => $post['data']['store_id']]], true, [], false, "id, store_name, logo_img, shop_owner, shop_mobile, longitude, latitude, address, province_id, city_id, district_id");
  164. $store['region'] = implode("", Region::find()->where(['id' =>
  165. [$store['province_id'], $store['city_id'], $store['district_id']]])
  166. ->select('name')->column());
  167. $store['distance'] = LocationHelper::formatDistance((new LocationHelper())->getDistanceByGeo($form['data']['latitude'], $form['data']['longitude'],
  168. $store['latitude'], $store['longitude']));
  169. $info['tech'] = [
  170. 'age' => '',
  171. 'avatar' => '',
  172. 'gender' => '',
  173. 'store_id' => $post['data']['store_id'],
  174. 'store' => $store,
  175. ];
  176. }
  177. return $this->success('操作成功', $info);
  178. }
  179. /**
  180. * 创建订单
  181. * @Author bing
  182. * @DateTime 2021-09-22 09:31:22
  183. * @return void
  184. * @copyright: Copyright (c) 2020 广东七件事集团
  185. */
  186. public function actionCreate()
  187. {
  188. $orderFormLogic = new OrderFormLogic();
  189. $form = $orderFormLogic->getDefaultform($this->mall_id, $this->user_id);
  190. $form->attributes = Yii::$app->request->post();
  191. $form['action'] = AppEnum::ACTION_CREATE;
  192. // 初始化订单数据
  193. $orderInitDataLogic = new OrderInitDataLogic();
  194. $form = $orderInitDataLogic->execute($form, $form->type);
  195. if ($form === false) return $this->error($orderInitDataLogic->getError());
  196. $is_bind_popups = UserPartitionRelationship::getIsNeedPopups($this->mall_id, $this->user_id);
  197. if($is_bind_popups == 1) return $this->error('请进入商品详情页,绑定邀请码!');
  198. // 购买限制验证
  199. $orderLimitLogic = new OrderLimitLogic();
  200. $form = $orderLimitLogic->run($form);
  201. if ($form === false) return $this->error($orderLimitLogic->getError());
  202. // 营销减免活动
  203. $orderMarketingLogic = new OrderMarketingLogic();
  204. $form = $orderMarketingLogic->run($form, true);
  205. if ($form === false) return $this->error($orderMarketingLogic->getError());
  206. $shipping_type = Yii::$app->request->post('data')['shipping_type'];
  207. if(isset($shipping_type)&&$shipping_type==3 && $form['total_pay_money']<$form['initial_delivery_amount']){
  208. return $this->error('起送金额是'.$form['initial_delivery_amount']);
  209. }
  210. $res = StoreOrder::createOrder($form);
  211. if ($res === false) return $this->error(Order::getStaticError());
  212. return $this->success('操作成功', $res);
  213. }
  214. //获取支付配置
  215. public function actionGetPayConfig()
  216. {
  217. if (Yii::$app->request->isGet) {
  218. $get = Yii::$app->request->get();
  219. $res = Yii::$app->services->validate->validate($get, [
  220. [['order_id', 'store_id'], 'required']
  221. ]);
  222. if (!$res) return $this->error(Yii::$app->services->validate->getErrorMessage());
  223. $order_info = StoreOrder::getOneData(['mall_id' => $this->mall_id, 'store_id' => $get['store_id'], 'id' => $get['order_id'], 'order_status' => StatusEnum::DISABLED]);
  224. if (empty($order_info)) return $this->error('不存在该订单');
  225. $arr['is_jump'] = StatusEnum::DISABLED;
  226. $arr['pay_success_page'] = Yii::$app->services->setting->addons->get($order_info['mall_id'], StoreEnum::ADDONS_NAME, 'payment.pay_after_link');// 支付成功后跳转的地址
  227. if (!empty($arr['pay_success_page'])) {
  228. $arr['is_jump'] = StatusEnum::ENABLED;
  229. }
  230. return $this->success('获取成功', $arr);
  231. }
  232. }
  233. public function actionList()
  234. {
  235. $params = \Yii::$app->request->get();
  236. $where[] = ['mall_id' => $this->mall_id];
  237. $where[] = ['user_id' => $this->user_id];
  238. $where[] = ['status' => StatusEnum::ENABLED];
  239. if (!empty($params['order_status']) && $params['order_status'] == 999) {
  240. // 全部订单获取售后中订单
  241. $where[] = ['is_feedback' => [OrderStatusEnum::NOT_FEEDBACK, OrderStatusEnum::FEEDBACKING]];
  242. } else {
  243. $where[] = ['is_feedback' => OrderStatusEnum::NOT_FEEDBACK];
  244. }
  245. if (isset($params['order_status']) && $params['order_status'] != 999) $where[] = ['order_status' => $params['order_status']];
  246. $select = 'id,pay_money,order_status,shipping_type,is_recycle,marketing_type,extra_info,order_source';
  247. $params['order'] = 'id desc';
  248. $params['select'] = $select;
  249. $params['where'] = $where;
  250. $params['with'] = ['detail' => function ($query) {
  251. $query->select('id,order_id,goods_id,goods_name,pic_url,num,price,is_feedback,sign_id,goods_attr_name,extra_info,adjust_money');
  252. }];
  253. $order_list = Order::listPage($params);
  254. if (!empty($order_list['list'])) {
  255. foreach ($order_list['list'] as $key => $val) {
  256. array_map(function ($arg) use (&$val) {
  257. if (!isset($val['num'])) $val['num'] = 0;
  258. $val['num'] += $arg['num'];
  259. }, $val['detail']);
  260. if ($val['detail']) {
  261. foreach ($val['detail'] as $k => $v) {
  262. $order_list['list'][$key]['detail'][$k]['price'] = $order_list['list'][$key]['detail'][$k]['price'] + $order_list['list'][$key]['detail'][$k]['adjust_money'];
  263. $order_list['list'][$key]['detail'][$k]['price'] = round($order_list['list'][$key]['detail'][$k]['price'], 2);
  264. }
  265. }
  266. }
  267. $order_list['shipping_type_text'] = ShippingTypeEnum::getMap();
  268. $order_list['order_status_text'] = OrderStatusEnum::getMap();
  269. $order_list['is_feedback_text'] = OrderStatusEnum::getFeedbackMap();
  270. }
  271. $order_list['mall_name'] = $this->mall['name'];
  272. $order_list['mall_logo'] = Yii::$app->services->setting->mall->get($this->mall_id, 'basic.logo');
  273. $order_list['pay_type_list'] = \Yii::$app->services->pay->getEnablePayment($this->mall_id, $this->platform);
  274. $order_list['marketing_type_map'] = MarketingTypeEnum::getMap();
  275. return $this->success('操作成功', $order_list);
  276. }
  277. /**
  278. * 订单详情
  279. * @return mixed|void
  280. */
  281. public function actionDetail()
  282. {
  283. $params = \Yii::$app->request->get();
  284. $res = \Yii::$app->services->validate->validate($params, [
  285. [['order_id'], 'required'],
  286. ]);
  287. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  288. $clerk_code = (string)$params['order_id'];
  289. $clerk_code_pre = $clerk_code[0] . $clerk_code[1];
  290. if($clerk_code_pre==ClerkEnum::PLATFORM_ORDER_BY_O2O_STORE_CLERK_CODE_PRE) {
  291. //平台订单通过门店核销员核销
  292. if (!MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_PLATFORM_STORE_CLERK)) {
  293. return $this->error('该订单不存在', []);
  294. }
  295. $clerk_detail = PlatformStoreClerkOrderDetail::getOrderByCode($this->mall_id, $params['order_id']);
  296. if (!$clerk_detail) return $this->error('该订单不存在', []);
  297. if ($clerk_detail['clerk_status'] > 0) return $this->error('该订单已核销', []);
  298. return $this->getPlatformStoreOrderDetail($clerk_detail);
  299. }
  300. $select = 'id,mall_id,store_id,order_no,receiver_name,mobile,pay_money,shipping_money,original_goods_price,coupon_money,goods_price,order_status,pay_status,
  301. shipping_status,review_status,is_feedback,address,created_at,pay_time,region_name,remark,consign_time,finish_time,sign_time,shipping_type,payment_type,score,score_money,marketing_id,marketing_type,extra_info,order_source';
  302. $where = [];
  303. $where[] = ['mall_id' => $this->mall_id];
  304. $where[] = ['or',
  305. ['id' => $params['order_id']],
  306. ['clerk_code' => $params['order_id']],
  307. ];
  308. $order = Order::getOne($where, true, ['detail' => function ($query) {
  309. $query->select('id,order_id,goods_id,goods_name,pic_url,num,price,is_feedback,sign_id,goods_attr_name,order_status,adjust_money,extra_info');
  310. }], false, $select);
  311. if (empty($order)) return $this->error('该订单不存在', []);
  312. if (empty($order['store_id'])) return $this->error('该订单不门店核销订单', []);
  313. $rse = StoreClerk::getOne([['mall_id' => $this->mall_id], ['user_id' => $this->user_id, 'store_id' => $order['store_id']], ['status' => StatusEnum::ENABLED]]);
  314. if (empty($rse)) return $this->error('你不是核销员');
  315. $marketing = OrderMarketing::getMarketingInfo($order);
  316. $order['order_status_text'] = OrderStatusEnum::getMap();
  317. $order['is_feedback_text'] = OrderStatusEnum::getFeedbackMap();
  318. $order['shipping_type_text'] = ShippingTypeEnum::getMap();
  319. $order['payment_type_text'] = PayTypeEnum::getMap();
  320. $order['pay_type_list'] = \Yii::$app->services->pay->getEnablePayment($this->mall_id, $this->platform);
  321. $adjust_money = array_sum(array_column($order['detail'], 'adjust_money'));//预留字段
  322. if ($adjust_money) {
  323. $order['change_price'] = $adjust_money;
  324. }
  325. $order['marketing'] = $marketing;
  326. $order['marketing_type_map'] = MarketingTypeEnum::getMap();
  327. $order_setting = Yii::$app->services->setting->mall->get($this->mall_id, 'order');
  328. $order['payment_expire_time'] = $order_setting['payment_expire_time'] ?? 30;
  329. $order['auto_receiving_time'] = $order_setting['auto_receiving_time'] ?? 14;
  330. if(!empty($order['detail'])){
  331. foreach ($order['detail'] as $k => $v){
  332. // 获取订单售后信息
  333. $order['detail'][$k]['order_refund'] = OrderRefund::find()
  334. ->where(['order_detail_id' => $v['id'] ,'store_id' => $v['store_id'], 'status' => StatusEnum::ENABLED])
  335. ->select('id, type')->asArray()->one();
  336. }
  337. }
  338. // 获取订单详情的状态文字描述
  339. $order['status_text'] = OrderStatusEnum::getApiStatus($order['order_status'], $order['shipping_type']);
  340. $order['order_status'] == OrderStatusEnum::NOT_PAY && $order['status_text']['desc'] = $order['payment_expire_time'] . $order['status_text']['desc'];
  341. $order['order_status'] == OrderStatusEnum::SHIPMENTS && $order['status_text']['desc'] = $order['auto_receiving_time'] . $order['status_text']['desc'];
  342. $order['show_clerk_button'] = $order['order_status'] == OrderStatusEnum::TAKE ? 1:0;
  343. // 公共调用
  344. $order = GlobalInvoke::exec(GlobalInvoke::ORDER_DETAIL, $this->mall_id, [
  345. 'order' => $order,
  346. 'mall_id' => $this->mall_id,
  347. ]) ?: $order;
  348. return $this->success('操作成功', $order);
  349. }
  350. /**
  351. * 更新订单操作
  352. * @return mixed|void
  353. */
  354. public function actionUpdateOrder()
  355. {
  356. $params = \Yii::$app->request->get();
  357. $res = \Yii::$app->services->validate->validate($params, [
  358. [['id', 'order_status'], 'required'],
  359. ]);
  360. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  361. $params['mall_id'] = $this->mall_id;
  362. $params['user_id'] = $this->user_id;
  363. $params['operator_id'] = $this->user_id;
  364. $params['operator_name'] = $this->user->nickname ?? '';
  365. $res = Order::close($params);
  366. if (!$res) return $this->error(Order::getStaticError());
  367. return $this->success('操作成功', []);
  368. }
  369. /**
  370. * 提交订单评价
  371. * @return mixed|void
  372. * @throws \yii\db\Exception
  373. */
  374. public function actionComments()
  375. {
  376. $params = \Yii::$app->request->post();
  377. $res = \Yii::$app->services->validate->validate($params, [
  378. [['order_id', 'comment_data'], 'required'],
  379. ]);
  380. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  381. $res = StoreOrder::postComments($params);
  382. if ($res === false) return $this->error(Order::getStaticError());
  383. return $this->success('操作成功');
  384. }
  385. /**
  386. * 加载提交售后订单数据
  387. * @Author: hua
  388. * @DateTime: 2021/10/7 10:29
  389. * @Copyright: copyright (c) 2021 广东七件事集团
  390. * @return mixed|void
  391. */
  392. public function actionToRefundSubmit()
  393. {
  394. $params = \Yii::$app->request->get();
  395. $res = \Yii::$app->services->validate->validate($params, [
  396. [['order_detail_id'], 'required'],
  397. ]);
  398. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  399. $select = 'id,order_id,goods_name,sign_id,goods_attr_name,price,num,pic_url,goods_price,order_status,marketing_type,extra_info,adjust_money';
  400. $order_detail = OrderDetail::getOne([['id' => $params['order_detail_id']], 'user_id' => $this->user_id, 'mall_id' => $this->mall_id], 1, [], false, $select);
  401. if (empty($order_detail)) return $this->error('订单不存在');
  402. if ($order_detail['marketing_type'] == AddonsEnum::ADDONS_NAME_SCORE_MALL) {
  403. $order = Order::find()->select("extra_info,score")->where(['id' => $order_detail['order_id']])->asArray()->one();
  404. $order_detail['extra_info'] = $order['extra_info'];
  405. $order_detail['pay_score'] = $order['score'];
  406. }
  407. //价格等于商品价格加上修改价格
  408. $order_detail['goods_price'] = round($order_detail['goods_price'] + $order_detail['adjust_money'], 2);
  409. $data['goods_info'] = $order_detail;
  410. $data['feedback_reason'] = RefundReasonEnum::getMap();
  411. $feedback_type = RefundTypeEnum::getArr();
  412. $data['feedback_type'] = [];
  413. if (in_array($order_detail['order_status'], [OrderStatusEnum::PAY, OrderStatusEnum::SHIPMENTS])) {
  414. //待发货,
  415. $data['feedback_type'][] = $feedback_type[RefundTypeEnum::MONEY];
  416. }
  417. if (in_array($order_detail['order_status'], [OrderStatusEnum::SHIPMENTS, OrderStatusEnum::SING])) {
  418. //已发货,已收货
  419. $data['feedback_type'][] = $feedback_type[RefundTypeEnum::MONEY_AND_PRODUCT];
  420. $data['feedback_type'][] = $feedback_type[RefundTypeEnum::EXCHANGE_GOODS];
  421. }
  422. $data['order_status'] = $order_detail['order_status'];
  423. return $this->success('操作成功', $data);
  424. }
  425. /**
  426. * 申请售后
  427. * @Author: hua
  428. * @DateTime: 2021/10/7 10:29
  429. * @Copyright: copyright (c) 2021 广东七件事集团
  430. * @return mixed|void
  431. */
  432. public function actionDoRefundSubmit()
  433. {
  434. $params = \Yii::$app->request->post();
  435. $res = \Yii::$app->services->validate->validate($params, [
  436. [['order_detail_id'], 'required'],
  437. [['shipping_status', 'pic_list', 'reason', 'refund_price', 'remark', 'type'], 'safe'],
  438. ]);
  439. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  440. $params['user_id'] = $this->user_id;
  441. $params['mall_id'] = $this->mall_id;
  442. $where = [
  443. ['=', 'order_detail_id', $params['order_detail_id']],
  444. ['=', 'user_id', $this->user_id],
  445. ['=', 'mall_id', $this->mall_id],
  446. ['>', 'step_status', 0],
  447. ['<>', 'refund_status', RefundStatusEnum::REVOKE]
  448. ];
  449. $order_refund_model = OrderRefund::getOne($where, true);
  450. if ($order_refund_model) return $this->error('该订单商品已经申请过售后');
  451. $res = OrderRefund::feedback($params);
  452. if ($res === false) return $this->error(Order::getStaticError());
  453. return $this->success('操作成功', ['id' => $res->id]);
  454. }
  455. /**
  456. * 退款列表
  457. * @return mixed|void
  458. */
  459. public function actionRefundList()
  460. {
  461. $params = \Yii::$app->request->get();
  462. $where[] = ['user_id' => $this->user_id];
  463. $where[] = ['mall_id' => $this->mall_id];
  464. $params['order'] = 'id desc';
  465. $params['where'] = $where;
  466. $params['with'] = ['step', 'orderDetail'];
  467. $list = OrderRefund::listPage($params);
  468. $list['mall_name'] = $this->mall['name'];
  469. $list['refund_status_text'] = RefundStatusEnum::getMap();
  470. return $this->success('操作成功 ', $list);
  471. }
  472. /**
  473. * 撤销申请售后
  474. * @Author: hua
  475. * @DateTime: 2021/10/7 10:52
  476. * @Copyright: copyright (c) 2021 广东七件事集团
  477. * @return mixed|void
  478. */
  479. public function actionCancelRefund()
  480. {
  481. $params = \Yii::$app->request->get();
  482. $res = \Yii::$app->services->validate->validate($params, [
  483. [['id'], 'required'],
  484. ]);
  485. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  486. $params['mall_id'] = $this->mall_id;
  487. $params['user_id'] = $this->user_id;
  488. $res = OrderRefund::cancelRefund($params);
  489. if ($res === false) return $this->error(OrderRefund::getStaticError());
  490. return $this->success('操作成功');
  491. }
  492. /**
  493. * 订单-收货
  494. * @Author: hua
  495. * @DateTime: 2021/10/7 14:50
  496. * @Copyright: copyright (c) 2021 广东七件事集团
  497. * @return mixed|void
  498. */
  499. public function actionTakeDelivery()
  500. {
  501. // 商品操作
  502. $form = Yii::$app->request->get();
  503. $rules = [[['id'], 'required'], [['id'], 'integer']];
  504. $res = Yii::$app->services->validate->validate($form, $rules);
  505. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  506. $form['mall_id'] = $this->mall_id;
  507. $form['user_id'] = $this->user_id;
  508. $form['operator_id'] = $this->user_id;
  509. $form['operator_name'] = $this->user->nickname ?? $this->user->mobile;
  510. $res = Order::takeDelivery($form);
  511. if ($res === false) return $this->error(Goods::getStaticError());
  512. return $this->success();
  513. }
  514. /**
  515. * 获取快递公司列表
  516. * @Author: hua
  517. * @DateTime: 2021/10/8 14:38
  518. * @Copyright: copyright (c) 2021 广东七件事集团
  519. * @return mixed|void
  520. */
  521. public function actionExpressList()
  522. {
  523. $params['where'] = [['status' => StatusEnum::ENABLED]];
  524. $params['select'] = 'id,name,code';
  525. $list = Express::lists($params);
  526. return $this->success('', $list);
  527. }
  528. /**
  529. * 申请售后-商家同意后-买家发货
  530. * @Author: hua
  531. * @DateTime: 2021/10/8 14:42
  532. * @Copyright: copyright (c) 2021 广东七件事集团
  533. */
  534. public function actionRefundSend()
  535. {
  536. $params = \Yii::$app->request->post();
  537. $res = \Yii::$app->services->validate->validate($params, [
  538. [['id'], 'required'],
  539. [['express', 'express_no'], 'safe'],
  540. ]);
  541. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  542. $params['mall_id'] = $this->mall_id;
  543. $params['user_id'] = $this->user_id;
  544. $res = OrderRefundStep::refundSend($params);
  545. if ($res === false) return $this->error(Order::getStaticError());
  546. return $this->success('操作成功');
  547. }
  548. /**
  549. * 申请售后-换货-买家收货
  550. * @Author: hua
  551. * @DateTime: 2021/10/9 15:52
  552. * @Copyright: copyright (c) 2021 广东七件事集团
  553. * @return mixed|void
  554. */
  555. public function actionRefundTakeDelivery()
  556. {
  557. $params = \Yii::$app->request->get();
  558. $res = \Yii::$app->services->validate->validate($params, [
  559. [['id'], 'required'],
  560. ]);
  561. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  562. $params['mall_id'] = $this->mall_id;
  563. $params['user_id'] = $this->user_id;
  564. $res = OrderRefundStep::refundTakeDelivery($params);
  565. if ($res === false) return $this->error(OrderRefundStep::getStaticError());
  566. return $this->success('操作成功');
  567. }
  568. /**
  569. * 售后详情
  570. * @Author: hua
  571. * @DateTime: 2021/10/8 14:45
  572. * @Copyright: copyright (c) 2021 广东七件事集团
  573. */
  574. public function actionRefundDetail()
  575. {
  576. $params = \Yii::$app->request->get();
  577. $where = [['id' => $params['id']], 'user_id' => $this->user_id];
  578. $detail = OrderRefund::getOne($where, true, ['step', 'orderDetail', 'order' => function ($query) {
  579. return $query->select('id, order_source');
  580. }]);
  581. $detail['refund_status_map'] = RefundStatusEnum::getMap();
  582. $detail['step_status_map'] = RefundStatusEnum::getStepStatusText(); //adjust_money
  583. if ($detail['orderDetail']['goods_price']) {
  584. $detail['orderDetail']['goods_price'] = $detail['orderDetail']['goods_price'] + $detail['orderDetail']['adjust_money'];
  585. $detail['orderDetail']['goods_price'] = round($detail['orderDetail']['goods_price'], 2);
  586. }
  587. return $this->success('操作成功', $detail);
  588. }
  589. /**
  590. * @desc:去支付
  591. * @Author: hua
  592. * @Date: 2021/10/19
  593. * @Time: 14:12
  594. * @Copyright: copyright (c) 2021 广东七件事集团
  595. * @return mixed|void
  596. */
  597. public function actionToPay()
  598. {
  599. $params = \Yii::$app->request->get();
  600. $res = \Yii::$app->services->validate->validate($params, [
  601. [['id'], 'required'],
  602. ]);
  603. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  604. $params['mall_id'] = $this->mall_id;
  605. $params['user_id'] = $this->user_id;
  606. $res = Order::toPay($params);
  607. if ($res === false) return $this->error(Order::getStaticError());
  608. return $this->success('操作成功', $res);
  609. }
  610. /**
  611. * @desc:提醒发货
  612. * @Author: hua
  613. * @Date: 2021/10/20
  614. * @Time: 9:04
  615. * @Copyright: copyright (c) 2021 广东七件事集团
  616. * @return mixed
  617. */
  618. public function actionRemindSend()
  619. {
  620. $params = \Yii::$app->request->get();
  621. $res = \Yii::$app->services->validate->validate($params, [
  622. [['order_id'], 'required'],
  623. ]);
  624. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  625. $params['user_id'] = $this->user_id;
  626. $params['mall_id'] = $this->mall_id;
  627. $params['user'] = $this->user;
  628. $res = Order::remindSend($params);
  629. if ($res === false) return $this->error(Order::getStaticError());
  630. return $this->success('提醒成功', []);
  631. }
  632. /**
  633. * 创建充值订单
  634. */
  635. public function actionCreateRecharge()
  636. {
  637. $post = Yii::$app->request->post();
  638. $validateService = Yii::$app->services->validate;
  639. $rules = [
  640. [['pay_price'], 'required'],
  641. ];
  642. $valid = $validateService->validate($post, $rules);
  643. if (!$valid) {
  644. return $this->error($validateService->getFirstErrorSummary());
  645. }
  646. $post['mall_id'] = $this->mall_id;
  647. $post['user_id'] = $this->user_id;
  648. $recharge = new RechargeOrders();
  649. $res = $recharge->createOrder($post);
  650. return $this->success('操作成功', $res);
  651. }
  652. /**
  653. * 获取订单支付状态
  654. */
  655. public function actionGetIsPay()
  656. {
  657. $get = \Yii::$app->request->get();
  658. if (!isset($get['trade_no'])) {
  659. return [
  660. 'code' => 0,
  661. 'msg' => '无trade_no',
  662. ];
  663. }
  664. $order_info = PaymentTrade::getOne([['out_trade_no' => $get['trade_no']]], true, '', '', 'is_pay');
  665. return $this->success('操作成功', $order_info);
  666. }
  667. //待还款
  668. public function actionCreditOrderList()
  669. {
  670. $params = \Yii::$app->request->get();
  671. $where[] = ['mall_id' => $this->mall_id];
  672. $where[] = ['user_id' => $this->user_id];
  673. $where[] = ['status' => StatusEnum::ENABLED];
  674. $where[] = ['is_repayment' => StoreEnum::NOREPAYMENT];
  675. $where[] = ['>','pay_time' ,0];
  676. // if (!empty($params['keyword'])) {
  677. // $goods_list = Goods::lists(['where' => [
  678. // ['mall_id' => $this->mall_id],
  679. // ['like', 'goods_name', trim($params['keyword']) . '%', false]
  680. // ], 'select' => 'id']);
  681. //
  682. // $goods_ids = array_column($goods_list, 'id');
  683. // $order_detail_list = OrderDetail::lists(['where' => [
  684. // ['mall_id' => $this->mall_id],
  685. // ['in', 'goods_id', $goods_ids]
  686. // ], 'select' => 'order_id']);
  687. // $order_ids = array_column($order_detail_list, 'order_id');
  688. // $where[] = [
  689. // 'or',
  690. // ['id' => $order_ids],
  691. // ];
  692. // }
  693. $params['order'] = 'id desc';
  694. if (!empty($params['keyword'])) {
  695. $goods_list = StoreGoods::lists(['where' => [
  696. ['mall_id' => $this->mall_id],
  697. ['like', 'goods_name', trim($params['keyword'])]
  698. ], 'select' => 'id']);
  699. $goods_ids = array_column($goods_list, 'id');
  700. $order_detail_list = StoreOrderDetail::lists(['where' => [
  701. ['mall_id' => $this->mall_id],
  702. ['in', 'goods_id', $goods_ids]
  703. ], 'select' => 'order_id']);
  704. $order_ids = array_column($order_detail_list, 'order_id');
  705. $where[] = [
  706. 'or',
  707. ['order_id' => $order_ids],
  708. ];
  709. }
  710. $select = 'id,store_id,order_id,down_payments,credit_money,type,extra';
  711. $params['order'] = 'id desc';
  712. $params['select'] = $select;
  713. $params['where'] = $where;
  714. $order_list = StoreOrderCredit::listPage($params);
  715. if (!empty($order_list['list'])) {
  716. $store_ids = array_column($order_list['list'], 'store_id');
  717. $order_ids = array_column($order_list['list'], 'order_id');
  718. $order_id_arr = [];
  719. foreach ($order_list['list'] as $val){
  720. if($val['type']==1){
  721. $order_id_arr[] =$val['order_id'];
  722. }
  723. }
  724. $order_nos = [];
  725. $store_order_list = StoreOrder::lists(['where' => [['id' => $order_ids]], 'index' => 'id', 'select' => 'id,pay_money,order_status,shipping_type,order_no']);
  726. foreach ($store_order_list as $v){
  727. if(in_array($v['id'],$order_id_arr)){
  728. $order_nos[]=$v['order_no'];
  729. }
  730. }
  731. $main_order_list = Order::lists(['where' => [['order_no' => $order_nos]], 'index' => 'order_no', 'select' => 'id,order_no']);
  732. $store_order_detail_list = StoreOrderDetail::lists(['where' => [['order_id' => $order_ids]], 'select' => 'id,order_id,goods_id,goods_name,pic_url,num,price,goods_price']);
  733. $store_order_detail_arr = [];
  734. foreach ($store_order_detail_list as $val) {
  735. $store_order_detail_arr[$val['order_id']][] = $val;
  736. }
  737. $store_list = Store::lists(['where' => [['id' => $store_ids]], 'index' => 'id', 'select' => 'id,store_name,logo_img']);
  738. $main_order_ids = array_column($main_order_list,'id');
  739. $refund_list = OrderRefund::lists([
  740. 'where'=>[
  741. ['order_id'=>$main_order_ids],
  742. ['type'=>[1,2]],
  743. ['refund_status'=>1]
  744. ],
  745. ]);
  746. $goods_ids = [];
  747. $order_detail_ids = [];
  748. if(!empty($refund_list)){
  749. foreach ($refund_list as $item){
  750. $order_detail_ids[]=$item['order_detail_id'];
  751. }
  752. if(!empty($order_detail_ids)){
  753. $store_order_detail_list = StoreOrderDetail::lists([
  754. 'where'=>[
  755. ['main_order_detail_id'=>$order_detail_ids],
  756. ],
  757. ]);
  758. foreach ($store_order_detail_list as $v){
  759. $goods_ids[$v['order_id']][] = $v['goods_id'];
  760. }
  761. }
  762. }
  763. foreach ($order_list['list'] as &$item) {
  764. $item['mall_name'] = $item['mall_logo'] = '';
  765. $item['pay_money'] = $item['order_status'] = $item['shipping_type'] = '';
  766. $item['detail'] = [];
  767. if (!empty($store_list[$item['store_id']])) {
  768. $item['mall_name'] = $store_list[$item['store_id']]['store_name'];
  769. $item['mall_logo'] = $store_list[$item['store_id']]['logo_img'];
  770. }
  771. if (!empty($store_order_list[$item['order_id']])) {
  772. $item['pay_money'] = $item['down_payments'];
  773. $item['order_status'] = $store_order_list[$item['order_id']]['order_status'];
  774. $item['shipping_type'] = $store_order_list[$item['order_id']]['shipping_type'];
  775. }
  776. if($item['type']==1){
  777. if (!empty($store_order_detail_arr[$item['order_id']])) {
  778. $extra = json_decode($item['extra'],true);
  779. $detail = $store_order_detail_arr[$item['order_id']];
  780. foreach ($detail as $key=>$val){
  781. if(!empty($goods_ids[$val['order_id']])&&in_array($val['goods_id'],$goods_ids[$item['order_id']])){
  782. unset($detail[$key]);
  783. $temp_credit_money = $extra[$val['goods_id']]['credit_money']??0;
  784. $item['credit_money'] = bcsub($item['credit_money'],$temp_credit_money,2);
  785. }
  786. }
  787. $item['detail'] = $detail;
  788. }
  789. if(isset($store_order_list[$item['order_id']])){
  790. $order_no = $store_order_list[$item['order_id']]['order_no'];
  791. if(isset($main_order_list[$order_no])){
  792. $item['id'] = $main_order_list[$order_no]['id'];
  793. }
  794. }
  795. }
  796. unset($item['extra']);
  797. }
  798. }
  799. $order_list['shipping_type_text'] = ShippingTypeEnum::getMap();
  800. $order_list['order_status_text'] = OrderStatusEnum::getMap();
  801. return $this->success('操作成功', $order_list);
  802. }
  803. public function actionGetCredit(){
  804. $params = \Yii::$app->request->post();
  805. $trade_id = $params['trade_id']??0;
  806. $credit_money = 0;
  807. $list = PaymentTradeOrder::lists(['where'=>[['trade_id'=>$trade_id]]]);
  808. if(empty($list)) return ['pay_money'=>0,'credit_money'=>$credit_money];
  809. $pay_money = array_sum(array_column($list,'pay_fee'));
  810. $order_no = $list[0]['order_no'];
  811. $order_nos = array_column($list,'order_no');
  812. if(!empty($order_no[0])&&$order_no[0]=='C'){
  813. $type = 2;
  814. $list = StoreCashierOrder::lists(['where'=>[['order_no'=>$order_nos]]]);
  815. }else{
  816. $type = 1;
  817. $list = StoreOrder::lists(['where'=>[['order_no'=>$order_nos]]]);
  818. }
  819. if(empty($list)) return ['pay_money'=>0,'credit_money'=>$credit_money];
  820. $order_ids = array_column($list,'id');
  821. $res = StoreOrderCredit::lists(['where'=>[['order_id'=>$order_ids],['type'=>$type]],'select'=>'sum(down_payments) as down_payments,sum(credit_money) as credit_money']);
  822. if(!empty($res[0]['down_payments'])) $pay_money = $res[0]['down_payments'];
  823. if(!empty($res[0]['credit_money'])) $credit_money = $res[0]['credit_money'];
  824. return ['pay_money'=>$pay_money,'credit_money'=>$credit_money];
  825. }
  826. public function actionRepayment(){
  827. $params = \Yii::$app->request->post();
  828. try {
  829. if(empty($params['order_id'])) return $this->error('订单id不能为空');
  830. $res = StoreOrderCredit::repaymentByPay($params['order_id']??0,$params['type']??1);
  831. if ($res === false) return $this->error(StoreOrderCredit::getStaticError());
  832. return $this->success('操作成功', $res);
  833. }catch (\Exception $e){
  834. return $this->error($e->getMessage());
  835. }
  836. }
  837. private function getPlatformStoreOrderDetail($clerk_detail)
  838. {
  839. $order_detail_id = $clerk_detail['order_detail_id'];
  840. $select = 'id,mall_id,store_id,order_no,receiver_name,mobile,pay_money,shipping_money,original_goods_price,coupon_money,goods_price,order_status,pay_status,
  841. shipping_status,review_status,is_feedback,address,created_at,pay_time,region_name,remark,consign_time,finish_time,sign_time,shipping_type,payment_type,score,score_money,marketing_id,marketing_type,extra_info,order_source';
  842. $where = [];
  843. $where[] = ['mall_id' => $this->mall_id];
  844. $where[] = ['id' => $clerk_detail['order_id']];
  845. $order = Order::getOne($where, true, ['detail' => function ($query) use($order_detail_id) {
  846. $query->select('id,order_id,goods_id,goods_name,pic_url,num,price,is_feedback,sign_id,goods_attr_name,order_status,adjust_money,extra_info,goods_price')->where(['id' => $order_detail_id]);
  847. }], false, $select);
  848. if (empty($order) || $order['store_id'] > 0) return $this->error('该订单不存在', []);
  849. $rse = StoreClerk::getOne([['mall_id' => $this->mall_id], ['user_id' => $this->user_id], ['status' => StatusEnum::ENABLED]],true);
  850. if (empty($rse)) return $this->error('你不是核销员');
  851. //goods_id
  852. $goods_setting = PlatformStoreClerkGoodsSetting::getGoodsInfo($this->mall_id,$clerk_detail['goods_id']);
  853. if(!$goods_setting ) return $this->error('商品尚未关联该门店');
  854. //$store_ids = explode(',',$goods_setting['store_ids']);
  855. //$rse = StoreClerk::getOne([['mall_id' => $this->mall_id], ['user_id' => $this->user_id], ['status' => StatusEnum::ENABLED],['store_id' => $store_ids]],true);
  856. //$store_id = $rse['store_id'];
  857. //if(!in_array($store_id,$store_ids)) return $this->error('商品尚未关联该门店');
  858. $clerk_list = StoreClerk::find()->where(['mall_id' => $this->mall_id,'user_id' => $this->user_id,'status' => StatusEnum::ENABLED])->asArray()->all();
  859. if(!$clerk_list) return $this->error('你不是核销员');
  860. $clerk_store = array_column($clerk_list,null,'store_id');
  861. $clerk_store_ids = array_keys($clerk_store);
  862. $cate_id = $goods_setting['cate_id'];
  863. $is_bind_store = $goods_setting['is_bind_store'] ?? 0;
  864. $where = ['id' => $clerk_store_ids,'status' => StatusEnum::ENABLED];
  865. if($is_bind_store > 0 && $cate_id){
  866. $where['c_id'] = $cate_id;
  867. }
  868. $store_list = Store::find()->where($where)->select('id')->asArray()->all();
  869. if(!$store_list) return $this->error('商品尚未关联该门店');
  870. $store_id = $store_list[0]['id'];
  871. $clerk_user_id = $clerk_store[$store_id]['user_id'];
  872. $marketing = OrderMarketing::getMarketingInfo($order);
  873. $order['order_status_text'] = OrderStatusEnum::getMap();
  874. $order['is_feedback_text'] = OrderStatusEnum::getFeedbackMap();
  875. $order['shipping_type_text'] = ShippingTypeEnum::getMap();
  876. $order['payment_type_text'] = PayTypeEnum::getMap();
  877. $order['pay_type_list'] = \Yii::$app->services->pay->getEnablePayment($this->mall_id, $this->platform);
  878. $adjust_money = array_sum(array_column($order['detail'], 'adjust_money'));//预留字段
  879. if ($adjust_money) {
  880. $order['change_price'] = $adjust_money;
  881. }
  882. $order['marketing'] = $marketing;
  883. $order['marketing_type_map'] = MarketingTypeEnum::getMap();
  884. $order_setting = Yii::$app->services->setting->mall->get($this->mall_id, 'order');
  885. $order['payment_expire_time'] = $order_setting['payment_expire_time'] ?? 30;
  886. $order['auto_receiving_time'] = $order_setting['auto_receiving_time'] ?? 14;
  887. // 获取订单详情的状态文字描述
  888. $order['status_text'] = OrderStatusEnum::getApiStatus($order['status'], $order['shipping_type']);
  889. $order['status'] == OrderStatusEnum::NOT_PAY && $order['status_text']['desc'] = $order['payment_expire_time'] . $order['status_text']['desc'];
  890. $order['status'] == OrderStatusEnum::SHIPMENTS && $order['status_text']['desc'] = $order['auto_receiving_time'] . $order['status_text']['desc'];
  891. // 公共调用
  892. $order = GlobalInvoke::exec(GlobalInvoke::ORDER_DETAIL, $this->mall_id, [
  893. 'order' => $order,
  894. 'mall_id' => $this->mall_id,
  895. ]) ?: $order;
  896. $order['show_clerk_button'] = 1;
  897. $order['clerk_code'] = $clerk_detail['clerk_code'];
  898. $order['pay_money'] = $order['detail'][0]['goods_price'];
  899. return $this->success('操作成功', $order);
  900. }
  901. // 获取店铺的的配送方式
  902. public function getStoreShippingType($data){
  903. $store = Store::getOne([['id' => $data['store_id']], ['mall_id' => $this->mall_id]]);
  904. $freight_type = json_decode($store['freight_type'], true);
  905. $express_delivery = $freight_type['express_delivery'] ? ShippingTypeEnum::LOGISTICS : 0; // 快递发货
  906. $merchant_distribution = $freight_type['merchant_distribution'] ? ShippingTypeEnum::MERCHANT_DISTRIBUTION : 0; // 同城配送
  907. $self_mention = $freight_type['self_mention'] ? ShippingTypeEnum::PICKUP : 0; // 上门自提
  908. return [$express_delivery,$merchant_distribution,$self_mention];
  909. }
  910. }