user['uid']] ]; if ($post['status'] !== '' && in_array((string)$post['status'], ["0", "1", "2", "3", "-1"])) { $where[] = ['status', '=', (int)$post['status']]; } $order = new OrderModel; $data = $order ->where($where) ->page((int)$post["page"], $pageSize) ->order("id", "desc") ->select() ->toArray(); $pageCount = $order->where($where)->count(); return app('json')->success([ 'list' => $data, 'pageCount' => $pageCount, 'pageSize' => $pageSize, 'page' => $post['page'], ]); } /** * 订单详情 * @param Request $request */ public function info(Request $request) { $post = UtilService::getMore([ ['order_id', '', 'empty', '参数错误'], ], $request); $orderData = (new OrderModel) ->where("order_id", $post['order_id']) ->where("uid", $request->user['uid']) ->find(); if (empty($orderData)) { return app('json')->fail('订单不存在'); } return app('json')->success($orderData); } /** * 取消订单 * @param Request $request */ public function cancel(Request $request) { $post = UtilService::getMore([ ['order_id', '', 'empty', '参数错误'], ], $request); $orderData = (new OrderModel) ->where("order_id", $post['order_id']) ->where("uid", $request->user['uid']) ->where("status", 0) ->find(); if (empty($orderData)) { return app('json')->fail('订单不存在或已取消'); } (new OrderModel)->where("id", $orderData['id'])->update(['status' => -1]); return app('json')->success('订单已取消'); } /** * 确认收货 * @param Request $request */ public function confirm(Request $request) { $post = UtilService::getMore([ ['order_id', '', 'empty', '参数错误'], ], $request); $orderData = (new OrderModel) ->where("order_id", $post['order_id']) ->where("uid", $request->user['uid']) ->where("status", 2) ->find(); if (empty($orderData)) { return app('json')->fail('订单不存在或状态错误'); } (new OrderModel)->where("id", $orderData['id'])->update([ 'status' => 3, 'ok_time' => time() ]); return app('json')->success('确认收货成功'); } /** * 积分支付 * @param Request $request */ public function scorePay(Request $request) { $post = UtilService::getMore([ ['order_id', '', 'empty', '参数错误'], ], $request); // 查询订单 $orderData = (new OrderModel) ->where("order_id", $post['order_id']) ->where("uid", $request->user['uid']) ->find(); if (empty($orderData)) { return app('json')->fail('订单不存在'); } if ($orderData['status'] != 0) { return app('json')->fail('订单状态错误'); } // 查询支付流水 $payTradeData = (new PayTrade) ->where("o_id", $orderData['id']) ->where("code", "shop_order") ->find(); if (empty($payTradeData)) { return app('json')->fail('支付流水不存在'); } if ($payTradeData['status'] == 1) { return app('json')->fail('订单已支付'); } // 检查用户积分 $userData = (new UserModel)->where("uid", $request->user['uid'])->find(); if (empty($userData)) { return app('json')->fail('用户不存在'); } if ($userData['score'] < $orderData['pay_money']) { return app('json')->fail('积分不足'); } // 开启事务 PayTrade::beginTrans(); try { // 扣除积分 $scoreResult = (new UserScoreDetail)->payScore( $request->user['uid'], floatval($orderData['pay_money']), 'outcome_score', '订单支付:'.$orderData['order_id'], ['o_id' => $orderData['id']] ); if (!$scoreResult) { PayTrade::rollbackTrans(); return app('json')->fail('积分扣除失败'); } // 更新支付流水 $pay_json = json_encode([ 'pay_type' => 'score', 'score' => $orderData['pay_money'], 'pay_time' => time() ]); (new PayTrade)->where('id', $payTradeData['id'])->update([ 'status' => 1, 'pay_time' => time(), 'pay_json' => $pay_json ]); // 更新订单状态 (new OrderModel)->where("id", $orderData['id'])->update([ 'status' => 1, 'pay_time' => time() ]); PayTrade::commitTrans(); return app('json')->success('积分支付成功'); } catch (DbException $e) { PayTrade::rollbackTrans(); return app('json')->fail('支付失败'); } } }