跨区域购买限制

This commit is contained in:
mkm 2023-11-09 16:53:00 +08:00
parent ffb9e9051c
commit 69b511c2fa
3 changed files with 14 additions and 40 deletions

View File

@ -79,7 +79,7 @@ class StoreCartDao extends BaseDao
$query->field('product_id,stock,price,unique,sku,image,svip_price');
},
'merchant' => function ($query) {
$query->field('mer_id,mer_name,mer_state,mer_avatar,is_trader,type_id,credit_buy')->with(['type_names']);
$query->field('mer_id,mer_name,mer_state,mer_avatar,is_trader,type_id,credit_buy,street_id')->with(['type_names']);
}
])->select();
@ -117,7 +117,7 @@ class StoreCartDao extends BaseDao
->append(['bc_extension_one', 'bc_extension_two']);
},
'merchant' => function (Relation $query) use ($uid) {
$query->field('mer_id,mer_name,mer_state,mer_avatar,delivery_way,commission_rate,category_id,credit_buy,settle_cycle,interest_rate')
$query->field('mer_id,mer_name,mer_state,mer_avatar,delivery_way,commission_rate,category_id,credit_buy,settle_cycle,interest_rate,type_id,street_id')
->with([
'coupon' => function ($query) use ($uid) {
$query->where('uid', $uid);

View File

@ -5,6 +5,7 @@ namespace app\common\repositories\store\order;
use app\common\dao\store\order\StoreCartDao;
use app\common\model\store\order\StoreGroupOrder;
use app\common\model\store\order\StoreOrder;
use app\common\model\system\merchant\Merchant;
use app\common\repositories\community\CommunityRepository;
use app\common\repositories\store\coupon\StoreCouponRepository;
use app\common\repositories\store\coupon\StoreCouponUserRepository;
@ -69,8 +70,12 @@ class StoreOrderCreateRepository extends StoreOrderRepository
//虚拟订单自定义数据
$order_extend = [];
//检查商品类型, 活动商品只能单独购买
foreach ($merchantCartList as $merchantCart) {
if($merchantCart['type_id']!=Merchant::TypeSupplyChain){
if($merchantCart['street_id']!=$address['street_code']){
throw new ValidateException('不能跨区域购买商品');
}
}
foreach ($merchantCart['list'] as $cart) {
if ($cart['product_type']==0) {
if ($cart['product']['once_min_count'] > 0 && $cart['product']['once_min_count'] > $cart['cart_num'])
@ -204,30 +209,7 @@ class StoreOrderCreateRepository extends StoreOrderRepository
if ($deliveryStatus && !$isTake && ($merDelivery || $merTake)) {
$isTake = $merDelivery ? 0 : 1;
}
//加载商品数据
foreach ($merchantCart['list'] as $cart) {
//预售订单
if ($cart['product_type'] == 2) {
$cart->append(['productPresell', 'productPresellAttr']);
//助力订单
} else if ($cart['product_type'] == 3) {
$cart->append(['productAssistAttr']);
//拼团订单
} else if ($cart['product_type'] == 4) {
$cart->append(['activeSku']);
//套餐订单
} else if ($cart['product_type'] == 10) {
$cart->append(['productDiscount', 'productDiscountAttr']);
}
//如果是预售订单 获取预售的订单的首款,尾款预售类型
if ($order_type == 2) {
$final_price = bcadd($final_price, bcmul($cart['cart_num'], $cart['productPresellAttr']['final_price'], 2), 2);
$presellType = $cart['productPresell']['presell_type'];
if ($presellType == 2)
$down_price = bcadd($down_price, bcmul($cart['cart_num'], $cart['productPresellAttr']['down_price'], 2), 2);
}
}
unset($cart);
$enabledCoupon = !($order_type && $order_type != 2);

View File

@ -108,22 +108,14 @@ class StoreOrder extends BaseController
if ($cartProductType == 0 && count($deliveryWay) == 0) {
$userAddressCode = ($address['province_code'] ?? '') . ',' . ($address['city_code'] ?? '') . ',' . ($address['district_code'] ?? '') . ',' . ($address['street_code'] ?? '') . ',' . ($address['village_code'] ?? '') . ',' . ($address['brigade_id'] ?? 0);
$getUrl = env('LOGISTICS_HOST_URL') . '/api/hasCourier?user_address_code=' . $userAddressCode;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $getUrl);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
$hasCourierData = curl_exec($ch);
curl_close($ch);
if (!empty($hasCourierData) && is_string($hasCourierData)) {
$courierData = json_decode($hasCourierData, true);
if (empty($courierData['code']) || $courierData['code'] != 1) {
throw new ValidateException('该收货区域未设置快递员');
}
}
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', $getUrl);
$courierData = json_decode($response->getBody(), true);
if (empty($courierData['code']) || $courierData['code'] != 1) {
throw new ValidateException('该收货区域未设置快递员');
}
}
}
$groupOrder = app()->make(LockService::class)->exec('order.create', function () use ($orderCreateRepository, $receipt_data, $mark, $extend, $cartId, $payType, $takes, $couponIds, $useIntegral, $addressId, $post) {
return $orderCreateRepository->v2CreateOrder(array_search($payType, StoreOrderRepository::PAY_TYPE), $this->request->userInfo(), $cartId, $extend, $mark, $receipt_data, $takes, $couponIds, $useIntegral, $addressId, $post);
});