ShopOrder.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <?php
  2. namespace app\api\controller\v1;
  3. use app\common\model\ShopGoodsModel;
  4. use app\common\model\ShopOrderModel;
  5. use app\common\model\UserAddressModel as UserAddress;
  6. use app\common\service\ShopGoodsService;
  7. use app\common\service\ShopOrderService;
  8. use app\common\service\SystemConfigService;
  9. use app\Request;
  10. use think\facade\Db;
  11. use think\Response;
  12. use utils\RedisCache;
  13. /**
  14. * 商城订单 by wes
  15. * Class ShopOrder
  16. * @package app\api\controller\v1
  17. */
  18. class ShopOrder
  19. {
  20. /**
  21. * 订单列表
  22. */
  23. public function orderList(Request $request)
  24. {
  25. try {
  26. $post = $request->post();
  27. $pageSize = $request->post('limit', 10);
  28. $post['user_id'] = $request->uid;
  29. return api_succ_return(['msg' => '获取成功', 'data' => ShopOrderService::make()->getList($post, $pageSize)]);
  30. } catch (\Exception $e) {
  31. return api_error_return('获取失败' . $e->getMessage());
  32. }
  33. }
  34. /**
  35. * 订单详情
  36. */
  37. public function orderDetail(Request $request): Response
  38. {
  39. try {
  40. return api_succ_return(['msg' => '获取成功', 'data' => ShopOrderModel::details($request->only(['order_sn']), $request->uid)]);
  41. } catch (\Exception $e) {
  42. return api_error_return('获取失败' . $e->getMessage());
  43. }
  44. }
  45. /**
  46. * 下单商品详情
  47. * @param Request $request
  48. * @return Response
  49. */
  50. public function buyDetail(Request $request)
  51. {
  52. $buyGoods = $request->post('buy_goods');
  53. if (empty($buyGoods)) {
  54. return api_error_return('参数错误');
  55. }
  56. try {
  57. $buyGoods = json_decode(html_entity_decode($buyGoods), true);
  58. if (empty($buyGoods)) {
  59. return api_error_return('商品参数错误,请返回刷新重新下单');
  60. }
  61. if(!$result = ShopOrderService::make()->buyDetail($buyGoods, $request)){
  62. return api_error_return('下单失败');
  63. }
  64. return api_succ_return(['msg' => '获取成功', 'data' => $result]);
  65. } catch (\Exception $e) {
  66. return api_error_return($e->getMessage());
  67. }
  68. }
  69. /**
  70. * 商城下单购买商品
  71. * @param Request $request
  72. * @return Response
  73. * @throws \think\db\exception\DataNotFoundException
  74. * @throws \think\db\exception\DbException
  75. * @throws \think\db\exception\ModelNotFoundException
  76. */
  77. public function createOrder(Request $request)
  78. {
  79. $payType = $request->post('pay_type', 0);
  80. $payType = $payType == 3 ? $payType : 99; // 因收银台功能过滤支付方式
  81. // 购买商品参数
  82. $buyGoods = json_decode(html_entity_decode($request->post('buy_goods', '')), true);
  83. if ($request->user['status'] != 1) {
  84. return api_error_return('用户被禁用');
  85. }
  86. if ($request->user['is_reward'] == 0) {
  87. return api_error_return('用户已被禁止交易');
  88. }
  89. // 重复提交拦截
  90. $cacheKeyLock = "caches:orders:createLock:{$request->uid}";
  91. if(RedisCache::exists($cacheKeyLock)){
  92. return api_error_return('请不要频繁提交');
  93. }
  94. try {
  95. // 加锁
  96. RedisCache::setnx($cacheKeyLock, 1, rand(2,3));
  97. if($ids = ShopOrderService::make()->createOrder($request->uid, $buyGoods, $payType, $request)){
  98. // 清除缓存
  99. RedisCache::clear($cacheKeyLock);
  100. RedisCache::keyDel("caches:paymentCall:u{$request->uid}_ot4*");
  101. return api_succ_return(['msg'=>'下单成功', 'data'=>['order_ids'=> $ids]]);
  102. }else{
  103. RedisCache::clear($cacheKeyLock);
  104. return api_error_return('下单失败');
  105. }
  106. } catch (\Exception $e) {
  107. RedisCache::clear($cacheKeyLock);
  108. return api_error_return($e->getMessage());
  109. }
  110. }
  111. /**
  112. * 取消订单
  113. */
  114. public function cancelOrder(Request $request): Response
  115. {
  116. if (empty($request->only(['order_sn']))) {
  117. return api_error_return('订单号不能为空');
  118. }
  119. try {
  120. if(ShopOrderService::make()->cancelOrder($request->only(['order_sn']), $request->uid)){
  121. return api_succ_return('取消成功');
  122. }else{
  123. return api_error_return('取消失败');
  124. }
  125. } catch (\Exception $e) {
  126. return api_error_return('取消失败' . $e->getMessage());
  127. }
  128. }
  129. /**
  130. * 确认订单
  131. */
  132. public function receiveOrder(Request $request): Response
  133. {
  134. if (empty($request->only(['order_sn']))) {
  135. return api_error_return('订单号不能为空');
  136. }
  137. try {
  138. if(ShopOrderService::make()->receiveOrder($request->only(['order_sn']), $request->uid)){
  139. return api_succ_return('确认成功');
  140. }else{
  141. return api_error_return('确认失败');
  142. }
  143. } catch (\Exception $e) {
  144. return api_error_return('确认失败' . $e->getMessage());
  145. }
  146. }
  147. }