Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r37526 -r37777 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 37526) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 37777) @@ -1897,9 +1897,19 @@ if(StringUtils.equals(sterilingMode, "无")){ sterilingModeSql = " and (t.sterilingMode is null or t.sterilingMode = '') "; sterilingModeAncestorSql = " and ((case when tdAncestor.isTraceable = '"+ Constants.STR_NO +"' then s.sterilizationMode else t.sterilingMode end) is null or (case when tdAncestor.isTraceable = '"+ Constants.STR_NO +"' then s.sterilizationMode else t.sterilingMode end)='') "; + sterilingModeAncestorSql = " and (tdAncestor.isTraceable = '"+ Constants.STR_NO +"' and exists ( select 1 from " + + Sterilisation.class.getSimpleName() + +" si where (si.sterilizationMode is null or si.sterilizationMode='') and si.sterilisation = tdAncestor.sterilingMethod) " + + "or tdAncestor.isTraceable<>'否' " + + " and (t.sterilingMode is null or t.sterilingMode='') ) "; }else if(StringUtils.isNotBlank(sterilingMode) && !StringUtils.equals(sterilingMode, "全部")){ sterilingModeSql = " and t.sterilingMode = '" + sterilingMode + "' "; - sterilingModeAncestorSql = " and (case when tdAncestor.isTraceable = '"+ Constants.STR_NO +"' then s.sterilizationMode else t.sterilingMode end)='" + sterilingMode + "' "; + sterilingModeAncestorSql = " and (tdAncestor.isTraceable = '"+ Constants.STR_NO +"' and exists ( select 1 from " + + Sterilisation.class.getSimpleName() + +" si where si.sterilizationMode='" + + sterilingMode + +"' and si.sterilisation = tdAncestor.sterilingMethod ) or tdAncestor.isTraceable<>'否' and t.sterilingMode='" + + sterilingMode +"') "; } String sterilizerNameAndSterileFrequencySql = ""; if(StringUtils.isNotBlank(sterilizerName)){ @@ -1919,40 +1929,41 @@ }else{ sqlSelect_SpellingSql = ""; } - //关联来源科室的sql语句 - String departJoinSql = String.format(" left join %s ou on ou.orgUnitCoding = t.departCoding ", OrgUnit.class.getSimpleName()); //1、普通器械包、消毒物品、敷料包 - String sql = "select * from (select distinct t.reviewBasket_id,t.id id, ou.name depart, t.tousseName name, td.includeImplant, b.barcode, t.sterilingType, (case when tdAncestor.isTraceable = '"+ Constants.STR_NO +"' then s.sterilizationMode else t.sterilingMode end) sterilingMode," + String sql = "select * from (select t.reviewBasket_id,t.id id,t.departCoding, t.tousseName name, td.includeImplant, b.barcode, t.sterilingType,tdAncestor.sterilingMethod,t.sterilingMode," + " t.reviewTime,t.isUrgentTousse,tdAncestor.isTraceable, tdAncestor.id tdAncestorId " + sqlSelect_UrgentLevel + sqlSelect_SpellingSql - + " from tousseinstance t" + sqlJoin_UrgentLevel + departJoinSql - + " , barcodedevice b , cssdHandleTousses tt , TousseDefinition td , TousseDefinition tdAncestor left join Sterilisation s on s.sterilisation = tdAncestor.sterilingMethod " - + "where t.id = b.id and tt.tousseDefinitionId=td.ancestorID and t.tousseDefinition_id=td.id and td.ancestorID=tdAncestor.id " - + "and t.reviewBasket_id " + reviewedBasketSql + + " from tousseinstance t" + sqlJoin_UrgentLevel + + " join barcodedevice b on b.id=t.id " + + " join TousseDefinition td on td.id=t.tousseDefinition_id " + + " join TousseDefinition tdAncestor on tdAncestor.id=td.ancestorID where " + + " t.reviewBasket_id " + reviewedBasketSql + " and t.comboTousseInstanceId is null and td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_INSIDE+"','"+TousseDefinition.PACKAGE_TYPE_DISINFECTION+"','"+TousseDefinition.PACKAGE_TYPE_DRESSING+"','"+TousseDefinition.PACKAGE_TYPE_COMBO+"') " //本供应室处理的器械包实例,但是录入代理灭菌单的器械包实例(只有代理科室才能灭菌) // + " and t.orgUnitCoding='"+currentOrgUnitCode+"' and tt.orgUnitCode='"+currentOrgUnitCode+"'" + " and (" - + "(t.proxyDisinfection_id is null and t.orgUnitCoding='"+currentOrgUnitCode+"' and tt.orgUnitCode='"+currentOrgUnitCode+"') or " - + "(t.proxyDisinfection_id is not null and t.proxyDisinfection_id in (select ip.id from invoicePlan ip where ip.handleDepartCoding='"+currentOrgUnitCode+"'))" + + "(t.proxyDisinfection_id is null and t.orgUnitCoding='"+currentOrgUnitCode+"' " + + " and exists (select 1 from cssdHandleTousses tt where tt.tousseDefinitionId=tdAncestor.id and tt.orgUnitCode='"+currentOrgUnitCode+"') " + + ") or (t.proxyDisinfection_id is not null and t.proxyDisinfection_id in (select ip.id from invoicePlan ip where ip.handleDepartCoding='"+currentOrgUnitCode+"'))" + ")" + " and t.status <> '" + TousseInstance.STATUS_DISCARD + "' " - + (StringUtils.isNotBlank(taskGroup) ? String.format(" and tt.taskGroup = '%s' ", taskGroup) : "") + + (StringUtils.isNotBlank(taskGroup) ? " and exists ( select 1 from cssdHandleTousses tt where tt.taskGroup='"+ taskGroup +"' ) " : "") + sterilingModeAncestorSql + sterilizerNameAndSterileFrequencySql; if(StringUtils.isNotBlank(taskGroup)){ //外来器械包默认处理科室及任务组 JSONObject foreignTousseHandleDepartAndTaskGroupJsonobject = supplyRoomConfig.getOneForeignTousseHandleDepartAndTaskGroupByDepartCode(AcegiHelper.getCurrentOrgUnitCode()); //2、外来器械包、外来器械拆分小包 if(foreignTousseHandleDepartAndTaskGroupJsonobject != null && StringTools.equals(taskGroup, foreignTousseHandleDepartAndTaskGroupJsonobject.optString("taskGroup"))){ - sql += " union all select t.reviewBasket_id,t.id id, ou.name depart, t.tousseName name, td.includeImplant, b.barcode, t.sterilingType, t.sterilingMode," + sql += " union all select t.reviewBasket_id,t.id id,t.departCoding, t.tousseName name, td.includeImplant, b.barcode, t.sterilingType,null sterilingMethod,t.sterilingMode," + " t.reviewTime,t.isUrgentTousse, '"+ Constants.STR_YES +"' isTraceable, null tdAncestorId " + sqlSelect_UrgentLevel + sqlSelect_SpellingSql - + " from tousseinstance t " + sqlJoin_UrgentLevel + departJoinSql - + " , barcodedevice b , TousseDefinition td " - + "where t.id = b.id and t.tousseDefinition_id=td.id and td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_FOREIGN+"','"+TousseDefinition.PACKAGE_TYPE_SPLIT+"') and t.reviewBasket_id " + + " from tousseinstance t " + sqlJoin_UrgentLevel + + " join barcodedevice b on b.id=t.id " + + " join TousseDefinition td on td.id=t.tousseDefinition_id " + + "where td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_FOREIGN+"','"+TousseDefinition.PACKAGE_TYPE_SPLIT+"') and t.reviewBasket_id " + reviewedBasketSql + " and t.orgUnitCoding='"+currentOrgUnitCode+"' " + " and t.status <> '" + TousseInstance.STATUS_DISCARD + "'" @@ -1961,71 +1972,76 @@ } //3、自定义器械包 if(taskGroup.equals(supplyRoomConfig.getCustomTousseDefaultTaskGroup())){ - sql += " union all select reviewBasket_id,t.id id, ou.name depart, t.tousseName name, td.includeImplant, b.barcode, t.sterilingType, t.sterilingMode," + sql += " union all select reviewBasket_id,t.id id,t.departCoding , t.tousseName name, td.includeImplant, b.barcode, t.sterilingType,null sterilingMethod,t.sterilingMode," + " t.reviewTime,t.isUrgentTousse , '"+ Constants.STR_YES +"' isTraceable, null tdAncestorId " + sqlSelect_UrgentLevel + sqlSelect_SpellingSql - + " from tousseinstance t" + sqlJoin_UrgentLevel + departJoinSql - + " , barcodedevice b , TousseDefinition td " - + "where t.id = b.id and t.tousseDefinition_id=td.id and td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"') and t.reviewBasket_id " + + " from tousseinstance t" + sqlJoin_UrgentLevel + + " join barcodedevice b on b.id=t.id " + + " join TousseDefinition td on td.id=t.tousseDefinition_id " + + "where td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"') and t.reviewBasket_id " + reviewedBasketSql + " and t.orgUnitCoding='"+currentOrgUnitCode+"' " + " and t.status <> '" + TousseInstance.STATUS_DISCARD + "'" + sterilingModeSql + sterilizerNameAndSterileFrequencySql; } //4、外部代理灭菌 - sql += " union all select t.reviewBasket_id,t.id id, ou.name depart,t.tousseName name, td.includeImplant, b.barcode, t.sterilingType, (case when tdAncestor.isTraceable = '"+ Constants.STR_NO +"' then s.sterilizationMode else t.sterilingMode end) sterilingMode," + sql += " union all select t.reviewBasket_id,t.id id,t.departCoding ,t.tousseName name, td.includeImplant, b.barcode, t.sterilingType,tdAncestor.sterilingMethod,t.sterilingMode," + " t.reviewTime,t.isUrgentTousse,tdAncestor.isTraceable, tdAncestor.id tdAncestorId " + sqlSelect_UrgentLevel + sqlSelect_SpellingSql - + "from tousseinstance t"+ sqlJoin_UrgentLevel + departJoinSql + + "from tousseinstance t"+ sqlJoin_UrgentLevel + " left join " + InvoicePlan.class.getSimpleName() + " pd on pd.id=t.proxyDisinfection_id " - + " , barcodedevice b , TousseDefinition td , TousseDefinition tdAncestor left join Sterilisation s on s.sterilisation = tdAncestor.sterilingMethod " - + "where t.id = b.id and t.tousseDefinition_id=td.id and td.ancestorID=tdAncestor.id and td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY+"') and t.reviewBasket_id " + + " join barcodedevice b on b.id=t.id " + + " join TousseDefinition td on td.id=t.tousseDefinition_id " + + " join TousseDefinition tdAncestor on tdAncestor.id=td.ancestorID " + + "where td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY+"') and t.reviewBasket_id " + reviewedBasketSql + " and (pd.id is null and t.orgunitcoding='"+currentOrgUnitCode+"' or pd.id is not null and pd.handleDepartCoding='"+currentOrgUnitCode+"') " + " and t.status <> '" + TousseInstance.STATUS_DISCARD + "'" + sterilingModeAncestorSql + sterilizerNameAndSterileFrequencySql; }else{ //2、外来器械包、外来器械拆分小包 - sql += " union all select t.reviewBasket_id,t.id id, ou.name depart, t.tousseName name, td.includeImplant, b.barcode, t.sterilingType, t.sterilingMode," + sql += " union all select t.reviewBasket_id,t.id id,t.departCoding , t.tousseName name, td.includeImplant, b.barcode, t.sterilingType,null sterilingMethod,t.sterilingMode," + "t.reviewTime,t.isUrgentTousse , '"+ Constants.STR_YES +"' isTraceable, null tdAncestorId " + sqlSelect_UrgentLevel + sqlSelect_SpellingSql - + "from tousseinstance t " + sqlJoin_UrgentLevel + departJoinSql - + " , barcodedevice b , TousseDefinition td " - + "where t.id = b.id and t.tousseDefinition_id=td.id and td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_FOREIGN+"','"+TousseDefinition.PACKAGE_TYPE_SPLIT+"') and t.reviewBasket_id " + + "from tousseinstance t " + sqlJoin_UrgentLevel + + " join barcodedevice b on b.id=t.id join TousseDefinition td on td.id=t.tousseDefinition_id " + + "where td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_FOREIGN+"','"+TousseDefinition.PACKAGE_TYPE_SPLIT+"') and t.reviewBasket_id " + reviewedBasketSql + " and t.orgUnitCoding='"+currentOrgUnitCode+"' " + " and t.status <> '" + TousseInstance.STATUS_DISCARD + "'" + sterilingModeSql + sterilizerNameAndSterileFrequencySql; //3、自定义器械包 - sql += " union all select t.reviewBasket_id,t.id id, ou.name depart, t.tousseName name, td.includeImplant, b.barcode, t.sterilingType, t.sterilingMode," + sql += " union all select t.reviewBasket_id,t.id id,t.departCoding , t.tousseName name, td.includeImplant, b.barcode, t.sterilingType,null sterilingMethod,t.sterilingMode," + "t.reviewTime,t.isUrgentTousse , '"+ Constants.STR_YES +"' isTraceable, null tdAncestorId " + sqlSelect_UrgentLevel + sqlSelect_SpellingSql - + " from tousseinstance t " + sqlJoin_UrgentLevel + departJoinSql - + " , barcodedevice b , TousseDefinition td " - + "where t.id = b.id and t.tousseDefinition_id=td.id and td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"') and t.reviewBasket_id " + + " from tousseinstance t " + sqlJoin_UrgentLevel + + " join barcodedevice b on b.id=t.id join TousseDefinition td on td.id=t.tousseDefinition_id " + + " where td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"') and t.reviewBasket_id " + reviewedBasketSql + " and t.orgUnitCoding='"+currentOrgUnitCode+"' " + " and t.status <> '" + TousseInstance.STATUS_DISCARD + "'" + sterilingModeSql + sterilizerNameAndSterileFrequencySql; //4、外部代理灭菌 - sql += " union all select t.reviewBasket_id,t.id id, ou.name depart,t.tousseName name, td.includeImplant, b.barcode, t.sterilingType, (case when tdAncestor.isTraceable = '"+ Constants.STR_NO +"' then s.sterilizationMode else t.sterilingMode end) sterilingMode," + sql += " union all select t.reviewBasket_id,t.id id,t.departCoding ,t.tousseName name, td.includeImplant, b.barcode, t.sterilingType,tdAncestor.sterilingMethod,t.sterilingMode," + "t.reviewTime,t.isUrgentTousse,tdAncestor.isTraceable, tdAncestor.id tdAncestorId " + sqlSelect_UrgentLevel + sqlSelect_SpellingSql - + "from tousseinstance t"+ sqlJoin_UrgentLevel + departJoinSql + + "from tousseinstance t"+ sqlJoin_UrgentLevel + " left join " + InvoicePlan.class.getSimpleName() + " pd on pd.id=t.proxyDisinfection_id " - + " , barcodedevice b , TousseDefinition td , TousseDefinition tdAncestor left join Sterilisation s on s.sterilisation = tdAncestor.sterilingMethod " - + "where t.id = b.id and t.tousseDefinition_id=td.id and td.ancestorID=tdAncestor.id and td.tousseType in ('"+TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY+"') and t.reviewBasket_id " + + " join barcodedevice b on b.id=t.id " + + " join TousseDefinition td on td.id=t.tousseDefinition_id " + + " join TousseDefinition tdAncestor on tdAncestor.id=td.ancestorID " + + " where td.tousseType ='"+TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY+"' and t.reviewBasket_id " + reviewedBasketSql + " and (pd.id is null and t.orgunitcoding='"+currentOrgUnitCode+"' or pd.id is not null and pd.handleDepartCoding='"+currentOrgUnitCode+"') " + " and t.status <> '" + TousseInstance.STATUS_DISCARD + "'" @@ -2162,6 +2178,8 @@ , boolean openGoodsSearch) { ResultSet rs = objectDao.executeSql(sql); Set fixedTousseDefinitionIds = new HashSet(); + Set departCodings = new HashSet(); + Map sterilisationMap = getSterilisationMap(); try { while(rs.next()){ TousseSimpleVO vo = new TousseSimpleVO(); @@ -2177,7 +2195,7 @@ vo.setId(rs.getLong("id")); vo.setSterilingType(rs.getString("SterilingType")); - vo.setSterilingMode(rs.getString("SterilingMode")); + //如果是否追溯为否,则设置为否,否则都为是 String isTraceable = rs.getString("isTraceable"); if(StringUtils.equals(Constants.STR_NO, isTraceable)){ @@ -2187,9 +2205,19 @@ fixedTousseDefinitionIds.add(ancestorTDId); vo.setAncestorTDId(ancestorTDId); } + String sterilingMethod = rs.getString("sterilingMethod"); + if(StringUtils.isNotBlank(sterilingMethod)){ + vo.setSterilingMode(sterilisationMap.get(sterilingMethod)); + }else{ + vo.setSterilingMode(rs.getString("SterilingMode")); + } }else{ + vo.setSterilingMode(rs.getString("SterilingMode")); vo.setBarcode(rs.getString("barcode")); - vo.setDepart(rs.getString("depart")); + vo.setDepartCoding(rs.getString("departCoding")); + if(StringUtils.isNotBlank(vo.getDepartCoding())){ + departCodings.add(vo.getDepartCoding()); + } vo.setReviewTime(ForgonDateUtils.safelyFormatDate(rs.getTimestamp("reviewTime"), Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); } vo.setIsUrgentTousse(rs.getString("isUrgentTousse")); @@ -2213,14 +2241,27 @@ } vos.add(vo); } - - if(CollectionUtils.isNotEmpty(fixedTousseDefinitionIds)){ - Map fixedBarcodesAndID = this.getFixedBarcodesByTdAncestorIdIds(fixedTousseDefinitionIds); + boolean iteration = false; + Map fixedBarcodesAndID = null; + Map departMap = null; + if(CollectionUtils.isNotEmpty(fixedTousseDefinitionIds) || + CollectionUtils.isNotEmpty(departCodings)){ + iteration = true; + if(CollectionUtils.isNotEmpty(fixedTousseDefinitionIds)){ + fixedBarcodesAndID = this.getFixedBarcodesByTdAncestorIdIds(fixedTousseDefinitionIds); + } + if(CollectionUtils.isNotEmpty(departCodings)){ + departMap = getDepartMap(departCodings); + } + } + if(iteration){ for (Long basketId : map.keySet()) { List list = map.get(basketId); for (TousseSimpleVO tousseSimpleVO : list) { if(StringUtils.equals(Constants.STR_NO, tousseSimpleVO.getIsTraceable())){ tousseSimpleVO.setFixedBarcode(fixedBarcodesAndID.get(tousseSimpleVO.getAncestorTDId())); + }else if(StringUtils.isNotBlank(tousseSimpleVO.getDepartCoding()) && departMap != null){ + tousseSimpleVO.setDepart(departMap.get(tousseSimpleVO.getDepartCoding())); } } } @@ -2232,8 +2273,54 @@ DatabaseUtil.closeResultSetAndStatement(rs); } } - /** + * 获取value灭菌方式和key灭菌程序 + * @return + */ + private Map getSterilisationMap(){ + Map result = new HashMap(); + StringBuffer sbf = new StringBuffer(); + sbf.append("select sterilizationMode,sterilisation from "); + sbf.append(Sterilisation.class.getSimpleName()); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sbf.toString()); + while (rs.next()) { + result.put(rs.getString("sterilisation"), rs.getString("sterilizationMode")); + } + } catch (Exception e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return result; + } + /** + * 获取key部门编码对应的value部门名称 + * @param departCodings 编码 + * @return + */ + private Map getDepartMap(Set departCodings){ + Map departMap = new HashMap(); + StringBuffer sbf = new StringBuffer(); + sbf.append("select ou.name,ou.orgUnitCoding from "); + sbf.append(OrgUnit.class.getSimpleName()); + sbf.append(" ou where 1=1 "); + sbf.append(SqlUtils.getInStringListSql("ou.orgUnitCoding", departCodings)); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sbf.toString()); + while (rs.next()) { + departMap.put(rs.getString("orgUnitCoding"), rs.getString("name")); + } + } catch (Exception e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return departMap; + } + /** * 根据器械包祖先包ID查询固定条码 * @param fixedTousseDefinitionIds * @return