package com.cloudroam.controller.v1; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.cloudroam.bo.meeting.MeetingBO; import com.cloudroam.bo.meeting.MeetingDateUserDaily; import com.cloudroam.bo.meeting.MeetingUserDaily; import com.cloudroam.bo.businessDaily.BusinessDailyBO; import com.cloudroam.common.LocalUser; import com.cloudroam.common.annotation.LogParams; import com.cloudroam.common.util.BeanCopyUtil; import com.cloudroam.common.util.PageUtil; import com.cloudroam.dto.meeting.CreateMeetingDTO; import com.cloudroam.dto.meeting.MeetingPageDTO; import com.cloudroam.dto.meeting.UpdateMeetingDTO; import com.cloudroam.dto.projectDaily.UpdateProjectDailyProcessDTO; import com.cloudroam.model.ProjectDailyDO; import com.cloudroam.model.UserDO; import com.cloudroam.service.MailService; import com.cloudroam.service.MeetingService; import com.cloudroam.service.ProjectDailyService; import io.github.talelin.autoconfigure.exception.NotFoundException; import io.github.talelin.core.annotation.Logger; import io.github.talelin.core.annotation.LoginRequired; import io.github.talelin.core.annotation.PermissionMeta; import io.github.talelin.core.annotation.PermissionModule; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import com.cloudroam.model.MeetingDO; import com.cloudroam.vo.DeletedVO; import com.cloudroam.vo.PageResponseVO; import com.cloudroam.vo.UpdatedVO; import java.time.LocalDateTime; import java.util.List; /** * @author generator@TaoJie * @since 2024-07-05 */ @RestController @RequestMapping("/v1/meeting") @PermissionModule("会议纪要") public class MeetingController { @Autowired private MeetingService meetingService; @Autowired private ProjectDailyService projectDailyService; @Autowired private MailService mailService; @PostMapping("") @PermissionMeta(value = "会议纪要创建", mount =true) @Logger(template = "{user.nickname} 创建了会议纪要 ") @LoginRequired @LogParams public MeetingDO create(@RequestBody @Validated CreateMeetingDTO validator) { final MeetingDO meetingDO = meetingService.insertMeeting(validator); return meetingDO; } @PutMapping("/{id}") @LoginRequired @PermissionMeta(value = "会议纪要更新",mount = true) @Logger(template = "{user.nickname} 更新了会议纪要 ") public UpdatedVO update(@PathVariable String id,@RequestBody @Validated UpdateMeetingDTO updateMeetingDTO) { if(StrUtil.isBlank(id)){ throw new NotFoundException("传入的Id不能为空"); } MeetingDO meetingDO=meetingService.getById(id); if(meetingDO == null){ throw new NotFoundException("日志不存在"); } meetingService.updateMeeting(updateMeetingDTO); return new UpdatedVO(); } @LoginRequired @PermissionMeta(value = "日志进度更新",mount = false) @Logger(template = "{user.nickname} 更新了日志进度 ") @PutMapping("/daily/process/{id}") public UpdatedVO updateDailyProcess(@PathVariable String id,@RequestBody @Validated UpdateProjectDailyProcessDTO validator) { if(StrUtil.isBlank(validator.getId())){ throw new NotFoundException("传入的Id不能为空"); } ProjectDailyDO projectDailyDO=projectDailyService.getById(validator.getId()); if(projectDailyDO == null){ throw new NotFoundException("日志不存在"); } ProjectDailyDO updateProjectDaily=new ProjectDailyDO(); BeanCopyUtil.copyProperties(validator,updateProjectDaily); final UserDO userDO = LocalUser.getLocalUser(); updateProjectDaily.setDailyProcessUserId(String.valueOf(userDO.getId())); updateProjectDaily.setDailyProcessUserName(userDO.getNickname()); updateProjectDaily.setDailyProcessTime(LocalDateTime.now()); projectDailyService.saveOrUpdate(updateProjectDaily); return new UpdatedVO(); } @DeleteMapping("/{id}") @LoginRequired @PermissionMeta(value = "会议纪要删除",mount = false) @Logger(template = "{user.nickname} 会议纪要删除 ") public DeletedVO delete(@PathVariable String id) { if(StrUtil.isBlank(id)){ throw new NotFoundException("传入的Id不能为空"); } MeetingDO meetingDO=meetingService.getById(id); if(meetingDO == null){ throw new NotFoundException("日志不存在"); } meetingService.deleteMeetingById(id); return new DeletedVO(); } @GetMapping("/{id}") public MeetingBO get(@PathVariable(value = "id") String id) { return meetingService.getMeetingById(id); } @PostMapping("/page") @PermissionMeta(value = "会议纪要", module = "工作日志",mount = true) @Logger(template = "{user.nickname} 查看了会议纪要") @LoginRequired public PageResponseVO page( @RequestBody @Validated MeetingPageDTO dto ) { IPage iPage=meetingService.getMeetingPage(dto); return PageUtil.build(iPage); } @PostMapping("/daily/list") @PermissionMeta(value = "提取人员日志信息" ,mount = false) @Logger(template = "{user.nickname} 提取人员日志信息") @LoginRequired public List dailyList( @RequestBody @Validated MeetingPageDTO dto ) { return projectDailyService.getProjectDailybyUserList(dto); } @PostMapping("/daily/date/list") @PermissionMeta(value = "根据日期提取人员日志信息" ,mount = false) @Logger(template = "{user.nickname} 根据日期提取人员日志信息") @LoginRequired public List dateDailyList( @RequestBody @Validated MeetingPageDTO dto ) { return projectDailyService.getDateDailyList(dto); } @PostMapping("/meetingid/date/list") @PermissionMeta(value = "根据日期提取人员日志信息" ,mount = false) @Logger(template = "{user.nickname} 根据日期提取人员日志信息") @LoginRequired public List getDailyDateByMeetingId( @RequestBody @Validated MeetingPageDTO dto ) { return projectDailyService.getDailyDateByMeetingId(dto); } @PostMapping("/daily/withMeetingId/list") @PermissionMeta(value = "提取会议人员日志信息" ,mount = false) @Logger(template = "{user.nickname} 提取会议人员日志信息") @LoginRequired public List dailyMeetingListWithMeetingId( @RequestBody @Validated MeetingPageDTO dto ) { return projectDailyService.getProjectDailyMeetingbyUserList(dto); } @PostMapping("/business/daily/list") @PermissionMeta(value = "提取商务日志信息" ,mount = false) @Logger(template = "{user.nickname} 提取商务日志信息") @LoginRequired public List businessList( @RequestBody @Validated MeetingPageDTO dto ) { return projectDailyService.getProjectBusinessDailybyMeetingId(dto); } @PutMapping("/commit/{id}") @LoginRequired @PermissionMeta(value = "会议纪要提交") @Logger(template = "{user.nickname} 提交了会议纪要") public UpdatedVO commit(@PathVariable String id) { UserDO commitUser=LocalUser.getLocalUser(); if(StrUtil.isBlank(id)){ throw new NotFoundException("传入的Id不能为空"); } MeetingDO meetingDO=meetingService.getById(id); if(meetingDO == null){ throw new NotFoundException("会议纪要不存在"); } meetingService.commit(id); // 异步邮件发送 mailService.sendMeetingCommitMail(meetingService.getMeetingById(id),commitUser); return new UpdatedVO(); } }