添加:退款后 使用的抵扣积分原路退还(商户积分退商户积分、平台积分退平台积分)

This commit is contained in:
wuhui_zzw 2023-11-13 16:26:01 +08:00
parent e0ddbe1a48
commit d05d5af8ca
2 changed files with 35 additions and 11 deletions

View File

@ -806,20 +806,24 @@ class StoreOrderCreateRepository extends StoreOrderRepository
// 抵扣需要的积分 // 抵扣需要的积分
$productIntegral = (int)ceil(bcdiv($productIntegralPrice, $integralMoney, 3)); $productIntegral = (int)ceil(bcdiv($productIntegralPrice, $integralMoney, 3));
if ($productIntegral > 0 && ($productIntegral <= $integralInfo['mer_integral'] || $productIntegral <= $integralInfo['convert_integral'])) { if ($productIntegral > 0 && ($productIntegral <= $integralInfo['mer_integral'] || $productIntegral <= $integralInfo['convert_integral'])) {
// 默认使用商户积分抵扣 // 判断:使用的积分类型
$integralInfo['mer_integral'] = (float)bcsub($integralInfo['mer_integral'], $productIntegral, 2); if($useMerIntegral){
$integralInfo['use_integral_type'] = 'mer_integral'; // 使用商户积分抵扣
// 商户积分不足 使用平台积分抵扣 $integralInfo['mer_integral'] = (float)bcsub($integralInfo['mer_integral'], $productIntegral, 2);
if($integralInfo['mer_integral'] < 0) { $integralInfo['use_integral_type'] = 'mer_integral';
// 将商户积分加回来 // 判断:积分不足 不使用积分抵扣
$integralInfo['mer_integral'] = bcadd($integralInfo['mer_integral'], $productIntegral, 2); if($integralInfo['mer_integral'] < 0) continue;
}else if($usePlatformIntegral) {
// 使用平台积分抵扣 // 使用平台积分抵扣
$integralInfo['convert_integral'] = bcsub($integralInfo['convert_integral'], $productIntegral, 2);// 减少转换后的积分 $integralInfo['convert_integral'] = bcsub($integralInfo['convert_integral'], $productIntegral, 2);// 减少转换后的积分
$productIntegral = bcmul($productIntegral, $integralInfo['convert_rate'],2);// 刷新使用积分(使用平台积分,需要根据比例刷新平台积分减少数量) $productIntegral = bcmul($productIntegral, $integralInfo['convert_rate'],2);// 刷新使用积分(使用平台积分,需要根据比例刷新平台积分减少数量)
$integralInfo['integral'] = bcsub($integralInfo['integral'], $productIntegral, 2);// 减少未转化的平台积分 $integralInfo['integral'] = bcsub($integralInfo['integral'], $productIntegral, 2);// 减少未转化的平台积分
$integralInfo['use_integral_type'] = 'platform_integral'; $integralInfo['use_integral_type'] = 'platform_integral';
// 判断:积分不足 不使用积分抵扣
if($integralInfo['convert_integral'] < 0) continue;
} }
// 使用多少积分抵扣了多少金额 // 使用多少积分抵扣了多少金额
$cart['integral'] = [ $cart['integral'] = [
'use' => $productIntegral, 'use' => $productIntegral,
@ -1338,7 +1342,7 @@ class StoreOrderCreateRepository extends StoreOrderRepository
'type' => 'deduction', 'type' => 'deduction',
'number' => $order['use_mer_integral'], 'number' => $order['use_mer_integral'],
'balance' => $user->integral, 'balance' => $user->integral,
'mark' => '购买商品使用'.$order['use_mer_integral'].'平台积分抵扣'.floatval($order['use_mer_integral_price']).'元', 'mark' => '购买商品使用'.$order['use_mer_integral'].'商户积分抵扣'.floatval($order['use_mer_integral_price']).'元',
'mer_id' => 0, 'mer_id' => 0,
'status' => 1 'status' => 1
]; ];
@ -1352,7 +1356,7 @@ class StoreOrderCreateRepository extends StoreOrderRepository
'type' => 'deduction', 'type' => 'deduction',
'number' => $order['use_mer_integral'], 'number' => $order['use_mer_integral'],
'balance' => $user->integral, 'balance' => $user->integral,
'mark' => '购买商品使用'.$order['use_mer_integral'].'平台积分抵扣'.floatval($order['use_mer_integral_price']).'元', 'mark' => '购买商品使用'.$order['use_mer_integral'].'商户积分抵扣'.floatval($order['use_mer_integral_price']).'元',
'mer_id' => $order['mer_id'], 'mer_id' => $order['mer_id'],
'status' => 1 'status' => 1
]; ];

View File

@ -13,6 +13,7 @@ use app\common\repositories\BaseRepository;
use app\common\repositories\store\product\ProductRepository; use app\common\repositories\store\product\ProductRepository;
use app\common\repositories\system\merchant\FinancialRecordRepository; use app\common\repositories\system\merchant\FinancialRecordRepository;
use app\common\repositories\system\merchant\MerchantRepository; use app\common\repositories\system\merchant\MerchantRepository;
use app\common\repositories\user\IntegralRepository;
use app\common\repositories\user\UserBillRepository; use app\common\repositories\user\UserBillRepository;
use app\common\repositories\user\UserRepository; use app\common\repositories\user\UserRepository;
use crmeb\jobs\SendSmsJob; use crmeb\jobs\SendSmsJob;
@ -29,6 +30,7 @@ use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException; use think\db\exception\ModelNotFoundException;
use think\exception\ValidateException; use think\exception\ValidateException;
use think\facade\Db; use think\facade\Db;
use think\facade\Log;
use think\facade\Queue; use think\facade\Queue;
use think\facade\Route; use think\facade\Route;
use think\Model; use think\Model;
@ -1315,17 +1317,35 @@ class StoreRefundOrderRepository extends BaseRepository
} }
//退回积分 //退回积分
// Log::info('订单退款 - 退回积分:'.var_export([
// '应退积分' => $refundOrder->integral,
// '订单id' => $refundOrder->refund_order_id,
// '商户id' => $refundOrder->mer_id,
// $refundOrder->order
// ],1));
if ($refundOrder->integral > 0) { if ($refundOrder->integral > 0) {
$make = app()->make(UserRepository::class); $make = app()->make(UserRepository::class);
$make->update($refundOrder->uid, ['integral' => Db::raw('integral+' . $refundOrder->integral)]); $make->update($refundOrder->uid, ['integral' => Db::raw('integral+' . $refundOrder->integral)]);
$userIntegral = $make->get($refundOrder->uid)->integral; $userIntegral = $make->get($refundOrder->uid)->integral;
$make1 = app()->make(UserBillRepository::class); $make1 = app()->make(UserBillRepository::class);
// 判断:根据订单抵扣使用积分 退还平台积分或者商户积分
if((float)$refundOrder->order->use_mer_integral > 0){
// 使用的商户积分
app()->make(IntegralRepository::class)->changeIntegral((int)$refundOrder->uid,(int)$refundOrder->mer_id,(float)sprintf('%.2f',$refundOrder->integral));
$mark = '订单退款,返还' . intval($refundOrder->integral) . '商户积分';
}else{
// 使用的平台积分
app()->make(IntegralRepository::class)->changeIntegral((int)$refundOrder->uid,(int)0,(float)sprintf('%.2f',$refundOrder->integral));
$mark = '订单退款,返还' . intval($refundOrder->integral) . '平台积分';
}
$make1->incBill($refundOrder->uid, 'integral', 'refund', [ $make1->incBill($refundOrder->uid, 'integral', 'refund', [
'link_id' => $refundOrder->order_id, 'link_id' => $refundOrder->order_id,
'status' => 1, 'status' => 1,
'title' => '订单退款', 'title' => '订单退款',
'number' => $refundOrder->integral, 'number' => $refundOrder->integral,
'mark' => '订单退款,返还' . intval($refundOrder->integral) . '积分', 'mark' => $mark,
'balance' => $userIntegral 'balance' => $userIntegral
]); ]);
$make1->incBill($refundOrder->uid, 'mer_integral', 'refund', [ $make1->incBill($refundOrder->uid, 'mer_integral', 'refund', [
@ -1333,7 +1353,7 @@ class StoreRefundOrderRepository extends BaseRepository
'status' => 1, 'status' => 1,
'title' => '订单退款', 'title' => '订单退款',
'number' => $refundOrder->integral, 'number' => $refundOrder->integral,
'mark' => '订单退款,返还' . intval($refundOrder->integral) . '积分', 'mark' => $mark,
'balance' => $userIntegral, 'balance' => $userIntegral,
'mer_id' => $refundOrder->mer_id 'mer_id' => $refundOrder->mer_id
]); ]);