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

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

View File

@ -13,6 +13,7 @@ use app\common\repositories\BaseRepository;
use app\common\repositories\store\product\ProductRepository;
use app\common\repositories\system\merchant\FinancialRecordRepository;
use app\common\repositories\system\merchant\MerchantRepository;
use app\common\repositories\user\IntegralRepository;
use app\common\repositories\user\UserBillRepository;
use app\common\repositories\user\UserRepository;
use crmeb\jobs\SendSmsJob;
@ -29,6 +30,7 @@ use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\Log;
use think\facade\Queue;
use think\facade\Route;
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) {
$make = app()->make(UserRepository::class);
$make->update($refundOrder->uid, ['integral' => Db::raw('integral+' . $refundOrder->integral)]);
$userIntegral = $make->get($refundOrder->uid)->integral;
$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', [
'link_id' => $refundOrder->order_id,
'status' => 1,
'title' => '订单退款',
'number' => $refundOrder->integral,
'mark' => '订单退款,返还' . intval($refundOrder->integral) . '积分',
'mark' => $mark,
'balance' => $userIntegral
]);
$make1->incBill($refundOrder->uid, 'mer_integral', 'refund', [
@ -1333,7 +1353,7 @@ class StoreRefundOrderRepository extends BaseRepository
'status' => 1,
'title' => '订单退款',
'number' => $refundOrder->integral,
'mark' => '订单退款,返还' . intval($refundOrder->integral) . '积分',
'mark' => $mark,
'balance' => $userIntegral,
'mer_id' => $refundOrder->mer_id
]);