Order.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. <?php
  2. /**
  3. * Index.php
  4. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  5. * =========================================================
  6. * Copy right 2015-2025 杭州牛之云科技有限公司, 保留所有权利。
  7. * ----------------------------------------------
  8. * 官方网址: https://www.niushop.com
  9. * =========================================================
  10. * @author : niuteam
  11. * @date : 2022.8.8
  12. * @version : v5.0.0.1
  13. */
  14. namespace app\api\controller;
  15. use app\model\express\ExpressPackage;
  16. use app\model\order\Order as OrderModel;
  17. use app\model\order\OrderCommon as OrderCommonModel;
  18. use app\model\order\OrderRefund as OrderRefundModel;
  19. use app\model\order\Config as ConfigModel;
  20. use app\model\order\VirtualOrder;
  21. use think\facade\Db;
  22. class Order extends BaseApi
  23. {
  24. /**
  25. * 详情信息
  26. */
  27. public function detail()
  28. {
  29. $token = $this->checkToken();
  30. if ($token[ 'code' ] < 0) return $this->response($token);
  31. $order_common_model = new OrderCommonModel();
  32. $order_id = isset($this->params[ 'order_id' ]) ? $this->params[ 'order_id' ] : 0;
  33. $result = $order_common_model->getMemberOrderDetail($order_id, $this->member_id, $this->site_id);
  34. //获取未付款订单自动关闭时间 字段'auto_close'
  35. $config_model = new ConfigModel;
  36. $order_event_time_config = $config_model->getOrderEventTimeConfig($this->site_id, 'shop');
  37. $auto_close = $order_event_time_config[ 'data' ][ 'value' ][ 'auto_close' ] * 60 ?? [];
  38. $result[ 'data' ][ 'auto_close' ] = $auto_close;
  39. return $this->response($result);
  40. }
  41. /**
  42. * 列表信息
  43. */
  44. public function lists()
  45. {
  46. $token = $this->checkToken();
  47. if ($token[ 'code' ] < 0) return $this->response($token);
  48. $order_common_model = new OrderCommonModel();
  49. $search_text = isset($this->params[ 'searchText' ]) ? $this->params[ 'searchText' ] : "";
  50. $condition = array (
  51. [ "o.member_id", "=", $this->member_id ],
  52. [ "o.site_id", "=", $this->site_id ],
  53. [ "o.is_delete", '=', 0 ]
  54. );
  55. $order_status = isset($this->params[ 'order_status' ]) ? $this->params[ 'order_status' ] : 'all';
  56. switch ( $order_status ) {
  57. case "waitpay"://待付款
  58. $condition[] = [ "o.order_status", "=", 0 ];
  59. $condition[] = [ 'o.order_scene', '=', 'online' ];
  60. break;
  61. case "waitsend"://待发货
  62. $condition[] = [ "o.order_status", "=", 1 ];
  63. break;
  64. case "waitconfirm"://待收货
  65. $condition[] = [ "o.order_status", "in", [ 2, 3 ] ];
  66. $condition[] = [ "o.order_type", "<>", 4 ];
  67. break;
  68. //todo 这儿改了之后要考虑旧数据的问题
  69. case 'wait_use'://待使用
  70. $condition[] = [ "o.order_status", "in", [ 3, 11 ] ];
  71. $condition[] = [ "o.order_type", "=", 4 ];
  72. break;
  73. case "waitrate"://待评价
  74. $condition[] = [ "o.order_status", "in", [ 4, 10 ] ];
  75. $condition[] = [ "o.is_evaluate", "=", 1 ];
  76. $condition[] = [ "o.evaluate_status", "=", 0 ];
  77. break;
  78. default:
  79. $condition[] = [ '', 'exp', Db::raw("o.order_scene = 'online' OR (o.order_scene = 'cashier' AND o.pay_status = 1)") ];
  80. }
  81. // if (c !== "all") {
  82. // $condition[] = [ "order_status", "=", $order_status ];
  83. // }
  84. //获取未付款订单自动关闭时间 字段'auto_close'
  85. $config_model = new ConfigModel;
  86. $order_event_time_config = $config_model->getOrderEventTimeConfig($this->site_id, 'shop');
  87. $page_index = isset($this->params[ 'page' ]) ? $this->params[ 'page' ] : 1;
  88. $page_size = isset($this->params[ 'page_size' ]) ? $this->params[ 'page_size' ] : PAGE_LIST_ROWS;
  89. $order_id = isset($this->params[ 'order_id' ]) ? $this->params[ 'order_id' ] : 0;
  90. if ($order_id) {
  91. $condition[] = [ "o.order_id", "=", $order_id ];
  92. }
  93. $join = [];
  94. $alias = "o";
  95. if ($search_text) {
  96. $condition[] = [ 'og.sku_name|o.order_no', 'like', '%' . $search_text . '%' ];
  97. $join = [
  98. [ 'order_goods og', 'og.order_id = o.order_id', 'left' ]
  99. ];
  100. }
  101. $res = $order_common_model->getMemberOrderPageList($condition, $page_index, $page_size, "o.create_time desc", "*", $alias, $join);
  102. $auto_close = $order_event_time_config[ 'data' ][ 'value' ][ 'auto_close' ] * 60 ?? [];
  103. $res[ 'data' ][ 'auto_close' ] = $auto_close;
  104. return $this->response($res);
  105. }
  106. /**
  107. * 订单评价基础信息
  108. */
  109. public function evluateinfo()
  110. {
  111. $token = $this->checkToken();
  112. if ($token[ 'code' ] < 0) return $this->response($token);
  113. $order_id = isset($this->params[ 'order_id' ]) ? $this->params[ 'order_id' ] : 0;
  114. if (empty($order_id)) {
  115. return $this->response($this->error('', 'REQUEST_ORDER_ID'));
  116. }
  117. $order_common_model = new OrderCommonModel();
  118. $order_info = $order_common_model->getOrderInfo([
  119. [ 'order_id', '=', $order_id ],
  120. [ 'member_id', '=', $token[ 'data' ][ 'member_id' ] ],
  121. [ 'order_status', 'in', ( '4,10' ) ],
  122. [ 'is_evaluate', '=', 1 ],
  123. ], 'evaluate_status,evaluate_status_name');
  124. $res = $order_info[ 'data' ];
  125. if (!empty($res)) {
  126. if ($res[ 'evaluate_status' ] == 2) {
  127. return $this->response($this->error('', '该订单已评价'));
  128. } else {
  129. $condition = [
  130. [ 'order_id', '=', $order_id ],
  131. [ 'member_id', '=', $token[ 'data' ][ 'member_id' ] ],
  132. [ 'refund_status', '<>', 3 ],
  133. ];
  134. $res[ 'list' ] = $order_common_model->getOrderGoodsList($condition, 'order_goods_id,order_id,order_no,site_id,member_id,goods_id,sku_id,sku_name,sku_image,price,num')[ 'data' ];
  135. return $this->response($this->success($res));
  136. }
  137. } else {
  138. return $this->response($this->error('', '没有找到该订单'));
  139. }
  140. }
  141. /**
  142. * 订单收货(收到所有货物)
  143. */
  144. public function takeDelivery()
  145. {
  146. $token = $this->checkToken();
  147. if ($token[ 'code' ] < 0) return $this->response($token);
  148. $order_id = isset($this->params[ 'order_id' ]) ? $this->params[ 'order_id' ] : 0;
  149. if (empty($order_id)) {
  150. return $this->response($this->error('', 'REQUEST_ORDER_ID'));
  151. }
  152. $order_model = new OrderCommonModel();
  153. $log_data = [
  154. 'uid' => $this->member_id,
  155. 'action_way' => 1
  156. ];
  157. $result = $order_model->orderCommonTakeDelivery($order_id, $log_data);
  158. return $this->response($result);
  159. }
  160. /**
  161. * 关闭订单
  162. */
  163. public function close()
  164. {
  165. $token = $this->checkToken();
  166. if ($token[ 'code' ] < 0) return $this->response($token);
  167. $order_id = isset($this->params[ 'order_id' ]) ? $this->params[ 'order_id' ] : 0;
  168. if (empty($order_id)) {
  169. return $this->response($this->error('', 'REQUEST_ORDER_ID'));
  170. }
  171. $order_model = new OrderModel();
  172. $log_data = [
  173. 'uid' => $this->member_id,
  174. 'action_way' => 1
  175. ];
  176. $result = $order_model->orderClose($order_id, $log_data);
  177. return $this->response($result);
  178. }
  179. /**
  180. * 获取订单数量
  181. */
  182. public function num()
  183. {
  184. $token = $this->checkToken();
  185. if ($token[ 'code' ] < 0) return $this->response($token);
  186. if (empty($this->params[ 'order_status' ])) {
  187. return $this->response($this->error('', 'REQUEST_ORDER_STATUS'));
  188. }
  189. $order_common_model = new OrderCommonModel();
  190. $order_refund_model = new OrderRefundModel();
  191. $data = [];
  192. foreach (explode(',', $this->params[ 'order_status' ]) as $order_status) {
  193. $condition = array (
  194. [ "member_id", "=", $this->member_id ],
  195. [ "order_scene", "=", "online" ]
  196. );
  197. switch ( $order_status ) {
  198. case "waitpay"://待付款
  199. $condition[] = [ "order_status", "=", 0 ];
  200. break;
  201. case "waitsend"://待发货
  202. $condition[] = [ "order_status", "=", 1 ];
  203. break;
  204. case "waitconfirm"://待收货
  205. $condition[] = [ "order_status", "in", [ 2, 3 ] ];
  206. $condition[] = [ "order_type", "<>", 4 ];
  207. break;
  208. case 'wait_use'://待使用
  209. // $condition[] = [ "order_status", "in", [ 3 ] ];
  210. // $condition[] = [ "order_type", "=", 4 ];
  211. //todo 待使用状态
  212. $condition[] = [ "order_status", "in", [ 3, 11 ] ];
  213. $condition[] = [ "order_type", "=", 4 ];
  214. break;
  215. case "waitrate"://待评价
  216. $condition[] = [ "order_status", "in", [ 4, 10 ] ];
  217. $condition[] = [ "is_evaluate", "=", 1 ];
  218. $condition[] = [ "evaluate_status", "=", 0 ];
  219. break;
  220. }
  221. if ($order_status == 'refunding') {
  222. $result = $order_refund_model->getRefundOrderGoodsCount([
  223. [ "member_id", "=", $this->member_id ],
  224. [ "refund_status", "not in", [ 0, 3 ] ]
  225. ]);
  226. $data[ $order_status ] = $result[ 'data' ];
  227. } else {
  228. $result = $order_common_model->getOrderCount($condition);
  229. $data[ $order_status ] = $result[ 'data' ];
  230. }
  231. }
  232. return $this->response(success(0, '', $data));
  233. }
  234. /**
  235. * 订单包裹信息
  236. */
  237. public function package()
  238. {
  239. $token = $this->checkToken();
  240. if ($token[ 'code' ] < 0) return $this->response($token);
  241. $order_id = isset($this->params[ 'order_id' ]) ? $this->params[ 'order_id' ] : '';//订单id
  242. $express_package_model = new ExpressPackage();
  243. $condition = array (
  244. [ "member_id", "=", $this->member_id ],
  245. [ "order_id", "=", $order_id ],
  246. );
  247. $order_common_model = new OrderCommonModel();
  248. //$order_detail = $order_common_model->getMemberOrderDetail($order_id, $this->member_id, $this->site_id);
  249. $order_detail = $order_common_model->getOrderInfo([ [ 'member_id', '=', $this->member_id ], [ 'order_id', '=', $order_id ], [ 'site_id', '=', $this->site_id ] ]);
  250. $result = $express_package_model->package($condition, $order_detail[ 'data' ][ 'mobile' ]);
  251. if (!empty($result)) {
  252. foreach ($result as $kk => $vv) {
  253. if (!empty($vv[ 'trace' ][ 'list' ])) {
  254. $result[ $kk ][ 'trace' ][ 'list' ] = array_reverse($vv[ 'trace' ][ 'list' ]);
  255. }
  256. }
  257. }
  258. if ($result) return $this->response($this->success($result));
  259. else return $this->response($this->error());
  260. }
  261. /**
  262. * 订单支付
  263. * @return string
  264. */
  265. public function pay()
  266. {
  267. $token = $this->checkToken();
  268. if ($token[ 'code' ] < 0) return $this->response($token);
  269. $order_ids = isset($this->params[ 'order_ids' ]) ? $this->params[ 'order_ids' ] : '';//订单id
  270. if (empty($order_ids)) return $this->response($this->error('', "订单数据为空"));
  271. $order_common_model = new OrderCommonModel();
  272. $result = $order_common_model->splitOrderPay($order_ids);
  273. return $this->response($result);
  274. }
  275. /**
  276. * 交易协议
  277. * @return false|string
  278. */
  279. public function transactionAgreement()
  280. {
  281. $config_model = new ConfigModel();
  282. $document_info = $config_model->getTransactionDocument($this->site_id, $this->app_module);
  283. return $this->response($document_info);
  284. }
  285. /**
  286. * 虚拟订单收货
  287. */
  288. public function memberVirtualTakeDelivery()
  289. {
  290. $token = $this->checkToken();
  291. if ($token[ 'code' ] < 0) return $this->response($token);
  292. $order_id = $this->params[ 'order_id' ] ?? 0;//订单id
  293. if (empty($order_id)) return $this->response($this->error('', "订单数据为空"));
  294. $virtual_order_model = new VirtualOrder();
  295. $params = array (
  296. 'order_id' => $order_id,
  297. 'site_id' => $this->site_id,
  298. 'member_id' => $this->member_id
  299. );
  300. $result = $virtual_order_model->virtualTakeDelivery($params);
  301. return $this->response($result);
  302. }
  303. }