ReportUtil.java 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package thyyxxk.webserver.utils;
  2. import org.jetbrains.annotations.NotNull;
  3. import thyyxxk.webserver.entity.highreport.HighReportDto;
  4. /**
  5. * @Description: 报表相关的工具类
  6. * @Author: hsh
  7. * @CreateTime: 2022-11-04 08:34
  8. * @Version: 1.0
  9. */
  10. public class ReportUtil {
  11. private static final String START_TIME = ":startTime";
  12. private static final String END_TIME = ":endTime";
  13. /**
  14. * 险种(下拉选查询使用)
  15. **/
  16. private static final String INSUR_NAME = "_insurName";
  17. /**
  18. * 诊断(模糊查询使用)
  19. **/
  20. private static final String DIAGN = "_diagn";
  21. /**
  22. * @description: 拼接查询数据的sql(备注:采用了script标签包裹方式拼接sql)
  23. * @author: hsh
  24. * @date: 2022/11/7 16:21
  25. * @param: [dto, baseSql, gatherSql]
  26. * @return: String
  27. **/
  28. public static @NotNull String callSqlFormat(HighReportDto dto, @NotNull String baseSql, String gatherSql){
  29. // 查询必填字段(包括开始时间,结束时间,钻取科室,医生等sql用:拼接的字符)替换
  30. if(baseSql.contains(START_TIME)){
  31. baseSql = baseSql.replaceAll(START_TIME, "'" + dto.getStartTime() + "'");
  32. }
  33. if(baseSql.contains(END_TIME)){
  34. baseSql = baseSql.replaceAll(END_TIME, "'" + dto.getEndTime() + "'");
  35. }
  36. // 查询非必填字段(一般是下拉选险种,模糊查询科室、诊断等sql用_拼接的字符)
  37. StringBuilder sql = new StringBuilder();
  38. sql.append(" select ").append(gatherSql).append(" from (").append(baseSql).append(") t where 1 = 1 ");
  39. if(baseSql.contains(INSUR_NAME) && StringUtil.notBlank(dto.getInsurName())){
  40. sql.append(" and t._insurName = '").append(dto.getInsurName()).append("' ");
  41. }
  42. if(baseSql.contains(DIAGN) && StringUtil.notBlank(dto.getDiagn())){
  43. sql.append(" and t._diagn like '%").append(dto.getDiagn()).append("%' ");
  44. }
  45. return sql.toString();
  46. }
  47. }