Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java =================================================================== diff -u -r30412 -r30462 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 30412) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 30462) @@ -4750,15 +4750,6 @@ } Map> invoiceToInvoiceItemListMap = new LinkedHashMap>(); - String insertIntoInvoiceItemBatchSql = String.format( - "insert into %s(%s amount,ancestorId,barcode,batchNumber,comboTousseInstanceId," - + "diposable,disposableGoodsBatchId,disposableGoodsBatchStockId,disposableGoodsId," - + "disposableGoodsStockId,disposableGoodsType,disposableGoodsType2," - + "invoiceID,invoicePlanID,middlePackageAmount,middlePackageUnit," - + "settlementDiscountPrice,settlementPrice,subjectCode,tousseDefinitionId,tousseName," - + "tousseType,transferScale,type,wareHouseId,wareHouseName,invoice_id,materialAmount,expensiveDGBarcode) " - + "values (%s ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", - InvoiceItem.class.getSimpleName(),idColumnName,idColumnValue); //申请项map(key为属性名、value为属性值)集合 List> invoiceItemMapList = new ArrayList>(); //1.器械包(含各种不同类型的包)有关的(按包定义分组) @@ -4832,8 +4823,7 @@ } Map invoiceItemMap = null; if(MapUtils.isNotEmpty(tousseItemToBatchIdToEdgListMapMap)){ - for (Entry>> entry : - tousseItemToBatchIdToEdgListMapMap.entrySet()) { + for (Entry>> entry : tousseItemToBatchIdToEdgListMapMap.entrySet()) { TousseItem tousseItem = entry.getKey(); Invoice invoice = invoicePlanToInvoiceMap.get(tousseItem.getInvoicePlan()); Map> value = entry.getValue(); @@ -4887,8 +4877,7 @@ } } if(MapUtils.isNotEmpty(tousseItemToIdentiToAmountMapMap)){ - for (Entry> entry : - tousseItemToIdentiToAmountMapMap.entrySet()) { + for (Entry> entry : tousseItemToIdentiToAmountMapMap.entrySet()) { TousseItem tousseItem = entry.getKey(); Invoice invoice = invoicePlanToInvoiceMap.get(tousseItem.getInvoicePlan()); Map identiToAmountMapOfTousseItem = entry.getValue(); @@ -5004,7 +4993,15 @@ } } } - + String insertIntoInvoiceItemBatchSql = String.format( + "insert into %s(%s amount,ancestorId,barcode,batchNumber,comboTousseInstanceId," + + "diposable,disposableGoodsBatchId,disposableGoodsBatchStockId,disposableGoodsId," + + "disposableGoodsStockId,disposableGoodsType,disposableGoodsType2," + + "invoiceID,invoicePlanID,middlePackageAmount,middlePackageUnit," + + "settlementDiscountPrice,settlementPrice,subjectCode,tousseDefinitionId,tousseName," + + "tousseType,transferScale,type,wareHouseId,wareHouseName,invoice_id,materialAmount,expensiveDGBarcode,uuid) " + + "values (%s ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", + InvoiceItem.class.getSimpleName(),idColumnName,idColumnValue); jdbcTemplate.batchUpdate(insertIntoInvoiceItemBatchSql, new BatchPreparedStatementSetter() { @@ -5125,6 +5122,7 @@ ps.setInt(28, materialAmount); } ps.setString(29, (String)invoiceItemMap.get("expensiveDGBarcode")); + ps.setString(30, (String)invoiceItemMap.get("uuid")); } @Override @@ -5393,7 +5391,8 @@ Map idToDisposableGoodsMap,Map idToDisposableGoodsBatchMap, List sourceStockList,List sourceBatchStockList, List targetStockList,List targetBatchStockList, - List targetIdentificationList,String idColumnName,String idColumnValue,List disposableGoodsStorageAdjustVoTotalList){ + List targetIdentificationList,String idColumnName,String idColumnValue, + List disposableGoodsStorageAdjustVoTotalList){ if(MapUtils.isEmpty(tousseItemToBatchIdToEdgListMapMap) && MapUtils.isEmpty(tousseItemToIdentiToAmountMapMap)){ return; @@ -5414,12 +5413,7 @@ targetBatchStockList.stream().forEach(batchStock -> { targetBatchIdToDisposableGoodsBatchStockMap.put(batchStock.getDisposableGoodsBatchId(), batchStock); }); - String insertIntoDiposableGoodsItemBatchSql = String.format( - "insert into %s(%s amount,barcode,batch,fluctuationPrice,name,price,invoice_id," - + "identificationID,invoiceItemID,disposableGoodsBatchID,disposableGoodsBatchStockID," - + "disposableGoodsID,disposableGoodsStockID,expensiveDisposablegoodsId,expensiveDGBarcode," - + "tousseInstanceId,type,targetIdentificationId) values (%s ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", - DiposableGoodsItem.class.getSimpleName(),idColumnName,idColumnValue); + //用于插入数据库表的记录 List> mapList = new ArrayList>(); //1.高值耗材的处理 @@ -5492,34 +5486,38 @@ } //普通物品的处理 if(MapUtils.isNotEmpty(tousseItemToIdentiToAmountMapMap)){ - for (Entry> entry : - tousseItemToIdentiToAmountMapMap.entrySet()) { + for (Entry> entry : tousseItemToIdentiToAmountMapMap.entrySet()) { TousseItem tousseItem = entry.getKey(); Map identiToAmountMap = entry.getValue(); if(MapUtils.isEmpty(identiToAmountMap)){ continue; } - //根据申请项的所属申请单,找到对应的发货单(通常就是一个) + //根据申请项的所属申请单,找到对应的发货单(发货单通常就是一个;发货项可能是一个也可能是多个,比如同一个一次性物品的多个批次) Map invoiceAndInvoiceItemMap = getInvoiceAndInvoiceItemForTousseItem(invoiceToInvoiceItemListMap, tousseItem); Invoice invoice = (Invoice)invoiceAndInvoiceItemMap.get("invoice"); - InvoiceItem invoiceItem = (InvoiceItem)invoiceAndInvoiceItemMap.get("invoiceItem"); - if(invoice != null && invoiceItem != null){ - + @SuppressWarnings("unchecked") + List invoiceItemList = (List)invoiceAndInvoiceItemMap.get("invoiceItemList"); + if(invoice != null && CollectionUtils.isNotEmpty(invoiceItemList)){ Map ancestorIdToIdentificationMap = new HashMap(); if(CollectionUtils.isNotEmpty(targetIdentificationList)){ targetIdentificationList.stream().filter(targetIdentification -> (invoice.getId().equals(targetIdentification.getSourceInvoiceId()))).forEach(identi -> { ancestorIdToIdentificationMap.put(identi.getAncestorId(), identi); }); } - for(Entry identiToAmountEntry : - identiToAmountMap.entrySet()){ + for(Entry identiToAmountEntry : identiToAmountMap.entrySet()){ DisposableGoodsIdentification identi = identiToAmountEntry.getKey(); Long batchId = identi.getDisposableGoodsBatchID(); DisposableGoodsBatch batch = idToDisposableGoodsBatchMap.get(batchId); /*Long dgId = batch.getDiposableGoods().getId();*/ Integer amount = identiToAmountEntry.getValue(); if(amount != null && amount.intValue() > 0){ + InvoiceItem invoiceItem = invoiceItemList.stream().filter(ii -> { + return ii.getDisposableGoodsBatchStockId().equals(identi.getBatchStock().getId()); + }).findFirst().orElse(null); + if(invoiceItem == null){ + throw new SystemException("未找到相应的一次性物品发货项。"); + } Map map = buildDiposableGoodsItemMapForNotExpensiveDisposableGoods(invoice, invoiceItem, null, identi, batch, sourceBatchIdToDisposableGoodsBatchStockMap, sourceDgIdToDisposableGoodsStockMap, ancestorIdToIdentificationMap, identiToAmountEntry, InvoiceItem.TYPE_APPLICATION, disposableGoodsStorageAdjustVoTotalList); @@ -5550,6 +5548,12 @@ } } if(CollectionUtils.isNotEmpty(mapList)){ + String insertIntoDiposableGoodsItemBatchSql = String.format( + "insert into %s(%s amount,barcode,batch,fluctuationPrice,name,price,invoice_id," + + "identificationID,invoiceItemID,disposableGoodsBatchID,disposableGoodsBatchStockID," + + "disposableGoodsID,disposableGoodsStockID,expensiveDisposablegoodsId,expensiveDGBarcode," + + "tousseInstanceId,type,targetIdentificationId) values (%s ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", + DiposableGoodsItem.class.getSimpleName(),idColumnName,idColumnValue); jdbcTemplate.batchUpdate(insertIntoDiposableGoodsItemBatchSql, new BatchPreparedStatementSetter() { @Override @@ -7374,7 +7378,7 @@ && StringUtils.equals(ii.getTousseType(), tousseItem.getTousseType()); }).collect(Collectors.toList()); if(CollectionUtils.isNotEmpty(invoiceItemListOfTousseItem)){ - result.put("invoiceItem", invoiceItemListOfTousseItem.get(0)); + result.put("invoiceItemList", invoiceItemListOfTousseItem); } } }