Explorar el Código

优化医生首页接口

hsh hace 2 años
padre
commit
9244d221a3

+ 172 - 0
src/main/java/cn/hnthyy/thmz/Utils/ReportUsedUtil.java

@@ -0,0 +1,172 @@
+package cn.hnthyy.thmz.Utils;
+
+import cn.hnthyy.thmz.vo.ReportVo;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Date;
+
+/**
+ * @Description: 报表开发工具类
+ * @Author: hsh
+ * @CreateTime: 2023-08-17  08:41
+ * @Version: 1.0
+ */
+public class ReportUsedUtil {
+
+    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 = "其他";
+
+    /**
+     * @description: 字段格式化
+     * @author: hsh
+     * @date: 2023/8/16 17:18
+     * @param: [key, o]  key: 转换的字段  o: z、转换值
+     * @return: String
+     **/
+    public static String formatDataForUse(String key, Object o) {
+
+        String result = String.valueOf(o);
+        if(StringUtils.isEmpty(result)){
+            return result;
+        }
+
+        if(key.equals("yf")) {
+            for(int i = 1; i <= 12; i++){
+                String yf = "";
+                if(i < 10){
+                    yf = "0" + i;
+                } else {
+                    yf = i + "";
+                }
+                if(result.endsWith(yf)){
+                    switch(yf){
+                        case "01": result = "一月";
+                            break;
+                        case "02": result = "二月";
+                            break;
+                        case "03": result = "三月";
+                            break;
+                        case "04": result = "四月";
+                            break;
+                        case "05": result = "五月";
+                            break;
+                        case "06": result = "六月";
+                            break;
+                        case "07": result = "七月";
+                            break;
+                        case "08": result = "八月";
+                            break;
+                        case "09": result = "九月";
+                            break;
+                        case "10": result = "十月";
+                            break;
+                        case "11": result = "十一月";
+                            break;
+                        case "12": result = "十二月";
+                            break;
+                        default: result = "未知";
+                    }
+                }
+            }
+        }
+        return result;
+    }
+
+    /**
+     * @description: 报表sql格式化
+     * @author: hsh
+     * @date: 2023/8/14 17:39
+     * @param: [vo, baseSql, gatherSql, groupColumn, reportSort] vo 参数实体类;baseSql:基础sql;gatherSql:聚合sql;groupColumn:分组;reportSort:排序;
+     * @return: String
+     **/
+    public static 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();
+    }
+
+}

+ 18 - 108
src/main/java/cn/hnthyy/thmz/service/impl/his/bb/ReportStaticServiceImpl.java

@@ -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();
-    }
-
 }