Shop.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\system\controller;
  4. use app\BaseController;
  5. use app\model\api\StoreOrder;
  6. use app\model\api\StoreOrderCartInfo;
  7. use app\Request;
  8. use library\services\UtilService;
  9. use think\facade\Db;
  10. class Shop extends BaseController
  11. {
  12. /**
  13. * 商城订单统计
  14. * @param Request $request
  15. */
  16. public function total(Request $request)
  17. {
  18. $post = UtilService::getMore([
  19. ['status', ''],
  20. ], $request);
  21. $order = Db::name('store_order');
  22. $totalWhere = [];
  23. if ($post['status'] !== '' && in_array((string)$post['status'], ["0", "1", "2", "3", "-1"])) {
  24. $totalWhere[] = ['status', '=', (int)$post['status']];
  25. }
  26. //全部
  27. $orderCount = $order->where($totalWhere)->count();
  28. //待支付
  29. $waitPayWhere = $totalWhere;
  30. $waitPayWhere[] = ['status', '=', 0];
  31. $waitPayCount = $order->where($waitPayWhere)->count();
  32. //待发货
  33. $waitSendWhere = $totalWhere;
  34. $waitSendWhere[] = ['status', '=', 1];
  35. $waitSendCount = $order->where($waitSendWhere)->count();
  36. //待收货
  37. $waitAcceptWhere = $totalWhere;
  38. $waitAcceptWhere[] = ['status', '=', 2];
  39. $waitAcceptCount = $order->where($waitAcceptWhere)->count();
  40. //已完成
  41. $okWhere = $totalWhere;
  42. $okWhere[] = ['status', '=', 3];
  43. $okCount = $order->where($okWhere)->count();
  44. //已取消
  45. $closeWhere = $totalWhere;
  46. $closeWhere[] = ['status', '=', -1];
  47. $closeCount = $order->where($closeWhere)->count();
  48. return app('json')->success([
  49. 'orderCount' => $orderCount,
  50. 'waitPayCount' => $waitPayCount,
  51. 'waitSendCount' => $waitSendCount,
  52. 'waitAcceptCount' => $waitAcceptCount,
  53. 'okCount' => $okCount,
  54. 'closeCount' => $closeCount,
  55. ]);
  56. }
  57. /**
  58. * 商城订单列表
  59. * @param Request $request
  60. */
  61. public function list(Request $request)
  62. {
  63. $pageSize = 50;
  64. $post = UtilService::getMore([
  65. ['page', 1],
  66. ['uid', 0],
  67. ['mobile', ''],
  68. ['order_id', ''],
  69. ['status', ''],
  70. ['time', []],
  71. ], $request);
  72. $where = [];
  73. if (!empty($post['uid'])) {
  74. $where[] = ['o.uid', '=', $post['uid']];
  75. } else if (!empty($post['mobile'])) {
  76. $m = Db::name('user')->where('mobile', $post['mobile'])->find();
  77. if (!empty($m)) {
  78. $where[] = ['o.uid', '=', $m['uid']];
  79. }
  80. }
  81. if (!empty($post['order_id'])) {
  82. $where[] = ['o.order_id', '=', $post['order_id']];
  83. }
  84. if ($post['status'] !== '' && in_array((string)$post['status'], ["0", "1", "2", "3", "-1"])) {
  85. $where[] = ['o.status', '=', (int)$post['status']];
  86. }
  87. //创建时间
  88. $startTime = '';
  89. $endTime = '';
  90. if (!empty($post['time'][0]) && !empty($post['time'][1])) {
  91. $startTime = strtotime($post['time'][0]);
  92. $endTime = strtotime($post['time'][1]);
  93. $where[] = ['o.time', 'between', "{$startTime},{$endTime}"];
  94. }
  95. // $order = Db::name('store_order');
  96. $order = Db::name('store_order')
  97. ->alias('o')
  98. ->field('o.*,u.mobile,u.nickname')
  99. ->leftJoin('user u', 'u.uid = o.uid')
  100. ->where($where)
  101. ->page((int)$post['page'], $pageSize)
  102. ->order('o.id', 'desc')
  103. ->select()
  104. ->toArray();
  105. // 关联订单商品信息
  106. foreach ($order as &$item) {
  107. $cartInfo = Db::name('store_order_cart_info')
  108. ->where('oid', $item['id'])
  109. ->select()
  110. ->toArray();
  111. foreach ($cartInfo as &$cart) {
  112. if (!empty($cart['cart_info'])) {
  113. $innerCartInfo = json_decode($cart['cart_info'], true);
  114. unset($cart['cart_info']);
  115. $cart = array_merge($cart, $innerCartInfo);
  116. }
  117. }
  118. $item['cart_info'] = $cartInfo;
  119. // 关联收货地址信息
  120. if (!empty($item['address_id'])) {
  121. $address = Db::name('user_address')->where('id', $item['address_id'])->find();
  122. $item['address'] = $address ?: [];
  123. } else {
  124. $item['address'] = [];
  125. }
  126. $item['address_info'] = Db::name('user_address')->where('id', $item['address_id'])->find();
  127. }
  128. $pageCount = Db::name('store_order')
  129. ->alias('o')
  130. ->leftJoin('user u', 'u.uid = o.uid')
  131. ->where($where)
  132. ->count();
  133. $result = UtilService::getParam([
  134. 'id',
  135. 'order_id',
  136. 'uid',
  137. 'user_phone',
  138. 'address_id',
  139. 'user_address',
  140. // 'mobile',
  141. // 'nickname',
  142. // 'real_name',
  143. // 'tel',
  144. // 'province',
  145. // 'city',
  146. // 'district',
  147. // 'detail',
  148. 'cart_info',
  149. 'total_price',
  150. 'pay_price',
  151. 'total_postage',
  152. 'pay_postage',
  153. 'paid',
  154. 'status',
  155. ['create_time', 'create_time', 'date("Y-m-d H:i:s",$1)'],
  156. ['pay_time', 'pay_time', function ($item) {
  157. return empty($item) ? "-" : date('Y-m-d H:i:s', $item);
  158. }],
  159. ['confirm_time', 'confirm_time', function ($item) {
  160. return empty($item) ? "-" : date('Y-m-d H:i:s', $item);
  161. }],
  162. ], $order);
  163. return app('json')->success([
  164. 'list' => $result,
  165. 'pageCount' => $pageCount,
  166. 'pageSize' => $pageSize,
  167. 'page' => $post['page'],
  168. ]);
  169. }
  170. /**
  171. * 商城订单详情
  172. * @param Request $request
  173. */
  174. public function info(Request $request)
  175. {
  176. $post = UtilService::getMore([
  177. ['id', '', 'empty', '参数错误'],
  178. ], $request);
  179. $order = Db::name('store_order')
  180. ->alias('o')
  181. ->field('o.*,u.mobile,u.nickname')
  182. ->leftJoin('user u', 'u.uid = o.uid')
  183. ->where('o.id', $post['id'])
  184. ->find();
  185. if (empty($order)) {
  186. return app('json')->fail('订单不存在');
  187. }
  188. $data = $order;
  189. //获取订单商品
  190. $cartInfo = Db::name('store_order_cart_info')
  191. ->where('oid', $data['id'])
  192. ->select()
  193. ->toArray();
  194. // 解析 cart_info JSON 字段并合并到外层
  195. foreach ($cartInfo as &$item) {
  196. if (!empty($item['cart_info'])) {
  197. $innerCartInfo = json_decode($item['cart_info'], true);
  198. unset($item['cart_info']);
  199. $item = array_merge($item, $innerCartInfo);
  200. } else {
  201. unset($item['cart_info']);
  202. }
  203. }
  204. $data['cart_info'] = $cartInfo;
  205. $data['address_info'] = Db::name('user_address')->where('id', $data['address_id'])->find();
  206. return app('json')->success($data);
  207. }
  208. /**
  209. * 发货
  210. * @param Request $request
  211. */
  212. public function fahuo(Request $request)
  213. {
  214. $post = UtilService::getMore([
  215. ['id', '', 'empty', '参数错误'],
  216. ['express_type', ''],
  217. ['express_code', ''],
  218. ['express_num', ''],
  219. ], $request);
  220. $order = Db::name('store_order')
  221. ->where('id', $post['id'])
  222. ->where('status', 1)
  223. ->find();
  224. if (empty($order)) {
  225. return app('json')->fail('当前订单不可发货');
  226. }
  227. if (empty($post['express_num'])) {
  228. return app('json')->fail('请输入物流单号');
  229. }
  230. $result = Db::name('store_order')->where('id', $post['id'])->update([
  231. 'status' => 2,
  232. 'express_type' => $post['express_type'],
  233. 'express_code' => $post['express_code'],
  234. 'express_num' => $post['express_num'],
  235. 'delivery_time' => time(),
  236. ]);
  237. if ($result) {
  238. return app('json')->success('操作成功');
  239. } else {
  240. return app('json')->fail('操作失败');
  241. }
  242. }
  243. /**
  244. * 订单备注
  245. * @param Request $request
  246. */
  247. public function mono(Request $request)
  248. {
  249. $post = UtilService::getMore([
  250. ['id', '', 'empty', '参数错误'],
  251. ['remark', '', 'empty', '请输入备注内容'],
  252. ], $request);
  253. $order = Db::name('store_order')->where('id', $post['id'])->find();
  254. if (empty($order)) {
  255. return app('json')->fail('订单不存在');
  256. }
  257. $result = Db::name('store_order')->where('id', $post['id'])->update([
  258. 'remark' => $post['remark'],
  259. ]);
  260. if ($result) {
  261. return app('json')->success('操作成功');
  262. } else {
  263. return app('json')->fail('操作失败');
  264. }
  265. }
  266. }