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.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 implements MeetingService { private final MeetingRoomMapper meetingRoomMapper; private final MeetDraftMapper meetDraftMapper; private final MeetApplicationMapper meetApplicationMapper; private final MeetingMinutesMapper meetingMinutesMapper; @Override public IPage getMeetingRoomList(SearchMeetingRoomVo vo) { LambdaQueryWrapper 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(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 getRoomEnum() { LambdaQueryWrapper 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 getMeetingDraftList(SearchMeetingDraftVo vo) { LambdaQueryWrapper 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 getMeetingApplicationList(SearchMeetingApplicationVo vo) { LambdaQueryWrapper 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 meetingUseList(SearchMeetingUseVo vo) { // 查询会议列表 LambdaQueryWrapper 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 meetApplicationList = meetApplicationMapper.selectList(alWrapper); // 根据 roomId 进行分组 Map> roomGroup = meetApplicationList.stream().collect(Collectors.groupingBy(MeetApplication::getRoomId)); // 查询room信息 List roomList = meetingRoomMapper.selectList(new LambdaUpdateWrapper().orderByAsc(MeetingRoom::getId)); List 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 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 getMeetingPublishList(SearchMeetingApplicationVo vo) { LambdaQueryWrapper 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().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 getMeetSummaryItems() { return meetApplicationMapper.getMeetSummaryItems(); } }