package {{packageName}}.{{entity.module}}.filter;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.fastjson.annotation.JSONField;
import net.ibizsys.central.util.ISearchContextDTO;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import net.ibizsys.central.plugin.boot.core.filter.BaseFilter;
import {{packageName}}.{{entity.module}}.domain.{{entity.codeName}};
/**
 * 关系型数据实体[{{entity.codeName}}] 查询条件对象
 */
@Slf4j
@Getter
@Setter
@NoArgsConstructor
@ApiModel("{{entity.logicName}}")
public class {{entity.codeName}}SearchContext extends BaseFilter<{{entity.codeName}}> {

    {{#each entity.fields as |field|}}
            {{#each field.allPSDEFSearchModes as |formitem|}}
            {{#unless formitem.valueFunc}}
                    {{#if (or (eq formitem.valueOP "IN") (eq formitem.valueOP "ISNULL") (eq formitem.valueOP "ISNOTNULL"))}}
    @JsonProperty("{{lowerCase formitem.name}}")
    @JSONField(name = "{{lowerCase formitem.name}}")
                    {{else}}
    @JsonProperty("{{lowerCase formitem.name}}")
                        {{#timeType}}
    @JsonFormat(pattern = "{{format}}", locale = "zh", timezone = "GMT+8")
                        {{/timeType}}
    @JSONField(name = "{{lowerCase formitem.name}}"{{#timeType}} , format = "{{format}}"{{/timeType}})
                        {{#eq type.java "Long"}}
    @JsonSerialize(using = ToStringSerializer.class)            
                        {{/eq}}
                    {{/if}}
    @ApiModelProperty(value = "{{lowerCase formitem.name}}",name = "{{lowerCase formitem.name}}",notes = "{{field.logicName}}{{formitem.valueOP}}")
	private {{#if (or (eq formitem.valueOP "IN") (eq formitem.valueOP "ISNULL") (eq formitem.valueOP "ISNOTNULL"))}}String{{else}}{{field.type.java}}{{/if}} {{camelCase field.codeName}}{{formitem.valueOP}};
	public void set{{pascalCase field.codeName}}{{formitem.valueOP}}({{#if (or (eq formitem.valueOP "IN") (eq formitem.valueOP "ISNULL") (eq formitem.valueOP "ISNOTNULL"))}}String{{else}}{{field.type.java}}{{/if}} {{camelCase field.codeName}}{{formitem.valueOP}}) {
        this.{{camelCase field.codeName}}{{formitem.valueOP}} = {{camelCase field.codeName}}{{formitem.valueOP}};
        if(!ObjectUtils.isEmpty(this.{{camelCase field.codeName}}{{formitem.valueOP}})){
                    {{#eq formitem.valueOP "LIKE"}}
            this.like("{{lowerCase field.name}}", {{camelCase field.codeName}}{{formitem.valueOP}});
                    {{/eq}}
                    {{#eq formitem.valueOP "LEFTLIKE"}}
            this.ll("{{lowerCase field.name}}", {{camelCase field.codeName}}{{formitem.valueOP}});
                    {{/eq}}
                    {{#eq formitem.valueOP "RIGHTLIKE"}}
            this.rl("{{lowerCase field.name}}", {{camelCase field.codeName}}{{formitem.valueOP}});
                    {{/eq}}
                    {{#eq formitem.valueOP "EQ"}}
            this.eq("{{lowerCase field.name}}", {{camelCase field.codeName}}{{formitem.valueOP}});
                    {{/eq}}
                    {{#eq formitem.valueOP "NOTEQ"}}
            this.ne("{{lowerCase field.name}}", {{camelCase field.codeName}}{{formitem.valueOP}});
                    {{/eq}}
                    {{#eq formitem.valueOP "GT"}}
            this.gt("{{lowerCase field.name}}", {{camelCase field.codeName}}{{formitem.valueOP}});
                    {{/eq}}
                    {{#eq formitem.valueOP "GTANDEQ"}}
            this.gte("{{lowerCase field.name}}", {{camelCase field.codeName}}{{formitem.valueOP}});
                    {{/eq}}
                    {{#eq formitem.valueOP "LT"}}
            this.lt("{{lowerCase field.name}}", {{camelCase field.codeName}}{{formitem.valueOP}});
                    {{/eq}}
                    {{#eq formitem.valueOP "LTANDEQ"}}
            this.lte("{{lowerCase field.name}}", {{camelCase field.codeName}}{{formitem.valueOP}});
                    {{/eq}}
                    {{#eq formitem.valueOP "ISNOTNULL"}}
			if(this.{{camelCase field.codeName}}{{formitem.valueOP}}.equals("1")){
				this.nn("{{lowerCase field.name}}");
			}
                    {{/eq}}
                    {{#eq formitem.valueOP "ISNULL"}}
			if(this.{{camelCase field.codeName}}{{formitem.valueOP}}.equals("1")){
				this.nvl("{{lowerCase field.name}}");
			}
                    {{/eq}}
                    {{#eq formitem.valueOP "IN"}}
			this.in("{{lowerCase field.name}}",this.{{camelCase field.codeName}}{{formitem.valueOP}}.split(";|,|；|，"));
                    {{/eq}}
                    {{#eq formitem.valueOP "NOTIN"}}
			this.ni("{{lowerCase field.name}}",this.{{camelCase field.codeName}}{{formitem.valueOP}}.split(";|,|；|，"));
                    {{/eq}} 

        }
    }
                    
            {{/unless}}
            {{/each}}
    {{/each}}


}