Преглед изворни кода

添加一个消息查询接口

fancy пре 5 година
родитељ
комит
af1d587c33

+ 58 - 0
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/jaxrs/instant/ActionListWithCurrentPersonWithoutIMDesc.java

@@ -0,0 +1,58 @@
+package com.x.message.assemble.communicate.jaxrs.instant;
+
+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.bean.WrapCopier;
+import com.x.base.core.project.bean.WrapCopierFactory;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.message.MessageConnector;
+import com.x.message.assemble.communicate.Business;
+import com.x.message.core.entity.Instant;
+import com.x.message.core.entity.Instant_;
+import org.apache.commons.lang3.math.NumberUtils;
+
+import javax.persistence.EntityManager;
+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 ActionListWithCurrentPersonWithoutIMDesc extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionListWithCurrentPersonWithoutIMDesc.class);
+
+	ActionResult<List<Wo>> execute(EffectivePerson effectivePerson, Integer count) throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			Business business = new Business(emc);
+			ActionResult<List<Wo>> result = new ActionResult<>();
+			List<Wo> wos = this.list(business, NumberUtils.min(200, NumberUtils.max(1, count)), effectivePerson);
+			result.setData(wos);
+			return result;
+		}
+	}
+
+	private List<Wo> list(Business business, Integer count, EffectivePerson effectivePerson) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(Instant.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Instant> cq = cb.createQuery(Instant.class);
+		Root<Instant> root = cq.from(Instant.class);
+		Predicate p = cb.equal(root.get(Instant_.person), effectivePerson.getDistinguishedName());
+		p = cb.and(p, cb.notEqual(root.get(Instant_.type), MessageConnector.TYPE_IM_CREATE));
+		List<Instant> os = em.createQuery(cq.select(root).where(p).orderBy(cb.desc(root.get(Instant_.createTime))))
+				.setMaxResults(count).getResultList();
+		return Wo.copier.copy(os);
+	}
+
+	public static class Wo extends Instant {
+
+		private static final long serialVersionUID = 681982898431236763L;
+		static WrapCopier<Instant, Wo> copier = WrapCopierFactory.wo(Instant.class, Wo.class, null,
+				JpaObject.FieldsInvisible);
+	}
+
+}

+ 18 - 0
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/jaxrs/instant/InstantAction.java

@@ -88,6 +88,24 @@ public class InstantAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
+	@JaxrsMethodDescribe(value = "获取当前人员的主体消息,排除IM消息,倒序.", action = ActionListWithCurrentPersonWithoutIMDesc.class)
+	@GET
+	@Path("list/currentperson/noim/count/{count}/desc")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void listWithCurrentPersonWithoutIMDesc(@Suspended final AsyncResponse asyncResponse,
+										  @Context HttpServletRequest request, @JaxrsParameterDescribe("数量") @PathParam("count") Integer count) {
+		ActionResult<List<ActionListWithCurrentPersonWithoutIMDesc.Wo>> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionListWithCurrentPersonWithoutIMDesc().execute(effectivePerson, count);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
 	@JaxrsMethodDescribe(value = "获取当前人员的主体消息,顺序.", action = ActionListWithCurrentPersonAsc.class)
 	@GET
 	@Path("list/currentperson/count/{count}/asc")