This commit is contained in:
luofei 2024-01-21 13:52:56 +08:00
commit 06d34cd24a

View File

@ -32,6 +32,8 @@ use think\facade\Queue;
class StoreOrderCreateRepository extends StoreOrderRepository class StoreOrderCreateRepository extends StoreOrderRepository
{ {
protected $store_consumption_user;
protected $consumption_money;
public function v2CartIdByOrderInfo($user, array $cartId, array $takes = null, array $useCoupon = null, bool $useIntegral = false, int $addressId = null, $createOrder = false,$consumption_id=0) public function v2CartIdByOrderInfo($user, array $cartId, array $takes = null, array $useCoupon = null, bool $useIntegral = false, int $addressId = null, $createOrder = false,$consumption_id=0)
{ {
@ -147,6 +149,10 @@ class StoreOrderCreateRepository extends StoreOrderRepository
} }
$orderDeliveryStatus = true; $orderDeliveryStatus = true;
$order_svip_discount = 0; $order_svip_discount = 0;
if($consumption_id>0){
$this->store_consumption_user=Db::name('store_consumption_user')->where('coupon_user_id',$consumption_id)->where('uid',$uid)->find();
}
// 循环计算每个店铺的订单数据 委托商品是否设置收货方式 ? // 循环计算每个店铺的订单数据 委托商品是否设置收货方式 ?
foreach ($merchantCartList as &$merchantCart) { foreach ($merchantCartList as &$merchantCart) {
if ($order_type == 98 && !empty($deliverMethodArray)) { if ($order_type == 98 && !empty($deliverMethodArray)) {
@ -559,24 +565,33 @@ class StoreOrderCreateRepository extends StoreOrderRepository
} else { } else {
$pay_price = $org_price; $pay_price = $org_price;
} }
//计算总红包金额
$consumption_money=0; $a=0;
if($consumption_id>0){ if($consumption_id>0){
$store_consumption_user=Db::name('store_consumption_user')->where('coupon_user_id',$consumption_id)->where('uid',$uid)->find(); if($this->store_consumption_user){
if($store_consumption_user){ if($this->store_consumption_user['type']==2){
if($store_consumption_user['type']==2){ $a=bcdiv($pay_price,6);
$a=bcdiv($pay_price,4); if($this->store_consumption_user['balance']>$a){
if($store_consumption_user['balance']>$a){
$pay_price = bcsub($pay_price, $a, 2); $pay_price = bcsub($pay_price, $a, 2);
$consumption_money=$a; $this->consumption_money= bcadd($this->consumption_money,$a);
$this->store_consumption_user['balance']= bcsub($this->store_consumption_user['balance'],$a);
}else{ }else{
$pay_price = bcsub($pay_price, $store_consumption_user['balance'], 2); $a= $this->store_consumption_user['balance'];
$consumption_money=$store_consumption_user['balance']; $pay_price = bcsub($pay_price, $this->store_consumption_user['balance'], 2);
$this->consumption_money= bcadd($this->consumption_money,$this->store_consumption_user['balance']);
$this->store_consumption_user['balance']= 0;
} }
} }
if($store_consumption_user['type']==1){ if($this->store_consumption_user['type']==1){
$pay_price = bcsub($pay_price, $store_consumption_user['balance'], 2); if($pay_price>$this->store_consumption_user['balance']){
$consumption_money=$store_consumption_user['balance']; $pay_price = bcsub($pay_price, $this->store_consumption_user['balance'], 2);
$this->consumption_money=$this->store_consumption_user['balance'];
$a=$this->store_consumption_user['balance'];
}else{
$pay_price=0;
$this->consumption_money=bcsub($this->store_consumption_user['balance'],$pay_price, 2);
$a=$this->consumption_money;
}
} }
} }
} }
@ -597,6 +612,8 @@ class StoreOrderCreateRepository extends StoreOrderRepository
$merchantCart['order']['coupon_price'] = $coupon_price; $merchantCart['order']['coupon_price'] = $coupon_price;
$merchantCart['order']['postage_price'] = $merchantCart['order']['postage_price']; $merchantCart['order']['postage_price'] = $merchantCart['order']['postage_price'];
$merchantCart['order']['procure_price'] = $merchantCart['order']['procure_price']; $merchantCart['order']['procure_price'] = $merchantCart['order']['procure_price'];
$merchantCart['order']['consumption_id'] = $consumption_id;
$merchantCart['order']['consumption_money'] = $a;
$order_price = bcadd($order_price, $pay_price, 2); $order_price = bcadd($order_price, $pay_price, 2);
$order_total_price = bcadd($order_total_price, $total_price, 2); $order_total_price = bcadd($order_total_price, $total_price, 2);
@ -618,6 +635,7 @@ class StoreOrderCreateRepository extends StoreOrderRepository
unset($merchantCart); unset($merchantCart);
$status = ($address || $order_model || $allow_no_address) ? ($noDeliver ? 'noDeliver' : 'finish') : 'noAddress'; $status = ($address || $order_model || $allow_no_address) ? ($noDeliver ? 'noDeliver' : 'finish') : 'noAddress';
$order = $merchantCartList; $order = $merchantCartList;
$consumption_money = $this->consumption_money;
$total_price = $order_total_price; $total_price = $order_total_price;
$openIntegral = $merIntegralFlag && !$order_type && $sysIntegralConfig['integral_status'] && $sysIntegralConfig['integral_money'] > 0; $openIntegral = $merIntegralFlag && !$order_type && $sysIntegralConfig['integral_status'] && $sysIntegralConfig['integral_money'] > 0;
$total_coupon = bcadd($order_svip_discount, bcadd(bcadd($total_platform_coupon_price, $order_coupon_price, 2), $order_total_integral_price, 2), 2); $total_coupon = bcadd($order_svip_discount, bcadd(bcadd($total_platform_coupon_price, $order_coupon_price, 2), $order_total_integral_price, 2), 2);
@ -730,7 +748,7 @@ class StoreOrderCreateRepository extends StoreOrderRepository
$merchantRepository = app()->make(MerchantRepository::class); $merchantRepository = app()->make(MerchantRepository::class);
$giveCouponIds = []; $giveCouponIds = [];
$ex = systemConfig('extension_status'); $ex = systemConfig('extension_status');//是否开启分销
$address = $orderInfo['address']; $address = $orderInfo['address'];
$allUseCoupon = $orderInfo['usePlatformCouponId'] ? [$orderInfo['usePlatformCouponId']] : []; $allUseCoupon = $orderInfo['usePlatformCouponId'] ? [$orderInfo['usePlatformCouponId']] : [];
$totalNum = 0; $totalNum = 0;
@ -750,63 +768,6 @@ class StoreOrderCreateRepository extends StoreOrderRepository
$cost = bcadd(bcmul($cart['cost'], $cart['cart_num'], 2), $cost, 2); $cost = bcadd(bcmul($cart['cost'], $cart['cart_num'], 2), $cost, 2);
$extension_one = 0; $extension_one = 0;
$extension_two = 0; $extension_two = 0;
if ($ex) {
//预售订单
if ($orderType == 2) {
$_payPrice = $merchantCart['order']['pay_price'];
$rate = $cart['productPresell']['presell_type'] == 2 ? bcdiv($cart['productPresellAttr']['down_price'], $cart['productPresellAttr']['presell_price'], 3) : 1;
$one_price = $_payPrice > 0 ? bcdiv($_payPrice, $cart['cart_num'], 2) : 0;
if ($spreadUid && $cart['productPresellAttr']['bc_extension_one'] > 0) {
$org_extension = $cart['productPresellAttr']['bc_extension_one'];
if ($spreadUser->brokerage_level > 0 && $spreadUser->brokerage && $spreadUser->brokerage->extension_one_rate > 0) {
$org_extension = bcmul($org_extension, 1 + $spreadUser->brokerage->extension_one_rate, 2);
}
$_extension_one = bcmul($rate, $org_extension, 3);
$presell_extension_one = 0;
if ($cart['true_price'] > 0) {
$extension_one = bcmul(bcdiv($one_price, $cart['productPresellAttr']['down_price'], 3), $_extension_one, 2);
}
if ($rate < 1) {
$presell_extension_one = bcmul(1 - $rate, $org_extension, 2);
}
$cart['final_extension_one'] = bcmul($extension_one, $cart['cart_num'], 2);
$extension_one = bcadd($extension_one, $presell_extension_one, 2);
$cart['presell_extension_one'] = bcmul($presell_extension_one, $cart['cart_num'], 2);
}
if ($topUid && $cart['productPresellAttr']['bc_extension_two'] > 0) {
$org_extension = $cart['productPresellAttr']['bc_extension_two'];
if ($topUser->brokerage_level > 0 && $topUser->brokerage && $topUser->brokerage->extension_two_rate > 0) {
$org_extension = bcmul($org_extension, 1 + $topUser->brokerage->extension_two_rate, 2);
}
$_extension_two = bcmul($rate, $org_extension, 2);
$presell_extension_two = 0;
if ($cart['true_price'] > 0) {
$extension_two = bcmul(bcdiv($one_price, $cart['productPresellAttr']['down_price'], 3), $_extension_two, 2);
}
if ($rate < 1) {
$presell_extension_two = bcmul(1 - $rate, $org_extension, 2);
}
$cart['final_extension_two'] = bcmul($extension_two, $cart['cart_num'], 2);;
$extension_two = bcadd($extension_two, $presell_extension_two, 2);
$cart['presell_extension_two'] = bcmul($presell_extension_two, $cart['cart_num'], 2);
}
} else if (!$orderType) {
if ($spreadUid && $cart['productAttr']['bc_extension_one'] > 0) {
$org_extension = $cart['productAttr']['bc_extension_one'];
if ($spreadUser->brokerage_level > 0 && $spreadUser->brokerage && $spreadUser->brokerage->extension_one_rate > 0) {
$org_extension = bcmul($org_extension, 1 + $spreadUser->brokerage->extension_one_rate, 2);
}
$extension_one = $cart['true_price'] > 0 ? bcmul(bcdiv($cart['true_price'], $cart['total_price'], 3), $org_extension, 2) : 0;
}
if ($topUid && $cart['productAttr']['bc_extension_two'] > 0) {
$org_extension = $cart['productAttr']['bc_extension_two'];
if ($topUser->brokerage_level > 0 && $topUser->brokerage && $topUser->brokerage->extension_two_rate > 0) {
$org_extension = bcmul($org_extension, 1 + $topUser->brokerage->extension_two_rate, 2);
}
$extension_two = $cart['true_price'] > 0 ? bcmul(bcdiv($cart['true_price'], $cart['total_price'], 3), $org_extension, 2) : 0;
}
}
}
$cart['extension_one'] = $extension_one; $cart['extension_one'] = $extension_one;
$cart['extension_two'] = $extension_two; $cart['extension_two'] = $extension_two;
$total_extension_one = bcadd($total_extension_one, bcmul($extension_one, $cart['cart_num'], 2), 2); $total_extension_one = bcadd($total_extension_one, bcmul($extension_one, $cart['cart_num'], 2), 2);
@ -860,6 +821,8 @@ class StoreOrderCreateRepository extends StoreOrderRepository
'platform_coupon_price' => $merchantCart['order']['platform_coupon_price'], 'platform_coupon_price' => $merchantCart['order']['platform_coupon_price'],
'pay_type' => $pay_type, 'pay_type' => $pay_type,
'procure_price' => $merchantCart['order']['procure_price'], 'procure_price' => $merchantCart['order']['procure_price'],
'consumption_id' => $merchantCart['order']['consumption_id'],
'consumption_money' => $merchantCart['order']['consumption_money'],
]; ];
$allUseCoupon = array_merge($allUseCoupon, $merchantCart['order']['useCouponIds']); $allUseCoupon = array_merge($allUseCoupon, $merchantCart['order']['useCouponIds']);
$orderList[] = $_order; $orderList[] = $_order;
@ -867,6 +830,7 @@ class StoreOrderCreateRepository extends StoreOrderRepository
$totalCost = bcadd($totalCost, $cost, 2); $totalCost = bcadd($totalCost, $cost, 2);
$totalNum += $merchantCart['order']['total_num']; $totalNum += $merchantCart['order']['total_num'];
} }
//总订单组
$groupOrder = [ $groupOrder = [
'uid' => $uid, 'uid' => $uid,
'group_order_sn' => count($orderList) === 1 ? $orderList[0]['order_sn'] : ($this->getNewOrderId(StoreOrderRepository::TYPE_SN_ORDER) . '0'), 'group_order_sn' => count($orderList) === 1 ? $orderList[0]['order_sn'] : ($this->getNewOrderId(StoreOrderRepository::TYPE_SN_ORDER) . '0'),
@ -886,6 +850,8 @@ class StoreOrderCreateRepository extends StoreOrderRepository
'integral' => $orderInfo['order_total_integral'], 'integral' => $orderInfo['order_total_integral'],
'integral_price' => $orderInfo['order_total_integral_price'], 'integral_price' => $orderInfo['order_total_integral_price'],
'give_integral' => $orderInfo['order_total_give_integral'], 'give_integral' => $orderInfo['order_total_give_integral'],
'consumption_id' => $orderInfo['consumption_id'],
'consumption_money' => $orderInfo['consumption_money'],
]; ];
event('order.create.before', compact('groupOrder', 'orderList')); event('order.create.before', compact('groupOrder', 'orderList'));
$group = Db::transaction(function () use ($ex, $user, $topUid, $spreadUid, $uid, $receipt_data, $cartIds, $allUseCoupon, $groupOrder, $orderList, $orderInfo) { $group = Db::transaction(function () use ($ex, $user, $topUid, $spreadUid, $uid, $receipt_data, $cartIds, $allUseCoupon, $groupOrder, $orderList, $orderInfo) {
@ -984,6 +950,30 @@ class StoreOrderCreateRepository extends StoreOrderRepository
$user->save(); $user->save();
} }
if ($groupOrder['consumption_money'] > 0) {
$balance=0;
$store_consumption_user= Db::name('store_consumption_user')->where('coupon_user_id',$groupOrder['coupon_user_id'])->where('status',0)->find();
if($store_consumption_user){
if($store_consumption_user['type']==1){
if($store_consumption_user['balance']>$groupOrder['consumption_money']){
$balance=['balance'=>bcsub($store_consumption_user['balance'],$groupOrder['consumption_money'],2)];
Db::name('store_consumption_user')->where('coupon_user_id',$groupOrder['coupon_user_id'])->update();
}else{
$balance=['balance'=>0,'status'=>1];
Db::name('store_consumption_user')->where('coupon_user_id',$groupOrder['coupon_user_id'])->update();
}
}
app()->make(UserBillRepository::class)->decBill($user['uid'], 'consumption', 'deduction', [
'link_id' => $groupOrder['group_order_id'],
'status' => 1,
'title' => '购买商品',
'number' => $groupOrder['consumption_money'],
'mark' => '购买商品使用红包抵扣' . floatval($groupOrder['consumption_money']) . '元',
'balance' => $balance
]);
}
foreach ($orderList as $k => $order) { foreach ($orderList as $k => $order) {
$orderList[$k]['group_order_id'] = $groupOrder->group_order_id; $orderList[$k]['group_order_id'] = $groupOrder->group_order_id;
} }
@ -1015,6 +1005,22 @@ class StoreOrderCreateRepository extends StoreOrderRepository
]; ];
} }
if ($order['consumption_money'] > 0) {
$bills[] = [
'uid' => $uid,
'link_id' => $_order->order_id,
'pm' => 0,
'title' => '红包抵扣',
'category' => 'mer_integral',
'type' => 'deduction',
'number' => $order['consumption_money'],
'balance' => 0,
'mark' => '购买商品使用积分抵扣' .$order['consumption_money']. '元',
'mer_id' => $order['mer_id'],
'status' => 1
];
}
//创建发票信息 //创建发票信息
if (isset($receipt_data[$_order['mer_id']])) { if (isset($receipt_data[$_order['mer_id']])) {
app()->make(StoreOrderReceiptRepository::class)->add($receipt_data[$_order['mer_id']], $_order); app()->make(StoreOrderReceiptRepository::class)->add($receipt_data[$_order['mer_id']], $_order);