123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395 |
- <?php
- namespace addons\shopro\controller\order;
- use think\Db;
- use addons\shopro\controller\Common;
- use addons\shopro\service\order\OrderCreate;
- use addons\shopro\service\order\OrderOper;
- use app\admin\model\shopro\order\Order as OrderModel;
- use app\admin\model\shopro\Pay as PayModel;
- use addons\shopro\library\express\Express as ExpressLib;
- //订单
- class Order extends Common
- {
- protected $noNeedLogin = [];
- protected $noNeedRight = ['*'];
- //订单列表
- public function index()
- {
- $user = auth_user();
- $params = $this->request->param();
- $type = $params['type'] ?? 'all';
- $orders = OrderModel::where('user_id', $user->id)->with(['items', 'invoice']);
- switch ($type) {
- case 'unpaid':
- $orders = $orders->unpaid();
- break;
- case 'groupon_ing':
- $orders = $orders->paid()->nosend()->groupon_ing();
- break;
- case 'nosend':
- $orders = $orders->pretendPaid()->nosend()->groupon_finish();
- break;
- case 'noget':
- $orders = $orders->pretendPaid()->noget();
- break;
- case 'nocomment':
- $orders = $orders->paid()->nocomment();
- break;
- }
- // $orders = $orders->order('id', 'desc')->paginate(request()->param('list_rows', 10))->toArray();
- $orders = $orders->order('id', 'desc')->autopage()->select();
- $orderModel = new OrderModel();
- foreach ($orders as &$order) {
- $order = $orderModel->setOrderItemStatusByOrder($order);
- }
- $this->success('获取成功', $orders);
- }
- //订单详情
- public function detail()
- {
- $user = auth_user();
- $id = $this->request->param('id');
- $merchant_trade_no = $this->request->param('merchant_trade_no');
- $transaction_id = $this->request->param('transaction_id');
- $order = OrderModel::where('user_id', $user->id)->with(['items', 'address', 'invoice']);
- if ($id) {
- $order = $order->where(function ($query) use ($id) {
- return $query->where('id', $id)->whereOr('order_sn', $id);
- });
- } else if ($merchant_trade_no) {
- $pay = PayModel::where('pay_sn', $merchant_trade_no)->findOrFail();
- $order = $order->where('id', $pay->order_id);
- } else {
- $this->error('参数错误');
- }
- $order = $order->find();
- if (!$order) {
- $this->error(__('No Results were found'));
- }
- $order->pay_types_text = $order->pay_types_text;
- // 处理未支付订单 item status_code
- $order = $order->setOrderItemStatusByOrder($order); // 这里订单转 数组了
- // 更新包裹信息(5分钟缓存)
- (new ExpressLib)->updateOrderExpress($order['id']);
-
- $this->success('获取成功', $order);
- }
- public function itemDetail()
- {
- $user = auth_user();
- $id = $this->request->param('id');
- $item_id = $this->request->param('item_id');
- if (!$id || !$item_id) {
- $this->error('参数错误');
- }
- $order = OrderModel::with(['items' => function ($query) use ($item_id) {
- $query->where('id', $item_id);
- }])->where('user_id', $user->id)->where('id', $id)->find();
- if (!$order || !$order->items) {
- $this->error(__('No Results were found'));
- }
- $order = $order->setOrderItemStatusByOrder($order); // 这里订单转 数组了
- $item = $order['items'][0];
- $this->success('获取成功', $item);
- }
- //计算订单
- public function calc()
- {
- $params = $this->request->param();
- //购物车
- $cart = input('cart',0);
- if(!empty($cart)){
- unset($params['goods_list']);
- // 多个商品
- $carts = (new \app\admin\model\shopro\Cart)
- ->whereIn('id', $cart)
- ->order(['id' => 'desc'])
- ->select();
- $goods_list = [];
- foreach ($carts as $cart) {
- $goods_list[] = [
- 'goods_id' => $cart['goods_id'],
- 'goods_sku_price_id' => $cart['goods_sku_price_id'],
- 'goods_num' => $cart['goods_num'],
- ];
- }
- $params['goods_list'] = empty($goods_list) ? '' : json_encode($goods_list);
- }
- //购物车
- $this->svalidate($params, ".calc");
- $orderCreate = new OrderCreate($params);
- $result = $orderCreate->calc();
- if (isset($result['msg']) && $result['msg']) {
- // $this->error($result['msg'], 1, $result);
- $this->error($result['msg']);
- } else {
- $this->success('计算成功', $result);
- }
- }
- //创建订单
- public function create()
- {
- $params = $this->request->param();
- //购物车
- $cart = input('cart',0);
- if(!empty($cart)){
- unset($params['goods_list']);
- // 多个商品
- $carts = (new \app\admin\model\shopro\Cart)
- ->whereIn('id', $cart)
- ->order(['id' => 'desc'])
- ->select();
- $goods_list = [];
- foreach ($carts as $cart) {
- $goods_list[] = [
- 'goods_id' => $cart['goods_id'],
- 'goods_sku_price_id' => $cart['goods_sku_price_id'],
- 'goods_num' => $cart['goods_num'],
- ];
- }
- $params['goods_list'] = empty($goods_list) ? '' : json_encode($goods_list);
- }
- //购物车
- $this->svalidate($params, ".create");
- $orderCreate = new OrderCreate($params);
- $result = $orderCreate->calc('create');
- $order = $orderCreate->create($result);
- $this->success('订单添加成功', $order);
- }
- /**
- * 获取用户可用和不可用优惠券
- *
- * @param Request $request
- * @return void
- */
- public function coupons()
- {
- $params = $this->request->param();
- //购物车
- $cart = input('cart',0);
- if(!empty($cart)){
- unset($params['goods_list']);
- // 多个商品
- $carts = (new \app\admin\model\shopro\Cart)
- ->whereIn('id', $cart)
- ->order(['id' => 'desc'])
- ->select();
- $goods_list = [];
- foreach ($carts as $cart) {
- $goods_list[] = [
- 'goods_id' => $cart['goods_id'],
- 'goods_sku_price_id' => $cart['goods_sku_price_id'],
- 'goods_num' => $cart['goods_num'],
- ];
- }
- $params['goods_list'] = empty($goods_list) ? '' : json_encode($goods_list);
- }
- //购物车
- $this->svalidate($params, ".create");
- $orderCreate = new OrderCreate($params);
- $result = $orderCreate->getCoupons();
- $this->success('获取成功', $result);
- }
- //取消原因
- public function cancel_reason(){
- $data = [
- '收货地址或者手机号填错了',
- '忘记支付密码/余额不足',
- '无法正常支付',
- '不想买了',
- '其他原因',
- ];
- $this->success(1, $data);
- }
- // 取消订单,未支付的才可以
- public function cancel()
- {
- $user = auth_user();
- $id = $this->request->param('id');
- $reason = $this->request->param('reason');
- $order = Db::transaction(function () use ($id, $user, $reason) {
- $order = OrderModel::canCancel()->where('user_id', $user->id)->with(['items', 'invoice'])->lock(true)->where('id', $id)->find();
- if (!$order) {
- $this->error(__('No Results were found'));
- }
- $orderOper = new OrderOper();
- $order = $orderOper->cancel($order, $user, 'user', $reason);
- return $order;
- });
- // 订单未支付,处理 item 状态
- $order = $order->setOrderItemStatusByOrder($order); // 这里订单转 数组了
- // $this->success('取消成功', $order);
- $this->success('取消成功');
- }
- // 订单申请全额退款,支付的且未发货的才可以
- public function applyRefund()
- {
- $user = auth_user();
- $id = $this->request->param('id');
- $reason = $this->request->param('reason');
- $order = OrderModel::paid()->where('user_id', $user->id)->where('id', $id)->find();
- if (!$order) {
- $this->error(__('No Results were found'));
- }
- $order = Db::transaction(function () use ($order, $user, $reason) {
- $orderOper = new OrderOper();
- $order = $orderOper->applyRefund($order, $user, 'user',$reason);
- return $order;
- });
- $order = OrderModel::with(['items', 'invoice'])->find($id);
- $order = $order->setOrderItemStatusByOrder($order); // 这里订单转 数组了
- // $this->success('申请成功', $order);
- $this->success('申请成功');
- }
- // 确认收货(货到付款的确认收货在后台)
- public function confirm()
- {
- $user = auth_user();
- $id = $this->request->param('id');
- $order = OrderModel::paid()->where('user_id', $user->id)->where('id', $id)->find();
- if (!$order) {
- $this->error(__('No Results were found'));
- }
- $order = Db::transaction(function () use ($order, $user) {
- $orderOper = new OrderOper();
- $order = $orderOper->confirm($order, [], $user, 'user');
- return $order;
- });
- $order = OrderModel::with(['items', 'invoice'])->find($id);
- // $this->success('收货成功', $order);
- $this->success('收货成功');
- }
- // 评价
- public function comment()
- {
- $user = auth_user();
- $params = $this->request->param();
- $id = $params['id'] ?? 0;
- $params['comments'] = json_decode(htmlspecialchars_decode($params['comments']),true);
- $this->svalidate($params, ".comment");
- $comments = $params['comments'] ?? [];
- foreach ($comments as $comment) {
- $this->svalidate($comment, ".comment_item");
- }
- $order = OrderModel::paid()->where('user_id', $user->id)->where('id', $id)->find();
- if (!$order) {
- $this->error(__('No Results were found'));
- }
- $order = Db::transaction(function () use ($order, $params, $user) {
- $orderOper = new OrderOper();
- $order = $orderOper->comment($order, $params['comments'], $user, 'user');
- return $order;
- });
- // $this->success('评价成功', $order);
- $this->success('评价成功');
- }
- /**
- * 用户是否存在未支付的,当前团的订单
- *
- * @param Request $request
- * @return void
- */
- public function unpaidGrouponOrder()
- {
- $user = auth_user();
- $params = $this->request->param();
- $activity_id = $params['activity_id'] ?? 0;
- if ($user && $activity_id) {
- $order = OrderModel::unpaid()->where('user_id', $user->id)
- ->where('activity_id', $activity_id)
- ->whereIn('activity_type', ['groupon', 'groupon_ladder'])->find();
- }
- $this->success('获取成功', $order ?? null);
- }
- // 删除订单
- public function delete()
- {
- $user = auth_user();
- $id = $this->request->param('id');
- $order = OrderModel::canDelete()->where('user_id', $user->id)->where('id', $id)->find();
- if (!$order) {
- $this->error('订单不存在或不可删除');
- }
- Db::transaction(function () use ($order, $user) {
- $orderOper = new OrderOper();
- $orderOper->delete($order, $user, 'user');
- });
- $this->success('删除成功');
- }
- }
|