MrShi
2025-05-21 f5ab83dfad01c87828232af8cd18c676e69fd917
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
@@ -539,6 +539,7 @@
        IPage<Bookings> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<Bookings> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        Integer minute =getNearStartMinut();
        queryWrapper.selectAll(Bookings.class);
        queryWrapper.selectAs(Rooms::getName, Bookings::getRoomName);
@@ -576,22 +577,25 @@
        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());
        //status 状态 0已预约 1已撤销 2已结束
        //会议状态: 1=未开始;2=进行中;3=已结束 ; 4=即将开始; 5=已撤销
        queryWrapper.apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus())
                        &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.ONE),
                " ( now() < t.START_TIME and t.status = 0 ) "
                " ( now() < t.START_TIME and t.status = 0  AND SUBDATE( now(), INTERVAL -"+minute+" MINUTE ) <  t.START_TIME ) "
        )
        .apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus())
                        &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.TWO),
                " ( now() >= t.START_TIME and t.END_TIME >= now() and t.status = 0 ) "
                " ( t.status = 0 and t.START_TIME_REAL is not null  ) "
        )
        .apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus())
                        &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.THREE),
                " ( ( now() > t.END_TIME  and  t.`STATUS` = 0  ) or   t.`STATUS` = 2  )  "
                " (   t.`STATUS` = 2  )  "
                //" ( ( now() > t.END_TIME  and  t.`STATUS` = 0  ) or   t.`STATUS` = 2  )  "
        )
        .apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus())
                        &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.FOUR),
                " now() < t.START_TIME  AND SUBDATE( t.START_TIME, INTERVAL 120 MINUTE ) < NOW() "
                " (t.status = 0  AND SUBDATE( now(), INTERVAL -"+minute+" MINUTE ) >  t.START_TIME and t.START_TIME_REAL is null ) "
                //" now() < t.START_TIME  AND SUBDATE( t.START_TIME, INTERVAL "+minute+" MINUTE ) < NOW() "
        )
        .apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus())
                        &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.FIVE),
@@ -612,7 +616,6 @@
        SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm");
        SimpleDateFormat format1 = new SimpleDateFormat("HH:mm");
        IPage<Bookings> result = bookingsJoinMapper.selectJoinPage(page, Bookings.class, queryWrapper);
        Integer minute =getNearStartMinut();
        result.getRecords().stream().forEach(s -> {
            dealMeetingStatusByModel(s,minute);
            MPJLambdaWrapper<Multifile> bookquery = new MPJLambdaWrapper<>();
@@ -641,11 +644,11 @@
            s.setSysList(userrelList);
            //会议室管理员
            MPJLambdaWrapper<UserRel> param = new MPJLambdaWrapper<>();
            urquery.selectAll(UserRel.class);
            urquery.eq(UserRel::getObjType, MeetConstants.ZERO);
            urquery.eq(UserRel::getIsdeleted, MeetConstants.ZERO);
            urquery.eq(UserRel::getObjId, s.getRoomId());
            List<UserRel> adminList = userRelJoinMapper.selectJoinList(UserRel.class, urquery);
            param.selectAll(UserRel.class);
            param.eq(UserRel::getObjType, MeetConstants.ZERO);
            param.eq(UserRel::getIsdeleted, MeetConstants.ZERO);
            param.eq(UserRel::getObjId, s.getRoomId());
            List<UserRel> adminList = userRelJoinMapper.selectJoinList(UserRel.class, param);
            s.setAdminList(adminList);
            //查询是否有权限
@@ -671,7 +674,7 @@
        if(Constants.equalsInteger(userInfo.getId(),s.getCreator())  ){
              return 1;
        }
        if(adminList!=null){
        if(adminList!=null && userInfo!=null){
            for(UserRel u : adminList){
                if(Constants.equalsInteger(userInfo.getId(),u.getUserId())  ){
                    return 1;
@@ -1207,8 +1210,20 @@
        if (Objects.isNull(bookings)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "未查询到预约记录");
        }
        if (!bookings.getCreator().equals(businessOverDTO.getUserId())) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "非你的预约记录,无法进行取消");
//        LoginUserInfo user =(LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        //会议室管理员
        MPJLambdaWrapper<UserRel> param = new MPJLambdaWrapper<>();
        param.selectAll(UserRel.class);
        param.eq(UserRel::getObjType, MeetConstants.ZERO);
        param.eq(UserRel::getIsdeleted, MeetConstants.ZERO);
        param.eq(UserRel::getObjId, bookings.getRoomId());
        List<UserRel> adminList = userRelJoinMapper.selectJoinList(UserRel.class, param);
        Integer hasRole =getHasRoleByParam(bookings,businessOverDTO.getLoginUser(),adminList);
//        if (!bookings.getCreator().equals(businessOverDTO.getUserId())) {
        if (!Constants.equalsInteger(hasRole,Constants.ONE)) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,只有会议室管理员和申请人才能进行该操作哦!");
        }
        if (Objects.nonNull(bookings.getStartTimeReal()) && System.currentTimeMillis() > bookings.getStartTimeReal().getTime()) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "会议已开始,无法进行取消");
@@ -1313,21 +1328,24 @@
        for (Rooms rooms:roomList) {
            //查询当前会议室是否存在进行中的会议
            if(bookingsMapper.selectCount(new QueryWrapper<Bookings>().lambda().eq(Bookings::getIsdeleted,Constants.ZERO)
                    .eq(Bookings::getStatus,Constants.ZERO).isNotNull(Bookings::getStartTimeReal)
                    .eq(Bookings::getStatus,Constants.ZERO).eq(Bookings::getRoomId,rooms.getId()).isNotNull(Bookings::getStartTimeReal).
                    apply(" DATE_FORMAT(NOW(), '%Y-%m-%d') = DATE_FORMAT(START_TIME, '%Y-%m-%d') ")
            )<=Constants.ZERO){
                //根据会议室获取可以开启的会议记录(第一条记录)
                Bookings bookings = bookingsMapper.selectOne(new QueryWrapper<Bookings>().lambda()
                        .eq(Bookings::getIsdeleted,Constants.ZERO)
                        .eq(Bookings::getStatus,Constants.ZERO)
                        .eq(Bookings::getRoomId,rooms.getId())
                        .apply(" now() > START_TIME and now < END_TIME ")
                        .apply(" now() > START_TIME and now() < END_TIME ")
                        .isNull(Bookings::getStartTimeReal)
                        .orderByAsc(Bookings::getStartTime)
                        .last(" limit 1 ")
                );
                bookings.setStartTimeReal(new Date());
                bookings.setEditDate(new Date());
                bookingsMapper.updateById(bookings);
                if(Objects.nonNull(bookings)){
                    bookings.setStartTimeReal(new Date());
                    bookings.setEditDate(bookings.getStartTimeReal());
                    bookingsMapper.updateById(bookings);
                }
            }
        }
    }
@@ -1463,7 +1481,10 @@
                 .eq(Bookings::getIsdeleted, MeetConstants.ZERO)
                 .eq(Bookings::getStatus, MeetConstants.ZERO)
                 .eq(Rooms::getId, rooms.getId())
                 .apply("to_days(t.start_time) = to_days(now()) and t.end_time > now()")//子查询当天的
                 .apply(" (  " +
                         " to_days(t.start_time) = to_days(now()) " +
                         " and ( t.START_TIME_REAL is not null or ( t.end_time > now()  and  t.START_TIME_REAL is  null ) ) " +
                         " ) ")//子查询当天的
                 .orderByAsc(Bookings::getStartTime);
        Integer minute =getNearStartMinut();
        List<Bookings> meetingList =bookingsMapper.selectJoinList(Bookings.class,queryWrapper);