Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/common/HIPMessageWebServiceImplV2.java =================================================================== diff -u -r31407 -r31408 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/common/HIPMessageWebServiceImplV2.java (.../HIPMessageWebServiceImplV2.java) (revision 31407) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/common/HIPMessageWebServiceImplV2.java (.../HIPMessageWebServiceImplV2.java) (revision 31408) @@ -200,6 +200,10 @@ // 丢失报损集合 Map> tiBarcodeToErrorDamageMap = new HashMap>(); + // 丢失备注Map + Map errorRemarkMap = new HashMap(); + // 报损备注Map + Map damageRemarkMap = new HashMap(); XPath xpath = document.createXPath(goodsItemsXpath); @@ -216,6 +220,8 @@ String itemsXpath = "/req/message_cont/INPUT/goodsItems/item[" + i + "]"; String barcodeXpath = itemsXpath + "/barcode"; String urgentLevelIdXpath = itemsXpath + "/urgentLevelId"; + String errorRemarkXpath = itemsXpath + "/errorRemark"; + String damageRemarkXpath = itemsXpath + "/damageRemark"; //String urgentLevelNameXpath = itemsXpath + "/urgentLevelName"; String tiBarcode = processDataByXpath(document, null, barcodeXpath); tousseInsBarcodes.add(tiBarcode); @@ -230,6 +236,11 @@ XPath xpath1 = document.createXPath(errorDamageXpath); List nodeList1 = xpath1.selectNodes(document, xpath1); if(CollectionUtils.isNotEmpty(nodeList1)){ + String errorRemark = processDataByXpath(document, null, errorRemarkXpath); + String damageRemark = processDataByXpath(document, null, damageRemarkXpath); + // 器械包实例记丢失备注和报损备注 + errorRemarkMap.put(tiBarcode, errorRemark); + damageRemarkMap.put(tiBarcode, damageRemark); List materialErrorDamageList = new ArrayList(); for(int j=1;j<=nodeList1.size();j++){ String errorDamageItemXpath = itemsXpath + "/errorDamageList/errorDamage[" + j + "]"; @@ -241,7 +252,13 @@ String type = processDataByXpath(document, null, errorDamageTypeXpath); String errorAmountStr = processDataByXpath(document, null, amountXpath); + if(!DatabaseUtil.isPoIdValid(errorAmountStr)){ + throw new RuntimeException("丢失报损数量无效!" + errorAmountStr); + } Integer errorAmount = Integer.parseInt(errorAmountStr); + if(errorAmount.intValue() <= 0){ + throw new RuntimeException("丢失报损数量无效!" + errorAmountStr); + } Long materialDefinitionId = null; String materialDefinitionIdStr = processDataByXpath(document, null, materialDefinitionIdXpath); String materialDefinitionName = processDataByXpath(document, null, materialDefinitionNameXpath); @@ -490,6 +507,9 @@ List materialErrorDamageList = tiBarcodeToErrorDamageMap.get(tousseInstance.getBarcode()); if(CollectionUtils.isNotEmpty(materialErrorDamageList)){ setErrorDamageInfo(tousseInstance, tousseDefinition, materialErrorDamageList, newUseRecord); + // 丢失报损备注 + tousseInstance.setErrorRemark(errorRemarkMap.get(tousseInstance.getBarcode())); + tousseInstance.setDamageRemark(damageRemarkMap.get(tousseInstance.getBarcode())); } } } @@ -525,20 +545,43 @@ if(CollectionUtils.isNotEmpty(tiList)){ for (TousseInstance ti : tiList) { List mdIdList = new ArrayList(); + // 包定义材料id和数量的map + Map materialAmountMap = new HashMap(); String hql = String.format("select po from %s po where po.tousse.id = %s", MaterialInstance.class.getSimpleName(), ti.getTousseDefinition().getId()); @SuppressWarnings("unchecked") List materialInstanceList = objectDao.findByHql(hql); if(CollectionUtils.isNotEmpty(materialInstanceList)){ for (MaterialInstance materialInstance : materialInstanceList) { mdIdList.add(materialInstance.getMaterialDefinitionId()); + materialAmountMap.put(materialInstance.getMaterialDefinitionId(), materialInstance.getCount()); } } List list = tiBarcodeToErrorDamageMap.get(ti.getBarcode()); + // 材料定义id和丢失报损数量的map + Map materialErrorDamageAmountMap = new HashMap(); + Map materialNameMap = new HashMap(); for (MaterialErrorDamageDetail materialErrorDamageDetail : list) { if(CollectionUtils.isEmpty(mdIdList) || !mdIdList.contains(materialErrorDamageDetail.getMaterialDefinitionId())){ throw new RuntimeException("条码为:" + ti.getBarcode() + "的器械包不包含材料:【" + materialErrorDamageDetail.getMaterialName() + "】"); } + Long materialDefinitionId = materialErrorDamageDetail.getMaterialDefinitionId(); + Integer errorDamageAmount = materialErrorDamageAmountMap.get(materialDefinitionId); + if(errorDamageAmount == null){ + errorDamageAmount = 0; + } + errorDamageAmount += materialErrorDamageDetail.getAmount(); + materialErrorDamageAmountMap.put(materialDefinitionId, errorDamageAmount); + materialNameMap.put(materialDefinitionId, materialErrorDamageDetail.getMaterialName()); } + + for (Long materialId : materialErrorDamageAmountMap.keySet()) { + Integer errorDamageAmount = materialErrorDamageAmountMap.get(materialId); + Integer materialAmount = materialAmountMap.get(materialId); + if(errorDamageAmount != null && materialAmount != null && errorDamageAmount.intValue() > materialAmount.intValue()){ + throw new RuntimeException(materialNameMap.get(materialId) + "的丢失报损数量不能大于材料数量!材料数量为:" + materialAmount); + } + } + } } } @@ -548,6 +591,8 @@ * @param tousseInstance * @param materialErrorDamageList * @param newUseRecord + * @param errorRemark 丢失备注 + * @param damageRemark 报损备注 */ private void setErrorDamageInfo(TousseInstance tousseInstance, TousseDefinition tousseDefinition, List materialErrorDamageList, UseRecord newUseRecord) { @@ -576,6 +621,8 @@ } if(detail == null){ detail = materialErrorDamageDetail; + }else{ + detail.setAmount(materialErrorDamageDetail.getAmount()); } if(recyclingItem != null){ String orgUnitCoding = recyclingItem.getRecyclingRecord().getOrgUnitCoding();