package com.cloudroam.service.impl;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cloudroam.bo.meeting.MeetingBO;
import com.cloudroam.common.LocalUser;
import com.cloudroam.common.enumeration.DailyCommitEnum;
import com.cloudroam.common.enumeration.DeletedEnum;
import com.cloudroam.dto.meeting.CreateMeetingDTO;
import com.cloudroam.dto.meeting.MeetingPageDTO;
import com.cloudroam.dto.meeting.UpdateMeetingDTO;
import com.cloudroam.mapper.MeetingMapperCustom;
import com.cloudroam.mapper.MeetingUserReMapper;
import com.cloudroam.model.*;
import com.cloudroam.mapper.MeetingMapper;
import com.cloudroam.service.BusinessDailyService;
import com.cloudroam.service.MeetingService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cloudroam.service.MeetingUserReService;
import com.cloudroam.service.ProjectDailyService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author generator@TaoJie
* @since 2024-07-05
*/
@Service
public class MeetingServiceImpl extends ServiceImpl implements MeetingService {
@Autowired
private MeetingUserReService meetingUserReService;
@Autowired
private MeetingMapperCustom meetingMapperCustom;
@Autowired
private MeetingUserReMapper meetingUserReMapper;
@Autowired
private ProjectDailyService projectDailyService;
@Autowired
private BusinessDailyService businessDailyService;
@Override
public IPage getMeetingPage(MeetingPageDTO dto) {
Page page=new Page(dto.getPage(),dto.getCount());
return meetingMapperCustom.selectMeetingPage(page,dto);
}
@Transactional
@Override
public MeetingDO insertMeeting(CreateMeetingDTO validator) {
UserDO user = LocalUser.getLocalUser();
MeetingDO meetingDO=new MeetingDO();
BeanUtils.copyProperties(validator,meetingDO);
meetingDO.setId(IdUtil.simpleUUID());
meetingDO.setCreateTime(new Date());
meetingDO.setCreateUserId(String.valueOf(user.getId()));
meetingDO.setCreateUserName(user.getNickname());
meetingDO.setUpdateTime(new Date());
meetingDO.setUpdateUserId(String.valueOf(user.getId()));
meetingDO.setUpdateUserName(user.getNickname());
meetingDO.setIsDeleted(DeletedEnum.DELETED_NO.getCode());
if(!CollectionUtils.isEmpty(validator.getUserIds())){
final List meetingUserReDOList = validator.getUserIds().stream().map(userId -> {
MeetingUserReDO meetingUserReDO = new MeetingUserReDO();
meetingUserReDO.setId(IdUtil.simpleUUID());
meetingUserReDO.setMeetingId(meetingDO.getId());
meetingUserReDO.setMeetingUserId(userId);
return meetingUserReDO;
}).collect(Collectors.toList());
meetingUserReService.saveBatch(meetingUserReDOList);
}
this.baseMapper.insert(meetingDO);
return this.baseMapper.selectById(meetingDO.getId());
}
@Override
public MeetingBO getMeetingById(String id) {
MeetingPageDTO dto=new MeetingPageDTO();
dto.setId(id);
Page page=new Page(dto.getPage(),dto.getCount());
final IPage meetingPage = meetingMapperCustom.selectMeetingWithRelation(page,dto);
// final IPage meetingPage = this.getMeetingPage(dto);
if(!CollectionUtils.isEmpty(meetingPage.getRecords())){
final MeetingBO meetingBO = meetingPage.getRecords().get(0);
final List userIds = meetingBO.getUserDOList().stream().map(user -> user.getId()).collect(Collectors.toList());
meetingBO.setUserIds(userIds);
return meetingBO;
}
return null;
}
@Override
public boolean updateMeeting(UpdateMeetingDTO updateMeetingDTO) {
UserDO user = LocalUser.getLocalUser();
MeetingDO meetingDO=new MeetingDO();
BeanUtils.copyProperties(updateMeetingDTO,meetingDO);
meetingDO.setUpdateTime(new Date());
meetingDO.setUpdateUserId(String.valueOf(user.getId()));
meetingDO.setUpdateUserName(user.getNickname());
// 删除关联人员信息
meetingUserReMapper.delete(new LambdaQueryWrapper().eq(MeetingUserReDO::getMeetingId,meetingDO.getId()));
// 重新关联人员信息
final List meetingUserReDOList = updateMeetingDTO.getUserIds().stream().map(userId -> {
MeetingUserReDO meetingUserReDO = new MeetingUserReDO();
meetingUserReDO.setId(IdUtil.simpleUUID());
meetingUserReDO.setMeetingId(meetingDO.getId());
meetingUserReDO.setMeetingUserId(userId);
return meetingUserReDO;
}).collect(Collectors.toList());
// 保存负责人信息
meetingUserReService.saveBatch(meetingUserReDOList);
return baseMapper.updateById(meetingDO)>0;
}
@Override
@Transactional
public boolean deleteMeetingById(String id) {
// 先更新日志信息
meetingMapperCustom.delProjectDailyProcess(id);
// 删除关联人员信息
// meetingMapperCustom.delMeetingUserByMeetingId(id);
// 删除关联的商务日志信息
businessDailyService.delBusinessDailyByMeetingId(id);
// 删除日志信息,,逻辑删除
return this.baseMapper.deleteById(id)>0;
}
@Override
@Transactional
public boolean commit(String id) {
UserDO user = LocalUser.getLocalUser();
MeetingDO meetingDO=new MeetingDO();
meetingDO.setId(id);
meetingDO.setIsCommit(DailyCommitEnum.COMMITED.getCode());
meetingDO.setCommitTime(LocalDateTime.now());
meetingDO.setCommitUserId(String.valueOf(user.getId()));
meetingDO.setCommitUserName(user.getNickname());
return this.baseMapper.updateById(meetingDO)>0;
}
}