| 
					
				 | 
			
			
				@@ -1,20 +1,19 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package cn.hnthyy.thmz.service.impl.his.bb; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.hnthyy.thmz.Utils.DateUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.hnthyy.thmz.Utils.ReportUsedUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.hnthyy.thmz.entity.his.bb.ReportBaseInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.hnthyy.thmz.mapper.his.bb.ReportStaticMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.hnthyy.thmz.service.his.bb.ReportStaticService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.hnthyy.thmz.vo.ReportVo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.HashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @Description: 报表统计实现类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @Author: hsh 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -24,44 +23,6 @@ import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class ReportStaticServiceImpl implements ReportStaticService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static final String START_TIME = ":startTime"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static final String END_TIME = ":endTime"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 科室(下拉选查询使用) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     **/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static final String DEPT = "dept"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 医生(下拉选查询使用) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     **/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static final String DOCTOR = "doctor"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 科室id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     **/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static final String DEPT_ID = "deptId"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 医生id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     **/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static final String DOCTOR_ID = "doctorId"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 诊断(模糊查询使用) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     **/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static final String DIAGN = "diagn"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 住院号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     **/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static final String ZYH = "zyh"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 姓名(模糊查询使用) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     **/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static final String XM = "xm"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * 号别(下拉选查询使用) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     **/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static final String REG_LEVEL = "regLevel"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private static final String OTHER_PARAM = "其他"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @SuppressWarnings("all") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private ReportStaticMapper reportStaticMapper; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -73,13 +34,13 @@ public class ReportStaticServiceImpl implements ReportStaticService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String reportId = vo.getReportId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<String> reportIds = vo.getReportIds(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String type = vo.getType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<Map<String, Object>> list = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(reportIds != null && reportIds.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (String id: reportIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<Map<String, Object>> list = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Map<String, Object> map = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ReportBaseInfo info = reportStaticMapper.selectReportBaseInfo(id, vo.getReportType(), null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if("1".equals(type)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    String sql = callSqlFormat(vo, info.getBaseSql(), info.getGatherSql(), "", info.getReportSort()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String sql = ReportUsedUtil.callSqlFormat(vo, info.getBaseSql(), info.getGatherSql(), "", info.getReportSort()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     String result = reportStaticMapper.selectReportTotal(sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     map.put("label", info.getReportName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     map.put("value", result); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -87,16 +48,22 @@ public class ReportStaticServiceImpl implements ReportStaticService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     resultMap.put(info.getReportId(), list); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } else if("2".equals(type)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     String gatherSql = info.getGatherSql() + " as value,  t." + vo.getGroupColumn() + " "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    String sql = callSqlFormat(vo, info.getBaseSql(), gatherSql, vo.getGroupColumn(), info.getReportSort()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String sql = ReportUsedUtil.callSqlFormat(vo, info.getBaseSql(), gatherSql, vo.getGroupColumn(), vo.getGroupColumn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     List<Map<String, Object>> l = reportStaticMapper.selectReportRegList(sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<Object> vl = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (Map<String, Object> m : l) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        vl.add(ReportUsedUtil.formatDataForUse(vo.getGroupColumn(), m.get(vo.getGroupColumn()))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     resultMap.put(info.getReportId(), l); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    resultMap.put(vo.getGroupColumn(), vl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Map<String, Object> map = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Map<String, Object>> list = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ReportBaseInfo info = reportStaticMapper.selectReportBaseInfo(reportId, vo.getReportType(), null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if("1".equals(type)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                String sql = callSqlFormat(vo, info.getBaseSql(), info.getGatherSql(), "", info.getReportSort()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String sql = ReportUsedUtil.callSqlFormat(vo, info.getBaseSql(), info.getGatherSql(), "", info.getReportSort()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 String result = reportStaticMapper.selectReportTotal(sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 map.put("label", info.getReportName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 map.put("value", result); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -104,74 +71,17 @@ public class ReportStaticServiceImpl implements ReportStaticService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 resultMap.put(reportId, list); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else if("2".equals(type)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 String gatherSql = info.getGatherSql() + " as value,  t." + vo.getGroupColumn() + " "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                String sql = callSqlFormat(vo, info.getBaseSql(), gatherSql, vo.getGroupColumn(), info.getReportSort()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String sql = ReportUsedUtil.callSqlFormat(vo, info.getBaseSql(), gatherSql, vo.getGroupColumn(), vo.getGroupColumn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 List<Map<String, Object>> l = reportStaticMapper.selectReportRegList(sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<Object> vl = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (Map<String, Object> m : l) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    vl.add(ReportUsedUtil.formatDataForUse(vo.getGroupColumn(), m.get(vo.getGroupColumn()))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 resultMap.put(info.getReportId(), l); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                resultMap.put(vo.getGroupColumn(), vl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return resultMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @description: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @author: hsh 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @date: 2023/8/14 17:39 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param: [vo, baseSql, gatherSql, groupColumn, reportSort] vo 参数实体类;baseSql:基础sql;gatherSql:聚合sql;groupColumn:分组;reportSort:排序; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @return: String 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     **/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private String callSqlFormat(ReportVo dto, String baseSql, String gatherSql, String groupColumn, String reportSort) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 查询必填字段(包括开始时间,结束时间,钻取科室,医生等sql用:拼接的字符)替换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(baseSql.contains(START_TIME)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(StringUtils.isNotEmpty(dto.getStartTime())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                baseSql = baseSql.replaceAll(START_TIME, "'" + dto.getStartTime() + "'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                baseSql = baseSql.replaceAll(START_TIME,"'2012-01-01 00:00:00'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(baseSql.contains(END_TIME)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(StringUtils.isNotEmpty(dto.getEndTime())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                baseSql = baseSql.replaceAll(END_TIME, "'" + dto.getEndTime() + "'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                baseSql = baseSql.replaceAll(END_TIME, DateUtil.fomart(DateUtil.getLastSecond(new Date()), "yyyy-MM-dd HH:mm:ss")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 查询非必填字段(一般是下拉选险种,模糊查询科室、诊断等sql用_拼接的字符) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        StringBuilder sql = new StringBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        sql.append(" select ").append(gatherSql).append(" from (").append(baseSql).append(") t where 1 = 1 "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(baseSql.contains(DEPT_ID) && StringUtils.isNotEmpty(dto.getDeptId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sql.append(" and t.deptId = '").append(dto.getDeptId()).append("' "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(baseSql.contains(DOCTOR_ID) && StringUtils.isNotEmpty(dto.getDoctorId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sql.append(" and t.doctorId = '").append(dto.getDoctorId()).append("' "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(baseSql.contains(DEPT) && StringUtils.isNotEmpty(dto.getDept())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sql.append(" and t.dept = '").append(dto.getDept()).append("' "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(baseSql.contains(DOCTOR) && StringUtils.isNotEmpty(dto.getDoctor())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sql.append(" and t.doctor = '").append(dto.getDoctor()).append("' "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(baseSql.contains(REG_LEVEL) && StringUtils.isNotEmpty(dto.getRegLevel())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sql.append(" and t.regLevel = '").append(dto.getRegLevel()).append("' "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(baseSql.contains(DIAGN) && StringUtils.isNotEmpty(dto.getDiagn())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sql.append(" and t.diagn like '%").append(dto.getDiagn()).append("%' "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(baseSql.contains(ZYH) && StringUtils.isNotEmpty(dto.getZyh())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sql.append(" and t.zyh = '").append(dto.getZyh()).append("' "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(baseSql.contains(XM) && StringUtils.isNotEmpty(dto.getXm())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sql.append(" and t.xm like '%").append(dto.getXm()).append("%' "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 如果存在分组情况,需要添加分组sql字段 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(StringUtils.isNotEmpty(groupColumn)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sql.append(" group by t.").append(groupColumn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 如果存在默认排序,需要添加排序sql 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(StringUtils.isNotEmpty(reportSort)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sql.append(" order by t.").append(reportSort); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return sql.toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |