1、文件:app/services/order/StoreOrderRefundServices.php
2、方法:
regressionIntegral3、复制方法:直接替换:
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守护进程

 
                         
                         
                     
                         
                     
                     
                     
                     
                     
                             
                                    
 
                     
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                         
                                     
                 
                         
                     
                 
         
         
             
         
         
         
		