增加:酒道馆兑换商品区分为酒道馆兑换和小酒馆兑换

增加:小酒馆兑换商品流程及惠民积分使用处理
重构:酒道馆兑换订单生成后,酒水卡积分处理合并到惠民积分处理中,并且从公共处理方法中独立出来单独处理
重构:酒道馆兑换订单生成后,相关酒卡额度处理从公共方法中独立出来单独处理
This commit is contained in:
wuhui_zzw 2024-07-02 17:01:06 +08:00
parent e4fd74ca81
commit cb3732b958
8 changed files with 394 additions and 164 deletions

View File

@ -92,6 +92,9 @@ class MerchantDao extends BaseDao
}) })
->when(isset($where['invite_agent_id']) && $where['invite_agent_id'] !== '',function($query) use ($where){ ->when(isset($where['invite_agent_id']) && $where['invite_agent_id'] !== '',function($query) use ($where){
$query->whereLike('invite_agent_id', $where['invite_agent_id']); $query->whereLike('invite_agent_id', $where['invite_agent_id']);
})
->when(isset($where['merchant_sub_type']) && $where['merchant_sub_type'] !== '',function($query) use ($where){
$query->whereLike('merchant_sub_type', $where['merchant_sub_type']);
}); });

View File

@ -175,4 +175,28 @@ class StoreCartRepository extends BaseRepository
} }
return true; return true;
} }
/**
* Common: 酒道馆查询基本模型
* Author: wu-hui
* Time: 2024/07/02 9:55
* @param $params
* @return \think\db\BaseQuery
*/
public function wineSearchModel($params){
return $this->getSearch([])
->hasWhere('merchant',function($query) use ($params){
$query->where('merchant_sub_type', $params['merchant_sub_type']);
})
->where([
'StoreCart.is_pay' => 0,
'StoreCart.is_del' => 0,
'StoreCart.is_new' => 0,
'StoreCart.is_fail' => 0,
'StoreCart.product_type' => 36,
'StoreCart.uid' => $params['uid'],
]);
}
} }

View File

@ -3,6 +3,7 @@
namespace app\common\repositories\store\order; namespace app\common\repositories\store\order;
use app\common\model\store\product\Product; use app\common\model\store\product\Product;
use app\common\model\system\merchant\Merchant;
use app\common\model\user\ExchangeIntegralRecord; use app\common\model\user\ExchangeIntegralRecord;
use app\common\model\user\ExchangeQuotaRecord; use app\common\model\user\ExchangeQuotaRecord;
use app\common\model\user\User; use app\common\model\user\User;
@ -48,6 +49,7 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
$isWithGoods = $withGoods['is_with_goods'] ?? 0;// 0=用户购物1=酒道馆进货 $isWithGoods = $withGoods['is_with_goods'] ?? 0;// 0=用户购物1=酒道馆进货
$with_goods_mer_id = $withGoods['with_goods_mer_id'] ?? 0; $with_goods_mer_id = $withGoods['with_goods_mer_id'] ?? 0;
$diffRate = 30;// 酒道馆商品 补差价比例 这里暂时默认固定为30% $diffRate = 30;// 酒道馆商品 补差价比例 这里暂时默认固定为30%
$quotaIntegralConfig = app()->make(ExchangeQuotaRepository::class)->getConfig();
$key = md5(json_encode(compact('cartId','takes','useCoupon','useIntegral','addressId'))).$uid; $key = md5(json_encode(compact('cartId','takes','useCoupon','useIntegral','addressId'))).$uid;
//去掉过期的优惠券信息 //去掉过期的优惠券信息
app()->make(StoreCouponUserRepository::class)->failCoupon(); app()->make(StoreCouponUserRepository::class)->failCoupon();
@ -737,6 +739,11 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
$orderTotalMerTitleQuota = 0;// 进货订单 - 补货额度 - 冠名品牌抵扣额度(总) $orderTotalMerTitleQuota = 0;// 进货订单 - 补货额度 - 冠名品牌抵扣额度(总)
$orderTotalMerOtherQuota = 0;// 进货订单 - 补货额度 - 其他品牌抵扣额度(总) $orderTotalMerOtherQuota = 0;// 进货订单 - 补货额度 - 其他品牌抵扣额度(总)
$orderTotalQuotaIntegral = 0;// 订单总使用的惠民积分
$orderTotalQuotaIntegralPrice = 0;// 订单总使用惠民积分抵扣的金额
$orderTotalQuotaDiff = 0;// 惠民积分抵扣后总差价
$orderTotalQuotaDiffMoney = 0;// 惠民积分差价实际支付金额
// 获取当前进货商户的补货额度 // 获取当前进货商户的补货额度
$merQuotaInfo = app()->make(MerchantQuotaRepository::class)->getMerQuotaAndBrandInfo((int)$with_goods_mer_id); $merQuotaInfo = app()->make(MerchantQuotaRepository::class)->getMerQuotaAndBrandInfo((int)$with_goods_mer_id);
$titleSurplusQuota = $merQuotaInfo['title_surplus_quota'] ?? 0; $titleSurplusQuota = $merQuotaInfo['title_surplus_quota'] ?? 0;
@ -775,6 +782,18 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
$orderRandomReduction = 0;//当前订单随机立减金额 $orderRandomReduction = 0;//当前订单随机立减金额
$orderMerTitleQuota = 0;// 进货订单 - 补货额度 - 冠名品牌抵扣额度(本订单) $orderMerTitleQuota = 0;// 进货订单 - 补货额度 - 冠名品牌抵扣额度(本订单)
$orderMerOtherQuota = 0;// 进货订单 - 补货额度 - 其他品牌抵扣额度(本订单) $orderMerOtherQuota = 0;// 进货订单 - 补货额度 - 其他品牌抵扣额度(本订单)
// 惠民积分相关内容
$merInfo = Merchant::where('mer_id', $merchantCart['mer_id'])->field('merchant_sub_type,shop_mer_id')->findOrEmpty()->toArray();
$holdQuotaIntegral = 0;
if($merInfo['shop_mer_id'] > 0) {
$quotaIntegralHoldInfo = app()->make(ExchangeQuotaRepository::class)->getHoldInfo($uid, 5, $merInfo['shop_mer_id']);
$holdQuotaIntegral = (float)sprintf("%.2f", $quotaIntegralHoldInfo->surplus_quota - $quotaIntegralHoldInfo->freeze_quota);
}
$orderQuotaIntegral = 0;// 当前订单使用的惠民积分
$orderQuotaIntegralPrice = 0;// 当前订单使用惠民积分抵扣的金额
$orderQuotaDiff = 0;// 惠民积分抵扣后当前订单差价
$orderQuotaDiffMoney = 0;// 惠民积分当前订单差价实际支付金额
//计算积分抵扣 //计算积分抵扣
foreach($merchantCart['list'] as &$cart){ foreach($merchantCart['list'] as &$cart){
if($cart['product_type'] == 35){ if($cart['product_type'] == 35){
@ -802,34 +821,63 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
$cart['true_price'] = bcsub($cart['true_price'],$deductionAmount,2); $cart['true_price'] = bcsub($cart['true_price'],$deductionAmount,2);
} }
else if($cart['product_type'] == 36){ else if($cart['product_type'] == 36){
// 兑换酒道馆商品时 酒水卡积分抵扣处理 // 兑换酒道馆商品时 相关积分抵扣处理 商户子类型0=默认1=酒道馆/大型餐厅2=小酒馆/中小型餐厅
// 当前商品消耗积分 如果持有酒水卡积分大于等于支付金额,使用支付金额;小于支付金额,使用酒水卡积分 if($merInfo['merchant_sub_type'] == 2){
$deductionAmount = (float)$exchangeIntegral >= (float)$cart['true_price'] ? (float)$cart['true_price'] : (float)$exchangeIntegral;// 实际抵扣金额 // 小酒馆处理
$exchangeIntegral = bcsub((float)$exchangeIntegral,(float)$deductionAmount,2);// 剩余酒水卡积分 if($quotaIntegralConfig['quota_integral_switch'] == 1){
$cart['exchange_integral'] = $deductionAmount; $deductionAmount = (float)$holdQuotaIntegral >= (float)$cart['true_price'] ? (float)$cart['true_price'] : (float)$holdQuotaIntegral;// 实际抵扣金额
$cart['exchange_integral_price'] = $deductionAmount; $holdQuotaIntegral = bcsub((float)$holdQuotaIntegral,(float)$deductionAmount,2);// 剩余惠民积分
// 订单总支付金额 先减去酒水卡积分抵扣金额 $cart['quota_integral'] = $deductionAmount;
$merchantCart['order']['true_price'] = bcsub($merchantCart['order']['true_price'],$deductionAmount,2); $cart['quota_integral_price'] = $deductionAmount;
// 当前商品剩余应支付金额 进行补差价计算 // 订单总支付金额 先减去惠民积分抵扣金额
$cartTruePrice = bcsub($cart['true_price'],$deductionAmount,2); $merchantCart['order']['true_price'] = bcsub($merchantCart['order']['true_price'],$deductionAmount,2);
if($cartTruePrice > 0){ // 当前商品剩余应支付金额 进行补差价计算
// 未完全抵扣 需要补差价 $cartTruePrice = bcsub($cart['true_price'],$deductionAmount,2);
$diffMoney = sprintf("%.2f", $cartTruePrice * $diffRate / 100);// 实际支付差价 if($cartTruePrice > 0){
// 未完全抵扣 需要补差价
$orderWineDiffMoney = bcadd($orderWineDiffMoney,$cartTruePrice,2);// 剩余差价 $diffMoney = sprintf("%.2f",$cartTruePrice * $quotaIntegralConfig['quota_integral_diff_rate'] / 100);// 实际支付差价
$orderWineDiffMoneyPrice = bcadd($orderWineDiffMoneyPrice,$diffMoney,2);// 实际支付差价金额 $orderQuotaDiff = bcadd($orderQuotaDiff,$cartTruePrice,2);// 剩余差价
$cart['wine_diff_money'] = $cartTruePrice; $orderQuotaDiffMoney = bcadd($orderQuotaDiffMoney,$diffMoney,2);// 实际支付差价金额
$cart['wine_diff_money_price'] = $diffMoney; $cart['quota_integral_diff'] = $cartTruePrice;
$cart['quota_integral_diff_money'] = $diffMoney;
// 修改商品支付金额 // 修改商品支付金额
$merchantCart['order']['true_price'] = bcsub($merchantCart['order']['true_price'], bcsub($cartTruePrice,$diffMoney,2),2); $merchantCart['order']['true_price'] = bcsub($merchantCart['order']['true_price'], bcsub($cartTruePrice,$diffMoney,2),2);
$cartTruePrice = $diffMoney; $cartTruePrice = $diffMoney;
}
$cart['true_price'] = $cartTruePrice;
// 当前订单使用的惠民积分和抵扣金额
$orderQuotaIntegral = bcadd($orderQuotaIntegral,$deductionAmount,2);
$orderQuotaIntegralPrice = bcadd($orderQuotaIntegralPrice,$deductionAmount,2);
}
} }
else{
// 酒道馆处理 当前商品消耗积分 如果持有酒水卡积分大于等于支付金额,使用支付金额;小于支付金额,使用酒水卡积分
$deductionAmount = (float)$exchangeIntegral >= (float)$cart['true_price'] ? (float)$cart['true_price'] : (float)$exchangeIntegral;// 实际抵扣金额
$exchangeIntegral = bcsub((float)$exchangeIntegral,(float)$deductionAmount,2);// 剩余酒水卡积分
$cart['exchange_integral'] = $deductionAmount;
$cart['exchange_integral_price'] = $deductionAmount;
// 订单总支付金额 先减去酒水卡积分抵扣金额
$merchantCart['order']['true_price'] = bcsub($merchantCart['order']['true_price'],$deductionAmount,2);
// 当前商品剩余应支付金额 进行补差价计算
$cartTruePrice = bcsub($cart['true_price'],$deductionAmount,2);
if($cartTruePrice > 0){
// 未完全抵扣 需要补差价
$diffMoney = sprintf("%.2f", $cartTruePrice * $diffRate / 100);// 实际支付差价
$cart['true_price'] = $cartTruePrice; $orderWineDiffMoney = bcadd($orderWineDiffMoney,$cartTruePrice,2);// 剩余差价
// 当前订单使用的酒水卡积分和抵扣金额 $orderWineDiffMoneyPrice = bcadd($orderWineDiffMoneyPrice,$diffMoney,2);// 实际支付差价金额
$orderWineIntegral = bcadd($orderWineIntegral,$deductionAmount,2); $cart['wine_diff_money'] = $cartTruePrice;
$orderWineIntegralPrice = bcadd($orderWineIntegralPrice,$deductionAmount,2); $cart['wine_diff_money_price'] = $diffMoney;
// 修改商品支付金额
$merchantCart['order']['true_price'] = bcsub($merchantCart['order']['true_price'], bcsub($cartTruePrice,$diffMoney,2),2);
$cartTruePrice = $diffMoney;
}
$cart['true_price'] = $cartTruePrice;
// 当前订单使用的酒水卡积分和抵扣金额
$orderWineIntegral = bcadd($orderWineIntegral,$deductionAmount,2);
$orderWineIntegralPrice = bcadd($orderWineIntegralPrice,$deductionAmount,2);
}
} }
else{ else{
//只有普通商品可以抵扣 //只有普通商品可以抵扣
@ -893,13 +941,18 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
$order_total_integral = bcadd($order_total_integral,$total_integral,0); $order_total_integral = bcadd($order_total_integral,$total_integral,0);
$order_total_integral_price = bcadd($order_total_integral_price,$total_integral_price,2); $order_total_integral_price = bcadd($order_total_integral_price,$total_integral_price,2);
// 随机立减
$orderTotalRandomReduction = bcadd($orderTotalRandomReduction,$orderRandomReduction,2);
// 订单总使用的酒水卡积分 & 总抵扣的金额 // 订单总使用的酒水卡积分 & 总抵扣的金额
$orderTotalWineIntegral = bcadd($orderTotalWineIntegral,$orderWineIntegral,2); $orderTotalWineIntegral = bcadd($orderTotalWineIntegral,$orderWineIntegral,2);
$orderTotalWineIntegralPrice = bcadd($orderTotalWineIntegralPrice,$orderWineIntegralPrice,2); $orderTotalWineIntegralPrice = bcadd($orderTotalWineIntegralPrice,$orderWineIntegralPrice,2);
$orderTotalRandomReduction = bcadd($orderTotalRandomReduction,$orderRandomReduction,2);
$orderTotalWineDiffMoney = bcadd($orderTotalWineDiffMoney,$orderWineDiffMoney,2); $orderTotalWineDiffMoney = bcadd($orderTotalWineDiffMoney,$orderWineDiffMoney,2);
$orderTotalWineDiffMoneyPrice = bcadd($orderTotalWineDiffMoneyPrice,$orderWineDiffMoneyPrice,2); $orderTotalWineDiffMoneyPrice = bcadd($orderTotalWineDiffMoneyPrice,$orderWineDiffMoneyPrice,2);
// 订单总使用的惠民积分 & 总抵扣的金额
$orderTotalQuotaIntegral = bcadd($orderTotalQuotaIntegral,$orderQuotaIntegral,2);
$orderTotalQuotaIntegralPrice = bcadd($orderTotalQuotaIntegralPrice,$orderQuotaIntegralPrice,2);
$orderTotalQuotaDiff = bcadd($orderTotalQuotaDiff,$orderQuotaDiff,2);
$orderTotalQuotaDiffMoney = bcadd($orderTotalQuotaDiffMoney,$orderQuotaDiffMoney,2);
// 订单使用的补货额度 // 订单使用的补货额度
$orderTotalMerTitleQuota = bcadd($orderTotalMerTitleQuota,$orderMerTitleQuota,2); $orderTotalMerTitleQuota = bcadd($orderTotalMerTitleQuota,$orderMerTitleQuota,2);
$orderTotalMerOtherQuota = bcadd($orderTotalMerOtherQuota,$orderMerOtherQuota,2); $orderTotalMerOtherQuota = bcadd($orderTotalMerOtherQuota,$orderMerOtherQuota,2);
@ -947,14 +1000,19 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
// 酒水卡积分抵扣情况 // 酒水卡积分抵扣情况
$merchantCart['order']['exchange_integral_price'] = $orderWineIntegralPrice; $merchantCart['order']['exchange_integral_price'] = $orderWineIntegralPrice;
$merchantCart['order']['exchange_integral'] = $orderWineIntegral; $merchantCart['order']['exchange_integral'] = $orderWineIntegral;
$merchantCart['order']['wine_diff_money'] = $orderWineDiffMoney; $merchantCart['order']['wine_diff_money'] = $orderWineDiffMoney;
$merchantCart['order']['wine_diff_money_price'] = $orderWineDiffMoneyPrice; $merchantCart['order']['wine_diff_money_price'] = $orderWineDiffMoneyPrice;
$merchantCart['order']['org_price'] = $org_price; // 惠民积分抵扣情况
$merchantCart['order']['pay_price'] = $pay_price; $merchantCart['order']['quota_integral'] = $orderQuotaIntegral;
$merchantCart['order']['coupon_price'] = $coupon_price; $merchantCart['order']['quota_integral_price'] = $orderQuotaIntegralPrice;
$merchantCart['order']['quota_integral_diff'] = $orderQuotaDiff;
$merchantCart['order']['quota_integral_diff_money'] = $orderQuotaDiffMoney;
$merchantCart['order']['org_price'] = $org_price;
$merchantCart['order']['pay_price'] = $pay_price;
$merchantCart['order']['coupon_price'] = $coupon_price;
$merchantCart['order']['random_reduction'] = $orderRandomReduction; $merchantCart['order']['random_reduction'] = $orderRandomReduction;
$merchantCart['order']['mer_quota_title'] = $orderMerTitleQuota; $merchantCart['order']['mer_quota_title'] = $orderMerTitleQuota;
$merchantCart['order']['mer_quota_other'] = $orderMerOtherQuota; $merchantCart['order']['mer_quota_other'] = $orderMerOtherQuota;
$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);
@ -979,8 +1037,14 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
$openIntegral = $merIntegralFlag && !$order_type && $sysIntegralConfig['integral_status'] && $sysIntegralConfig['integral_money'] > 0; $openIntegral = $merIntegralFlag && !$order_type && $sysIntegralConfig['integral_status'] && $sysIntegralConfig['integral_money'] > 0;
$integralDeductionAmount = bcadd($order_total_integral_price,$orderTotalWineIntegralPrice,2);
$total_coupon = bcadd($order_svip_discount,bcadd(bcadd($total_platform_coupon_price,$order_coupon_price,2),$integralDeductionAmount,2),2);
$deductionAmount = (float)sprintf("%.2f",$order_total_integral_price + $orderTotalWineIntegralPrice + $orderTotalQuotaIntegralPrice);
$total_coupon = bcadd($order_svip_discount,bcadd(bcadd($total_platform_coupon_price,$order_coupon_price,2),$deductionAmount,2),2);
$data = compact( $data = compact(
@ -1001,6 +1065,12 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
'orderTotalWineIntegralPrice', 'orderTotalWineIntegralPrice',
'orderTotalWineDiffMoney', 'orderTotalWineDiffMoney',
'orderTotalWineDiffMoneyPrice', 'orderTotalWineDiffMoneyPrice',
'orderTotalQuotaIntegral',
'orderTotalQuotaIntegralPrice',
'orderTotalQuotaDiff',
'orderTotalQuotaDiffMoney',
'orderTotalRandomReduction', 'orderTotalRandomReduction',
'orderTotalMerOtherQuota', 'orderTotalMerOtherQuota',
'orderTotalMerTitleQuota', 'orderTotalMerTitleQuota',
@ -1225,6 +1295,11 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
// 进货订单 - 补货额度抵扣金额 // 进货订单 - 补货额度抵扣金额
'mer_quota_title' => $merchantCart['order']['mer_quota_title'] ?? 0, 'mer_quota_title' => $merchantCart['order']['mer_quota_title'] ?? 0,
'mer_quota_other' => $merchantCart['order']['mer_quota_other'] ?? 0, 'mer_quota_other' => $merchantCart['order']['mer_quota_other'] ?? 0,
// 惠民积分
'quota_integral' => $merchantCart['order']['quota_integral'] ?? 0,
'quota_integral_price' => $merchantCart['order']['quota_integral_price'] ?? 0,
'quota_integral_diff' => $merchantCart['order']['quota_integral_diff'] ?? 0,
'quota_integral_diff_money' => $merchantCart['order']['quota_integral_diff_money'] ?? 0,
]; ];
$allUseCoupon = array_merge($allUseCoupon,$merchantCart['order']['useCouponIds']); $allUseCoupon = array_merge($allUseCoupon,$merchantCart['order']['useCouponIds']);
@ -1355,40 +1430,16 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
]); ]);
$user->save(); $user->save();
} }
// 用户兑换酒道馆商品 减少酒水卡积分 // 循环处理单个订单
if($groupOrder['activity_type'] == 36 && $groupOrder['exchange_integral'] > 0){
$userInfo = User::where('uid',$user['uid'])->findOrEmpty();
$integralChangeFront = (float)$userInfo->exchange_integral;
$userInfo->exchange_integral -= (float)$groupOrder['exchange_integral'];
$userInfo->exchange_integral = $userInfo->exchange_integral > 0 ? $userInfo->exchange_integral : 0;
$userInfo->save();
ExchangeIntegralRecord::insert([
'uid' => $user['uid'],
'product_id' => 0,
'order_id' => 0,
'order_product_id' => 0,
'change_type' => 0,
'change_quantity' => (float)$groupOrder['exchange_integral'],
'change_front' => $integralChangeFront,
'change_after' => (float)$userInfo->exchange_integral,
'remark' => "兑换消费",
]);
}
foreach($orderList as $k => $order){
$orderList[$k]['group_order_id'] = $groupOrder->group_order_id;
}
$orderProduct = []; $orderProduct = [];
$orderStatus = []; $orderStatus = [];
$quotaHoldInfo = app()->make(MerchantQuotaRepository::class)->getQuotaInfo($groupOrder['with_goods_mer_id']); $quotaHoldInfo = app()->make(MerchantQuotaRepository::class)->getQuotaInfo($groupOrder['with_goods_mer_id']);
$quotaRecordInsertData = []; $quotaRecordInsertData = [];
foreach($orderList as $k => $order){
foreach($orderList as $order){ $order['group_order_id'] = $orderList[$k]['group_order_id'] = $groupOrder->group_order_id;
$cartInfo = $order['cartInfo']; $cartInfo = $order['cartInfo'];
unset($order['cartInfo']); unset($order['cartInfo']);
//创建子订单 // 创建子订单
$_order = $this->dao->create($order); $_order = $this->dao->create($order);
if($order['integral'] > 0){ if($order['integral'] > 0){
$bills[] = [ $bills[] = [
@ -1405,7 +1456,7 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
'status' => 1 'status' => 1
]; ];
} }
//创建发票信息 // 创建发票信息
if(isset($receipt_data[$_order['mer_id']])){ if(isset($receipt_data[$_order['mer_id']])){
app() app()
->make(StoreOrderReceiptRepository::class) ->make(StoreOrderReceiptRepository::class)
@ -1514,41 +1565,15 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
// 进货订单 - 补货额度抵扣金额 // 进货订单 - 补货额度抵扣金额
'mer_quota_title' => $cart['mer_quota_title'] ?? 0, 'mer_quota_title' => $cart['mer_quota_title'] ?? 0,
'mer_quota_other' => $cart['mer_quota_other'] ?? 0, 'mer_quota_other' => $cart['mer_quota_other'] ?? 0,
// 惠民积分
'quota_integral' => $cart['quota_integral'] ?? 0,
'quota_integral_price' => $cart['quota_integral_price'] ?? 0,
'quota_integral_diff' => $cart['quota_integral_diff'] ?? 0,
'quota_integral_diff_money' => $cart['quota_integral_diff_money'] ?? 0,
]; ];
// 根据商品类型进行特殊处理
if($cart['product_type'] == 36){
// 用户兑换商品 变更相关额度 酒类型0=未知1=瓶装酒2=封坛酒
$wineType = (int)Product::where('product_id', $cart['product_id'])->value('wine_type');
if($wineType > 0){
// 额度类型1=酒卡额度(瓶装酒)2=菜卡额度3=封坛酒额度4=加油卡额度
$quotaType = $wineType == 2 ? 3 : 1;
$userHoldInfo = app()->make(ExchangeQuotaRepository::class)
->searchModel(['uid'=>$user['uid'],'quota_type'=>$quotaType])
->findOrEmpty();
$changeFront = (float)$userHoldInfo->surplus_quota;
$userHoldInfo->use_quota += (float)$cart['total_price'];
$userHoldInfo->surplus_quota -= (float)$cart['total_price'];
$userHoldInfo->save();
ExchangeQuotaRecord::insert([
'uid' => $user['uid'],
'product_id' => 0,
'order_id' => 0,
'order_product_id' => 0,
'change_type' => 0,
'change_quantity' => (float)$cart['total_price'],
'change_front' => $changeFront,
'change_after' => (float)$userHoldInfo->surplus_quota,
'remark' => "兑换消费",
'source' => 2,
'quota_type' => $quotaType,
]);
}
}
} }
$userMerchantRepository->getInfo($uid,$order['mer_id']); $userMerchantRepository->getInfo($uid,$order['mer_id']);
app()->make(MerchantRepository::class)->incSales($order['mer_id'],$order['total_num']); app()->make(MerchantRepository::class)->incSales($order['mer_id'],$order['total_num']);
// 进货订单 并且存在补货额度减免 减少进货商户的补货额度 // 进货订单 并且存在补货额度减免 减少进货商户的补货额度
if($_order->activity_type == 35 && $_order->with_goods_mer_id > 0){ if($_order->activity_type == 35 && $_order->with_goods_mer_id > 0){
// 判断:是否存在冠名品牌额度 // 判断:是否存在冠名品牌额度
@ -1589,21 +1614,20 @@ class StoreOrderCreateRepository extends StoreOrderRepository{
} }
} }
} }
// 处理补货额度变更 // 处理补货额度变更
if($groupOrder['activity_type'] == 35){ if($groupOrder['activity_type'] == 35){
$quotaHoldInfo->save(); $quotaHoldInfo->save();
if(count($quotaRecordInsertData) > 0) app()->make(MerchantQuotaRecordRepository::class)->insertAll($quotaRecordInsertData); if(count($quotaRecordInsertData) > 0) app()->make(MerchantQuotaRecordRepository::class)->insertAll($quotaRecordInsertData);
} }
if(count($bills) > 0){ if(count($bills) > 0){
app()->make(UserBillRepository::class)->insertAll($bills); app()->make(UserBillRepository::class)->insertAll($bills);
} }
$storeOrderStatusRepository->batchCreateLog($orderStatus); $storeOrderStatusRepository->batchCreateLog($orderStatus);
$storeOrderProductRepository->insertAll($orderProduct); $storeOrderProductRepository->insertAll($orderProduct);
event('order.create',compact('groupOrder')); event('order.create',compact('groupOrder'));
// debug("结束");
return $groupOrder; return $groupOrder;
}); });
foreach($merchantCartList as $merchantCart){ foreach($merchantCartList as $merchantCart){

View File

@ -2632,6 +2632,9 @@ class ProductRepository extends BaseRepository
}) })
->when(isset($search['brand_id']) && $search['brand_id'] !== '', function ($query) use ($search) { ->when(isset($search['brand_id']) && $search['brand_id'] !== '', function ($query) use ($search) {
$query->where('Product.brand_id', $search['brand_id']); $query->where('Product.brand_id', $search['brand_id']);
})
->when(isset($search['merchant_sub_type']) && $search['merchant_sub_type'] !== '', function ($query) use ($search) {
$query->where('Merchant.merchant_sub_type', $search['merchant_sub_type']);
}); });
// 查询内容 // 查询内容
$field = [ $field = [

View File

@ -27,10 +27,12 @@ class Wine extends BaseController{
* @return mixed * @return mixed
*/ */
public function merList(){ public function merList(){
$merchantSubType = $this->request->param('merchant_sub_type', 1);
// 商户类别0=普通商户1=酒道馆2=供应商 // 商户类别0=普通商户1=酒道馆2=供应商
$where['merchant_type'] = 1; $where['merchant_type'] = 1;
$where['mer_state'] = 1; $where['mer_state'] = 1;
$where['status'] = 1; $where['status'] = 1;
$where['merchant_sub_type'] = $merchantSubType ?? 1;
$list = app()->make(MerchantRepository::class) $list = app()->make(MerchantRepository::class)
->search($where) ->search($where)
@ -48,7 +50,7 @@ class Wine extends BaseController{
*/ */
public function goodsList(){ public function goodsList(){
// 参数获取 // 参数获取
$search = $this->request->params(['store_name','lat','lng','brand_id','store_category_id','mer_id']); $search = $this->request->params(['store_name','lat','lng','brand_id','store_category_id','mer_id',['merchant_sub_type', 1]]);
[$page, $limit] = $this->getPage(); [$page, $limit] = $this->getPage();
$data = app()->make(ProductRepository::class)->getWineList($search, $page, $limit); $data = app()->make(ProductRepository::class)->getWineList($search, $page, $limit);
@ -63,15 +65,10 @@ class Wine extends BaseController{
public function cartList(){ public function cartList(){
// 参数获取 // 参数获取
$uid = $this->request->uid(); $uid = $this->request->uid();
$list = (array)app()->make(StoreCartRepository::class) $params = $this->request->params(['merchant_sub_type', 1]);
->getSearch([ $params['uid'] = $uid;
'is_pay' => 0, // 列表信息获取
'is_del' => 0, $list = app()->make(StoreCartRepository::class)->wineSearchModel($params)
'is_new' => 0,
'is_fail' => 0,
'product_type' => 36,
'uid' => $uid,
])
->field(['cart_id','product_type','product_id','product_attr_unique','cart_num','is_batch','batch_num']) ->field(['cart_id','product_type','product_id','product_attr_unique','cart_num','is_batch','batch_num'])
->with([ ->with([
'productAttr' => function($query){ 'productAttr' => function($query){
@ -84,6 +81,7 @@ class Wine extends BaseController{
->select() ->select()
->toArray(); ->toArray();
return app('json')->success($list); return app('json')->success($list);
} }
/** /**
@ -95,15 +93,10 @@ class Wine extends BaseController{
public function cartIds(){ public function cartIds(){
// 参数获取 // 参数获取
$uid = $this->request->uid(); $uid = $this->request->uid();
$ids = (array)app()->make(StoreCartRepository::class) $params = $this->request->params(['merchant_sub_type', 1]);
->getSearch([ $params['uid'] = $uid;
'is_pay' => 0, // 信息获取
'is_del' => 0, $ids = app()->make(StoreCartRepository::class)->wineSearchModel($params)->column('cart_id');
'is_new' => 0,
'is_fail' => 0,
'product_type' => 36,
'uid' => $uid,
])->column('cart_id');
return app('json')->success($ids); return app('json')->success($ids);
} }

View File

@ -54,6 +54,10 @@ return [
'pay_success_order' => [\crmeb\listens\pay\OrderPaySuccessListen::class], 'pay_success_order' => [\crmeb\listens\pay\OrderPaySuccessListen::class],
'pay_success_presell' => [\crmeb\listens\pay\PresellPaySuccessListen::class], 'pay_success_presell' => [\crmeb\listens\pay\PresellPaySuccessListen::class],
'pay_success_meal' => [\crmeb\listens\pay\MealSuccessListen::class], 'pay_success_meal' => [\crmeb\listens\pay\MealSuccessListen::class],
// 订单创建成功
'order.create' => [
'app\listener\exchangeQuota\OrderCreateEvent'
],
// 订单支付成功事件触发 // 订单支付成功事件触发
'order.paySuccess' => [ 'order.paySuccess' => [
// 赠送酒卡额度 // 赠送酒卡额度

View File

@ -0,0 +1,188 @@
<?php
namespace app\listener\exchangeQuota;
use app\common\model\store\product\Product;
use app\common\model\user\ExchangeIntegralRecord;
use app\common\model\user\ExchangeQuotaRecord;
use app\common\model\user\User;
use app\common\repositories\store\order\StoreOrderRepository;
use app\common\repositories\user\ExchangeQuotaRepository;
use think\facade\Log;
class OrderCreateEvent{
private $groupOrder;
public function handle($params){
// Log::info('订单创建成功 - 开始: '.var_export($params,1));
$this->groupOrder = $params['groupOrder'] ?? [];
try{
// 根据订单类型进行对应的处理
switch((int)$this->groupOrder->activity_type){
// 酒道馆和小酒馆兑换订单
case 36:$this->quotaAndIntegralHandle();break;
}
}catch(\Exception $e){
$data = [
'uid' => $this->groupOrder->uid,
'group_order_id' => $this->groupOrder->group_order_id,
'msg' => $e->getMessage()
];
Log::info('订单创建成功 - 错误: '.var_export($data,1));
}
}
// 获取订单列表
private function getOrderList($field = '*', $orderProductField = '*'){
return app()->make(StoreOrderRepository::class)
->getSearch(['group_order_id' => $this->groupOrder->group_order_id])
->field($field)
->with([
'orderProduct' => function($query) use ($orderProductField){
return $query->field($orderProductField)->with(['product'=>function($sql){
$sql->field('product_id,wine_type')->bind(['wine_type']);
}]);
},
'merchant' => function($query){
return $query->field('mer_id,mer_name,merchant_type,merchant_sub_type,shop_mer_id');
},
])
->select()
->toArray();
}
// 酒道馆和小酒馆兑换订单生成前处理
private function quotaAndIntegralHandle(){
// 获取订单列表
$orderField = 'order_id,group_order_id,uid,mer_id,quota_integral,quota_integral_price,quota_integral_diff,quota_integral_diff_money';
$orderProductField = [
'uid',
'order_product_id',
'order_id',
'product_id',
'total_price',
'exchange_integral',
'exchange_integral_price',
'wine_diff_money',
'wine_diff_money_price',
'quota_integral',
'quota_integral_price',
'quota_integral_diff',
'quota_integral_diff_money'
];
$orderList = $this->getOrderList($orderField, $orderProductField);
// 用户持有酒水卡积分
$userInfo = User::where('uid', $this->groupOrder->uid)->findOrEmpty();
$holdQuotaInfo = app()->make(ExchangeQuotaRepository::class)->getHoldInfo($this->groupOrder->uid, 1);// 酒卡额度
$holdWineQuotaInfo = app()->make(ExchangeQuotaRepository::class)->getHoldInfo($this->groupOrder->uid, 3);// 封坛酒额度
// 循环处理
$exchangeIntegralRecordData = [];
$exchangeQuotaRecordData = [];
foreach($orderList as $orderInfo){
$merInfo = $orderInfo['merchant'] ?? [];
$quotaIntegralHoldInfo = app()->make(ExchangeQuotaRepository::class)->getHoldInfo($orderInfo['uid'], 5, $merInfo['shop_mer_id']);
// 循环订单商品
foreach($orderInfo['orderProduct'] as $productInfo){
if($merInfo['merchant_sub_type'] == 2 && $productInfo['quota_integral'] > 0){
// 小酒馆 减少惠民积分
$changeFront = (float)$quotaIntegralHoldInfo->surplus_quota;
$quotaIntegralHoldInfo->use_quota += (float)$productInfo['quota_integral'];// 总额度
$quotaIntegralHoldInfo->surplus_quota -= (float)$productInfo['quota_integral'];// 剩余额度
$exchangeQuotaRecordData[] = [
'uid' => $productInfo['uid'],
'product_id' => $productInfo['product_id'],
'order_id' => $productInfo['order_id'],
'order_product_id' => $productInfo['order_product_id'],
'change_type' => 0,
'change_quantity' => (float)$productInfo['quota_integral'],
'change_front' => $changeFront,
'change_after' => (float)$quotaIntegralHoldInfo->surplus_quota,
'mer_id' => $orderInfo['mer_id'],
'remark' => '兑换商品减少',
'quota_type' => 5,
'source' => 2,
];
}
else if($merInfo['merchant_sub_type'] != 2 && $productInfo['exchange_integral'] > 0){
// 酒道馆 减少酒水卡积分
$integralChangeFront = (float)$userInfo->exchange_integral;
$userInfo->exchange_integral -= (float)$productInfo['exchange_integral'];
$userInfo->exchange_integral = $userInfo->exchange_integral > 0 ? $userInfo->exchange_integral : 0;
$exchangeIntegralRecordData[] = [
'uid' => $productInfo['uid'],
'product_id' => $productInfo['product_id'],
'order_id' => $productInfo['order_id'],
'order_product_id' => $productInfo['order_product_id'],
'change_type' => 0,
'change_quantity' => (float)$productInfo['exchange_integral'],
'change_front' => $integralChangeFront,
'change_after' => (float)$userInfo->exchange_integral,
'remark' => "兑换商品减少",
];
// 酒卡额度处理 酒类型0=未知1=瓶装酒2=封坛酒
$wineType = (int)$productInfo['wine_type'] ?? 1;
if($wineType == 1){
// 瓶装酒额度变更
$changeFront = (float)$holdQuotaInfo->surplus_quota;
$holdQuotaInfo->use_quota += (float)$productInfo['total_price'];
$holdQuotaInfo->surplus_quota -= (float)$productInfo['total_price'];
$exchangeQuotaRecordData[] = [
'uid' => $productInfo['uid'],
'product_id' => $productInfo['product_id'],
'order_id' => $productInfo['order_id'],
'order_product_id' => $productInfo['order_product_id'],
'change_type' => 0,
'change_quantity' => (float)$productInfo['total_price'],
'change_front' => $changeFront,
'change_after' => (float)$quotaIntegralHoldInfo->surplus_quota,
'mer_id' => $orderInfo['mer_id'],
'remark' => '兑换商品减少',
'quota_type' => 1,
'source' => 2,
];
}
else if($wineType == 2){
// 封坛酒额度变更
$changeFront = (float)$holdWineQuotaInfo->surplus_quota;
$holdWineQuotaInfo->use_quota += (float)$productInfo['total_price'];
$holdWineQuotaInfo->surplus_quota -= (float)$productInfo['total_price'];
$exchangeQuotaRecordData[] = [
'uid' => $productInfo['uid'],
'product_id' => $productInfo['product_id'],
'order_id' => $productInfo['order_id'],
'order_product_id' => $productInfo['order_product_id'],
'change_type' => 0,
'change_quantity' => (float)$productInfo['total_price'],
'change_front' => $changeFront,
'change_after' => (float)$quotaIntegralHoldInfo->surplus_quota,
'mer_id' => $orderInfo['mer_id'],
'remark' => '兑换商品减少',
'quota_type' => 3,
'source' => 2,
];
}
}
}
$quotaIntegralHoldInfo->save();
}
// 保存用户修改
$userInfo->save();
$holdQuotaInfo->save();
$holdWineQuotaInfo->save();
if(count($exchangeIntegralRecordData) > 0) ExchangeIntegralRecord::insertAll($exchangeIntegralRecordData);
if(count($exchangeQuotaRecordData) > 0) ExchangeQuotaRecord::insertAll($exchangeQuotaRecordData);
return true;
}
}

View File

@ -28,61 +28,52 @@ class OrderPaySuccessEvent{
public function handle($groupOrder){ public function handle($groupOrder){
$groupOrder = $groupOrder['groupOrder']; $groupOrder = $groupOrder['groupOrder'];
// Log::info('支付成功 - 赠送酒卡额度 - 开始: '.var_export([
// 'uid' => $groupOrder->uid,
// 'group_order_id' => $groupOrder->group_order_id,
// 'activity_type' => $groupOrder->activity_type
// ],1));
try{ try{
// Log::info('支付成功 - 赠送酒卡额度 - 开始: '.var_export([ // 根据订单类型进行对应的处理
// 'uid' => $groupOrder->uid, switch((int)$groupOrder->activity_type){
// 'group_order_id' => $groupOrder->group_order_id,
// 'activity_type' => $groupOrder->activity_type
// ],1));
if($groupOrder->activity_type == 30){
// 在线支付订单 // 在线支付订单
$this->giveExchangeIntegral($groupOrder); case 30:$this->giveExchangeIntegral($groupOrder);break;
}
else if($groupOrder->activity_type == 31){
// 兑换商品补差价处理 // 兑换商品补差价处理
$this->exchangeGoodsHandle($groupOrder); case 31:$this->exchangeGoodsHandle($groupOrder);break;
}
else if($groupOrder->activity_type == 32){
// 代理入驻支付 // 代理入驻支付
$this->agentPaySuccessHandle($groupOrder); case 32:$this->agentPaySuccessHandle($groupOrder);break;
}
else if($groupOrder->activity_type == 33){
// 加入活动支付成功 // 加入活动支付成功
$this->joinActivitySuccessHandle($groupOrder); case 33:$this->joinActivitySuccessHandle($groupOrder);break;
}
else if($groupOrder->activity_type == 34){
// 邀请码激活 // 邀请码激活
$this->inviteCodeActivation($groupOrder); case 34:$this->inviteCodeActivation($groupOrder);break;
}
else if($groupOrder->activity_type == 35){
// 进货订单 // 进货订单
case 35:break;
} // 酒道馆和小酒馆兑换订单
else if($groupOrder->activity_type == 37){ case 36:break;
// 共创股东加入 // 共创股东加入
foreach($groupOrder->orderList as $orderInfo){ case 37:
$id = app()->make(MerchantShareholderRepository::class)->getSearch(['order_id'=>(int)$orderInfo->order_id])->value('id'); foreach($groupOrder->orderList as $orderInfo){
if($id > 0) app()->make(MerchantShareholderRepository::class)->joinSuccess($id); $id = app()->make(MerchantShareholderRepository::class)->getSearch(['order_id'=>(int)$orderInfo->order_id])->value('id');
} if($id > 0) app()->make(MerchantShareholderRepository::class)->joinSuccess($id);
} }
else if($groupOrder->activity_type == 38){ break;
// 配送商缴费支付成功 // 配送商缴费支付成功
foreach($groupOrder->orderList as $orderInfo){ case 38:
AgentDelivery::update(['status' => 1],['order_id' => (int)$orderInfo->order_id]); foreach($groupOrder->orderList as $orderInfo){
} AgentDelivery::update(['status' => 1],['order_id' => (int)$orderInfo->order_id]);
} }
else{ break;
// 其他订单 // 其他订单
$this->orderPaySuccessHandle($groupOrder); default:
// 订单支付成功 触发购买商品升级 $this->orderPaySuccessHandle($groupOrder);
Queue::push(UserBrokerageLevelJob::class,[ // 订单支付成功 触发购买商品升级
'uid' => $groupOrder->uid, Queue::push(UserBrokerageLevelJob::class,[
'type' => 'many_goods', 'uid' => $groupOrder->uid,
'inc' => 0, 'type' => 'many_goods',
'group_order_id' => $groupOrder->group_order_id 'inc' => 0,
]); 'group_order_id' => $groupOrder->group_order_id
]);
} }
}catch(\Exception $e){ }catch(\Exception $e){
$data = [ $data = [
'uid' => $groupOrder->uid, 'uid' => $groupOrder->uid,