1、文件:app/services/order/StoreOrderRefundServices.php
2、方法:
regressionIntegral
3、复制方法:直接替换:
public function regressionIntegral($order)
{
/** @var UserServices $userServices */
$userServices = app()->make(UserServices::class);
$userInfo = $userServices->get($order['uid'], ['integral']);
if (!$userInfo) {
$order->back_integral = $order->use_integral;
return [$order, 0];
}
$integral = $userInfo['integral'];
if ($order['status'] == -2 || $order['is_del']) {
return [$order, 0];
}
$res1 = $res2 = $res3 = $res4 = true;
//订单赠送积分
/** @var UserBillServices $userBillServices */
$userBillServices = app()->make(UserBillServices::class);
$where = [
'uid' => $order['uid'],
'category' => 'integral',
'type' => 'gain',
'link_id' => $order['id']
];
$give_integral = $userBillServices->sum($where, 'number');
if ((int)$order['refund_status'] != 2 && $order['back_integral'] >= $order['use_integral']) {
return [$order, 0];
}
//子订单退款 再次查询主订单
if (!$give_integral && $order['pid']) {
$where['link_id'] = $order['pid'];
$give_integral = $userBillServices->sum($where, 'number');
if ($give_integral) {
$p_order = $this->storeOrderServices->get($order['pid']);
$give_integral = bcmul((string)$give_integral, (string)bcdiv((string)$order['pay_price'], (string)$p_order['pay_price'], 4), 0);
}
}
if ($give_integral) {
//判断订单是否已经回退积分
$count = $userBillServices->count(['category' => 'integral', 'type' => 'deduction', 'link_id' => $order['id']]);
if (!$count) {
if ($integral > $give_integral) {
$integral = bcsub((string)$integral, (string)$give_integral);
} else {
$integral = 0;
}
//记录赠送积分收回
$res1 = $userBillServices->income('integral_refund', $order['uid'], $give_integral, $integral, $order['id']);
}
}
//返还下单使用积分
$use_integral = $order['use_integral'];
if ($use_integral > 0) {
$integral = bcadd((string)$integral, (string)$use_integral);
//记录下单使用积分还回
$res2 = $userBillServices->income('pay_product_integral_back', $order['uid'], $use_integral, $integral, $order['id']);
}
$res3 = $userServices->update($order['uid'], ['integral' => $integral]);
if (!($res1 && $res2 && $res3)) {
throw new ValidateException('回退积分增加失败');
}
if ($use_integral > $give_integral) {
$order->back_integral = bcsub($use_integral, $give_integral, 2);
}
return [$order, bcsub((string)$integral, (string)$userInfo['integral'], 0)];
}
4、改完要重启swoole守护进程
{{item.user_info.nickname ? item.user_info.nickname : item.user_name}}
作者 管理员 企业
{{itemf.name}}
{{itemc.user_info.nickname}}
{{itemc.user_name}}
回复 {{itemc.comment_user_info.nickname}}
{{itemf.name}}