退款算法设计

  • 主订单:154.70;从订单:25;服务:3次;
    第一次退款金额41.93,主订单,从订单都要退若干金额,占有一定的比例;
    第二次退款金额41.93,主订单,从订单都要退若干金额,占有一定的比例;
    第三次退款金额59.90,主订单,从订单都要退若干金额,占有一定的比例;

  • 主订单:154.70;从订单:25;服务:2次;
    第一次退款金额41.93,主订单,从订单都要退若干金额,占有一定的比例;
    第二次退款金额41.93,主订单,从订单都要退若干金额,占有一定的比例;

  • 主订单:154.70;从订单1:25;从订单2:25;服务:3次;
    第一次退款金额41.93,主订单,从订单1,从订单2都要退若干金额,占有一定的比例;
    第二次退款金额41.93,主订单,从订单1,从订单2都要退若干金额,占有一定的比例;
    第三次退款金额68.23,主订单,从订单1,从订单2都要退若干金额,占有一定的比例;

上面只是举例几种情况?主从订单可以多个,服务次数也会多个,退款次数1或者多次。
如何设计比较好的退款算法?主从订单都退款若干金额,占有一定的比例。请赐教。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

设计一个合理的退款算法涉及到多个因素,包括主订单和从订单的金额分配、服务次数、退款次数等。下面是一个简单的思路,你可以根据具体业务需求进行调整:

  1. 确定退款比例: 首先,确定主订单和从订单的退款比例。这可以根据具体业务需求和策略来决定。例如,主订单占总金额的70%,从订单按比例分配剩下的30%。

  2. 计算每次服务的退款金额: 将每次服务的退款金额按照主订单和从订单的比例分配。根据你的例子,可以按照主订单70%和从订单30%的比例分配。

  3. 处理多次服务: 如果有多次服务,每次服务的退款金额可以根据相同的比例分配。例如,第一次服务退款总金额的70%给主订单,30%给从订单。

  4. 处理多次退款: 如果有多次退款,每次退款的金额可以按照相同的比例分配。例如,第一次退款总金额的70%给主订单,30%给从订单。

  5. 处理多个从订单: 如果有多个从订单,可以按照相同的比例分配主订单和各个从订单的退款金额。

  6. 灵活性和可配置性: 设计一个灵活的算法,使得退款比例和分配规则可以根据业务需求进行配置。

以下是一个简化的代码示例:

// 计算退款金额的函数
function calculateRefundAmount($totalAmount, $mainOrderRatio, $subOrderRatios)
{
    $mainOrderRefund = $totalAmount * $mainOrderRatio;

    $subOrderRefunds = [];
    foreach ($subOrderRatios as $subOrderRatio) {
        $subOrderRefunds[] = $totalAmount * $subOrderRatio;
    }

    return [
        'mainOrder' => $mainOrderRefund,
        'subOrders' => $subOrderRefunds,
    ];
}

// 使用示例
$totalAmount = 154.70;
$mainOrderRatio = 0.7;
$subOrderRatios = [0.3, 0.3];

$refundAmounts = calculateRefundAmount($totalAmount, $mainOrderRatio, $subOrderRatios);

// 输出结果
print_r($refundAmounts);

请注意,这只是一个简单的示例,实际情况可能更加复杂,需要根据具体的业务需求和规则进行进一步的调整。确保算法的灵活性,以便应对不同的场景和策略。

1年前 评论
zyimm12 1年前
讨论数量: 10

我理解的是,每个订单有一个实际支付金额,主订单、从订单实际金额默认都是支付金额,然后你退款是一个单独的订单,再看有多少主从就按比例扣除更新各个订单的实际金额

1年前 评论

第一、第二次都是按照比例向下取整退款,最后一次,用总金额减去已退款金额,这样整个退款金额加起来就对了

1年前 评论
转打瞎比比 (楼主) 1年前
Adachi 1年前
总金额 = 主订单金额+从订单总金额
主订单比例  = 主订单金额/总金额;//主从订单金额差距大,主订单比例直接向下取整,然后用各个从单金额占比来分剩余比例  (剩余比例 = 1-主订单比例;从单1占比 = 剩余比例*(从单1金额/从单总金额)...)
从订单比例  = 从订单金额/总金额;
主订单退款金额  =  退款金额*主订单比例  
(从订单退款金额1 = 退款金额*从订单比例) ...
从订单退款金额N = 退款金额 - (主订单退款金额+从订单退款金额1...
1年前 评论

我个人理解是不是有点像:等比消费,反向一下 :see_no_evil:

1年前 评论

1.你下单成功后就要起一个队列,把每个商品的实际价格都算好,退款的时候直接根据这个价格去退。注意运费也要平摊,如果是组合支付的话还得对每种支付类型去平摊金额。 2.计算时每件商品的比例进行平摊,经常会出现平摊不均,最后一分钱就叠加到最后一个商品里面去。

1年前 评论

首先订单总额是由所有商品x数量总的计算而来,但是由于现在各种优惠券之类的,不过这个没关系, 因为最后下单的时候,应该将所有产品实际价格算出来。 这样子退款就有两种退款

  1. 一种是根据产品来退,退多少就按照实际的去退即可。
  2. 另一种就是补偿式退款,应该是双方协商退款。

你的需求看起来应该直接按照商品去退就行,退款的时候我建议加锁去执行

1年前 评论

设计一个合理的退款算法涉及到多个因素,包括主订单和从订单的金额分配、服务次数、退款次数等。下面是一个简单的思路,你可以根据具体业务需求进行调整:

  1. 确定退款比例: 首先,确定主订单和从订单的退款比例。这可以根据具体业务需求和策略来决定。例如,主订单占总金额的70%,从订单按比例分配剩下的30%。

  2. 计算每次服务的退款金额: 将每次服务的退款金额按照主订单和从订单的比例分配。根据你的例子,可以按照主订单70%和从订单30%的比例分配。

  3. 处理多次服务: 如果有多次服务,每次服务的退款金额可以根据相同的比例分配。例如,第一次服务退款总金额的70%给主订单,30%给从订单。

  4. 处理多次退款: 如果有多次退款,每次退款的金额可以按照相同的比例分配。例如,第一次退款总金额的70%给主订单,30%给从订单。

  5. 处理多个从订单: 如果有多个从订单,可以按照相同的比例分配主订单和各个从订单的退款金额。

  6. 灵活性和可配置性: 设计一个灵活的算法,使得退款比例和分配规则可以根据业务需求进行配置。

以下是一个简化的代码示例:

// 计算退款金额的函数
function calculateRefundAmount($totalAmount, $mainOrderRatio, $subOrderRatios)
{
    $mainOrderRefund = $totalAmount * $mainOrderRatio;

    $subOrderRefunds = [];
    foreach ($subOrderRatios as $subOrderRatio) {
        $subOrderRefunds[] = $totalAmount * $subOrderRatio;
    }

    return [
        'mainOrder' => $mainOrderRefund,
        'subOrders' => $subOrderRefunds,
    ];
}

// 使用示例
$totalAmount = 154.70;
$mainOrderRatio = 0.7;
$subOrderRatios = [0.3, 0.3];

$refundAmounts = calculateRefundAmount($totalAmount, $mainOrderRatio, $subOrderRatios);

// 输出结果
print_r($refundAmounts);

请注意,这只是一个简单的示例,实际情况可能更加复杂,需要根据具体的业务需求和规则进行进一步的调整。确保算法的灵活性,以便应对不同的场景和策略。

1年前 评论
zyimm12 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!