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