diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java index a8f58764..e6925867 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java @@ -2368,19 +2368,33 @@ public class LawsCommonServiceImpl implements ILawsCommonService { **/ private void processDateManyTypeCondition(StringBuilder selectCondition, String key, String value) { if (value.contains(",")) { - String startDate = "date_format('" + value.split(",")[0] + "', '%Y-%m-%d')"; - String endDate = "date_format('" + value.split(",")[1] + "', '%Y-%m-%d')"; - selectCondition.append(" and (( date_format(SUBSTRING_INDEX(").append(key).append(", ',', 1),'%Y-%m-%d') >= ").append(startDate) - .append(" and date_format(SUBSTRING_INDEX(").append(key).append(", ',', 1),'%Y-%m-%d') <= ").append(endDate).append(")"); - selectCondition.append(" or ( date_format(SUBSTRING_INDEX(").append(key).append(", ',', 1),'%Y-%m-%d') <= ").append(startDate) - .append(" and date_format(SUBSTRING_INDEX(").append(key).append(", ',', -1),'%Y-%m-%d') >= ").append(endDate).append(")"); - selectCondition.append(" or ( date_format(SUBSTRING_INDEX(").append(key).append(", ',', -1),'%Y-%m-%d') >= ").append(startDate) - .append(" and date_format(SUBSTRING_INDEX(").append(key).append(", ',', -1),'%Y-%m-%d') <= ").append(endDate).append("))"); + // 提取输入的开始日期和结束日期 + String[] dates = value.split(","); + String startDate = "STR_TO_DATE('" + dates[0] + "', '%Y-%m-%d')"; + String endDate = "STR_TO_DATE('" + dates[1] + "', '%Y-%m-%d')"; + + // 添加 SQL 条件,使用 EXISTS 和一个子查询 + selectCondition.append(" AND EXISTS (") + .append("SELECT 1 FROM (") + .append("SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5") + .append(") numbers WHERE (") + .append(key) + .append(" REGEXP REPLACE(CONCAT('^', REPEAT('.*?,', numbers.n - 1), '.*'), ',{2,}', ',,') AND ") + .append("STR_TO_DATE(SUBSTRING_INDEX(SUBSTRING_INDEX(") + .append(key) + .append(", ',', numbers.n), ',', -1), '%Y-%m-%d') BETWEEN ") + .append(startDate) + .append(" AND ") + .append(endDate) + .append("))"); } else { - selectCondition.append(" and " + key + " like concat(concat('%','" + value + "'),'%')"); + // 单个日期的处理,使用 LIKE 进行模糊匹配 + selectCondition.append(" AND ").append(key).append(" LIKE CONCAT('%', '").append(value).append("', '%')"); } } + + @Override public byte[] getMinioFileContent(OSSFile file) throws Exception { return this.getMinioFileContentNormal(file, false);