From c5a0ff2661fe362dddbe88c6a28d19c48c24c39b Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期一, 21 十月 2024 20:39:32 +0800 Subject: [PATCH] 最新版本541200007 --- server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java | 226 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 201 insertions(+), 25 deletions(-) diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java index 7a3ccc1..19d048f 100644 --- a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java +++ b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java @@ -142,7 +142,7 @@ //鍙戦�佷細璁绾︽垚鍔熼�氱煡 this.sendNotice(bookings, MeetConstants.TWO); //鍙戦�佸井淇¤闃呴�氱煡 - sendWxMessage.bookingsReservation(systemUserMapper.selectById(bookings.getCreator()), bookings, roomsMapper.selectById(bookings.getRoomId())); +// sendWxMessage.bookingsReservation(systemUserMapper.selectById(bookings.getCreator()), bookings, roomsMapper.selectById(bookings.getRoomId())); return bookings.getId(); } @@ -464,19 +464,38 @@ queryWrapper.selectAs(Rooms::getName, Bookings::getRoomName); queryWrapper.selectAs(SystemUser::getRealname, Bookings::getRealName); queryWrapper.selectAs(Company::getName, Bookings::getDepartmentName); - queryWrapper.select(" CASE WHEN t.START_TIME > now() AND t.`STATUS` = 0 THEN 1 WHEN ( (t.END_TIME < now() AND t.`STATUS` = 0 ) or t.`STATUS` = 2 ) THEN 3 WHEN t.`STATUS` = 1 THEN 5 ELSE 2 END meetingStatus "); + queryWrapper.select(" CASE WHEN t.START_TIME_REAL IS NULL AND t.`STATUS` = 0 THEN 1 WHEN ( ( t.END_TIME < now() AND t.`STATUS` = 0 ) or t.`STATUS` = 2 ) THEN 3 WHEN t.`STATUS` = 1 THEN 5 ELSE 2 END meetingStatus "); queryWrapper.leftJoin(Rooms.class, Rooms::getId, Bookings::getRoomId); queryWrapper.leftJoin(SystemUser.class, SystemUser::getId, Bookings::getCreator); queryWrapper.leftJoin(Company.class,Company::getId,SystemUser::getCompanyId); queryWrapper.orderByDesc(Bookings::getCreateDate); queryWrapper.eq(Bookings::getIsdeleted, MeetConstants.ZERO); + //鏁版嵁鏉冮檺寮�濮�--------------------start---------------- + LoginUserInfo userInfo =pageWrap.getModel().getLoginUserInfo(); + if(userInfo!=null && userInfo.getCompanyIdList()!=null){ + if( userInfo.getCompanyIdList().size() ==0){ + //鍙湅鑷繁 + queryWrapper.and(wrapper ->{ + wrapper.eq(Bookings::getCreator,userInfo.getId()) + .or().exists("select rel.id from meeting_user_rel rel where rel.OBJ_TYPE=0 and rel.obj_id=t.id and rel.isdeleted=0 and rel.user_id="+userInfo.getId()); + }); + queryWrapper.eq(Bookings::getCreator,userInfo.getId()); + }else{ + //鏉冮檺鑼冨洿鍐� + queryWrapper.and(wrapper ->{ + wrapper.in(SystemUser::getCompanyId ,userInfo.getCompanyIdList()) + .or().exists("select rel.id from meeting_user_rel rel where rel.OBJ_TYPE=0 and rel.obj_id=t.id and rel.isdeleted=0 and rel.user_id="+userInfo.getId()); + }); + } + } + //鏁版嵁鏉冮檺寮�濮�--------------------end---------------- + queryWrapper.eq(pageWrap.getModel().getRoomId() != null, Bookings::getRoomId, pageWrap.getModel().getRoomId()); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()), Bookings::getName, pageWrap.getModel().getName()); queryWrapper.eq(pageWrap.getModel().getStatus() != null, Bookings::getStatus, pageWrap.getModel().getStatus()); queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getRealName()), SystemUser::getRealname, pageWrap.getModel().getRealName()); queryWrapper.eq(pageWrap.getModel().getDepartmentId() != null, Company::getId, pageWrap.getModel().getDepartmentId()); - queryWrapper.apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus()) &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.ONE), @@ -841,19 +860,7 @@ .orderByAsc(Constants.equalsInteger(pageWrap.getModel().getQueryType(),MeetConstants.ONE),"a.START_TIME"); IPage<MeetingListResponse> page = bookingsMapper.myMeetingPage(pageWrap.toPage(), queryWrapper); - String path = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode(); - page.getRecords().forEach(i -> { - i.setPrefixUrl(path); - if(i.getMeetingStatus().equals(Constants.ZERO)){ - if(i.getMeetingStatus()==Constants.ONE){ - //寮�濮嬪墠120鍒嗛挓 澶т簬褰撳墠鏃堕棿 鍒欐樉绀哄嵆灏嗗紑濮� - if(DateUtil.afterMinutesDate(i.getStartTime(),-120).getTime()>System.currentTimeMillis()){ - i.setMeetingStatus(4); - } - } - } - - }); + this.dealMeetingStatus(page.getRecords()); return page; } @@ -875,7 +882,7 @@ if(Objects.isNull(bookings)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } - return getMeetingDetail(bookings.getId()); + return getMeetingDetail(bookings.getId(),null); }catch (Exception e){ e.printStackTrace(); } @@ -892,7 +899,7 @@ * @return */ @Override - public MeetingDetailResponse getMeetingDetail(Integer id) { + public MeetingDetailResponse getMeetingDetail(Integer id,Integer sysUserId) { MeetingDetailResponse meetingDetailResponse = bookingsMapper.meetingDetail(id); if (Objects.isNull(meetingDetailResponse)) { throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鏈煡璇㈠埌浼氳璇︽儏"); @@ -904,9 +911,7 @@ .eq("BOOKING_ID", id) .eq("ISDELETED", MeetConstants.ZERO) )); - //鍙備細浜哄憳鍒楄〃 - List<UserResponse> userResponseList = systemUserService.getUserList(id); String avatarPath = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode(); @@ -939,9 +944,18 @@ .eq("OBJ_ID", meetingDetailResponse.getRoomId()) .eq("OBJ_TYPE",MeetConstants.ZERO) ); + if(Constants.equalsInteger(sysUserId,meetingDetailResponse.getBookingUserId())){ + meetingDetailResponse.setIsAdmin(Constants.ONE); + } if (!Objects.isNull(userRelList) && userRelList.size() > 0) { meetingDetailResponse.setRoomUser(systemUserService.findById(userRelList.get(MeetConstants.ZERO).getUserId())); + if( Objects.nonNull(sysUserId) && + userRelList.stream().filter(i->Constants.equalsInteger(i.getUserId(),sysUserId)).collect(Collectors.toList()).size()>Constants.ZERO + ){ + meetingDetailResponse.setIsAdmin(Constants.ONE); + } } + return meetingDetailResponse; } @@ -1000,7 +1014,7 @@ if (!bookings.getCreator().equals(businessOverDTO.getUserId())) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "闈炰綘鐨勯绾﹁褰�,鏃犳硶杩涜鍙栨秷"); } - if (System.currentTimeMillis() > bookings.getStartTime().getTime()) { + if (Objects.nonNull(bookings.getStartTimeReal()) && System.currentTimeMillis() > bookings.getStartTimeReal().getTime()) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "浼氳宸插紑濮�,鏃犳硶杩涜鍙栨秷"); } if(bookings.getStatus().equals(MeetConstants.ONE)){ @@ -1016,7 +1030,7 @@ //鍙栨秷浼氳 鍙戦�佸彇娑堥�氱煡 this.sendNotice(bookings, 3); //鍙戦�佸井淇¤闃呴�氱煡 - sendWxMessage.bookingsCancel(systemUserMapper.selectById(bookings.getCreator()), bookings, roomsMapper.selectById(bookings.getRoomId())); +// sendWxMessage.bookingsCancel(systemUserMapper.selectById(bookings.getCreator()), bookings, roomsMapper.selectById(bookings.getRoomId())); } @@ -1036,13 +1050,13 @@ Long userRelList = userRelMapper.selectCount(new QueryWrapper<UserRel>().lambda() .eq(UserRel::getIsdeleted,Constants.ZERO) .eq(UserRel::getObjId,bookings.getRoomId()) - .eq(UserRel::getObjType,Constants.ONE) + .eq(UserRel::getObjType,Constants.ZERO) .eq(UserRel::getUserId,businessOverDTO.getUserId())); if (!bookings.getCreator().equals(businessOverDTO.getUserId()) && userRelList <= 0) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "闈炰綘鐨勯绾﹁褰�,鏃犳硶杩涜璇ユ搷浣�"); } - if (System.currentTimeMillis() < bookings.getStartTime().getTime()) { + if (System.currentTimeMillis() < bookings.getStartTimeReal().getTime()) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "浼氳鏈紑濮�,鏃犳硶杩涜缁撴潫锛屽闇�璇ユ搷浣滆浣跨敤鍙栨秷鍔熻兘"); } if (System.currentTimeMillis() > bookings.getEndTime().getTime()) { @@ -1074,8 +1088,170 @@ bookingTimeJoinMapper.updateById(bookingTime); } } + } + + /** + * 姝e父寮�濮� + * @param businessOverDTO + */ + @Override + @Transactional(rollbackFor = {Exception.class,BusinessException.class}) + public void start(BusinessOverDTO businessOverDTO) { + this.startEarly(businessOverDTO); + } + + /** + * 鎻愬墠寮�濮� + * @param businessOverDTO + */ + @Override + @Transactional(rollbackFor = {Exception.class,BusinessException.class}) + public void startEarly(BusinessOverDTO businessOverDTO) { + if(Objects.isNull(businessOverDTO) + || Objects.isNull(businessOverDTO.getUserId()) + || Objects.isNull(businessOverDTO.getStartType()) + || Objects.isNull(businessOverDTO.getId()) + ){ + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + Bookings bookings = bookingsMapper.selectById(businessOverDTO.getId()); + if (Objects.isNull(bookings)) { + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鏈煡璇㈠埌棰勭害璁板綍"); + } + Long userRelList = userRelMapper.selectCount(new QueryWrapper<UserRel>().lambda() + .eq(UserRel::getIsdeleted,Constants.ZERO) + .eq(UserRel::getObjId,bookings.getRoomId()) + .eq(UserRel::getObjType,Constants.ZERO) + .eq(UserRel::getUserId,businessOverDTO.getUserId())); + + if (!bookings.getCreator().equals(businessOverDTO.getUserId()) && userRelList <= 0) { + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "闈炰綘鐨勯绾﹁褰�,鏃犳硶杩涜璇ユ搷浣�"); + } + if(!Constants.equalsInteger(bookings.getStatus(),Constants.ZERO)){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "浼氳鐘舵�佸凡娴佽浆锛屾棤娉曡繘琛岃鎿嶄綔"); + } + if(Objects.nonNull(bookings.getStartTimeReal())){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "浼氳宸插紑濮嬶紝璇峰嬁閲嶅鎿嶄綔"); + } + if (System.currentTimeMillis() > bookings.getEndTime().getTime()) { + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "浼氳宸茬粨鏉燂紝鏃犳硶杩涜璇ユ搷浣�"); + } + if(Constants.equalsInteger(businessOverDTO.getStartType(),Constants.ZERO)){ + //鏍规嵁閰嶇疆鑾峰彇鎻愬墠寮�濮嬬殑鍒嗛挓鏁伴噺 + String configMinute = systemDictDataBiz.queryByCode(MeetConstants.SYSTEM, MeetConstants.EARLY_START).getCode(); + Integer beforeMinutes = StringUtils.isNotBlank(configMinute) ? Integer.valueOf(configMinute) : 120; + if(DateUtil.afterMinutesDate(bookings.getStartTime(),-beforeMinutes).getTime()>System.currentTimeMillis()){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼氳浠呭彲浠ユ彁鍓�"+beforeMinutes+"鍒嗛挓寮�濮�"); + } + //鏌ヨ鏄惁瀛樺湪鍏朵粬鏈紑濮嬬殑浼氳 闃叉棰楃矑搴︿笌鎻愬墠寮�濮嬬殑闂 + if(bookingsMapper.selectCount(new QueryWrapper<Bookings>() + .lambda() + .apply(" now() < START_TIME and END_TIME <= '" + DateUtil.DateToStr(bookings.getStartTime(),"yyyy-MM-dd HH:mm:ss") +"'" ) + .isNull(Bookings::getStartTimeReal) + .isNull(Bookings::getDoneDate) + .eq(Bookings::getStatus,Constants.ZERO) + .eq(Bookings::getRoomId,bookings.getRoomId()) + .ne(Bookings::getId,bookings.getId()) + )>Constants.ZERO){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪鏈紑鍚細璁紝鏃犳硶寮�濮嬩細璁�"); + }; + + if(bookingsMapper.selectCount(new QueryWrapper<Bookings>() + .lambda() + .apply(" ( ( END_TIME > now() and START_TIME < now() ) or ( END_TIME > now() and START_TIME_REAL < now() ) ) ") + .isNotNull(Bookings::getStartTimeReal) + .isNull(Bookings::getDoneDate) + .eq(Bookings::getStatus,Constants.ZERO) + .eq(Bookings::getRoomId,bookings.getRoomId()) + )>Constants.ZERO){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠寮�鍚椂闂翠笌鍏朵粬浼氳瀛樺湪鍐茬獊锛屾棤娉曞紑濮嬩細璁�"); + }; + }else{ + if(bookings.getStartTime().getTime() > System.currentTimeMillis()){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈埌浼氳鐢宠寮�濮嬫椂闂达紝鏃犳硶寮�濮�"); + } + } + bookings.setStartTimeReal(new Date()); + bookings.setEditDate(new Date()); + bookings.setEditor(businessOverDTO.getUserId()); + bookingsMapper.updateById(bookings); + //鏇存柊宸茬粨鏉熶絾鏈粨鏉熺殑浼氳淇℃伅涓哄凡缁撴潫 + bookingsMapper.update(null,new UpdateWrapper<Bookings>() + .lambda() + .set(Bookings::getStatus,Constants.TWO) + .set(Bookings::getDoneDate,new Date()) + .set(Bookings::getDoneInfo,"鍏朵粬浼氳寮�濮嬶紝鑷姩鍏抽棴") + .apply(" ( END_TIME < now() or ( END_TIME > now() and START_TIME < now() and START_TIME_REAL is null ) )") + .eq(Bookings::getStatus,Constants.ZERO) + .eq(Bookings::getRoomId,bookings.getRoomId()) + ); } + + + @Override + public RoomDetailResponse getRoomDetail(Integer roomId){ + Rooms rooms = roomsMapper.selectById(roomId); + if(Objects.isNull(rooms) || !Constants.equalsInteger(rooms.getIsdeleted(),Constants.ZERO) + || !Constants.equalsInteger(rooms.getStatus(),Constants.ZERO)){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼氳瀹や俊鎭棤鏁堬紝璇疯仈绯荤鐞嗗憳"); + } + RoomDetailResponse response = new RoomDetailResponse(); + response.setRoomName(rooms.getName()); + response.setFileType(rooms.getFileType()); + + List<Multifile> multifileList = multifileJoinMapper.selectList(new QueryWrapper<Multifile>().lambda() + .eq(Multifile::getObjId,roomId) + .eq(Multifile::getObjType,Constants.FOUR) + ); + + String prefix = systemDictDataBiz.queryByCode(MeetConstants.SYSTEM, MeetConstants.MEET_CODE_PREFIX).getCode() ; + response.setPrefix(prefix); + + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ + String path = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode(); + for (Multifile multifile:multifileList) { + multifile.setFileurlFull(path + multifile.getFileurl()); + } + response.setMultifileList(multifileList); + } + + //鏌ヨ浼氳鍒楄〃 + List<MeetingListResponse> meetingList = bookingsMapper.meetingList( + new QueryWrapper<Bookings>() + .eq( "b.id", rooms.getId()) + .eq("b.ISDELETED",MeetConstants.ZERO) + .eq("b.STATUS",MeetConstants.ZERO) + .eq("a.ISDELETED",MeetConstants.ZERO) + .eq("a.status",Constants.ZERO) + .ne("a.status",Constants.TWO) + .like("a.start_time",DateUtil.getCurrDate()) + .apply(" not exists ( select 1 from meeting_book mb where mb.END_TIME < now() and mb.id = a.id and START_TIME_REAL is null ) ") + .orderByAsc("a.start_time") + ); + this.dealMeetingStatus(meetingList); + response.setMeetingListResponseList(meetingList); + return response; + } + + + public void dealMeetingStatus(List<MeetingListResponse> meetingResponseList){ + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(meetingResponseList)){ + String path = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode(); + String configMinute = systemDictDataBiz.queryByCode(MeetConstants.SYSTEM, MeetConstants.SOON_START).getCode(); + Integer minute = StringUtils.isNotBlank(configMinute) ? Integer.valueOf(configMinute) : 120; + for (MeetingListResponse m:meetingResponseList) { + if(Constants.equalsInteger(m.getStatus(),Constants.ZERO)&&Constants.equalsInteger(m.getMeetingStatus(),Constants.ONE)){ + //寮�濮嬪墠120鍒嗛挓 澶т簬褰撳墠鏃堕棿 鍒欐樉绀哄嵆灏嗗紑濮� + if(DateUtil.afterMinutesDate(m.getStartTime(),-minute).getTime()>System.currentTimeMillis()){ + m.setMeetingStatus(4); + } + } + m.setPrefixUrl(path); + } + } + } + /** * 瀹氭椂鍙戦�佷細璁� 鍗冲皢寮�濮嬮�氱煡 @@ -1099,7 +1275,7 @@ bookingsMapper.updateById(bookings); this.sendNotice(bookings, MeetConstants.ONE); //鍙戦�佸井淇¢�氱煡 - sendWxMessage.bookingsStart(systemUserMapper.selectById(bookings.getCreator()), bookings, roomsMapper.selectById(bookings.getRoomId())); +// sendWxMessage.bookingsStart(systemUserMapper.selectById(bookings.getCreator()), bookings, roomsMapper.selectById(bookings.getRoomId())); } } -- Gitblit v1.9.3