|
@@ -7,12 +7,12 @@ import com.actionsoft.sdk.local.SDK;
|
|
|
import com.actionsoft.sdk.local.api.Logger;
|
|
import com.actionsoft.sdk.local.api.Logger;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
|
|
|
|
-import java.util.Arrays;
|
|
|
|
|
-import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
public class testForm implements DataWindowFormatSQLEventInterface {
|
|
public class testForm implements DataWindowFormatSQLEventInterface {
|
|
|
private static final Logger LOGGER = SDK.getLogAPI().getLogger(testForm.class);
|
|
private static final Logger LOGGER = SDK.getLogAPI().getLogger(testForm.class);
|
|
|
|
|
+ // 统一表名(全大写,和FROM中的表名一致)
|
|
|
|
|
+ private static final String TABLE_NAME = "VIEW_EU_DNV_PENDING_RECURRING_CONTRACT";
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public String formatSQL(UserContext userContext, DataView dataView, String sql) {
|
|
public String formatSQL(UserContext userContext, DataView dataView, String sql) {
|
|
@@ -21,46 +21,47 @@ public class testForm implements DataWindowFormatSQLEventInterface {
|
|
|
LOGGER.info("【初始SQL】" + sql);
|
|
LOGGER.info("【初始SQL】" + sql);
|
|
|
LOGGER.info("【查询参数】" + JSON.toJSONString(sqlParam));
|
|
LOGGER.info("【查询参数】" + JSON.toJSONString(sqlParam));
|
|
|
|
|
|
|
|
- String paramName = "SEARCH_FIELD";
|
|
|
|
|
- if (sqlParam.containsKey(paramName)) {
|
|
|
|
|
- String paramValue = sqlParam.get(paramName).toString().trim();
|
|
|
|
|
- if (!paramValue.contains("%")) {
|
|
|
|
|
- sqlParam.put(paramName, "%" + paramValue + "%");
|
|
|
|
|
- LOGGER.info("【处理后参数】" + JSON.toJSONString(sqlParam));
|
|
|
|
|
|
|
+ // 1. 初始化条件
|
|
|
|
|
+ String sql1 = " 1=1 ";
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 处理ITEM_MONTH
|
|
|
|
|
+ if (sqlParam.containsKey("ITEM_MONTH")) {
|
|
|
|
|
+ String itemMonth = sqlParam.get("ITEM_MONTH").toString().trim();
|
|
|
|
|
+ if (!itemMonth.isEmpty()) {
|
|
|
|
|
+ sql1 += " AND " + TABLE_NAME + ".ITEM_MONTH LIKE :ITEM_MONTH ";
|
|
|
|
|
+ sql = sql.replace("AND UPPER(" + TABLE_NAME + ".ITEM_MONTH) like :ITEM_MONTH", "");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 定义需要模糊搜索的目标字段列表
|
|
|
|
|
- List<String> targetFields = Arrays.asList(
|
|
|
|
|
- "VIEW_EU_DNV_PENDING_RECURRING_CONTRACT.ACCOUNT_NAME",
|
|
|
|
|
- "VIEW_EU_DNV_PENDING_RECURRING_CONTRACT.CONTRACT_NAME",
|
|
|
|
|
- "VIEW_EU_DNV_PENDING_RECURRING_CONTRACT.NO",
|
|
|
|
|
- "VIEW_EU_DNV_PENDING_RECURRING_CONTRACT.ITEM_SUBCATE_ID",
|
|
|
|
|
- "VIEW_EU_DNV_PENDING_RECURRING_CONTRACT.BILL_ACCOUNT_ID"
|
|
|
|
|
- // 补充其他要搜索的字段
|
|
|
|
|
- );
|
|
|
|
|
-
|
|
|
|
|
- if (sqlParam.containsKey(paramName)) {
|
|
|
|
|
- String oldCondition = "AND VIEW_EU_DNV_PENDING_RECURRING_CONTRACT.SEARCH_FIELD = :" + paramName;
|
|
|
|
|
- sql = sql.replace(oldCondition, "");
|
|
|
|
|
- LOGGER.info("【删除旧条件后SQL】" + sql);
|
|
|
|
|
-
|
|
|
|
|
- StringBuilder orConditions = new StringBuilder();
|
|
|
|
|
- for (int i = 0; i < targetFields.size(); i++) {
|
|
|
|
|
- String field = targetFields.get(i);
|
|
|
|
|
- orConditions.append("UPPER(").append(field).append(") LIKE :").append(paramName);
|
|
|
|
|
- if (i != targetFields.size() - 1) {
|
|
|
|
|
- orConditions.append(" OR ");
|
|
|
|
|
|
|
+ // 3. 处理SEARCH_FIELD(多字段OR)
|
|
|
|
|
+ if (sqlParam.containsKey("SEARCH_FIELD")) {
|
|
|
|
|
+ String searchValue = sqlParam.get("SEARCH_FIELD").toString().trim();
|
|
|
|
|
+ if (!searchValue.isEmpty()) {
|
|
|
|
|
+ if (!searchValue.contains("%")) {
|
|
|
|
|
+ searchValue = "%" + searchValue + "%";
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ searchValue = searchValue.replace("'", "''");
|
|
|
|
|
+ sqlParam.put("SEARCH_FIELD", searchValue);
|
|
|
|
|
|
|
|
- sql = sql + " AND (" + orConditions + ")";
|
|
|
|
|
|
|
+ sql1 += " AND (" +
|
|
|
|
|
+ TABLE_NAME + ".ACCOUNT_NAME LIKE :SEARCH_FIELD OR " +
|
|
|
|
|
+ TABLE_NAME + ".CONTRACT_NAME LIKE :SEARCH_FIELD OR " +
|
|
|
|
|
+ TABLE_NAME + ".NO LIKE :SEARCH_FIELD OR " +
|
|
|
|
|
+ TABLE_NAME + ".ITEM_SUBCATE_ID LIKE :SEARCH_FIELD OR " +
|
|
|
|
|
+ TABLE_NAME + ".BILL_ACCOUNT_ID LIKE :SEARCH_FIELD) ";
|
|
|
|
|
+ sql = sql.replace("AND " + TABLE_NAME + ".SEARCH_FIELD = :SEARCH_FIELD", "");
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- LOGGER.info("【最终拼接后SQL】" + sql);
|
|
|
|
|
|
|
+ // 4. 替换占位符,并修复ORDER BY表名大小写
|
|
|
|
|
+ sql = sql.replace("1=1", sql1)
|
|
|
|
|
+ // 统一ORDER BY中的表名(全大写)
|
|
|
|
|
+ .replace("VIEW_EU_dnv_PENDING_RECURRING_CONTRACT", TABLE_NAME);
|
|
|
|
|
+
|
|
|
|
|
+ LOGGER.info("【拼接后最终SQL】" + sql);
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
- LOGGER.error("SQL条件拼接失败", e);
|
|
|
|
|
|
|
+ LOGGER.error("SQL拼接失败", e);
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
}
|
|
}
|
|
|
|
|
|