ScreenUtil.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package com.util;
  2. import com.fasterxml.jackson.databind.ObjectMapper;
  3. import com.fasterxml.jackson.databind.type.CollectionType;
  4. import com.model.bo.Screen;
  5. import com.model.bo.ScreenStr;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Component;
  8. import java.io.IOException;
  9. import java.util.ArrayList;
  10. import java.util.Iterator;
  11. import java.util.List;
  12. /*
  13. 解析筛选信息
  14. */
  15. @Component
  16. public class ScreenUtil {
  17. @Autowired
  18. ObjectMapper objectMapper;
  19. public ScreenStr screensUtil(List<Screen> screenList, String xColumn, String xColumnType) {
  20. //返回值
  21. ScreenStr screenStr = new ScreenStr();
  22. if (screenList.size() == 0) {
  23. screenStr.setRet("");
  24. screenStr.setWithColumnRet("");
  25. return screenStr;
  26. }
  27. String ret = ""; //筛选条件
  28. String withColumnRet = ""; //与目标列相同的筛选条件
  29. Iterator isList = screenList.iterator();
  30. while (isList.hasNext()) {
  31. Screen screen = (Screen) isList.next();
  32. String columnName = screen.getColumnName();
  33. String columnType = screen.getColumnType();
  34. String symbol = screen.getSymbol();
  35. String value = screen.getValue();
  36. if (columnType != "time" && !("time".equals(columnType))) {
  37. String symbVal = getSymbAndVal(symbol, value, columnType);
  38. if (xColumn.equals(columnName)) {
  39. withColumnRet = ret + " and " + columnName + " " + symbVal;
  40. } else {
  41. ret = ret + " and " + columnName + " " + symbVal;
  42. }
  43. System.out.println("ret:" + ret);
  44. }
  45. if (columnType == "time" || "time".equals(columnType)) {
  46. String symbVal = getTimeSymbAndVal(symbol, value);
  47. String column = getTimeColumn(columnName, xColumnType);
  48. if (xColumn.equals(columnName)) {
  49. withColumnRet = ret + " and " + column + " " + symbVal;
  50. } else {
  51. ret = ret + " and " + column + " " + symbVal;
  52. }
  53. }
  54. }
  55. screenStr.setRet(ret);
  56. screenStr.setWithColumnRet(withColumnRet);
  57. return screenStr;
  58. }
  59. public String getSymbAndVal(String symbol, String value, String columnType) {
  60. String values = "" + value;
  61. String tar = "";
  62. if ("contain".equals(symbol)) {
  63. if ("categorical".equals(columnType)) {
  64. tar = "in " + getContainsCate(value);
  65. } else {
  66. tar = "like '%" + values + "%'";
  67. }
  68. } else if ("notContain".equals(symbol)) {
  69. if ("categorical".equals(columnType)) {
  70. tar = "not in " + getContainsCate(value);
  71. } else {
  72. tar = "not like '%" + values + "%'";
  73. }
  74. } else if ("startsWith".equals(symbol)) {
  75. tar = "like '" + values + "%'";
  76. } else if ("endsWith".equals(symbol)) {
  77. tar = "like '%" + values + "'";
  78. } else if ("null".equals(symbol)) {
  79. tar = "is null";
  80. } else if ("notNull".equals(symbol)) {
  81. tar = "is not null";
  82. } else if ("between".equals(symbol)) {
  83. tar = "";
  84. String[] str = value.split(",");
  85. String str1 = str[0];
  86. String str2 = str[1];
  87. tar = "between '" + str1 + "' and '" + str2 + "'";
  88. } else {
  89. tar = symbol + " '" + values + "'";
  90. }
  91. System.out.println("tar:" + tar);
  92. return tar;
  93. }
  94. public String getTimeColumn(String columnName, String xColumnType) {
  95. if ("year".equals(xColumnType)) {
  96. return "to_char(" + columnName + ", 'yyyy')";
  97. } else if ("month".equals(xColumnType)) {
  98. return "to_char(" + columnName + ", 'yyyy-mm')";
  99. } else if ("day".equals(xColumnType)) {
  100. return "to_char(" + columnName + ", 'yyyy-mm-dd')";
  101. } else if ("quarter".equals(xColumnType)) {
  102. return "to_char(" + columnName + ", 'yyyy-Q')";
  103. } else if ("week".equals(xColumnType)) {
  104. return "to_char(" + columnName + ", 'yyyy-ww')";
  105. } else {
  106. return "to_char(" + columnName + ", 'yyyy-mm-dd')";
  107. }
  108. }
  109. private String getTimeSymbAndVal(String symbol, String value) {
  110. String values = "" + value;
  111. String tar = "";
  112. if ("null".equals(symbol)) {
  113. tar = "is null";
  114. } else if ("notNull".equals(symbol)) {
  115. tar = "is not null";
  116. } else if ("between".equals(symbol)) {
  117. tar = "";
  118. String[] str = value.split(",");
  119. String str1 = str[0];
  120. String str2 = str[1];
  121. tar = "between '" + str1 + "' and '" + str2 + "'";
  122. } else {
  123. tar = symbol + " '" + values + "'";
  124. }
  125. return tar;
  126. }
  127. public String getContainsCate(String value) {
  128. System.out.println("走这里了吗");
  129. List<String> val = new ArrayList<>();
  130. CollectionType javaType = objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, String.class);
  131. try {
  132. val = objectMapper.readValue(value, javaType); //这里不需要强制转换
  133. } catch (IOException e) {
  134. e.printStackTrace();
  135. }
  136. String valueString = "";
  137. Iterator isList = val.iterator();
  138. while (isList.hasNext()) {
  139. String v = String.valueOf(isList.next());
  140. System.out.println("v" + v);
  141. valueString = valueString + ", '" + v + "'";
  142. }
  143. valueString = valueString.replaceFirst(",", "(") + ")";
  144. return valueString;
  145. }
  146. }