package com.ciih.workshop.config;
import cn.hutool.core.lang.PatternPool;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReUtil;
import com.ejlchina.searcher.BeanMeta;
import com.ejlchina.searcher.ParamFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Component
public class BeanSearchConfig {
@Bean
public ParamFilter myParamFilter() {
return new ParamFilter() {
@Override
public <T> Map<String, Object> doFilter(BeanMeta<T> beanMeta, Map<String, Object> paraMap) {
// beanMeta 是正在检索的实体类的元信息, paraMap 是当前的检索参数
// 这里可以写一些自定义的参数过滤规则
// 将多ID传入的数组形式,解析未框架可以识别的_0,_1,_2的形式。
Object ids = paraMap.get("id");
if (ObjectUtil.isNotEmpty(ids)) {
String[] split = ids.toString().replaceAll("\\[", "").replaceAll("]", "").split(",");
paraMap.remove("id");
paraMap.put("id_op", "il");
for (int i = 0; i < split.length; i++) {
paraMap.put("id" + "_" + i, split[i]);
}
}
/**
* 将前端传过来的数组转成_0_1_2...形式
* 注:博主separator采用的是下划线,框架默认是中划线。读者根据自己情况修改一下
*/
// 如果匹配到了以[...]形式,则认为是数组,元素以逗号分割出来。
Pattern pattern = Pattern.compile("\\[(.*?)\\]");
Map<String, Object> map = ObjectUtil.clone(paraMap);
map.forEach((k, v) -> {
Matcher matcher = pattern.matcher(v.toString());
if (matcher.find()) {
String arrayString = matcher.group(1);
String[] array = arrayString.split(",\\s*");
// 对数组进行操作
if (array.length > 0) {
paraMap.remove(k);
paraMap.putIfAbsent(k + "_op", "il");
for (int i = 0; i < array.length; i++) {
paraMap.put(k + "_" + i, array[i]);
}
}
}
});
/**
* 逻辑删除:
* 删除标识:deleted 0未删除、1已删除
*/
paraMap.put("deleted", 0);
paraMap.put("deleted123456", 0);
return paraMap;
}
};
}
}
注意:自定义加入的参数,实体类中要有这个字段、或字段_...