多个仓库库存释放-简单算法

概述


在做电商项目的时候,会涉及到库存扣减的问题,稍微复杂的情况是,多仓库库存扣减,比如说:
仓库warehouse1有4件商品,warehouse2有3件商品,这个时候用户需要买7件商品,这样无论哪个仓库都不够扣减,
这种情况下,会使用多仓库库存扣减的逻辑,warehouse1和warehouse2两个仓库的库存之和是3+4=7,是足够扣减6件的。

好了,当使用多仓扣减的时候,用户突然不想买6件了,只想买3件,这个时候需要释放3件库存,这里也需要一个简单的多仓库库存释放的算法.


简单代码


public class StockHold {

    private Long holdId;

    /**
     * 对应的库存id 
     */
    private Long stockId;

    /**
     * 占用的库存 数量
     */
    private Integer holdNum;

    public Long getHoldId() {
        return holdId;
    }

    public void setHoldId(Long holdId) {
        this.holdId = holdId;
    }

    public Long getStockId() {
        return stockId;
    }

    public void setStockId(Long stockId) {
        this.stockId = stockId;
    }

    public Integer getHoldNum() {
        return holdNum;
    }

    public void setHoldNum(Integer holdNum) {
        this.holdNum = holdNum;
    }

}

public class InvReleaseTest {

    public static void main(String[] args) {
        List<StockHold> holdList = new ArrayList<>();
        StockHold hold1 = new StockHold();
        hold1.setHoldId(1L);
        hold1.setStockId(1L);
        hold1.setHoldNum(4);

        StockHold hold2 = new StockHold();
        hold2.setHoldId(2L);
        hold2.setStockId(2L);
        hold2.setHoldNum(2);


        holdList.add(hold1);
        holdList.add(hold2);

        LinkedHashMap<Long, Integer> holdIdNumMap = new LinkedHashMap<>();
        int needReleaseSumNum = 3;

        for (StockHold hold : holdList) {
            if (needReleaseSumNum <= 0) {
                break;
            }

            int releaseNum = Math.min(needReleaseSumNum,hold.getHoldNum()); 
            needReleaseSumNum -= releaseNum;

            holdIdNumMap.put(hold.getHoldId(), releaseNum);
        }

        System.out.println(JSON.toJSONString(holdIdNumMap));
    }
}

释放的逻辑需要考虑哪个仓库足够释放,如果两个仓库都不足够释放,还得考虑两个仓一起释放库存,上面的逻辑也考虑了这一点.
StockHold表示用户原来的库存占用情况.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值