비즈니스로그 멀티 조건 조회 가능하게 수정
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
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.request.LogGenericRequest;
|
||||
import com.caliverse.admin.global.common.constants.AdminConstants;
|
||||
@@ -145,35 +146,73 @@ public class BusinessLogGenericService extends BusinessLogServiceBase {
|
||||
filter.getValue() != null) {
|
||||
|
||||
Object convertedValue = null;
|
||||
String valueStr = filter.getValue();
|
||||
|
||||
// 필드 타입에 따른 값 변환만 수행
|
||||
switch (filter.getFieldType()) {
|
||||
case Number:
|
||||
try {
|
||||
if (filter.getValue().contains(".")) {
|
||||
convertedValue = Double.parseDouble(filter.getValue());
|
||||
} else {
|
||||
convertedValue = Long.parseLong(filter.getValue());
|
||||
// OR 조건 패턴 확인 (괄호와 파이프 문자 포함)
|
||||
boolean isOrPattern = valueStr.startsWith("(") && valueStr.endsWith(")") && valueStr.contains("|");
|
||||
|
||||
if (isOrPattern) {
|
||||
// OR 패턴은 문자열 그대로 사용
|
||||
convertedValue = valueStr;
|
||||
} else {
|
||||
// 일반 값 변환
|
||||
switch (filter.getFieldType()) {
|
||||
case Number:
|
||||
try {
|
||||
if (valueStr.contains(".")) {
|
||||
convertedValue = Double.parseDouble(valueStr);
|
||||
} else {
|
||||
convertedValue = Long.parseLong(valueStr);
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
log.warn("Failed to convert value to number: {}", valueStr, e);
|
||||
convertedValue = valueStr;
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
log.warn("Failed to convert value to number: {}", filter.getValue(), e);
|
||||
convertedValue = filter.getValue();
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
case Boolean:
|
||||
convertedValue = Boolean.parseBoolean(filter.getValue());
|
||||
break;
|
||||
case Boolean:
|
||||
convertedValue = Boolean.parseBoolean(valueStr);
|
||||
break;
|
||||
|
||||
case String:
|
||||
case None:
|
||||
default:
|
||||
convertedValue = filter.getValue();
|
||||
break;
|
||||
case String:
|
||||
case None:
|
||||
default:
|
||||
convertedValue = valueStr;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 중첩된 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));
|
||||
filterConditions.add(filterDoc);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user