FilterParam.java
package com.mycim.valueobject.sorter;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.ListUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import java.util.List;
import java.util.Map;
/**
* 参数过滤整合对象
* @author yibing.liu
* @version 1.0
* @date 2021/06/29
*/
public class FilterParam<T> {
//是否需要过滤关键key的内容
private boolean filter;
//需要过滤的关键key列
private String keyColumn;
//自定义的列名,用于当 keyColumn 匹配成功过后,需要以另外列名作为标记列
private String customColumn;
//关键字符,用于对关键key列的匹配
private String keyCharacter;
//判断是否有值 或者判断是否包含关键字符
private boolean isEmpty;
//需要标记的符号
private String mark = "1";
//是否需要补齐空白位置
private boolean fillBlank = true;
//返回值的类型,目前只需要:String 和 List
private Class<T> outType;
//槽位数默认为25
private int slotCount = 25;
//position、unitId、unitRrn、lotId、lotid(兼容此key)、lotRrn、chooseFlag
// 可通过 addStringColumn()自定义添加需要过滤的列名
private List<Column> columnArrayList = ListUtils.newArrayList(new Column("unitId"), new Column("unitRrn"),
new Column("lotId"), new Column("lotRrn"), new Column("chooseFlag"));
//可以确定唯一数字的列名
private String integerColumn = "position";
//唯一数字的列名
private String seqColumn = "position";
public FilterParam() {
this.outType = (Class<T>) String.class;
this.filter = false;
}
public FilterParam(Class<T> tClass) {
this.outType = tClass;
this.filter = false;
}
/**
* 判断 指定对象中的 keyColumn 属性值是否为空
* @param keyColumn 指定对象中的属性
*/
public FilterParam(String keyColumn) {
this.filter = true;
this.keyColumn = keyColumn;
this.isEmpty = true;
}
public FilterParam(String keyColumn, Class<T> tClass) {
this.filter = true;
this.keyColumn = keyColumn;
this.isEmpty = true;
this.outType = tClass;
}
/**
* 判断 指定对象中的 keyColumn 属性是否包含 关键字符 keyCharacter
* @param keyColumn 指定对象中的属性
* @param keyCharacter 关键字符 keyCharacter
*/
public FilterParam(String keyColumn, String keyCharacter) {
this.filter = true;
this.keyColumn = keyColumn;
this.keyCharacter = keyCharacter;
}
public FilterParam(String keyColumn, String keyCharacter, Class<T> tClass) {
this.filter = true;
this.keyColumn = keyColumn;
this.keyCharacter = keyCharacter;
this.outType = tClass;
}
public String getKeyColumn() {
return StringUtils.isEmpty(customColumn) ? keyColumn : customColumn;
}
public void setKeyColumn(String keyColumn) {
this.keyColumn = keyColumn;
}
public String getKeyCharacter() {
return keyCharacter;
}
public void setKeyCharacter(String keyCharacter) {
this.keyCharacter = keyCharacter;
}
public void setCustomColumn(String customColumn) {
this.customColumn = customColumn;
}
public boolean isFilter() {
return filter;
}
public String canMark(Object object, String mark){
if (isEmpty){
if (keyColumn == null || object == null) return StringUtils.EMPTY;
} else {
if (keyCharacter == null || keyColumn == null || object == null) return StringUtils.EMPTY;
}
if (object instanceof Map){
if (isEmpty){ //判断条件为是否有值
if (((Map) object).get(keyColumn) != null && !StringUtils
.equalsIgnoreCase(MapUtils.getString((Map)object, keyColumn), StringUtils.EMPTY)) return mark;
} else { //判断条件为是否包含关键字符
if (MapUtils.getString((Map)object, keyColumn, StringUtils.EMPTY).contains(keyCharacter)) return mark;
}
}
if (object instanceof String){
if (isEmpty){
if (StringUtils.isNotEmpty((String)object))return mark;
} else {
if (StringUtils.defaultIfEmpty((String)object, StringUtils.EMPTY).contains(keyCharacter)) return mark;
}
}
return StringUtils.EMPTY;
}
public int getSlotCount() {
return slotCount;
}
public void setSlotCount(int slotCount) {
this.slotCount = slotCount;
}
public List<Column> getColumnArrayList() {
return columnArrayList;
}
public String getIntegerColumn() {
return integerColumn;
}
public void setIntegerColumn(String integerColumn) {
if (StringUtils.isNotEmpty(integerColumn)){
this.integerColumn = integerColumn;
}
}
public String getSeqColumn() {
return seqColumn;
}
public void setSeqColumn(String seqColumn) {
if (StringUtils.isNotEmpty(seqColumn)) {
this.seqColumn = seqColumn;
}
}
public Class<T> getOutType(){
//默认返回String
return outType == null? (Class<T>) String.class :outType;
}
public void addColumn(String keyColumn){
//可以自定添加需要转换key
Column column = new Column(keyColumn, keyColumn);
if (StringUtils.isNotEmpty(keyColumn) && !columnArrayList.contains(column)){
columnArrayList.add(column);
}
}
public void addColumn(String matchColumn, String actualColumn){
//可以自定添加需要转换key
Column column = new Column(matchColumn, actualColumn);
if (StringUtils.isNotEmpty(matchColumn) && !columnArrayList.contains(column)){
columnArrayList.add(column);
}
}
public String getMark() {
return mark;
}
public void setMark(String mark) {
this.mark = mark;
}
public boolean isFillBlank() {
return fillBlank;
}
public void setFillBlank(boolean fillBlank) {
this.fillBlank = fillBlank;
}
public static class Column {
private String matchColumn;
private String actualColumn;
Column(String column){
this.matchColumn = column;
this.actualColumn = column;
}
Column(String matchColumn, String actualColumn){
this.matchColumn = matchColumn;
this.actualColumn = actualColumn;
}
public String getMatchColumn() {
return matchColumn;
}
public String getActualColumn() {
return actualColumn;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Column){//需要区分大小写
return StringUtils.equals(matchColumn, ((Column) obj).getMatchColumn())
&& StringUtils.equals(actualColumn, ((Column) obj).getActualColumn());
}
return false;
}
}
}