Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java =================================================================== diff -u -r12832 -r12837 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 12832) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 12837) @@ -193,8 +193,7 @@ List itemList = new ArrayList(godownEntry.getItemsList()); for (GodownEntryItem godownEntryItem : itemList) { - deleteGodownEntryItem(godownEntryItem, idToDisposableGoodsStockMap, - idToDisposableGoodsBatchStockMap, idToIdentificationMap); + deleteGodownEntryItem(godownEntryItem, idToDisposableGoodsMap, disposableGoodsIDToDisposableGoodsStockMap, idToDisposableGoodsStockMap, idToDisposableGoodsBatchMap, idToDisposableGoodsBatchStockMap, idToIdentificationMap); } // 构造出库参数 delete(godownEntry);// 删除入库单 @@ -240,7 +239,7 @@ // 删除各个item List itemList = new ArrayList(godownEntry.getItemsList()); for (GodownEntryItem godownEntryItem : itemList) { - deleteGodownOutEntryItem(godownEntryItem, idToDisposableGoodsStockMap, idToDisposableGoodsBatchStockMap, idToIdentificationMap); + deleteGodownOutEntryItem(godownEntryItem, idToDisposableGoodsMap, disposableGoodsIDToDisposableGoodsStockMap, idToDisposableGoodsStockMap, idToDisposableGoodsBatchMap, idToDisposableGoodsBatchStockMap, idToIdentificationMap); } // 删除退库单 delete(godownEntry); @@ -420,14 +419,14 @@ List itemList = entry.getItemsList(); for (int i = 0; i < itemList.size(); ++i) { GodownEntryItem godownEntryItem = itemList.get(i); - godownEntryByItem(entry, warehouseID, warehouseName, + warehousingByGodownEntryItem(entry, warehouseID, warehouseName, idToDisposableGoodsMap, idToDisposableGoodsStockMap, idToBatchStockMap, godownEntryItem); objectDao.update(godownEntryItem);// 更新item } } - private void godownEntryByItem(GodownEntry entry, Long warehouseID, + private void warehousingByGodownEntryItem(GodownEntry entry, Long warehouseID, String warehouseName, Map idToDisposableGoodsMap, Map idToDisposableGoodsStockMap, @@ -564,33 +563,64 @@ updateGodownEntry_internal(original, entry, result); } private void deleteGodownEntryItem(GodownEntryItem godownEntryItem, - Map idToDiposableGoodsMap, - Map idToBatchStockMap, + Map idToDisposableGoodsMap , + Map disposableGoodsIDToDisposableGoodsStockMap, + Map idToDisposableGoodsStockMap, + Map idToDisposableGoodsBatchMap, + Map idToDisposableGoodsBatchStockMap, Map idToIdentificationMap) { - // 删除该项 - Long diposableGoodsID = godownEntryItem.getDisposableGoodsStockID(); - DisposableGoodsStock diposableGoods = idToDiposableGoodsMap.get(diposableGoodsID); - // 保存时,每一项都是新建标识号对象 - Long batchID = godownEntryItem.getDisposableGoodsBatchStockID(); + // 修改时,每一项都应该有ID + Long disposableGoodsID = godownEntryItem.getDisposableGoodsID(); + Long disposableGoodsStockID = godownEntryItem.getDisposableGoodsStockID(); + Long disposableGoodsBatchID = godownEntryItem.getDisposableGoodsBatchID(); + Long disposableGoodsBatchStockID = godownEntryItem.getDisposableGoodsBatchStockID(); Long identificationID = godownEntryItem.getIdentificationID(); + if(disposableGoodsID == null){ + throw new RuntimeException("物品定义id不能为空,请升级数据!"); + } + if(disposableGoodsStockID == null){ + throw new RuntimeException("物品库存id不能为空,请升级数据!"); + } + if(disposableGoodsBatchID == null){ + throw new RuntimeException("物品批次id不能为空,请升级数据!"); + } + if(disposableGoodsBatchStockID == null){ + throw new RuntimeException("物品批次库存id不能为空,请升级数据!"); + } if(identificationID == null){ throw new RuntimeException("标识号不能为空,请升级数据!"); } - DisposableGoodsBatchStock batchStock = idToBatchStockMap.get(batchID); - if(batchStock == null){ - throw new RuntimeException("批次已被删除!"); - } + DisposableGoods disposableGoods = idToDisposableGoodsMap.get(disposableGoodsID); + DisposableGoodsStock disposableGoodsStock = idToDisposableGoodsStockMap.get(disposableGoodsStockID); + // 查找批次定义 + DisposableGoodsBatch disposableGoodsBatch = idToDisposableGoodsBatchMap.get(disposableGoodsBatchID); + DisposableGoodsBatchStock disposableGoodsBatchStock = idToDisposableGoodsBatchStockMap.get(disposableGoodsBatchStockID); IdentificationOfDisposableGoods identification = idToIdentificationMap.get(identificationID); + if(disposableGoods == null){ + throw new RuntimeException("物品定义不存在!"); + } + if(disposableGoodsStock == null){ + throw new RuntimeException("物品库存不存在!"); + } + if(disposableGoodsBatch == null){ + throw new RuntimeException("物品批次不存在!"); + } + if(disposableGoodsBatchStock == null){ + throw new RuntimeException("物品批次库存不存在!"); + } if(identification == null){ throw new RuntimeException("标识号已被删除!"); } Long amount = godownEntryItem.getAmount(); Long amountChange = -amount; identification.adjustAmount(amountChange);// 调整库存 + objectDao.update(identification); - objectDao.update(batchStock); - objectDao.update(diposableGoods); + objectDao.update(disposableGoodsBatchStock); + objectDao.update(disposableGoodsStock); + objectDao.update(disposableGoodsBatch); + objectDao.update(disposableGoods); // 删除godownEntryItem // 删除godownEntryItem godownEntryItem.getGodownEntry().getItemsList().remove(godownEntryItem); @@ -786,7 +816,7 @@ if(itemID != null){// 有id就不是新增项 continue; } - godownEntryByItem(curGodownEntry, warehouseID, warehouseName, idToDisposableGoodsMap, idToDisposableGoodsStockMap, idToDisposableGoodsBatchStockMap, godownEntryItem); + warehousingByGodownEntryItem(curGodownEntry, warehouseID, warehouseName, idToDisposableGoodsMap, idToDisposableGoodsStockMap, idToDisposableGoodsBatchStockMap, godownEntryItem); // 保存godownEntryItem godownEntryItem.setGodownEntry(curGodownEntry); @@ -810,31 +840,58 @@ // 被并发删除了。也不需要处理 continue; } - // 删除该项 - Long diposableGoodsID = originalGodownEntryItem.getDisposableGoodsStockID(); - DisposableGoodsStock diposableGoods = idToDisposableGoodsStockMap.get(diposableGoodsID); - // 保存时,每一项都是新建标识号对象 + // 修改时,每一项都应该有ID + Long disposableGoodsID = originalGodownEntryItem.getDisposableGoodsID(); + Long disposableGoodsStockID = originalGodownEntryItem.getDisposableGoodsStockID(); + Long disposableGoodsBatchID = originalGodownEntryItem.getDisposableGoodsBatchID(); Long disposableGoodsBatchStockID = originalGodownEntryItem.getDisposableGoodsBatchStockID(); Long identificationID = originalGodownEntryItem.getIdentificationID(); + if(disposableGoodsID == null){ + throw new RuntimeException("物品定义id不能为空,请升级数据!"); + } + if(disposableGoodsStockID == null){ + throw new RuntimeException("物品库存id不能为空,请升级数据!"); + } + if(disposableGoodsBatchID == null){ + throw new RuntimeException("物品批次id不能为空,请升级数据!"); + } + if(disposableGoodsBatchStockID == null){ + throw new RuntimeException("物品批次库存id不能为空,请升级数据!"); + } if(identificationID == null){ throw new RuntimeException("标识号不能为空,请升级数据!"); } + DisposableGoods disposableGoods = idToDisposableGoodsMap.get(disposableGoodsID); + DisposableGoodsStock disposableGoodsStock = idToDisposableGoodsStockMap.get(disposableGoodsStockID); + // 查找批次定义 + DisposableGoodsBatch disposableGoodsBatch = idToDisposableGoodsBatchMap.get(disposableGoodsBatchID); DisposableGoodsBatchStock disposableGoodsBatchStock = idToDisposableGoodsBatchStockMap.get(disposableGoodsBatchStockID); + IdentificationOfDisposableGoods identification = idToIdentificationMap.get(identificationID); + if(disposableGoods == null){ + throw new RuntimeException("物品定义不存在!"); + } + if(disposableGoodsStock == null){ + throw new RuntimeException("物品库存不存在!"); + } + if(disposableGoodsBatch == null){ + throw new RuntimeException("物品批次不存在!"); + } if(disposableGoodsBatchStock == null){ - throw new RuntimeException("批次已被删除!"); + throw new RuntimeException("物品批次库存不存在!"); } - IdentificationOfDisposableGoods identification = idToIdentificationMap.get(identificationID); if(identification == null){ throw new RuntimeException("标识号已被删除!"); } Long originalAmount = originalGodownEntryItem.getAmount(); Long amountChange = -originalAmount; identification.adjustAmount(amountChange); + objectDao.update(identification); objectDao.update(disposableGoodsBatchStock); - objectDao.update(diposableGoods); - diposableGoods.setWarehouseID(entry.getWarehouseID()); - diposableGoods.setWarehouseName(entry.getWarehouseName()); + objectDao.update(disposableGoodsStock); + objectDao.update(disposableGoodsBatch); + objectDao.update(disposableGoods); + // TODO 如果标识号库存为0了,并且没有入库单引用它,那么可以删除标识号 // if(false){ // batchStock.getIdentifications().remove(identification); @@ -1493,8 +1550,11 @@ } private void deleteGodownOutEntryItem(GodownEntryItem godownEntryItem, - Map idToDiposableGoodsMap, - Map idToBatchStockMap, + Map idToDisposableGoodsMap , + Map disposableGoodsIDToDisposableGoodsStockMap, + Map idToDisposableGoodsStockMap, + Map idToDisposableGoodsBatchMap, + Map idToDisposableGoodsBatchStockMap, Map idToIdentificationMap) { Long itemID = godownEntryItem.getId(); // 删除该项 @@ -1503,27 +1563,40 @@ List diposableGoodsItems = objectDao .findBySql(GodownEntryDiposableGoodsItem.class.getSimpleName(), sql); - if (diposableGoodsItems == null) { - throw new RuntimeException("一次性物品明细为空!"); + // 修改时,每一项都应该有ID + Long disposableGoodsID = godownEntryItem.getDisposableGoodsID(); + Long disposableGoodsStockID = godownEntryItem.getDisposableGoodsStockID(); + Long disposableGoodsBatchID = godownEntryItem.getDisposableGoodsBatchID(); + Long disposableGoodsBatchStockID = godownEntryItem.getDisposableGoodsBatchStockID(); + if(disposableGoodsID == null){ + throw new RuntimeException("物品定义id不能为空,请升级数据!"); } - Long diposableGoodsID = godownEntryItem.getDisposableGoodsStockID(); - if (diposableGoodsID == null) { - throw new RuntimeException("一次性物品ID为空!"); + if(disposableGoodsStockID == null){ + throw new RuntimeException("物品库存id不能为空,请升级数据!"); } - DisposableGoodsStock diposableGoods = idToDiposableGoodsMap - .get(diposableGoodsID); - if (diposableGoods == null) { - throw new RuntimeException("物品已被删除!"); + if(disposableGoodsBatchID == null){ + throw new RuntimeException("物品批次id不能为空,请升级数据!"); } - Long batchID = godownEntryItem.getDisposableGoodsBatchStockID(); - if (batchID == null) { - throw new RuntimeException("批次ID为空!"); + if(disposableGoodsBatchStockID == null){ + throw new RuntimeException("物品批次库存id不能为空,请升级数据!"); } - DisposableGoodsBatchStock batchStock = idToBatchStockMap.get(batchID); - if (batchStock == null) { - throw new RuntimeException("批次已被删除!"); + DisposableGoods disposableGoods = idToDisposableGoodsMap.get(disposableGoodsID); + DisposableGoodsStock disposableGoodsStock = idToDisposableGoodsStockMap.get(disposableGoodsStockID); + // 查找批次定义 + DisposableGoodsBatch disposableGoodsBatch = idToDisposableGoodsBatchMap.get(disposableGoodsBatchID); + DisposableGoodsBatchStock disposableGoodsBatchStock = idToDisposableGoodsBatchStockMap.get(disposableGoodsBatchStockID); + if(disposableGoods == null){ + throw new RuntimeException("物品定义不存在!"); } - + if(disposableGoodsStock == null){ + throw new RuntimeException("物品库存不存在!"); + } + if(disposableGoodsBatch == null){ + throw new RuntimeException("物品批次不存在!"); + } + if(disposableGoodsBatchStock == null){ + throw new RuntimeException("物品批次库存不存在!"); + } for (GodownEntryDiposableGoodsItem diposableGoodsItem : diposableGoodsItems) { Long identificationID = diposableGoodsItem.getIdentificationID(); if (identificationID == null) { @@ -1537,9 +1610,11 @@ Long amount = diposableGoodsItem.getAmount(); identification.adjustAmount(amount);// 增加库存 - objectDao.update(identification);// 更新库存 - objectDao.update(batchStock); - objectDao.update(diposableGoods); + objectDao.update(identification); + objectDao.update(disposableGoodsBatchStock); + objectDao.update(disposableGoodsStock); + objectDao.update(disposableGoodsBatch); + objectDao.update(disposableGoods); objectDao.delete(diposableGoodsItem);// 删除明细项 } @@ -1686,7 +1761,7 @@ continue; } // 删除该项 - deleteGodownOutEntryItem(curGodownEntryItem, idToDisposableGoodsStockMap, idToDisposableGoodsBatchStockMap, idToIdentificationMap); + deleteGodownOutEntryItem(curGodownEntryItem, idToDisposableGoodsMap, disposableGoodsIDToDisposableGoodsStockMap, idToDisposableGoodsStockMap, idToDisposableGoodsBatchMap, idToDisposableGoodsBatchStockMap, idToIdentificationMap); } // 更新入库单属性 updateGodownEntryProperties(original, entry, curGodownEntry);