Index: ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/service/ReturnGoodsRecordManagerImpl.java =================================================================== diff -u -r28556 -r28687 --- ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/service/ReturnGoodsRecordManagerImpl.java (.../ReturnGoodsRecordManagerImpl.java) (revision 28556) +++ ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/service/ReturnGoodsRecordManagerImpl.java (.../ReturnGoodsRecordManagerImpl.java) (revision 28687) @@ -452,7 +452,7 @@ } } // 高值耗材退货 - private List returnExpensiveDisposablegoods(Long warehouseID,String depart,ReturnGoodsItem returnGoodsItem, + private List returnExpensiveDisposablegoods(Long targetWarehouseID,String depart,ReturnGoodsItem returnGoodsItem, Map idToDisposableGoodsMap, Map disposableGoodsIDToDisposableGoodsStockMap, Map idToDisposableGoodsStockMap, @@ -519,10 +519,39 @@ returnGoodsItem.setReturnedAmount(returnGoodsItem.getReturnedAmount() + curAmountCanReturn);// 设置退货汇总项的已退货数量 // 一次性物品库存修改 Long amountChange = curAmountCanReturn; - expensiveDisposablegoods.adjustAmount(amountChange); + //源批次库存对象及物品库存对象 + DisposableGoodsBatchStock sourceBatchStock = expensiveDisposablegoods.getDisposableGoodsBatchStock(); + DisposableGoodsStock sourceDgStock = sourceBatchStock.getDiposableGoods(); + //批次定义与物品定义id + Long batchId = sourceBatchStock.getDisposableGoodsBatchId(); + + //根据目标仓库id及批次定义id查询出目标批次库存对象及目标物品定义库存对象 + DisposableGoodsBatchStock targetBatchStock = + (DisposableGoodsBatchStock)objectDao.getBySql_ForUpdate(DisposableGoodsBatchStock.class.getSimpleName(), + String.format("where warehouseID=%s and disposableGoodsBatchId=%s", targetWarehouseID,batchId)); + if(targetBatchStock == null){ + throw new RuntimeException(String.format("仓库id为%s的高值耗材 %s(条码=%s) 的批次库存对象不存在,退货失败!", targetWarehouseID,diposableGoodsShowName,barcode)); + } + DisposableGoodsStock targetDgStock = targetBatchStock.getDiposableGoods(); + if(targetDgStock == null){ + throw new RuntimeException(String.format("仓库id为%s的高值耗材 %s(条码=%s) 的库存对象不存在,退货失败!", targetWarehouseID, diposableGoodsShowName,barcode)); + } + //之前的库存调整代(可能只调整了源批次库存的库存数量,目标库存未加上,高值耗材实例的库存对象及批次库存对象未变更为目标库存的库存对象及批次库存对象) + /*expensiveDisposablegoods.adjustAmount(amountChange); objectDao.update(expensiveDisposablegoods); objectDao.update(expensiveDisposablegoods.getDisposableGoodsBatchStock()); - objectDao.update(expensiveDisposablegoods.getDisposableGoodsBatchStock().getDiposableGoods()); + objectDao.update(expensiveDisposablegoods.getDisposableGoodsBatchStock().getDiposableGoods());*/ + //调整后的库存调整代码 + sourceBatchStock.setStorage(sourceBatchStock.getStorage() - 1); + sourceDgStock.setAmount(sourceDgStock.getAmount() - 1); + targetBatchStock.setStorage(targetBatchStock.getStorage() + 1); + targetDgStock.setAmount(targetDgStock.getAmount() + 1); + objectDao.saveOrUpdate(sourceBatchStock); + objectDao.saveOrUpdate(sourceDgStock); + objectDao.saveOrUpdate(targetBatchStock); + objectDao.saveOrUpdate(targetDgStock); + expensiveDisposablegoods.setDisposableGoodsBatchStock(targetBatchStock); + expensiveDisposablegoods.setDisposableGoodsStockID(targetDgStock.getId()); //库存调整记录(高值耗材库存变动记录) List result = new ArrayList(); @@ -786,10 +815,17 @@ } return batchs; } + + /** + * 退货业务方法 + * @param returnGoodsRecord 退货对象 + * @return + */ private Map saveForReturnDiposableGoods_internal(ReturnGoodsRecord returnGoodsRecord){ String depart = returnGoodsRecord.getDepart(); - Long warehouseID = returnGoodsRecord.getWarehouseID(); - if(!DatabaseUtil.isPoIdValid(warehouseID)){ + //退至哪个仓库-即目标仓库 + Long returnTargetWarehouseID = returnGoodsRecord.getWarehouseID(); + if(!DatabaseUtil.isPoIdValid(returnTargetWarehouseID)){ throw new RuntimeException("仓库不能为空!"); } Map returnMsg = new HashMap(); @@ -817,7 +853,7 @@ List returnDiposableGoodsItems = new LinkedList();// 退货明细 summaryReturnDiposableGoodsInfo(returnGoodsRecord, disposableGoodsIDsSet, disposableGoodsStockIDsSet, expensiveDisposablegoodsIdsSet,disposableGoodsBatchIDsSet, disposableGoodsBatchStockIDsSet, disposableGoodsBatchNumberSet, disposableGoodsBarcodesSet, identificationIDsSet); // 锁定一次性物品 - lockAndGetDiposableGoodsResources(warehouseID, disposableGoodsIDsSet, disposableGoodsStockIDsSet, expensiveDisposablegoodsIdsSet,disposableGoodsBatchIDsSet, disposableGoodsBatchStockIDsSet, disposableGoodsBatchNumberSet, identificationIDsSet, idToDisposableGoodsMap, disposableGoodsIDToDisposableGoodsStockMap, idToDisposableGoodsStockMap,idToExpensiveDisposablegoodsMap,barcodeToExpensiveDisposablegoodsMap, idToDisposableGoodsBatchMap, idToDisposableGoodsBatchStockMap, idToIdentificationMap); + lockAndGetDiposableGoodsResources(returnTargetWarehouseID, disposableGoodsIDsSet, disposableGoodsStockIDsSet, expensiveDisposablegoodsIdsSet,disposableGoodsBatchIDsSet, disposableGoodsBatchStockIDsSet, disposableGoodsBatchNumberSet, identificationIDsSet, idToDisposableGoodsMap, disposableGoodsIDToDisposableGoodsStockMap, idToDisposableGoodsStockMap,idToExpensiveDisposablegoodsMap,barcodeToExpensiveDisposablegoodsMap, idToDisposableGoodsBatchMap, idToDisposableGoodsBatchStockMap, idToIdentificationMap); // 保存退货记录 saveOrUpdate(returnGoodsRecord); @@ -843,7 +879,7 @@ // 关联批次 returnGoodsItem.setDiposableGoodBatchStock(disposableGoodsBatchStock); if(disposableGoods.expensiveDiposablegoods()){ - List disposableGoodsStorageAdjustVoList = returnExpensiveDisposablegoods(warehouseID,depart,returnGoodsItem,idToDisposableGoodsMap,disposableGoodsIDToDisposableGoodsStockMap,idToDisposableGoodsStockMap,idToExpensiveDisposablegoodsMap,barcodeToExpensiveDisposablegoodsMap,idToDisposableGoodsBatchMap,idToDisposableGoodsBatchStockMap,returnDiposableGoodsItems); + List disposableGoodsStorageAdjustVoList = returnExpensiveDisposablegoods(returnTargetWarehouseID,depart,returnGoodsItem,idToDisposableGoodsMap,disposableGoodsIDToDisposableGoodsStockMap,idToDisposableGoodsStockMap,idToExpensiveDisposablegoodsMap,barcodeToExpensiveDisposablegoodsMap,idToDisposableGoodsBatchMap,idToDisposableGoodsBatchStockMap,returnDiposableGoodsItems); if(CollectionUtils.isNotEmpty(disposableGoodsStorageAdjustVoList)){ disposableGoodsStorageAdjustVoTotalList.addAll(disposableGoodsStorageAdjustVoList); } @@ -853,7 +889,7 @@ } // 页面传过来的数量为申领规格数量,此处还原为最小单位数量 returnGoodsItem.setAmount(Integer.valueOf(ApplicationSpecificationHelper.calculateAmount(returnGoodsItem.getAmount(), disposableGoods.getTransferScale()))); - List disposableGoodsStorageAdjustVoList = returnDiposableGoods(warehouseID,depart,returnGoodsItem,idToDisposableGoodsMap,disposableGoodsIDToDisposableGoodsStockMap,idToDisposableGoodsStockMap,idToDisposableGoodsBatchMap,idToDisposableGoodsBatchStockMap,returnDiposableGoodsItems); + List disposableGoodsStorageAdjustVoList = returnDiposableGoods(returnTargetWarehouseID,depart,returnGoodsItem,idToDisposableGoodsMap,disposableGoodsIDToDisposableGoodsStockMap,idToDisposableGoodsStockMap,idToDisposableGoodsBatchMap,idToDisposableGoodsBatchStockMap,returnDiposableGoodsItems); if(CollectionUtils.isNotEmpty(disposableGoodsStorageAdjustVoList)){ disposableGoodsStorageAdjustVoTotalList.addAll(disposableGoodsStorageAdjustVoList); } @@ -910,7 +946,7 @@ returnMsg.put("success", true); returnMsg.put("zeroStockBatch", convertToPrintInfo(zeroStockBatch)); if(true){ -// throw new RuntimeException("速度测试!"); + //throw new RuntimeException("速度测试!"); } return returnMsg; }