import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.xxx.xxx.service.snmp.Pair;
import com.xxx.xxx.service.snmp.TimeScope;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.beanutils.BeanMap;
import org.junit.Test; import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.HashMap;
import java.util.Map; @Data
@NoArgsConstructor
public class QueryConditionBuilder
{
LocalDateTime startTime;
LocalDateTime endTime;
Long nodeId;
Long fsId;
Long memId;
Long ifCardId; private QueryConditionBuilder(QueryConditionBuilder.Builder builder) {
setStartTime(builder.startTime);
setEndTime(builder.endTime);
setNodeId(builder.nodeId);
setFsId(builder.fsId);
setMemId(builder.memId);
setIfCardId(builder.ifCardId);
} public static QueryConditionBuilder.Builder newBuilder() {
return new QueryConditionBuilder.Builder();
} public Map<String,Object> toFilter()
{
ObjectMapper mapper = new ObjectMapper();
JavaTimeModule module = new JavaTimeModule();
//https://github.com/networknt/light-4j/issues/82
mapper.registerModule(module);
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); //2019-10-11更新代码,忽略值为null
mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);//2019-10-11更新代码,忽略空字符串属性
Map<String,Object> filter = mapper.convertValue(this,Map.class);
System.out.printf("查询条件:%s\n", JSON.toJSONString(filter));
return filter;
} //https://stackoverflow.com/questions/6796187/java-introspection-object-to-map/57057596#57057596
public Map<String,Object> toFilter2(){
Map<String, Object> filter = new HashMap<String, Object>();
Map<Object, Object> introspected = new BeanMap(this);
for (Map.Entry<Object, Object> entry:introspected.entrySet())
{
String key = (String)entry.getKey();
if("class".equals(key)) continue;
Object value = entry.getValue();
filter.put(key,value);
}
return filter;
} public static final class Builder { private LocalDateTime startTime;
private LocalDateTime endTime;
private Long nodeId = null;
private Long fsId = null;
private Long memId =null;
private Long ifCardId = null; private Builder() {
} public QueryConditionBuilder.Builder withStartTime(LocalDateTime val) {
startTime = val;
return this;
} public QueryConditionBuilder.Builder withEndTime(LocalDateTime val) {
endTime = val;
return this;
} public QueryConditionBuilder.Builder withNodeId(Long val) {
nodeId = val;
return this;
} public QueryConditionBuilder.Builder withFsId(Long val) {
fsId = val;
return this;
} public QueryConditionBuilder.Builder withMemId(Long val) {
memId = val;
return this;
} public QueryConditionBuilder.Builder withIfCardId(Long val) {
ifCardId = val;
return this;
} public QueryConditionBuilder build() {
return new QueryConditionBuilder(this);
}
} @Test
public void test()
{
Pair<Timestamp, Timestamp> scope = TimeScope.computeDate("24h"); Timestamp startTime = scope.getFirst();
Timestamp endTime = scope.getSecond(); LocalDateTime now = LocalDateTime.now(ZoneId.of("+8"));
LocalDateTime yesterday = now.plusHours(-24); Map<String, Object> condition = QueryConditionBuilder.newBuilder()
.withStartTime(yesterday)
.withEndTime(now)
.build().toFilter(); Map<String, Object> condition2 = QueryConditionBuilder.newBuilder()
.withStartTime(yesterday)
.withEndTime(now)
.build().toFilter2(); System.out.println(condition); System.out.println(condition2);
}
}
输出结果:
查询条件:{"startTime":"2019-07-17T16:41:40.031","endTime":"2019-07-18T16:41:40.031"}
{startTime=2019-07-17T16:41:40.031, endTime=2019-07-18T16:41:40.031, nodeId=null, fsId=null, memId=null, ifCardId=null}
{fsId=null, startTime=2019-07-17T16:41:40.031, endTime=2019-07-18T16:41:40.031, nodeId=null, ifCardId=null, memId=null}