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(); 
 | 
    } 
 | 
} 
 |