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)