1.7 库存管理

CRUD

tock库存CRUD:低于指定库存高亮显示,高级查询提供阈值查询。

  • ProductStockMapper映射Product的id、name、brandName、sn,不需要更新产品和仓库id
  • 只有一个list页面,提供关键字、仓库、商品、库存阈值的高级查询

高级查询

  • 新建查询对象:ProductStockQueryObject
  • 在下拉框提交数据:后台QO准备数据,Map集合提供属性,页面获取
  • 判断商品存在要根据仓库编号和产品编号查询
selectByProductIdAndDepotId
  • 入库出库操作的核心单位都是明细,所有明细都是同一个事务,任何一个事务失败,都要回滚
涉及仓库,需要操作入库/出库单bill
涉及库存数量,需要操作productStockMapper

审核入库单

  • 目标:把商品明细放入库存报表
  • 操作:获取明细,迭代明细
 List<StockIncomeBillItem> items = bill.getItems();
 for (StockIncomeBillItem item : items) {
}
  • 通过此明细的商品id和订单的仓库id获取库存信息
ProductStock productStock = productStockMapper.selectByProductIdAndDepotId(
item.getProduct().getId(), bill.getDepot().getId());
  • 修改库存:设置库存量、成本价、总金额
if(productStock!= null)
  • 新增库存:设置库存量、成本价、总金额、商品id、仓库id

审核出库单

  • 查看商品是否可售,修改库存数量
  • 关联客户管理client,成本价costprice改售价salePrice
  • 判断该商品是否存在,不存在——抛异常
if(productStock== null){
      throw new LogicException("抱歉,["+item.getProduct().getName()+"]不存在");
   }
  • 判断商品数量是否足够,不够——抛异常
if(item.getNumber().compareTo(productStock.getStoreNumber())>0){
  throw new LogicException("抱歉,["+item.getProduct().getName()+
    "]<br/>的库存量["+productStock.getStoreNumber()+"]小于["+item.getNumber()+"]")
}
  • 正常出库,修改库存数量,更新库存
productStock.setStoreNumber(productStock.getStoreNumber().subtract(item.getNumber()));
productStock.setAmount(productStock.getPrice().multiply(productStock.getStoreNumber().
        setScale(BigDecimal.ROUND_HALF_UP,2)));
productStockMapper.updateByPrimaryKey(productStock);

BigDecimal常用方法

  • 加:x.add( y )
  • 减:x.subtract ( y )
  • 乘:x.multiply( y )
  • 除:x.divide( y )
  • 四舍五入设置精度:.setScale(BigDecimal.ROUND_HALF_UP,2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值