From aafe9d4591c2e098c7b02177f959d612240b52e7 Mon Sep 17 00:00:00 2001 From: o2wwx <95523761@qq.com> Date: Mon, 10 Aug 2020 17:26:47 +0800 Subject: [PATCH] =?UTF-8?q?'=E4=BF=AE=E6=94=B9=E4=BA=86=E4=BC=9A=E8=AE=AE?= =?UTF-8?q?=E5=AE=A4=E5=88=86=E9=A1=B5bug,=E4=BF=AE=E6=94=B9=E4=BA=86?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BC=9A=E8=AE=AE=E5=AE=A4=E9=A2=84=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E9=97=B4bug'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ActionListWithStartCompletedRoom.java | 55 +++++++++++++++++++ .../jaxrs/building/BuildingAction.java | 19 +++++++ .../control/jaxrs/meeting/ActionPaging.java | 36 +++++++----- .../jaxrs/meeting/ActionPagingManage.java | 33 ++++++----- 4 files changed, 113 insertions(+), 30 deletions(-) create mode 100644 o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/building/ActionListWithStartCompletedRoom.java diff --git a/o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/building/ActionListWithStartCompletedRoom.java b/o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/building/ActionListWithStartCompletedRoom.java new file mode 100644 index 0000000000..d02059ce6b --- /dev/null +++ b/o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/building/ActionListWithStartCompletedRoom.java @@ -0,0 +1,55 @@ +package com.x.meeting.assemble.control.jaxrs.building; + +import java.util.Date; +import java.util.List; + +import com.x.base.core.container.EntityManagerContainer; +import com.x.base.core.container.factory.EntityManagerContainerFactory; +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.tools.DateTools; +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.WrapOutBuilding; +import com.x.meeting.assemble.control.wrapout.WrapOutRoom; +import com.x.meeting.core.entity.Building; + +class ActionListWithStartCompletedRoom extends BaseAction { + + ActionResult> execute(EffectivePerson effectivePerson, String start, String completed,String currentRoom,String meetingId) throws Exception { + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + ActionResult> result = new ActionResult<>(); + Business business = new Business(emc); + Date startTime = DateTools.parse(start, DateTools.format_yyyyMMdd + " " + DateTools.format_HHmm); + Date completedTime = DateTools.parse(completed, DateTools.format_yyyyMMdd + " " + DateTools.format_HHmm); + List ids = business.building().list(); + List wos = Wo.copier.copy(emc.list(Building.class, ids)); + WrapTools.setRoom(business, wos); + for (WrapOutBuilding wo : wos) { + WrapTools.setFutureMeeting(business, wo.getRoomList(), true); + for (WrapOutRoom room : wo.getRoomList()) { + if( currentRoom.equalsIgnoreCase(room.getId())) { + room.setIdle(business.room().checkIdle(room.getId(), startTime, completedTime, meetingId)); + }else { + WrapTools.checkRoomIdle(business, room, startTime, completedTime); + } + } + } + SortTools.asc(wos, false, Building.name_FIELDNAME); + result.setData(wos); + return result; + } + } + + public static class Wo extends WrapOutBuilding { + + private static final long serialVersionUID = 4609263020989488356L; + public static WrapCopier copier = WrapCopierFactory.wo(Building.class, Wo.class, null, + Wo.Excludes); + + } + +} diff --git a/o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/building/BuildingAction.java b/o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/building/BuildingAction.java index 5cdc00a7c2..27b7f1eaac 100644 --- a/o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/building/BuildingAction.java +++ b/o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/building/BuildingAction.java @@ -87,6 +87,25 @@ public class BuildingAction extends StandardJaxrsAction { asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); } + @JaxrsMethodDescribe(value = "列示在所有building和下属的room,和room下面将来的会议,同时判断在指定时间内room是否空闲,用于修改当前预定会议时间", action = ActionListWithStartCompleted.class) + @GET + @Path("list/start/{start}/completed/{completed}/room/{room}/meeting/{meeting}") + @Produces(HttpMediaType.APPLICATION_JSON_UTF_8) + @Consumes(MediaType.APPLICATION_JSON) + public void listWithStartCompletedRoom(@Suspended final AsyncResponse asyncResponse, + @Context HttpServletRequest request, @PathParam("start") String start, + @PathParam("completed") String completed , @PathParam("room") String room , @PathParam("meeting") String meetingId) { + ActionResult> result = new ActionResult<>(); + EffectivePerson effectivePerson = this.effectivePerson(request); + try { + result = new ActionListWithStartCompletedRoom().execute(effectivePerson, start, completed,room,meetingId); + } catch (Exception e) { + logger.error(e, effectivePerson, request, null); + result.error(e); + } + asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); + } + @JaxrsMethodDescribe(value = "创建Building.", action = ActionCreate.class) @POST @Produces(HttpMediaType.APPLICATION_JSON_UTF_8) diff --git a/o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/ActionPaging.java b/o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/ActionPaging.java index 4ab816c23f..f4b78cb101 100644 --- a/o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/ActionPaging.java +++ b/o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/ActionPaging.java @@ -8,6 +8,7 @@ import javax.persistence.EntityManager; import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Expression; import javax.persistence.criteria.Order; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; @@ -51,8 +52,9 @@ class ActionPaging extends BaseAction { Root 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))); + //p = cb.or(p, cb.isMember(effectivePerson.getDistinguishedName(),root.get(Meeting_.invitePersonList))); + Expression> expression = root.get(Meeting_.invitePersonList); + p = cb.or(p, expression.in(effectivePerson.getDistinguishedName())); if(!StringUtils.isBlank(wi.getSubject())) { p = cb.and(p, cb.like(root.get(Meeting_.subject), "%" + wi.getSubject() + "%")); @@ -127,28 +129,32 @@ class ActionPaging extends BaseAction { } cq.select(root.get(Meeting_.id)).where(p).orderBy(order); - + cq.distinct(true); + TypedQuery typedQuery = em.createQuery(cq); int pageIndex = (page-1)*size; - int pageSize = page*size; + int pageSize = size; typedQuery.setFirstResult(pageIndex); typedQuery.setMaxResults(pageSize); - - //logger.info("typedQuery="+ typedQuery.toString()); ids = typedQuery.getResultList(); - - CriteriaQuery cqCount = cb.createQuery(Long.class); - Root rootCount = cqCount.from(Meeting.class); - cqCount.select(cb.countDistinct(rootCount)).where(p); - Long count = em.createQuery(cqCount).getSingleResult().longValue(); - //logger.info("count="+ count); + //logger.info("pagingtypedQuery="+ typedQuery.toString()); + + TypedQuery tqCount = em.createQuery( cq.select(root.get(Meeting_.id)).where(p).distinct(true)); + List allid = tqCount.getResultList(); + Long tpsize = (long) allid.size(); + //logger.info("ids count="+ tpsize); - List wos = Wo.copier.copy(emc.list(Meeting.class, ids)); + CriteriaQuery cqMeeting = cb.createQuery(Meeting.class); + Predicate pMeeting = cb.isMember(root.get(Meeting_.id), cb.literal(ids)); + Root rootMeeting = cqMeeting.from(Meeting.class); + cqMeeting.select(rootMeeting).where(pMeeting).orderBy(order); + List os = em.createQuery(cqMeeting).getResultList(); + + List wos = Wo.copier.copy(os); WrapTools.decorate(business, wos, effectivePerson); WrapTools.setAttachment(business, wos); - SortTools.desc(wos, Meeting.startTime_FIELDNAME); result.setData(wos); - result.setCount(count); + result.setCount(tpsize); return result; } } diff --git a/o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/ActionPagingManage.java b/o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/ActionPagingManage.java index 8792bd4f09..4d9bfc87ff 100644 --- a/o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/ActionPagingManage.java +++ b/o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/ActionPagingManage.java @@ -129,31 +129,34 @@ class ActionPagingManage extends BaseAction { order = cb.desc(root.get("startTime")); } - cq.select(root.get(Meeting_.id)).where(p).orderBy(order); - + cq.select(root.get(Meeting_.id)).where(p).orderBy(order); + cq.distinct(true); + TypedQuery typedQuery = em.createQuery(cq); int pageIndex = (page-1)*size; - int pageSize = page*size; + int pageSize = size; typedQuery.setFirstResult(pageIndex); typedQuery.setMaxResults(pageSize); - - //logger.info("typedQuery="+ typedQuery.toString()); ids = typedQuery.getResultList(); - - CriteriaQuery cqCount = cb.createQuery(Long.class); - Root rootCount = cqCount.from(Meeting.class); - cqCount.select(cb.countDistinct(rootCount)).where(p); - Long count = em.createQuery(cqCount).getSingleResult().longValue(); - // logger.info("count="+ count); + //logger.info("pagingtypedQuery="+ typedQuery.toString()); - List wos = Wo.copier.copy(emc.list(Meeting.class, ids)); + TypedQuery tqCount = em.createQuery( cq.select(root.get(Meeting_.id)).where(p).distinct(true)); + List allid = tqCount.getResultList(); + Long tpsize = (long) allid.size(); + //logger.info("ids count="+ tpsize); + + CriteriaQuery cqMeeting = cb.createQuery(Meeting.class); + Predicate pMeeting = cb.isMember(root.get(Meeting_.id), cb.literal(ids)); + Root rootMeeting = cqMeeting.from(Meeting.class); + cqMeeting.select(rootMeeting).where(pMeeting).orderBy(order); + List os = em.createQuery(cqMeeting).getResultList(); + + List wos = Wo.copier.copy(os); WrapTools.decorate(business, wos, effectivePerson); WrapTools.setAttachment(business, wos); - SortTools.desc(wos, Meeting.startTime_FIELDNAME); result.setData(wos); - result.setCount(count); + result.setCount(tpsize); return result; - } } -- GitLab