Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/disposablegoods/service/DisposableGoodsServiceContext.java =================================================================== diff -u -r13855 -r14969 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/disposablegoods/service/DisposableGoodsServiceContext.java (.../DisposableGoodsServiceContext.java) (revision 13855) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/disposablegoods/service/DisposableGoodsServiceContext.java (.../DisposableGoodsServiceContext.java) (revision 14969) @@ -10,6 +10,8 @@ import java.util.Map; import java.util.Set; +import org.apache.commons.lang3.StringUtils; + import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatch; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatchStock; @@ -22,8 +24,11 @@ * */ public class DisposableGoodsServiceContext { - + public static final String SCENE_DEFAULT = "通用"; + public static final String SCENE_INVOICE_AUTO_DEDUCTION = "发货自动扣减库存"; + private String scene = SCENE_DEFAULT; private Set disposableGoodsBarcodesSet = new HashSet(); + private String warehouseId; private Set disposableGoodsIdsSet = new HashSet();// 一次性物品id集合 private Set disposableGoodsStockIdsSet = new HashSet();// 一次性物品库存id集合 private Set expensiveDisposableGoodsIdsSet = new HashSet(); @@ -45,6 +50,14 @@ private Map barcodeToDisposableGoodsBatchStockMap = new HashMap(); private Map idToIdentificationMap = new HashMap(); + public String getScene() { + return scene; + } + + public void setScene(String scene) { + this.scene = scene; + } + public Set getDisposableGoodsBarcodesSet() { return disposableGoodsBarcodesSet; } @@ -54,6 +67,14 @@ this.disposableGoodsBarcodesSet = disposableGoodsBarcodesSet; } + public String getWarehouseId() { + return warehouseId; + } + + public void setWarehouseId(String warehouseId) { + this.warehouseId = warehouseId; + } + public Set getDisposableGoodsIdsSet() { return disposableGoodsIdsSet; } @@ -232,4 +253,20 @@ this.idToIdentificationMap = idToIdentificationMap; } + public boolean sceneInvoiceAutoDeduction(){ + if(StringUtils.equals(scene, SCENE_INVOICE_AUTO_DEDUCTION)){ + return true; + } + return false; + } + + public void validateParams(){ + switch(scene){ + case SCENE_INVOICE_AUTO_DEDUCTION: + if(StringUtils.isBlank(warehouseId)){ + throw new RuntimeException("仓库id不能为空!"); + } + break; + } + } } Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java =================================================================== diff -u -r14960 -r14969 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 14960) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 14969) @@ -2309,6 +2309,9 @@ // 获取并锁定一次性物品相关资源 public void lockAndGetDisposableGoodsResources( DisposableGoodsServiceContext disposableGoodsServiceContext) { + + disposableGoodsServiceContext.validateParams(); + String warehouseId = disposableGoodsServiceContext.getWarehouseId(); Set disposableGoodsIDsSet = disposableGoodsServiceContext .getDisposableGoodsIdsSet(); Set diposableGoodsStockIDsSet = disposableGoodsServiceContext @@ -2352,13 +2355,22 @@ idToDiposableGoodsMap.put(disposableGoods.getId(), disposableGoods); } // 获取物品库存 - if (!diposableGoodsStockIDsSet.isEmpty()) { - List disposableGoodsStockList = getDisposableGoodsStockByDisposableGoodsStockIDs(diposableGoodsStockIDsSet); - if (disposableGoodsStockList == null - || disposableGoodsStockList.size() != diposableGoodsStockIDsSet - .size()) { - throw new RuntimeException("某些物品库存已被删除!"); + List disposableGoodsStockList = null; + if(disposableGoodsServiceContext.sceneInvoiceAutoDeduction()){ + // 发货自动扣减库存,根据物品定义id和仓库来获取物品库存 + disposableGoodsStockList = getDisposableGoodsStockByDisposableGoodsIDs(warehouseId,disposableGoodsIDsSet); + }else{ + if (!diposableGoodsStockIDsSet.isEmpty()) { + disposableGoodsStockList = getDisposableGoodsStockByDisposableGoodsStockIDs(diposableGoodsStockIDsSet); + if (disposableGoodsStockList == null + || disposableGoodsStockList.size() != diposableGoodsStockIDsSet + .size()) { + throw new RuntimeException("某些物品库存已被删除!"); + } } + } + // 设置物品库存到map + if(disposableGoodsStockList != null){ disposableGoodsServiceContext.setDisposableGoodsStockList(disposableGoodsStockList); for (DisposableGoodsStock disposableGoodsStock : disposableGoodsStockList) { idToDisposableGoodsStockMap.put(disposableGoodsStock.getId(),