import org.joda.time.DateTime;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
public class QueryCriteriaBuilder {
private QueryCriteria queryCriteria;
private QueryCriteriaBuilder() {
queryCriteria = new QueryCriteria();
}
public static QueryCriteriaBuilder builder() {
return new QueryCriteriaBuilder();
}
public QueryCriteriaBuilder asc() {
queryCriteria.orderType = OrderType.ASC;
return this;
}
public QueryCriteriaBuilder desc() {
queryCriteria.orderType = OrderType.DESC;
return this;
}
public QueryCriteriaBuilder orderBy(String orderBy) {
queryCriteria.orderBy = orderBy;
return this;
}
public QueryCriteriaBuilder pageSize(int pageSize) {
queryCriteria.pageSize = pageSize;
return this;
}
public QueryCriteriaBuilder pageSizeAs7() {
queryCriteria.pageSize = 7;
return this;
}
public QueryCriteriaBuilder pageNum(int pageNum) {
queryCriteria.pageNum = pageNum;
return this;
}
public QueryCriteriaBuilder endRangeStart(Long endRangeStart) {
queryCriteria.endRangeStart = new DateTime(endRangeStart).withTimeAtStartOfDay().toDate();
return this;
}
public QueryCriteriaBuilder endRangeEnd(Long endRangeEnd) {
queryCriteria.endRangeEnd = new DateTime(endRangeEnd).withTimeAtStartOfDay().toDate();
return this;
}
public QueryCriteriaBuilder reviewRangeStart(Long reviewRangeStart) {
queryCriteria.reviewRangeStart = new DateTime(reviewRangeStart).withTimeAtStartOfDay().toDate();
return this;
}
public QueryCriteriaBuilder reviewRangeEnd(Long reviewRangeEnd) {
queryCriteria.reviewRangeEnd = new DateTime(reviewRangeEnd).withTimeAtStartOfDay().toDate();
return this;
}
/******************新增查询参数**********************/
public QueryCriteriaBuilder taskName(String taskName) {
queryCriteria.taskName = taskName;
return this;
}
public QueryCriteriaBuilder userId(long userId) {
queryCriteria.userId = userId;
return this;
}
public QueryCriteriaBuilder creatorId(long creatorId) {
queryCriteria.creatorId = creatorId;
return this;
}
public QueryCriteriaBuilder receiverId(long receiverId) {
queryCriteria.receiverId = receiverId;
return this;
}
public QueryCriteriaBuilder userNameOrWorkNumber(String userNameOrWorkNumber) {
queryCriteria.userNameOrWorkNumber = userNameOrWorkNumber;
return this;
}
public QueryCriteriaBuilder orderByMap(LinkedHashMap<String,OrderType> orderByMap){
OrderType value = null;
queryCriteria.orderByMap = orderByMap;
Iterator iter = orderByMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
value = (OrderType) entry.getValue();
break;
}
queryCriteria.orderByMap().put("Id",value);
return this;
}
public QueryCriteria build() {
return queryCriteria;
}
public QueryCriteriaBuilder order(String order) {
if (order.equalsIgnoreCase("asc")) {
this.asc();
}
return this;
}
public class QueryCriteria {
private int pageNum = 1;
private int pageSize = 100;
private String orderBy;
private OrderType orderType = OrderType.DESC;
private LinkedHashMap<String,OrderType> orderByMap;
private Date endRangeStart = new DateTime(new Date(0)).withTimeAtStartOfDay().toDate();
private Date endRangeEnd = new DateTime().withDate(9999, 12, 31).withTimeAtStartOfDay().toDate();
private Date reviewRangeStart = new DateTime(new Date(0)).withTimeAtStartOfDay().toDate();
private Date reviewRangeEnd = new DateTime().withDate(9999, 12, 31).withTimeAtStartOfDay().toDate();
private Long userId;//发起人or承接人ID
private String taskName;//任务名称
private Long creatorId;//发起人userId
private Long receiverId;//承接人userId
private String userNameOrWorkNumber;//发起人名称或工号or承接人名称或工号
public String orderBy() {
return this.orderBy;
}
public OrderType orderType() {
return orderType;
}
public int pageSize() {
return pageSize;
}
public int pageNum() {
return pageNum;
}
public Date endRangeStart() {
return endRangeStart;
}
public Date endRangeEnd() {
return endRangeEnd;
}
public Date reviewRangeStart() {
return reviewRangeStart;
}
public Date reviewRangeEnd() {
return reviewRangeEnd;
}
public Long userId() {
return userId;
}
public String taskName() {
return taskName;
}
public Long creatorId() {
return creatorId;
}
public Long receiverId() {
return receiverId;
}
public String userNameOrWorkNumber(){
return userNameOrWorkNumber;
}
public LinkedHashMap<String,OrderType> orderByMap(){ return orderByMap;}
}
}
-------------------------------------------------------------------------------------------------------------------------------------
然后我们可以直接这样用
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/creator/tasks/new")
public Response listCreatorTasksNew(@QueryParam("statuses") List<TaskStatus> statuses,
@QueryParam("endRangeStart") @DefaultValue("0") Long endRangeStart,
@QueryParam("endRangeEnd") @DefaultValue("253402185600000") Long endRangeEnd,
@QueryParam("reviewRangeStart") @DefaultValue("0") Long reviewRangeStart,
@QueryParam("reviewRangeEnd") @DefaultValue("253402185600000") Long reviewRangeEnd,
@QueryParam("pageNum") @DefaultValue("1") int pageNum,
@QueryParam("pageSize") @DefaultValue("10") int pageSize,
@QueryParam("orderBy") @DefaultValue("id") String orderBy,
@QueryParam("order") @DefaultValue("desc") String order,
@QueryParam("taskName") String taskName,
@QueryParam("userId") long userId,
@QueryParam("userNameOrWorkNumber") String userNameOrWorkNumber) {
// 设置查询条件
QueryCriteria criteria = builder().orderBy(orderBy).order(order).pageNum(pageNum).pageSize(pageSize)
.endRangeStart(endRangeStart).endRangeEnd(endRangeEnd).reviewRangeStart(reviewRangeStart)
.reviewRangeEnd(reviewRangeEnd).taskName(taskName).userId(userId).userNameOrWorkNumber(userNameOrWorkNumber).build();
}