Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java =================================================================== diff -u -r32976 -r33362 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java (.../RecyclingRecordAction.java) (revision 32976) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java (.../RecyclingRecordAction.java) (revision 33362) @@ -2402,34 +2402,9 @@ }else{ tousseGroupIdsSql = ""; } - String recyDepartmentGroupIdsSql = ""; - if(StringUtils.isNotBlank(recyDepartmentGroupDepartCodes)){ - if(recyDepartmentGroupDepartCodes.contains("all") || recyDepartmentGroupDepartCodes.contains("全部")){ - List departmentGroups = objectDao.findAllObjects(DepartmentGroup.class.getSimpleName()); - if(CollectionUtils.isNotEmpty(departmentGroups)){ - Set departCodes = new HashSet(); - for (DepartmentGroup departmentGroup : departmentGroups) { - String depart = departmentGroup.getDepartCodes(); - if(StringUtils.isNotBlank(depart)){ - if(depart.contains(";")){ - String[] departArr = depart.split(";"); - for (int i = 0; i < departArr.length; i++) { - departCodes.add(departArr[i]); - } - }else{ - departCodes.add(depart); - } - } - } - if(departCodes.size() > 0){ - recyDepartmentGroupIdsSql = " and " + SqlUtils.getStringFieldInLargeCollectionsPredicate("ou.orgUnitCoding", departCodes, " 1=1 "); - } - } - }else{ - recyDepartmentGroupIdsSql = SqlUtils.getWhereSqlByfilterFieldAndStringValueAndSeparator("ou.orgUnitCoding", recyDepartmentGroupDepartCodes, ";"); - } - } - String extraSql = taskGroupsSql + tousseGroupIdsSql + recyDepartmentGroupIdsSql; + //获取回收科室分组过滤 + String recyDepartmentGroupIdsSql = getRecyDepartmentGroupDepartCodesWhereSql(recyDepartmentGroupDepartCodes, "ou.orgUnitCoding", ";"); + String extraSql = taskGroupsSql + tousseGroupIdsSql; JSONObject resultObj = new JSONObject(); JSONArray tableArr = new JSONArray(); try { @@ -2494,7 +2469,7 @@ if(includeOtherTousses){//包含其他器械,则不需要过滤包定义id includeTousseIds.clear(); } - sql = getRecyclingDetailSqlForhandleResultSetByRecyclingDetailPrintConfig(fromTime, toTime, handlerDepartCoding, orOrgUnitNameSQL, departGroupIds, includeTousseIds, extraSql); + sql = getRecyclingDetailSqlForhandleResultSetByRecyclingDetailPrintConfig(fromTime, toTime, handlerDepartCoding, orOrgUnitNameSQL, departGroupIds, includeTousseIds, extraSql, recyDepartmentGroupIdsSql); try { Map>> orgUnitGroupNameMap = new HashMap>>();//科室分组对应更详细的map Map sumAmountMap = new HashMap();//各列的汇总map @@ -2631,7 +2606,7 @@ departGroupNameToShowName.put(departGroup.optString("departGroupName"), departGroup.optString("showDepartGroupName")); } } - sql = getRecyclingDetailSqlForhandleResultSetByRecyclingDetailPrintConfig(fromTime, toTime, handlerDepartCoding, orOrgUnitNameSQL, departGroupIds2, null, extraSql); + sql = getRecyclingDetailSqlForhandleResultSetByRecyclingDetailPrintConfig(fromTime, toTime, handlerDepartCoding, orOrgUnitNameSQL, departGroupIds2, null, extraSql, recyDepartmentGroupIdsSql); try { rs = objectDao.executeSql(sql); Map>> orgUnitGroupNameMap = new HashMap>>();//科室分组对应更详细信息的map @@ -2690,6 +2665,41 @@ } } /** + * 获取回收科室分组过滤 + * @param recyDepartmentGroupDepartCodes 回收科室分组编码 + * @return "" 或者 " and ****" + */ + private String getRecyDepartmentGroupDepartCodesWhereSql(String recyDepartmentGroupDepartCodes, String filterField, String separator){ + String recyDepartmentGroupIdsSql = ""; + if(StringUtils.isNotBlank(recyDepartmentGroupDepartCodes)){ + if(recyDepartmentGroupDepartCodes.contains("all") || recyDepartmentGroupDepartCodes.contains("全部")){ + List departmentGroups = objectDao.findAllObjects(DepartmentGroup.class.getSimpleName()); + if(CollectionUtils.isNotEmpty(departmentGroups)){ + Set departCodes = new HashSet(); + for (DepartmentGroup departmentGroup : departmentGroups) { + String depart = departmentGroup.getDepartCodes(); + if(StringUtils.isNotBlank(depart)){ + if(depart.contains(separator)){ + String[] departArr = depart.split(separator); + for (int i = 0; i < departArr.length; i++) { + departCodes.add(departArr[i]); + } + }else{ + departCodes.add(depart); + } + } + } + if(departCodes.size() > 0){ + recyDepartmentGroupIdsSql = " and " + SqlUtils.getStringFieldInLargeCollectionsPredicate(filterField, departCodes, " 1=1 "); + } + } + }else{ + recyDepartmentGroupIdsSql = SqlUtils.getWhereSqlByfilterFieldAndStringValueAndSeparator(filterField, recyDepartmentGroupDepartCodes, separator); + } + } + return recyDepartmentGroupIdsSql; + } + /** * 获取装配界面的打印回收清单格式的查询语句 * @param fromTime 开始时间 * @param toTime 结束时间 @@ -2700,7 +2710,7 @@ * @param extraSql 额外的查询条件 * @return 装配界面的打印回收清单格式的查询语句 */ - private String getRecyclingDetailSqlForhandleResultSetByRecyclingDetailPrintConfig(String fromTime, String toTime, String handlerDepartCoding, String orOrgUnitNameSQL, Set departGroupIds, Set includeTousseIds, String extraSql){ + private String getRecyclingDetailSqlForhandleResultSetByRecyclingDetailPrintConfig(String fromTime, String toTime, String handlerDepartCoding, String orOrgUnitNameSQL, Set departGroupIds, Set includeTousseIds, String extraSql, String recyDepartmentGroupIdsSql){ String includeTousseIdsSql = CollectionUtils.isEmpty(includeTousseIds)?"": " and " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("td.ancestorID", includeTousseIds); String joinRecyclingRecordSql = null; String joinInvoicePlanSql = null; @@ -2709,7 +2719,7 @@ joinRecyclingRecordSql = ""; joinInvoicePlanSql = ""; selectUnitGroupNameSql = ""; - if(StringUtils.isNotBlank(extraSql) && extraSql.contains("orgUnitCoding")){ + if(StringUtils.isNotBlank(recyDepartmentGroupIdsSql)){ joinRecyclingRecordSql = "join OrgUnit ou on ou.orgUnitCoding=po.departCode "; joinInvoicePlanSql = "join OrgUnit ou on ou.orgUnitCoding=po.departCoding "; } @@ -2722,13 +2732,18 @@ + "join OrgUnitGroup oug on oug.id=oog.orgGroupId "; selectUnitGroupNameSql = "min(oug.name) orgUnitGroupName,"; } - String departGroupIdsSql = CollectionUtils.isEmpty(departGroupIds)?"": " and " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("oug.id", departGroupIds); + if(CollectionUtils.isEmpty(departGroupIds) && StringUtils.isNotBlank(recyDepartmentGroupIdsSql)){ + extraSql += " and (" + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("oug.id", departGroupIds) + " or 1=1 " + recyDepartmentGroupIdsSql + ") "; + }else if(StringUtils.isNotBlank(recyDepartmentGroupIdsSql)){ + extraSql += recyDepartmentGroupIdsSql; + }else{ + extraSql += " and " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("oug.id", departGroupIds); + } String sql = String .format("select "+ selectUnitGroupNameSql +" min(po.depart) depart,po.departCode,td.ancestorID,min(bo.tousseName) tousseName,sum(bo.amount) amount,td.id from %s po " + "join %s bo on po.id = bo.recyclingRecord_id join %s td on td.id = bo.tousseDefinitionId " + joinRecyclingRecordSql + "where po.recyclingTime between %s and %s and po.orgUnitCoding = '%s' %s " - + departGroupIdsSql + includeTousseIdsSql + extraSql + "group by po.departCode,td.ancestorID,td.id " @@ -2738,7 +2753,6 @@ + "join %s bo on po.id = bo.recyclingApplication_ID join %s td on td.id = bo.tousseDefinitionId " + joinInvoicePlanSql + "where po.submitTime between %s and %s and po.handleDepartCoding = '%s' %s and td.tousseType = '%s' " - + departGroupIdsSql + includeTousseIdsSql + extraSql + "group by po.departCoding, td.ancestorID,td.id",