| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- <?php
- namespace app\api\controller\v1;
- use app\common\model\ShopGoodsModel;
- use app\common\model\ShopOrderModel;
- use app\common\model\UserAddressModel as UserAddress;
- use app\common\service\ShopGoodsService;
- use app\common\service\ShopOrderService;
- use app\common\service\SystemConfigService;
- use app\Request;
- use think\facade\Db;
- use think\Response;
- use utils\RedisCache;
- /**
- * 商城订单 by wes
- * Class ShopOrder
- * @package app\api\controller\v1
- */
- class ShopOrder
- {
- /**
- * 订单列表
- */
- public function orderList(Request $request)
- {
- try {
- $post = $request->post();
- $pageSize = $request->post('limit', 10);
- $post['user_id'] = $request->uid;
- return api_succ_return(['msg' => '获取成功', 'data' => ShopOrderService::make()->getList($post, $pageSize)]);
- } catch (\Exception $e) {
- return api_error_return('获取失败' . $e->getMessage());
- }
- }
- /**
- * 订单详情
- */
- public function orderDetail(Request $request): Response
- {
- try {
- return api_succ_return(['msg' => '获取成功', 'data' => ShopOrderModel::details($request->only(['order_sn']), $request->uid)]);
- } catch (\Exception $e) {
- return api_error_return('获取失败' . $e->getMessage());
- }
- }
- /**
- * 下单商品详情
- * @param Request $request
- * @return Response
- */
- public function buyDetail(Request $request)
- {
- $buyGoods = $request->post('buy_goods');
- if (empty($buyGoods)) {
- return api_error_return('参数错误');
- }
- try {
- $buyGoods = json_decode(html_entity_decode($buyGoods), true);
- if (empty($buyGoods)) {
- return api_error_return('商品参数错误,请返回刷新重新下单');
- }
- if(!$result = ShopOrderService::make()->buyDetail($buyGoods, $request)){
- return api_error_return('下单失败');
- }
- return api_succ_return(['msg' => '获取成功', 'data' => $result]);
- } catch (\Exception $e) {
- return api_error_return($e->getMessage());
- }
- }
- /**
- * 商城下单购买商品
- * @param Request $request
- * @return Response
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public function createOrder(Request $request)
- {
- $payType = $request->post('pay_type', 0);
- $payType = $payType == 3 ? $payType : 99; // 因收银台功能过滤支付方式
- // 购买商品参数
- $buyGoods = json_decode(html_entity_decode($request->post('buy_goods', '')), true);
- if ($request->user['status'] != 1) {
- return api_error_return('用户被禁用');
- }
- if ($request->user['is_reward'] == 0) {
- return api_error_return('用户已被禁止交易');
- }
- // 重复提交拦截
- $cacheKeyLock = "caches:orders:createLock:{$request->uid}";
- if(RedisCache::exists($cacheKeyLock)){
- return api_error_return('请不要频繁提交');
- }
- try {
- // 加锁
- RedisCache::setnx($cacheKeyLock, 1, rand(2,3));
- if($ids = ShopOrderService::make()->createOrder($request->uid, $buyGoods, $payType, $request)){
- // 清除缓存
- RedisCache::clear($cacheKeyLock);
- RedisCache::keyDel("caches:paymentCall:u{$request->uid}_ot4*");
- return api_succ_return(['msg'=>'下单成功', 'data'=>['order_ids'=> $ids]]);
- }else{
- RedisCache::clear($cacheKeyLock);
- return api_error_return('下单失败');
- }
- } catch (\Exception $e) {
- RedisCache::clear($cacheKeyLock);
- return api_error_return($e->getMessage());
- }
- }
- /**
- * 取消订单
- */
- public function cancelOrder(Request $request): Response
- {
- if (empty($request->only(['order_sn']))) {
- return api_error_return('订单号不能为空');
- }
- try {
- if(ShopOrderService::make()->cancelOrder($request->only(['order_sn']), $request->uid)){
- return api_succ_return('取消成功');
- }else{
- return api_error_return('取消失败');
- }
- } catch (\Exception $e) {
- return api_error_return('取消失败' . $e->getMessage());
- }
- }
- /**
- * 确认订单
- */
- public function receiveOrder(Request $request): Response
- {
- if (empty($request->only(['order_sn']))) {
- return api_error_return('订单号不能为空');
- }
- try {
- if(ShopOrderService::make()->receiveOrder($request->only(['order_sn']), $request->uid)){
- return api_succ_return('确认成功');
- }else{
- return api_error_return('确认失败');
- }
- } catch (\Exception $e) {
- return api_error_return('确认失败' . $e->getMessage());
- }
- }
- }
|