1、同步数据增加判断条件增加sql条件

This commit is contained in:
llllon 2025-10-27 12:41:23 +08:00
parent 490e2efb43
commit 80ab462118
3 changed files with 30 additions and 6 deletions

View File

@ -1350,52 +1350,76 @@ public class SaleDataSyncServiceImpl implements DataSyncService {
String querySql; String querySql;
if ("ORACLE".equalsIgnoreCase(DBname)) { if ("ORACLE".equalsIgnoreCase(DBname)) {
// 构建分组条件
String groupCondition = ("龙牌".equals(bggs) || "梦牌".equals(bggs)) ?
" AND BKGS = '" + bggs + "' " : "";
querySql = "SELECT t1.* FROM " + tableName + " t1 " + querySql = "SELECT t1.* FROM " + tableName + " t1 " +
" JOIN (SELECT TRUNC(TO_DATE(" + timeField + ", 'YYYY-MM-DD'), 'MONTH') AS month_start, " + " JOIN (SELECT TRUNC(TO_DATE(" + timeField + ", 'YYYY-MM-DD'), 'MONTH') AS month_start, " +
" MAX(TO_DATE(" + timeField + ", 'YYYY-MM-DD')) AS max_date " + " MAX(TO_DATE(" + timeField + ", 'YYYY-MM-DD')) AS max_date " +
" FROM " + tableName + " WHERE " + conditionBuilder.toString() + " FROM " + tableName + " WHERE " + conditionBuilder.toString() +
" AND TO_DATE(" + timeField + ", 'YYYY-MM-DD') BETWEEN TO_DATE('" + startDate + "', 'YYYY-MM-DD') AND TO_DATE('" + endDate + "', 'YYYY-MM-DD') " + " AND TO_DATE(" + timeField + ", 'YYYY-MM-DD') BETWEEN TO_DATE('" + startDate + "', 'YYYY-MM-DD') AND TO_DATE('" + endDate + "', 'YYYY-MM-DD') " +
" AND BKGS = '" + bggs + "' " + // 添加分组条件 groupCondition + // 使用条件分组
" GROUP BY TRUNC(TO_DATE(" + timeField + ", 'YYYY-MM-DD'), 'MONTH')) t2 " + " GROUP BY TRUNC(TO_DATE(" + timeField + ", 'YYYY-MM-DD'), 'MONTH')) t2 " +
" ON TO_DATE(t1." + timeField + ", 'YYYY-MM-DD') = t2.max_date " + " ON TO_DATE(t1." + timeField + ", 'YYYY-MM-DD') = t2.max_date " +
" WHERE " + conditionBuilder.toString() + " WHERE " + conditionBuilder.toString() +
" AND TO_DATE(t1." + timeField + ", 'YYYY-MM-DD') BETWEEN TO_DATE('" + startDate + "', 'YYYY-MM-DD') AND TO_DATE('" + endDate + "', 'YYYY-MM-DD')"; " AND TO_DATE(t1." + timeField + ", 'YYYY-MM-DD') BETWEEN TO_DATE('" + startDate + "', 'YYYY-MM-DD') AND TO_DATE('" + endDate + "', 'YYYY-MM-DD')";
} else if ("POSTGRESQL".equalsIgnoreCase(DBname) || "GAUSS".equalsIgnoreCase(DBname)) { } else if ("POSTGRESQL".equalsIgnoreCase(DBname) || "GAUSS".equalsIgnoreCase(DBname)) {
// 构建分组条件
String groupCondition = ("龙牌".equals(bggs) || "梦牌".equals(bggs)) ?
" AND BKGS = '" + bggs + "' " : "";
String mainGroupCondition = ("龙牌".equals(bggs) || "梦牌".equals(bggs)) ?
" AND t1.BKGS = '" + bggs + "'" : "";
querySql = "SELECT t1.* FROM " + tableName + " t1 " + querySql = "SELECT t1.* FROM " + tableName + " t1 " +
" JOIN (SELECT DATE_TRUNC('MONTH', " + timeField + "::DATE) AS month_start, " + " JOIN (SELECT DATE_TRUNC('MONTH', " + timeField + "::DATE) AS month_start, " +
" MAX(" + timeField + "::DATE) AS max_date " + " MAX(" + timeField + "::DATE) AS max_date " +
" FROM " + tableName + " WHERE " + conditionBuilder.toString() + " AND " + timeField + "::DATE BETWEEN '" + startDate + "' AND '" + endDate + "' " + " FROM " + tableName + " WHERE " + conditionBuilder.toString() + " AND " + timeField + "::DATE BETWEEN '" + startDate + "' AND '" + endDate + "' " +
" AND BKGS = '" + bggs + "' " + // 添加分组条件 groupCondition + // 使用条件分组
" GROUP BY DATE_TRUNC('MONTH', " + timeField + "::DATE)) t2 " + " GROUP BY DATE_TRUNC('MONTH', " + timeField + "::DATE)) t2 " +
" ON t1." + timeField + "::DATE = t2.max_date " + " ON t1." + timeField + "::DATE = t2.max_date " +
" WHERE " + conditionBuilder.toString() + " WHERE " + conditionBuilder.toString() +
" AND t1." + timeField + "::DATE BETWEEN '" + startDate + "' AND '" + endDate + "'" + " AND t1." + timeField + "::DATE BETWEEN '" + startDate + "' AND '" + endDate + "'" +
" AND t1.BKGS = '" + bggs + "'"; // 添加分组条件; mainGroupCondition; // 使用条件分组
} else if ("SQLSERVER".equalsIgnoreCase(DBname)) { } else if ("SQLSERVER".equalsIgnoreCase(DBname)) {
// 构建分组条件
String groupCondition = ("龙牌".equals(bggs) || "梦牌".equals(bggs)) ?
" AND BKGS = '" + bggs + "' " : "";
String mainGroupCondition = ("龙牌".equals(bggs) || "梦牌".equals(bggs)) ?
" AND t1.BKGS = '" + bggs + "'" : "";
querySql = "SELECT t1.* FROM " + tableName + " t1 " + querySql = "SELECT t1.* FROM " + tableName + " t1 " +
" JOIN (SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, CONVERT(DATE, " + timeField + ")), 0) AS month_start, " + " JOIN (SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, CONVERT(DATE, " + timeField + ")), 0) AS month_start, " +
" MAX(CONVERT(DATE, " + timeField + ")) AS max_date " + " MAX(CONVERT(DATE, " + timeField + ")) AS max_date " +
" FROM " + tableName + " WHERE " + conditionBuilder.toString() + " FROM " + tableName + " WHERE " + conditionBuilder.toString() +
" AND CONVERT(DATE, " + timeField + ") BETWEEN CONVERT(DATE, '" + startDate + "') AND CONVERT(DATE, '" + endDate + "') " + " AND CONVERT(DATE, " + timeField + ") BETWEEN CONVERT(DATE, '" + startDate + "') AND CONVERT(DATE, '" + endDate + "') " +
groupCondition + // 使用条件分组
" GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, CONVERT(DATE, " + timeField + ")), 0)) t2 " + " GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, CONVERT(DATE, " + timeField + ")), 0)) t2 " +
" ON CONVERT(DATE, t1." + timeField + ") = t2.max_date " + " ON CONVERT(DATE, t1." + timeField + ") = t2.max_date " +
" WHERE " + conditionBuilder.toString() + " WHERE " + conditionBuilder.toString() +
" AND CONVERT(DATE, t1." + timeField + ") BETWEEN CONVERT(DATE, '" + startDate + "') AND CONVERT(DATE, '" + endDate + "')" + " AND CONVERT(DATE, t1." + timeField + ") BETWEEN CONVERT(DATE, '" + startDate + "') AND CONVERT(DATE, '" + endDate + "')" +
" AND t1.BKGS = '" + bggs + "'"; mainGroupCondition; // 使用条件分组
} else { } else {
// 默认处理如MySQL // 默认处理如MySQL
// 构建分组条件
String groupCondition = ("龙牌".equals(bggs) || "梦牌".equals(bggs)) ?
" AND BKGS = '" + bggs + "' " : "";
String mainGroupCondition = ("龙牌".equals(bggs) || "梦牌".equals(bggs)) ?
" AND t1.BKGS = '" + bggs + "'" : "";
querySql = "SELECT t1.* FROM " + tableName + " t1 " + querySql = "SELECT t1.* FROM " + tableName + " t1 " +
" JOIN (SELECT DATE_FORMAT(STR_TO_DATE(" + timeField + ", '%Y-%m-%d'), '%Y-%m-01') AS month_start, " + " JOIN (SELECT DATE_FORMAT(STR_TO_DATE(" + timeField + ", '%Y-%m-%d'), '%Y-%m-01') AS month_start, " +
" MAX(STR_TO_DATE(" + timeField + ", '%Y-%m-%d')) AS max_date " + " MAX(STR_TO_DATE(" + timeField + ", '%Y-%m-%d')) AS max_date " +
" FROM " + tableName + " WHERE " + conditionBuilder.toString() + " FROM " + tableName + " WHERE " + conditionBuilder.toString() +
" AND STR_TO_DATE(" + timeField + ", '%Y-%m-%d') BETWEEN STR_TO_DATE('" + startDate + "', '%Y-%m-%d') AND STR_TO_DATE('" + endDate + "', '%Y-%m-%d') " + " AND STR_TO_DATE(" + timeField + ", '%Y-%m-%d') BETWEEN STR_TO_DATE('" + startDate + "', '%Y-%m-%d') AND STR_TO_DATE('" + endDate + "', '%Y-%m-%d') " +
" AND BKGS = '" + bggs + "' " + // 添加分组条件 groupCondition + // 使用条件分组
" GROUP BY DATE_FORMAT(STR_TO_DATE(" + timeField + ", '%Y-%m-%d'), '%Y-%m-01')) t2 " + " GROUP BY DATE_FORMAT(STR_TO_DATE(" + timeField + ", '%Y-%m-%d'), '%Y-%m-01')) t2 " +
" ON STR_TO_DATE(t1." + timeField + ", '%Y-%m-%d') = t2.max_date " + " ON STR_TO_DATE(t1." + timeField + ", '%Y-%m-%d') = t2.max_date " +
" WHERE " + conditionBuilder.toString() + " WHERE " + conditionBuilder.toString() +
" AND STR_TO_DATE(t1." + timeField + ", '%Y-%m-%d') BETWEEN STR_TO_DATE('" + startDate + "', '%Y-%m-%d') AND STR_TO_DATE('" + endDate + "', '%Y-%m-%d')" + " AND STR_TO_DATE(t1." + timeField + ", '%Y-%m-%d') BETWEEN STR_TO_DATE('" + startDate + "', '%Y-%m-%d') AND STR_TO_DATE('" + endDate + "', '%Y-%m-%d')" +
" AND t1.BKGS = '" + bggs + "'"; // 添加分组条件 mainGroupCondition; // 使用条件分组
} }
LOGGER.info("执行查询: {}", querySql); LOGGER.info("执行查询: {}", querySql);
List<RowMap> pageData; List<RowMap> pageData;