完善代码

This commit is contained in:
2026-06-06 19:26:59 +08:00
parent bf0595ed0d
commit cdf02f6de6
5 changed files with 247 additions and 33 deletions

1
packscript.txt Normal file
View File

@@ -0,0 +1 @@
jar cf chenyonUtils.jar -C ChenyonUtils .

View File

@@ -13,7 +13,10 @@ public enum ClauseFactor {
AND,
OR,
IN,
NOT_IN
NOT_IN,
FIND_IN_SET,
REGEXP,
BETWEEN
;

View File

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

View File

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

View File

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