Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/expensivegoods/ExpensiveGoodsServiceContext.java =================================================================== diff -u -r21764 -r21778 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/expensivegoods/ExpensiveGoodsServiceContext.java (.../ExpensiveGoodsServiceContext.java) (revision 21764) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/expensivegoods/ExpensiveGoodsServiceContext.java (.../ExpensiveGoodsServiceContext.java) (revision 21778) @@ -48,8 +48,13 @@ private Map idToExpensiveGoodsMap = new HashMap(); private Map idToExpensiveGoodsStockMap = new HashMap(); private Map expensiveGoodsIdToExpensiveGoodsStockMap = new HashMap(); + private Map expensiveGoodsIdAndWareHouseIdToExpensiveGoodsStockMap = new HashMap(); private Map expensiveGoodsIdAndOrgUnitCodeToExpensiveGoodsStockMap = new HashMap(); + + private Map expensiveGoodsIdAndWareHouseIdAndModelToExpensiveGoodsModelStockMap = new HashMap(); + private Map expensiveGoodsIdAndOrgUnitCodeAndModelToExpensiveGoodsModelStockMap = new HashMap(); + private Map idToExpensiveGoodsModelMap = new HashMap(); private Map idToExpensiveGoodsModelStockMap = new HashMap(); /** @@ -171,6 +176,24 @@ this.expensiveGoodsIdAndOrgUnitCodeToExpensiveGoodsStockMap = expensiveGoodsIdAndOrgUnitCodeToExpensiveGoodsStockMap; } + public Map getExpensiveGoodsIdAndWareHouseIdAndModelToExpensiveGoodsModelStockMap() { + return expensiveGoodsIdAndWareHouseIdAndModelToExpensiveGoodsModelStockMap; + } + + public Map getExpensiveGoodsIdAndOrgUnitCodeAndModelToExpensiveGoodsModelStockMap() { + return expensiveGoodsIdAndOrgUnitCodeAndModelToExpensiveGoodsModelStockMap; + } + + public void setExpensiveGoodsIdAndWareHouseIdAndModelToExpensiveGoodsModelStockMap( + Map expensiveGoodsIdAndWareHouseIdAndModelToExpensiveGoodsModelStockMap) { + this.expensiveGoodsIdAndWareHouseIdAndModelToExpensiveGoodsModelStockMap = expensiveGoodsIdAndWareHouseIdAndModelToExpensiveGoodsModelStockMap; + } + + public void setExpensiveGoodsIdAndOrgUnitCodeAndModelToExpensiveGoodsModelStockMap( + Map expensiveGoodsIdAndOrgUnitCodeAndModelToExpensiveGoodsModelStockMap) { + this.expensiveGoodsIdAndOrgUnitCodeAndModelToExpensiveGoodsModelStockMap = expensiveGoodsIdAndOrgUnitCodeAndModelToExpensiveGoodsModelStockMap; + } + public Map getIdToExpensiveGoodsModelMap() { return idToExpensiveGoodsModelMap; } Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r21761 -r21778 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 21761) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 21778) @@ -75,6 +75,8 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; +import com.forgon.disinfectsystem.entity.expensivegoods.ExpensiveGoodsModel; +import com.forgon.disinfectsystem.entity.expensivegoods.ExpensiveGoodsModelStock; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock; import com.forgon.disinfectsystem.entity.invoicemanager.DiposableGoodsItem; @@ -1286,19 +1288,28 @@ // 一次性物品 Long expensiveGoodsId = JSONUtil.optLong(typeInfoOnScannedObj, "expensiveGoodsId", null); Long expensiveGoodsStockId = JSONUtil.optLong(typeInfoOnScannedObj, "expensiveGoodsStockId", null); + Long expensiveGoodsModelId = JSONUtil.optLong(typeInfoOnScannedObj, "expensiveGoodsModelId", null); + Long expensiveGoodsModelStockId = JSONUtil.optLong(typeInfoOnScannedObj, "expensiveGoodsModelStockId", null); Long expensiveGoodsInstanceId = JSONUtil.optLong(typeInfoOnScannedObj, "expensiveGoodsInstanceId", null); if(expensiveGoodsId == null){ throw new RuntimeException("缺少物品定义id参数!"); } if(expensiveGoodsStockId == null){ throw new RuntimeException("缺少物品库存id参数!"); } - + if(expensiveGoodsModelId == null){ + throw new RuntimeException("缺少物品型号id参数!"); + } + if(expensiveGoodsModelStockId == null){ + throw new RuntimeException("缺少物品型号库存id参数!"); + } if(expensiveGoodsInstanceId == null){ throw new RuntimeException("缺少实例id参数!"); } expensiveGoodsServiceContext.getExpensiveGoodsIdsSet().add(expensiveGoodsId); expensiveGoodsServiceContext.getExpensiveGoodsStockIdsSet().add(expensiveGoodsStockId); + expensiveGoodsServiceContext.getExpensiveGoodsModelIdsSet().add(expensiveGoodsModelId); + expensiveGoodsServiceContext.getExpensiveGoodsModelStockIdsSet().add(expensiveGoodsModelStockId); expensiveGoodsServiceContext.getExpensiveGoodsInstanceIdsSet().add(expensiveGoodsInstanceId); } } @@ -1815,6 +1826,18 @@ expensiveGoodsIdAndOrgUnitCodeToExpensiveGoodsStockMap.put(getExpensiveGoodsStockKey(expensiveGoodsStock,targetIdToWareHouseMap), expensiveGoodsStock); } } + sql = String.format(" where %s and %s ", SqlUtils.getNonStringFieldInCollectionsPredicate("po.expensiveGoods.id", expensiveGoodsServiceContext.getExpensiveGoodsIdsSet()), + SqlUtils.getNonStringFieldInCollectionsPredicate("po.warehouseID", wareHouseIdSet)); + List destExpensiveGoodsModelStockList = objectDao.findBySql(ExpensiveGoodsModelStock.class.getSimpleName(), sql); + if(destExpensiveGoodsModelStockList != null){ + Map expensiveGoodsIdAndWareHouseIdAndModelToExpensiveGoodsModelStockMap = expensiveGoodsServiceContext.getExpensiveGoodsIdAndOrgUnitCodeAndModelToExpensiveGoodsModelStockMap(); + Map expensiveGoodsIdAndOrgUnitCodeAndModelToExpensiveGoodsModelStockMap = expensiveGoodsServiceContext.getExpensiveGoodsIdAndOrgUnitCodeAndModelToExpensiveGoodsModelStockMap(); + for (ExpensiveGoodsModelStock expensiveGoodsModelStock : destExpensiveGoodsModelStockList) { +// expensiveGoodsIdAndWareHouseIdAndModelToExpensiveGoodsModelStockMap.put(getExpensiveGoodsStockKey(expensiveGoodsModelStock), expensiveGoodsModelStock); + expensiveGoodsIdAndOrgUnitCodeAndModelToExpensiveGoodsModelStockMap.put(getExpensiveGoodsModelStockKey(expensiveGoodsModelStock,targetIdToWareHouseMap), expensiveGoodsModelStock); + } + } + } } @@ -1856,6 +1879,33 @@ } return expensiveGoodsId+"_"+orgUnitCode; } + private String getExpensiveGoodsModelStockKey(ExpensiveGoodsModelStock expensiveGoodsModelStock,Map targetIdToWareHouseMap){ + ExpensiveGoods expensiveGoods = expensiveGoodsModelStock.getExpensiveGoods(); + if(expensiveGoods == null){ + throw new RuntimeException(String.format("高值耗材库存的定义为空")); + } + Long expensiveGoodsId = expensiveGoods.getId(); + if(expensiveGoodsId == null){ + throw new RuntimeException(String.format("高值耗材库存的定义id为空")); + } + Long warehouseId = expensiveGoodsModelStock.getWarehouseId(); + if(warehouseId == null){ + throw new RuntimeException(String.format("高值耗材库存的仓库id为空!")); + } + WareHouse wareHouse = targetIdToWareHouseMap.get(warehouseId); + if(wareHouse == null){ + throw new RuntimeException(String.format("未获取到仓库!")); + } + String orgUnitCode = wareHouse.getOrgUnitCode(); + if(StringUtils.isBlank(orgUnitCode)){ + throw new RuntimeException(String.format("科室编码不能为空!")); + } + ExpensiveGoodsModel expensiveGoodsModel = expensiveGoodsModelStock.getExpensiveGoodsModel(); + if(expensiveGoodsModel == null){ + throw new RuntimeException(String.format("未获取到型号!")); + } + return expensiveGoodsId+"_"+orgUnitCode+"_"+expensiveGoodsModel.getModel(); + } private String getExpensiveGoodsStockKey(Long expensiveGoodsId,String orgUnitCode){ if(expensiveGoodsId == null){ throw new RuntimeException(String.format("高值耗材库存的定义id为空")); @@ -1866,6 +1916,16 @@ } return expensiveGoodsId+"_"+orgUnitCode; } + private String getExpensiveGoodsModelStockKey(Long expensiveGoodsId,String orgUnitCode,String model){ + if(expensiveGoodsId == null){ + throw new RuntimeException(String.format("高值耗材库存的定义id为空")); + } + + if(StringUtils.isBlank(orgUnitCode)){ + throw new RuntimeException(String.format("科室编码不能为空!")); + } + return expensiveGoodsId+"_"+orgUnitCode+"_"+model; + } @@ -3117,40 +3177,75 @@ expensiveGoodsStock.setWarehouseID(wareHouse.getId()); expensiveGoodsStock.setWarehouseName(wareHouse.getName()); expensiveGoodsIdAndOrgUnitCodeToExpensiveGoodsStockMap.put(key, expensiveGoodsStock); + objectDao.save(expensiveGoodsStock); } return expensiveGoodsStock; } + private ExpensiveGoodsModelStock getOrCreateExpensiveGoodsModelStock(SubmitInvoiceContext submitInvoiceContext,ExpensiveGoodsServiceContext expensiveGoodsServiceContext,String orgUnitCode,ExpensiveGoodsStock expensiveGoodsStock,ExpensiveGoodsModel expensiveGoodsModel,ExpensiveGoodsInstance expensiveGoodsInstance){ + Map expensiveGoodsIdAndOrgUnitCodeAndModelToExpensiveGoodsModelStockMap = expensiveGoodsServiceContext.getExpensiveGoodsIdAndOrgUnitCodeAndModelToExpensiveGoodsModelStockMap(); + String key = getExpensiveGoodsModelStockKey(expensiveGoodsInstance.getExpensiveGoods().getId(), orgUnitCode,expensiveGoodsModel.getModel()); + ExpensiveGoodsModelStock expensiveGoodsModelStock = expensiveGoodsIdAndOrgUnitCodeAndModelToExpensiveGoodsModelStockMap.get(key); + Map targetWareHouseMap = submitInvoiceContext.getTargetWareHouseMap(); + if(expensiveGoodsModelStock == null){ + WareHouse wareHouse = targetWareHouseMap.get(orgUnitCode); + if(wareHouse == null){ + throw new RuntimeException(String.format("仓库为空!")); + } + ExpensiveGoods expensiveGoods = expensiveGoodsInstance.getExpensiveGoods(); + expensiveGoodsModelStock = new ExpensiveGoodsModelStock(); + expensiveGoodsModelStock.setExpensiveGoods(expensiveGoods); + expensiveGoodsModelStock.setExpensiveGoodsId(expensiveGoods.getId()); + expensiveGoodsModelStock.setExpensiveGoodsModel(expensiveGoodsModel); + expensiveGoodsModelStock.setExpensiveGoodsStock(expensiveGoodsStock); + expensiveGoodsModelStock.setWarehouseId(wareHouse.getId()); + expensiveGoodsModelStock.setWarehouseName(wareHouse.getName()); + expensiveGoodsIdAndOrgUnitCodeAndModelToExpensiveGoodsModelStockMap.put(key, expensiveGoodsModelStock); + objectDao.save(expensiveGoodsModelStock); + } + return expensiveGoodsModelStock; + } private int createInvoiceItem(SubmitInvoiceContext submitInvoiceContext,InvoiceItem invoiceItem,List expensiveGoodsItems,Invoice invoice,String depart,String departCoding){ double floatPercent = supplyRoomConfigManager .getExpensiveGoodsFluctuation(); ExpensiveGoodsServiceContext expensiveGoodsServiceContext = submitInvoiceContext.getExpensiveGoodsServiceContext(); Map idToExpensiveGoodsStockMap = expensiveGoodsServiceContext.getIdToExpensiveGoodsStockMap(); + Map idToExpensiveGoodsModelMap = expensiveGoodsServiceContext.getIdToExpensiveGoodsModelMap(); Map expensiveGoodsIdAndOrgUnitCodeToExpensiveGoodsStockMap = expensiveGoodsServiceContext.getExpensiveGoodsIdAndOrgUnitCodeToExpensiveGoodsStockMap(); + Map idToExpensiveGoodsModelStockMap = expensiveGoodsServiceContext.getIdToExpensiveGoodsModelStockMap(); // 高值耗材 List expensiveGoodsInstanceList = invoiceItem .getExpensiveGoodsInstanceList(); int sendAmount = 0; Set updateExpensiveGoodsStock = new HashSet(); + Set updateExpensiveGoodsModelStock = new HashSet(); for (ExpensiveGoodsInstance expensiveGoodsInstance : expensiveGoodsInstanceList) { if (!expensiveGoodsInstance.inWarehouse()) { throw new RuntimeException(String.format( "条码为[%s]的高值耗材状态为%s,不能发货", expensiveGoodsInstance.getBarcode(), expensiveGoodsInstance.getStatus())); } + ExpensiveGoodsModel expensiveGoodsModel = idToExpensiveGoodsModelMap.get(expensiveGoodsInstance.getExpensiveGoodsModelId()); + if(expensiveGoodsModel == null){ + throw new RuntimeException(String.format( + "条码为[%s]的高值耗材型号不存在")); + } // 扣减源仓库库存 - ExpensiveGoodsStock expensiveGoodsStock = idToExpensiveGoodsStockMap.get(expensiveGoodsInstance.getExpensiveGoodsStockId()); - expensiveGoodsStock.adjustAmount(-1); -// +// ExpensiveGoodsStock expensiveGoodsStock = idToExpensiveGoodsStockMap.get(expensiveGoodsInstance.getExpensiveGoodsStockId()); +// expensiveGoodsStock.adjustAmount(-1); + ExpensiveGoodsModelStock srcExpensiveGoodsModelStock = idToExpensiveGoodsModelStockMap.get(expensiveGoodsInstance.getExpensiveGoodsModelStockId()); + srcExpensiveGoodsModelStock.adjustAmount(-1); expensiveGoodsInstance .setStatus(ExpensiveDisposablegoods.STATUS_DELIVERED); // expensiveGoodsInstance.adjustAmount(-1); // 增加目标库存 ExpensiveGoodsStock targetExpensiveGoodsStock = getOrCreateExpensiveGoodsStock(submitInvoiceContext, invoice.getDepartCoding(), expensiveGoodsInstance, expensiveGoodsIdAndOrgUnitCodeToExpensiveGoodsStockMap); - targetExpensiveGoodsStock.adjustAmount(1); + ExpensiveGoodsModelStock targetExpensiveGoodsModelStock = getOrCreateExpensiveGoodsModelStock(submitInvoiceContext, expensiveGoodsServiceContext, invoice.getDepartCoding(),targetExpensiveGoodsStock, expensiveGoodsModel, expensiveGoodsInstance); + targetExpensiveGoodsModelStock.adjustAmount(1); - updateExpensiveGoodsStock.add(expensiveGoodsStock); + updateExpensiveGoodsModelStock.add(srcExpensiveGoodsModelStock); + updateExpensiveGoodsStock.add(srcExpensiveGoodsModelStock.getExpensiveGoodsStock()); updateExpensiveGoodsStock.add(targetExpensiveGoodsStock); ++sendAmount; @@ -3163,7 +3258,10 @@ // 修改目标仓库 expensiveGoodsInstance.setWarehouseID(targetExpensiveGoodsStock.getWarehouseID()); expensiveGoodsInstance.setWarehouseName(targetExpensiveGoodsStock.getWarehouseName()); - + // 修改目标库存关系 + expensiveGoodsInstance.setExpensiveGoodsStockId(targetExpensiveGoodsStock.getId()); + expensiveGoodsInstance.setExpensiveGoodsModelStockId(targetExpensiveGoodsModelStock.getId()); + invoiceItem.setExpensiveGoodsId(expensiveGoodsInstance.getExpensiveGoods().getId()); invoiceItem.setExpensiveGoodsInstanceId(expensiveGoodsInstance.getId()); invoiceItem.setExpensiveGoodsStockId(expensiveGoodsInstance.getExpensiveGoodsStockId()); @@ -4633,6 +4731,8 @@ JSONObject typeInfoOnScanned = new JSONObject(); typeInfoOnScanned.put("expensiveGoodsId", expensiveGoods.getId()); typeInfoOnScanned.put("expensiveGoodsStockId", expensiveGoodsInstance.getExpensiveGoodsStockId()); + typeInfoOnScanned.put("expensiveGoodsModelId", expensiveGoodsInstance.getExpensiveGoodsModelId()); + typeInfoOnScanned.put("expensiveGoodsModelStockId", expensiveGoodsInstance.getExpensiveGoodsModelStockId()); typeInfoOnScanned.put("expensiveGoodsInstanceId", expensiveGoodsInstance.getId()); JsonObject data = new JsonObject(); data.addProperty("name", showName); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/ExpensiveGoodsItem.java =================================================================== diff -u -r20854 -r21778 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/ExpensiveGoodsItem.java (.../ExpensiveGoodsItem.java) (revision 20854) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/ExpensiveGoodsItem.java (.../ExpensiveGoodsItem.java) (revision 21778) @@ -45,6 +45,10 @@ private Long expensiveGoodsId; private Long expensiveGoodsStockId; + /** + * 型号库存id + */ + private Long expensiveGoodsModelStockId ; private Long expensiveGoodsInstanceId; private Long returnGoodsRecordId;// 退货记录的id @@ -84,6 +88,7 @@ this.barcode = item.barcode; this.expensiveGoodsId = item.expensiveGoodsId; this.expensiveGoodsStockId = item.expensiveGoodsStockId; + this.expensiveGoodsModelStockId = item.expensiveGoodsModelStockId; this.expensiveGoodsInstanceId = item.expensiveGoodsInstanceId; this.returnGoodsRecordId = item.returnGoodsRecordId; this.invoiceItemId = item.invoiceItemId; @@ -174,6 +179,14 @@ this.expensiveGoodsStockId = expensiveGoodsStockId; } + public Long getExpensiveGoodsModelStockId() { + return expensiveGoodsModelStockId; + } + + public void setExpensiveGoodsModelStockId(Long expensiveGoodsModelStockId) { + this.expensiveGoodsModelStockId = expensiveGoodsModelStockId; + } + public void setExpensiveGoodsInstanceId(Long expensiveGoodsInstanceId) { this.expensiveGoodsInstanceId = expensiveGoodsInstanceId; }