CreateController.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Name: 芸众商城系统
  5. * Author: 广州市芸众信息科技有限公司
  6. * Profile: 广州市芸众信息科技有限公司位于国际商贸中心的广州,专注于移动电子商务生态系统打造,拥有芸众社交电商系统、区块链数字资产管理系统、供应链管理系统、电子合同等产品/服务。官网 :www.yunzmall.com www.yunzshop.com
  7. * Date: 2022/1/13
  8. * Time: 15:03
  9. */
  10. namespace app\outside\modules\order\controllers;
  11. use app\common\helpers\Url;
  12. use app\frontend\modules\order\models\PreOrder;
  13. use app\outside\controllers\OutsideController;
  14. use app\frontend\models\Goods;
  15. use app\common\exceptions\ApiException;
  16. use app\frontend\models\Member;
  17. use app\frontend\models\GoodsOption;
  18. use app\common\modules\trade\models\Trade;
  19. use app\frontend\modules\member\services\MemberCartService;
  20. use app\frontend\modules\memberCart\MemberCartCollection;
  21. use app\outside\modes\OutsideOrder;
  22. use app\outside\modules\order\models\BuyTrade;
  23. class CreateController extends OutsideController
  24. {
  25. public function preAction()
  26. {
  27. app()->bind(Trade::class, function () {
  28. return new BuyTrade();
  29. });
  30. app('GoodsManager')->bind('Goods', function ($goodsManager, $attributes) {
  31. return new Goods($attributes);
  32. });
  33. app('GoodsManager')->bind('GoodsOption', function ($goodsManager, $attributes) {
  34. return new GoodsOption($attributes);
  35. });
  36. parent::preAction();
  37. }
  38. protected function validateParam()
  39. {
  40. $this->validate([
  41. 'outside_sn' => 'required',
  42. 'uid' => 'required',
  43. 'goods' => 'required',
  44. ],null, [
  45. 'outside_sn.required' => 'outside_sn 参数必须填写',
  46. 'uid.required' => '购买会员标识必须填写',
  47. 'goods.required' => 'goods 参数必须填写',
  48. ]);
  49. $isExist = OutsideOrder::where('outside_sn',request()->input('outside_sn'))->first();
  50. if($isExist) {
  51. throw new ApiException('订单号已存在无法重复下单');
  52. }
  53. }
  54. /**
  55. * @return \Illuminate\Http\JsonResponse
  56. * @throws ApiException
  57. * @throws \app\common\exceptions\AppException
  58. */
  59. public function index()
  60. {
  61. $this->validateParam();
  62. $this->setMember();
  63. $trade = $this->getMemberCarts()->getTrade(Member::current(), $this->requestParam());
  64. //订单创建保存
  65. $trade->generate();
  66. $data = [
  67. 'outside_sn' => $trade->outsideOrder->outside_sn,
  68. 'total_price' => sprintf('%.2f',$trade->outsideOrder->total_price),
  69. 'trade_sn' => $trade->outsideOrder->trade_sn,
  70. 'pay_link' => Url::absoluteApp('member/orderpay/'.$trade->orders->pluck('id')->implode(',')),
  71. 'orders' => $trade->orders->map(function (PreOrder $order) {
  72. return [
  73. 'order_id' => $order->id,
  74. 'order_sn' => $order->order_sn,
  75. 'price' => sprintf('%.2f', $order->price),
  76. ];
  77. }),
  78. ];
  79. return $this->successJson('成功', $data);
  80. }
  81. protected function requestParam()
  82. {
  83. return request();
  84. }
  85. protected function getMemberCarts()
  86. {
  87. $goods_params = request()->input('goods');
  88. if (empty($goods_params)) {
  89. throw new ApiException('无法获取到下单商品');
  90. }
  91. $result = collect($goods_params)->map(function ($memberCart) {
  92. return MemberCartService::newMemberCart($memberCart);
  93. });
  94. $memberCarts = new MemberCartCollection($result);
  95. $memberCarts->loadRelations();
  96. return $memberCarts;
  97. }
  98. public function setMember()
  99. {
  100. $member = Member::where('uid', request()->input('uid'))->first();
  101. if (!$member) {
  102. throw new ApiException('会员不存在');
  103. }
  104. Member::$current = $member;
  105. }
  106. }