Explorar o código

增加用户分页查询接口、增加数据中心查询用户和组织数据的能力

o2sword %!s(int64=5) %!d(string=hai) anos
pai
achega
44ee33bbf0

+ 1 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_query_assemble_designer.java

@@ -18,6 +18,7 @@ import com.x.base.core.project.annotation.ModuleType;
 		"com.x.processplatform.core.entity.content.ReadCompleted","com.x.processplatform.core.entity.element.Process",
 		"com.x.processplatform.core.entity.content.Attachment", "com.x.cms.core.entity.Document",
 		"com.x.cms.core.entity.AppInfo", "com.x.cms.core.entity.CategoryInfo", "com.x.cms.core.entity.Review",
+		"com.x.organization.core.entity.Person", "com.x.organization.core.entity.Unit", "com.x.organization.core.entity.Group",
 		"com.x.query.dynamic.entity.*" }, storageTypes = { StorageType.processPlatform }, storeJars = {
 				"x_query_core_entity", "x_organization_core_entity", "x_organization_core_express",
 				"x_processplatform_core_entity", "x_cms_core_entity",

+ 1 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_query_assemble_surface.java

@@ -19,6 +19,7 @@ import com.x.base.core.project.annotation.ModuleType;
 		"com.x.processplatform.core.entity.content.WorkCompleted","com.x.processplatform.core.entity.element.Process",
 		"com.x.processplatform.core.entity.content.Attachment", "com.x.cms.core.entity.Document",
 		"com.x.cms.core.entity.Review", "com.x.cms.core.entity.AppInfo", "com.x.cms.core.entity.CategoryInfo",
+		"com.x.organization.core.entity.Person", "com.x.organization.core.entity.Unit", "com.x.organization.core.entity.Group",
 		"com.x.query.dynamic.entity.*" }, storageTypes = { StorageType.processPlatform, StorageType.cms }, storeJars = {
 				"x_query_core_entity", "x_organization_core_entity", "x_organization_core_express",
 				"x_processplatform_core_entity", "x_cms_core_entity",

+ 121 - 0
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/person/ActionListFilterPaging.java

@@ -0,0 +1,121 @@
+package com.x.organization.assemble.express.jaxrs.person;
+
+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.StringTools;
+import com.x.organization.assemble.express.Business;
+import com.x.organization.core.entity.Person;
+import com.x.organization.core.entity.Person_;
+import org.apache.commons.lang3.StringUtils;
+
+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 ActionListFilterPaging 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(business, wi);
+			List<Wo> wos = emc.fetchAscPaging(Person.class, Wo.copier, p, page, size, Person.pinyin_FIELDNAME);
+
+			result.setData(wos);
+			result.setCount(emc.count(Person.class, p));
+			return result;
+		}
+	}
+
+	private Predicate toFilterPredicate(Business business,  Wi wi) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(Person.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Person> cq = cb.createQuery(Person.class);
+		Root<Person> root = cq.from(Person.class);
+		Predicate p = cb.conjunction();
+		if (StringUtils.isNotBlank(wi.getEmployee())) {
+			p = cb.and(p, cb.equal(root.get(Person_.employee), wi.getEmployee()));
+		}
+		if (StringUtils.isNotBlank(wi.getMobile())) {
+			p = cb.and(p, cb.equal(root.get(Person_.mobile), wi.getMobile()));
+		}
+		if (StringUtils.isNotBlank(wi.getUnique())) {
+			p = cb.and(p, cb.equal(root.get(Person_.unique), wi.getUnique()));
+		}
+		if (StringUtils.isNoneBlank(wi.getName())) {
+			String key = StringTools.escapeSqlLikeKey(wi.getName());
+			p = cb.and(p, cb.like(root.get(Person_.name), "%" + key + "%", StringTools.SQL_ESCAPE_CHAR));
+		}
+
+		return p;
+	}
+
+	public class Wi extends GsonPropertyObject {
+
+		private static final long serialVersionUID = -2991229948693512630L;
+
+		@FieldDescribe("名称")
+		private String name;
+
+		@FieldDescribe("工号")
+		private String employee;
+
+		@FieldDescribe("唯一标识")
+		private String unique;
+
+		@FieldDescribe("手机号.")
+		private String mobile;
+
+		public String getName() {
+			return name;
+		}
+
+		public void setName(String name) {
+			this.name = name;
+		}
+
+		public String getEmployee() {
+			return employee;
+		}
+
+		public void setEmployee(String employee) {
+			this.employee = employee;
+		}
+
+		public String getUnique() {
+			return unique;
+		}
+
+		public void setUnique(String unique) {
+			this.unique = unique;
+		}
+
+		public String getMobile() {
+			return mobile;
+		}
+
+		public void setMobile(String mobile) {
+			this.mobile = mobile;
+		}
+	}
+
+	public static class Wo extends Person {
+
+		private static final long serialVersionUID = 1847108296662273067L;
+
+		static WrapCopier<Person, Wo> copier = WrapCopierFactory.wo(Person.class, Wo.class,
+				JpaObject.singularAttributeField(Person.class, true, true), null);
+
+	}
+}

+ 22 - 6
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/person/PersonAction.java

@@ -3,11 +3,7 @@ package com.x.organization.assemble.express.jaxrs.person;
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-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;
@@ -16,6 +12,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;
@@ -622,4 +619,23 @@ public class PersonAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-}
+	@JaxrsMethodDescribe(value = "分页查询用户信息.", action = ActionListFilterPaging.class)
+	@POST
+	@Path("list/filter/{page}/size/{size}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void listFilterPaging(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+								   @JaxrsParameterDescribe("分页") @PathParam("page") Integer page,
+								   @JaxrsParameterDescribe("数量") @PathParam("size") Integer size, JsonElement jsonElement) {
+		ActionResult<List<ActionListFilterPaging.Wo>> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionListFilterPaging().execute(effectivePerson, page, size, jsonElement);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, jsonElement);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
+}