diff --git a/crmeb/app/api/controller/v1/order/StoreOrderController.php b/crmeb/app/api/controller/v1/order/StoreOrderController.php index 9f61275a2..50a066eb6 100644 --- a/crmeb/app/api/controller/v1/order/StoreOrderController.php +++ b/crmeb/app/api/controller/v1/order/StoreOrderController.php @@ -15,6 +15,8 @@ use app\services\pay\PayServices; use app\services\shipping\ExpressServices; use app\services\system\admin\SystemAdminServices; use app\services\user\UserInvoiceServices; +use crmeb\exceptions\ApiException; +use crmeb\exceptions\ApiStatusException; use crmeb\services\pay\extend\allinpay\AllinPay; use app\services\activity\{lottery\LuckLotteryServices, bargain\StoreBargainServices, @@ -166,7 +168,7 @@ class StoreOrderController $uid = (int)$request->uid(); if ($checkOrder = $this->services->getOne(['order_id|unique' => $key, 'uid' => $uid, 'is_del' => 0])) return app('json')->status('extend_order', 410209, ['orderId' => $checkOrder['order_id'], 'key' => $key]); - [$addressId, $couponId, $payType, $useIntegral, $mark, $combinationId, $pinkId, $seckill_id, $bargainId, $shipping_type, $real_name, $phone, $storeId, $news, $invoice_id, $quitUrl, $advanceId, $virtual_type, $customForm] = $request->postMore([ + [$addressId, $couponId, $payType, $useIntegral, $mark, $combinationId, $pinkId, $seckillId, $bargainId, $shipping_type, $real_name, $phone, $storeId, $news, $invoice_id, $quitUrl, $advanceId, $virtual_type, $customForm] = $request->postMore([ [['addressId', 'd'], 0], [['couponId', 'd'], 0], ['payType', ''], @@ -188,77 +190,76 @@ class StoreOrderController ['custom_form', []], ], true); $payType = strtolower($payType); - $cartGroup = $this->services->getCacheOrderInfo($uid, $key); - if (!$cartGroup) { - return app('json')->fail(410208); - } - //下单前砍价验证 - if ($bargainId) { - $bargainServices->checkBargainUser((int)$bargainId, $uid); - } - - if ($pinkId) { - $pinkId = (int)$pinkId; - /** @var StorePinkServices $pinkServices */ - $pinkServices = app()->make(StorePinkServices::class); - if ($pinkServices->isPink($pinkId, $uid)) - return app('json')->status('ORDER_EXIST', 410210, ['orderId' => $this->services->getStoreIdPink($pinkId, $uid)]); - if ($this->services->getIsOrderPink($pinkId, $uid)) - return app('json')->status('ORDER_EXIST', 410211, ['orderId' => $this->services->getStoreIdPink($pinkId, $uid)]); - if (!CacheService::checkStock(md5($pinkId), 1, 3) || !CacheService::popStock(md5($pinkId), 1, 3)) { - return app('json')->fail(410212); - } - } - - $cartInfo = null; - if ($seckill_id || $combinationId || $bargainId || $advanceId) { - $cartInfo = $cartGroup['cartInfo']; - foreach ($cartInfo as $item) { - $type = 0; - if (!isset($item['product_attr_unique']) || !$item['product_attr_unique']) continue; - if ($item['seckill_id']) { - $type = 1; - } elseif ($item['bargain_id']) { - $type = 2; - } elseif ($item['combination_id']) { - $type = 3; - } elseif ($item['advance_id']) { - $type = 6; - } - if ($type && (!CacheService::checkStock($item['product_attr_unique'], (int)$item['cart_num'], $type) || !CacheService::popStock($item['product_attr_unique'], (int)$item['cart_num'], $type))) { - return app('json')->fail(410214, null, ['cart_num' => $item['cart_num'], 'unit_name' => $item['productInfo']['unit_name']]); - - } - } - } - $virtual_type = $cartGroup['cartInfo'][0]['productInfo']['virtual_type'] ?? 0; - $order = $createServices->createOrder($uid, $key, $cartGroup, $request->user()->toArray(), $addressId, $payType, !!$useIntegral, $couponId, $mark, $combinationId, $pinkId, $seckill_id, $bargainId, $shipping_type, $real_name, $phone, $storeId, !!$news, $advanceId, $virtual_type, $customForm, $invoice_id); - if ($order === false) { - if ($seckill_id || $combinationId || $advanceId || $bargainId) { - foreach ($cartInfo as $item) { - $value = $item['cart_info']; - $type = 0; - if (!isset($value['product_attr_unique']) || $value['product_attr_unique']) continue; - if ($value['seckill_id']) { - $type = 1; - } elseif ($value['bargain_id']) { - $type = 2; - } elseif ($value['combination_id']) { - $type = 3; - } elseif ($value['advance_id']) { - $type = 6; - } - if ($type) CacheService::setStock($value['product_attr_unique'], (int)$value['cart_num'], $type, false); - } - } - return app('json')->fail(410200); - } +// $cartGroup = $this->services->getCacheOrderInfo($uid, $key); +// if (!$cartGroup) { +// return app('json')->fail(410208); +// } +// //下单前砍价验证 +// if ($bargainId) { +// $bargainServices->checkBargainUser((int)$bargainId, $uid); +// } +// +// if ($pinkId) { +// $pinkId = (int)$pinkId; +// /** @var StorePinkServices $pinkServices */ +// $pinkServices = app()->make(StorePinkServices::class); +// if ($pinkServices->isPink($pinkId, $uid)) +// return app('json')->status('ORDER_EXIST', 410210, ['orderId' => $this->services->getStoreIdPink($pinkId, $uid)]); +// if ($this->services->getIsOrderPink($pinkId, $uid)) +// return app('json')->status('ORDER_EXIST', 410211, ['orderId' => $this->services->getStoreIdPink($pinkId, $uid)]); +// if (!CacheService::checkStock(md5($pinkId), 1, 3) || !CacheService::popStock(md5($pinkId), 1, 3)) { +// return app('json')->fail(410212); +// } +// } +// +// $cartInfo = null; +// if ($seckill_id || $combinationId || $bargainId || $advanceId) { +// $cartInfo = $cartGroup['cartInfo']; +// foreach ($cartInfo as $item) { +// $type = 0; +// if (!isset($item['product_attr_unique']) || !$item['product_attr_unique']) continue; +// if ($item['seckill_id']) { +// $type = 1; +// } elseif ($item['bargain_id']) { +// $type = 2; +// } elseif ($item['combination_id']) { +// $type = 3; +// } elseif ($item['advance_id']) { +// $type = 6; +// } +// if ($type && (!CacheService::checkStock($item['product_attr_unique'], (int)$item['cart_num'], $type) || !CacheService::popStock($item['product_attr_unique'], (int)$item['cart_num'], $type))) { +// return app('json')->fail(410214, null, ['cart_num' => $item['cart_num'], 'unit_name' => $item['productInfo']['unit_name']]); +// +// } +// } +// } +// $virtual_type = $cartGroup['cartInfo'][0]['productInfo']['virtual_type'] ?? 0; + $order = $createServices->createOrder($uid, $key, $request->user()->toArray(), $addressId, $payType, !!$useIntegral, $couponId, $mark, $combinationId, $pinkId, $seckill_id, $bargainId, $shipping_type, $real_name, $phone, $storeId, !!$news, $advanceId, $customForm, $invoice_id); +// if ($order === false) { +// if ($seckill_id || $combinationId || $advanceId || $bargainId) { +// foreach ($cartInfo as $item) { +// $value = $item['cart_info']; +// $type = 0; +// if (!isset($value['product_attr_unique']) || $value['product_attr_unique']) continue; +// if ($value['seckill_id']) { +// $type = 1; +// } elseif ($value['bargain_id']) { +// $type = 2; +// } elseif ($value['combination_id']) { +// $type = 3; +// } elseif ($value['advance_id']) { +// $type = 6; +// } +// if ($type) CacheService::setStock($value['product_attr_unique'], (int)$value['cart_num'], $type, false); +// } +// } +// throw new ApiException(410200); +// } $orderId = $order['order_id']; - $orderInfo = $this->services->getOne(['order_id' => $orderId]); - if (!$orderInfo || !isset($orderInfo['paid'])) { - return app('json')->fail(410194); - } - +// $orderInfo = $this->services->getOne(['order_id' => $orderId]); +// if (!$orderInfo || !isset($orderInfo['paid'])) { +// return app('json')->fail(410194); +// } return app('json')->status('success', 410203, compact('orderId', 'key')); } diff --git a/crmeb/app/services/order/StoreOrderCreateServices.php b/crmeb/app/services/order/StoreOrderCreateServices.php index 3672e93e9..eeae27d70 100644 --- a/crmeb/app/services/order/StoreOrderCreateServices.php +++ b/crmeb/app/services/order/StoreOrderCreateServices.php @@ -13,10 +13,12 @@ namespace app\services\order; use app\services\activity\advance\StoreAdvanceServices; +use app\services\activity\combination\StorePinkServices; use app\services\agent\AgentLevelServices; use app\services\activity\coupon\StoreCouponUserServices; use app\services\agent\DivisionServices; use app\services\pay\PayServices; +use app\services\pc\OrderServices; use app\services\product\product\StoreCategoryServices; use app\services\shipping\ShippingTemplatesFreeServices; use app\services\shipping\ShippingTemplatesRegionServices; @@ -25,6 +27,7 @@ use app\services\user\UserInvoiceServices; use app\services\wechat\WechatUserServices; use app\services\BaseServices; use crmeb\exceptions\ApiException; +use crmeb\exceptions\ApiStatusException; use crmeb\services\CacheService; use app\dao\order\StoreOrderDao; use app\services\user\UserServices; @@ -141,148 +144,217 @@ class StoreOrderCreateServices extends BaseServices * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ - public function createOrder($uid, $key, $cartGroup, $userInfo, $addressId, $payType, $useIntegral = false, $couponId = 0, $mark = '', $combinationId = 0, $pinkId = 0, $seckillId = 0, $bargainId = 0, $shippingType = 1, $real_name = '', $phone = '', $storeId = 0, $news = false, $advanceId = 0, $virtual_type = 0, $customForm = [], $invoice_id = 0) + public function createOrder($uid, $key, $userInfo, $addressId, $payType, $useIntegral = false, $couponId = 0, $mark = '', $combinationId = 0, $pinkId = 0, $seckillId = 0, $bargainId = 0, $shippingType = 1, $real_name = '', $phone = '', $storeId = 0, $news = false, $advanceId = 0, $customForm = [], $invoice_id = 0) { - //下单前发票验证 - if ($invoice_id) { - app()->make(UserInvoiceServices::class)->checkInvoice((int)$invoice_id, $uid); + /** @var StoreOrderServices $orderService */ + $storeOrderServices = app()->make(StoreOrderServices::class); + $bargainServices = app()->make(StoreBargainServices::class); + $cartGroup = $storeOrderServices->getCacheOrderInfo($uid, $key); + if (!$cartGroup) { + throw new ApiException(410208); + } + //下单前砍价验证 + if ($bargainId) { + $bargainServices->checkBargainUser((int)$bargainId, $uid); } - /** @var StoreOrderComputedServices $computedServices */ - $computedServices = app()->make(StoreOrderComputedServices::class); - $priceData = $computedServices->computedOrder($uid, $userInfo, $cartGroup, $addressId, $payType, $useIntegral, $couponId, true, $shippingType); - /** @var WechatUserServices $wechatServices */ - $wechatServices = app()->make(WechatUserServices::class); - /** @var UserAddressServices $addressServices */ - $addressServices = app()->make(UserAddressServices::class); - if ($shippingType == 1 && $virtual_type == 0) { - if (!$addressId) { - throw new ApiException(410045); + if ($pinkId) { + $pinkId = (int)$pinkId; + /** @var StorePinkServices $pinkServices */ + $pinkServices = app()->make(StorePinkServices::class); + if ($pinkServices->isPink($pinkId, $uid)) + throw new ApiStatusException('ORDER_EXIST', 410210, ['orderId' => $storeOrderServices->getStoreIdPink($pinkId, $uid)]); + if ($storeOrderServices->getIsOrderPink($pinkId, $uid)) + throw new ApiStatusException('ORDER_EXIST', 410211, ['orderId' => $storeOrderServices->getStoreIdPink($pinkId, $uid)]); + if (!CacheService::checkStock(md5($pinkId), 1, 3) || !CacheService::popStock(md5($pinkId), 1, 3)) { + throw new ApiException(410212); } - if (!$addressInfo = $addressServices->getOne(['uid' => $uid, 'id' => $addressId, 'is_del' => 0])) - throw new ApiException(410046); - $addressInfo = $addressInfo->toArray(); - } else { - if ((!$real_name || !$phone) && $virtual_type == 0) { - throw new ApiException(410245); - } - $addressInfo['real_name'] = $real_name; - $addressInfo['phone'] = $phone; - $addressInfo['province'] = ''; - $addressInfo['city'] = ''; - $addressInfo['district'] = ''; - $addressInfo['detail'] = ''; } - $cartInfo = $cartGroup['cartInfo']; - $priceGroup = $cartGroup['priceGroup']; - $cartIds = []; - $totalNum = 0; - $gainIntegral = 0; - foreach ($cartInfo as $cart) { - $cartIds[] = $cart['id']; - $totalNum += $cart['cart_num']; - if (!$seckillId) $seckillId = $cart['seckill_id']; - if (!$bargainId) $bargainId = $cart['bargain_id']; - if (!$combinationId) $combinationId = $cart['combination_id']; - if (!$advanceId) $advanceId = $cart['advance_id']; - $cartInfoGainIntegral = isset($cart['productInfo']['give_integral']) ? bcmul((string)$cart['cart_num'], (string)$cart['productInfo']['give_integral'], 0) : 0; - $gainIntegral = bcadd((string)$gainIntegral, (string)$cartInfoGainIntegral, 0); - } - if (count($cartInfo) == 1 && isset($cartInfo[0]['productInfo']['presale']) && $cartInfo[0]['productInfo']['presale'] == 1) { - $advance_id = $cartInfo[0]['product_id']; - } else { - $advance_id = 0; - } - $deduction = $seckillId || $bargainId || $combinationId; - if ($deduction) { - $couponId = 0; - $useIntegral = false; - } - //$shipping_type = 1 快递发货 $shipping_type = 2 门店自提 - $storeSelfMention = sys_config('store_self_mention') ?? 0; - if (!$storeSelfMention) $shippingType = 1; + $cartInfo = null; + if ($seckillId || $combinationId || $bargainId || $advanceId) { + $cartInfo = $cartGroup['cartInfo']; + foreach ($cartInfo as $item) { + $type = 0; + if (!isset($item['product_attr_unique']) || !$item['product_attr_unique']) continue; + if ($item['seckill_id']) { + $type = 1; + } elseif ($item['bargain_id']) { + $type = 2; + } elseif ($item['combination_id']) { + $type = 3; + } elseif ($item['advance_id']) { + $type = 6; + } + if ($type && (!CacheService::checkStock($item['product_attr_unique'], (int)$item['cart_num'], $type) || !CacheService::popStock($item['product_attr_unique'], (int)$item['cart_num'], $type))) { + throw new ApiException(410214, ['cart_num' => $item['cart_num'], 'unit_name' => $item['productInfo']['unit_name']]); - $orderInfo = [ - 'uid' => $uid, - 'order_id' => $this->getNewOrderId('cp'), - 'real_name' => $addressInfo['real_name'], - 'user_phone' => $addressInfo['phone'], - 'user_address' => $addressInfo['province'] . ' ' . $addressInfo['city'] . ' ' . $addressInfo['district'] . ' ' . $addressInfo['detail'], - 'cart_id' => $cartIds, - 'total_num' => $totalNum, - 'total_price' => $priceGroup['totalPrice'], - 'total_postage' => $shippingType == 1 ? $priceGroup['storePostage'] : 0, - 'coupon_id' => $couponId, - 'coupon_price' => $priceData['coupon_price'], - 'pay_price' => $priceData['pay_price'], - 'pay_postage' => $priceData['pay_postage'], - 'deduction_price' => $priceData['deduction_price'], - 'paid' => 0, - 'pay_type' => $payType, - 'use_integral' => $priceData['usedIntegral'], - 'gain_integral' => $gainIntegral, - 'mark' => htmlspecialchars($mark), - 'combination_id' => $combinationId, - 'pink_id' => $pinkId, - 'seckill_id' => $seckillId, - 'bargain_id' => $bargainId, - 'advance_id' => $advance_id, - 'cost' => $priceGroup['costPrice'], - 'add_time' => time(), - 'unique' => $key, - 'shipping_type' => $shippingType, - 'channel_type' => $userInfo['user_type'], - 'province' => strval($userInfo['user_type'] == 'wechat' || $userInfo['user_type'] == 'routine' ? $wechatServices->value(['uid' => $uid, 'user_type' => $userInfo['user_type']], 'province') : ''), - 'spread_uid' => 0, - 'spread_two_uid' => 0, - 'virtual_type' => $virtual_type, - 'pay_uid' => $uid, - 'custom_form' => json_encode($customForm), - 'division_id' => $userInfo['division_id'], - 'agent_id' => $userInfo['agent_id'], - 'staff_id' => $userInfo['staff_id'], - ]; - - if ($shippingType == 2) { - $orderInfo['verify_code'] = $this->getStoreCode(); - /** @var SystemStoreServices $storeServices */ - $storeServices = app()->make(SystemStoreServices::class); - $orderInfo['store_id'] = $storeServices->getStoreDispose($storeId, 'id'); - if (!$orderInfo['store_id']) { - throw new ApiException(410247); + } } } - /** @var StoreOrderCartInfoServices $cartServices */ - $cartServices = app()->make(StoreOrderCartInfoServices::class); - /** @var StoreSeckillServices $seckillServices */ - $seckillServices = app()->make(StoreSeckillServices::class); - $priceData['coupon_id'] = $couponId; - $order = $this->transaction(function () use ($cartIds, $orderInfo, $cartInfo, $key, $userInfo, $useIntegral, $priceData, $combinationId, $seckillId, $bargainId, $cartServices, $seckillServices, $uid, $addressId, $advanceId) { - //创建订单 - $order = $this->dao->save($orderInfo); - if (!$order) { - throw new ApiException(410200); - } - //记录自提人电话和姓名 - /** @var UserServices $userService */ - $userService = app()->make(UserServices::class); - $userService->update(['uid' => $uid], ['real_name' => $orderInfo['real_name'], 'record_phone' => $orderInfo['user_phone']]); - //占用库存 - $seckillServices->occupySeckillStock($cartInfo, $key); - //积分抵扣 - if ($priceData['usedIntegral'] > 0) { - $this->deductIntegral($userInfo, $useIntegral, $priceData, (int)$userInfo['uid'], $order['id']); - } - //扣库存 - $this->decGoodsStock($cartInfo, $combinationId, $seckillId, $bargainId, $advanceId); - //保存购物车商品信息 - $cartServices->setCartInfo($order['id'], $uid, $cartInfo); - return $order; - }); - //创建开票数据 - if ($invoice_id) { - app()->make(StoreOrderInvoiceServices::class)->makeUp($uid, $order['order_id'], (int)$invoice_id); + $virtual_type = $cartGroup['cartInfo'][0]['productInfo']['virtual_type'] ?? 0; + + try { + //下单前发票验证 + if ($invoice_id) { + app()->make(UserInvoiceServices::class)->checkInvoice((int)$invoice_id, $uid); + } + + /** @var StoreOrderComputedServices $computedServices */ + $computedServices = app()->make(StoreOrderComputedServices::class); + $priceData = $computedServices->computedOrder($uid, $userInfo, $cartGroup, $addressId, $payType, $useIntegral, $couponId, true, $shippingType); + /** @var WechatUserServices $wechatServices */ + $wechatServices = app()->make(WechatUserServices::class); + /** @var UserAddressServices $addressServices */ + $addressServices = app()->make(UserAddressServices::class); + if ($shippingType == 1 && $virtual_type == 0) { + if (!$addressId) { + throw new ApiException(410045); + } + if (!$addressInfo = $addressServices->getOne(['uid' => $uid, 'id' => $addressId, 'is_del' => 0])) + throw new ApiException(410046); + $addressInfo = $addressInfo->toArray(); + } else { + if ((!$real_name || !$phone) && $virtual_type == 0) { + throw new ApiException(410245); + } + $addressInfo['real_name'] = $real_name; + $addressInfo['phone'] = $phone; + $addressInfo['province'] = ''; + $addressInfo['city'] = ''; + $addressInfo['district'] = ''; + $addressInfo['detail'] = ''; + } + $cartInfo = $cartGroup['cartInfo']; + $priceGroup = $cartGroup['priceGroup']; + $cartIds = []; + $totalNum = 0; + $gainIntegral = 0; + foreach ($cartInfo as $cart) { + $cartIds[] = $cart['id']; + $totalNum += $cart['cart_num']; + if (!$seckillId) $seckillId = $cart['seckill_id']; + if (!$bargainId) $bargainId = $cart['bargain_id']; + if (!$combinationId) $combinationId = $cart['combination_id']; + if (!$advanceId) $advanceId = $cart['advance_id']; + $cartInfoGainIntegral = isset($cart['productInfo']['give_integral']) ? bcmul((string)$cart['cart_num'], (string)$cart['productInfo']['give_integral'], 0) : 0; + $gainIntegral = bcadd((string)$gainIntegral, (string)$cartInfoGainIntegral, 0); + } + if (count($cartInfo) == 1 && isset($cartInfo[0]['productInfo']['presale']) && $cartInfo[0]['productInfo']['presale'] == 1) { + $advance_id = $cartInfo[0]['product_id']; + } else { + $advance_id = 0; + } + $deduction = $seckillId || $bargainId || $combinationId; + if ($deduction) { + $couponId = 0; + $useIntegral = false; + } + //$shipping_type = 1 快递发货 $shipping_type = 2 门店自提 + $storeSelfMention = sys_config('store_self_mention') ?? 0; + if (!$storeSelfMention) $shippingType = 1; + + $orderInfo = [ + 'uid' => $uid, + 'order_id' => $this->getNewOrderId('cp'), + 'real_name' => $addressInfo['real_name'], + 'user_phone' => $addressInfo['phone'], + 'user_address' => $addressInfo['province'] . ' ' . $addressInfo['city'] . ' ' . $addressInfo['district'] . ' ' . $addressInfo['detail'], + 'cart_id' => $cartIds, + 'total_num' => $totalNum, + 'total_price' => $priceGroup['totalPrice'], + 'total_postage' => $shippingType == 1 ? $priceGroup['storePostage'] : 0, + 'coupon_id' => $couponId, + 'coupon_price' => $priceData['coupon_price'], + 'pay_price' => $priceData['pay_price'], + 'pay_postage' => $priceData['pay_postage'], + 'deduction_price' => $priceData['deduction_price'], + 'paid' => 0, + 'pay_type' => $payType, + 'use_integral' => $priceData['usedIntegral'], + 'gain_integral' => $gainIntegral, + 'mark' => htmlspecialchars($mark), + 'combination_id' => $combinationId, + 'pink_id' => $pinkId, + 'seckill_id' => $seckillId, + 'bargain_id' => $bargainId, + 'advance_id' => $advance_id, + 'cost' => $priceGroup['costPrice'], + 'add_time' => time(), + 'unique' => $key, + 'shipping_type' => $shippingType, + 'channel_type' => $userInfo['user_type'], + 'province' => strval($userInfo['user_type'] == 'wechat' || $userInfo['user_type'] == 'routine' ? $wechatServices->value(['uid' => $uid, 'user_type' => $userInfo['user_type']], 'province') : ''), + 'spread_uid' => 0, + 'spread_two_uid' => 0, + 'virtual_type' => $virtual_type, + 'pay_uid' => $uid, + 'custom_form' => json_encode($customForm), + 'division_id' => $userInfo['division_id'], + 'agent_id' => $userInfo['agent_id'], + 'staff_id' => $userInfo['staff_id'], + ]; + + if ($shippingType == 2) { + $orderInfo['verify_code'] = $this->getStoreCode(); + /** @var SystemStoreServices $storeServices */ + $storeServices = app()->make(SystemStoreServices::class); + $orderInfo['store_id'] = $storeServices->getStoreDispose($storeId, 'id'); + if (!$orderInfo['store_id']) { + throw new ApiException(410247); + } + } + /** @var StoreOrderCartInfoServices $cartServices */ + $cartServices = app()->make(StoreOrderCartInfoServices::class); + /** @var StoreSeckillServices $seckillServices */ + $seckillServices = app()->make(StoreSeckillServices::class); + $priceData['coupon_id'] = $couponId; + $order = $this->transaction(function () use ($cartIds, $orderInfo, $cartInfo, $key, $userInfo, $useIntegral, $priceData, $combinationId, $seckillId, $bargainId, $cartServices, $seckillServices, $uid, $addressId, $advanceId) { + //创建订单 + $order = $this->dao->save($orderInfo); + if (!$order) { + throw new ApiException(410200); + } + //记录自提人电话和姓名 + /** @var UserServices $userService */ + $userService = app()->make(UserServices::class); + $userService->update(['uid' => $uid], ['real_name' => $orderInfo['real_name'], 'record_phone' => $orderInfo['user_phone']]); + //占用库存 + $seckillServices->occupySeckillStock($cartInfo, $key); + //积分抵扣 + if ($priceData['usedIntegral'] > 0) { + $this->deductIntegral($userInfo, $useIntegral, $priceData, (int)$userInfo['uid'], $order['id']); + } + //扣库存 + $this->decGoodsStock($cartInfo, $combinationId, $seckillId, $bargainId, $advanceId); + //保存购物车商品信息 + $cartServices->setCartInfo($order['id'], $uid, $cartInfo); + return $order; + }); + + //创建开票数据 + if ($invoice_id) { + app()->make(StoreOrderInvoiceServices::class)->makeUp($uid, $order['order_id'], (int)$invoice_id); + } + } catch (\Throwable $e) { + if ($seckillId || $combinationId || $advanceId || $bargainId) { + foreach ($cartInfo as $item) { + $value = $item['cart_info']; + $type = 0; + if (!isset($value['product_attr_unique']) || $value['product_attr_unique']) continue; + if ($value['seckill_id']) { + $type = 1; + } elseif ($value['bargain_id']) { + $type = 2; + } elseif ($value['combination_id']) { + $type = 3; + } elseif ($value['advance_id']) { + $type = 6; + } + if ($type) CacheService::setStock($value['product_attr_unique'], (int)$value['cart_num'], $type, false); + } + } + throw $e; } // 订单创建成功后置事件 diff --git a/crmeb/crmeb/exceptions/ApiStatusException.php b/crmeb/crmeb/exceptions/ApiStatusException.php new file mode 100644 index 000000000..8362bf321 --- /dev/null +++ b/crmeb/crmeb/exceptions/ApiStatusException.php @@ -0,0 +1,60 @@ + +// +---------------------------------------------------------------------- + +namespace crmeb\exceptions; + +/** + * API应用错误信息 + * Class ApiException + * @package crmeb\exceptions + */ +class ApiStatusException extends \RuntimeException +{ + protected $apiStatus; + protected $apiData; + + public function __construct($status, $message, $data = [], $replace = [], $code = 0, \Throwable $previous = null) + { + if (is_array($message)) { + $errInfo = $message; + $message = $errInfo[1] ?? '未知错误'; + if ($code === 0) { + $code = $errInfo[0] ?? 400; + } + } + + if (is_numeric($message)) { + $code = $message; + $message = getLang($message, $replace); + } + + $this->apiData = $data; + $this->apiStatus = $status; + + parent::__construct($message, $code, $previous); + } + + /** + * @return mixed + */ + public function getApiStatus() + { + return $this->apiStatus; + } + + /** + * @return array|mixed + */ + public function getApiData() + { + return $this->apiData; + } +}