Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManagerImpl.java =================================================================== diff -u -r17043 -r17073 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManagerImpl.java (.../GoodsStockManagerImpl.java) (revision 17043) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsstock/service/GoodsStockManagerImpl.java (.../GoodsStockManagerImpl.java) (revision 17073) @@ -80,6 +80,7 @@ } public synchronized List saveOrUpdateGoodsStock(List goodsStockList, String mode){ + List retInfo = goodsStockList; if(!MODE_INSTOCK.equals(mode) && !MODE_OUTSTOCK.equals(mode)){ throw new RuntimeException("参数mode="+mode+"值非法"); } @@ -88,11 +89,14 @@ } //1.如果为出库,校验库存是否够扣减 if(MODE_OUTSTOCK.equals(mode)){ - doOutStock(goodsStockList); + List outInfo = doOutStock(goodsStockList); + if(CollectionUtils.isNotEmpty(outInfo)){ + retInfo = outInfo; + } } else if(MODE_INSTOCK.equals(mode)){ doInStock(goodsStockList); } - return goodsStockList; + return retInfo; } @Override public List saveOrUpdateGoodsStock(GoodsStock gs,String mode){ @@ -161,10 +165,12 @@ /** * 出库扣减库存 * @param goodsStockList + * @return 如果是材料,返回材料扣减库存的信息。包括材料定义id,价格及扣减的数量 */ - private void doOutStock(List goodsStockList) { + private List doOutStock(List goodsStockList) { + List outStockInfo = new ArrayList<>(); if(CollectionUtils.isEmpty(goodsStockList)){ - return; + return outStockInfo; } Map idTousseDefinitionMap = getIDTousseDefinitionMap(goodsStockList); @@ -238,10 +244,15 @@ } for(GoodsStock goodsStock : list){ if(goodsStock.getAmount() >= needReturnAmount){ + addOutStockInfo(outStockInfo,goodsStock.getMaterialDefinitionId(), + goodsStock.getPrice(),needReturnAmount); goodsStock.setAmount(goodsStock.getAmount() - needReturnAmount); addIfNotFind(toUpdateGoodsStock,goodsStock); + break; } + addOutStockInfo(outStockInfo,goodsStock.getMaterialDefinitionId(), + goodsStock.getPrice(),goodsStock.getAmount()); needReturnAmount -= goodsStock.getAmount(); goodsStock.setAmount(0); addIfNotFind(toUpdateGoodsStock,goodsStock); @@ -256,7 +267,25 @@ objectDao.saveOrUpdate(gs); } } + return outStockInfo; } + private void addOutStockInfo(List outStockInfo,Long materialDefId,Double price,Integer amount){ + if(outStockInfo != null && materialDefId != null){ + GoodsStock find = CollectionUtils.find(outStockInfo, new Predicate(){ + @Override + public boolean evaluate(GoodsStock object) { + return object != null && materialDefId.equals(object.getMaterialDefinitionId()) + && MathTools.valueEquals(price, object.getPrice()); + }}); + if(find == null){ + find = new GoodsStock(); + find.setMaterialDefinitionId(materialDefId); + find.setPrice(price); + outStockInfo.add(find); + } + find.setAmount(MathTools.add(find.getAmount(), amount).intValue()); + } + } /** * 获取材料库存对应的供应商.由记录的入库单的明细id查找 * @param gs