ShopOrder.php 5.0 KB

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