비즈니스로그 멀티 조건 조회 가능하게 수정
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package com.caliverse.admin.logs.logservice.businesslogservice;
|
package com.caliverse.admin.logs.logservice.businesslogservice;
|
||||||
|
|
||||||
|
import com.caliverse.admin.domain.entity.EInputType;
|
||||||
import com.caliverse.admin.domain.entity.common.SearchUserType;
|
import com.caliverse.admin.domain.entity.common.SearchUserType;
|
||||||
import com.caliverse.admin.domain.request.LogGenericRequest;
|
import com.caliverse.admin.domain.request.LogGenericRequest;
|
||||||
import com.caliverse.admin.global.common.constants.AdminConstants;
|
import com.caliverse.admin.global.common.constants.AdminConstants;
|
||||||
@@ -145,35 +146,73 @@ public class BusinessLogGenericService extends BusinessLogServiceBase {
|
|||||||
filter.getValue() != null) {
|
filter.getValue() != null) {
|
||||||
|
|
||||||
Object convertedValue = null;
|
Object convertedValue = null;
|
||||||
|
String valueStr = filter.getValue();
|
||||||
|
|
||||||
// 필드 타입에 따른 값 변환만 수행
|
// OR 조건 패턴 확인 (괄호와 파이프 문자 포함)
|
||||||
|
boolean isOrPattern = valueStr.startsWith("(") && valueStr.endsWith(")") && valueStr.contains("|");
|
||||||
|
|
||||||
|
if (isOrPattern) {
|
||||||
|
// OR 패턴은 문자열 그대로 사용
|
||||||
|
convertedValue = valueStr;
|
||||||
|
} else {
|
||||||
|
// 일반 값 변환
|
||||||
switch (filter.getFieldType()) {
|
switch (filter.getFieldType()) {
|
||||||
case Number:
|
case Number:
|
||||||
try {
|
try {
|
||||||
if (filter.getValue().contains(".")) {
|
if (valueStr.contains(".")) {
|
||||||
convertedValue = Double.parseDouble(filter.getValue());
|
convertedValue = Double.parseDouble(valueStr);
|
||||||
} else {
|
} else {
|
||||||
convertedValue = Long.parseLong(filter.getValue());
|
convertedValue = Long.parseLong(valueStr);
|
||||||
}
|
}
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
log.warn("Failed to convert value to number: {}", filter.getValue(), e);
|
log.warn("Failed to convert value to number: {}", valueStr, e);
|
||||||
convertedValue = filter.getValue();
|
convertedValue = valueStr;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Boolean:
|
case Boolean:
|
||||||
convertedValue = Boolean.parseBoolean(filter.getValue());
|
convertedValue = Boolean.parseBoolean(valueStr);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case String:
|
case String:
|
||||||
case None:
|
case None:
|
||||||
default:
|
default:
|
||||||
convertedValue = filter.getValue();
|
convertedValue = valueStr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 중첩된 JSON 구조에 맞게 $regex를 사용한 패턴 매칭
|
// 중첩된 JSON 구조에 맞게 $regex를 사용한 패턴 매칭
|
||||||
String regexPattern = "\"" + filter.getFieldName() + "\":" + CommonUtils.formatValueForRegex(convertedValue);
|
String regexPattern;
|
||||||
|
|
||||||
|
if (isOrPattern) {
|
||||||
|
// OR 패턴 처리
|
||||||
|
String innerValues = valueStr.substring(1, valueStr.length() - 1);
|
||||||
|
String[] parts = innerValues.split("\\|");
|
||||||
|
|
||||||
|
// 필드 이름과 함께 각 값에 대한 정규식 패턴 구성
|
||||||
|
StringBuilder orPatternBuilder = new StringBuilder();
|
||||||
|
orPatternBuilder.append("\"").append(filter.getFieldName()).append("\":(");
|
||||||
|
|
||||||
|
for (int i = 0; i < parts.length; i++) {
|
||||||
|
if (i > 0) orPatternBuilder.append("|");
|
||||||
|
|
||||||
|
String part = parts[i].trim();
|
||||||
|
// 필드 타입에 맞게 값 형식화
|
||||||
|
if (filter.getFieldType() == EInputType.String) {
|
||||||
|
orPatternBuilder.append("\"").append(part.replace("\"", "\\\"")).append("\"");
|
||||||
|
} else {
|
||||||
|
orPatternBuilder.append(part);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
orPatternBuilder.append(")");
|
||||||
|
regexPattern = orPatternBuilder.toString();
|
||||||
|
} else {
|
||||||
|
// 단일 값 처리
|
||||||
|
regexPattern = "\"" + filter.getFieldName() + "\":" + CommonUtils.formatValueForRegex(convertedValue);
|
||||||
|
}
|
||||||
|
|
||||||
Document filterDoc = new Document("message", new Document("$regex", regexPattern));
|
Document filterDoc = new Document("message", new Document("$regex", regexPattern));
|
||||||
filterConditions.add(filterDoc);
|
filterConditions.add(filterDoc);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user