Index: ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsManagerImpl.java =================================================================== diff -u -r20780 -r20826 --- ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsManagerImpl.java (.../ExpensiveGoodsManagerImpl.java) (revision 20780) +++ ssts-expensivegoods/src/main/java/com/forgon/disinfectsystem/expensiveGoods/service/ExpensiveGoodsManagerImpl.java (.../ExpensiveGoodsManagerImpl.java) (revision 20826) @@ -1847,140 +1847,68 @@ @Override public void lockAndGetExpensiveGoodsResources( - ExpensiveGoodsServiceContext expensiveGoodssServiceContext) { -// expensiveGoodssServiceContext.validateParams(); -// String warehouseId = expensiveGoodssServiceContext.getWarehouseId(); -// Set expensiveGoodssIDsSet = expensiveGoodssServiceContext.getExpensiveGoodsIdsSet(); -// Set diposableGoodsStockIDsSet = expensiveGoodssServiceContext.getExpensiveGoodsStockIdsSet(); -// Set expensiveDisposablegoodsIdsSet = expensiveGoodssServiceContext.getExpensiveExpensiveGoodsIdsSet(); -// Set expensiveGoodssBatchIDsSet = expensiveGoodssServiceContext.getExpensiveGoodsBatchIdsSet(); -// Set expensiveGoodssBatchStockIDsSet = expensiveGoodssServiceContext.getExpensiveGoodsBatchStockIdsSet(); -// Set identificationIdsSet = expensiveGoodssServiceContext.getIdentificationIdsSet(); -// Map idToDiposableGoodsMap = expensiveGoodssServiceContext.getIdToExpensiveGoodsMap(); -// Map expensiveGoodssIDToExpensiveGoodsStockMap = expensiveGoodssServiceContext.getExpensiveGoodsIDToExpensiveGoodsStockMap(); -// Map idToExpensiveGoodsStockMap = expensiveGoodssServiceContext.getIdToExpensiveGoodsStockMap(); -// Map idToExpensiveDisposablegoodsMap = expensiveGoodssServiceContext.getIdToExpensiveExpensiveGoodsMap(); -// Map barcodeToExpensiveDisposablegoodsMap = expensiveGoodssServiceContext.getBarcodeToExpensiveDisposablegoodsMap(); -// Map idToExpensiveGoodsBatchMap = expensiveGoodssServiceContext.getIdToExpensiveGoodsBatchMap(); -// Map barcodeToExpensiveGoodsBatchMap = expensiveGoodssServiceContext.getBarcodeToExpensiveGoodsBatchMap(); -// Map idToExpensiveGoodsBatchStockMap = expensiveGoodssServiceContext.getIdToExpensiveGoodsBatchStockMap(); -// Map barcodeToExpensiveGoodsBatchStockMap = expensiveGoodssServiceContext.getBarcodeToExpensiveGoodsBatchStockMap(); -// Map idToIdentificationMap = expensiveGoodssServiceContext.getIdToIdentificationMap(); -// -// // 锁定一次性物品 -// List expensiveGoodssList = getExpensiveGoodsByExpensiveGoodsIDs_ForUpdate(expensiveGoodssIDsSet); -// if (expensiveGoodssList == null -// || expensiveGoodssList.size() != expensiveGoodssIDsSet.size()) { -// throw new RuntimeException("某些物品已被删除!"); -// } -// for (ExpensiveGoods expensiveGoodss : expensiveGoodssList) { -// idToDiposableGoodsMap.put(expensiveGoodss.getId(), expensiveGoodss); -// } -// // 获取物品库存 -// List expensiveGoodssStockList = null; -// if(expensiveGoodssServiceContext.sceneInvoiceAutoDeduction()){ -// // 发货自动扣减库存,根据物品定义id和仓库来获取物品库存 -// Date validUntil = new Date(); -// String validUntilSql = " " -// + dateQueryAdapter.dateConverAdapter2(com.forgon.Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS.format(validUntil), -// "yyyy-mm-dd HH24:MI:SS"); -// -// String validUntilStr = String.format(" ( %s > %s) ", "b.expDate", validUntilSql); -// String queryString = String -// .format("select distinct po from %s po inner join fetch po.goodsBatchs b inner join fetch b.identifications i where %s and i.amount>0 and po.warehouseID=%s and (%s) ", -// ExpensiveGoodsStock.class.getSimpleName(),validUntilStr,warehouseId,SqlUtils.getStringFieldInCollectionsPredicate("po.expensiveGoodssID", expensiveGoodssIDsSet)); -// expensiveGoodssStockList = objectDao.findByHql(queryString); -// }else{ -// if (!diposableGoodsStockIDsSet.isEmpty()) { -// expensiveGoodssStockList = getExpensiveGoodsStockByExpensiveGoodsStockIDs(diposableGoodsStockIDsSet); -// if (expensiveGoodssStockList == null -// || expensiveGoodssStockList.size() != diposableGoodsStockIDsSet -// .size()) { -// throw new RuntimeException("某些物品库存已被删除!"); -// } -// } -// } -// // 设置物品库存到map -// if(expensiveGoodssStockList != null){ -// expensiveGoodssServiceContext.setExpensiveGoodsStockList(expensiveGoodssStockList); -// for (ExpensiveGoodsStock expensiveGoodssStock : expensiveGoodssStockList) { -// idToExpensiveGoodsStockMap.put(expensiveGoodssStock.getId(), expensiveGoodssStock); -// expensiveGoodssIDToExpensiveGoodsStockMap.put(expensiveGoodssStock.getExpensiveGoodsID(), expensiveGoodssStock); -// } -// } -// -// //设置高值耗材 -// if (!expensiveDisposablegoodsIdsSet.isEmpty()) { -// List expensiveDisposablegoodsList = getExpensiveDisposablegoodsByIds(expensiveDisposablegoodsIdsSet); -// if (expensiveDisposablegoodsList == null -// || expensiveDisposablegoodsList.size() != expensiveDisposablegoodsIdsSet -// .size()) { -// throw new RuntimeException("某些高值耗材已被删除!"); -// } -// expensiveGoodssServiceContext.setExpensiveDisposablegoodsList(expensiveDisposablegoodsList); -// if (expensiveDisposablegoodsList != null) { -// for (ExpensiveDisposablegoods expensiveDisposablegoods : expensiveDisposablegoodsList) { -// barcodeToExpensiveDisposablegoodsMap.put(expensiveDisposablegoods.getBarcode(), expensiveDisposablegoods); -// idToExpensiveDisposablegoodsMap.put(expensiveDisposablegoods.getId(), expensiveDisposablegoods); -// } -// } -// } -// -// // 加载所有的批次定义 -// if(!expensiveGoodssBatchIDsSet.isEmpty()){ -// String getExpensiveGoodsBatchSql = String.format(" where %s ", -// SqlUtils.getNonStringFieldInCollectionsPredicate("po.id", expensiveGoodssBatchIDsSet)); -// List expensiveGoodssBatchs = objectDao.findBySql(ExpensiveGoodsBatch.class.getSimpleName(), getExpensiveGoodsBatchSql); -// if (expensiveGoodssBatchs == null -// || expensiveGoodssBatchs.size() != expensiveGoodssBatchIDsSet -// .size()) { -// throw new RuntimeException("某些批次定义已被删除!"); -// } -// if (expensiveGoodssBatchs != null) { -// for (ExpensiveGoodsBatch expensiveGoodssBatch : expensiveGoodssBatchs) { -// idToExpensiveGoodsBatchMap.put(expensiveGoodssBatch.getId(), expensiveGoodssBatch); -// barcodeToExpensiveGoodsBatchMap.put(expensiveGoodssBatch.getBarcode(), expensiveGoodssBatch); -// } -// } -// } -// -// // 获取批次库存 -// if(!expensiveGoodssBatchStockIDsSet.isEmpty()){ -// String batchStockSql = String.format(" where %s ", SqlUtils -// .getStringFieldInCollectionsPredicate("po.id", -// expensiveGoodssBatchStockIDsSet)); -// List expensiveGoodssBatchStocks = objectDao -// .findBySql(ExpensiveGoodsBatchStock.class.getSimpleName(), -// batchStockSql); -// -// if (expensiveGoodssBatchStocks == null || expensiveGoodssBatchStocks.size() != expensiveGoodssBatchStockIDsSet.size()) { -// throw new RuntimeException("某些批次库存已被删除!"); -// } -// expensiveGoodssServiceContext.setExpensiveGoodsBatchStockList(expensiveGoodssBatchStocks); -// for (ExpensiveGoodsBatchStock diposableGoodBatchStock : expensiveGoodssBatchStocks) { -// idToExpensiveGoodsBatchStockMap.put(diposableGoodBatchStock.getId(), diposableGoodBatchStock); -// barcodeToExpensiveGoodsBatchStockMap.put(diposableGoodBatchStock.getBarcode(), diposableGoodBatchStock); -// } -// } -// -// //设置一次性物品标识号 -// if (!identificationIdsSet.isEmpty()) { -// String getIdentificationSql = String.format(" where %s ", SqlUtils -// .getNonStringFieldInCollectionsPredicate("po.id", -// identificationIdsSet)); -// List identifications = objectDao -// .findBySql( -// ExpensiveGoodsIdentification.class.getSimpleName(), -// getIdentificationSql); -// -// if (identifications == null -// || identifications.size() != identificationIdsSet.size()) { -// throw new RuntimeException("某些标识号已被删除!"); -// } -// for (ExpensiveGoodsIdentification identificationOfDiposableGoods : identifications) { -// idToIdentificationMap.put(identificationOfDiposableGoods.getId(), identificationOfDiposableGoods); -// } -// } + ExpensiveGoodsServiceContext expensiveGoodsServiceContext) { + String warehouseId = expensiveGoodsServiceContext.getWarehouseId(); + Set expensiveGoodsIdsSet = expensiveGoodsServiceContext.getExpensiveGoodsIdsSet(); + Set expensiveGoodsStockIdsSet = expensiveGoodsServiceContext.getExpensiveGoodsStockIdsSet(); + Set expensiveGoodsInstanceIdsSet = expensiveGoodsServiceContext.getExpensiveGoodsInstanceIdsSet(); + Map idToExpensiveGoodsMap = expensiveGoodsServiceContext.getIdToExpensiveGoodsMap(); + Map expensiveGoodsIdToExpensiveGoodsStockMap = expensiveGoodsServiceContext.getExpensiveGoodsIdToExpensiveGoodsStockMap(); + Map idToExpensiveGoodsStockMap = expensiveGoodsServiceContext.getIdToExpensiveGoodsStockMap(); + Map barcodeToExpensiveGoodsMap = expensiveGoodsServiceContext.getBarcodeToExpensiveGoodsMap(); + Map idToExpensiveGoodsInstanceMap = expensiveGoodsServiceContext.getIdToExpensiveGoodsInstanceMap(); + Map barcodeToExpensiveGoodsInstanceMap = expensiveGoodsServiceContext.getBarcodeToExpensiveGoodsInstanceMap(); + + // 锁定定义 + List expensiveGoodsList = getExpensiveGoodsByExpensiveGoodsIDs_ForUpdate(expensiveGoodsIdsSet); + if (expensiveGoodsList == null + || expensiveGoodsList.size() != expensiveGoodsIdsSet.size()) { + throw new RuntimeException("某些物品已被删除!"); + } + for (ExpensiveGoods expensiveGoods : expensiveGoodsList) { + idToExpensiveGoodsMap.put(expensiveGoods.getId(), expensiveGoods); + } + // 获取物品库存 + List expensiveGoodsStockList = null; + + if (!expensiveGoodsStockIdsSet.isEmpty()) { + expensiveGoodsStockList = getExpensiveGoodsStockByExpensiveGoodsStockIDs(expensiveGoodsStockIdsSet); + if (expensiveGoodsStockList == null + || expensiveGoodsStockList.size() != expensiveGoodsStockIdsSet + .size()) { + throw new RuntimeException("某些物品库存已被删除!"); + } + } + + // 设置物品库存到map + if(expensiveGoodsStockList != null){ + expensiveGoodsServiceContext.setExpensiveGoodsStockList(expensiveGoodsStockList); + for (ExpensiveGoodsStock expensiveGoodsStock : expensiveGoodsStockList) { + idToExpensiveGoodsStockMap.put(expensiveGoodsStock.getId(), expensiveGoodsStock); + expensiveGoodsIdToExpensiveGoodsStockMap.put(expensiveGoodsStock.getExpensiveGoods().getId(), expensiveGoodsStock); + } + } + + // 设置高值耗材实例 + if(!expensiveGoodsInstanceIdsSet.isEmpty()){ + String expensiveGoodsInstanceSql = String.format(" where %s ", SqlUtils + .getStringFieldInCollectionsPredicate("po.id", + expensiveGoodsInstanceIdsSet)); + List expensiveGoodsInstanceList = objectDao + .findBySql(ExpensiveGoodsInstance.class.getSimpleName(), + expensiveGoodsInstanceSql); + + if (expensiveGoodsInstanceList == null || expensiveGoodsInstanceList.size() != expensiveGoodsInstanceIdsSet.size()) { + throw new RuntimeException("某些高值耗材已被删除!"); + } + expensiveGoodsServiceContext.setExpensiveGoodsInstanceList(expensiveGoodsInstanceList); + for (ExpensiveGoodsInstance expensiveGoodsInstance : expensiveGoodsInstanceList) { + idToExpensiveGoodsInstanceMap.put(expensiveGoodsInstance.getId(), expensiveGoodsInstance); + barcodeToExpensiveGoodsInstanceMap.put(expensiveGoodsInstance.getBarcode(), expensiveGoodsInstance); + barcodeToExpensiveGoodsMap.put(expensiveGoodsInstance.getBarcode(), expensiveGoodsInstance.getExpensiveGoods()); + } + } + } @Override Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/expensivegoods/ExpensiveGoodsServiceContext.java =================================================================== diff -u -r20821 -r20826 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/expensivegoods/ExpensiveGoodsServiceContext.java (.../ExpensiveGoodsServiceContext.java) (revision 20821) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/expensivegoods/ExpensiveGoodsServiceContext.java (.../ExpensiveGoodsServiceContext.java) (revision 20826) @@ -8,6 +8,8 @@ import java.util.Set; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoods; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsInstance; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsStock; /** * 发货的一次性物品上下文 @@ -39,17 +41,25 @@ * 高值耗材id和高值耗材的Map */ private Map idToExpensiveGoodsMap = new HashMap(); + private Map idToExpensiveGoodsStockMap = new HashMap(); + private Map expensiveGoodsIdToExpensiveGoodsStockMap = new HashMap(); /** * 高值耗材的集合 */ - private List ExpensiveGoodsList = new LinkedList(); + private List expensiveGoodsList = new LinkedList(); + private List expensiveGoodsInstanceList = new LinkedList(); + private List expensiveGoodsStockList = new LinkedList(); /** * 高值耗材条码和高值耗材对象的Map */ private Map barcodeToExpensiveGoodsMap = new HashMap(); + private Map idToExpensiveGoodsInstanceMap = new HashMap(); + private Map barcodeToExpensiveGoodsInstanceMap = new HashMap(); + + public Set getExpensiveGoodsBarcodesSet() { return expensiveGoodsBarcodesSet; @@ -102,15 +112,50 @@ this.idToExpensiveGoodsMap = idToExpensiveGoodsMap; } + public Map getIdToExpensiveGoodsStockMap() { + return idToExpensiveGoodsStockMap; + } + + public void setIdToExpensiveGoodsStockMap( + Map idToExpensiveGoodsStockMap) { + this.idToExpensiveGoodsStockMap = idToExpensiveGoodsStockMap; + } + + public Map getExpensiveGoodsIdToExpensiveGoodsStockMap() { + return expensiveGoodsIdToExpensiveGoodsStockMap; + } + + public void setExpensiveGoodsIdToExpensiveGoodsStockMap( + Map expensiveGoodsIdToExpensiveGoodsStockMap) { + this.expensiveGoodsIdToExpensiveGoodsStockMap = expensiveGoodsIdToExpensiveGoodsStockMap; + } + public List getExpensiveGoodsList() { - return ExpensiveGoodsList; + return expensiveGoodsList; } - public void setExpensiveGoodsList( - List ExpensiveGoodsList) { - this.ExpensiveGoodsList = ExpensiveGoodsList; + public void setExpensiveGoodsList(List expensiveGoodsList) { + this.expensiveGoodsList = expensiveGoodsList; } + public List getExpensiveGoodsInstanceList() { + return expensiveGoodsInstanceList; + } + + public void setExpensiveGoodsInstanceList( + List expensiveGoodsInstanceList) { + this.expensiveGoodsInstanceList = expensiveGoodsInstanceList; + } + + public List getExpensiveGoodsStockList() { + return expensiveGoodsStockList; + } + + public void setExpensiveGoodsStockList( + List expensiveGoodsStockList) { + this.expensiveGoodsStockList = expensiveGoodsStockList; + } + public Map getBarcodeToExpensiveGoodsMap() { return barcodeToExpensiveGoodsMap; } @@ -119,5 +164,24 @@ Map barcodeToExpensiveGoodsMap) { this.barcodeToExpensiveGoodsMap = barcodeToExpensiveGoodsMap; } + + public Map getIdToExpensiveGoodsInstanceMap() { + return idToExpensiveGoodsInstanceMap; + } + public void setIdToExpensiveGoodsInstanceMap( + Map idToExpensiveGoodsInstanceMap) { + this.idToExpensiveGoodsInstanceMap = idToExpensiveGoodsInstanceMap; + } + + public Map getBarcodeToExpensiveGoodsInstanceMap() { + return barcodeToExpensiveGoodsInstanceMap; + } + + public void setBarcodeToExpensiveGoodsInstanceMap( + Map barcodeToExpensiveGoodsInstanceMap) { + this.barcodeToExpensiveGoodsInstanceMap = barcodeToExpensiveGoodsInstanceMap; + } + + }