订单拆分(最优解)

订单拆分

背景

跨境业务避免订单金额超过指定上限, 保证快速通关, 将货物寄达至买家手中, 需要进行订单拆分;
如订单金额为999, 上限金额为100, 则需要拆分为9单100元, 1单99元的订单。

场景

拆分规则: 拆分上限是100

场景1:
订单A001, 有3种商品

订单编号 商品sku 售价 数量
A001 sku01 40 3
A001 sku02 20 2
A001 sku03 5 1

最优方案:
拆分成2单
sku01X2+sku02X1, sku01X1+sku02X1+sku03X1
在这里插入图片描述

场景2:
订单A002, 有3种商品

订单编号 商品sku 售价 数量
A002 sku01 50 2
A002 sku02 60 1
A002 sku03 70 1

最优方案:
拆分成3单
sku01X2, sku02X1, sku03X1
在这里插入图片描述

场景3:
订单A003, 有1种商品

订单编号 商品sku 售价 数量
A003 sku01 20 7

最优方案:
拆分成2单
sku01X5, sku01X2
在这里插入图片描述

package com.mabang.sst;

import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.springframework.util.CollectionUtils;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class OrderSplit {
   

    public static void main(String[] args) {
   
        List<OrderItemInfoVo> orderItemList = getParam();
        List<OptimalSplitOrderVo> optimalSplitOrderVos = optimalSplitOrder(100003, 20230526, orderItemList, 100.0);
        for (int i = 0; i < optimalSplitOrderVos.size(); i++) {
   
            System.out.println("第" + (i + 1) + "单商品信息:" + JSONObject.toJSONString(optimalSplitOrderVos.get(i).getOrderItemInfoVoList()));
        }
    }

    private static List<OrderItemInfoVo> getParam() {
   
        List<OrderItemInfoVo> aList = Lists.newArrayList();
        OrderItemInfoVo a1 = new OrderItemInfoVo()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值