ChainOrder.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. <?php
  2. /*
  3. * 门店管理中心
  4. */
  5. namespace app\api\controller;
  6. use think\facade\Lang;
  7. class ChainOrder extends MobileChain {
  8. public function initialize() {
  9. parent::initialize();
  10. Lang::load(base_path() . 'home/lang/' . config('lang.default_lang') . '/chain.lang.php');
  11. }
  12. /**
  13. * @api {POST} api/ChainOrder/get_order_list 订单列表
  14. * @apiVersion 1.0.0
  15. * @apiGroup ChainOrder
  16. *
  17. * @apiHeader {String} X-DS-KEY 门店授权token
  18. *
  19. * @apiParam {String} state_type 订单类型(state_default未到站state_arrive已到站state_pickup已取货)
  20. * @apiParam {String} search_name 关键词
  21. * @apiParam {String} hidden_success 是否隐藏已提货订单
  22. *
  23. * @apiSuccess {String} code 返回码,10000为成功
  24. * @apiSuccess {String} message 返回消息
  25. * @apiSuccess {Object} result 返回数据
  26. */
  27. public function get_order_list() {
  28. $chain_order_model = model('chain_order');
  29. $condition = array();
  30. $condition[] = array('chain_order_state', 'not in', [ORDER_STATE_CANCEL, ORDER_STATE_NEW]);
  31. $condition[] = array('chain_id', '=', $this->chain_info['chain_id']);
  32. $search_name = input('get.search_name');
  33. if ($search_name != '') {
  34. $condition[] = array('order_sn|shipping_code', 'like', '%' . $search_name . '%');
  35. View::assign('search_name', $search_name);
  36. }
  37. $allow_state_array = array('state_default', 'state_arrive', 'state_pickup');
  38. $state_type = input('post.state_type');
  39. if (in_array($state_type, $allow_state_array)) {
  40. $condition[] = array('chain_order_state', '=', str_replace($allow_state_array, array(ORDER_STATE_SEND, ORDER_STATE_PICKUP, ORDER_STATE_SUCCESS), $state_type));
  41. }
  42. $order_model = model('order');
  43. $chain_order_list = $chain_order_model->getChainOrderList($condition, '*', 10);
  44. foreach ($chain_order_list as $key => $val) {
  45. $chain_order_list[$key]['state_desc'] = get_order_state(array('order_state' => $val['chain_order_state']));
  46. $condition = array();
  47. $condition[] = array('order_id', '=', $val['order_id']);
  48. if ($val['order_goods_id']) {
  49. $condition[] = array('rec_id', '=', $val['order_goods_id']);
  50. }
  51. $extend_order_goods = $order_model->getOrdergoodsList($condition);
  52. foreach ($extend_order_goods as $k => $v) {
  53. $extend_order_goods[$k]['image_240_url'] = goods_cthumb($v['goods_image'], 240, $v['store_id']);
  54. }
  55. $chain_order_list[$key]['goods_list'] = $extend_order_goods;
  56. }
  57. $mobile_page = $chain_order_model->page_info;
  58. $chain_order_list = array_values($chain_order_list);
  59. $result = array_merge(array('chain_order_list' => $chain_order_list), mobile_page($mobile_page));
  60. ds_json_encode(10000, '', $result);
  61. }
  62. /**
  63. * @api {POST} api/ChainOrder/order_info 订单详情
  64. * @apiVersion 1.0.0
  65. * @apiGroup ChainOrder
  66. *
  67. * @apiHeader {String} X-DS-KEY 卖家授权token
  68. *
  69. * @apiParam {String} chain_order_id 订单id
  70. *
  71. * @apiSuccess {String} code 返回码,10000为成功
  72. * @apiSuccess {String} message 返回消息
  73. * @apiSuccess {Object} result 返回数据
  74. * @apiSuccess {Object} result.order_info 订单信息
  75. * @apiSuccess {Int} result.order_info.if_cancel 是否可取消 true是false否
  76. * @apiSuccess {Int} result.order_info.if_modify_price 是否可修改运费 true是false否
  77. * @apiSuccess {Int} result.order_info.if_spay_price 是否可修改商品价格 true是false否
  78. * @apiSuccess {Int} result.order_info.if_send 是否可发货 true是false否
  79. * @apiSuccess {Int} result.order_info.if_lock 是否被锁定 true是false否
  80. * @apiSuccess {Int} result.order_info.if_deliver 是否显示物流跟踪 true是false否
  81. * @apiSuccess {Object} result.order_info.extend_order_common 订单其他信息 (返回字段参考ordercommon表)
  82. * @apiSuccess {Object} result.order_info.extend_order_goods 订单商品信息 (返回字段参考ordergoods表)
  83. * @apiSuccess {Object} result.order_info.extend_order_goods.image_240_url 商品图片完整路径
  84. * @apiSuccess {Object} result.order_info.extend_order_goods.goods_type_cn 商品类型名称
  85. * @apiSuccess {Object} result.order_info.extend_order_goods.goods_url 商品PC链接
  86. * @apiSuccess {Object} result.order_info.extend_member 用户信息 (返回字段参考member表)
  87. * @apiSuccess {String} result.order_info.invoice 发票信息
  88. * @apiSuccess {String} result.order_info.reciver_phone 收货人手机号
  89. * @apiSuccess {String} result.order_info.reciver_name 收货人姓名
  90. * @apiSuccess {String} result.order_info.reciver_addr 收货地址
  91. * @apiSuccess {String} result.order_info.order_cancel_day 自动取消订单日期
  92. * @apiSuccess {Object} result.order_info.express_info 物流信息
  93. * @apiSuccess {String} result.order_info.express_info.express_code 物流公司代码
  94. * @apiSuccess {String} result.order_info.express_info.express_name 物流公司名称
  95. * @apiSuccess {String} result.order_info.express_info.express_url 物流公司官网
  96. * @apiSuccess {object} result.order_info.zengpin_list 赠品列表 (返回字段参考ordergoods表)
  97. * @apiSuccess {object} result.order_info.goods_list 订单商品列表 (返回字段参考ordergoods表)
  98. * @apiSuccess {object} result.order_info.goods_count 商品数量
  99. * @apiSuccess {object[]} result.order_info.extend_log.order_log_list 订单操作日志列表 (返回字段参考orderlog表)
  100. * @apiSuccess {object} result.order_info.daddress_info 发货信息 (返回字段参考daddress表)
  101. * @apiSuccess {object} result.order_info.real_pay_amount 实际支付金额
  102. */
  103. public function order_info() {
  104. $chain_order_id = intval(input('param.chain_order_id'));
  105. if (!$chain_order_id) {
  106. ds_json_encode(10001, lang('param_error'));
  107. }
  108. $chain_order_model = model('chain_order');
  109. $order_model = model('order');
  110. $condition = array();
  111. $condition[] = array('chain_order_id', '=', $chain_order_id);
  112. $condition[] = array('chain_id', '=', $this->chain_info['chain_id']);
  113. $order_info = $chain_order_model->getChainOrderInfo($condition);
  114. if (empty($order_info)) {
  115. ds_json_encode(10001, lang('store_order_none_existr'));
  116. }
  117. $order_info['state_desc'] = get_order_state(array('order_state' => $order_info['chain_order_state']));
  118. $condition = array();
  119. $condition[] = array('order_id', '=', $order_info['order_id']);
  120. if ($order_info['order_goods_id']) {
  121. $condition[] = array('rec_id', '=', $order_info['order_goods_id']);
  122. }
  123. $extend_order_goods = $order_model->getOrdergoodsList($condition);
  124. foreach ($extend_order_goods as $k => $v) {
  125. $extend_order_goods[$k]['image_240_url'] = goods_cthumb($v['goods_image'], 240, $v['store_id']);
  126. }
  127. $order_info['goods_list'] = $extend_order_goods;
  128. ds_json_encode(10000, '', array('chain_order_info' => $order_info));
  129. }
  130. /**
  131. * @api {POST} api/ChainOrder/search_deliver 物流跟踪
  132. * @apiVersion 1.0.0
  133. * @apiGroup ChainOrder
  134. *
  135. * @apiHeader {String} X-DS-KEY 门店授权token
  136. *
  137. * @apiParam {String} chain_order_id 订单id
  138. *
  139. * @apiSuccess {String} code 返回码,10000为成功
  140. * @apiSuccess {String} message 返回消息
  141. * @apiSuccess {Object} result 返回数据
  142. * @apiSuccess {String} result.express_name 物流公司名称
  143. * @apiSuccess {String} result.shipping_code 物流单号
  144. * @apiSuccess {Object[]} result.deliver_info 物流数据
  145. * @apiSuccess {String} result.deliver_info.context 内容
  146. * @apiSuccess {String} result.deliver_info.time 时间
  147. */
  148. public function search_deliver() {
  149. $chain_order_id = intval(input('post.chain_order_id'));
  150. if ($chain_order_id <= 0) {
  151. ds_json_encode(10001, lang('param_error'));
  152. }
  153. $chain_order_model = model('chain_order');
  154. $chain_order_info = $chain_order_model->getChainOrderInfo(array('chain_order_id' => $chain_order_id, 'chain_id' => $this->chain_info['chain_id']));
  155. if (empty($chain_order_info)) {
  156. ds_json_encode(10001, lang('order_not_exist'));
  157. }
  158. $express = rkcache('express', true);
  159. $express_code = $chain_order_info['express_code'];
  160. $express_name = $chain_order_info['express_name'];
  161. $deliver_info = $this->_get_express($express_code, $chain_order_info['shipping_code'], $chain_order_info['reciver_mobphone']);
  162. ds_json_encode(10000, '', array('express_name' => $express_name, 'shipping_code' => $chain_order_info['shipping_code'], 'deliver_info' => $deliver_info));
  163. }
  164. /**
  165. * 从第三方取快递信息
  166. *
  167. */
  168. public function _get_express($express_code, $shipping_code, $phone) {
  169. $result = model('express')->queryExpress($express_code, $shipping_code, $phone);
  170. if ($result['Success'] != true) {
  171. ds_json_encode(10001, lang('deliver_search_fail'));
  172. }
  173. $content['Traces'] = array_reverse($result['Traces']);
  174. $output = array();
  175. if (is_array($content['Traces'])) {
  176. foreach ($content['Traces'] as $k => $v) {
  177. if ($v['AcceptTime'] == '')
  178. continue;
  179. //$output[] = $v['time'] . '&nbsp;&nbsp;' . $v['context'];
  180. $output[$k]['AcceptTime'] = $v['AcceptTime'];
  181. $output[$k]['AcceptStation'] = $v['AcceptStation'];
  182. }
  183. }
  184. if (empty($output))
  185. ds_json_encode(10001, lang('deliver_not_exist'));
  186. return $output;
  187. }
  188. /**
  189. * @api {POST} api/ChainOrder/arrive_point 订单到站
  190. * @apiVersion 1.0.0
  191. * @apiGroup ChainOrder
  192. *
  193. * @apiHeader {String} X-DS-KEY 门店授权token
  194. *
  195. * @apiParam {String} chain_chain_order_id 订单ID
  196. *
  197. * @apiSuccess {String} code 返回码,10000为成功
  198. * @apiSuccess {String} message 返回消息
  199. * @apiSuccess {Object} result 返回数据
  200. */
  201. public function arrive_point() {
  202. $chain_order_id = intval(input('param.chain_order_id'));
  203. if ($chain_order_id <= 0) {
  204. ds_json_encode(10001, lang('param_error'));
  205. }
  206. $chain_order_model = model('chain_order');
  207. $condition = array();
  208. $condition[] = array('chain_order_id', '=', $chain_order_id);
  209. $condition[] = array('chain_id', '=', $this->chain_info['chain_id']);
  210. $chain_order_info = $chain_order_model->getChainOrderInfo($condition);
  211. if (!$chain_order_info) {
  212. ds_json_encode(10001, lang('order_not_exist'));
  213. }
  214. $pickup_code = $this->createPickupCode();
  215. // 更新提货订单表数据
  216. $update = array();
  217. $update['chain_order_pickup_code'] = $pickup_code;
  218. $chain_order_model->editChainOrderArrive($update, array('chain_order_id' => $chain_order_id, 'chain_id' => $this->chain_info['chain_id']));
  219. //更改订单状态
  220. $order_model = model('order');
  221. $order_model->editOrder(array('order_state' => ORDER_STATE_PICKUP), array(
  222. 'order_id' => $chain_order_info['order_id'],
  223. 'order_state' => ORDER_STATE_SEND
  224. ));
  225. // 发送短信提醒
  226. \mall\queue\QueueClient::push('sendPickupcode', array('pickup_code' => $pickup_code, 'order_id' => $chain_order_info['order_id']));
  227. ds_json_encode(10000, lang('ds_common_op_succ'));
  228. }
  229. /**
  230. * @api {POST} api/ChainOrder/pickup_parcel 订单取货
  231. * @apiVersion 1.0.0
  232. * @apiGroup ChainOrder
  233. *
  234. * @apiHeader {String} X-DS-KEY 门店授权token
  235. *
  236. * @apiParam {String} chain_order_id 订单ID
  237. * @apiParam {String} pickup_code 取货码
  238. *
  239. * @apiSuccess {String} code 返回码,10000为成功
  240. * @apiSuccess {String} message 返回消息
  241. * @apiSuccess {Object} result 返回数据
  242. */
  243. public function pickup_parcel() {
  244. if (!request()->isPost()) {
  245. } else {
  246. $chain_order_id = intval(input('post.chain_order_id'));
  247. $pickup_code = intval(input('post.pickup_code'));
  248. if ($chain_order_id <= 0 || $pickup_code <= 0) {
  249. ds_json_encode(10001, lang('param_error'));
  250. }
  251. $chain_order_model = model('chain_order');
  252. $chain_order_info = $chain_order_model->getChainOrderInfo(array('chain_order_id' => $chain_order_id, 'chain_id' => $this->chain_info['chain_id'], 'chain_order_lock_state' => 0, 'chain_order_pickup_code' => $pickup_code));
  253. if (empty($chain_order_info)) {
  254. ds_json_encode(10001, lang('pickup_code_error'));
  255. }
  256. $result = $chain_order_model->editChainOrderPickup(array(), array('chain_order_id' => $chain_order_id, 'chain_id' => $this->chain_info['chain_id'], 'chain_order_lock_state' => 0, 'chain_order_pickup_code' => $pickup_code));
  257. if ($result) {
  258. // 更新订单状态
  259. $order_info = model('order')->getOrderInfo(array('order_id' => $chain_order_info['order_id']));
  260. model('order', 'logic')->changeOrderStateReceive($order_info, 'buyer', lang('chain'), lang('chain_receive_goods'));
  261. ds_json_encode(10000, lang('ds_common_op_succ'));
  262. } else {
  263. ds_json_encode(10001, lang('ds_common_op_fail'));
  264. }
  265. }
  266. }
  267. /**
  268. * 生成提货码
  269. */
  270. private function createPickupCode() {
  271. return rand(1, 9) . rand(0, 9) . rand(0, 9) . rand(0, 9);
  272. }
  273. }