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

Merge branch 'fix/meeting0805' into 'develop'

会议管理增加查询分页功能

See merge request o2oa/o2oa!1353
o2null 5 лет назад
Родитель
Сommit
9d5e5cca58

+ 301 - 0
o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/ActionPaging.java

@@ -0,0 +1,301 @@
+package com.x.meeting.assemble.control.jaxrs.meeting;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Order;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.apache.commons.lang3.StringUtils;
+
+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.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.tools.SortTools;
+import com.x.meeting.assemble.control.Business;
+import com.x.meeting.assemble.control.WrapTools;
+import com.x.meeting.assemble.control.wrapout.WrapOutMeeting;
+import com.x.meeting.core.entity.ConfirmStatus;
+import com.x.meeting.core.entity.Meeting;
+import com.x.meeting.core.entity.Meeting_;
+
+class ActionPaging extends BaseAction {
+	Logger logger = LoggerFactory.getLogger(ActionPaging.class);
+	
+	ActionResult<List<Wo>> execute(EffectivePerson effectivePerson,Integer page , Integer size, JsonElement jsonElement) throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			ActionResult<List<Wo>> result = new ActionResult<>();
+			Wi wi = this.convertToWrapIn(jsonElement, Wi.class);
+			
+			Business business = new Business(emc);
+			List<String> ids = new ArrayList<>();
+			
+			EntityManager em = emc.get(Meeting.class);
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			
+			CriteriaQuery<String> cq = cb.createQuery(String.class);
+			Root<Meeting> root = cq.from(Meeting.class);
+			
+			Predicate p = cb.equal(root.get(Meeting_.applicant), effectivePerson.getDistinguishedName());
+			
+			p = cb.or(p, cb.isMember(effectivePerson.getDistinguishedName(),root.get(Meeting_.invitePersonList)));
+			
+			if(!StringUtils.isBlank(wi.getSubject())) {
+				p = cb.and(p, cb.like(root.get(Meeting_.subject), "%" + wi.getSubject() + "%"));
+			}
+			
+			if(!StringUtils.isBlank(wi.getRoom())) {
+				p = cb.and(p, cb.equal(root.get(Meeting_.room), wi.getRoom()));
+			}
+		   
+			if(!StringUtils.isBlank(wi.getMeetingStatus())) {
+				String meetingStatus = wi.getMeetingStatus();
+				
+				if(meetingStatus.equalsIgnoreCase("completed")) {
+					p = cb.and(p, cb.or(cb.lessThan(root.get(Meeting_.completedTime), new Date()),
+							cb.equal(root.get(Meeting_.manualCompleted), true)));
+				}
+				
+	            if(meetingStatus.equalsIgnoreCase("processing")) {
+	            	Date date = new Date();
+	            	p = cb.and(p, cb.notEqual(root.get(Meeting_.manualCompleted), true));
+	        		p = cb.and(p, cb.lessThanOrEqualTo(root.get(Meeting_.startTime), date));
+	        		p = cb.and(p, cb.greaterThanOrEqualTo(root.get(Meeting_.completedTime), date));
+				}
+	
+                 if(meetingStatus.equalsIgnoreCase("wait")) {
+                	 p = cb.and(p, cb.notEqual(root.get(Meeting_.manualCompleted), true));
+             		 p = cb.and(p, cb.greaterThan(root.get(Meeting_.startTime), new Date()));
+				 }
+				
+			}else {
+				if(wi.getStartTime() != null) {
+				   p = cb.and(p, cb.greaterThanOrEqualTo(root.get(Meeting_.startTime), wi.getStartTime()));
+				}
+				
+				if(wi.getCompletedTime()!= null) {
+				   p = cb.and(p, cb.lessThanOrEqualTo(root.get(Meeting_.completedTime), wi.getCompletedTime()));
+				}
+			}
+			
+			if(!StringUtils.isBlank(wi.getConfirmStatus())) {
+		    	p = cb.and(p, cb.equal(root.get(Meeting_.confirmStatus), ConfirmStatus.valueOf(wi.getConfirmStatus().trim())));
+			}
+			
+			if(!StringUtils.isBlank(wi.getInvitePersonList())) {
+				p = cb.and(p, cb.isMember( wi.getInvitePersonList().trim(),root.get(Meeting_.invitePersonList)));
+			 }
+			
+			if(!StringUtils.isBlank(wi.getAcceptPersonList())) {
+				p = cb.and(p, cb.isMember( wi.getAcceptPersonList().trim(),root.get(Meeting_.acceptPersonList)));
+			 }
+			
+			if(!StringUtils.isBlank(wi.getCheckinPersonList())) {
+				p = cb.and(p, cb.isMember( wi.getCheckinPersonList().trim(),root.get(Meeting_.checkinPersonList)));
+			 }
+			
+			if(wi.getManualCompleted() != null) {
+				p = cb.and(p, cb.equal(root.get(Meeting_.manualCompleted), wi.getManualCompleted()));
+			}
+			
+	        Order order;
+	        String  sortField = wi.getSortField();
+	        String  sortType = wi.getSortType();
+
+	        if(!StringUtils.isBlank(sortField)) {
+		        if(sortType.equalsIgnoreCase("asc")) {
+		             order =  cb.asc(root.get(sortField));
+		        }else {
+		        	 order =  cb.desc(root.get(sortField));
+		        }
+	        }else {
+	        	   order =  cb.desc(root.get("startTime"));
+	        }
+	        
+			cq.select(root.get(Meeting_.id)).where(p).orderBy(order);
+		
+			 TypedQuery<String> typedQuery = em.createQuery(cq);
+			 int pageIndex = (page-1)*size;
+			 int pageSize = page*size;
+			 typedQuery.setFirstResult(pageIndex);
+			 typedQuery.setMaxResults(pageSize);
+			    
+			 //logger.info("typedQuery="+  typedQuery.toString()); 
+			 ids =  typedQuery.getResultList();
+			
+			 CriteriaQuery<Long> cqCount = cb.createQuery(Long.class);
+			 Root<Meeting> rootCount = cqCount.from(Meeting.class);
+			 cqCount.select(cb.countDistinct(rootCount)).where(p);
+			 Long count = em.createQuery(cqCount).getSingleResult().longValue();
+			 //logger.info("count="+  count); 
+			 
+			List<Wo> wos = Wo.copier.copy(emc.list(Meeting.class, ids));
+			WrapTools.decorate(business, wos, effectivePerson);
+			WrapTools.setAttachment(business, wos);
+			SortTools.desc(wos, Meeting.startTime_FIELDNAME);
+			result.setData(wos);
+			result.setCount(count);
+			return result;
+		}
+	}
+
+
+	
+	public static class Wo extends WrapOutMeeting {
+		private static final long serialVersionUID = 4609263020989488356L;
+		public static WrapCopier<Meeting, Wo> copier = WrapCopierFactory.wo(Meeting.class, Wo.class, null,
+				JpaObject.FieldsInvisible);
+	}
+
+    public static class Wi  {
+    	
+    	@FieldDescribe("标题.")
+    	private String subject;
+    	
+		@FieldDescribe("所属楼层.")
+		private String room;
+		
+		@FieldDescribe("开始时间.")
+		private Date startTime;
+		
+		@FieldDescribe("结束时间.")
+		private Date completedTime;
+		
+		@FieldDescribe("会议预定状态.(allow|deny|wait)")
+		private String confirmStatus;
+		
+		@FieldDescribe("邀请人员,身份,组织.")
+		private String invitePersonList;
+		
+		@FieldDescribe("接受人员.")
+		private String acceptPersonList;
+		
+		@FieldDescribe("签到人员.")
+		private String checkinPersonList;
+		
+		@FieldDescribe("会议是否手工结束.(true|false)")
+		private Boolean manualCompleted;
+		
+		@FieldDescribe("会议当前状态.(wait|processing|completed)")
+		private String meetingStatus;
+		
+		@FieldDescribe("排序字段.(startTime|completedTime|room)")
+		private String sortField;
+		
+		@FieldDescribe("排序.(desc|asc)")
+		private String sortType;
+		
+		
+		public String getSubject() {
+			return subject;
+		}
+
+		public void setSubject(String subject) {
+			this.subject = subject;
+		}
+
+		public String getConfirmStatus() {
+			return confirmStatus;
+		}
+
+		public void setConfirmStatus(String confirmStatus) {
+			this.confirmStatus = confirmStatus;
+		}
+
+		public String getRoom() {
+			return room;
+		}
+
+		public void setRoom(String room) {
+			this.room = room;
+		}
+
+		public Date getStartTime() {
+			return startTime;
+		}
+
+		public void setStartTime(Date startTime) {
+			this.startTime = startTime;
+		}
+
+		public Date getCompletedTime() {
+			return completedTime;
+		}
+
+		public void setCompletedTime(Date completedTime) {
+			this.completedTime = completedTime;
+		}
+
+		public String getInvitePersonList() {
+			return invitePersonList;
+		}
+
+		public void setInvitePersonList(String invitePersonList) {
+			this.invitePersonList = invitePersonList;
+		}
+
+		public String getAcceptPersonList() {
+			return acceptPersonList;
+		}
+
+		public void setAcceptPersonList(String acceptPersonList) {
+			this.acceptPersonList = acceptPersonList;
+		}
+
+		public String getCheckinPersonList() {
+			return checkinPersonList;
+		}
+
+		public void setCheckinPersonList(String checkinPersonList) {
+			this.checkinPersonList = checkinPersonList;
+		}
+
+		public Boolean getManualCompleted() {
+			return manualCompleted;
+		}
+
+		public void setManualCompleted(Boolean manualCompleted) {
+			this.manualCompleted = manualCompleted;
+		}
+
+		public String getMeetingStatus() {
+			return meetingStatus;
+		}
+
+		public void setMeetingStatus(String meetingStatus) {
+			this.meetingStatus = meetingStatus;
+		}
+
+		public String getSortField() {
+			return sortField;
+		}
+
+		public void setSortField(String sortField) {
+			this.sortField = sortField;
+		}
+
+		public String getSortType() {
+			return sortType;
+		}
+
+		public void setSortType(String sortType) {
+			this.sortType = sortType;
+		}
+		
+			
+	}
+}

+ 316 - 0
o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/ActionPagingManage.java

@@ -0,0 +1,316 @@
+package com.x.meeting.assemble.control.jaxrs.meeting;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Order;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.apache.commons.lang3.StringUtils;
+
+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.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.tools.SortTools;
+import com.x.meeting.assemble.control.Business;
+import com.x.meeting.assemble.control.WrapTools;
+import com.x.meeting.assemble.control.jaxrs.meeting.ActionPaging.Wo;
+import com.x.meeting.assemble.control.wrapout.WrapOutMeeting;
+import com.x.meeting.core.entity.ConfirmStatus;
+import com.x.meeting.core.entity.Meeting;
+import com.x.meeting.core.entity.Meeting_;
+
+class ActionPagingManage extends BaseAction {
+	Logger logger = LoggerFactory.getLogger(ActionPagingManage.class);
+	
+	ActionResult<List<Wo>> execute(EffectivePerson effectivePerson,Integer page , Integer size, JsonElement jsonElement) throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			ActionResult<List<Wo>> result = new ActionResult<>();
+			Wi wi = this.convertToWrapIn(jsonElement, Wi.class);
+			
+			Business business = new Business(emc);
+			List<String> ids = new ArrayList<>();
+			
+			EntityManager em = emc.get(Meeting.class);
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			
+			CriteriaQuery<String> cq = cb.createQuery(String.class);
+			Root<Meeting> root = cq.from(Meeting.class);
+			
+			if (StringUtils.isBlank(wi.getDistinguishedName())) {
+				throw new ExceptionDistinguishedNameEmpty();
+			}
+			
+			Predicate p = cb.equal(root.get(Meeting_.applicant), wi.getDistinguishedName());
+			
+			if(!StringUtils.isBlank(wi.getSubject())) {
+				p = cb.and(p, cb.like(root.get(Meeting_.subject), "%" + wi.getSubject() + "%"));
+			}
+			
+			if(!StringUtils.isBlank(wi.getRoom())) {
+				p = cb.and(p, cb.equal(root.get(Meeting_.room), wi.getRoom()));
+			}
+		   
+			if(!StringUtils.isBlank(wi.getMeetingStatus())) {
+				String meetingStatus = wi.getMeetingStatus();
+				
+				if(meetingStatus.equalsIgnoreCase("completed")) {
+					p = cb.and(p, cb.or(cb.lessThan(root.get(Meeting_.completedTime), new Date()),
+							cb.equal(root.get(Meeting_.manualCompleted), true)));
+				}
+				
+	            if(meetingStatus.equalsIgnoreCase("processing")) {
+	            	Date date = new Date();
+	            	p = cb.and(p, cb.notEqual(root.get(Meeting_.manualCompleted), true));
+	        		p = cb.and(p, cb.lessThanOrEqualTo(root.get(Meeting_.startTime), date));
+	        		p = cb.and(p, cb.greaterThanOrEqualTo(root.get(Meeting_.completedTime), date));
+				}
+	
+                 if(meetingStatus.equalsIgnoreCase("wait")) {
+                	 p = cb.and(p, cb.notEqual(root.get(Meeting_.manualCompleted), true));
+             		 p = cb.and(p, cb.greaterThan(root.get(Meeting_.startTime), new Date()));
+				 }
+				
+			}else {
+				if(wi.getStartTime() != null) {
+				   p = cb.and(p, cb.greaterThanOrEqualTo(root.get(Meeting_.startTime), wi.getStartTime()));
+				}
+				
+				if(wi.getCompletedTime()!= null) {
+				   p = cb.and(p, cb.lessThanOrEqualTo(root.get(Meeting_.completedTime), wi.getCompletedTime()));
+				}
+			}
+			
+			if(!StringUtils.isBlank(wi.getConfirmStatus())) {
+		    	p = cb.and(p, cb.equal(root.get(Meeting_.confirmStatus), ConfirmStatus.valueOf(wi.getConfirmStatus().trim())));
+			}
+			
+			if(!StringUtils.isBlank(wi.getInvitePersonList())) {
+				p = cb.and(p, cb.isMember( wi.getInvitePersonList().trim(),root.get(Meeting_.invitePersonList)));
+			 }
+			
+			if(!StringUtils.isBlank(wi.getAcceptPersonList())) {
+				p = cb.and(p, cb.isMember( wi.getAcceptPersonList().trim(),root.get(Meeting_.acceptPersonList)));
+			 }
+			
+			if(!StringUtils.isBlank(wi.getCheckinPersonList())) {
+				p = cb.and(p, cb.isMember( wi.getCheckinPersonList().trim(),root.get(Meeting_.checkinPersonList)));
+			 }
+			
+			if(wi.getManualCompleted() != null) {
+				p = cb.and(p, cb.equal(root.get(Meeting_.manualCompleted), wi.getManualCompleted()));
+			}
+			
+	        Order order;
+	        String  sortField = wi.getSortField();
+	        String  sortType = wi.getSortType();
+
+	        if(!StringUtils.isBlank(sortField)) {
+		        if(sortType.equalsIgnoreCase("asc")) {
+		             order =  cb.asc(root.get(sortField));
+		        }else {
+		        	 order =  cb.desc(root.get(sortField));
+		        }
+	        }else {
+	        	   order =  cb.desc(root.get("startTime"));
+	        }
+	        
+			cq.select(root.get(Meeting_.id)).where(p).orderBy(order);
+		
+			 TypedQuery<String> typedQuery = em.createQuery(cq);
+			 int pageIndex = (page-1)*size;
+			 int pageSize = page*size;
+			 typedQuery.setFirstResult(pageIndex);
+			 typedQuery.setMaxResults(pageSize);
+			    
+			 //logger.info("typedQuery="+  typedQuery.toString()); 
+			 ids =  typedQuery.getResultList();
+			
+			 CriteriaQuery<Long> cqCount = cb.createQuery(Long.class);
+			 Root<Meeting> rootCount = cqCount.from(Meeting.class);
+			 cqCount.select(cb.countDistinct(rootCount)).where(p);
+			 Long count = em.createQuery(cqCount).getSingleResult().longValue();
+			// logger.info("count="+  count); 
+			 
+			List<Wo> wos = Wo.copier.copy(emc.list(Meeting.class, ids));
+			WrapTools.decorate(business, wos, effectivePerson);
+			WrapTools.setAttachment(business, wos);
+			SortTools.desc(wos, Meeting.startTime_FIELDNAME);
+			result.setData(wos);
+			result.setCount(count);
+			return result;
+		
+		}
+	}
+
+
+	
+	public static class Wo extends WrapOutMeeting {
+		private static final long serialVersionUID = 4609263020989488356L;
+		public static WrapCopier<Meeting, Wo> copier = WrapCopierFactory.wo(Meeting.class, Wo.class, null,
+				JpaObject.FieldsInvisible);
+	}
+
+    public static class Wi  {
+    	
+    	@FieldDescribe("用户的全称")
+    	private String distinguishedName;
+	
+		@FieldDescribe("标题.")
+    	private String subject;
+    	
+		@FieldDescribe("所属楼层.")
+		private String room;
+		
+		@FieldDescribe("开始时间.")
+		private Date startTime;
+		
+		@FieldDescribe("结束时间.")
+		private Date completedTime;
+		
+		@FieldDescribe("会议预定状态.(allow|deny|wait)")
+		private String confirmStatus;
+		
+		@FieldDescribe("邀请人员,身份,组织.")
+		private String invitePersonList;
+		
+		@FieldDescribe("接受人员.")
+		private String acceptPersonList;
+		
+		@FieldDescribe("签到人员.")
+		private String checkinPersonList;
+		
+		@FieldDescribe("会议是否手工结束.(true|false)")
+		private Boolean manualCompleted;
+		
+		@FieldDescribe("会议当前状态.(wait|processing|completed)")
+		private String meetingStatus;
+		
+		@FieldDescribe("排序字段.(startTime|completedTime|room)")
+		private String sortField;
+		
+		@FieldDescribe("排序.(desc|asc)")
+		private String sortType;
+		
+		
+		public String getDistinguishedName() {
+			return distinguishedName;
+		}
+
+		public void setDistinguishedName(String distinguishedName) {
+			this.distinguishedName = distinguishedName;
+		}
+		
+		public String getSubject() {
+			return subject;
+		}
+
+		public void setSubject(String subject) {
+			this.subject = subject;
+		}
+
+		public String getConfirmStatus() {
+			return confirmStatus;
+		}
+
+		public void setConfirmStatus(String confirmStatus) {
+			this.confirmStatus = confirmStatus;
+		}
+
+		public String getRoom() {
+			return room;
+		}
+
+		public void setRoom(String room) {
+			this.room = room;
+		}
+
+		public Date getStartTime() {
+			return startTime;
+		}
+
+		public void setStartTime(Date startTime) {
+			this.startTime = startTime;
+		}
+
+		public Date getCompletedTime() {
+			return completedTime;
+		}
+
+		public void setCompletedTime(Date completedTime) {
+			this.completedTime = completedTime;
+		}
+
+		public String getInvitePersonList() {
+			return invitePersonList;
+		}
+
+		public void setInvitePersonList(String invitePersonList) {
+			this.invitePersonList = invitePersonList;
+		}
+
+		public String getAcceptPersonList() {
+			return acceptPersonList;
+		}
+
+		public void setAcceptPersonList(String acceptPersonList) {
+			this.acceptPersonList = acceptPersonList;
+		}
+
+		public String getCheckinPersonList() {
+			return checkinPersonList;
+		}
+
+		public void setCheckinPersonList(String checkinPersonList) {
+			this.checkinPersonList = checkinPersonList;
+		}
+
+		public Boolean getManualCompleted() {
+			return manualCompleted;
+		}
+
+		public void setManualCompleted(Boolean manualCompleted) {
+			this.manualCompleted = manualCompleted;
+		}
+
+		public String getMeetingStatus() {
+			return meetingStatus;
+		}
+
+		public void setMeetingStatus(String meetingStatus) {
+			this.meetingStatus = meetingStatus;
+		}
+
+		public String getSortField() {
+			return sortField;
+		}
+
+		public void setSortField(String sortField) {
+			this.sortField = sortField;
+		}
+
+		public String getSortType() {
+			return sortType;
+		}
+
+		public void setSortType(String sortType) {
+			this.sortType = sortType;
+		}
+		
+			
+	}
+}

+ 12 - 0
o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/ExceptionDistinguishedNameEmpty.java

@@ -0,0 +1,12 @@
+package com.x.meeting.assemble.control.jaxrs.meeting;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ExceptionDistinguishedNameEmpty extends PromptException {
+
+	private static final long serialVersionUID = 4132300948670472899L;
+
+	ExceptionDistinguishedNameEmpty() {
+		super("DistinguishedName is empty.");
+	}
+}

+ 36 - 0
o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/MeetingAction.java

@@ -320,6 +320,42 @@ public class MeetingAction extends BaseAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
+	@JaxrsMethodDescribe(value = "普通用户,分页列示Meeing对象", action = ActionPaging.class)
+	@POST
+	@Path("list/{page}/size/{size}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void listMeetingPaging(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@PathParam("page") Integer page , @PathParam("size") Integer size, JsonElement jsonElement) {
+		ActionResult<List<ActionPaging.Wo>> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionPaging().execute(effectivePerson, page, size, jsonElement);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+	@JaxrsMethodDescribe(value = "管理员,分页列示Meeing对象", action = ActionPagingManage.class)
+	@POST
+	@Path("list/{page}/size/{size}/manage")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void listMeetingPagingManage(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@PathParam("page") Integer page , @PathParam("size") Integer size , JsonElement jsonElement) {
+		ActionResult<List<ActionPagingManage.Wo>> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionPagingManage().execute(effectivePerson, page, size, jsonElement);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
 	@JaxrsMethodDescribe(value = "列示我参与从当前日期开始指定月份范围的会议,或者被邀请,或者是申请人,或者是审核人,管理员可以看到所有.", action = ActionListComingMonth.class)
 	@GET
 	@Path("list/coming/month/{count}")