Просмотр исходного кода

Merge branch 'feature/增加消息分页查询接口' into 'wrdp'

[平台消息]增加消息分页查询接口

See merge request o2oa/o2oa!2621
o2null 5 лет назад
Родитель
Сommit
67b3a5d4b5

+ 137 - 0
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/jaxrs/message/ActionListPaging.java

@@ -0,0 +1,137 @@
+package com.x.message.assemble.communicate.jaxrs.message;
+
+import com.google.gson.JsonElement;
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.entity.JpaObject;
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.base.core.project.bean.WrapCopier;
+import com.x.base.core.project.bean.WrapCopierFactory;
+import com.x.base.core.project.gson.GsonPropertyObject;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.tools.DateTools;
+import com.x.message.assemble.communicate.Business;
+import com.x.message.core.entity.Message;
+import com.x.message.core.entity.Message_;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Tuple;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.List;
+
+class ActionListPaging extends BaseAction {
+
+	ActionResult<List<Wo>> execute(EffectivePerson effectivePerson, Integer page, Integer size, JsonElement jsonElement)
+			throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			Business business = new Business(emc);
+			ActionResult<List<Wo>> result = new ActionResult<>();
+			Wi wi = this.convertToWrapIn(jsonElement, Wi.class);
+			Predicate p = this.toFilterPredicate(effectivePerson, business, wi);
+			List<Wo> wos = emc.fetchDescPaging(Message.class, Wo.copier, p, page, size, Message.sequence_FIELDNAME);
+
+			result.setData(wos);
+			result.setCount(emc.count(Message.class, p));
+			return result;
+		}
+	}
+
+	private Predicate toFilterPredicate(EffectivePerson effectivePerson, Business business, Wi wi) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(Message.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Tuple> cq = cb.createQuery(Tuple.class);
+		Root<Message> root = cq.from(Message.class);
+		Predicate p = cb.conjunction();
+
+		if(StringUtils.isNotEmpty(wi.getPerson())){
+			p = cb.and(p, cb.equal(root.get(Message_.person), wi.getPerson()));
+		}
+
+		if(StringUtils.isNotEmpty(wi.getType())){
+			p = cb.and(p, cb.equal(root.get(Message_.type), wi.getType()));
+		}
+
+		if(StringUtils.isNotEmpty(wi.getConsume())){
+			p = cb.and(p, cb.equal(root.get(Message_.consumer), wi.getConsume()));
+		}
+
+		if (DateTools.isDateTimeOrDate(wi.getStartTime())) {
+			p = cb.and(p, cb.greaterThan(root.get(Message_.createTime), DateTools.parse(wi.getStartTime())));
+		}
+		if (DateTools.isDateTimeOrDate(wi.getEndTime())) {
+			p = cb.and(p, cb.lessThan(root.get(Message_.createTime), DateTools.parse(wi.getEndTime())));
+		}
+		return p;
+	}
+
+	public class Wi extends GsonPropertyObject {
+
+		@FieldDescribe("用户")
+		private String person;
+
+		@FieldDescribe("消息类型.")
+		private String type;
+
+		@FieldDescribe("消费者")
+		private String consume;
+
+		@FieldDescribe("开始时间yyyy-MM-dd HH:mm:ss")
+		private String startTime;
+
+		@FieldDescribe("结束时间yyyy-MM-dd HH:mm:ss")
+		private String endTime;
+
+		public String getPerson() {
+			return person;
+		}
+
+		public void setPerson(String person) {
+			this.person = person;
+		}
+
+		public String getType() {
+			return type;
+		}
+
+		public void setType(String type) {
+			this.type = type;
+		}
+
+		public String getConsume() {
+			return consume;
+		}
+
+		public void setConsume(String consume) {
+			this.consume = consume;
+		}
+
+		public String getStartTime() {
+			return startTime;
+		}
+
+		public void setStartTime(String startTime) {
+			this.startTime = startTime;
+		}
+
+		public String getEndTime() {
+			return endTime;
+		}
+
+		public void setEndTime(String endTime) {
+			this.endTime = endTime;
+		}
+	}
+
+	public static class Wo extends Message {
+
+		private static final long serialVersionUID = 681982898431236763L;
+		static WrapCopier<Message, Wo> copier = WrapCopierFactory.wo(Message.class, Wo.class, null,
+				JpaObject.FieldsInvisible);
+	}
+
+}

+ 24 - 5
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/jaxrs/message/MessageAction.java

@@ -1,10 +1,7 @@
 package com.x.message.assemble.communicate.jaxrs.message;
 
 import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
+import javax.ws.rs.*;
 import javax.ws.rs.container.AsyncResponse;
 import javax.ws.rs.container.Suspended;
 import javax.ws.rs.core.Context;
@@ -13,6 +10,7 @@ import javax.ws.rs.core.MediaType;
 import com.google.gson.JsonElement;
 import com.x.base.core.project.annotation.JaxrsDescribe;
 import com.x.base.core.project.annotation.JaxrsMethodDescribe;
+import com.x.base.core.project.annotation.JaxrsParameterDescribe;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.http.HttpMediaType;
@@ -21,6 +19,8 @@ import com.x.base.core.project.jaxrs.StandardJaxrsAction;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 
+import java.util.List;
+
 @Path("message")
 @JaxrsDescribe("消息")
 public class MessageAction extends StandardJaxrsAction {
@@ -45,4 +45,23 @@ public class MessageAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-}
+	@JaxrsMethodDescribe(value = "消息分页查询.", action = ActionListPaging.class)
+	@POST
+	@Path("list/paging/{page}/size/{size}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void listPaging(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+						   @JaxrsParameterDescribe("分页") @PathParam("page") Integer page,
+						   @JaxrsParameterDescribe("每页数量") @PathParam("size") Integer size, JsonElement jsonElement) {
+		ActionResult<List<ActionListPaging.Wo>> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionListPaging().execute(effectivePerson, page, size, jsonElement);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, jsonElement);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+	}
+
+}