Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r39704 -r40444 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 39704) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 40444) @@ -1214,12 +1214,10 @@ boolean allowUseReordToApplicationMergeWhenOperationRoomIsBlank = ConfigUtils.getSystemSetConfigByNameBool("allowUseReordToApplicationMergeWhenOperationRoomIsBlank"); if(StringUtils.equals(useRecordConvertRecyclingApplicationMergeRegular, "operationRoom")){ - if(allowUseReordToApplicationMergeWhenOperationRoomIsBlank || StringUtils.isNotBlank(recyclingApplication.getUseRecord().getOperationRoom())){ - if(StringUtils.isNotBlank(recyclingApplication.getUseRecord().getOperationRoom())){ - useRecordSql = " and (po.useRecord.operationRoom='' or po.useRecord.operationRoom is null)"; - }else{ - useRecordSql = " and po.useRecord.operationRoom = '" + recyclingApplication.getUseRecord().getOperationRoom() + "'"; - } + if(StringUtils.isNotBlank(recyclingApplication.getUseRecord().getOperationRoom())){ + useRecordSql = " and po.useRecord.operationRoom = '" + recyclingApplication.getUseRecord().getOperationRoom() + "' "; + }else if(allowUseReordToApplicationMergeWhenOperationRoomIsBlank){ + useRecordSql = " and (po.useRecord.operationRoom='' or po.useRecord.operationRoom is null)"; } }else if(StringUtils.equals(useRecordConvertRecyclingApplicationMergeRegular, "depart")){ useRecordSql = " and po.useRecord.departCoding = '" + recyclingApplication.getUseRecord().getDepartCoding() + "'"; @@ -1255,6 +1253,8 @@ + recyclingApplication.getDepartCoding() + "' and po.settleAccountsDepartCoding = '" + recyclingApplication.getSettleAccountsDepartCoding() + + "' and po.handleDepartCoding = '" + + recyclingApplication.getHandleDepartCoding() + "' and po.type = '" + recyclingApplication.getType() + "' and po.committedStatus = " @@ -1652,66 +1652,74 @@ //根据包实例统计汇总包数量(更改为新的4.1代码) if(CollectionUtils.isNotEmpty(generalTousseInstances)){ - Map tousseNameToAmountMap = new HashMap(); - Map tousseInstanceBarcodeToTousseDefinitionIdMap = new HashMap(); - for (TousseInstance tousseInstance : generalTousseInstances) { - String tousseName = tousseInstance.getTousseDefinition().getName(); - if(tousseNameToAmountMap.containsKey(tousseName)){ - tousseNameToAmountMap.put(tousseName, tousseNameToAmountMap.get(tousseName) + 1); - }else{ - tousseNameToAmountMap.put(tousseName, 1); + Map> handlerDepartCodeTousseInstanceMap = getHandlerDepartCodeTousseInstanceMap(generalTousseInstances, departCoding); + for (Entry> handlerDepartCodeTousseInstanceMapEntry : handlerDepartCodeTousseInstanceMap.entrySet()) { + String handlerDepartCode = handlerDepartCodeTousseInstanceMapEntry.getKey(); + List willBeConvertTousseInstanceList = handlerDepartCodeTousseInstanceMapEntry.getValue(); + if(CollectionUtils.isEmpty(willBeConvertTousseInstanceList)){ + continue; } - tousseInstanceBarcodeToTousseDefinitionIdMap.put(tousseInstance.getBarcode(), tousseInstance.getTousseDefinition().getId()); - //为防止使用记录里优先转换过的包,在使用记录审核并转换申请单时再次转换时出现重复,现在暂时这样处理,后续再考虑完善 - tousseInstance.setTousseItemId(-1L); - } - //按器械包定义与申请科室(供应室处理器械包配置、供应室服务监床科室配置及器械包定义的优先处理等)查出对的处理科室,然后创建申请单 - //如果需要转换的处理科室为多少个,则需要对应生成多少个申请单,一个申请单对应一个处理科室 - List> handleDepartMapList = getHandleDepartMapList(tousseNameToAmountMap, null, depart, departCoding); - for(Map handleDepartMap : handleDepartMapList){ - //按处理科室拆后的器械包及数量map - Map newTousseNameAndAmountMap = new HashMap(); - @SuppressWarnings("unchecked") - List tousseItemList = (List)handleDepartMap.get("tousseItemList"); - if(CollectionUtils.isNotEmpty(tousseItemList)){ - for(TousseItem ti : tousseItemList){ - newTousseNameAndAmountMap.put(ti.getTousseDefinitionId() + "_" + ti.getTousseName(), ti.getAmount()); + Map tousseNameToAmountMap = new HashMap(); + Map tousseInstanceBarcodeToTousseDefinitionIdMap = new HashMap(); + for (TousseInstance tousseInstance : willBeConvertTousseInstanceList) { + String tousseName = tousseInstance.getTousseDefinition().getName(); + if(tousseNameToAmountMap.containsKey(tousseName)){ + tousseNameToAmountMap.put(tousseName, tousseNameToAmountMap.get(tousseName) + 1); + }else{ + tousseNameToAmountMap.put(tousseName, 1); } + tousseInstanceBarcodeToTousseDefinitionIdMap.put(tousseInstance.getBarcode(), tousseInstance.getTousseDefinition().getId()); + //为防止使用记录里优先转换过的包,在使用记录审核并转换申请单时再次转换时出现重复,现在暂时这样处理,后续再考虑完善 + tousseInstance.setTousseItemId(-1L); } - - RecyclingApplication recyclingApplication = new RecyclingApplication(); - recyclingApplication.setType(InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM); - if(StringUtils.equals(CssdUtils.getSystemSetConfigByName("applicationFormType"), InvoicePlan.APPLICATION_FORM_TYPE_MERGE)){ - recyclingApplication.setType(InvoicePlan.TYPE_COMBO_FORM); + //按器械包定义与申请科室(供应室处理器械包配置、供应室服务监床科室配置及器械包定义的优先处理等)查出对的处理科室,然后创建申请单 + //如果需要转换的处理科室为多少个,则需要对应生成多少个申请单,一个申请单对应一个处理科室 + List> handleDepartMapList = getHandleDepartMapList(tousseNameToAmountMap, null, depart, departCoding, handlerDepartCode); + for(Map handleDepartMap : handleDepartMapList){ + //按处理科室拆后的器械包及数量map + Map newTousseNameAndAmountMap = new HashMap(); + @SuppressWarnings("unchecked") + List tousseItemList = (List)handleDepartMap.get("tousseItemList"); + if(CollectionUtils.isNotEmpty(tousseItemList)){ + for(TousseItem ti : tousseItemList){ + newTousseNameAndAmountMap.put(ti.getTousseDefinitionId() + "_" + ti.getTousseName(), ti.getAmount()); + } + } + + RecyclingApplication recyclingApplication = new RecyclingApplication(); + recyclingApplication.setType(InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM); + if(StringUtils.equals(CssdUtils.getSystemSetConfigByName("applicationFormType"), InvoicePlan.APPLICATION_FORM_TYPE_MERGE)){ + recyclingApplication.setType(InvoicePlan.TYPE_COMBO_FORM); + } + recyclingApplication.setApplicant(applicant); + recyclingApplication.setDepart(depart); + recyclingApplication.setSubmitTime(now); + recyclingApplication.setDepartCoding(departCoding); + recyclingApplication.setHandleDepartCoding((String)handleDepartMap.get("handleDepartCoding")); + recyclingApplication.setHandleDepart((String)handleDepartMap.get("handleDepart")); + recyclingApplication.setSettleAccountsDepart(depart); + recyclingApplication.setSettleAccountsDepartCoding(departCoding); + recyclingApplication.setSequence(supplyRoomConfigManager.getOrgUnitSequence(departCoding)); + recyclingApplication.setReaders(";ORGUNIT_" + + recyclingApplication.getDepartCoding() + ";"); + recyclingApplication.setSerialNumber(serialNumManager + .getSerialNumberStr(SerialNum.TYPE_RECYCLINGAPPLICATION)); + recyclingApplication.setApplicationTime(now); + if (remark != null && StringUtils.isNotBlank(remark)) { + recyclingApplication.setRemark(remark); + } + + //必须先设置申请项,再计算单的状态 + createApplicationItems(recyclingApplication, newTousseNameAndAmountMap , null , 0d ,null,applyTousseNameToUrgentAmountMap,applyTousseNameToMaxUrgentLevelMap); + //设置申请单状态这一句一定要放在设置申请项之后 + setApplicationStatus(recyclingApplication, newTousseNameAndAmountMap); + //tousseInstanceMap key为条码,value为包定义id + setInstanceCodesToApplication(tousseInstanceBarcodeToTousseDefinitionIdMap, recyclingApplication); + + + saveOrUpdateRecyclingApplication(recyclingApplication,true); + list.add(recyclingApplication); } - recyclingApplication.setApplicant(applicant); - recyclingApplication.setDepart(depart); - recyclingApplication.setSubmitTime(now); - recyclingApplication.setDepartCoding(departCoding); - recyclingApplication.setHandleDepartCoding((String)handleDepartMap.get("handleDepartCoding")); - recyclingApplication.setHandleDepart((String)handleDepartMap.get("handleDepart")); - recyclingApplication.setSettleAccountsDepart(depart); - recyclingApplication.setSettleAccountsDepartCoding(departCoding); - recyclingApplication.setSequence(supplyRoomConfigManager.getOrgUnitSequence(departCoding)); - recyclingApplication.setReaders(";ORGUNIT_" - + recyclingApplication.getDepartCoding() + ";"); - recyclingApplication.setSerialNumber(serialNumManager - .getSerialNumberStr(SerialNum.TYPE_RECYCLINGAPPLICATION)); - recyclingApplication.setApplicationTime(now); - if (remark != null && StringUtils.isNotBlank(remark)) { - recyclingApplication.setRemark(remark); - } - - //必须先设置申请项,再计算单的状态 - createApplicationItems(recyclingApplication, newTousseNameAndAmountMap , null , 0d ,null,applyTousseNameToUrgentAmountMap,applyTousseNameToMaxUrgentLevelMap); - //设置申请单状态这一句一定要放在设置申请项之后 - setApplicationStatus(recyclingApplication, newTousseNameAndAmountMap); - //tousseInstanceMap key为条码,value为包定义id - setInstanceCodesToApplication(tousseInstanceBarcodeToTousseDefinitionIdMap, recyclingApplication); - - - saveOrUpdateRecyclingApplication(recyclingApplication,true); - list.add(recyclingApplication); } } @@ -7009,7 +7017,7 @@ Map applyUrgentTousseMap,Map applyTousseNameToUrgentAmountMap,Map applyTousseNameToMaxUrgentLevelMap,Long useRecordId) { return this.createRecyclingApplicationByTousse(tousseNameAndAmountMap, diposableGoodMap, applicant, depart, departCoding, null, null, hospitalNumber, remark, tousseInstanceMap, applicationCreateDate, operationRoom, sterilizationMode, dpf, invoicePlanType, applyUrgentTousseMap, applyTousseNameToUrgentAmountMap, applyTousseNameToMaxUrgentLevelMap, useRecordId); } - + /** * 创建申请单(根据申请科室、结算科室、器械包的处理供应室生成一个或多个申请单) * @param tousseNameAndAmount 器械包map,key为名称,value为数量 @@ -7030,12 +7038,35 @@ String depart, String departCoding, String settleAccountsDepart, String settleAccountsDepartCoding, String hospitalNumber, String remark, Map tousseInstanceMap,Date applicationCreateDate,String operationRoom,String sterilizationMode,double dpf,String invoicePlanType, Map applyUrgentTousseMap,Map applyTousseNameToUrgentAmountMap,Map applyTousseNameToMaxUrgentLevelMap,Long useRecordId) { + return createRecyclingApplicationByTousse(tousseNameAndAmountMap, diposableGoodMap, applicant, depart, departCoding, settleAccountsDepart, settleAccountsDepartCoding, hospitalNumber, remark, tousseInstanceMap, applicationCreateDate, operationRoom, sterilizationMode, dpf, invoicePlanType, applyUrgentTousseMap, applyTousseNameToUrgentAmountMap, applyTousseNameToMaxUrgentLevelMap, useRecordId, null); + } + + /** + * 创建申请单(根据申请科室、结算科室、器械包的处理供应室生成一个或多个申请单) + * @param tousseNameAndAmount 器械包map,key为名称,value为数量 + * @param diposableGoodMap 一次性物品map,key为名称,value为数量 + * @param applicant 申请人 + * @param depart 使用记录的科室名称 + * @param departCoding 使用记录的科室编码 + * @param remark 备注 + * @param tousseInstanceMap 器械包或标识牌条码map:key为条码,value为包定义id + * @param applicationCreateDate 申请时间(使用记录的时间) + * @param operationRoom 使用记录的病房 + * @param dpf 一次性物品价格浮动系数 + * @param invoicePlanType 单类型 + */ + @Override + public List createRecyclingApplicationByTousse( + Map tousseNameAndAmountMap,Map diposableGoodMap, String applicant, + String depart, String departCoding, String settleAccountsDepart, String settleAccountsDepartCoding, String hospitalNumber, String remark, + Map tousseInstanceMap,Date applicationCreateDate,String operationRoom,String sterilizationMode,double dpf,String invoicePlanType, + Map applyUrgentTousseMap,Map applyTousseNameToUrgentAmountMap,Map applyTousseNameToMaxUrgentLevelMap,Long useRecordId, String handlerDepartCode) { List list = null; if ((tousseNameAndAmountMap != null && tousseNameAndAmountMap.size() > 0) || (diposableGoodMap != null && diposableGoodMap.size() > 0)) { list = new ArrayList(); //根据申请科室、器械包与一次性物品及其处理的供应室确定一共涉及需要多少个处理的供应室然后按处理科室进行拆分 //如果需要转换的处理科室为多少个,则需要对应生成多少个申请单,一个申请单对应一个处理科室 - List> handleDepartMapList = getHandleDepartMapList(tousseNameAndAmountMap, diposableGoodMap, depart, departCoding); + List> handleDepartMapList = getHandleDepartMapList(tousseNameAndAmountMap, diposableGoodMap, depart, departCoding, handlerDepartCode); Map disposableGoodsMap = new HashMap(); if(MapUtils.isNotEmpty(diposableGoodMap)){ for (DisposableGoods disposableGoods : diposableGoodMap.keySet()) { @@ -7543,10 +7574,11 @@ * @param diposableGoodMap 一次性物品map * @param depart 申请科室名称 * @param departCoding 申请科室编码 + * @param handlerDepartCode 处理科室编码 * @return List> 结果格式如:[{handleDepart:"",handleDepartCoding:"",tousseItemList:[{tousseName:"",disposable:"",tousseDefinitionId:1,disposabledGoodsId:0,amount:10}],}] */ private List> getHandleDepartMapList(Map tousseNameAndAmountMap,Map diposableGoodMap, - String depart, String departCoding){ + String depart, String departCoding, String handlerDepartCode){ List> handleDepartMapList = new ArrayList>(); //器械包处理 @@ -7559,29 +7591,31 @@ ResultSet rs = null; try{ rs = objectDao.executeSql(tousseHandleSql); - List list = new ArrayList(); + List cssdHandleToussesList = new ArrayList(); while(rs.next()){ CssdHandleTousses cssdHandleTousses = new CssdHandleTousses(); cssdHandleTousses.setOrgUnitCode(rs.getString("cssdOrgUnitCode")); cssdHandleTousses.setOrgUnitName(rs.getString("cssdOrgUnitName")); cssdHandleTousses.setTousseDefinitionId(rs.getLong("tousseDefinitionId")); - list.add(cssdHandleTousses); + cssdHandleToussesList.add(cssdHandleTousses); } - if(list.size() != 1){ + /*if(cssdHandleToussesList.size() != 1){ TousseDefinition td = tousseDefinitionManager.getTousseDefinitionByName(tousseName); if(td != null && StringUtils.isNotBlank(td.getHandlerDepartCode())){ - list.clear(); + cssdHandleToussesList.clear(); handleTousses = new CssdHandleTousses(); handleTousses.setOrgUnitCode(td.getHandlerDepartCode()); handleTousses.setOrgUnitName(td.getHandlerDepartName()); handleTousses.setTousseDefinitionId(td.getAncestorID()); - list.add(handleTousses); + cssdHandleToussesList.add(handleTousses); }else{ - handleTousses = list.get(0); + handleTousses = cssdHandleToussesList.get(0); } }else{ - handleTousses = list.get(0); - } + handleTousses = cssdHandleToussesList.get(0); + }*/ + //如果只有一个配置,就直接返回配置的供应室内;否则,按照器械包实例生产部门、器械包定义优先处理科室的顺序匹配供应室处理器械包配置BJ307YY-82 + handleTousses = getCssdHandleTousses(cssdHandleToussesList, handlerDepartCode, tousseName); if(handleTousses == null){ throw new RuntimeException(tousseName+"未配置处理科室."); @@ -7787,6 +7821,45 @@ } /** + * 获取q器械包实例的供应室处理器械包配置, + * 优先取器械包实例的生产部门; + * 器械包实例的生产部门没有配置为当前器械包的处理科室时,再取器械包定义的优先处理科室作为处理科室; + * @param cssdHandleToussesList 供应室处理科室配置 + * @param handlerDepartCode 供应室处理科室编码 + * @param tousseName 器械包名称 + * @return 供应室处理器械包配置 + */ + private CssdHandleTousses getCssdHandleTousses(List cssdHandleToussesList, String handlerDepartCode, String tousseName) { + if(CollectionUtils.isEmpty(cssdHandleToussesList)){ + return null; + } + + //如果在【供应室处理器械包配置】中只有一个科室是配置了处理转单的器械包,则直接转单到该处理科室(此为旧业务逻辑) + if(cssdHandleToussesList.size() == 1){ + return cssdHandleToussesList.get(0); + } + + //优先取器械包实例的生产部门 + for (CssdHandleTousses cssdHandleTousses : cssdHandleToussesList) { + if(StringUtils.equals(handlerDepartCode, cssdHandleTousses.getOrgUnitCode())){ + return cssdHandleTousses; + } + } + //器械包实例的生产部门没有配置为当前器械包的处理科室时,再取器械包定义的优先处理科室作为处理科室 + if(StringUtils.isNotBlank(tousseName)){ + TousseDefinition td = tousseDefinitionManager.getTousseDefinitionByName(tousseName); + if(td != null && StringUtils.isNotBlank(td.getHandlerDepartCode())){ + for (CssdHandleTousses cssdHandleTousses : cssdHandleToussesList) { + if(StringUtils.equals(td.getHandlerDepartCode(), cssdHandleTousses.getOrgUnitCode())){ + return cssdHandleTousses; + } + } + } + } + return null; + } + + /** * 构造tousseItem对象 * @param tousseName * @param amount @@ -11472,25 +11545,45 @@ /** * 根据器械包实例与使用记录录入科室查询该物品转换生成申请单的处理科室 - * @return + * @return 处理科室编码 */ private String getTousseInstanceConvertApplicationHandleDepartCode(String useRecordDepartCode , TousseInstance tousseInstance){ + TousseDefinition ancestorTD = tousseDefinitionManager.get(tousseInstance.getTousseDefinitionAncestorID()); + if(ancestorTD == null){ + throw new RuntimeException(tousseInstance.getTousseName() + "关联的祖先包定义不存在!"); + } //处理科室 - String handleDepartCode = tousseInstance.getTousseDefinition().getHandlerDepartCode(); - String condition = " where po.tousseDefinitionId="+ tousseInstance.getTousseDefinition().getId() + String handleDepartCode = ancestorTD.getHandlerDepartCode(); + String condition = " where po.tousseDefinitionId="+ ancestorTD.getId() +" and po.orgUnitCode in (select cssdOrgUnitCode from "+ CssdServiceDepts.class.getSimpleName() +" csd where csd.cssdOrgUnitCode = po.orgUnitCode " +" and csd.clinicOrgUnitCode='"+ useRecordDepartCode +"' and csd.tousseType='"+ CssdServiceDepts.TOUSSETYPE_TOUSSE +"')"; @SuppressWarnings("unchecked") List cssdHandleToussesList = objectDao.findBySql(CssdHandleTousses.class.getSimpleName(), condition); - if(CollectionUtils.isNotEmpty(cssdHandleToussesList) && cssdHandleToussesList.size() == 1){ - CssdHandleTousses cssdHandleTousses = cssdHandleToussesList.get(0); - if(StringUtils.isNotBlank(cssdHandleTousses.getOrgUnitCode())){ - handleDepartCode = cssdHandleTousses.getOrgUnitCode(); + if(CollectionUtils.isNotEmpty(cssdHandleToussesList)){ + //如果在【供应室处理器械包配置】中只有一个科室是配置了处理转单的器械包,则直接转单到该处理科室(此为旧业务逻辑) + if(cssdHandleToussesList.size() == 1){ + CssdHandleTousses cssdHandleTousses = cssdHandleToussesList.get(0); + if(StringUtils.isNotBlank(cssdHandleTousses.getOrgUnitCode())){ + return cssdHandleTousses.getOrgUnitCode(); + } } + //装配生产器械包实例的供应室 + for (CssdHandleTousses cssdHandleTousses : cssdHandleToussesList) { + if(StringUtils.equals(tousseInstance.getOrgUnitCoding(), cssdHandleTousses.getOrgUnitCode())){ + return cssdHandleTousses.getOrgUnitCode(); + } + } + //优先处理科室 + for (CssdHandleTousses cssdHandleTousses : cssdHandleToussesList) { + if(StringUtils.equals(handleDepartCode, cssdHandleTousses.getOrgUnitCode())){ + return handleDepartCode; + } + } } - return handleDepartCode; + + throw new RuntimeException(tousseInstance.getTousseName() + "未配置处理科室."); } /** @@ -12113,4 +12206,110 @@ }); } + @Override + public Map> getHandlerDepartCodeTousseInstanceMap(Collection tousseInstanceWillBeConvertedTousseItemList, String departCoding) { + Map> handlerDepartCodeTousseInstanceMap = new HashMap>(); + if(CollectionUtils.isEmpty(tousseInstanceWillBeConvertedTousseItemList)){ + return handlerDepartCodeTousseInstanceMap; + } + Set tousseDefinitionIdSet = new HashSet(); + for (TousseInstance tousseInstance : tousseInstanceWillBeConvertedTousseItemList) { + tousseDefinitionIdSet.add(tousseInstance.getTousseDefinitionAncestorID()); + } + StringBuffer sqlBuffer = new StringBuffer("select csd.cssdOrgUnitCode, cht.tousseDefinitionId from ") + .append(CssdServiceDepts.class.getSimpleName() + " csd join ") + .append(CssdHandleTousses.class.getSimpleName() + " cht on csd.cssdOrgUnitCode = cht.orgUnitCode ") + .append(" where csd.tousseType = '" + CssdServiceDepts.TOUSSETYPE_TOUSSE + "' and csd.clinicOrgUnitCode = '" + departCoding + "' and ") + .append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("cht.tousseDefinitionId", tousseDefinitionIdSet)); + + Map> ancestorIdCssdHandleDepartCodeMap = new HashMap>(); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sqlBuffer.toString()); + while(rs.next()){ + Long tousseDefinitionId = rs.getLong("tousseDefinitionId"); + String cssdOrgUnitCode = rs.getString("cssdOrgUnitCode"); + + List handleDepartCodeList = ancestorIdCssdHandleDepartCodeMap.get(tousseDefinitionId); + if(handleDepartCodeList == null){ + handleDepartCodeList = new ArrayList(); + } + if(handleDepartCodeList.contains(cssdOrgUnitCode)){ + continue; + } + handleDepartCodeList.add(cssdOrgUnitCode); + ancestorIdCssdHandleDepartCodeMap.put(tousseDefinitionId, handleDepartCodeList); + } + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e.getMessage()); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + StringBuffer logBuffer = new StringBuffer(); + for (TousseInstance tousseInstance : tousseInstanceWillBeConvertedTousseItemList) { + String handleDepartCode = getTousseInstanceHandleDepartCode(ancestorIdCssdHandleDepartCodeMap, tousseInstance); + List tiList = handlerDepartCodeTousseInstanceMap.get(handleDepartCode); + if(tiList == null){ + tiList = new ArrayList(); + } + tiList.add(tousseInstance); + handlerDepartCodeTousseInstanceMap.put(handleDepartCode, tiList); + if(StringUtils.isNotBlank(tousseInstance.getOrgUnitCoding()) + && !StringUtils.equals(tousseInstance.getOrgUnitCoding(), handleDepartCode)){ + logBuffer.append(String.format("%s的生产部门编码为%s,使用记录转换申请单处理科室编码为%s;", tousseInstance.getTousseName(), tousseInstance.getOrgUnitCoding(), handleDepartCode)); + } + } + + if(StringUtils.isNotBlank(logBuffer.toString())){ + logger.debug("使用记录转换申请单处理科室编码与器械包实例生产部门编码不一致的器械包:" + logBuffer.toString()); + } + + return handlerDepartCodeTousseInstanceMap; + } + + /** + * 获取器械包实例的处理科室编码 + * @param ancestorIdCssdHandleDepartCodeMap 祖先包定义id及处理科室编码的map + * @param tousseInstance 器械包实例 + * @return 处理科室编码 + */ + private String getTousseInstanceHandleDepartCode(Map> ancestorIdCssdHandleDepartCodeMap, TousseInstance tousseInstance) { + if(tousseInstance == null){ + return null; + } + + if(MapUtils.isEmpty(ancestorIdCssdHandleDepartCodeMap)){ + throw new RuntimeException(tousseInstance.getTousseName() + "未配置处理科室."); + } + + //供应室服务临床科室配置及供应室处理器械包关联配置的处理科室编码 + Long ancestorID = tousseInstance.getTousseDefinitionAncestorID(); + List handleDepartCodeList = ancestorIdCssdHandleDepartCodeMap.get(ancestorID); + if(CollectionUtils.isEmpty(handleDepartCodeList)){ + throw new RuntimeException(tousseInstance.getTousseName() + "未配置处理科室."); + } + + //如果在【供应室处理器械包配置】中只有一个科室是配置了处理转单的器械包,则直接转单到该处理科室(此为旧业务逻辑) + if(handleDepartCodeList.size() == 1){ + return handleDepartCodeList.get(0); + } + + //返回生产该器械包的消毒供应室的编码 + if(handleDepartCodeList.contains(tousseInstance.getOrgUnitCoding())){ + return tousseInstance.getOrgUnitCoding(); + } + //返回器械包定义上的优先处理科室 + TousseDefinition ancestorTD = tousseDefinitionManager.get(tousseInstance.getTousseDefinitionAncestorID()); + if(ancestorTD == null){ + return null; + } + if(handleDepartCodeList.contains(ancestorTD.getHandlerDepartCode())){ + return ancestorTD.getHandlerDepartCode(); + } + + throw new RuntimeException(tousseInstance.getTousseName() + "未配置处理科室."); + } + } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java =================================================================== diff -u -r39596 -r40444 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 39596) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 40444) @@ -146,6 +146,36 @@ /** + * 创建申请单(根据申请科室、结算科室、器械包的处理供应室生成一个或多个申请单) + * @param tousseNameAndAmountMap 器械包map,key为名称,value为数量 + * @param diposableGoodMap 一次性物品map,key为名称,value为数量 + * @param applicant 申请人 + * @param depart 使用记录的科室名称 + * @param departCoding 使用记录的科室编码 + * @param settleAccountsDepart 结算科室名称 + * @param settleAccountsDepartCoding 结算科室编码 + * @param hospitalNumber 住院号 + * @param remark 备注 + * @param tousseInstanceMap 器械包条码及祖先包定义id的map + * @param applicationCreateDate 转换时间 + * @param operationRoom 手术间 + * @param sterilizationMode 灭菌方式 + * @param dpf 一次性物品的价格浮动系数 + * @param invoicePlanType 申请单类型 + * @param applyUrgentTousseMap 申请物品名称及申请加急数量的map + * @param applyTousseNameToUrgentAmountMap 申请物品名称及申请加急数量的map + * @param applyTousseNameToMaxUrgentLevelMap 申请物品名称及最大加急登记的map + * @param useRecordId 使用记录id + * @param handlerDepartCode 处理科室编码 + * @return 使用记录转换的申请单列表 + */ + public List createRecyclingApplicationByTousse( + Map tousseNameAndAmountMap,Map diposableGoodMap, String applicant, + String depart, String departCoding, String settleAccountsDepart, String settleAccountsDepartCoding, String hospitalNumber, String remark, + Map tousseInstanceMap,Date applicationCreateDate,String operationRoom,String sterilizationMode,double dpf,String invoicePlanType, + Map applyUrgentTousseMap,Map applyTousseNameToUrgentAmountMap,Map applyTousseNameToMaxUrgentLevelMap,Long useRecordId, String handlerDepartCode); + + /** * 创建消毒物品转换的申请单(根据申请科室、处理科室、消毒物品祖先包定义、要转换的消毒物品包实例等) * @param ancestorTdToMaterialMd5ToTiListMapMapLoop 祖先包定义对应的消毒物品包实例集合的map * @param idToUseRecordMap id对应的使用记录map @@ -704,4 +734,12 @@ public String getAutoReturnBorrowApplication(Long invoicePlanId, String departCoding, String tousseNames, boolean convertResultMsg, String tousseMaterials); + /** + * 根据供应室处理科室分组,不同处理科室装配生产的器械包,添加到不同的处理科室的申请单上 + * @param tousseInstanceWillBeConvertedTousseItemList 待转换申请单的器械包实例 + * @param departCoding 使用记录录入科室编码 + * @return 处理科室编码及器械包实例列表的map + */ + public Map> getHandlerDepartCodeTousseInstanceMap(Collection tousseInstanceWillBeConvertedTousseItemList, String departCoding); + } Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java =================================================================== diff -u -r40422 -r40444 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 40422) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 40444) @@ -4646,7 +4646,7 @@ //低温灭菌方式配置集合 JSONArray lowTempSterilizationModesJSONArray = null; //将使用记录中要转换的器械包实例按上面配的灭菌方式进行分类 - Map> sterilizationModeToTousseNameToAmountMap = new HashMap>(); + //Map> sterilizationModeToTousseNameToAmountMap = new HashMap>(); Map> sterilizationModeToTousseBarcodeToTdIdMap = new HashMap>(); //如果该科室未配置不需要合并,且又开启低温物品合并转换申请单配置项时 if(!Boolean.TRUE.equals(useRecordOfCurrentDepartNoNeedConvert) && StringUtils.isNotBlank(mergeRegularOfLowTemperatureToussesAfterExtracted)){ @@ -4669,22 +4669,22 @@ } List removeTousseNameList = new ArrayList(); for (String settleAccountDeptCode : settleAccountDeptCodeTousseMap.keySet()) { + //将使用记录中要转换的器械包实例按上面配的灭菌方式进行分类 Map> sterilizationModeToTousseNameToAmountMapLoop = new HashMap>(); Map applyTousseMap1 = settleAccountDeptCodeTousseMap.get(settleAccountDeptCode); String settleAccountDept = settleAccountDeptMap.get(settleAccountDeptCode); - lowTempSterilizationModesJSONArray.stream().forEach(lowTempSterilizationMode -> { + for (Object lowTempSterilizationMode : lowTempSterilizationModesJSONArray) { String lowTempSterilizationModeLoop = StringUtils.isBlank((String)lowTempSterilizationMode) ? null : (String)lowTempSterilizationMode; - - tousseNameToSterilingModeMap.entrySet().forEach(entry -> { + for (Entry entry : tousseNameToSterilingModeMap.entrySet()) { String tousseName = entry.getKey(); String sterilizationMode = entry.getValue(); if(StringUtils.equals(sterilizationMode, lowTempSterilizationModeLoop) && applyTousseMap1.get(tousseName) != null){ - Map applyTousseMapOfLowTempSterilizationMode = sterilizationModeToTousseNameToAmountMap.get(sterilizationMode); + /*Map applyTousseMapOfLowTempSterilizationMode = sterilizationModeToTousseNameToAmountMap.get(sterilizationMode); if(applyTousseMapOfLowTempSterilizationMode == null){ applyTousseMapOfLowTempSterilizationMode = new HashMap(); } applyTousseMapOfLowTempSterilizationMode.put(tousseName, applyTousseMap1.get(tousseName)); - sterilizationModeToTousseNameToAmountMap.put(sterilizationMode, applyTousseMapOfLowTempSterilizationMode); + sterilizationModeToTousseNameToAmountMap.put(sterilizationMode, applyTousseMapOfLowTempSterilizationMode);*/ Map applyTousseMapOfLowTempSterilizationModeLoop = sterilizationModeToTousseNameToAmountMapLoop.get(sterilizationMode); if(applyTousseMapOfLowTempSterilizationModeLoop == null){ @@ -4698,8 +4698,8 @@ settleAccountDeptCodeTousseMap.put(settleAccountDeptCode, applyTousseMap1); removeTousseNameList.add(tousseName); } - }); - tousseBarcodeToSterilingModeMap.entrySet().forEach(entry -> { + } + for (Entry entry : tousseBarcodeToSterilingModeMap.entrySet()) { String tousseBarcode = entry.getKey(); String sterilizationMode = entry.getValue(); if(StringUtils.equals(sterilizationMode, lowTempSterilizationModeLoop) && tousseBarcodeMap.get(tousseBarcode) != null){ @@ -4712,8 +4712,8 @@ tousseBarcodeMap.remove(tousseBarcode); } - }); - }); + } + } //器械包实例集合 List tousseInstanceWillBeConvertedTousseItemList = settleAccountDeptCodeTousseInstanceMap.get(settleAccountDeptCode); //灭菌方式-包名称-加急等级的map @@ -4747,6 +4747,11 @@ //器械包实例录使用记录后转换申请单后将会生成的单类型(用于外来器械录使用记录转换后的申请单类型,仅用于东莞中医院外来器械与普通器械包录单后合并的需求) String invoicePlanTypeAfterTousseConvert = InvoicePlan.TYPE_COMBO_FORM; + applicationFormType = CssdUtils.getSystemSetConfigByName("applicationFormType"); + //申请单类型(2表示分开的申请单,1为通用申请单) + if(InvoicePlan.APPLICATION_FORM_TYPE_SPLIT.equals(applicationFormType)){ + invoicePlanTypeAfterTousseConvert = InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM; + } //当前登录用户 LoginUserData loginUserData = AcegiHelper.getLoginUser(); @@ -4783,18 +4788,33 @@ for (String settleAccountDeptCode : settleAccountDeptCodeTousseMap.keySet()) { //器械包名称及数量map - Map settleAccountDeptCodeApplyTousseMap = settleAccountDeptCodeTousseMap.get(settleAccountDeptCode); + //Map settleAccountDeptCodeApplyTousseMap = settleAccountDeptCodeTousseMap.get(settleAccountDeptCode); //器械包实例集合 List tousseInstanceWillBeConvertedTousseItemList = settleAccountDeptCodeTousseInstanceMap.get(settleAccountDeptCode); + if(CollectionUtils.isEmpty(tousseInstanceWillBeConvertedTousseItemList)){ + continue; + } invoicePlanTypeAfterTousseConvert = InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM; - if(settleAccountDeptCodeApplyTousseMap.size() > 0 && CollectionUtils.isNotEmpty(tousseInstanceWillBeConvertedTousseItemList)){ - + //不同供应室装配产生的器械包转换到不同申请单上HDQRMYY-69 + Map> handlerDepartCodeTousseInstanceMap = recyclingApplicationManager.getHandlerDepartCodeTousseInstanceMap(tousseInstanceWillBeConvertedTousseItemList, departCoding); + for (Entry> handlerDepartCodeTousseInstanceMapEntry : handlerDepartCodeTousseInstanceMap.entrySet()) { + //供应室处理科室编码 + String handlerDepartCode = handlerDepartCodeTousseInstanceMapEntry.getKey(); + //根据处理科室编码分组的器械包 + List tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode = handlerDepartCodeTousseInstanceMapEntry.getValue(); + if(CollectionUtils.isEmpty(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode)){ + continue; + } + //器械包名称及数量map + Map tempApplyTousseMap = buildApplyTousseAmountMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); //器械包的加急数量,key为tousseName - Map tempApplyUrgentTousseMap = buildApplyUrgentTousseMap(tousseInstanceWillBeConvertedTousseItemList); + Map tempApplyUrgentTousseMap = buildApplyUrgentTousseMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); //器械包名称对应的加急数量map(key为器械包名称,value为加急数量) - Map tempApplyTousseNameToUrgentAmountMap = buildApplyTousseNameToUrgentAmountMap(tousseInstanceWillBeConvertedTousseItemList); + Map tempApplyTousseNameToUrgentAmountMap = buildApplyTousseNameToUrgentAmountMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); //器械包名称对应的最高加急级别map(key为器械包名称,value为最高加急级别对象) - Map tempApplyTousseNameToMaxUrgentLevelMap = buildApplyTousseNameToMaxUrgentLevelMap(tousseInstanceWillBeConvertedTousseItemList); + Map tempApplyTousseNameToMaxUrgentLevelMap = buildApplyTousseNameToMaxUrgentLevelMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + //器械包条码及器械包定义id的map + Map tempTousseBarcodeMap = buildTousseBarcodeMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode, tousseBarcodeMap); //结算科室过滤条件SZSDSRMYY-95 String settleAcountDepartCodeSql = ""; @@ -4803,6 +4823,11 @@ } //结算科室名称 String settleAccountDept = settleAccountDeptMap.get(settleAccountDeptCode); + //处理科室的过滤条件HDQRMYY-69 + String handlerDepartCodeSql = ""; + if(StringUtils.isNotBlank(handlerDepartCode)){ + handlerDepartCodeSql = " and handleDepartCoding = '" + handlerDepartCode + "' "; + } //只有当使用记录的数量为1且使用记录的手术间不为空时才按手术间进行合并 if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_OPERATIONROOM.equals(useRecordConvertRecyclingApplicationMergeRegular) @@ -4818,7 +4843,7 @@ } //如果条件1为不需要发货或条件2中没有要发货的物品,则只查询发货状态为null的物品;否则查询待发货的单 //2.查询该使用记录使用的物品(器械包、消毒物品、敷料包)是否有需要发货 - boolean includeNeedInvoiceItemsForUseRecord = includeNeedInvoiceItemsForUseRecord(tousseInstanceWillBeConvertedTousseItemList, settleAccountDeptCodeApplyTousseMap, tousseBarcodeToSterilingModeMap, sterilizationModeToTousseBarcodeToTdIdMap); + boolean includeNeedInvoiceItemsForUseRecord = includeNeedInvoiceItemsForUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode, tempApplyTousseMap, tousseBarcodeToSterilingModeMap, sterilizationModeToTousseBarcodeToTdIdMap); String deliverStatusCondition = needInvoiceForUseRecordOfDepart && includeNeedInvoiceItemsForUseRecord ? " and deliverStatus='" + InvoicePlan.DELIVERSTATUS_AWAITDELIVER + "' " : " and (deliverStatus is null or deliverStatus = '') "; @@ -4842,6 +4867,7 @@ + settleAcountDepartCodeSql + urgentTousseSql + patientInfoSql + + handlerDepartCodeSql + " order by po.id desc"); } //会否合并转换申请单(如果找到符合条件的待合并申请,且合并后的备注与条码长度不超4000就会合并) @@ -4853,7 +4879,7 @@ tousseBarcodes = ";"; } //使用记录里本次需要转换的包条码 - String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemList); + String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); tousseBarcodes += tousseBarcodesOfUseRecord; //新申请单的备注 String newRemark = @@ -4867,9 +4893,9 @@ if(!willMergeConvertApplication || !departCanMerge){ //创建器械包申请单 List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - settleAccountDeptCodeApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, - tousseBarcodeMap,applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, - tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId); + tempApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, + tempTousseBarcodeMap,applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, + tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId, handlerDepartCode); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { @@ -4903,7 +4929,7 @@ tousseBarcodes = ";"; } //使用记录里本次需要转换的包条码 - String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemList); + String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); tousseBarcodes += tousseBarcodesOfUseRecord; recyclingApplication.setTousseBarcodes(tousseBarcodes); @@ -4938,7 +4964,7 @@ //版本加1(因为该申请单有新的物品(使用记录登记)合并进来) VersionOperators.increaseVersion(recyclingApplication); - recyclingApplication.setDescription("该单于"+ ForgonDateUtils.safelyFormatDate(new Date(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "") + "追加如下物品:" + MapTools.mapConvertString(settleAccountDeptCodeApplyTousseMap , "名称" , "数量")); + recyclingApplication.setDescription("该单于"+ ForgonDateUtils.safelyFormatDate(new Date(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "") + "追加如下物品:" + MapTools.mapConvertString(tempApplyTousseMap , "名称" , "数量")); //备注重新设置(病人巡回洗手护士需要将来自多条使用记录的数据拼接,手术数量与器械包数量进行重新设值) recyclingApplication.setRemark(getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication)); @@ -4948,7 +4974,7 @@ if(useRecordList.size() == 1){ //追加申请项(相同物品的,则数量进行叠加) List tousseTransitionPlanItemList = - recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ List list = new ArrayList(); @@ -4966,7 +4992,7 @@ recyclingApplication.setUseRecord(tempUseRecord); } //追加申请项(相同物品的,则数量进行叠加) - recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); } recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); //将转换后申请单对象保存至集合中 @@ -4975,7 +5001,7 @@ }else if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_DEPART.equals(useRecordConvertRecyclingApplicationMergeRegular)){ //查询该使用记录使用的物品(器械包、消毒物品、敷料包)是否有需要发货 - boolean includeNeedInvoiceItemsForUseRecord = includeNeedInvoiceItemsForUseRecord(tousseInstanceWillBeConvertedTousseItemList, settleAccountDeptCodeApplyTousseMap, + boolean includeNeedInvoiceItemsForUseRecord = includeNeedInvoiceItemsForUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode, tempApplyTousseMap, tousseBarcodeToSterilingModeMap, sterilizationModeToTousseBarcodeToTdIdMap); //如果条件1为不需要发货或条件2中没有要发货的物品,则只查询发货状态为null的物品;否则查询待发货的单 String deliverStatusCondition = needInvoiceForUseRecordOfDepart && includeNeedInvoiceItemsForUseRecord @@ -5000,6 +5026,7 @@ + settleAcountDepartCodeSql + urgentTousseSql + patientInfoSql + + handlerDepartCodeSql + "order by po.id desc"); } //会否合并转换申请单(如果找到符合条件的待合并申请,且合并后的备注与条码长度不超4000就会合并) @@ -5011,7 +5038,7 @@ tousseBarcodes = ";"; } //使用记录里本次需要转换的包条码 - String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemList); + String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); tousseBarcodes += tousseBarcodesOfUseRecord; //新申请单的备注 String newRemark = @@ -5025,9 +5052,9 @@ if(!willMergeConvertApplication || !departCanMerge){ //创建器械包申请单 List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - settleAccountDeptCodeApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, - tousseBarcodeMap,applicationCreateDate,null,null,dpf,InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, - tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId); + tempApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, + tempTousseBarcodeMap,applicationCreateDate,null,null,dpf,InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, + tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId, handlerDepartCode); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { @@ -5061,7 +5088,7 @@ tousseBarcodes = ";"; } //使用记录里本次需要转换的包条码 - String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemList); + String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); tousseBarcodes += tousseBarcodesOfUseRecord; recyclingApplication.setTousseBarcodes(tousseBarcodes); @@ -5096,7 +5123,7 @@ //版本加1(因为该申请单有新的物品(使用记录登记)合并进来) VersionOperators.increaseVersion(recyclingApplication); - recyclingApplication.setDescription("该单于"+ ForgonDateUtils.safelyFormatDate(new Date(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "") + "追加如下物品:" + MapTools.mapConvertString(settleAccountDeptCodeApplyTousseMap , "名称" , "数量")); + recyclingApplication.setDescription("该单于"+ ForgonDateUtils.safelyFormatDate(new Date(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "") + "追加如下物品:" + MapTools.mapConvertString(tempApplyTousseMap , "名称" , "数量")); //备注重新设置(病人巡回洗手护士需要将来自多条使用记录的数据拼接,手术数量与器械包数量进行重新设值) recyclingApplication.setRemark(getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication)); @@ -5106,7 +5133,7 @@ if(useRecordList.size() == 1){ //追加申请项(相同物品的,则数量进行叠加) List tousseTransitionPlanItemList = - recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ List list = new ArrayList(); @@ -5124,7 +5151,7 @@ recyclingApplication.setUseRecord(tempUseRecord); } //追加申请项(相同物品的,则数量进行叠加) - recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); } recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); //将转换后申请单对象保存至集合中 @@ -5133,9 +5160,9 @@ }else{ //创建器械包申请单 List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - settleAccountDeptCodeApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, - tousseBarcodeMap,applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, - tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId); + tempApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, + tempTousseBarcodeMap,applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, + tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId, handlerDepartCode); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { @@ -5174,7 +5201,7 @@ //创建一次性物品申请单 List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( new HashMap(),applyDiposableGoodsMap, applicant, depart, departCoding, hospitalNumbers, remark, - tousseBarcodeMap,applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_DIPOSABLE_GOODS_APPLICATION_FORM, + new HashMap(),applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_DIPOSABLE_GOODS_APPLICATION_FORM, applyUrgentTousseMap,applyTousseNameToUrgentAmountMap,applyTousseNameToMaxUrgentLevelMap,firstUseRecordId); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ @@ -5208,16 +5235,32 @@ for (String settleAccountDeptCode : settleAccountDeptCodeTousseMap.keySet()) { - Map settleAccountDeptCodeApplyTousseMap = settleAccountDeptCodeTousseMap.get(settleAccountDeptCode); + //Map settleAccountDeptCodeApplyTousseMap = settleAccountDeptCodeTousseMap.get(settleAccountDeptCode); List tousseInstanceWillBeConvertedTousseItemList = settleAccountDeptCodeTousseInstanceMap.get(settleAccountDeptCode); - if(settleAccountDeptCodeApplyTousseMap.size() > 0 && CollectionUtils.isNotEmpty(tousseInstanceWillBeConvertedTousseItemList)){ - + if(CollectionUtils.isEmpty(tousseInstanceWillBeConvertedTousseItemList)){ + continue; + } + //根据处理科室编码分组 + Map> handlerDepartCodeTousseInstanceMap = recyclingApplicationManager.getHandlerDepartCodeTousseInstanceMap(tousseInstanceWillBeConvertedTousseItemList, departCoding); + + for (Entry> handlerDepartCodeTousseInstanceMapEntry : handlerDepartCodeTousseInstanceMap.entrySet()) { + //供应室处理科室编码 + String handlerDepartCode = handlerDepartCodeTousseInstanceMapEntry.getKey(); + //供应室处理科室编码相同的器械包 + List tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode = handlerDepartCodeTousseInstanceMapEntry.getValue(); + if(CollectionUtils.isEmpty(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode)){ + continue; + } + //器械包名称及数量map + Map tempApplyTousseMap = buildApplyTousseAmountMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); //器械包的加急数量,key为tousseName - Map tempApplyUrgentTousseMap = buildApplyUrgentTousseMap(tousseInstanceWillBeConvertedTousseItemList); + Map tempApplyUrgentTousseMap = buildApplyUrgentTousseMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); //器械包名称对应的加急数量map(key为器械包名称,value为加急数量) - Map tempApplyTousseNameToUrgentAmountMap = buildApplyTousseNameToUrgentAmountMap(tousseInstanceWillBeConvertedTousseItemList); + Map tempApplyTousseNameToUrgentAmountMap = buildApplyTousseNameToUrgentAmountMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); //器械包名称对应的最高加急级别map(key为器械包名称,value为最高加急级别对象) - Map tempApplyTousseNameToMaxUrgentLevelMap = buildApplyTousseNameToMaxUrgentLevelMap(tousseInstanceWillBeConvertedTousseItemList); + Map tempApplyTousseNameToMaxUrgentLevelMap = buildApplyTousseNameToMaxUrgentLevelMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + //器械包条码及器械包定义id的map + Map tempTousseBarcodeMap = buildTousseBarcodeMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode, tousseBarcodeMap); //结算科室过滤条件SZSDSRMYY-95 String settleAcountDepartCodeSql = ""; @@ -5226,6 +5269,11 @@ } //结算科室名称 String settleAccountDept = settleAccountDeptMap.get(settleAccountDeptCode); + //处理科室编码的过滤条件HDQRMYY-69 + String handlerDepartCodeSql = ""; + if(StringUtils.isNotBlank(handlerDepartCode)){ + handlerDepartCodeSql = " and handleDepartCoding = '" + handlerDepartCode + "' "; + } //只有当使用记录的数量为1且使用记录的手术间不为空时才按手术间进行合并 if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_OPERATIONROOM.equals(useRecordConvertRecyclingApplicationMergeRegular) @@ -5240,7 +5288,7 @@ operationRoomSql = "and (operationRoom='' or operationRoom is null)"; } //查询该使用记录使用的物品(器械包、消毒物品、敷料包)是否有需要发货 - boolean includeNeedInvoiceItemsForUseRecord = includeNeedInvoiceItemsForUseRecord(tousseInstanceWillBeConvertedTousseItemList, settleAccountDeptCodeApplyTousseMap, + boolean includeNeedInvoiceItemsForUseRecord = includeNeedInvoiceItemsForUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode, tempApplyTousseMap, tousseBarcodeToSterilingModeMap, sterilizationModeToTousseBarcodeToTdIdMap); //查询该科室的手术间与当前使用记录的手术单相同的申请单 //如果条件1为不需要发货或条件2中没有要发货的物品,则只查询发货状态为null的物品;否则查询待发货的单 @@ -5267,6 +5315,7 @@ + urgentTousseSql + patientInfoSql + lowTempSterilizationModeNotInSql + + handlerDepartCodeSql + "order by po.id desc"); } //会否合并转换申请单(如果找到符合条件的待合并申请,且合并后的备注与条码长度不超4000就会合并) @@ -5278,7 +5327,7 @@ tousseBarcodes = ";"; } //使用记录里本次需要转换的包条码 - String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemList); + String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); tousseBarcodes += tousseBarcodesOfUseRecord; //新申请单的备注 String newRemark = @@ -5292,9 +5341,9 @@ if(!willMergeConvertApplication || !departCanMerge){ //创建器械包申请单 List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - settleAccountDeptCodeApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, - tousseBarcodeMap,applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_COMBO_FORM, - tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId); + tempApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, + tempTousseBarcodeMap,applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_COMBO_FORM, + tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId, handlerDepartCode); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { @@ -5330,7 +5379,7 @@ tousseBarcodes = ";"; } //使用记录里本次需要转换的包条码 - String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemList); + String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); tousseBarcodes += tousseBarcodesOfUseRecord; recyclingApplication.setTousseBarcodes(tousseBarcodes); recyclingApplication.setUseRecord(firstUseRecord); @@ -5371,7 +5420,7 @@ if(useRecordList.size() == 1){ //追加申请项(相同物品的,则数量进行叠加) List tousseTransitionPlanItemList = - recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ List list = new ArrayList(); @@ -5389,15 +5438,15 @@ recyclingApplication.setUseRecord(tempUseRecord); } //追加申请项(相同物品的,则数量进行叠加) - recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); } recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); //将转换后申请单对象保存至集合中 recyclingApplicationListAfterConvert.add(recyclingApplication); } }else if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_DEPART.equals(useRecordConvertRecyclingApplicationMergeRegular)){ //查询该使用记录使用的物品(器械包、消毒物品、敷料包)是否有需要发货 - boolean includeNeedInvoiceItemsForUseRecord = includeNeedInvoiceItemsForUseRecord(tousseInstanceWillBeConvertedTousseItemList, settleAccountDeptCodeApplyTousseMap, + boolean includeNeedInvoiceItemsForUseRecord = includeNeedInvoiceItemsForUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode, tempApplyTousseMap, tousseBarcodeToSterilingModeMap, sterilizationModeToTousseBarcodeToTdIdMap); //查询该科室的手术间与当前使用记录的手术单相同的申请单 //如果条件1为不需要发货或条件2中没有要发货的物品,则只查询发货状态为null的物品;否则查询待发货的单 @@ -5423,6 +5472,7 @@ + urgentTousseSql + patientInfoSql + lowTempSterilizationModeNotInSql + + handlerDepartCodeSql + "order by po.id desc"); } @@ -5435,7 +5485,7 @@ tousseBarcodes = ";"; } //使用记录里本次需要转换的包条码 - String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemList); + String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); tousseBarcodes += tousseBarcodesOfUseRecord; //新申请单的备注 String newRemark = @@ -5449,9 +5499,9 @@ if(!willMergeConvertApplication || !departCanMerge){ //创建器械包申请单 List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - settleAccountDeptCodeApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, - tousseBarcodeMap,applicationCreateDate,null,null,dpf,InvoicePlan.TYPE_COMBO_FORM, - tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId); + tempApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, + tempTousseBarcodeMap,applicationCreateDate,null,null,dpf,InvoicePlan.TYPE_COMBO_FORM, + tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId, handlerDepartCode); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { @@ -5487,7 +5537,7 @@ tousseBarcodes = ";"; } //使用记录里本次需要转换的包条码 - String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemList); + String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); tousseBarcodes += tousseBarcodesOfUseRecord; recyclingApplication.setTousseBarcodes(tousseBarcodes); recyclingApplication.setUseRecord(firstUseRecord); @@ -5528,7 +5578,7 @@ if(useRecordList.size() == 1){ //追加申请项(相同物品的,则数量进行叠加) List tousseTransitionPlanItemList = - recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ List list = new ArrayList(); @@ -5546,17 +5596,17 @@ recyclingApplication.setUseRecord(tempUseRecord); } //追加申请项(相同物品的,则数量进行叠加) - recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); } recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); //将转换后申请单对象保存至集合中 recyclingApplicationListAfterConvert.add(recyclingApplication); } }else{ List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - settleAccountDeptCodeApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, - tousseBarcodeMap,applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_COMBO_FORM, - tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId); + tempApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, + tempTousseBarcodeMap,applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_COMBO_FORM, + tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId, handlerDepartCode); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { @@ -5594,7 +5644,7 @@ if(applyDiposableGoodsMap.size() > 0){ List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( new HashMap(),applyDiposableGoodsMap, applicant, depart, departCoding, hospitalNumbers, remark, - tousseBarcodeMap,applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_COMBO_FORM, + new HashMap(),applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_COMBO_FORM, applyUrgentTousseMap,applyTousseNameToUrgentAmountMap,applyTousseNameToMaxUrgentLevelMap,firstUseRecordId); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ @@ -5627,254 +5677,385 @@ for (String settleAccountDeptCode : settleAccountDeptCodeTousseMap.keySet()) { - Map settleAccountDeptCodeApplyTousseMap = settleAccountDeptCodeTousseMap.get(settleAccountDeptCode); + //Map settleAccountDeptCodeApplyTousseMap = settleAccountDeptCodeTousseMap.get(settleAccountDeptCode); List tousseInstanceWillBeConvertedTousseItemList = settleAccountDeptCodeTousseInstanceMap.get(settleAccountDeptCode); - //否则一次性物品是否转换申请单为否 - if(!isDgConvertApplication){ - applyDiposableGoodsMap = new HashMap(); + if(CollectionUtils.isEmpty(tousseInstanceWillBeConvertedTousseItemList)){ + continue; } + //不同供应室的器械包转换到不同申请单上HDQRMYY-69 + Map> handlerDepartCodeTousseInstanceMap = recyclingApplicationManager.getHandlerDepartCodeTousseInstanceMap(tousseInstanceWillBeConvertedTousseItemList, departCoding); - //结算科室过滤条件SZSDSRMYY-95 - String settleAcountDepartCodeSql = ""; - if(StringUtils.isNotBlank(settleAccountDeptCode)){ - settleAcountDepartCodeSql = " and settleAccountsDepartCoding = '" + settleAccountDeptCode + "' "; - } - //结算科室名称 - String settleAccountDept = settleAccountDeptMap.get(settleAccountDeptCode); - - //器械包的加急数量,key为tousseName - Map tempApplyUrgentTousseMap = buildApplyUrgentTousseMap(tousseInstanceWillBeConvertedTousseItemList); - //器械包名称对应的加急数量map(key为器械包名称,value为加急数量) - Map tempApplyTousseNameToUrgentAmountMap = buildApplyTousseNameToUrgentAmountMap(tousseInstanceWillBeConvertedTousseItemList); - //器械包名称对应的最高加急级别map(key为器械包名称,value为最高加急级别对象) - Map tempApplyTousseNameToMaxUrgentLevelMap = buildApplyTousseNameToMaxUrgentLevelMap(tousseInstanceWillBeConvertedTousseItemList); - - //只有当使用记录的数量为1且使用记录的手术间不为空时才按手术间进行合并 - if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_OPERATIONROOM.equals(useRecordConvertRecyclingApplicationMergeRegular) - && useRecordList.size() == 1 - && (StringUtils.isNotBlank(operationRoom) - || (StringUtils.isBlank(operationRoom) && allowUseReordToApplicationMergeWhenOperationRoomIsBlank) - )){ - String operationRoomSql = null; - if(StringUtils.isNotBlank(operationRoom)){ - operationRoomSql = "and operationRoom='"+ operationRoom +"' "; - }else{ - operationRoomSql = "and (operationRoom='' or operationRoom is null)"; + for (Entry> handlerDepartCodeTousseInstanceMapEntry : handlerDepartCodeTousseInstanceMap.entrySet()) { + //供应室处理科室编码 + String handlerDepartCode = handlerDepartCodeTousseInstanceMapEntry.getKey(); + //供应室处理科室编码相同的器械包 + List tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode = handlerDepartCodeTousseInstanceMapEntry.getValue(); + if(CollectionUtils.isEmpty(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode)){ + continue; } - //查询该使用记录使用的物品(器械包、消毒物品、敷料包)是否有需要发货 - boolean includeNeedInvoiceItemsForUseRecord = includeNeedInvoiceItemsForUseRecord(tousseInstanceWillBeConvertedTousseItemList, settleAccountDeptCodeApplyTousseMap, - tousseBarcodeToSterilingModeMap, sterilizationModeToTousseBarcodeToTdIdMap); - //查询该科室的手术间与当前使用记录的手术单相同的申请单(且还未回收) - //如果条件1为不需要发货或条件2中没有要发货的物品,则只查询发货状态为null的物品;否则查询待发货的单 - String deliverStatusCondition = needInvoiceForUseRecordOfDepart && includeNeedInvoiceItemsForUseRecord - ? " and deliverStatus='" + InvoicePlan.DELIVERSTATUS_AWAITDELIVER + "' " - : " and (deliverStatus is null or deliverStatus = '')"; + //否则一次性物品是否转换申请单为否 + if(!isDgConvertApplication){ + applyDiposableGoodsMap = new HashMap(); + } - //DGSETYY-43(若使用记录中含有特殊感染类型,则该使用记录只允许单独转换为一张新的申请单) - String specialInfectionCondition = " and (po.specialInfection is null or po.specialInfection = '') "; + //结算科室过滤条件SZSDSRMYY-95 + String settleAcountDepartCodeSql = ""; + if(StringUtils.isNotBlank(settleAccountDeptCode)){ + settleAcountDepartCodeSql = " and settleAccountsDepartCoding = '" + settleAccountDeptCode + "' "; + } + //结算科室名称 + String settleAccountDept = settleAccountDeptMap.get(settleAccountDeptCode); + //处理科室的过滤条件HDQRMYY-69 + String handlerDepartCodeSql = ""; + if(StringUtils.isNotBlank(handlerDepartCode)){ + handlerDepartCodeSql = " and handleDepartCoding = '" + handlerDepartCode + "' "; + } - String sql = "where 1=1 and useRecord is not null and departCoding='"+ departCoding + "'" - + operationRoomSql - + "and type in ('"+ InvoicePlan.TYPE_COMBO_FORM +"') " - + "and (endStatus is null) " + deliverStatusCondition - + "and (recyclingStatus='" + InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE + "' or recyclingStatus is null) " - + "and (po.id not in (select invoicePlan.id from "+ TousseItem.class.getSimpleName() +" where prepareRecycleAmount is not null)) " - + specialInfectionCondition - + settleAcountDepartCodeSql - + urgentTousseSql - + patientInfoSql - + lowTempSterilizationModeNotInSql - + "order by po.id desc"; + //器械包名称及数量map + Map tempApplyTousseMap = buildApplyTousseAmountMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + //器械包的加急数量,key为tousseName + Map tempApplyUrgentTousseMap = buildApplyUrgentTousseMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + //器械包名称对应的加急数量map(key为器械包名称,value为加急数量) + Map tempApplyTousseNameToUrgentAmountMap = buildApplyTousseNameToUrgentAmountMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + //器械包名称对应的最高加急级别map(key为器械包名称,value为最高加急级别对象) + Map tempApplyTousseNameToMaxUrgentLevelMap = buildApplyTousseNameToMaxUrgentLevelMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + //器械包条码及器械包定义id的map + Map tempTousseBarcodeMap = buildTousseBarcodeMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode, tousseBarcodeMap); - //DGSETYY-43(若使用记录中含有特殊感染类型,则该使用记录只允许单独转换为一张新的申请单) - RecyclingApplication recyclingApplication = null; - if(StringUtils.isBlank(useRecordList.get(0).getSpecialInfection())){ - //查询该科室的手术间与当前使用记录的手术单相同的申请单(且未终止、待回收、未发货、未做预回收),也是使用记录转换的申请单 - recyclingApplication = (RecyclingApplication)objectDao.getBySql(RecyclingApplication.class.getSimpleName(), - sql); - } - //会否合并转换申请单(如果找到符合条件的待合并申请,且合并后的备注与条码长度不超4000就会合并) - boolean willMergeConvertApplication = false; - if(recyclingApplication != null){ - //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 - String tousseBarcodes = recyclingApplication.getTousseBarcodes(); - if(StringUtils.isBlank(tousseBarcodes)){ - tousseBarcodes = ";"; + //只有当使用记录的数量为1且使用记录的手术间不为空时才按手术间进行合并 + if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_OPERATIONROOM.equals(useRecordConvertRecyclingApplicationMergeRegular) + && useRecordList.size() == 1 + && (StringUtils.isNotBlank(operationRoom) + || (StringUtils.isBlank(operationRoom) && allowUseReordToApplicationMergeWhenOperationRoomIsBlank) + )){ + String operationRoomSql = null; + if(StringUtils.isNotBlank(operationRoom)){ + operationRoomSql = "and operationRoom='"+ operationRoom +"' "; + }else{ + operationRoomSql = "and (operationRoom='' or operationRoom is null)"; } - ///使用记录里本次需要转换的包条码 - String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemList); - tousseBarcodes += tousseBarcodesOfUseRecord; - //新申请单的备注 - String newRemark = - getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication); - //判断合并申请单后的备注或包条码的长度是否大于最大长度。如果大于则创建新的申请单 - if(StringUtils.length(tousseBarcodes) < DatabaseUtil.varcharTypeMaxLength - && StringUtils.length(newRemark) < DatabaseUtil.varcharTypeMaxLength){ - willMergeConvertApplication = true; - } - } - if(!willMergeConvertApplication || !departCanMerge){ - //创建器械包申请单 - List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - settleAccountDeptCodeApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, - tousseBarcodeMap,applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_COMBO_FORM, - tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId); + //查询该使用记录使用的物品(器械包、消毒物品、敷料包)是否有需要发货 + boolean includeNeedInvoiceItemsForUseRecord = includeNeedInvoiceItemsForUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode, tempApplyTousseMap, + tousseBarcodeToSterilingModeMap, sterilizationModeToTousseBarcodeToTdIdMap); + //查询该科室的手术间与当前使用记录的手术单相同的申请单(且还未回收) + //如果条件1为不需要发货或条件2中没有要发货的物品,则只查询发货状态为null的物品;否则查询待发货的单 + String deliverStatusCondition = needInvoiceForUseRecordOfDepart && includeNeedInvoiceItemsForUseRecord + ? " and deliverStatus='" + InvoicePlan.DELIVERSTATUS_AWAITDELIVER + "' " + : " and (deliverStatus is null or deliverStatus = '')"; - if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ - for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { - //2.插入使用记录转换申请单关联中间表 - for (UseRecord tempUseRecord : useRecordList) { - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + //DGSETYY-43(若使用记录中含有特殊感染类型,则该使用记录只允许单独转换为一张新的申请单) + String specialInfectionCondition = " and (po.specialInfection is null or po.specialInfection = '') "; + + String sql = "where 1=1 and useRecord is not null and departCoding='"+ departCoding + "'" + + operationRoomSql + + "and type in ('"+ InvoicePlan.TYPE_COMBO_FORM +"') " + + "and (endStatus is null) " + deliverStatusCondition + + "and (recyclingStatus='" + InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE + "' or recyclingStatus is null) " + + "and (po.id not in (select invoicePlan.id from "+ TousseItem.class.getSimpleName() +" where prepareRecycleAmount is not null)) " + + specialInfectionCondition + + settleAcountDepartCodeSql + + urgentTousseSql + + patientInfoSql + + lowTempSterilizationModeNotInSql + + handlerDepartCodeSql + + "order by po.id desc"; + + //DGSETYY-43(若使用记录中含有特殊感染类型,则该使用记录只允许单独转换为一张新的申请单) + RecyclingApplication recyclingApplication = null; + if(StringUtils.isBlank(useRecordList.get(0).getSpecialInfection())){ + //查询该科室的手术间与当前使用记录的手术单相同的申请单(且未终止、待回收、未发货、未做预回收),也是使用记录转换的申请单 + recyclingApplication = (RecyclingApplication)objectDao.getBySql(RecyclingApplication.class.getSimpleName(), + sql); + } + //会否合并转换申请单(如果找到符合条件的待合并申请,且合并后的备注与条码长度不超4000就会合并) + boolean willMergeConvertApplication = false; + if(recyclingApplication != null){ + //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 + String tousseBarcodes = recyclingApplication.getTousseBarcodes(); + if(StringUtils.isBlank(tousseBarcodes)){ + tousseBarcodes = ";"; + } + ///使用记录里本次需要转换的包条码 + String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + tousseBarcodes += tousseBarcodesOfUseRecord; + //新申请单的备注 + String newRemark = + getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication); + //判断合并申请单后的备注或包条码的长度是否大于最大长度。如果大于则创建新的申请单 + if(StringUtils.length(tousseBarcodes) < DatabaseUtil.varcharTypeMaxLength + && StringUtils.length(newRemark) < DatabaseUtil.varcharTypeMaxLength){ + willMergeConvertApplication = true; + } + } + if(!willMergeConvertApplication || !departCanMerge){ + //创建器械包申请单 + List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( + tempApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, + tempTousseBarcodeMap,applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_COMBO_FORM, + tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId, handlerDepartCode); + + if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ + for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { + //2.插入使用记录转换申请单关联中间表 + for (UseRecord tempUseRecord : useRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } + + //只有当使用记录数量为1时,才启用器械交接 + if(useRecordList.size() == 1){ + List tousseTransitionPlanItemList = + getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication); + //如果预回收项不为空时,保存预回收记录 + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + //生成预回收记录 + tousseTransitionPlanManager.save(firstUseRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); + } + } } - //只有当使用记录数量为1时,才启用器械交接 - if(useRecordList.size() == 1){ - List tousseTransitionPlanItemList = - getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication); + //将转换后申请单对象保存至集合中 + recyclingApplicationListAfterConvert.addAll(recyclingApplicationList); + } + }else{ + //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 + String tousseBarcodes = recyclingApplication.getTousseBarcodes(); + if(StringUtils.isBlank(tousseBarcodes)){ + tousseBarcodes = ";"; + } + //使用记录里本次需要转换的包条码 + String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + tousseBarcodes += tousseBarcodesOfUseRecord; + recyclingApplication.setTousseBarcodes(tousseBarcodes); + recyclingApplication.setUseRecord(firstUseRecord); + //申请人、提交时间及最后修改时间都取最后一条使用记录的信息 + //recyclingApplication.setApplicant(applicant); + //recyclingApplication.setApplicationTime(applicationCreateDate); + recyclingApplication.setSubmitTime(applicationCreateDate); + //住院号叠加 + if(StringUtils.isNotBlank(recyclingApplication.getHospitalNumber())){ + if(StringUtils.isNotBlank(hospitalNumbers)){ + recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber() + "," + hospitalNumbers); + }else{ + recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber()); + } + }else{ + if(StringUtils.isNotBlank(hospitalNumbers)){ + recyclingApplication.setHospitalNumber(hospitalNumbers); + }else{ + //原住院号与新使用记录的住院号都为空白时,不用设置 + } + } + //2.插入使用记录转换申请单关联中间表 + for (UseRecord tempUseRecord : useRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(recyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } + + //备注重新设置(病人巡回洗手护士需要将来自多条使用记录的数据拼接,手术数量与器械包数量进行重新设值) + recyclingApplication.setRemark(getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication)); + objectDao.saveOrUpdate(recyclingApplication); + + //只有当使用记录数量为1时,才启用器械交接 + if(useRecordList.size() == 1){ + //追加申请项(相同物品的,则数量进行叠加) + List tousseTransitionPlanItemList = + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + List list = new ArrayList(); + for (TousseTransitionPlanItem item : tousseTransitionPlanItemList) { + //构造与生成预回收相关的数据 + list.add(tousseTransitionPlanItemManager.build(item.getTousseItemId(), item.getAmount(), item.getUrgentAmount())); + } //如果预回收项不为空时,保存预回收记录 - if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ - //生成预回收记录 - tousseTransitionPlanManager.save(firstUseRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); + if(CollectionUtils.isNotEmpty(list)){ + tousseTransitionPlanManager.save(firstUseRecord, recyclingApplication, list, true); } } + } else { + for (UseRecord tempUseRecord : useRecordList) { + recyclingApplication.setUseRecord(tempUseRecord); + } + //追加申请项(相同物品的,则数量进行叠加) + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); } + recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); //将转换后申请单对象保存至集合中 - recyclingApplicationListAfterConvert.addAll(recyclingApplicationList); + recyclingApplicationListAfterConvert.add(recyclingApplication); } - }else{ - //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 - String tousseBarcodes = recyclingApplication.getTousseBarcodes(); - if(StringUtils.isBlank(tousseBarcodes)){ - tousseBarcodes = ";"; + }else if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_DEPART.equals(useRecordConvertRecyclingApplicationMergeRegular)){ + //查询该使用记录使用的物品(器械包、消毒物品、敷料包)是否有需要发货 + boolean includeNeedInvoiceItemsForUseRecord = includeNeedInvoiceItemsForUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode, tempApplyTousseMap, + tousseBarcodeToSterilingModeMap, sterilizationModeToTousseBarcodeToTdIdMap); + //查询该科室的手术间与当前使用记录的手术单相同的申请单(且还未回收) + //如果条件1为不需要发货或条件2中没有要发货的物品,则只查询发货状态为null的物品;否则查询待发货的单 + String deliverStatusCondition = needInvoiceForUseRecordOfDepart && includeNeedInvoiceItemsForUseRecord + ? " and deliverStatus='" + InvoicePlan.DELIVERSTATUS_AWAITDELIVER + "' " + : " and (deliverStatus is null or deliverStatus = '')"; + + //DGSETYY-43(若使用记录中含有特殊感染类型,则该使用记录只允许单独转换为一张新的申请单) + String specialInfectionCondition = " and (po.specialInfection is null or po.specialInfection = '' ) "; + + RecyclingApplication recyclingApplication = null; + if(StringUtils.isBlank(useRecordList.get(0).getSpecialInfection())){ + //查询该科室的手术间与当前使用记录的手术单相同的申请单(且未终止、待回收、未发货、未做预回收),也是使用记录转换的申请单 + recyclingApplication = (RecyclingApplication)objectDao.getBySql(RecyclingApplication.class.getSimpleName(), + "where 1=1 and useRecord is not null and departCoding='"+ departCoding + "'" + + "and type in ('"+ InvoicePlan.TYPE_COMBO_FORM +"') " + + "and (endStatus is null) " + deliverStatusCondition + + "and (recyclingStatus='" + InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE + "' or recyclingStatus is null) " + + "and (po.id not in (select invoicePlan.id from "+ TousseItem.class.getSimpleName() +" where prepareRecycleAmount is not null)) " + + specialInfectionCondition + + settleAcountDepartCodeSql + + urgentTousseSql + + patientInfoSql + + lowTempSterilizationModeNotInSql + + handlerDepartCodeSql + + "order by po.id desc"); } - //使用记录里本次需要转换的包条码 - String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemList); - tousseBarcodes += tousseBarcodesOfUseRecord; - recyclingApplication.setTousseBarcodes(tousseBarcodes); - recyclingApplication.setUseRecord(firstUseRecord); - //申请人、提交时间及最后修改时间都取最后一条使用记录的信息 - //recyclingApplication.setApplicant(applicant); - //recyclingApplication.setApplicationTime(applicationCreateDate); - recyclingApplication.setSubmitTime(applicationCreateDate); - //住院号叠加 - if(StringUtils.isNotBlank(recyclingApplication.getHospitalNumber())){ - if(StringUtils.isNotBlank(hospitalNumbers)){ - recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber() + "," + hospitalNumbers); - }else{ - recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber()); + //会否合并转换申请单(如果找到符合条件的待合并申请,且合并后的备注与条码长度不超4000就会合并) + boolean willMergeConvertApplication = false; + if(recyclingApplication != null){ + //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 + String tousseBarcodes = recyclingApplication.getTousseBarcodes(); + if(StringUtils.isBlank(tousseBarcodes)){ + tousseBarcodes = ";"; } - }else{ - if(StringUtils.isNotBlank(hospitalNumbers)){ - recyclingApplication.setHospitalNumber(hospitalNumbers); - }else{ - //原住院号与新使用记录的住院号都为空白时,不用设置 + //使用记录里本次需要转换的包条码 + String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + tousseBarcodes += tousseBarcodesOfUseRecord; + //新申请单的备注 + String newRemark = + getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication); + //判断合并申请单后的备注或包条码的长度是否大于最大长度。如果大于则创建新的申请单 + if(StringUtils.length(tousseBarcodes) < DatabaseUtil.varcharTypeMaxLength + && StringUtils.length(newRemark) < DatabaseUtil.varcharTypeMaxLength){ + willMergeConvertApplication = true; } } - //2.插入使用记录转换申请单关联中间表 - for (UseRecord tempUseRecord : useRecordList) { - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(recyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); - } - - //备注重新设置(病人巡回洗手护士需要将来自多条使用记录的数据拼接,手术数量与器械包数量进行重新设值) - recyclingApplication.setRemark(getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication)); - objectDao.saveOrUpdate(recyclingApplication); - - //只有当使用记录数量为1时,才启用器械交接 - if(useRecordList.size() == 1){ - //追加申请项(相同物品的,则数量进行叠加) - List tousseTransitionPlanItemList = - recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); + if(!willMergeConvertApplication || !departCanMerge){ + //创建器械包申请单 + List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( + tempApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, + tempTousseBarcodeMap,applicationCreateDate,null,null,dpf,InvoicePlan.TYPE_COMBO_FORM, + tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId, handlerDepartCode); - if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ - List list = new ArrayList(); - for (TousseTransitionPlanItem item : tousseTransitionPlanItemList) { - //构造与生成预回收相关的数据 - list.add(tousseTransitionPlanItemManager.build(item.getTousseItemId(), item.getAmount(), item.getUrgentAmount())); + if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ + for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { + //2.插入使用记录转换申请单关联中间表 + for (UseRecord tempUseRecord : useRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } + + //只有当使用记录数量为1时,才启用器械交接 + if(useRecordList.size() == 1){ + List tousseTransitionPlanItemList = + getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication); + //如果预回收项不为空时,保存预回收记录 + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + //生成预回收记录 + tousseTransitionPlanManager.save(firstUseRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); + } + } } - //如果预回收项不为空时,保存预回收记录 - if(CollectionUtils.isNotEmpty(list)){ - tousseTransitionPlanManager.save(firstUseRecord, recyclingApplication, list, true); + + //将转换后申请单对象保存至集合中 + recyclingApplicationListAfterConvert.addAll(recyclingApplicationList); + } + }else{ + //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 + String tousseBarcodes = recyclingApplication.getTousseBarcodes(); + if(StringUtils.isBlank(tousseBarcodes)){ + tousseBarcodes = ";"; + } + //使用记录里本次需要转换的包条码 + String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + tousseBarcodes += tousseBarcodesOfUseRecord; + recyclingApplication.setTousseBarcodes(tousseBarcodes); + recyclingApplication.setUseRecord(firstUseRecord); + //申请人、提交时间及最后修改时间都取最后一条使用记录的信息 + //recyclingApplication.setApplicant(applicant); + //recyclingApplication.setApplicationTime(applicationCreateDate); + recyclingApplication.setSubmitTime(applicationCreateDate); + //住院号叠加 + if(StringUtils.isNotBlank(recyclingApplication.getHospitalNumber())){ + if(StringUtils.isNotBlank(hospitalNumbers)){ + recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber() + "," + hospitalNumbers); + }else{ + recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber()); } + }else{ + if(StringUtils.isNotBlank(hospitalNumbers)){ + recyclingApplication.setHospitalNumber(hospitalNumbers); + }else{ + //原住院号与新使用记录的住院号都为空白时,不用设置 + } } - } else { + //2.插入使用记录转换申请单关联中间表 for (UseRecord tempUseRecord : useRecordList) { - recyclingApplication.setUseRecord(tempUseRecord); + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(recyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); } - //追加申请项(相同物品的,则数量进行叠加) - recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); + + //备注重新设置(病人巡回洗手护士需要将来自多条使用记录的数据拼接,手术数量与器械包数量进行重新设值) + recyclingApplication.setRemark(getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication)); + objectDao.saveOrUpdate(recyclingApplication); + + //只有当使用记录数量为1时,才启用器械交接 + if(useRecordList.size() == 1){ + //追加申请项(相同物品的,则数量进行叠加) + List tousseTransitionPlanItemList = + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + + if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ + List list = new ArrayList(); + for (TousseTransitionPlanItem item : tousseTransitionPlanItemList) { + //构造与生成预回收相关的数据 + list.add(tousseTransitionPlanItemManager.build(item.getTousseItemId(), item.getAmount(), item.getUrgentAmount())); + } + //如果预回收项不为空时,保存预回收记录 + if(CollectionUtils.isNotEmpty(list)){ + tousseTransitionPlanManager.save(firstUseRecord, recyclingApplication, list, true); + } + } + } else { + for (UseRecord tempUseRecord : useRecordList) { + recyclingApplication.setUseRecord(tempUseRecord); + } + //追加申请项(相同物品的,则数量进行叠加) + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + } + recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); + //将转换后申请单对象保存至集合中 + recyclingApplicationListAfterConvert.add(recyclingApplication); } - - recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); - //将转换后申请单对象保存至集合中 - recyclingApplicationListAfterConvert.add(recyclingApplication); - } - }else if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_DEPART.equals(useRecordConvertRecyclingApplicationMergeRegular)){ - //查询该使用记录使用的物品(器械包、消毒物品、敷料包)是否有需要发货 - boolean includeNeedInvoiceItemsForUseRecord = includeNeedInvoiceItemsForUseRecord(tousseInstanceWillBeConvertedTousseItemList, settleAccountDeptCodeApplyTousseMap, - tousseBarcodeToSterilingModeMap, sterilizationModeToTousseBarcodeToTdIdMap); - //查询该科室的手术间与当前使用记录的手术单相同的申请单(且还未回收) - //如果条件1为不需要发货或条件2中没有要发货的物品,则只查询发货状态为null的物品;否则查询待发货的单 - String deliverStatusCondition = needInvoiceForUseRecordOfDepart && includeNeedInvoiceItemsForUseRecord - ? " and deliverStatus='" + InvoicePlan.DELIVERSTATUS_AWAITDELIVER + "' " - : " and (deliverStatus is null or deliverStatus = '')"; - - //DGSETYY-43(若使用记录中含有特殊感染类型,则该使用记录只允许单独转换为一张新的申请单) - String specialInfectionCondition = " and (po.specialInfection is null or po.specialInfection = '' ) "; - - RecyclingApplication recyclingApplication = null; - if(StringUtils.isBlank(useRecordList.get(0).getSpecialInfection())){ - //查询该科室的手术间与当前使用记录的手术单相同的申请单(且未终止、待回收、未发货、未做预回收),也是使用记录转换的申请单 - recyclingApplication = (RecyclingApplication)objectDao.getBySql(RecyclingApplication.class.getSimpleName(), - "where 1=1 and useRecord is not null and departCoding='"+ departCoding + "'" - + "and type in ('"+ InvoicePlan.TYPE_COMBO_FORM +"') " - + "and (endStatus is null) " + deliverStatusCondition - + "and (recyclingStatus='" + InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE + "' or recyclingStatus is null) " - + "and (po.id not in (select invoicePlan.id from "+ TousseItem.class.getSimpleName() +" where prepareRecycleAmount is not null)) " - + specialInfectionCondition - + settleAcountDepartCodeSql - + urgentTousseSql - + patientInfoSql - + lowTempSterilizationModeNotInSql - + "order by po.id desc"); - } - //会否合并转换申请单(如果找到符合条件的待合并申请,且合并后的备注与条码长度不超4000就会合并) - boolean willMergeConvertApplication = false; - if(recyclingApplication != null){ - //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 - String tousseBarcodes = recyclingApplication.getTousseBarcodes(); - if(StringUtils.isBlank(tousseBarcodes)){ - tousseBarcodes = ";"; - } - //使用记录里本次需要转换的包条码 - String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemList); - tousseBarcodes += tousseBarcodesOfUseRecord; - //新申请单的备注 - String newRemark = - getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication); - //判断合并申请单后的备注或包条码的长度是否大于最大长度。如果大于则创建新的申请单 - if(StringUtils.length(tousseBarcodes) < DatabaseUtil.varcharTypeMaxLength - && StringUtils.length(newRemark) < DatabaseUtil.varcharTypeMaxLength){ - willMergeConvertApplication = true; - } - } - if(!willMergeConvertApplication || !departCanMerge){ - //创建器械包申请单 + }else{ + //一次性物品和器械包合并转换 List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - settleAccountDeptCodeApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, - tousseBarcodeMap,applicationCreateDate,null,null,dpf,InvoicePlan.TYPE_COMBO_FORM, - tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId); - + tempApplyTousseMap,applyDiposableGoodsMap, applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, + tempTousseBarcodeMap,applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_COMBO_FORM, + tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId, handlerDepartCode); + //一次性物品只合并到第一张通用申请单 + applyDiposableGoodsMap = new HashMap(); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { //2.插入使用记录转换申请单关联中间表 @@ -5902,111 +6083,7 @@ //将转换后申请单对象保存至集合中 recyclingApplicationListAfterConvert.addAll(recyclingApplicationList); } - }else{ - //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 - String tousseBarcodes = recyclingApplication.getTousseBarcodes(); - if(StringUtils.isBlank(tousseBarcodes)){ - tousseBarcodes = ";"; - } - //使用记录里本次需要转换的包条码 - String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemList); - tousseBarcodes += tousseBarcodesOfUseRecord; - recyclingApplication.setTousseBarcodes(tousseBarcodes); - recyclingApplication.setUseRecord(firstUseRecord); - //申请人、提交时间及最后修改时间都取最后一条使用记录的信息 - //recyclingApplication.setApplicant(applicant); - //recyclingApplication.setApplicationTime(applicationCreateDate); - recyclingApplication.setSubmitTime(applicationCreateDate); - //住院号叠加 - if(StringUtils.isNotBlank(recyclingApplication.getHospitalNumber())){ - if(StringUtils.isNotBlank(hospitalNumbers)){ - recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber() + "," + hospitalNumbers); - }else{ - recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber()); - } - }else{ - if(StringUtils.isNotBlank(hospitalNumbers)){ - recyclingApplication.setHospitalNumber(hospitalNumbers); - }else{ - //原住院号与新使用记录的住院号都为空白时,不用设置 - } - } - //2.插入使用记录转换申请单关联中间表 - for (UseRecord tempUseRecord : useRecordList) { - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(recyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); - } - - //备注重新设置(病人巡回洗手护士需要将来自多条使用记录的数据拼接,手术数量与器械包数量进行重新设值) - recyclingApplication.setRemark(getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication)); - objectDao.saveOrUpdate(recyclingApplication); - - //只有当使用记录数量为1时,才启用器械交接 - if(useRecordList.size() == 1){ - //追加申请项(相同物品的,则数量进行叠加) - List tousseTransitionPlanItemList = - recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); - - if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ - List list = new ArrayList(); - for (TousseTransitionPlanItem item : tousseTransitionPlanItemList) { - //构造与生成预回收相关的数据 - list.add(tousseTransitionPlanItemManager.build(item.getTousseItemId(), item.getAmount(), item.getUrgentAmount())); - } - //如果预回收项不为空时,保存预回收记录 - if(CollectionUtils.isNotEmpty(list)){ - tousseTransitionPlanManager.save(firstUseRecord, recyclingApplication, list, true); - } - } - } else { - for (UseRecord tempUseRecord : useRecordList) { - recyclingApplication.setUseRecord(tempUseRecord); - } - //追加申请项(相同物品的,则数量进行叠加) - recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); - } - recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); - //将转换后申请单对象保存至集合中 - recyclingApplicationListAfterConvert.add(recyclingApplication); } - }else{ - //一次性物品和器械包合并转换 - List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - settleAccountDeptCodeApplyTousseMap,applyDiposableGoodsMap, applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, - tousseBarcodeMap,applicationCreateDate,operationRoom,null,dpf,InvoicePlan.TYPE_COMBO_FORM, - tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId); - - if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ - for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { - //2.插入使用记录转换申请单关联中间表 - for (UseRecord tempUseRecord : useRecordList) { - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); - } - - //只有当使用记录数量为1时,才启用器械交接 - if(useRecordList.size() == 1){ - List tousseTransitionPlanItemList = - getTousseTransitionPlanItemListByRecyclingApplication(newRecyclingApplication); - //如果预回收项不为空时,保存预回收记录 - if(CollectionUtils.isNotEmpty(tousseTransitionPlanItemList)){ - //生成预回收记录 - tousseTransitionPlanManager.save(firstUseRecord, newRecyclingApplication, tousseTransitionPlanItemList , false); - } - } - } - - //将转换后申请单对象保存至集合中 - recyclingApplicationListAfterConvert.addAll(recyclingApplicationList); - } } } } @@ -6494,11 +6571,17 @@ for (String settleAccountDeptCode : settleAcountDeptCodeAncestorIdToDisinfectTiListMap.keySet()) { String settleAccountDeptName = disinfectTousseSettleAccountDeptMap.get(settleAccountDeptCode); Map> ancestorIdToDisinfectTiListTempMap = settleAcountDeptCodeAncestorIdToDisinfectTiListMap.get(settleAccountDeptCode); - disinfectTousseConvertRecyclingApplication(ancestorIdToDisinfectTiListTempMap, - useRecordList, useRecordConvertRecyclingApplicationMergeRegular, - allowUseReordToApplicationMergeWhenOperationRoomIsBlank, - needInvoiceForUseRecordOfDepart,departCoding, departCanMerge, - applicant, depart,applicationCreateDate, settleAccountDeptCode, settleAccountDeptName); + //根据供应室处理科室分组 + Map>> handlerDepartCodeAncestorIdToDisinfectTiListMap = getHandlerDepartCodeAncestorIdToDisinfectTiListMap(ancestorIdToDisinfectTiListTempMap, departCoding); + for (Entry>> handlerDepartCodeAncestorIdToDisinfectTiListMapEntry : handlerDepartCodeAncestorIdToDisinfectTiListMap.entrySet()) { + String handlerDepartCode = handlerDepartCodeAncestorIdToDisinfectTiListMapEntry.getKey(); + Map> ancestorIdToDisinfectTiListTempMapGroupByHandlerDepartCode = handlerDepartCodeAncestorIdToDisinfectTiListMapEntry.getValue(); + disinfectTousseConvertRecyclingApplication(ancestorIdToDisinfectTiListTempMapGroupByHandlerDepartCode, + useRecordList, useRecordConvertRecyclingApplicationMergeRegular, + allowUseReordToApplicationMergeWhenOperationRoomIsBlank, + needInvoiceForUseRecordOfDepart,departCoding, departCanMerge, + applicant, depart,applicationCreateDate, settleAccountDeptCode, settleAccountDeptName, handlerDepartCode); + } } } } @@ -6508,6 +6591,69 @@ } /** + * 返回器械包实例条码及器械包定义id的map + * @param tousseInstanceList 器械包实例 + * @param tousseBarcodeMap 器械包实例条码及器械包定义id的map + * @return + */ + private Map buildTousseBarcodeMap(List tousseInstanceList, + Map tousseBarcodeMap) { + Map tempTousseBarcodeMap = new HashMap(); + if(CollectionUtils.isEmpty(tousseInstanceList) + || MapUtils.isEmpty(tousseBarcodeMap)){ + return tempTousseBarcodeMap; + } + for (TousseInstance tousseInstance : tousseInstanceList) { + Long tousseDefinitionId = tousseBarcodeMap.get(tousseInstance.getBarcode()); + if(tousseDefinitionId == null){ + continue; + } + tempTousseBarcodeMap.put(tousseInstance.getBarcode(), tousseDefinitionId); + } + return tempTousseBarcodeMap; + } + + /** + * 根据handlerDepartCode分组 + * @param ancestorIdToDisinfectTiListTempMap 消毒物品祖先包定义id及器械包实例的map + * @param departCoding 使用记录录入科室编码 + * @return + */ + private Map>> getHandlerDepartCodeAncestorIdToDisinfectTiListMap(Map> ancestorIdToDisinfectTiListTempMap, + String departCoding) { + Map>> handlerDepartCodeAncestorIdToDisinfectTiListMap = new HashMap>>(); + if(MapUtils.isEmpty(ancestorIdToDisinfectTiListTempMap)){ + return handlerDepartCodeAncestorIdToDisinfectTiListMap; + } + + List allTousseInstanceList = new ArrayList(); + for (List tousseInstanceList : ancestorIdToDisinfectTiListTempMap.values()) { + allTousseInstanceList.addAll(tousseInstanceList); + } + + Map> handlerDepartCodeTousseInstanceMap = recyclingApplicationManager.getHandlerDepartCodeTousseInstanceMap(allTousseInstanceList, departCoding); + for (Entry> handlerDepartCodeTousseInstanceMapEntry : handlerDepartCodeTousseInstanceMap.entrySet()) { + String handlerDepartCode = handlerDepartCodeTousseInstanceMapEntry.getKey(); + List tousseInstanceList = handlerDepartCodeTousseInstanceMapEntry.getValue(); + for (TousseInstance tousseInstance : tousseInstanceList) { + Map> ancestorIdToDisinfectTiListMap = handlerDepartCodeAncestorIdToDisinfectTiListMap.get(handlerDepartCode); + if(ancestorIdToDisinfectTiListMap == null){ + ancestorIdToDisinfectTiListMap = new HashMap>(); + } + Long ancestorID = tousseInstance.getTousseDefinitionAncestorID(); + List tiList = ancestorIdToDisinfectTiListMap.get(ancestorID); + if(tiList == null){ + tiList = new ArrayList(); + } + tiList.add(tousseInstance); + ancestorIdToDisinfectTiListMap.put(ancestorID, tiList); + handlerDepartCodeAncestorIdToDisinfectTiListMap.put(handlerDepartCode, ancestorIdToDisinfectTiListMap); + } + } + return handlerDepartCodeAncestorIdToDisinfectTiListMap; + } + + /** * 开启高低温物品合并配置项mergeRegularOfLowTemperatureToussesAfterExtracted后,灭菌方式不在lowTempSterilizationModes中的器械包不能合并到灭菌方式为lowTempSterilizationModes的申请单上 * @param lowTempSterilizationModesJSONArray * @return @@ -6825,9 +6971,9 @@ } } } - //如果长度超过200时,只截取前200字符 - if(patientNames.length() > 200){ - patientNames = patientNames.substring(0 , 200) + "..."; + //如果长度超过50时,只截取前50字符 + if(patientNames.length() > 50){ + patientNames = patientNames.substring(0 , 50) + "..."; } recyclingApplication.setPatient(patientNames); } @@ -6921,12 +7067,13 @@ * @param applicationCreateDate 申请时间 * @param settleAccountDeptName 结算科室名称 * @param settleAccountDeptCode 结算科室编码 + * @param handlerDepartCode 供应室处理科室编码 */ private void disinfectTousseConvertRecyclingApplication(Map> ancestorIdToDisinfectTiListMap, List useRecordList,String useRecordConvertRecyclingApplicationMergeRegular, boolean allowUseReordToApplicationMergeWhenOperationRoomIsBlank, boolean needInvoiceForUseRecordOfDepart,String departCoding,boolean departCanMerge, - String applicant, String depart,Date applicationCreateDate, String settleAccountDeptCode, String settleAccountDeptName){ + String applicant, String depart,Date applicationCreateDate, String settleAccountDeptCode, String settleAccountDeptName, String handlerDepartCode){ //1.科室是否合并,取决于参数:departCanMerge //2.按什么规则合并(参数1为true时),取决于参数:useRecordConvertRecyclingApplicationMergeRegular //3.如果合并规则为按手术间合并,如果使用记录的手术间为空时,是否合并到手术间为空的申请单(未做回收、未做发货的申请单) @@ -6947,7 +7094,7 @@ idToTousseDefinitionMap.put(td.getId(), td); }); //2.查找出消毒物品祖先包的处理科室作为转换后的申请单的处理 - Map> ancestorIdToHandleOrgUnitListMap = getHandleOrgUnitMap(new ArrayList(ancestorTdIdSet),departCoding); + Map> ancestorIdToHandleOrgUnitListMap = getHandleOrgUnitMap(new ArrayList(ancestorTdIdSet),departCoding); /** * 需要创建申请单的map集合 @@ -6986,10 +7133,17 @@ //包定义的优先处理科室 String priorHandleDepartCoding = ancestorTd.getHandlerDepartCode(); if(handleOrgUnitList.size() == 1){ + //如果在【供应室处理器械包配置】中只有一个科室是配置了处理转单的器械包,则直接转单到该处理科室(此为旧业务逻辑)HDQRMYY-69 handleDepartCoding = handleOrgUnitList.get(0); - }else{ - //否则该消毒物品的处理科室数量大于1时 + }else if(handleOrgUnitList.contains(handlerDepartCode)){ + //指定的处理科室HDQRMYY-69 + handleDepartCoding = handlerDepartCode; + }else if(handleOrgUnitList.contains(priorHandleDepartCoding)){ + //包定义上的优先处理科室HDQRMYY-69 handleDepartCoding = priorHandleDepartCoding; + }else{ + //抛异常,需要调整器械包定义的优先处理科室HDQRMYY-69 + throw new SystemException(ancestorTd.getName() + "未配置供应室处理器械包配置"); } Map>> ancestorTdToMaterialMd5ToTiListMapMap = handleDepartCodingToAncestorTdToMaterialMd5ToTiListMapMapMap.get(handleDepartCoding); @@ -7122,242 +7276,361 @@ String lowTempMergeRegular,String operationRoom,boolean allowUseReordToApplicationMergeWhenOperationRoomIsBlank, boolean needInvoiceForUseRecordOfDepart,String departCoding, String settleAccountDeptCode, String settleAccountDept, boolean departCanMerge, String applicant, String depart,Date applicationCreateDate,double dpf, String urgentStatus){ - if(MapUtils.isEmpty(applyTousseMap)){ + if(MapUtils.isEmpty(tousseNameToTousseInstanceMap)){ return; } - //使用记录里所有的包条码 - String tousseBarcodesOfUseRecord = StringUtils.join(tousseBarcodeToTdIdMap.keySet(),";") + ";"; - - //器械包实例录使用记录后转换申请单后将会生成的单类型(用于外来器械录使用记录转换后的申请单类型,仅用于东莞中医院外来器械与普通器械包录单后合并的需求) - String invoicePlanTypeAfterTousseConvert = InvoicePlan.TYPE_COMBO_FORM; - //当前登录用户 - LoginUserData loginUserData = AcegiHelper.getLoginUser(); - - String applicationFormType = CssdUtils.getSystemSetConfigByName("applicationFormType"); - - //申请单类型(2表示分开的申请单,1为通用申请单) - if(InvoicePlan.APPLICATION_FORM_TYPE_SPLIT.equals(applicationFormType)){ - invoicePlanTypeAfterTousseConvert = InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM; - } - - boolean includeNeedInvoiceItemsForUseRecord = false; - for (String tousseName : applyTousseMap.keySet()) { - if(StringUtils.equals(tousseNameToIsInvoiceMap.get(tousseName), Constants.STR_YES)){ - includeNeedInvoiceItemsForUseRecord = true; + List tousseInstanceWillBeConvertedTousseItemList = new ArrayList(); + for(Entry> entry : tousseNameToTousseInstanceMap.entrySet()){ + List tousseInstanceList = entry.getValue(); + if(CollectionUtils.isNotEmpty(tousseInstanceList)){ + tousseInstanceWillBeConvertedTousseItemList.addAll(tousseInstanceList); } } - UseRecord firstUseRecord = sterilizationModeToBelongToUseRecordList.get(0); - Long firstUseRecordId = firstUseRecord.getId(); - String hospitalNumbers = null; - //备注 - String remark = RecyclingApplicationUtils.getRemarkByUseRecordAndProjectConfig(applyTousseMap, useRecordList,null,false,false,objectDao); - List recyclingApplicationListAfterConvert = new ArrayList(); - - //结算科室过滤条件SZSDSRMYY-95 - String settleAccountDeptCodeSql = ""; - if(StringUtils.isNotBlank(settleAccountDeptCode)){ - settleAccountDeptCodeSql = " and settleAccountsDepartCoding = '" + settleAccountDeptCode + "' "; + if(CollectionUtils.isEmpty(tousseInstanceWillBeConvertedTousseItemList)){ + return; } - //加急的申请单 - String urgentTousseSql = ""; - if(StringUtils.isNotBlank(urgentStatus)){ - urgentTousseSql = " and urgent = '" + urgentStatus + "' "; - } + //根据供应室处理科室编码分组 + Map> handlerDepartCodeTousseInstanceMap = recyclingApplicationManager.getHandlerDepartCodeTousseInstanceMap(tousseInstanceWillBeConvertedTousseItemList, departCoding); - //使用记录患者信息的过滤sql - String patientInfoSql = buildPatientInfoSql(useRecordList); - - //只有当使用记录的数量为1且使用记录的手术间不为空时才按手术间进行合并 - if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_OPERATIONROOM.equals(lowTempMergeRegular) - && (StringUtils.isNotBlank(operationRoom) - || (StringUtils.isBlank(operationRoom) && allowUseReordToApplicationMergeWhenOperationRoomIsBlank) - )){ - String operationRoomSql = null; - if(StringUtils.isNotBlank(operationRoom)){ - operationRoomSql = " and operationRoom='"+ operationRoom +"' "; - }else{ - operationRoomSql = " and (operationRoom='' or operationRoom is null)"; + List recyclingApplicationListAfterConvert = new ArrayList(); + for (Entry> handlerDepartCodeTousseInstanceMapEntry : handlerDepartCodeTousseInstanceMap.entrySet()) { + //供应室处理科室编码 + String handlerDepartCode = handlerDepartCodeTousseInstanceMapEntry.getKey(); + //供应室处理科室编码相同的器械包 + List tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode = handlerDepartCodeTousseInstanceMapEntry.getValue(); + if(CollectionUtils.isEmpty(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode)){ + continue; } - //如果条件1为不需要发货或条件2中没有要发货的物品,则只查询发货状态为null的物品;否则查询待发货的单 - String deliverStatusCondition = needInvoiceForUseRecordOfDepart && includeNeedInvoiceItemsForUseRecord - ? " and deliverStatus='" + InvoicePlan.DELIVERSTATUS_AWAITDELIVER + "' " - : " and (deliverStatus is null or deliverStatus = '') "; - //若使用记录中含有特殊感染类型,则该使用记录只允许单独转换为一张新的申请单,不允许和其他的使用记录合并转换为一张申请单;DGSETYY-43 - String specialInfectionCondition = " and (po.specialInfection is null or po.specialInfection = '') "; + //使用记录里本次需要转换的包条码 + String tousseBarcodesOfUseRecord = getTousseBarcodesOfUseRecord(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + //器械包名称及数量map + Map tempApplyTousseMap = buildApplyTousseAmountMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + //器械包的加急数量,key为tousseName + Map tempApplyUrgentTousseMap = buildApplyUrgentTousseMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + //器械包名称对应的加急数量map(key为器械包名称,value为加急数量) + Map tempApplyTousseNameToUrgentAmountMap = buildApplyTousseNameToUrgentAmountMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + //器械包名称对应的最高加急级别map(key为器械包名称,value为最高加急级别对象) + Map tempApplyTousseNameToMaxUrgentLevelMap = buildApplyTousseNameToMaxUrgentLevelMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + //器械包条码及祖先包定义id的map + Map tempTousseBarcodeToTdIdMap = buildTousseBarcodeMap(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode, tousseBarcodeToTdIdMap); + + //器械包实例录使用记录后转换申请单后将会生成的单类型(用于外来器械录使用记录转换后的申请单类型,仅用于东莞中医院外来器械与普通器械包录单后合并的需求) + String invoicePlanTypeAfterTousseConvert = InvoicePlan.TYPE_COMBO_FORM; - RecyclingApplication recyclingApplication = null; - if(StringUtils.isBlank(firstUseRecord.getSpecialInfection())){ - //查询该科室的手术间与当前使用记录的手术单相同的申请单(且未终止、待回收、未发货、未做预回收),也是使用记录转换的申请单 - recyclingApplication = (RecyclingApplication)objectDao.getBySql(RecyclingApplication.class.getSimpleName(), - "where 1=1 and useRecord is not null and sterilizationMode='"+ sterilizationMode +"' and departCoding='"+ departCoding + "'" - + operationRoomSql - + "and type = '"+ invoicePlanTypeAfterTousseConvert +"' " - + "and (endStatus is null) " + deliverStatusCondition - + "and (recyclingStatus='" + InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE + "') " - + "and (po.id not in (select invoicePlan.id from "+ TousseItem.class.getSimpleName() +" where prepareRecycleAmount is not null)) " - + specialInfectionCondition - + settleAccountDeptCodeSql - + urgentTousseSql - + patientInfoSql - + "order by po.id desc"); + //当前登录用户 + LoginUserData loginUserData = AcegiHelper.getLoginUser(); + + String applicationFormType = CssdUtils.getSystemSetConfigByName("applicationFormType"); + + //申请单类型(2表示分开的申请单,1为通用申请单) + if(InvoicePlan.APPLICATION_FORM_TYPE_SPLIT.equals(applicationFormType)){ + invoicePlanTypeAfterTousseConvert = InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM; } - //会否合并转换申请单(如果找到符合条件的待合并申请,且合并后的备注与条码长度不超4000就会合并) - boolean willMergeConvertApplication = false; - if(recyclingApplication != null){ - //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 - String tousseBarcodes = recyclingApplication.getTousseBarcodes(); - if(StringUtils.isBlank(tousseBarcodes)){ - tousseBarcodes = ";"; + + boolean includeNeedInvoiceItemsForUseRecord = false; + for (String tousseName : tempApplyTousseMap.keySet()) { + if(StringUtils.equals(tousseNameToIsInvoiceMap.get(tousseName), Constants.STR_YES)){ + includeNeedInvoiceItemsForUseRecord = true; } - tousseBarcodes += tousseBarcodesOfUseRecord; - //新申请单的备注 - String newRemark = - getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication); - //判断合并申请单后的备注或包条码的长度是否大于最大长度。如果大于则创建新的申请单 - if(StringUtils.length(tousseBarcodes) < DatabaseUtil.varcharTypeMaxLength - && StringUtils.length(newRemark) < DatabaseUtil.varcharTypeMaxLength){ - willMergeConvertApplication = true; - } } - if(!willMergeConvertApplication || !departCanMerge){ - //创建器械包申请单 - List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - applyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, - tousseBarcodeToTdIdMap,applicationCreateDate,operationRoom,sterilizationMode,dpf,invoicePlanTypeAfterTousseConvert, - applyUrgentTousseMap,applyTousseNameToUrgentAmountMap,applyTousseNameToMaxUrgentLevelMap,firstUseRecordId); + UseRecord firstUseRecord = sterilizationModeToBelongToUseRecordList.get(0); + Long firstUseRecordId = firstUseRecord.getId(); + String hospitalNumbers = null; + //备注 + String remark = RecyclingApplicationUtils.getRemarkByUseRecordAndProjectConfig(tempApplyTousseMap, useRecordList,null,false,false,objectDao); + + //结算科室过滤条件SZSDSRMYY-95 + String settleAccountDeptCodeSql = ""; + if(StringUtils.isNotBlank(settleAccountDeptCode)){ + settleAccountDeptCodeSql = " and settleAccountsDepartCoding = '" + settleAccountDeptCode + "' "; + } + + //加急的申请单 + String urgentTousseSql = ""; + if(StringUtils.isNotBlank(urgentStatus)){ + urgentTousseSql = " and urgent = '" + urgentStatus + "' "; + } + + //使用记录患者信息的过滤sql + String patientInfoSql = buildPatientInfoSql(useRecordList); + //处理科室的过滤条件HDQRMYY-69 + String handlerDepartCodeSql = ""; + if(StringUtils.isNotBlank(handlerDepartCode)){ + handlerDepartCodeSql = " and handleDepartCoding = '" + handlerDepartCode + "' "; + } + + //只有当使用记录的数量为1且使用记录的手术间不为空时才按手术间进行合并 + if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_OPERATIONROOM.equals(lowTempMergeRegular) + && (StringUtils.isNotBlank(operationRoom) + || (StringUtils.isBlank(operationRoom) && allowUseReordToApplicationMergeWhenOperationRoomIsBlank) + )){ + String operationRoomSql = null; + if(StringUtils.isNotBlank(operationRoom)){ + operationRoomSql = " and operationRoom='"+ operationRoom +"' "; + }else{ + operationRoomSql = " and (operationRoom='' or operationRoom is null)"; + } + //如果条件1为不需要发货或条件2中没有要发货的物品,则只查询发货状态为null的物品;否则查询待发货的单 + String deliverStatusCondition = needInvoiceForUseRecordOfDepart && includeNeedInvoiceItemsForUseRecord + ? " and deliverStatus='" + InvoicePlan.DELIVERSTATUS_AWAITDELIVER + "' " + : " and (deliverStatus is null or deliverStatus = '') "; - if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ - for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { - //2.插入使用记录转换申请单关联中间表 - for (UseRecord tempUseRecord : sterilizationModeToBelongToUseRecordList) { - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); - } - + //若使用记录中含有特殊感染类型,则该使用记录只允许单独转换为一张新的申请单,不允许和其他的使用记录合并转换为一张申请单;DGSETYY-43 + String specialInfectionCondition = " and (po.specialInfection is null or po.specialInfection = '') "; + + RecyclingApplication recyclingApplication = null; + if(StringUtils.isBlank(firstUseRecord.getSpecialInfection())){ + //查询该科室的手术间与当前使用记录的手术单相同的申请单(且未终止、待回收、未发货、未做预回收),也是使用记录转换的申请单 + recyclingApplication = (RecyclingApplication)objectDao.getBySql(RecyclingApplication.class.getSimpleName(), + "where 1=1 and useRecord is not null and sterilizationMode='"+ sterilizationMode +"' and departCoding='"+ departCoding + "'" + + operationRoomSql + + "and type = '"+ invoicePlanTypeAfterTousseConvert +"' " + + "and (endStatus is null) " + deliverStatusCondition + + "and (recyclingStatus='" + InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE + "') " + + "and (po.id not in (select invoicePlan.id from "+ TousseItem.class.getSimpleName() +" where prepareRecycleAmount is not null)) " + + specialInfectionCondition + + settleAccountDeptCodeSql + + urgentTousseSql + + patientInfoSql + + handlerDepartCodeSql + + "order by po.id desc"); + } + //会否合并转换申请单(如果找到符合条件的待合并申请,且合并后的备注与条码长度不超4000就会合并) + boolean willMergeConvertApplication = false; + if(recyclingApplication != null){ + //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 + String tousseBarcodes = recyclingApplication.getTousseBarcodes(); + if(StringUtils.isBlank(tousseBarcodes)){ + tousseBarcodes = ";"; } - //将转换后申请单对象保存至集合中 - recyclingApplicationListAfterConvert.addAll(recyclingApplicationList); + tousseBarcodes += tousseBarcodesOfUseRecord; + //新申请单的备注 + String newRemark = + getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication); + //判断合并申请单后的备注或包条码的长度是否大于最大长度。如果大于则创建新的申请单 + if(StringUtils.length(tousseBarcodes) < DatabaseUtil.varcharTypeMaxLength + && StringUtils.length(newRemark) < DatabaseUtil.varcharTypeMaxLength){ + willMergeConvertApplication = true; + } } - }else{ - //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 - String tousseBarcodes = recyclingApplication.getTousseBarcodes(); - if(StringUtils.isBlank(tousseBarcodes)){ - tousseBarcodes = ";"; - } - tousseBarcodes += tousseBarcodesOfUseRecord; - - recyclingApplication.setTousseBarcodes(tousseBarcodes); - recyclingApplication.setUseRecord(firstUseRecord); - //申请人、提交时间及最后修改时间都取最后一条使用记录的信息 - //recyclingApplication.setApplicant(applicant); - //recyclingApplication.setApplicationTime(applicationCreateDate); - recyclingApplication.setSubmitTime(applicationCreateDate); - //住院号叠加 - if(StringUtils.isNotBlank(recyclingApplication.getHospitalNumber())){ - if(StringUtils.isNotBlank(hospitalNumbers)){ - recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber() + "," + hospitalNumbers); - }else{ - recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber()); + if(!willMergeConvertApplication || !departCanMerge){ + //创建器械包申请单 + List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( + tempApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, + tempTousseBarcodeToTdIdMap,applicationCreateDate,operationRoom,sterilizationMode,dpf,invoicePlanTypeAfterTousseConvert, + tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId, handlerDepartCode); + + if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ + for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { + //2.插入使用记录转换申请单关联中间表 + for (UseRecord tempUseRecord : sterilizationModeToBelongToUseRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } + + } + //将转换后申请单对象保存至集合中 + recyclingApplicationListAfterConvert.addAll(recyclingApplicationList); } }else{ - if(StringUtils.isNotBlank(hospitalNumbers)){ - recyclingApplication.setHospitalNumber(hospitalNumbers); + //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 + String tousseBarcodes = recyclingApplication.getTousseBarcodes(); + if(StringUtils.isBlank(tousseBarcodes)){ + tousseBarcodes = ";"; + } + tousseBarcodes += tousseBarcodesOfUseRecord; + + recyclingApplication.setTousseBarcodes(tousseBarcodes); + recyclingApplication.setUseRecord(firstUseRecord); + //申请人、提交时间及最后修改时间都取最后一条使用记录的信息 + //recyclingApplication.setApplicant(applicant); + //recyclingApplication.setApplicationTime(applicationCreateDate); + recyclingApplication.setSubmitTime(applicationCreateDate); + //住院号叠加 + if(StringUtils.isNotBlank(recyclingApplication.getHospitalNumber())){ + if(StringUtils.isNotBlank(hospitalNumbers)){ + recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber() + "," + hospitalNumbers); + }else{ + recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber()); + } }else{ - //原住院号与新使用记录的住院号都为空白时,不用设置 + if(StringUtils.isNotBlank(hospitalNumbers)){ + recyclingApplication.setHospitalNumber(hospitalNumbers); + }else{ + //原住院号与新使用记录的住院号都为空白时,不用设置 + } } + //2.插入使用记录转换申请单关联中间表 + for (UseRecord tempUseRecord : sterilizationModeToBelongToUseRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(recyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } + + //版本加1(因为该申请单有新的物品(使用记录登记)合并进来) + VersionOperators.increaseVersion(recyclingApplication); + recyclingApplication.setDescription("该单于"+ ForgonDateUtils.safelyFormatDate(new Date(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "") + "追加如下物品:" + MapTools.mapConvertString(tempApplyTousseMap , "名称" , "数量")); + + //备注重新设置(病人巡回洗手护士需要将来自多条使用记录的数据拼接,手术数量与器械包数量进行重新设值) + recyclingApplication.setRemark(getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication)); + + //追加申请项(相同物品的,则数量进行叠加) + /*appendTousseItemForRecyclingApplication(recyclingApplication , applyTousseMap, + tousseBarcodeToTdIdMap, applyUrgentTousseMap, tousseNameToIsInvoiceMap);*/ + if(CollectionUtils.isNotEmpty(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode)){ + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); + } + + //将转换后申请单对象保存至集合中 + recyclingApplicationListAfterConvert.add(recyclingApplication); } - //2.插入使用记录转换申请单关联中间表 - for (UseRecord tempUseRecord : sterilizationModeToBelongToUseRecordList) { - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(recyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); - } + }else if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_DEPART.equals(lowTempMergeRegular)){ - //版本加1(因为该申请单有新的物品(使用记录登记)合并进来) - VersionOperators.increaseVersion(recyclingApplication); - recyclingApplication.setDescription("该单于"+ ForgonDateUtils.safelyFormatDate(new Date(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "") + "追加如下物品:" + MapTools.mapConvertString(applyTousseMap , "名称" , "数量")); + //如果条件1为不需要发货或条件2中没有要发货的物品,则只查询发货状态为null的物品;否则查询待发货的单 + String deliverStatusCondition = needInvoiceForUseRecordOfDepart && includeNeedInvoiceItemsForUseRecord + ? " and deliverStatus='" + InvoicePlan.DELIVERSTATUS_AWAITDELIVER + "' " + : " and (deliverStatus is null or deliverStatus = '') "; - //备注重新设置(病人巡回洗手护士需要将来自多条使用记录的数据拼接,手术数量与器械包数量进行重新设值) - recyclingApplication.setRemark(getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication)); + //若使用记录中含有特殊感染类型,则该使用记录只允许单独转换为一张新的申请单,不允许和其他的使用记录合并转换为一张申请单;DGSETYY-43 + String specialInfectionCondition = " and (po.specialInfection is null or po.specialInfection = '') "; - //追加申请项(相同物品的,则数量进行叠加) - /*appendTousseItemForRecyclingApplication(recyclingApplication , applyTousseMap, - tousseBarcodeToTdIdMap, applyUrgentTousseMap, tousseNameToIsInvoiceMap);*/ - List tousseInstanceWillBeConvertedTousseItemList = new ArrayList(); - for(Entry> entry : tousseNameToTousseInstanceMap.entrySet()){ - List tousseInstanceList = entry.getValue(); - if(CollectionUtils.isNotEmpty(tousseInstanceList)){ - tousseInstanceWillBeConvertedTousseItemList.addAll(tousseInstanceList); - } + RecyclingApplication recyclingApplication = null; + if(StringUtils.isBlank(firstUseRecord.getSpecialInfection())){ + //查询该科室的手术间与当前使用记录的手术单相同的申请单(且未终止、待回收、未发货、未做预回收),也是使用记录转换的申请单 + recyclingApplication = (RecyclingApplication)objectDao.getBySql(RecyclingApplication.class.getSimpleName(), + "where 1=1 and useRecord is not null and sterilizationMode='"+ sterilizationMode +"' and departCoding='"+ departCoding + "'" + + "and type = '"+ invoicePlanTypeAfterTousseConvert +"' " + + "and (endStatus is null) " + deliverStatusCondition + + "and (recyclingStatus='" + InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE + "') " + + "and (po.id not in (select invoicePlan.id from "+ TousseItem.class.getSimpleName() +" where prepareRecycleAmount is not null)) " + + specialInfectionCondition + + settleAccountDeptCodeSql + + urgentTousseSql + + patientInfoSql + + handlerDepartCodeSql + + "order by po.id desc"); } - if(CollectionUtils.isNotEmpty(tousseInstanceWillBeConvertedTousseItemList)){ - recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); - recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); - } - //将转换后申请单对象保存至集合中 - recyclingApplicationListAfterConvert.add(recyclingApplication); - } - }else if(UseRecord.CONVERT_RECYCLINGMANAGER_MERGE_REGULAR_DEPART.equals(lowTempMergeRegular)){ - - //如果条件1为不需要发货或条件2中没有要发货的物品,则只查询发货状态为null的物品;否则查询待发货的单 - String deliverStatusCondition = needInvoiceForUseRecordOfDepart && includeNeedInvoiceItemsForUseRecord - ? " and deliverStatus='" + InvoicePlan.DELIVERSTATUS_AWAITDELIVER + "' " - : " and (deliverStatus is null or deliverStatus = '') "; - - //若使用记录中含有特殊感染类型,则该使用记录只允许单独转换为一张新的申请单,不允许和其他的使用记录合并转换为一张申请单;DGSETYY-43 - String specialInfectionCondition = " and (po.specialInfection is null or po.specialInfection = '') "; - - RecyclingApplication recyclingApplication = null; - if(StringUtils.isBlank(firstUseRecord.getSpecialInfection())){ - //查询该科室的手术间与当前使用记录的手术单相同的申请单(且未终止、待回收、未发货、未做预回收),也是使用记录转换的申请单 - recyclingApplication = (RecyclingApplication)objectDao.getBySql(RecyclingApplication.class.getSimpleName(), - "where 1=1 and useRecord is not null and sterilizationMode='"+ sterilizationMode +"' and departCoding='"+ departCoding + "'" - + "and type = '"+ invoicePlanTypeAfterTousseConvert +"' " - + "and (endStatus is null) " + deliverStatusCondition - + "and (recyclingStatus='" + InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE + "') " - + "and (po.id not in (select invoicePlan.id from "+ TousseItem.class.getSimpleName() +" where prepareRecycleAmount is not null)) " - + specialInfectionCondition - + settleAccountDeptCodeSql - + urgentTousseSql - + patientInfoSql - + "order by po.id desc"); - } - - //会否合并转换申请单(如果找到符合条件的待合并申请,且合并后的备注与条码长度不超4000就会合并) - boolean willMergeConvertApplication = false; - if(recyclingApplication != null){ - //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 - String tousseBarcodes = recyclingApplication.getTousseBarcodes(); - if(StringUtils.isBlank(tousseBarcodes)){ - tousseBarcodes = ";"; + //会否合并转换申请单(如果找到符合条件的待合并申请,且合并后的备注与条码长度不超4000就会合并) + boolean willMergeConvertApplication = false; + if(recyclingApplication != null){ + //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 + String tousseBarcodes = recyclingApplication.getTousseBarcodes(); + if(StringUtils.isBlank(tousseBarcodes)){ + tousseBarcodes = ";"; + } + tousseBarcodes += tousseBarcodesOfUseRecord; + //新申请单的备注 + String newRemark = + getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication); + //判断合并申请单后的备注或包条码的长度是否大于最大长度。如果大于则创建新的申请单 + if(StringUtils.length(tousseBarcodes) < DatabaseUtil.varcharTypeMaxLength + && StringUtils.length(newRemark) < DatabaseUtil.varcharTypeMaxLength){ + willMergeConvertApplication = true; + } } - tousseBarcodes += tousseBarcodesOfUseRecord; - //新申请单的备注 - String newRemark = - getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication); - //判断合并申请单后的备注或包条码的长度是否大于最大长度。如果大于则创建新的申请单 - if(StringUtils.length(tousseBarcodes) < DatabaseUtil.varcharTypeMaxLength - && StringUtils.length(newRemark) < DatabaseUtil.varcharTypeMaxLength){ - willMergeConvertApplication = true; + if(!willMergeConvertApplication || !departCanMerge){ + //创建器械包申请单 + List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( + tempApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, + tempTousseBarcodeToTdIdMap,applicationCreateDate,null,sterilizationMode,dpf,invoicePlanTypeAfterTousseConvert, + tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId, handlerDepartCode); + + if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ + for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { + //2.插入使用记录转换申请单关联中间表 + for (UseRecord tempUseRecord : sterilizationModeToBelongToUseRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } + } + //将转换后申请单对象保存至集合中 + recyclingApplicationListAfterConvert.addAll(recyclingApplicationList); + } + }else{ + //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 + String tousseBarcodes = recyclingApplication.getTousseBarcodes(); + if(StringUtils.isBlank(tousseBarcodes)){ + tousseBarcodes = ";"; + } + tousseBarcodes += tousseBarcodesOfUseRecord; + + recyclingApplication.setTousseBarcodes(tousseBarcodes); + recyclingApplication.setUseRecord(firstUseRecord); + //申请人、提交时间及最后修改时间都取最后一条使用记录的信息 + //recyclingApplication.setApplicant(applicant); + //recyclingApplication.setApplicationTime(applicationCreateDate); + recyclingApplication.setSubmitTime(applicationCreateDate); + //住院号叠加 + if(StringUtils.isNotBlank(recyclingApplication.getHospitalNumber())){ + if(StringUtils.isNotBlank(hospitalNumbers)){ + recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber() + "," + hospitalNumbers); + }else{ + recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber()); + } + }else{ + if(StringUtils.isNotBlank(hospitalNumbers)){ + recyclingApplication.setHospitalNumber(hospitalNumbers); + }else{ + //原住院号与新使用记录的住院号都为空白时,不用设置 + } + } + //2.插入使用记录转换申请单关联中间表 + for (UseRecord tempUseRecord : sterilizationModeToBelongToUseRecordList) { + UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); + useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); + useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); + useRecordConvertRecyclingApplication.setInvoicePlanId(recyclingApplication.getId()); + useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); + objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); + } + + //版本加1(因为该申请单有新的物品(使用记录登记)合并进来) + VersionOperators.increaseVersion(recyclingApplication); + recyclingApplication.setDescription("该单于"+ ForgonDateUtils.safelyFormatDate(new Date(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "") + "追加如下物品:" + MapTools.mapConvertString(tempApplyTousseMap , "名称" , "数量")); + + //备注重新设置(病人巡回洗手护士需要将来自多条使用记录的数据拼接,手术数量与器械包数量进行重新设值) + recyclingApplication.setRemark(getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication)); + + //追加申请项(相同物品的,则数量进行叠加) + /*appendTousseItemForRecyclingApplication(recyclingApplication , applyTousseMap, + tousseBarcodeToTdIdMap, applyUrgentTousseMap, tousseNameToIsInvoiceMap);*/ + /*List tousseInstanceWillBeConvertedTousseItemList = new ArrayList(); + for(Entry> entry : tousseNameToTousseInstanceMap.entrySet()){ + List tousseInstanceList = entry.getValue(); + if(CollectionUtils.isNotEmpty(tousseInstanceList)){ + tousseInstanceWillBeConvertedTousseItemList.addAll(tousseInstanceList); + } + }*/ + if(CollectionUtils.isNotEmpty(tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode)){ + recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemListGroupByHandlerDepartCode); + recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); + } + + //将转换后申请单对象保存至集合中 + recyclingApplicationListAfterConvert.add(recyclingApplication); } - } - if(!willMergeConvertApplication || !departCanMerge){ - //创建器械包申请单 + }else{ + //创建新的申请单(可能是器械包申请单、也可能是通用申请单) List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - applyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, - tousseBarcodeToTdIdMap,applicationCreateDate,null,sterilizationMode,dpf,invoicePlanTypeAfterTousseConvert, - applyUrgentTousseMap,applyTousseNameToUrgentAmountMap,applyTousseNameToMaxUrgentLevelMap,firstUseRecordId); + tempApplyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, + tempTousseBarcodeToTdIdMap,applicationCreateDate,operationRoom,sterilizationMode,dpf,invoicePlanTypeAfterTousseConvert, + tempApplyUrgentTousseMap,tempApplyTousseNameToUrgentAmountMap,tempApplyTousseNameToMaxUrgentLevelMap,firstUseRecordId, handlerDepartCode); if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { @@ -7374,92 +7647,7 @@ //将转换后申请单对象保存至集合中 recyclingApplicationListAfterConvert.addAll(recyclingApplicationList); } - }else{ - //1.申请单更改备注、增加器械包条码、设置最后转换的使用记录、及重新计算申请项 - String tousseBarcodes = recyclingApplication.getTousseBarcodes(); - if(StringUtils.isBlank(tousseBarcodes)){ - tousseBarcodes = ";"; - } - tousseBarcodes += tousseBarcodesOfUseRecord; - - recyclingApplication.setTousseBarcodes(tousseBarcodes); - recyclingApplication.setUseRecord(firstUseRecord); - //申请人、提交时间及最后修改时间都取最后一条使用记录的信息 - //recyclingApplication.setApplicant(applicant); - //recyclingApplication.setApplicationTime(applicationCreateDate); - recyclingApplication.setSubmitTime(applicationCreateDate); - //住院号叠加 - if(StringUtils.isNotBlank(recyclingApplication.getHospitalNumber())){ - if(StringUtils.isNotBlank(hospitalNumbers)){ - recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber() + "," + hospitalNumbers); - }else{ - recyclingApplication.setHospitalNumber(recyclingApplication.getHospitalNumber()); - } - }else{ - if(StringUtils.isNotBlank(hospitalNumbers)){ - recyclingApplication.setHospitalNumber(hospitalNumbers); - }else{ - //原住院号与新使用记录的住院号都为空白时,不用设置 - } - } - //2.插入使用记录转换申请单关联中间表 - for (UseRecord tempUseRecord : sterilizationModeToBelongToUseRecordList) { - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(recyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); - } - - //版本加1(因为该申请单有新的物品(使用记录登记)合并进来) - VersionOperators.increaseVersion(recyclingApplication); - recyclingApplication.setDescription("该单于"+ ForgonDateUtils.safelyFormatDate(new Date(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "") + "追加如下物品:" + MapTools.mapConvertString(applyTousseMap , "名称" , "数量")); - - //备注重新设置(病人巡回洗手护士需要将来自多条使用记录的数据拼接,手术数量与器械包数量进行重新设值) - recyclingApplication.setRemark(getRemarkByRecyclingApplicationAndProjectConfig(recyclingApplication)); - - //追加申请项(相同物品的,则数量进行叠加) - /*appendTousseItemForRecyclingApplication(recyclingApplication , applyTousseMap, - tousseBarcodeToTdIdMap, applyUrgentTousseMap, tousseNameToIsInvoiceMap);*/ - List tousseInstanceWillBeConvertedTousseItemList = new ArrayList(); - for(Entry> entry : tousseNameToTousseInstanceMap.entrySet()){ - List tousseInstanceList = entry.getValue(); - if(CollectionUtils.isNotEmpty(tousseInstanceList)){ - tousseInstanceWillBeConvertedTousseItemList.addAll(tousseInstanceList); - } - } - if(CollectionUtils.isNotEmpty(tousseInstanceWillBeConvertedTousseItemList)){ - recyclingApplicationManager.appendTousseItemFromUseRecord(recyclingApplication, true, true, false, tousseInstanceWillBeConvertedTousseItemList); - recyclingApplicationManager.saveOrUpdateRecyclingApplication(recyclingApplication, true); - } - - //将转换后申请单对象保存至集合中 - recyclingApplicationListAfterConvert.add(recyclingApplication); } - }else{ - //创建新的申请单(可能是器械包申请单、也可能是通用申请单) - List recyclingApplicationList = recyclingApplicationManager.createRecyclingApplicationByTousse( - applyTousseMap,new HashMap(), applicant, depart, departCoding, settleAccountDept, settleAccountDeptCode, hospitalNumbers, remark, - tousseBarcodeToTdIdMap,applicationCreateDate,operationRoom,sterilizationMode,dpf,invoicePlanTypeAfterTousseConvert, - applyUrgentTousseMap,applyTousseNameToUrgentAmountMap,applyTousseNameToMaxUrgentLevelMap,firstUseRecordId); - - if(CollectionUtils.isNotEmpty(recyclingApplicationList)){ - for (RecyclingApplication newRecyclingApplication : recyclingApplicationList) { - //2.插入使用记录转换申请单关联中间表 - for (UseRecord tempUseRecord : sterilizationModeToBelongToUseRecordList) { - UseRecordToRecycleApplication useRecordConvertRecyclingApplication = new UseRecordToRecycleApplication(); - useRecordConvertRecyclingApplication.setConvertUserCode(loginUserData.getUserName()); - useRecordConvertRecyclingApplication.setConvertUserName(loginUserData.getUserFullName()); - useRecordConvertRecyclingApplication.setInvoicePlanId(newRecyclingApplication.getId()); - useRecordConvertRecyclingApplication.setUseRecordId(tempUseRecord.getId()); - objectDao.saveOrUpdate(useRecordConvertRecyclingApplication); - } - } - - //将转换后申请单对象保存至集合中 - recyclingApplicationListAfterConvert.addAll(recyclingApplicationList); - } } //使用记录转换申请单后对器械包实例更新tousseItemId字段值 updateTousseItemIdForTousseInstanceOfUseRecordAfterConvert(sterilizationModeToBelongToUseRecordList , recyclingApplicationListAfterConvert); @@ -7549,31 +7737,18 @@ useRecordMap.put(useRecord.getId(), useRecord); } } - boolean enableTheSettlementDepartmentIsDepartOfPatientFunction = - ConfigUtils.getSystemSetConfigByNameBool("enableTheSettlementDepartmentIsDepartOfPatientFunction"); if(CollectionUtils.isNotEmpty(tousseList) && CollectionUtils.isNotEmpty(recyclingApplicationList)){ for (TousseInstance tousseInstance : tousseList) { TousseDefinition td = tousseInstance.getTousseDefinition(); - String settleAccountDeptCodeUseRecord = ""; - if(enableTheSettlementDepartmentIsDepartOfPatientFunction){ - if(StringUtils.isNotBlank(tousseInstance.getSettleAccountDeptCodeUseRecord())){ - //表格列“结算科室”中选择的科室已经设置了默认结算科室,则取值默认结算科室中设定的值;SZSDSRMYY-95 - settleAccountDeptCodeUseRecord = getApplyDepartDefaultSettleDepart(tousseInstance.getSettleAccountDeptCodeUseRecord()); - }else{ - UseRecord useRecord = useRecordMap.get(tousseInstance.getUseRecord_id()); - settleAccountDeptCodeUseRecord = getApplyDepartDefaultSettleDepart(useRecord.getDepartCoding()); - } - } + Long ancestorID = td.getAncestorID(); //不管有无在使用记录里登记丢失报损记录,都会记录其对应转换后的tousseItemId if(td.isCustomTousse()){ //只在自定义器械申请单中查找对应的申请项 for (RecyclingApplication recyclingApplication : recyclingApplicationList) { if(StringUtils.equals(InvoicePlan.TYPE_CUSTOM_TOUSSE_APPLIACTION_FORM, recyclingApplication.getType())){ - if(CollectionUtils.isNotEmpty(recyclingApplication.getApplicationItems())){ + if(CollectionUtils.isNotEmpty(recyclingApplication.getApplicationItems()) && StringUtils.contains(recyclingApplication.getTousseBarcodes(), ";" + tousseInstance.getBarcode() + ";")){ for (TousseItem tousseItem : recyclingApplication.getApplicationItems()) { - if(td.getId().longValue() == tousseItem.getTousseDefinitionId().longValue() - && (StringUtils.isBlank(settleAccountDeptCodeUseRecord) - || StringUtils.equals(settleAccountDeptCodeUseRecord, recyclingApplication.getSettleAccountsDepartCoding()))){ + if(ancestorID.longValue() == tousseItem.getAncestorID().longValue()){ tousseInstance.setTousseItemId(tousseItem.getId()); //设置加急额外信息的预计使用时间ZSRY-53 setUrgentExpectUseTime(tousseInstance, recyclingApplication); @@ -7588,11 +7763,9 @@ for (RecyclingApplication recyclingApplication : recyclingApplicationList) { if(StringUtils.equals(InvoicePlan.TYPE_COMBO_FORM, recyclingApplication.getType()) || StringUtils.equals(InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, recyclingApplication.getType())){ - if(CollectionUtils.isNotEmpty(recyclingApplication.getApplicationItems())){ + if(CollectionUtils.isNotEmpty(recyclingApplication.getApplicationItems()) && StringUtils.contains(recyclingApplication.getTousseBarcodes(), ";" + tousseInstance.getBarcode() + ";")){ for (TousseItem tousseItem : recyclingApplication.getApplicationItems()) { - if(td.getId().longValue() == tousseItem.getTousseDefinitionId().longValue() - && (StringUtils.isBlank(settleAccountDeptCodeUseRecord) - || StringUtils.equals(settleAccountDeptCodeUseRecord, recyclingApplication.getSettleAccountsDepartCoding()))){ + if(ancestorID.longValue() == tousseItem.getAncestorID().longValue()){ tousseInstance.setTousseItemId(tousseItem.getId()); //设置加急额外信息的预计使用时间ZSRY-53 setUrgentExpectUseTime(tousseInstance, recyclingApplication); @@ -14959,4 +15132,20 @@ } + /** + * 器械包名称及数量的map + * @param tousseInstanceList 器械包实例列表 + * @return + */ + private Map buildApplyTousseAmountMap(List tousseInstanceList) { + Map applyTousseAmountMap = new HashMap(); + if(CollectionUtils.isEmpty(tousseInstanceList)){ + return applyTousseAmountMap; + } + for (TousseInstance tousseInstance : tousseInstanceList) { + increaseMapAmount(applyTousseAmountMap, tousseInstance.getTousseName()); + } + return applyTousseAmountMap; + } + }