背景
跨境业务避免订单金额超过指定上限, 保证快速通关, 将货物寄达至买家手中, 需要进行订单拆分;
如订单金额为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()