完善代码
This commit is contained in:
1
packscript.txt
Normal file
1
packscript.txt
Normal file
@@ -0,0 +1 @@
|
||||
jar cf chenyonUtils.jar -C ChenyonUtils .
|
||||
@@ -13,7 +13,10 @@ public enum ClauseFactor {
|
||||
AND,
|
||||
OR,
|
||||
IN,
|
||||
NOT_IN
|
||||
NOT_IN,
|
||||
FIND_IN_SET,
|
||||
REGEXP,
|
||||
BETWEEN
|
||||
;
|
||||
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ public class EnumMapUtils {
|
||||
}
|
||||
return getEnumItemValueByEnumId(targetValue, beanByDisplay.getEnumId());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -43,10 +44,10 @@ public class EnumMapUtils {
|
||||
return null;
|
||||
}
|
||||
Map map = list.get(0);
|
||||
enumId = (Long)map.get("ID");
|
||||
enumId = (Long)map.get("id");
|
||||
return enumId == null ? "" : enumId + "";
|
||||
} catch (Exception e) {
|
||||
|
||||
e.printStackTrace();
|
||||
}finally {
|
||||
agent.close();
|
||||
}
|
||||
@@ -68,13 +69,13 @@ public class EnumMapUtils {
|
||||
return null;
|
||||
}
|
||||
Map map = list.get(0);
|
||||
enumId = (Long)map.get("ID");
|
||||
enumId = (Long)map.get("id");
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}finally {
|
||||
agent.close();
|
||||
}
|
||||
EnumManager enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew");
|
||||
EnumManager enumManagerNew = getEnumManager();
|
||||
CtpEnumBean ctpEnumBean = enumManagerNew.getEnum(enumId);
|
||||
if(ctpEnumBean == null) {
|
||||
return null;
|
||||
@@ -98,27 +99,136 @@ public class EnumMapUtils {
|
||||
if(beanByDisplay == null || beanByDisplay.getEnumId() == 0l) {
|
||||
return set;
|
||||
}
|
||||
EnumManager enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew");
|
||||
CtpEnumBean ctpEnumBean = enumManagerNew.getEnum(beanByDisplay.getEnumId());
|
||||
|
||||
if(ctpEnumBean == null) {
|
||||
CtpEnumBean ctpEnumBean = getEnumManager().getEnum(beanByDisplay.getEnumId());
|
||||
if(ctpEnumBean == null || ctpEnumBean.getItems() == null) {
|
||||
return set;
|
||||
}
|
||||
List<CtpEnumItem> ctpEnumItems = ctpEnumBean.getItems();
|
||||
if(ctpEnumBean.getItems() == null) {
|
||||
return set;
|
||||
}
|
||||
for (CtpEnumItem enumItem : ctpEnumItems) {
|
||||
System.out.println("有" + ctpEnumBean.getItems().size() +"枚举子项");
|
||||
for (CtpEnumItem enumItem : ctpEnumBean.getItems()) {
|
||||
set.add(enumItem.getShowvalue());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
||||
e.printStackTrace();
|
||||
}
|
||||
return set;
|
||||
}
|
||||
|
||||
private static EnumManager getEnumManager() {
|
||||
return (EnumManager) AppContext.getBean("enumManagerNew");
|
||||
}
|
||||
|
||||
public static Map<String,CtpEnumItem> getEnumItemMap(FormTableBean formTableBean, String fieldDisplay) {
|
||||
Map<String,CtpEnumItem> map = new HashMap<>();
|
||||
try {
|
||||
FormFieldBean beanByDisplay = formTableBean.getFieldBeanByDisplay(fieldDisplay);
|
||||
if(beanByDisplay == null || beanByDisplay.getEnumId() == 0l) {
|
||||
return map;
|
||||
}
|
||||
EnumManager enumManagerNew = getEnumManager();
|
||||
CtpEnumBean ctpEnumBean = enumManagerNew.getEnum(beanByDisplay.getEnumId());
|
||||
|
||||
if(ctpEnumBean == null) {
|
||||
return map;
|
||||
}
|
||||
List<CtpEnumItem> ctpEnumItems = ctpEnumBean.getItems();
|
||||
if(ctpEnumBean.getItems() == null) {
|
||||
return map;
|
||||
}
|
||||
for (CtpEnumItem enumItem : ctpEnumItems) {
|
||||
map.put(enumItem.getShowvalue(),enumItem);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
public static Map<String,CtpEnumItem> getRootEnumItemMap(FormTableBean formTableBean, String fieldDisplay) {
|
||||
Map<String,CtpEnumItem> map = new HashMap<>();
|
||||
try {
|
||||
FormFieldBean beanByDisplay = formTableBean.getFieldBeanByDisplay(fieldDisplay);
|
||||
if(beanByDisplay == null || beanByDisplay.getEnumId() == 0l) {
|
||||
return map;
|
||||
}
|
||||
EnumManager enumManagerNew = getEnumManager();
|
||||
CtpEnumBean ctpEnumBean = enumManagerNew.getEnum(beanByDisplay.getEnumId());
|
||||
|
||||
if(ctpEnumBean == null) {
|
||||
return map;
|
||||
}
|
||||
List<CtpEnumItem> ctpEnumItems = ctpEnumBean.getItems();
|
||||
if(ctpEnumBean.getItems() == null) {
|
||||
return map;
|
||||
}
|
||||
for (CtpEnumItem enumItem : ctpEnumItems) {
|
||||
if(enumItem.getLevelNum() == 0) {
|
||||
map.put(enumItem.getShowvalue(),enumItem);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
public static Map<String, Object> getEnumItemMap(String pItemId) {
|
||||
Map<String, Object> resultMap = new HashMap<>();
|
||||
|
||||
// 空参数直接返回空map
|
||||
if (StringUtils.isBlank(pItemId)) {
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
final String sql = "SELECT * FROM ctp_enum_item WHERE PARENT_ID = ?";
|
||||
JDBCAgent agent = null;
|
||||
|
||||
try {
|
||||
agent = new JDBCAgent();
|
||||
agent.execute(sql, pItemId);
|
||||
|
||||
// 安全获取结果,不强制泛型
|
||||
List<?> resultList = agent.resultSetToList();
|
||||
if (resultList == null || resultList.isEmpty()) {
|
||||
return resultMap; // 统一返回空map,不返回null
|
||||
}
|
||||
|
||||
// 遍历并安全封装
|
||||
for (Object obj : resultList) {
|
||||
if (!(obj instanceof Map)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Map<String, Object> itemMap = (Map<String, Object>) obj;
|
||||
Object showValueObj = itemMap.get("showvalue");
|
||||
|
||||
// showvalue 为null 跳过,不生成脏key
|
||||
if (showValueObj == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
String key = showValueObj.toString().trim();
|
||||
resultMap.put(key, itemMap);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
// 必须打日志!!
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
// 安全关闭,避免空指针 & 关闭异常覆盖业务异常
|
||||
if (agent != null) {
|
||||
try {
|
||||
agent.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
public static String getEnumItemValueByEnumId(String showValue,long enumId) {
|
||||
EnumManager enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew");
|
||||
EnumManager enumManagerNew = getEnumManager();
|
||||
CtpEnumBean ctpEnumBean = enumManagerNew.getEnum(enumId);
|
||||
if(ctpEnumBean == null) {
|
||||
return null;
|
||||
@@ -143,7 +253,7 @@ public class EnumMapUtils {
|
||||
if(temp == null) {
|
||||
return null;
|
||||
}
|
||||
EnumManager enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew");
|
||||
EnumManager enumManagerNew = getEnumManager();
|
||||
CtpEnumItem ctpEnumItem = enumManagerNew.getCtpEnumItem(temp);
|
||||
if(ctpEnumItem == null) {
|
||||
return null;
|
||||
|
||||
@@ -82,6 +82,15 @@ public class FormTableExecutor {
|
||||
List<String> queryDisplays,
|
||||
List<FormWhereCondition> conditions,
|
||||
boolean changeEnum) {
|
||||
return query(ctx, queryDisplays, conditions, null, null, changeEnum);
|
||||
}
|
||||
|
||||
public static List<FormColumn> query(TableContext ctx,
|
||||
List<String> queryDisplays,
|
||||
List<FormWhereCondition> conditions,
|
||||
String orderField,
|
||||
String sortType,
|
||||
boolean changeEnum) {
|
||||
|
||||
fillConditionFields(ctx, conditions);
|
||||
List<String> columns = resolveQueryColumns(ctx, queryDisplays);
|
||||
@@ -90,12 +99,15 @@ public class FormTableExecutor {
|
||||
param.setTableName(ctx.getTableName());
|
||||
param.setQueryColumns(columns);
|
||||
param.setConditions(conditions);
|
||||
param.setOrderField(orderField != null ? orderField : ctx.getTableName().contains("formson") ? "sort" : null);
|
||||
param.setSortType(sortType);
|
||||
Map<String, Object> sqlMap = generateSql(param);
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
|
||||
try {
|
||||
agent.execute((String) sqlMap.get("sql"), (List<Object>) sqlMap.get("params"));
|
||||
log.info("执行sql为: " + sqlMap.get("sql"));
|
||||
log.info("执行sql参数为: " + JsonUtils.toJSONString(sqlMap.get("params")));
|
||||
List<Map<String, Object>> rows = agent.resultSetToList();
|
||||
|
||||
return rows.stream()
|
||||
@@ -115,11 +127,21 @@ public class FormTableExecutor {
|
||||
public static FormColumn queryOne(TableContext ctx,
|
||||
List<FormWhereCondition> conditions,
|
||||
boolean changeEnum) {
|
||||
return queryOne(ctx, conditions, null, null, changeEnum);
|
||||
}
|
||||
|
||||
public static FormColumn queryOne(TableContext ctx,
|
||||
List<FormWhereCondition> conditions,
|
||||
String orderField,
|
||||
String sortType,
|
||||
boolean changeEnum) {
|
||||
|
||||
fillConditionFields(ctx, conditions);
|
||||
SqlBuildParam param = new SqlBuildParam();
|
||||
param.setSqlType(SqlType.SELECT);
|
||||
param.setTableName(ctx.getTableName());
|
||||
param.setOrderField(orderField != null ? orderField : ctx.getTableName().contains("formson") ? "sort" : null);
|
||||
param.setSortType(sortType);
|
||||
param.setConditions(conditions);
|
||||
Map<String, Object> sqlMap = generateSql(param);
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
@@ -127,6 +149,7 @@ public class FormTableExecutor {
|
||||
try {
|
||||
agent.execute((String) sqlMap.get("sql"), (List<Object>) sqlMap.get("params"));
|
||||
log.info("执行sql为: " + sqlMap.get("sql"));
|
||||
log.info("执行sql参数为: " + JsonUtils.toJSONString(sqlMap.get("params")));
|
||||
Map<String, Object> row = agent.resultSetToMap();
|
||||
if (row == null) return null;
|
||||
|
||||
@@ -148,6 +171,17 @@ public class FormTableExecutor {
|
||||
int pageNo,
|
||||
int pageSize,
|
||||
boolean changeEnum) {
|
||||
return pageQuery(ctx, displays, conditions, pageNo, pageSize, null, null, changeEnum);
|
||||
}
|
||||
|
||||
public static List<FormColumn> pageQuery(TableContext ctx,
|
||||
List<String> displays,
|
||||
List<FormWhereCondition> conditions,
|
||||
int pageNo,
|
||||
int pageSize,
|
||||
String orderField,
|
||||
String sortType,
|
||||
boolean changeEnum) {
|
||||
|
||||
fillConditionFields(ctx, conditions);
|
||||
List<String> columns = resolveQueryColumns(ctx, displays);
|
||||
@@ -158,12 +192,15 @@ public class FormTableExecutor {
|
||||
param.setConditions(conditions);
|
||||
param.setPageNo(pageNo);
|
||||
param.setPageSize(pageSize);
|
||||
param.setOrderField(orderField != null ? orderField : ctx.getTableName().contains("formson") ? "sort" : null);
|
||||
param.setSortType(sortType);
|
||||
Map<String, Object> sqlMap = generateSql(param);;
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
|
||||
try {
|
||||
agent.execute((String) sqlMap.get("sql"), (List<Object>) sqlMap.get("params"));
|
||||
log.info("执行sql为: " + sqlMap.get("sql"));
|
||||
log.info("执行sql参数为: " + JsonUtils.toJSONString(sqlMap.get("params")));
|
||||
List<Map<String, Object>> rows = agent.resultSetToList();
|
||||
|
||||
return rows.stream()
|
||||
@@ -194,6 +231,7 @@ public class FormTableExecutor {
|
||||
try {
|
||||
agent.execute((String) sqlMap.get("sql"), (List<Object>) sqlMap.get("params"));
|
||||
log.info("执行sql为: " + sqlMap.get("sql"));
|
||||
log.info("执行sql参数为: " + JsonUtils.toJSONString(sqlMap.get("params")));
|
||||
String dbName = (String) AppContext.getCache("DATABASE_NAME");
|
||||
if ("mysql".equalsIgnoreCase(dbName)) {
|
||||
return (Long) agent.resultSetToMap().get("countnum");
|
||||
@@ -226,6 +264,7 @@ public class FormTableExecutor {
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
try {
|
||||
log.info("执行sql为: " + sqlMap.get("sql"));
|
||||
log.info("执行sql参数为: " + JsonUtils.toJSONString(sqlMap.get("params")));
|
||||
return agent.execute((String) sqlMap.get("sql"), (List<Object>) sqlMap.get("params"));
|
||||
} catch (Exception e){
|
||||
log.error("执行sql为: " + sqlMap.get("sql"));
|
||||
@@ -249,6 +288,7 @@ public class FormTableExecutor {
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
try {
|
||||
log.info("执行sql为: " + sqlMap.get("sql"));
|
||||
log.error("执行sql参数为: " + JsonUtils.toJSONString(sqlMap.get("params")));
|
||||
return agent.execute((String) sqlMap.get("sql"), (List<Object>) sqlMap.get("params"));
|
||||
} catch (Exception e){
|
||||
log.error("执行sql为: " + sqlMap.get("sql"));
|
||||
@@ -273,6 +313,7 @@ public class FormTableExecutor {
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
try {
|
||||
log.info("执行sql为: " + sqlMap.get("sql"));
|
||||
log.info("执行sql参数为: " + JsonUtils.toJSONString(sqlMap.get("params")));
|
||||
return agent.execute((String) sqlMap.get("sql"), (List<Object>) sqlMap.get("params"));
|
||||
}catch (Exception e){
|
||||
log.error("执行sql为: " + sqlMap.get("sql"));
|
||||
@@ -535,25 +576,47 @@ public class FormTableExecutor {
|
||||
whereCause.append("(");
|
||||
}
|
||||
String field = c.getFieldName();
|
||||
// 字段表达式替换 如 CAST(fieldName AS DECIMAL(10,2))
|
||||
if (c.getFieldExpression() != null) {
|
||||
field = c.getFieldExpression().replace("fieldName", field);
|
||||
}
|
||||
ClauseFactor factor = c.getClauseFactor();
|
||||
String operator = parseOperator(factor);
|
||||
// NULL / NOT NULL
|
||||
if (factor.isNullType()) {
|
||||
whereCause.append(field).append(" ").append(operator);
|
||||
} else if (factor.isInType()) {
|
||||
appendInClause(whereCause, field, operator, c.getValue(), params);
|
||||
} else {
|
||||
String placeholder = "?";
|
||||
// 函数模板(如 TO_DATE(?))
|
||||
if (c.getIndex() != null) {
|
||||
placeholder = c.getIndex();
|
||||
}
|
||||
whereCause.append(field).append(" ").append(operator).append(" ").append(placeholder);
|
||||
if (ClauseFactor.LIKE.equals(factor)) {
|
||||
params.add("%" + c.getValue() + "%");
|
||||
} else {
|
||||
// 自定义表达式优先
|
||||
if (c.getExpression() != null) {
|
||||
whereCause.append(c.getExpression());
|
||||
if (c.getValue() != null) {
|
||||
params.add(c.getValue());
|
||||
}
|
||||
if (c.getValues() != null) {
|
||||
params.addAll(c.getValues());
|
||||
}
|
||||
} else {
|
||||
String operator = parseOperator(factor);
|
||||
// NULL / NOT NULL
|
||||
if (factor.isNullType()) {
|
||||
whereCause.append(field).append(" ").append(operator);
|
||||
} else if (factor.isInType()) {
|
||||
appendInClause(whereCause, field, operator, c.getValue(), params);
|
||||
} else if (factor == ClauseFactor.FIND_IN_SET) {
|
||||
whereCause.append("FIND_IN_SET(?, ").append(field).append(")");
|
||||
params.add(c.getValue());
|
||||
} else if (factor == ClauseFactor.BETWEEN) {
|
||||
whereCause.append(field).append(" BETWEEN ? AND ?");
|
||||
params.add(c.getValue());
|
||||
params.add(c.getValues().get(0));
|
||||
} else {
|
||||
String placeholder = "?";
|
||||
// 函数模板(如 TO_DATE(?))
|
||||
if (c.getIndex() != null) {
|
||||
placeholder = c.getIndex();
|
||||
}
|
||||
whereCause.append(field).append(" ").append(operator).append(" ").append(placeholder);
|
||||
if (ClauseFactor.LIKE.equals(factor)) {
|
||||
params.add("%" + c.getValue() + "%");
|
||||
} else {
|
||||
params.add(c.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
// 右括号
|
||||
if (c.isEndWithBracket()) {
|
||||
@@ -609,6 +672,9 @@ public class FormTableExecutor {
|
||||
case LT: return "<";
|
||||
case LE: return "<=";
|
||||
case LIKE: return "LIKE";
|
||||
case FIND_IN_SET: return "FIND_IN_SET";
|
||||
case REGEXP: return "REGEXP";
|
||||
case BETWEEN: return "BETWEEN";
|
||||
case NULL: return "IS NULL"; // 空值判断
|
||||
case NOT_NULL: return "IS NOT NULL"; // 非空判断
|
||||
default: throw new UnsupportedOperationException("不支持的运算符: " + factor);
|
||||
|
||||
@@ -13,6 +13,8 @@ public class FormWhereCondition {
|
||||
private boolean startWithBracket = false; //是否以括号开头生成子条件
|
||||
private boolean endWithBracket = false; //是否以括号结尾结束子条件
|
||||
private String index;
|
||||
private String expression; //自定义SQL表达式 如 ROUND(CAST(fieldName AS DECIMAL(10,2)), 2) > ?
|
||||
private String fieldExpression; //字段表达式 如 CAST(fieldName AS DECIMAL(10,2)),fieldName会被替换为实际字段名
|
||||
|
||||
public FormWhereCondition() {
|
||||
this.values = new ArrayList<>();
|
||||
@@ -38,6 +40,12 @@ public class FormWhereCondition {
|
||||
this.value = value;
|
||||
return this;
|
||||
}
|
||||
public FormWhereCondition between(Object from, Object to) {
|
||||
this.clauseFactor = ClauseFactor.BETWEEN;
|
||||
this.value = from;
|
||||
this.values.add(to);
|
||||
return this;
|
||||
}
|
||||
public FormWhereCondition clauseFactor(ClauseFactor clauseFactor) {
|
||||
this.clauseFactor = clauseFactor;
|
||||
return this;
|
||||
@@ -67,6 +75,16 @@ public class FormWhereCondition {
|
||||
return this;
|
||||
}
|
||||
|
||||
public FormWhereCondition expression(String expression) {
|
||||
this.expression = expression;
|
||||
return this;
|
||||
}
|
||||
|
||||
public FormWhereCondition fieldExpression(String fieldExpression) {
|
||||
this.fieldExpression = fieldExpression;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public FormWhereCondition(Object value, ClauseFactor clauseFactor) {
|
||||
this.value = value;
|
||||
@@ -139,4 +157,20 @@ public class FormWhereCondition {
|
||||
public void setValues(List<Object> values) {
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
public String getExpression() {
|
||||
return expression;
|
||||
}
|
||||
|
||||
public void setExpression(String expression) {
|
||||
this.expression = expression;
|
||||
}
|
||||
|
||||
public String getFieldExpression() {
|
||||
return fieldExpression;
|
||||
}
|
||||
|
||||
public void setFieldExpression(String fieldExpression) {
|
||||
this.fieldExpression = fieldExpression;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user