Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java =================================================================== diff -u -r13019 -r13122 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 13019) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 13122) @@ -297,6 +297,10 @@ Map result) { saveGodownEntry_internal(entry, result); } + // 保存入库单,只修改库存,不改其他属性,用于盘点与调拨 + public void saveGodownEntryModifyOnlyAmount_TRANS_REQUIRED(GodownEntry entry,Map result){ + saveGodownEntryModifyOnlyAmount_internal(entry, result); + } public void saveGodownEntry_TRANS_MANDATORY(GodownEntry entry, Map result) { @@ -352,7 +356,43 @@ } } } + private void saveGodownEntryModifyOnlyAmount_internal(Collection entrys, + Map result) { + if (entrys == null || entrys.isEmpty()) { + return; + } + Set disposableGoodsIDsSet = new HashSet();// 一次性物品id集合 + Set disposableGoodsStockIDsSet = new HashSet();// 一次性物品库存id集合 + Set disposableGoodsBatchIDsSet = new HashSet();// 批次id集合 + Set disposableGoodsBatchStockIDsSet = new HashSet();// 批次库存id集合 + Set disposableGoodsBatchNumberSet = new HashSet();// 批次号集合 + Set identificationIDsSet = new HashSet();// 标识号id集合 + Map idToDisposableGoodsMap = new HashMap(); + Map disposableGoodsIDToDisposableGoodsStockMap = new HashMap(); + Map idToDisposableGoodsStockMap = new HashMap(); + Map idToDisposableGoodsBatchMap = new HashMap(); + Map idToDisposableGoodsBatchStockMap = new HashMap(); + Map idToIdentificationMap = new HashMap(); + Long warehouseID = null; + String warehouseName = null; + for (GodownEntry godownEntry : entrys) { + warehouseID = godownEntry.getWarehouseID(); + warehouseName = godownEntry.getWarehouseName(); + // 汇总信息 + summaryDiposableGoodsInfo(godownEntry, disposableGoodsIDsSet,disposableGoodsStockIDsSet,disposableGoodsBatchIDsSet, + disposableGoodsBatchStockIDsSet, disposableGoodsBatchNumberSet, identificationIDsSet); + } + // 获取并锁定一次性物品相关资源 + lockAndGetDiposableGoodsResources(GodownEntry.TYPE_IN,warehouseID,warehouseName,disposableGoodsIDsSet,disposableGoodsStockIDsSet,disposableGoodsBatchIDsSet, disposableGoodsBatchStockIDsSet, + disposableGoodsBatchNumberSet, identificationIDsSet, idToDisposableGoodsMap,disposableGoodsIDToDisposableGoodsStockMap,idToDisposableGoodsStockMap,idToDisposableGoodsBatchMap, + idToDisposableGoodsBatchStockMap, idToIdentificationMap); + for (GodownEntry godownEntry : entrys) { + saveGodownEntryModifyOnlyAmount_internal(godownEntry, warehouseID, warehouseName,idToDisposableGoodsMap, disposableGoodsIDToDisposableGoodsStockMap, idToDisposableGoodsStockMap, idToDisposableGoodsBatchMap, idToDisposableGoodsBatchStockMap, idToIdentificationMap); + } + } + + private DisposableGoodsBatchStock getDiposableGoodBatchStockByBatchNumber( Long diposableGoodsID, String batchNumber) { String sql = String.format( @@ -367,6 +407,12 @@ entrys.add(godownEntry); saveGodownEntry_internal(entrys, result); } + private void saveGodownEntryModifyOnlyAmount_internal(GodownEntry godownEntry, Map result) { + List entrys = new ArrayList(1); + entrys.add(godownEntry); + saveGodownEntryModifyOnlyAmount_internal(entrys, result); + } + private DisposableGoodsBatch newDisposableGoodsBatch(DisposableGoods diposableGoods,Long warehouseID,String warehouseName,GodownEntryItem godownEntryItem){ DisposableGoodsBatch disposableGoodsBatch = new DisposableGoodsBatch(); @@ -427,6 +473,22 @@ objectDao.update(godownEntryItem);// 更新item } } + + private void saveGodownEntryModifyOnlyAmount_internal(GodownEntry entry, + Long warehouseID,String warehouseName, + Map idToDisposableGoodsMap,Map disposableGoodsIDToDisposableGoodsStockMap,Map idToDisposableGoodsStockMap, + Map idToDisposableGoodsBatchMap ,Map idToBatchStockMap, + Map idToIdentificationMap) { + save(entry); + List itemList = entry.getItemsList(); + for (int i = 0; i < itemList.size(); ++i) { + GodownEntryItem godownEntryItem = itemList.get(i); + warehousingByGodownEntryItemModifyOnlyAmount(entry, warehouseID, warehouseName, + idToDisposableGoodsMap, idToDisposableGoodsStockMap, + idToBatchStockMap, godownEntryItem); + objectDao.update(godownEntryItem);// 更新item + } + } private void warehousingByGodownEntryItem(GodownEntry entry, Long warehouseID, String warehouseName, @@ -499,24 +561,10 @@ disposableGoodsBatchStock.setSterileBatchNumber(godownEntryItem.getSterileBatchNumber()); disposableGoodsBatchStock.setSupplierName(godownEntryItem.getSupplierName()); disposableGoodsBatchStock.setProducingArea(godownEntryItem.getProducingArea()); -// disposableGoodsBatchStock.setWarehouseID(entry.getWarehouseID()); -// disposableGoodsBatchStock.setWarehouseName(entry.getWarehouseName()); - // 新建标识号对象 - IdentificationOfDisposableGoods identification = new IdentificationOfDisposableGoods(); - - identification.setDisposableGoodsID(disposableGoodsID); - 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.setPrice(godownEntryItem.getCost()); - identification.setWarehouseID(entry.getWarehouseID()); - identification.setWarehouseName(entry.getWarehouseName()); + IdentificationOfDisposableGoods identification = newIdentificationOfDisposableGoods( + entry, godownEntryItem, disposableGoodsID, + disposableGoodsStock, disposableGoodsBatch, + disposableGoodsBatchStock); objectDao.save(identification); godownEntryItem.setNewBatch(newBatch); @@ -537,7 +585,103 @@ objectDao.update(disposableGoodsBatch); objectDao.update(disposableGoodsBatchStock); } + private void warehousingByGodownEntryItemModifyOnlyAmount(GodownEntry entry, Long warehouseID, + String warehouseName, + Map idToDisposableGoodsMap, + Map idToDisposableGoodsStockMap, + Map idToDisposableGoodsBatchStockMap, + GodownEntryItem godownEntryItem) { + boolean newBatch = false; + Long disposableGoodsID = godownEntryItem.getDisposableGoodsID(); + Long disposableGoodsStockID = godownEntryItem.getDisposableGoodsStockID(); + DisposableGoods disposableGoods = idToDisposableGoodsMap.get(disposableGoodsID); + DisposableGoodsStock disposableGoodsStock = null; + + String batchNumber = godownEntryItem.getBatchNumber(); + + if(disposableGoods == null){ + throw new RuntimeException("物品未定义!"); + } + if(StringUtils.isBlank(batchNumber)){ + throw new RuntimeException("批次号不能为空!"); + } + if(disposableGoodsStockID != null){ + disposableGoodsStock = idToDisposableGoodsStockMap.get(disposableGoodsStockID); + } + // 查找一次性物品库存 + if(disposableGoodsStock == null){ + disposableGoodsStock = disposableGoodsStockManager.getDisposableGoodsStockByDisposableGoodsId(disposableGoodsID.toString(), warehouseID.toString()); + } + if(disposableGoodsStock == null){ + throw new RuntimeException("物品库存对象未找到!"); + } + // 校验仓库是否是当前仓库 + if(!warehouseID.equals(disposableGoodsStock.getWarehouseID())){ + throw new RuntimeException("物品库存不是当前仓库的!"); + } + // 查找批次定义 + DisposableGoodsBatch disposableGoodsBatch = diposableGoodsManager.getDisposableGoodsBatchByBatchNumber(disposableGoodsID, batchNumber); + if(disposableGoodsBatch == null){ + disposableGoodsBatch = newDisposableGoodsBatch(disposableGoods,warehouseID, warehouseName, godownEntryItem); + } + // 查找批次库存 + DisposableGoodsBatchStock disposableGoodsBatchStock = diposableGoodsManager.getDisposableGoodsStockByBatchNumber(warehouseID, disposableGoodsID, batchNumber); + // 保存时,每一项都是新建标识号对象 + Long disposableGoodsBatchID = godownEntryItem.getDisposableGoodsBatchID(); + Long disposableGoodsBatchStockID = godownEntryItem.getDisposableGoodsBatchStockID(); + + if(disposableGoodsBatchStock == null){ + // 新建 批次 + disposableGoodsBatchStock = newDisposableGoodsBatchStock(disposableGoods, disposableGoodsStock, disposableGoodsBatch, warehouseID, warehouseName, godownEntryItem); + newBatch = true; + idToDisposableGoodsBatchStockMap.put(disposableGoodsBatchStock.getId(), disposableGoodsBatchStock); + } + // 新建标识号对象 + IdentificationOfDisposableGoods identification = newIdentificationOfDisposableGoods( + entry, godownEntryItem, disposableGoodsID, + disposableGoodsStock, disposableGoodsBatch, + disposableGoodsBatchStock); + objectDao.save(identification); + + godownEntryItem.setNewBatch(newBatch); + // 设置godownEntryItem和批次,标识号关联的信息 + godownEntryItem.setDisposableGoodsID(disposableGoodsID); + godownEntryItem.setDisposableGoodsStockID(disposableGoodsStock.getId()); + godownEntryItem.setDisposableGoodsBatchID(disposableGoodsBatch.getId()); + godownEntryItem.setDisposableGoodsBatchStockID(disposableGoodsBatchStock.getId()); + godownEntryItem.setIdentificationID(identification.getId()); + godownEntryItem.setDiposableGoods(disposableGoodsStock); + if(!godownEntryItem.isAssociatedInfoValidForInEntry()){ + throw new RuntimeException("关联信息不正确!"); + } + objectDao.update(disposableGoods); + objectDao.update(disposableGoodsStock); + objectDao.update(disposableGoodsBatch); + objectDao.update(disposableGoodsBatchStock); + } + private IdentificationOfDisposableGoods newIdentificationOfDisposableGoods( + GodownEntry entry, GodownEntryItem godownEntryItem, + Long disposableGoodsID, DisposableGoodsStock disposableGoodsStock, + DisposableGoodsBatch disposableGoodsBatch, + DisposableGoodsBatchStock disposableGoodsBatchStock) { + IdentificationOfDisposableGoods identification = new IdentificationOfDisposableGoods(); + + identification.setDisposableGoodsID(disposableGoodsID); + 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.setPrice(godownEntryItem.getCost()); + identification.setWarehouseID(entry.getWarehouseID()); + identification.setWarehouseName(entry.getWarehouseName()); + return identification; + } /** * 保存对象到数据库 * @param entry @@ -1301,7 +1445,7 @@ outEntry.setWarehouseName(entry.getWarehouseName()); saveGodownOutEntry_internal(outEntry, null); - saveGodownEntry_internal(inEntry, result); + saveGodownEntryModifyOnlyAmount_internal(inEntry, result); save(entry); //设置库存关系,但是调拨单本身不影响库存 for(GodownEntryItem item : entry.getItemsList()){ Index: ssts-web/src/main/java/com/forgon/disinfectsystem/stocktakemanager/service/StockTakeInfoManagerImpl.java =================================================================== diff -u -r12901 -r13122 --- ssts-web/src/main/java/com/forgon/disinfectsystem/stocktakemanager/service/StockTakeInfoManagerImpl.java (.../StockTakeInfoManagerImpl.java) (revision 12901) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/stocktakemanager/service/StockTakeInfoManagerImpl.java (.../StockTakeInfoManagerImpl.java) (revision 13122) @@ -392,7 +392,7 @@ } try { //生成盘盈入库 - godownEntryManager.saveGodownEntry_TRANS_REQUIRED(entry, returnMsg); + godownEntryManager.saveGodownEntryModifyOnlyAmount_TRANS_REQUIRED(entry, returnMsg); } catch (Exception e) { throw new RuntimeException(e.getMessage()); } Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManager.java =================================================================== diff -u -r12942 -r13122 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManager.java (.../GodownEntryManager.java) (revision 12942) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManager.java (.../GodownEntryManager.java) (revision 13122) @@ -28,6 +28,8 @@ // 保存入库单 public void saveGodownEntry_TRANS_REQUIRED(GodownEntry entry,Map result); + // 保存入库单,只修改库存,不改其他属性,用于盘点与调拨 + public void saveGodownEntryModifyOnlyAmount_TRANS_REQUIRED(GodownEntry entry,Map result); public void saveGodownEntry_TRANS_MANDATORY(GodownEntry entry,Map result); public void saveGodownEntry_TRANS_REQUIRED(Collection entrys,Map result); public void saveGodownEntry_TRANS_MANDATORY(Collection entrys,Map result);