Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r23167 -r23218 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 23167) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 23218) @@ -2705,6 +2705,7 @@ loadTargetWareHouse(submitInvoiceContext); // 锁定一次性物品 lockDiposableGoods2(submitInvoiceContext); + addSupplyRoomDisposableGoodsInfo(submitInvoiceContext); // 锁定高值耗材 lockExpensiveGoods(submitInvoiceContext); // 锁定库存记录 @@ -2788,6 +2789,23 @@ return submitInvoiceContext; } + // 供应室科室的一次性物品信息 + private void addSupplyRoomDisposableGoodsInfo(SubmitInvoiceContext submitInvoiceContext ){ + String departCode = submitInvoiceContext.getDepartCode(); + if(!supplyRoomConfigManager.isFirstOrSecondSupplyRoomOrgUnit(submitInvoiceContext.getDepartCode())){ + return; + } + + WareHouse wareHouse = submitInvoiceContext.getTargetWareHouseMap().get(departCode); + if(wareHouse == null){ + throw new RuntimeException(String.format("编码为%s的科室默认仓库为空", departCode)); + } + submitInvoiceContext.setTargetWareHouse(wareHouse); + submitInvoiceContext.setTargetDepartIsSupplyRoom(true); + DisposableGoodsServiceContext disposableGoodsServiceContext = submitInvoiceContext.getDisposableGoodsServiceContext(); + diposableGoodsManager.loadStockAndIdentification(wareHouse.getId(), disposableGoodsServiceContext); + } + /** * 重新计算加急的器械包. * @param orgUnitCode 处理供应室编码 @@ -3348,6 +3366,115 @@ return sendAmount; } + + private DisposableGoodsStock getOrCreateDisposableGoodsStock( + SubmitInvoiceContext submitInvoiceContext, Long disposableGoodsId, + WareHouse targetWareHouse) { + DisposableGoodsServiceContext disposableGoodsServiceContext = submitInvoiceContext + .getDisposableGoodsServiceContext(); + Map idToDisposableGoodsStockMap = disposableGoodsServiceContext + .getIdToDisposableGoodsStockMap(); + + DisposableGoods disposableGoods = disposableGoodsServiceContext + .getIdToDisposableGoodsMap().get(disposableGoodsId); + if (!idToDisposableGoodsStockMap.isEmpty()) { + for (DisposableGoodsStock disposableGoodsStock : idToDisposableGoodsStockMap + .values()) { + if (disposableGoodsId.equals(disposableGoodsStock + .getDisposableGoodsID()) + && targetWareHouse.getId().equals( + disposableGoodsStock.getWarehouseID())) { + return disposableGoodsStock; + } + } + } + // 创建新的 + DisposableGoodsStock disposableGoodsStock = diposableGoodsManager + .createDisposableGoodsStock(targetWareHouse.getId(), + targetWareHouse.getName(), disposableGoods); + idToDisposableGoodsStockMap.put(disposableGoodsStock.getId(), + disposableGoodsStock); + disposableGoodsServiceContext.getDisposableGoodsStockList().add( + disposableGoodsStock); + return disposableGoodsStock; + } + private DisposableGoodsBatchStock getOrCreateDisposableGoodsBatchStock(SubmitInvoiceContext submitInvoiceContext, + Long disposableGoodsId, + DisposableGoodsStock disposableGoodsStock, + DisposableGoodsBatch disposableGoodsBatch,DisposableGoodsBatchStock srcDisposableGoodsBatchStock, WareHouse targetWareHouse) { + DisposableGoodsServiceContext disposableGoodsServiceContext = submitInvoiceContext + .getDisposableGoodsServiceContext(); + DisposableGoods disposableGoods = disposableGoodsServiceContext + .getIdToDisposableGoodsMap().get(disposableGoodsId); + Map idToDisposableGoodsBatchStockMap = disposableGoodsServiceContext.getIdToDisposableGoodsBatchStockMap(); + for (DisposableGoodsBatchStock disposableGoodsBatchStock : idToDisposableGoodsBatchStockMap.values()) { + if(disposableGoodsStock.getId().equals(disposableGoodsBatchStock.getDisposableGoodsStockId()) && disposableGoodsBatch.getId().equals(disposableGoodsBatchStock.getDisposableGoodsBatchId())){ + return disposableGoodsBatchStock; + } + } + DisposableGoodsBatchStock disposableGoodsBatchStock = new DisposableGoodsBatchStock(); + disposableGoodsBatchStock.setDiposableGoods(disposableGoodsStock); + disposableGoodsStock.getGoodsBatchs().add(disposableGoodsBatchStock); + disposableGoodsBatchStock.setBarcode(disposableGoodsBatch.getBarcode()); + disposableGoodsBatchStock.setDisposableGoodsId(disposableGoods.getId()); + disposableGoodsBatchStock.setDisposableGoodsBatchId(disposableGoodsBatch.getId()); + disposableGoodsBatchStock.setBatchNumber(srcDisposableGoodsBatchStock.getBatchNumber()); + disposableGoodsBatchStock.setCost(srcDisposableGoodsBatchStock.getCost()); + disposableGoodsBatchStock.setExpDate(srcDisposableGoodsBatchStock.getExpDate()); + disposableGoodsBatchStock.setManufacturer(srcDisposableGoodsBatchStock.getManufacturer()); + disposableGoodsBatchStock.setManufacturerId(srcDisposableGoodsBatchStock.getManufacturerId());//生产厂家id + disposableGoodsBatchStock.setSterileBatchNumber(srcDisposableGoodsBatchStock.getSterileBatchNumber()); + disposableGoodsBatchStock.setSupplierName(srcDisposableGoodsBatchStock.getSupplierName()); + disposableGoodsBatchStock.setSupplierId(srcDisposableGoodsBatchStock.getSupplierId());//供应商id + disposableGoodsBatchStock.setProducingArea(srcDisposableGoodsBatchStock.getProducingArea()); + disposableGoodsBatchStock.setWarehouseID(targetWareHouse.getId()); + disposableGoodsBatchStock.setWarehouseName(targetWareHouse.getName()); + objectDao.saveOrUpdate(disposableGoodsBatchStock); + + idToDisposableGoodsBatchStockMap.put(disposableGoodsBatchStock.getId(), disposableGoodsBatchStock); + disposableGoodsServiceContext.getDisposableGoodsBatchStockList().add(disposableGoodsBatchStock); + return disposableGoodsBatchStock; + } + private DisposableGoodsIdentification getOrCreateIdentificationOfDisposableGoods( + SubmitInvoiceContext submitInvoiceContext, + Long disposableGoodsId, DisposableGoodsStock disposableGoodsStock, + DisposableGoodsBatch disposableGoodsBatch, + DisposableGoodsBatchStock disposableGoodsBatchStock, + DisposableGoodsIdentification srcIdentification, + WareHouse targetWareHouse) { + + DisposableGoodsServiceContext disposableGoodsServiceContext = submitInvoiceContext + .getDisposableGoodsServiceContext(); + DisposableGoods disposableGoods = disposableGoodsServiceContext + .getIdToDisposableGoodsMap().get(disposableGoodsId); + Map idToIdentificationMap = disposableGoodsServiceContext.getIdToIdentificationMap(); + if(idToIdentificationMap != null){ + for (DisposableGoodsIdentification identification : idToIdentificationMap.values()) { + if(disposableGoodsBatchStock.getId().equals(identification.getBatchStock().getId()) && srcIdentification.getId().equals(identification.getSrcIdentification())){ + return identification; + } + } + } + DisposableGoodsIdentification identification = new DisposableGoodsIdentification(); + identification.setDisposableGoodsID(disposableGoodsId); + identification.setDisposableGoodsBatchID(disposableGoodsBatch.getId()); + identification.setDisposableGoodsStockID(disposableGoodsStock.getId()); + identification.setSrcIdentification(srcIdentification.getId()); + identification.setBatchStock(disposableGoodsBatchStock); + disposableGoodsBatchStock.getIdentifications().add(identification); + identification.setBatchStock(disposableGoodsBatchStock); + identification.setConclusion(srcIdentification.getConclusion()); + identification.setEntryDate(new Date()); + identification.setIdentification(srcIdentification.getIdentification()); + identification.setPrice(srcIdentification.getPrice()); + identification.setWarehouseID(targetWareHouse.getId()); + identification.setWarehouseName(targetWareHouse.getName()); + objectDao.saveOrUpdate(identification); + + idToIdentificationMap.put(identification.getId(), identification); + + return identification; + } /** * 生成发货单 主要供新的JSON格式的Webservice接口调用 * @@ -3535,7 +3662,7 @@ invoiceItem.getTousseName(), sourceWarehouseName, barcode)); } - + // 获得价格 List identifications = disposableGoodsBatchStock .getIdentifications(); @@ -3605,6 +3732,21 @@ vo.setDisposableGoodsIdentificationId(identification.getId()); vo.setAdjustAmount(amountChange); disposableGoodsStorageAdjustVoTotalList.add(vo); + + // 增加目标仓库库存,省医需求,发货到一二级供应室时需要增加库存 + if(submitInvoiceContext.isTargetDepartIsSupplyRoom()){ + WareHouse targetWareHouse = submitInvoiceContext.getTargetWareHouse(); + Long disposableGoodsId = disposableGoodsBatchStock.getDisposableGoodsId(); + DisposableGoodsStock targetDisposableGoodsStock = getOrCreateDisposableGoodsStock(submitInvoiceContext, disposableGoodsId, targetWareHouse); + DisposableGoodsBatchStock targetDisposableGoodsBatchStock = getOrCreateDisposableGoodsBatchStock(submitInvoiceContext, disposableGoodsId, targetDisposableGoodsStock, diposableGoodBatch, disposableGoodsBatchStock, targetWareHouse); + DisposableGoodsIdentification targetDisposableGoodsIdentification = getOrCreateIdentificationOfDisposableGoods(submitInvoiceContext, disposableGoodsId, targetDisposableGoodsStock, diposableGoodBatch, targetDisposableGoodsBatchStock, identification, targetWareHouse); + + targetDisposableGoodsIdentification.adjustAmount(amountChange); + objectDao.update(targetDisposableGoodsIdentification); + objectDao.update(targetDisposableGoodsBatchStock); + objectDao.update(targetDisposableGoodsStock); + + } // 发货物品单项总价 BigDecimal itemPrice = MathTools.mul(fluctuationPrice, diposableGoodsItem.getAmount()); Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java =================================================================== diff -u -r22871 -r23218 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java (.../DiposableGoodsManager.java) (revision 22871) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java (.../DiposableGoodsManager.java) (revision 23218) @@ -244,6 +244,9 @@ public void lockAndGetDisposableGoodsResources( DisposableGoodsServiceContext disposableGoodsServiceContext); + public void loadStockAndIdentification(Long wareHouseId, + DisposableGoodsServiceContext disposableGoodsServiceContext); + /** * 根据关键字对DisposableGoods进行模糊查询(注意要根据用户配置的检索习惯进行检索) * @param keyword 检索关键字 Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java =================================================================== diff -u -r23021 -r23218 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 23021) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 23218) @@ -2738,7 +2738,79 @@ } } } + @Override + public void loadStockAndIdentification(Long wareHouseId, + DisposableGoodsServiceContext disposableGoodsServiceContext){ + if(wareHouseId == null){ + throw new RuntimeException(String.format("仓库id为空")); + } + Set disposableGoodsIdsSet = disposableGoodsServiceContext.getDisposableGoodsIdsSet(); + Set diposableGoodsStockIDsSet = disposableGoodsServiceContext.getDisposableGoodsStockIdsSet(); + Set expensiveDisposablegoodsIdsSet = disposableGoodsServiceContext.getExpensiveDisposableGoodsIdsSet(); + Set disposableGoodsBatchIDsSet = disposableGoodsServiceContext.getDisposableGoodsBatchIdsSet(); + Set disposableGoodsBatchStockIDsSet = disposableGoodsServiceContext.getDisposableGoodsBatchStockIdsSet(); + Set identificationIdsSet = disposableGoodsServiceContext.getIdentificationIdsSet(); + Map idToDiposableGoodsMap = disposableGoodsServiceContext.getIdToDisposableGoodsMap(); + Map disposableGoodsIDToDisposableGoodsStockMap = disposableGoodsServiceContext.getDisposableGoodsIDToDisposableGoodsStockMap(); + Map idToDisposableGoodsStockMap = disposableGoodsServiceContext.getIdToDisposableGoodsStockMap(); + Map idToExpensiveDisposablegoodsMap = disposableGoodsServiceContext.getIdToExpensiveDisposableGoodsMap(); + Map barcodeToExpensiveDisposablegoodsMap = disposableGoodsServiceContext.getBarcodeToExpensiveDisposablegoodsMap(); + Map idToDisposableGoodsBatchMap = disposableGoodsServiceContext.getIdToDisposableGoodsBatchMap(); + Map barcodeToDisposableGoodsBatchMap = disposableGoodsServiceContext.getBarcodeToDisposableGoodsBatchMap(); + Map idToDisposableGoodsBatchStockMap = disposableGoodsServiceContext.getIdToDisposableGoodsBatchStockMap(); + Map barcodeToDisposableGoodsBatchStockMap = disposableGoodsServiceContext.getBarcodeToDisposableGoodsBatchStockMap(); + Map idToIdentificationMap = disposableGoodsServiceContext.getIdToIdentificationMap(); + + + // 获取物品库存 + List disposableGoodsStockList = null; + { +// Date validUntil = new Date(); +// String validUntilSql = " " +// + dateQueryAdapter.dateConverAdapter2(com.forgon.Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS.format(validUntil), +// "yyyy-mm-dd HH24:MI:SS"); +// +// String validUntilStr = String.format(" ( %s > %s) ", "b.expDate", validUntilSql); +// String queryString = String +// .format("select distinct po from %s po inner join fetch po.goodsBatchs b inner join fetch b.identifications i where %s and i.amount>0 and po.warehouseID=%s and (%s) ", +// DisposableGoodsStock.class.getSimpleName(),validUntilStr,warehouseId,SqlUtils.getStringFieldInCollectionsPredicate("po.disposableGoodsID", disposableGoodsIdsSet)); + String queryString = String + .format("select distinct po from %s po inner join fetch po.goodsBatchs b inner join fetch b.identifications i where po.warehouseID=%s and (%s) ", + DisposableGoodsStock.class.getSimpleName(),wareHouseId,SqlUtils.getStringFieldInCollectionsPredicate("po.disposableGoodsID", disposableGoodsIdsSet)); + disposableGoodsStockList = objectDao.findByHql(queryString); + } + // 设置物品库存到map + if(disposableGoodsStockList != null){ + List originalDisposableGoodsStockList = disposableGoodsServiceContext.getDisposableGoodsStockList(); + for (DisposableGoodsStock disposableGoodsStock : disposableGoodsStockList) { + originalDisposableGoodsStockList.add(disposableGoodsStock); + } + for (DisposableGoodsStock disposableGoodsStock : disposableGoodsStockList) { + idToDisposableGoodsStockMap.put(disposableGoodsStock.getId(), disposableGoodsStock); + // 不能覆盖以前的值,以后可以重构,用disposableGoodsID_wareHouseId作为key +// disposableGoodsIDToDisposableGoodsStockMap.put(disposableGoodsStock.getDisposableGoodsID(), disposableGoodsStock); + + Set disposableGoodsBatchStocks = disposableGoodsStock.getGoodsBatchs(); + if(disposableGoodsBatchStocks != null){ + disposableGoodsServiceContext.getDisposableGoodsBatchStockList().addAll(disposableGoodsBatchStocks); + for (DisposableGoodsBatchStock disposableGoodsBatchStock : disposableGoodsBatchStocks) { + idToDisposableGoodsBatchStockMap.put(disposableGoodsBatchStock.getId(), disposableGoodsBatchStock); + // 不能覆盖以前的值 +// barcodeToDisposableGoodsBatchStockMap.put(diposableGoodBatchStock.getBarcode(), diposableGoodBatchStock); + + List identifications = disposableGoodsBatchStock.getIdentifications(); + if(identifications != null){ + for (DisposableGoodsIdentification identificationOfDiposableGoods : identifications) { + idToIdentificationMap.put(identificationOfDiposableGoods.getId(), identificationOfDiposableGoods); + } + } + } + } + } + } + } + @Override public List getDisposableGoodsByKeyword(String keyword) { String hql = "where 1=1 "; Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r23167 -r23218 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 23167) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 23218) @@ -917,6 +917,9 @@ for (InvoicePlan invoicePlan : invoicePlans) { List items = invoicePlan.getApplicationItems(); for (TousseItem tousseItem : items) { + if(tousseItem.isDisposableGoods()){ + continue; + } // 不发货 if(TousseItemUtils.sterilingMethodNotInSet(tousseItem, tdMap, sterilingMethodSet)){ tousseItem.setProcess(false); @@ -1713,11 +1716,15 @@ SqlBuilder.IN, orgUnitCodings); String where7 = "1=1"; String where8 = "1=1"; + List excludeTypelist = new ArrayList(); excludeTypelist.add(InvoicePlan.TYPE_QUALITY_MONITOR_RECYCLE_APPLICATION); excludeTypelist.add(InvoicePlan.TYPE_SECOND_SUPPLY_ROOM); - +// String second_supply_room_sql = String.format(" (type != '%s' or (type = '%s' and departCoding in(select orgUnitCoding from %s where supplyRoomType='%s' and showInvoicePlan='%s'))) ", +// InvoicePlan.TYPE_SECOND_SUPPLY_ROOM,InvoicePlan.TYPE_SECOND_SUPPLY_ROOM,SupplyRoomConfig.class.getSimpleName(), +// SupplyRoomConfig.SUPPLYROOM_TYPE_SECOND_SUPPLYROOM,com.forgon.tools.Constants.STR_YES); + String second_supply_room_sql = "1=1"; SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); if (config != null) { Boolean afterRecyclingTousseDeliver = config @@ -1790,8 +1797,8 @@ String sql = String - .format(" WHERE (%s) and (%s) and (%s) and (%s) and (%s) and (%s) and (%s) and (%s)", - where1, where2, where3, where4, where5, where6, where7, where8); + .format(" WHERE (%s) and (%s) and (%s) and (%s) and (%s) and (%s) and (%s) and (%s) and (%s)", + where1, where2, where3, where4, where5, where6, where7, where8,second_supply_room_sql); return sql; }