Commit effd2fcf authored by 刘小敏's avatar 刘小敏

积分+余额混合支付逻辑优化;

parent e9a63461
......@@ -1164,7 +1164,17 @@ class OrderCreate
// 重新获取订单
$order = Order::with('items')->where('id', $order->id)->find();
// 计算需要余额支付的金额
// 如果用户选择了积分抵扣,余额支付金额 = 积分抵扣后的剩余金额
// 如果用户没有选择积分抵扣,余额支付金额 = 用户传入的金额
$pay_money = floatval($result['money']);
// 如果使用了积分抵扣,余额支付应该支付积分抵扣后的剩余金额
if ($this->is_deduct_score == 1 && $this->orderData['pay_fee'] > 0) {
// 积分抵扣后剩余的金额需要用余额支付
$pay_money = $this->orderData['pay_fee'];
}
if ($order->status == Order::STATUS_UNPAID && $pay_money > 0) {
// 如果订单未支付,并且使用了余额混合支付 (支付失败,不影响订单状态)
$order = Db::transaction(function () use ($order, $pay_money) {
......
......@@ -10,6 +10,7 @@ use app\admin\model\shopro\order\Order as OrderModel;
use app\admin\model\shopro\order\OrderItem as OrderItemModel;
use app\admin\model\shopro\order\Action as OrderActionModel;
use addons\shopro\service\order\OrderRefund;
use addons\shopro\service\pay\PayOper;
use addons\shopro\library\Operator;
class Aftersale extends Common
......@@ -241,12 +242,13 @@ class Aftersale extends Common
$items = $order->items;
$items = array_column($items, null, 'id');
// 当前订单已退款总金额
$refunded_money = array_sum(array_column($items, 'refund_fee'));
// 剩余可退款金额
$refund_surplus_money = bcsub($order->pay_fee, (string)$refunded_money, 2);
// 如果退款金额大于订单支付总金额
if (bccomp((string)$refund_money, $refund_surplus_money, 2) === 1) {
// 使用与 OrderRefund 相同的逻辑计算剩余可退款金额(不包含积分)
$payOper = new PayOper($order->user_id);
$pays = $payOper->getCanRefundPays($order->id);
$remain_max_refund_money = $payOper->getRemainRefundMoney($pays);
// 如果退款金额大于剩余可退款金额
if (bccomp((string)$refund_money, $remain_max_refund_money, 2) === 1) {
$this->error('退款总金额不能大于实际支付金额');
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment