zouyu
2025-11-14 113cd73922b9b67c261c19c744e46eb2822d7b41
src/main/java/com/ruoyi/collaborativeApproval/service/impl/MeetingServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,244 @@
package com.ruoyi.collaborativeApproval.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.xiaoymin.knife4j.core.util.StrUtil;
import com.ruoyi.collaborativeApproval.dto.MeetSummaryDto;
import com.ruoyi.collaborativeApproval.dto.MeetUseDto;
import com.ruoyi.collaborativeApproval.dto.MeetingItem;
import com.ruoyi.collaborativeApproval.dto.MeetingSimpleDto;
import com.ruoyi.collaborativeApproval.mapper.MeetApplicationMapper;
import com.ruoyi.collaborativeApproval.mapper.MeetDraftMapper;
import com.ruoyi.collaborativeApproval.mapper.MeetingMinutesMapper;
import com.ruoyi.collaborativeApproval.mapper.MeetingRoomMapper;
import com.ruoyi.collaborativeApproval.pojo.MeetApplication;
import com.ruoyi.collaborativeApproval.pojo.MeetDraft;
import com.ruoyi.collaborativeApproval.pojo.MeetingMinutes;
import com.ruoyi.collaborativeApproval.pojo.MeetingRoom;
import com.ruoyi.collaborativeApproval.service.MeetingService;
import com.ruoyi.collaborativeApproval.vo.SearchMeetingApplicationVo;
import com.ruoyi.collaborativeApproval.vo.SearchMeetingDraftVo;
import com.ruoyi.collaborativeApproval.vo.SearchMeetingRoomVo;
import com.ruoyi.collaborativeApproval.vo.SearchMeetingUseVo;
import com.ruoyi.common.utils.SecurityUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class MeetingServiceImpl extends ServiceImpl<MeetingRoomMapper, MeetingRoom> implements MeetingService {
    private final MeetingRoomMapper meetingRoomMapper;
    private final MeetDraftMapper meetDraftMapper;
    private final MeetApplicationMapper meetApplicationMapper;
    private final MeetingMinutesMapper meetingMinutesMapper;
    @Override
    public IPage<MeetingRoom> getMeetingRoomList(SearchMeetingRoomVo vo) {
        LambdaQueryWrapper<MeetingRoom> queryWrapper = new LambdaQueryWrapper<>();
        if (StrUtil.isNotBlank(vo.getName())) {
            queryWrapper.like(MeetingRoom::getName, vo.getName());
        }
        if (StrUtil.isNotBlank(vo.getLocation())) {
            queryWrapper.like(MeetingRoom::getLocation, vo.getLocation());
        }
        queryWrapper.orderByDesc(MeetingRoom::getId);
        return meetingRoomMapper.selectPage(new Page<MeetingRoom>(vo.getCurrent(), vo.getSize()), queryWrapper);
    }
    @Override
    public void saveMeetRoom(MeetingRoom meetingRoom) {
        if (meetingRoom.getId() != null) {
            meetingRoomMapper.updateById(meetingRoom);
        } else {
            meetingRoomMapper.insert(meetingRoom);
        }
    }
    @Override
    public MeetingRoom findMeetRoomById(Long id) {
        return meetingRoomMapper.selectById(id);
    }
    @Override
    public void deleteMeetingRoom(Long id) {
        meetingRoomMapper.deleteById(id);
    }
    @Override
    public List<MeetingRoom> getRoomEnum() {
        LambdaQueryWrapper<MeetingRoom> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.select(MeetingRoom::getName, MeetingRoom::getId, MeetingRoom::getLocation);
        queryWrapper.eq(MeetingRoom::getStatus, 1);
        queryWrapper.orderByDesc(MeetingRoom::getId);
        return meetingRoomMapper.selectList(queryWrapper);
    }
    @Override
    public IPage<MeetDraft> getMeetingDraftList(SearchMeetingDraftVo vo) {
        LambdaQueryWrapper<MeetDraft> queryWrapper = new LambdaQueryWrapper<>();
        if (StrUtil.isNotBlank(vo.getTitle())) {
            queryWrapper.like(MeetDraft::getTitle, vo.getTitle());
        }
        if (Objects.nonNull(vo.getMeetingDate())) {
            queryWrapper.eq(MeetDraft::getMeetingDate, vo.getMeetingDate());
        }
        queryWrapper.orderByDesc(MeetDraft::getId);
        return meetDraftMapper.selectPage(new Page<>(vo.getCurrent(), vo.getSize()), queryWrapper);
    }
    @Override
    public void saveMeetDraft(MeetDraft meetDraft) {
        if (meetDraft.getId() != null) {
            meetDraftMapper.updateById(meetDraft);
        } else {
            meetDraftMapper.insert(meetDraft);
        }
    }
    @Override
    public void deleteMeetingDraft(Long id) {
        meetDraftMapper.deleteById(id);
    }
    @Override
    public void saveMeetApplication(MeetApplication meetApplication) {
        meetApplication.setApplicant(SecurityUtils.getUsername());
        if (meetApplication.getId() != null) {
            meetApplicationMapper.updateById(meetApplication);
        } else {
            meetApplicationMapper.insert(meetApplication);
        }
    }
    @Override
    public IPage<MeetApplication> getMeetingApplicationList(SearchMeetingApplicationVo vo) {
        LambdaQueryWrapper<MeetApplication> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(MeetApplication::getApplicationType, "approval", "department");
        if (StrUtil.isNotBlank(vo.getTitle())) {
            queryWrapper.like(MeetApplication::getTitle, vo.getTitle());
        }
        if (StrUtil.isNotBlank(vo.getApplicant())) {
            queryWrapper.like(MeetApplication::getApplicant, vo.getApplicant());
        }
        if (StrUtil.isNotBlank(vo.getStatus())) {
            queryWrapper.eq(MeetApplication::getStatus, vo.getStatus());
        }
        queryWrapper.orderByDesc(MeetApplication::getId);
        return meetApplicationMapper.selectPage(new Page<>(vo.getCurrent(), vo.getSize()), queryWrapper);
    }
    @Override
    public List<MeetUseDto> meetingUseList(SearchMeetingUseVo vo) {
        // æŸ¥è¯¢ä¼šè®®åˆ—表
        LambdaQueryWrapper<MeetApplication> alWrapper = new LambdaQueryWrapper<>();
        alWrapper.and(wrapper -> {
            wrapper.eq(MeetApplication::getStatus, 1)
                    .or()
                    .eq(MeetApplication::getApplicationType, "notification");
        });
        if (Objects.nonNull(vo.getMeetingDate())) {
            alWrapper.and(wrapper -> {
                wrapper.eq(MeetApplication::getMeetingDate, vo.getMeetingDate());
            });
        }
        alWrapper.orderByAsc(MeetApplication::getStartTime);
        List<MeetApplication> meetApplicationList = meetApplicationMapper.selectList(alWrapper);
        // æ ¹æ® roomId è¿›è¡Œåˆ†ç»„
        Map<Long, List<MeetApplication>> roomGroup = meetApplicationList.stream().collect(Collectors.groupingBy(MeetApplication::getRoomId));
        // æŸ¥è¯¢room信息
        List<MeetingRoom> roomList = meetingRoomMapper.selectList(new LambdaUpdateWrapper<MeetingRoom>().orderByAsc(MeetingRoom::getId));
        List<MeetUseDto> meetUseDtoList = new ArrayList<>();
        roomList.forEach(r -> {
            MeetUseDto dto = new MeetUseDto();
            MeetingRoom meetingRoom = roomList.stream().filter(room -> room.getId().equals(r.getId())).findFirst().orElse(new MeetingRoom());
            dto.setId(meetingRoom.getId());
            dto.setName(meetingRoom.getName());
            List<MeetingItem> collect = roomGroup.getOrDefault(r.getId(), new ArrayList<>()).stream().map(it -> {
                MeetingItem item = new MeetingItem();
                item.setId(it.getId());
                item.setHost(it.getHost());
                item.setStatus(1);
                item.setTitle(it.getTitle());
                item.setStartTime(it.getStartTime().format(DateTimeFormatter.ofPattern("HH:mm")));
                item.setEndTime(it.getEndTime().format(DateTimeFormatter.ofPattern("HH:mm")));
                item.setTime(item.getStartTime() + "~" + item.getEndTime());
                item.setParticipants(it.getParticipants().split(",").length);
                item.setDescription(it.getDescription());
                item.setRoom(meetingRoom.getName() + "(" + meetingRoom.getLocation() + ")");
                return item;
            }).collect(Collectors.toList());
            dto.setMeetings(collect);
            meetUseDtoList.add(dto);
        });
        return meetUseDtoList;
    }
    @Override
    public IPage<MeetApplication> getMeetingPublishList(SearchMeetingApplicationVo vo) {
        LambdaQueryWrapper<MeetApplication> queryWrapper = new LambdaQueryWrapper<>();
        if (StrUtil.isNotBlank(vo.getTitle())) {
            queryWrapper.like(MeetApplication::getTitle, vo.getTitle());
        }
        if (StrUtil.isNotBlank(vo.getApplicant())) {
            queryWrapper.like(MeetApplication::getApplicant, vo.getApplicant());
        }
        if (StrUtil.isNotBlank(vo.getStatus())) {
            queryWrapper.eq(MeetApplication::getPublishStatus, vo.getStatus());
        }
        queryWrapper.and(wrapper -> {
            wrapper.eq(MeetApplication::getStatus, 1)
                    .or()
                    .eq(MeetApplication::getApplicationType, "notification");
        });
        queryWrapper.orderByDesc(MeetApplication::getId);
        return meetApplicationMapper.selectPage(new Page<>(vo.getCurrent(), vo.getSize()), queryWrapper);
    }
    @Override
    public MeetingMinutes getMeetingMinutesById(Long id) {
        return meetingMinutesMapper.selectOne(new LambdaUpdateWrapper<MeetingMinutes>().eq(MeetingMinutes::getMeetingId,id));
    }
    @Override
    public void saveMeetingMinutes(MeetingMinutes meetingMinutes) {
        if (meetingMinutes.getId() != null){
            meetingMinutesMapper.updateById(meetingMinutes);
        }else {
            meetingMinutesMapper.insert(meetingMinutes);
        }
    }
    @Override
    public MeetSummaryDto getMeetSummary() {
       return meetApplicationMapper.getMeetSummary();
    }
    @Override
    public List<MeetingSimpleDto> getMeetSummaryItems() {
        return meetApplicationMapper.getMeetSummaryItems();
    }
}