Browse Source

新增出院未结算统计

hsh 2 years ago
parent
commit
d6272acb53

+ 2 - 0
src/main/java/thyyxxk/webserver/entity/highreport/HighReportDto.java

@@ -18,6 +18,8 @@ public class HighReportDto {
     private String level;
     private String startTime;
     private String endTime;
+    private String dept;
+    private String doctor;
     /**
      * 险种
      **/

+ 7 - 0
src/main/java/thyyxxk/webserver/entity/highreport/ReportBaseInfo.java

@@ -37,7 +37,14 @@ public class ReportBaseInfo implements Serializable {
     private String displayType;
     private String flag;
     private String menuId;
+    /**
+     * 面板排序
+     **/
     private Integer sort;
+    /**
+     * 报表默认排序
+     **/
+    private String reportSort;
     /**
      * 页面展示
      **/

+ 3 - 2
src/main/java/thyyxxk/webserver/service/highreport/HighReportService.java

@@ -54,7 +54,7 @@ public class HighReportService {
         // 计算指标或者报表的总览结果
         for(ReportBaseInfo info : reportList){
             // 没有办法需要一条一条执行sql
-            String sql = ReportUtil.callSqlFormat(dto, info.getBaseSql(), info.getGatherSql(), null, null);
+            String sql = ReportUtil.callSqlFormat(dto, info.getBaseSql(), info.getGatherSql(), null, null, null);
             // 查询总览数据结果
             String overview = dao.selectReportPortalOverview(info.getReportId(), info.getMenuId(), info.getReportType(), sql);
             info.setOverview(overview);
@@ -95,7 +95,8 @@ public class HighReportService {
         if(ReportType.ONE.getCode().equals(type)){
             String baseSql = report.getBaseSql();
             String gatherSql = report.getGatherSql();
-            String sql = ReportUtil.callSqlFormat(dto, baseSql, gatherSql, null, null);
+            String sortSql = report.getReportSort();
+            String sql = ReportUtil.callSqlFormat(dto, baseSql, gatherSql, null, null, sortSql);
             log.info("查询sql: {}", sql);
             // 查询结果
             List<Map<String, Object>> dataList = dao.selectReportPortalData(reportId, menuId, reportType, sql);

+ 34 - 8
src/main/java/thyyxxk/webserver/utils/ReportUtil.java

@@ -18,7 +18,15 @@ public class ReportUtil {
     /**
      * 险种(下拉选查询使用)
      **/
-    private static final String INSUR_NAME = "_insurName";
+    private static final String INSUR_NAME = "insurName";
+    /**
+     * 科室(下拉选查询使用)
+     **/
+    private static final String DEPT = "dept";
+    /**
+     * 医生(下拉选查询使用)
+     **/
+    private static final String DOCTOR = "doctor";
     /**
      * 诊断(模糊查询使用)
      **/
@@ -30,22 +38,36 @@ public class ReportUtil {
      * @description: 拼接查询数据的sql(备注:采用了script标签包裹方式拼接sql)
      * @author: hsh
      * @date: 2022/11/7 16:21
-     * @param: [dto 查询条件, baseSql 基础sql, gatherSql 聚合sql, groupColumn 分组sql字段, dropSql 钻取条件sql]
+     * @param: [dto 查询条件, baseSql 基础sql, gatherSql 聚合sql, groupColumn 分组sql字段, dropSql 钻取条件sql, sortSql 排序sql]
      * @return: String
      **/
-    public static @NotNull String callSqlFormat(HighReportDto dto, @NotNull String baseSql, String gatherSql, String groupColumn, String dropSql){
+    public static @NotNull String callSqlFormat(HighReportDto dto, @NotNull String baseSql, String gatherSql, String groupColumn, String dropSql, String sortSql){
         // 查询必填字段(包括开始时间,结束时间,钻取科室,医生等sql用:拼接的字符)替换
         if(baseSql.contains(START_TIME)){
-            baseSql = baseSql.replaceAll(START_TIME, "'" + dto.getStartTime() + "'");
+            if(StringUtil.notBlank(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)){
-            baseSql = baseSql.replaceAll(END_TIME, "'" + dto.getEndTime() + "'");
+            if(StringUtil.notBlank(dto.getEndTime())){
+                baseSql = baseSql.replaceAll(END_TIME, "'" + dto.getEndTime() + "'");
+            } else {
+                baseSql = baseSql.replaceAll(END_TIME, "'2112-01-01 00:00:00'");
+            }
         }
         // 查询非必填字段(一般是下拉选险种,模糊查询科室、诊断等sql用_拼接的字符)
         StringBuilder sql = new StringBuilder();
         sql.append(" select ").append(gatherSql).append(" from (").append(baseSql).append(") t where 1 = 1 ");
+        if(baseSql.contains(DEPT) && StringUtil.notBlank(dto.getDept())){
+            sql.append(" and t.dept = '").append(dto.getDept()).append("' ");
+        }
+        if(baseSql.contains(DOCTOR) && StringUtil.notBlank(dto.getDoctor())){
+            sql.append(" and t.doctor = '").append(dto.getDoctor()).append("' ");
+        }
         if(baseSql.contains(INSUR_NAME) && StringUtil.notBlank(dto.getInsurName())){
-            sql.append(" and t._insurName = '").append(dto.getInsurName()).append("' ");
+            sql.append(" and t.insurName = '").append(dto.getInsurName()).append("' ");
         }
         if(baseSql.contains(DIAGN) && StringUtil.notBlank(dto.getDiagn())){
             sql.append(" and t._diagn like '%").append(dto.getDiagn()).append("%' ");
@@ -58,6 +80,10 @@ public class ReportUtil {
         if(StringUtil.notBlank(groupColumn)){
             sql.append(" group by t.").append(groupColumn);
         }
+        // 如果存在默认排序,需要添加排序sql
+        if(StringUtil.notBlank(sortSql)){
+            sql.append(" order by t.").append(sortSql);
+        }
         return sql.toString();
     }
 
@@ -116,10 +142,10 @@ public class ReportUtil {
         if(isPatient){
             // 查询病人不需要分组sql,也不需要聚合函数,需要查询显示所有列并带上钻取条件即可
             gatherSql.append(" t.* ");
-            return callSqlFormat(dto, report.getBaseSql(), gatherSql.toString(), null, dropSql.toString());
+            return callSqlFormat(dto, report.getBaseSql(), gatherSql.toString(), null, dropSql.toString(), null);
         } else {
             gatherSql.append("isnull(rtrim(").append(groupColumn).append("), '").append(OTHER_PARAM).append("') as x, ").append(gatherMainSql).append(" as y ");
-            return callSqlFormat(dto, report.getBaseSql(), gatherSql.toString(), groupColumn, dropSql.toString());
+            return callSqlFormat(dto, report.getBaseSql(), gatherSql.toString(), groupColumn, dropSql.toString(), null);
         }
     }