fix(文档拆分): 动态字段多日期范围查询完善

This commit is contained in:
yjz
2023-10-20 14:08:35 +08:00
parent ed67c445d1
commit 46a07a42e5
3 changed files with 27 additions and 20 deletions
@@ -25,13 +25,17 @@ public class DocumentSplitCommon {
*/ */
public static final String DATE_FORMAT_END = " , '%Y-%m-%d') "; public static final String DATE_FORMAT_END = " , '%Y-%m-%d') ";
/** /**
* 模糊匹配 * between
*/ */
public static final String CONCAT_LIKE_BEGIN = " concat('%', ' "; public static final String BETWEEN = "between ";
/** /**
* 模糊匹配 * 模糊匹配
*/ */
public static final String CONCAT_LIKE_END = " ', '%') "; public static final String CONCAT_LIKE_BEGIN = " concat('%', '";
/**
* 模糊匹配
*/
public static final String CONCAT_LIKE_END = "', '%') ";
/** /**
* and * and
*/ */
@@ -21,27 +21,30 @@ public class DateManyConditionImpl extends AbstractConditionBase {
public String buildCondition(String fieldName, String value){ public String buildCondition(String fieldName, String value){
// 多日期查询 // 多日期查询
String substringBegin = "SUBSTRING_INDEX("; String substringBegin = "SUBSTRING_INDEX(";
String substringEnd = ", ',', 1)"; String substringEndFirst = ", ',', 1)";
String substringEndLast = ", ',', -1)";
String dateMany = DocumentSplitCommon.AND; String dateMany = DocumentSplitCommon.AND;
if (value.contains(",")) { if (value.contains(",")) {
// 范围查询 // 范围查询
String[] split = value.split(","); String[] split = value.split(",");
dateMany += "(("; dateMany += "(";
String startDate = DocumentSplitCommon.DATE_FORMAT_BEGIN + "'" + split[0] + "'" + DocumentSplitCommon.DATE_FORMAT_END; String startDate = DocumentSplitCommon.DATE_FORMAT_BEGIN + "'" + split[0] + "'" + DocumentSplitCommon.DATE_FORMAT_END;
String endDate = DocumentSplitCommon.DATE_FORMAT_BEGIN + "'" + split[1] + "'" + DocumentSplitCommon.DATE_FORMAT_END; String endDate = DocumentSplitCommon.DATE_FORMAT_BEGIN + "'" + split[1] + "'" + DocumentSplitCommon.DATE_FORMAT_END;
dateMany += dateMany += "(" +
DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEnd + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.GT + startDate + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndFirst + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.BETWEEN + startDate + DocumentSplitCommon.AND + endDate +
DocumentSplitCommon.AND + ")" +
DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEnd + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.LT + endDate + ")" + DocumentSplitCommon.OR +
DocumentSplitCommon.OR + "(" + "(" +
DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEnd + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.GT + startDate + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndLast + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.BETWEEN + startDate + DocumentSplitCommon.AND + endDate +
DocumentSplitCommon.AND + ")" +
DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEnd + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.LT + endDate + ")" + DocumentSplitCommon.OR +
DocumentSplitCommon.OR + "(" + "(" +
DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + ", ',', -1)" + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.GT + startDate + startDate + DocumentSplitCommon.BETWEEN + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndFirst + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.AND + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndLast + DocumentSplitCommon.DATE_FORMAT_END +
DocumentSplitCommon.AND + ")" +
DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + ", ',', -1)" + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.LT + endDate + "))"; DocumentSplitCommon.OR +
"(" +
endDate + DocumentSplitCommon.BETWEEN + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndFirst + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.AND + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndLast + DocumentSplitCommon.DATE_FORMAT_END +
")" + ")";
} else { } else {
dateMany += fieldName + DocumentSplitCommon.LIKE + DocumentSplitCommon.CONCAT_LIKE_BEGIN + value + DocumentSplitCommon.CONCAT_LIKE_END; dateMany += fieldName + DocumentSplitCommon.LIKE + DocumentSplitCommon.CONCAT_LIKE_BEGIN + value + DocumentSplitCommon.CONCAT_LIKE_END;
} }
@@ -960,7 +960,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
Optional<LawsTag> lawsTag = fieldListCondition.stream().filter(o -> k.equals(o.getDbFieldName())).findFirst(); Optional<LawsTag> lawsTag = fieldListCondition.stream().filter(o -> k.equals(o.getDbFieldName())).findFirst();
lawsTag.ifPresent(l -> { lawsTag.ifPresent(l -> {
// 构建查询条件 (工厂 + 策略 设计模式) // 构建查询条件 (工厂 + 策略 设计模式)
String sqlCondition = ConditionMapFactory.getInvokeStrategy(l.getDbFieldName()).buildCondition(l.getDbFieldName(), (String) v); String sqlCondition = ConditionMapFactory.getInvokeStrategy(l.getFieldShowType()).buildCondition(l.getDbFieldName(), (String) v);
selectCondition.append(sqlCondition); selectCondition.append(sqlCondition);
}); });
}); });
@@ -1035,7 +1035,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
// 拆分状态 // 拆分状态
queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getSplitStatus()), "split_status", documentSplitInfo.getSplitStatus()); queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getSplitStatus()), "split_status", documentSplitInfo.getSplitStatus());
// 编辑人 // 编辑人
queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getAuthor()), "username", documentSplitInfo.getAuthor()); queryWrapper.like(StringUtils.isNotBlank(documentSplitInfo.getAuthor()), "username", documentSplitInfo.getAuthor());
// 发布前id // 发布前id
if (StringUtils.isNotBlank(documentSplitInfo.getPublishBeforeId())){ if (StringUtils.isNotBlank(documentSplitInfo.getPublishBeforeId())){
queryWrapper.eq("publish_before_id", documentSplitInfo.getPublishBeforeId()); queryWrapper.eq("publish_before_id", documentSplitInfo.getPublishBeforeId());