| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- <?php
- declare (strict_types=1);
- namespace app\api\controller;
- use app\BaseController;
- use app\model\api\Order as OrderModel;
- use app\model\api\PayTrade;
- use app\model\api\User as UserModel;
- use app\model\api\UserScoreDetail;
- use app\Request;
- use library\services\UtilService;
- use think\db\exception\DbException;
- use think\facade\Db;
- class Order extends BaseController
- {
- /**
- * 订单列表
- * @param Request $request
- */
- public function list(Request $request)
- {
- $pageSize = 20;
- $post = UtilService::getMore([
- ['page', 1],
- ['status', ''],
- ], $request);
- $where = [
- ['uid', '=', $request->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('支付失败');
- }
- }
- }
|