Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java =================================================================== diff -u -r12731 -r12733 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 12731) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 12733) @@ -491,9 +491,11 @@ godownEntryItem.setNewBatch(newBatch); // 设置godownEntryItem和批次,标识号关联的信息 + godownEntryItem.setDisposableGoodsID(disposableGoodsID); + godownEntryItem.setDisposableGoodsStockID(disposableGoodsStock.getId()); + godownEntryItem.setDisposableGoodsBatchID(disposableGoodsBatch.getId()); godownEntryItem.setDisposableGoodsBatchStockID(disposableGoodsBatchStock.getId()); godownEntryItem.setIdentificationID(identification.getId()); - godownEntryItem.setDisposableGoodsStockID(disposableGoodsStock.getId()); godownEntryItem.setDiposableGoods(disposableGoodsStock); if(!godownEntryItem.isAssociatedInfoValidForInEntry()){ throw new RuntimeException("关联信息不正确!"); @@ -584,6 +586,8 @@ if(itemList.size() > 0){ curGodownEntry.setSupplierName(itemList.get(0).getSupplierName()); } + Long warehouseID = original.getWarehouseID(); + String warehouseName = original.getWarehouseName(); // 处理修改 for (int i = 0; i < itemList.size(); ++i) { GodownEntryItem godownEntryItem = itemList.get(i); @@ -613,10 +617,15 @@ if(identificationID == null){ throw new RuntimeException("标识号不能为空,请升级数据!"); } - DisposableGoodsBatchStock batchStock = idToDisposableGoodsBatchStockMap.get(batchID); - if(batchStock == null){ - batchStock = getDiposableGoodBatchStockByBatchNumber(diposableGoodsID,batchNumber); - if(batchStock == null){ + // 查找批次定义 + DisposableGoodsBatch disposableGoodsBatch = diposableGoodsManager.getDisposableGoodsBatchByBatchNumber(disposableGoodsID, batchNumber); + if(disposableGoodsBatch == null){ + throw new RuntimeException("批次定义不存在!"); + } + DisposableGoodsBatchStock disposableGoodsBatchStock = idToDisposableGoodsBatchStockMap.get(batchID); + if(disposableGoodsBatchStock == null){ + disposableGoodsBatchStock = diposableGoodsManager.getDisposableGoodsStockByBatchNumber(warehouseID, disposableGoodsID, batchNumber); + if(disposableGoodsBatchStock == null){ throw new RuntimeException("批次已被删除!"); } @@ -639,31 +648,35 @@ Date expDate = godownEntryItem.getExpDate(); if(!originalExpDate.equals(expDate)){ curGodownEntryItem.setExpDate(expDate); - batchStock.setExpDate(expDate); + disposableGoodsBatchStock.setExpDate(expDate); + disposableGoodsBatch.setExpDate(expDate); updateBatchStock = true; } // 供应商 String originalSupplierName = originalGodownEntryItem.getSupplierName(); String supplierName = godownEntryItem.getSupplierName(); if(!StringUtils.equals(originalSupplierName, supplierName)){ curGodownEntryItem.setSupplierName(supplierName); - batchStock.setSupplierName(supplierName); + disposableGoodsBatchStock.setSupplierName(supplierName); + disposableGoodsBatch.setSupplierName(supplierName); updateBatchStock = true; } // 灭菌批次 String originalSterileBatchNumber = originalGodownEntryItem.getSterileBatchNumber(); String sterileBatchNumber = godownEntryItem.getSterileBatchNumber(); if(!StringUtils.equals(originalSterileBatchNumber, sterileBatchNumber)){ curGodownEntryItem.setSterileBatchNumber(sterileBatchNumber); - batchStock.setSterileBatchNumber(sterileBatchNumber); + disposableGoodsBatchStock.setSterileBatchNumber(sterileBatchNumber); + disposableGoodsBatch.setSterileBatchNumber(sterileBatchNumber); updateBatchStock = true; } // 生产厂家 String originalManufacturer = originalGodownEntryItem.getManufacturer(); String manufacturer = godownEntryItem.getManufacturer(); if(!StringUtils.equals(originalManufacturer, manufacturer)){ curGodownEntryItem.setManufacturer(manufacturer); - batchStock.setManufacturer(manufacturer); + disposableGoodsBatchStock.setManufacturer(manufacturer); + disposableGoodsBatch.setManufacturer(manufacturer); updateBatchStock = true; } // 修改库存 @@ -687,16 +700,18 @@ if(!originalPrice.equals(price)){ if(!price.equals(curPrice)){// 这个判断是有必要的,有可能价格已经被并发修改过了。所以就不需要再修改。 identification.setPrice(price); - batchStock.setCost(price); + disposableGoodsBatchStock.setCost(price); + disposableGoodsBatch.setCost(price); curGodownEntryItem.setCost(price); // 同步修改发货和退货记录 synchronizePriceFromIdentificationToInvoiceAndReturnRecord(identification,originalPrice,price); updateBatchStock = true; } } + objectDao.update(disposableGoodsBatch); // 是否更新批次 if(updateBatchStock){ - objectDao.update(batchStock); + objectDao.update(disposableGoodsBatchStock); } // 是否更新一次性物品对象 if(updateDiposableGoods){ @@ -714,75 +729,85 @@ // 可能需要新建批次,一定会新建标识号 Long disposableGoodsID = godownEntryItem.getDisposableGoodsID(); Long diposableGoodsID = godownEntryItem.getDisposableGoodsStockID(); - DisposableGoodsStock diposableGoods = idToDisposableGoodsStockMap.get(diposableGoodsID); + DisposableGoods disposableGoods = idToDisposableGoodsMap.get(disposableGoodsID); + DisposableGoodsStock disposableGoodsStock = idToDisposableGoodsStockMap.get(diposableGoodsID); String batchNumber = godownEntryItem.getBatchNumber(); // 保存时,每一项都是新建标识号对象 Long disposableGoodsBatchID = godownEntryItem.getDisposableGoodsBatchID(); Long batchID = godownEntryItem.getDisposableGoodsBatchStockID(); - DisposableGoodsBatchStock batchStock = null; - if(batchID == null){ - // 有可能该批次已经存在,尝试根据批次获取 - batchStock = getDiposableGoodBatchStockByBatchNumber(diposableGoodsID,batchNumber); - if(batchStock == null){ - // 新建 批次 - batchStock = new DisposableGoodsBatchStock(); - batchStock.setDiposableGoods(diposableGoods); - diposableGoods.getGoodsBatchs().add(batchStock); - diposableGoodBatchStockManager.saveOrUpdate(batchStock); - newBatch = true; - } - idToDisposableGoodsBatchStockMap.put(batchStock.getId(), batchStock); - }else{ - // 更新批次 - batchStock = idToDisposableGoodsBatchStockMap.get(batchID); - if(batchStock == null){ - // 批次已经不存在 - throw new RuntimeException("批次已被删除!"); - } + + ///// + // 查找批次定义 + DisposableGoodsBatch disposableGoodsBatch = diposableGoodsManager.getDisposableGoodsBatchByBatchNumber(disposableGoodsID, batchNumber); + if(disposableGoodsBatch == null){ + disposableGoodsBatch = newDisposableGoodsBatch(disposableGoods,warehouseID, warehouseName, godownEntryItem); } - // 更新批次相关信息,因为是新增项,不管有无修改批次信息,都更新批次对象 - batchStock.setDisposableGoodsBatchID(disposableGoodsBatchID); - batchStock.setDisposableGoodsBatchID(disposableGoodsBatchID); - batchStock.setBatchNumber(godownEntryItem.getBatchNumber()); - batchStock.setCost(godownEntryItem.getCost()); - batchStock.setExpDate(godownEntryItem.getExpDate()); - batchStock.setManufacturer(godownEntryItem.getManufacturer()); - batchStock.setSterileBatchNumber(godownEntryItem.getSterileBatchNumber()); - batchStock.setSupplierName(godownEntryItem.getSupplierName()); - batchStock.setProducingArea(godownEntryItem.getProducingArea()); - batchStock.setWarehouseID(entry.getWarehouseID()); - batchStock.setWarehouseName(entry.getWarehouseName()); + // 查找批次库存 + DisposableGoodsBatchStock disposableGoodsBatchStock = diposableGoodsManager.getDisposableGoodsStockByBatchNumber(warehouseID, disposableGoodsID, batchNumber); + // 保存时,每一项都是新建标识号对象 + Long disposableGoodsBatchStockID = godownEntryItem.getDisposableGoodsBatchStockID(); + if(disposableGoodsBatchStock == null){ + // 新建 批次 + disposableGoodsBatchStock = newDisposableGoodsBatchStock(disposableGoods, disposableGoodsStock, disposableGoodsBatch, warehouseID, warehouseName, godownEntryItem); + + newBatch = true; + idToDisposableGoodsBatchStockMap.put(disposableGoodsBatchStock.getId(), disposableGoodsBatchStock); + } + // 更新一次性物品定义 + disposableGoods.setReferencePrice(godownEntryItem.getCost()); + // 更新批次定义 + disposableGoodsBatch.setCost(godownEntryItem.getCost()); + disposableGoodsBatch.setExpDate(godownEntryItem.getExpDate()); + disposableGoodsBatch.setManufacturer(godownEntryItem.getManufacturer()); + disposableGoodsBatch.setSterileBatchNumber(godownEntryItem.getSterileBatchNumber()); + disposableGoodsBatch.setSupplierName(godownEntryItem.getSupplierName()); + disposableGoodsBatch.setProducingArea(godownEntryItem.getProducingArea()); + // 更新批次库存相关信息 + disposableGoodsBatchStock.setCost(godownEntryItem.getCost()); + disposableGoodsBatchStock.setExpDate(godownEntryItem.getExpDate()); + disposableGoodsBatchStock.setManufacturer(godownEntryItem.getManufacturer()); + disposableGoodsBatchStock.setSterileBatchNumber(godownEntryItem.getSterileBatchNumber()); + disposableGoodsBatchStock.setSupplierName(godownEntryItem.getSupplierName()); + disposableGoodsBatchStock.setProducingArea(godownEntryItem.getProducingArea()); // 新建标识号对象 IdentificationOfDisposableGoods identification = new IdentificationOfDisposableGoods(); + identification.setDisposableGoodsID(disposableGoodsID); - identification.setDisposableGoodsBatchID(disposableGoodsBatchID); - identification.setDisposableGoodsStockID(batchStock.getId()); - identification.setBatchStock(batchStock); + identification.setDisposableGoodsBatchID(disposableGoodsBatch.getId()); + identification.setDisposableGoodsStockID(disposableGoodsStock.getId()); + identification.setBatchStock(disposableGoodsBatchStock); + disposableGoodsBatchStock.getIdentifications().add(identification); identification.adjustAmount(godownEntryItem.getAmount()); + identification.setBatchStock(disposableGoodsBatchStock); + identification.setConclusion(godownEntryItem.getConclusion()); identification.setEntryDate(entry.getTime()); identification.setIdentification("");// 暂时为空,待确定生成规则 - identification.setConclusion(godownEntryItem.getConclusion()); identification.setPrice(godownEntryItem.getCost()); identification.setWarehouseID(entry.getWarehouseID()); identification.setWarehouseName(entry.getWarehouseName()); objectDao.save(identification); + // 设置godownEntryItem和批次,标识号关联的信息 - godownEntryItem.setDisposableGoodsBatchStockID(batchStock.getId()); + godownEntryItem.setDisposableGoodsID(disposableGoodsID); + godownEntryItem.setDisposableGoodsStockID(disposableGoodsStock.getId()); + godownEntryItem.setDisposableGoodsBatchID(disposableGoodsBatch.getId()); + godownEntryItem.setDisposableGoodsBatchStockID(disposableGoodsBatchStock.getId()); godownEntryItem.setIdentificationID(identification.getId()); - godownEntryItem.setDisposableGoodsStockID(batchStock.getDiposableGoods().getId()); + godownEntryItem.setNewBatch(newBatch); - godownEntryItem.setDiposableGoods(diposableGoods); + godownEntryItem.setDiposableGoods(disposableGoodsStock); godownEntryItem.setGodownEntry(curGodownEntry); if(!godownEntryItem.isAssociatedInfoValidForInEntry()){ throw new RuntimeException("关联信息不正确!"); } // 新建项需要修改一次性物品价格 - diposableGoods.setReferencePrice(godownEntryItem.getCost()); + disposableGoodsStock.setReferencePrice(godownEntryItem.getCost()); - objectDao.update(batchStock); - objectDao.update(diposableGoods); + objectDao.update(disposableGoods); + objectDao.update(disposableGoodsStock); + objectDao.update(disposableGoodsBatch); + objectDao.update(disposableGoodsBatchStock); - // 保存godownEntryItem godownEntryItem.setGodownEntry(curGodownEntry); curItemList.add(godownEntryItem); @@ -809,13 +834,13 @@ Long diposableGoodsID = originalGodownEntryItem.getDisposableGoodsStockID(); DisposableGoodsStock diposableGoods = idToDisposableGoodsStockMap.get(diposableGoodsID); // 保存时,每一项都是新建标识号对象 - Long batchID = originalGodownEntryItem.getDisposableGoodsBatchStockID(); + Long disposableGoodsBatchStockID = originalGodownEntryItem.getDisposableGoodsBatchStockID(); Long identificationID = originalGodownEntryItem.getIdentificationID(); if(identificationID == null){ throw new RuntimeException("标识号不能为空,请升级数据!"); } - DisposableGoodsBatchStock batchStock = idToDisposableGoodsBatchStockMap.get(batchID); - if(batchStock == null){ + DisposableGoodsBatchStock disposableGoodsBatchStock = idToDisposableGoodsBatchStockMap.get(disposableGoodsBatchStockID); + if(disposableGoodsBatchStock == null){ throw new RuntimeException("批次已被删除!"); } IdentificationOfDisposableGoods identification = idToIdentificationMap.get(identificationID); @@ -826,7 +851,7 @@ Long amountChange = -originalAmount; identification.adjustAmount(amountChange); - objectDao.update(batchStock); + objectDao.update(disposableGoodsBatchStock); objectDao.update(diposableGoods); diposableGoods.setWarehouseID(entry.getWarehouseID()); diposableGoods.setWarehouseName(entry.getWarehouseName());