src/main/java/com/ruoyi/collaborativeApproval/controller/MeetingController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,120 @@ package com.ruoyi.collaborativeApproval.controller; 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.framework.web.domain.R; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; /** * å ³äºä¼è®®controller * * @author buhuazhen * @date 2025/9/15 * @email 3038525872@qq.com */ @RestController @RequestMapping("/meeting") @RequiredArgsConstructor public class MeetingController { private final MeetingService meetingService; @PostMapping("/roomList") public R getMeetingRoomList(@RequestBody SearchMeetingRoomVo vo) { return R.ok(meetingService.getMeetingRoomList(vo)); } @PostMapping("/saveRoom") public R saveRoom(@RequestBody MeetingRoom meetingRoom) { meetingService.saveMeetRoom(meetingRoom); return R.ok(); } @GetMapping("/room/{id}") public R getRoomById(@PathVariable Long id) { return R.ok(meetingService.findMeetRoomById(id)); } @DeleteMapping("/delRoom/{id}") public R deleteRoom(@PathVariable Long id) { meetingService.deleteMeetingRoom(id); return R.ok(); } @GetMapping("/roomEnum") public R getRoomEnum() { return R.ok(meetingService.getRoomEnum()); } @PostMapping("/draftList") public R getMeetingDraftList(@RequestBody SearchMeetingDraftVo vo) { return R.ok(meetingService.getMeetingDraftList(vo)); } @PostMapping("/saveDraft") public R saveMeetingDraft(@RequestBody MeetDraft meetDraft) { meetingService.saveMeetDraft(meetDraft); return R.ok(); } @DeleteMapping("/delDraft/{id}") public R deleteMeetingDraft(@PathVariable Long id) { meetingService.deleteMeetingDraft(id); return R.ok(); } @PostMapping("/saveMeetingApplication") public R saveMeetApplication(@RequestBody MeetApplication meetApplication) { meetingService.saveMeetApplication(meetApplication); return R.ok(); } @PostMapping("/applicationList") public R getMeetingApplicationList(@RequestBody SearchMeetingApplicationVo vo) { return R.ok(meetingService.getMeetingApplicationList(vo)); } @PostMapping("/meetingUseList") public R meetingUseList(@RequestBody SearchMeetingUseVo vo) { return R.ok(meetingService.meetingUseList(vo)); } @PostMapping("/meetingPublishList") public R meetingPublishList(@RequestBody SearchMeetingApplicationVo vo) { return R.ok(meetingService.getMeetingPublishList(vo)); } @GetMapping("/getMeetingMinutesByMeetingId/{id}") public R getMeetingMinutes(@PathVariable Long id) { return R.ok(meetingService.getMeetingMinutesById(id)); } @PostMapping("/saveMeetingMinutes") public R saveMeetingMinutes(@RequestBody MeetingMinutes meetingMinutes) { meetingService.saveMeetingMinutes(meetingMinutes); return R.ok(); } @GetMapping("/getMeetSummary") public R getMeetSummary() { return R.ok(meetingService.getMeetSummary()); } @GetMapping("/getMeetSummaryItems") public R getMeetSummaryItems() { return R.ok(meetingService.getMeetSummaryItems()); } } src/main/java/com/ruoyi/collaborativeApproval/dto/MeetSummaryDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.collaborativeApproval.dto; import io.swagger.models.auth.In; import lombok.Data; import java.io.Serializable; /** * @author buhuazhen * @date 2025/9/17 * @email 3038525872@qq.com */ @Data public class MeetSummaryDto implements Serializable { // æ»ä¼è®® private Integer total; // è¿è¡ä¸ private Integer underWay; // 已宿 private Integer completed; // å³å°å¼å§ private Integer toStart; } src/main/java/com/ruoyi/collaborativeApproval/dto/MeetUseDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.ruoyi.collaborativeApproval.dto; import lombok.Data; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * @author buhuazhen * @date 2025/9/16 * @email 3038525872@qq.com */ @Data public class MeetUseDto implements Serializable { private Long id; private String name; private List<MeetingItem> meetings = new ArrayList<>(); } src/main/java/com/ruoyi/collaborativeApproval/dto/MeetingItem.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.collaborativeApproval.dto; import lombok.Data; /** * @author buhuazhen * @date 2025/9/16 * @email 3038525872@qq.com */ @Data public class MeetingItem { private Long id; private String title; private String startTime; private String endTime; private String time; private String host; private Integer participants = 0; private Integer status; private String description; private String room; } src/main/java/com/ruoyi/collaborativeApproval/dto/MeetingSimpleDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.ruoyi.collaborativeApproval.dto; import lombok.Data; import java.time.LocalDateTime; /** * @author buhuazhen * @date 2025/9/17 * @email 3038525872@qq.com */ @Data public class MeetingSimpleDto { private Long id; private String title; private Integer status; private LocalDateTime startTime; private LocalDateTime endTime; private String location; private String host; private String participants; private String content; } src/main/java/com/ruoyi/collaborativeApproval/mapper/MeetApplicationMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ package com.ruoyi.collaborativeApproval.mapper; import com.ruoyi.collaborativeApproval.dto.MeetSummaryDto; import com.ruoyi.collaborativeApproval.dto.MeetingSimpleDto; import com.ruoyi.collaborativeApproval.pojo.MeetApplication; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import java.util.List; /** * @author buhuazhen * @description é对表ãmeet_application(ä¼è®®ç³è¯·è¡¨)ãçæ°æ®åºæä½Mapper * @createDate 2025-09-15 15:54:20 * @Entity com.ruoyi.collaborativeApproval.pojo.MeetApplication */ public interface MeetApplicationMapper extends BaseMapper<MeetApplication> { MeetSummaryDto getMeetSummary(); List<MeetingSimpleDto> getMeetSummaryItems(); } src/main/java/com/ruoyi/collaborativeApproval/mapper/MeetDraftMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.collaborativeApproval.mapper; import com.ruoyi.collaborativeApproval.pojo.MeetDraft; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * @author buhuazhen * @description é对表ãmeet_draft(ä¼è®®è稿表)ãçæ°æ®åºæä½Mapper * @createDate 2025-09-15 14:10:49 * @Entity com.ruoyi.collaborativeApproval.pojo.MeetDraft */ public interface MeetDraftMapper extends BaseMapper<MeetDraft> { } src/main/java/com/ruoyi/collaborativeApproval/mapper/MeetingMinutesMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.collaborativeApproval.mapper; import com.ruoyi.collaborativeApproval.pojo.MeetingMinutes; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * @author buhuazhen * @description é对表ãmeeting_minutes(ä¼è®®çºªè¦è¡¨)ãçæ°æ®åºæä½Mapper * @createDate 2025-09-17 10:25:20 * @Entity com.ruoyi.collaborativeApproval.pojo.MeetingMinutes */ public interface MeetingMinutesMapper extends BaseMapper<MeetingMinutes> { } src/main/java/com/ruoyi/collaborativeApproval/mapper/MeetingRoomMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.collaborativeApproval.mapper; import com.ruoyi.collaborativeApproval.pojo.MeetingRoom; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * @author buhuazhen * @description é对表ãmeeting_room(ä¼è®®å®¤è¡¨)ãçæ°æ®åºæä½Mapper * @createDate 2025-09-15 10:32:50 * @Entity com.ruoyi.collaborativeApproval.pojo.MeetingRoom */ public interface MeetingRoomMapper extends BaseMapper<MeetingRoom> { } src/main/java/com/ruoyi/collaborativeApproval/pojo/MeetApplication.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,140 @@ package com.ruoyi.collaborativeApproval.pojo; import com.baomidou.mybatisplus.annotation.*; import java.io.Serializable; import java.time.LocalDate; import java.time.LocalDateTime; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.models.auth.In; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; /** * ä¼è®®ç³è¯·è¡¨ * @TableName meet_application */ @TableName(value ="meet_application") @Data public class MeetApplication implements Serializable { /** * ç³è¯·ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * ä¼è®®ä¸»é¢ */ @TableField(value = "title") private String title; /** * ä¼è®®å®¤ID */ @TableField(value = "room_id") private Long roomId; /** * 主æäºº */ @TableField(value = "host") private String host; /** * ä¼è®®æ¥æ */ @TableField(value = "meeting_date") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate meetingDate; /** * å¼å§æ¶é´ */ @TableField(value = "start_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime startTime; /** * ç»ææ¶é´ */ @TableField(value = "end_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime endTime; /** * åä¼äººåï¼JSONæ ¼å¼åå¨IDæ°ç»ï¼ */ @TableField(value = "participants") private String participants; /** * ä¼è®®è¯´æ */ @TableField(value = "description") private String description; /** * ç³è¯·ç±»åï¼approval:å®¡æ¹æµç¨, department:é¨é¨çº§, notification:éç¥åå¸ï¼ */ @TableField(value = "application_type") private String applicationType; /** * ç¶æï¼0:å¾ å®¡æ¹, 1:å·²éè¿, 2:å·²æç», 3:å·²åæ¶ï¼ */ @TableField(value = "status") private Integer status; /** * ç³è¯·äºº */ @TableField(value = "applicant") private String applicant; /** * å建è */ @TableField(value = "create_user" ,fill = FieldFill.INSERT) private Integer createUser; /** * å建æ¶é´ */ @TableField(value = "create_time",fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; /** * æ´æ°è */ @TableField(value = "update_user",fill = FieldFill.INSERT_UPDATE) private Integer updateUser; /** * æ´æ°æ¶é´ */ @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; /** * ç§æ·ID */ @TableField(value = "tenant_id",fill = FieldFill.INSERT) private Long tenantId; @TableField(value = "publish_status") private Integer publishStatus; @TableField(value = "publish_comment") private String publishComment; @TableField(exist = false) private static final long serialVersionUID = 1L; } src/main/java/com/ruoyi/collaborativeApproval/pojo/MeetDraft.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,128 @@ package com.ruoyi.collaborativeApproval.pojo; import com.baomidou.mybatisplus.annotation.*; import java.io.Serializable; import java.time.LocalDate; import java.time.LocalDateTime; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; /** * ä¼è®®è稿表 * @TableName meet_draft */ @TableName(value ="meet_draft") @Data public class MeetDraft implements Serializable { /** * è稿ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * ä¼è®®ç¼å· */ @TableField(value = "room_id") private Long roomId; /** * ä¼è®®ä¸»é¢ */ @TableField(value = "title") private String title; /** * 主æäºº */ @TableField(value = "host") private String host; /** * ä¼è®®æ¥æ */ @TableField(value = "meeting_date") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate meetingDate; /** * å¼å§æ¶é´ */ @TableField(value = "start_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime startTime; /** * ç»ææ¶é´ */ @TableField(value = "end_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime endTime; /** * åä¼äººæ° */ @TableField(value = "participants") private Integer participants; /** * åä¼äººåå表 */ @TableField(value = "participant_list") private String participantList; /** * ä¼è®®è¯´æ */ @TableField(value = "description") private String description; /** * å建人 */ @TableField(value = "creator") private String creator; /** * å建è */ @TableField(value = "create_user" ,fill = FieldFill.INSERT) private Integer createUser; /** * å建æ¶é´ */ @TableField(value = "create_time",fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; /** * æ´æ°è */ @TableField(value = "update_user",fill = FieldFill.INSERT_UPDATE) private Integer updateUser; /** * æ´æ°æ¶é´ */ @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; /** * ç§æ·ID */ @TableField(value = "tenant_id",fill = FieldFill.INSERT) private Long tenantId; @TableField(exist = false) private static final long serialVersionUID = 1L; } src/main/java/com/ruoyi/collaborativeApproval/pojo/MeetingMinutes.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,79 @@ package com.ruoyi.collaborativeApproval.pojo; import com.baomidou.mybatisplus.annotation.*; import java.io.Serializable; import java.time.LocalDateTime; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; /** * ä¼è®®çºªè¦è¡¨ * @TableName meeting_minutes */ @TableName(value ="meeting_minutes") @Data public class MeetingMinutes implements Serializable { /** * 纪è¦ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * å ³èçä¼è®®ID */ @TableField(value = "meeting_id") private Long meetingId; /** * çºªè¦æ é¢ */ @TableField(value = "title") private String title; /** * 纪è¦å 容ï¼å¯ææ¬ï¼ */ @TableField(value = "content") private String content; /** * å建è */ @TableField(value = "create_user" ,fill = FieldFill.INSERT) private Integer createUser; /** * å建æ¶é´ */ @TableField(value = "create_time",fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; /** * æ´æ°è */ @TableField(value = "update_user",fill = FieldFill.INSERT_UPDATE) private Integer updateUser; /** * æ´æ°æ¶é´ */ @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; /** * ç§æ·ID */ @TableField(value = "tenant_id",fill = FieldFill.INSERT) private Long tenantId; @TableField(exist = false) private static final long serialVersionUID = 1L; } src/main/java/com/ruoyi/collaborativeApproval/pojo/MeetingRoom.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,91 @@ package com.ruoyi.collaborativeApproval.pojo; import com.baomidou.mybatisplus.annotation.*; import java.io.Serializable; import java.time.LocalDateTime; import java.util.Date; import lombok.Data; /** * ä¼è®®å®¤è¡¨ * @TableName meeting_room */ @TableName(value ="meeting_room") @Data public class MeetingRoom implements Serializable { /** * ä¼è®®å®¤ID */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * ä¼è®®å®¤åç§° */ @TableField(value = "name") private String name; /** * ä½ç½® */ @TableField(value = "location") private String location; /** * å®¹çº³äººæ° */ @TableField(value = "capacity") private Integer capacity; /** * 设å¤é ç½®ï¼éå·åéï¼ */ @TableField(value = "equipment") private String equipment; /** * ç¶æï¼1:å¯ç¨ 0:ç¦ç¨ï¼ */ @TableField(value = "status") private Integer status; /** * 夿³¨ */ @TableField(value = "remark") private String remark; /** * å建è */ @TableField(value = "create_user" ,fill = FieldFill.INSERT) private Integer createUser; /** * å建æ¶é´ */ @TableField(value = "create_time",fill = FieldFill.INSERT) private LocalDateTime createTime; /** * æ´æ°è */ @TableField(value = "update_user",fill = FieldFill.INSERT_UPDATE) private Integer updateUser; /** * æ´æ°æ¶é´ */ @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; /** * ç§æ·ID */ @TableField(value = "tenant_id",fill = FieldFill.INSERT) private Long tenantId; @TableField(exist = false) private static final long serialVersionUID = 1L; } src/main/java/com/ruoyi/collaborativeApproval/service/MeetingService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,72 @@ package com.ruoyi.collaborativeApproval.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.collaborativeApproval.dto.MeetSummaryDto; import com.ruoyi.collaborativeApproval.dto.MeetUseDto; import com.ruoyi.collaborativeApproval.dto.MeetingSimpleDto; 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.vo.SearchMeetingApplicationVo; import com.ruoyi.collaborativeApproval.vo.SearchMeetingDraftVo; import com.ruoyi.collaborativeApproval.vo.SearchMeetingRoomVo; import com.ruoyi.collaborativeApproval.vo.SearchMeetingUseVo; import java.util.List; public interface MeetingService{ //****************ä¼è®®å®¤******************************** IPage<MeetingRoom> getMeetingRoomList(SearchMeetingRoomVo vo); void saveMeetRoom(MeetingRoom meetingRoom); MeetingRoom findMeetRoomById(Long id); void deleteMeetingRoom(Long id); List<MeetingRoom> getRoomEnum(); //***************è稿******************************** IPage<MeetDraft> getMeetingDraftList(SearchMeetingDraftVo vo); void saveMeetDraft(MeetDraft meetDraft); void deleteMeetingDraft(Long id); // ************ç³è¯·ä¼è®®************ void saveMeetApplication(MeetApplication meetApplication); // ************ç³è¯·å®¡æ¹************ IPage<MeetApplication> getMeetingApplicationList(SearchMeetingApplicationVo vo); // ****************ä¼è®®ä½¿ç¨æ¥è¯¢******************************** /** * ä¼è®®ä½¿ç¨æ¸ å */ List<MeetUseDto> meetingUseList(SearchMeetingUseVo vo); // ****************ä¼è®®åå¸******************************** IPage<MeetApplication> getMeetingPublishList(SearchMeetingApplicationVo vo); // ****************ä¼è®®çºªè¦******************************** MeetingMinutes getMeetingMinutesById(Long id); void saveMeetingMinutes(MeetingMinutes meetingMinutes); MeetSummaryDto getMeetSummary(); List<MeetingSimpleDto> getMeetSummaryItems(); } src/main/java/com/ruoyi/collaborativeApproval/service/impl/MeetingServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,243 @@ 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<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(); } } src/main/java/com/ruoyi/collaborativeApproval/vo/SearchMeetingApplicationVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.collaborativeApproval.vo; import com.ruoyi.dto.PageDto; import lombok.Data; /** * @author buhuazhen * @date 2025/9/16 * @email 3038525872@qq.com */ @Data public class SearchMeetingApplicationVo extends PageDto { private String title; private String applicant; private String status; } src/main/java/com/ruoyi/collaborativeApproval/vo/SearchMeetingDraftVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.ruoyi.collaborativeApproval.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.dto.PageDto; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; import java.util.Date; /** * @author buhuazhen * @date 2025/9/15 * @email 3038525872@qq.com */ @Data public class SearchMeetingDraftVo extends PageDto { private String title; @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date meetingDate; } src/main/java/com/ruoyi/collaborativeApproval/vo/SearchMeetingRoomVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.ruoyi.collaborativeApproval.vo; import com.ruoyi.dto.PageDto; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; /** * @author buhuazhen * @date 2025/9/15 * @email 3038525872@qq.com */ @EqualsAndHashCode(callSuper = true) @Data @AllArgsConstructor @NoArgsConstructor public class SearchMeetingRoomVo extends PageDto { private String name; private String location; } src/main/java/com/ruoyi/collaborativeApproval/vo/SearchMeetingUseVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.ruoyi.collaborativeApproval.vo; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; /** * @author buhuazhen * @date 2025/9/16 * @email 3038525872@qq.com */ @Data public class SearchMeetingUseVo { @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date meetingDate; } src/main/resources/mapper/collaborativeApproval/MeetApplicationMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,80 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.collaborativeApproval.mapper.MeetApplicationMapper"> <resultMap id="BaseResultMap" type="com.ruoyi.collaborativeApproval.pojo.MeetApplication"> <id property="id" column="id" jdbcType="BIGINT"/> <result property="title" column="title" jdbcType="VARCHAR"/> <result property="type" column="type" jdbcType="VARCHAR"/> <result property="roomId" column="room_id" jdbcType="BIGINT"/> <result property="host" column="host" jdbcType="VARCHAR"/> <result property="meetingDate" column="meeting_date" jdbcType="DATE"/> <result property="startTime" column="start_time" jdbcType="TIMESTAMP"/> <result property="endTime" column="end_time" jdbcType="TIMESTAMP"/> <result property="participants" column="participants" jdbcType="VARCHAR"/> <result property="description" column="description" jdbcType="VARCHAR"/> <result property="applicationType" column="application_type" jdbcType="VARCHAR"/> <result property="status" column="status" jdbcType="TINYINT"/> <result property="applicant" column="applicant" jdbcType="VARCHAR"/> <result property="createUser" column="create_user" jdbcType="BIGINT"/> <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> <result property="updateUser" column="update_user" jdbcType="BIGINT"/> <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> <result property="tenantId" column="tenant_id" jdbcType="BIGINT"/> </resultMap> <sql id="Base_Column_List"> id,title,type, room_id,host,meeting_date, start_time,end_time,participants, description,application_type,status, applicant,create_user,create_time, update_user,update_time,tenant_id </sql> <select id="getMeetSummary" resultType="com.ruoyi.collaborativeApproval.dto.MeetSummaryDto"> SELECT COUNT(*) AS total, SUM(CASE WHEN meeting_date = CURDATE() AND start_time <![CDATA[<=]]> NOW() AND end_time <![CDATA[>]]> NOW() THEN 1 ELSE 0 END) AS underWay, SUM(CASE WHEN (meeting_date <![CDATA[<]]> CURDATE() OR (meeting_date = CURDATE() AND end_time <![CDATA[<=]]> NOW())) THEN 1 ELSE 0 END) AS completed, SUM(CASE WHEN meeting_date <![CDATA[>=]]> CURDATE() AND start_time <![CDATA[>]]> NOW() THEN 1 ELSE 0 END) AS toStart FROM meet_application as t1 where status = 1 OR application_type='notification' </select> <select id="getMeetSummaryItems" resultType="com.ruoyi.collaborativeApproval.dto.MeetingSimpleDto"> select t1.id as id, t1.title as title, (CASE WHEN t1.meeting_date = CURDATE() AND t1.start_time <![CDATA[<=]]> NOW() AND t1.end_time <![CDATA[>]]> NOW() THEN 2 WHEN t1.meeting_date <![CDATA[>=]]> CURDATE() AND t1.start_time <![CDATA[>]]> NOW() then 1 ELSE 0 end) as status, t1.start_time as start_time, t1.end_time as end_time, CONCAT(t2.name, '(', t2.location, ')') as location, t1.host as host, t1.participants as participants, t3.content as content from meet_application as t1 left join meeting_room as t2 on t1.room_id = t2.id left join meeting_minutes as t3 on t1.id = t3.meeting_id where t1.status = 1 OR t1.application_type = 'notification' order by (CASE WHEN t1.meeting_date = CURDATE() AND t1.start_time <![CDATA[<=]]> NOW() AND t1.end_time <![CDATA[>]]> NOW() THEN 2 WHEN t1.meeting_date <![CDATA[>=]]> CURDATE() AND t1.start_time > NOW() then 1 ELSE 0 end) desc, t1.end_time desc </select> </mapper> src/main/resources/mapper/collaborativeApproval/MeetDraftMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.collaborativeApproval.mapper.MeetDraftMapper"> <resultMap id="BaseResultMap" type="com.ruoyi.collaborativeApproval.pojo.MeetDraft"> <id property="id" column="id" jdbcType="BIGINT"/> <result property="roomId" column="room_id" jdbcType="BIGINT"/> <result property="title" column="title" jdbcType="VARCHAR"/> <result property="host" column="host" jdbcType="VARCHAR"/> <result property="meetingDate" column="meeting_date" jdbcType="DATE"/> <result property="startTime" column="start_time" jdbcType="TIMESTAMP"/> <result property="endTime" column="end_time" jdbcType="TIMESTAMP"/> <result property="participants" column="participants" jdbcType="INTEGER"/> <result property="participantList" column="participant_list" jdbcType="VARCHAR"/> <result property="description" column="description" jdbcType="VARCHAR"/> <result property="creator" column="creator" jdbcType="VARCHAR"/> <result property="createUser" column="create_user" jdbcType="VARCHAR"/> <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> <result property="updateUser" column="update_user" jdbcType="VARCHAR"/> <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> <result property="tenantId" column="tenant_id" jdbcType="BIGINT"/> </resultMap> <sql id="Base_Column_List"> id,room_id,title, host,meeting_date,start_time, end_time,participants,participant_list, description,creator,create_user, create_time,update_user,update_time, tenant_id </sql> </mapper> src/main/resources/mapper/collaborativeApproval/MeetingMinutesMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.collaborativeApproval.mapper.MeetingMinutesMapper"> <resultMap id="BaseResultMap" type="com.ruoyi.collaborativeApproval.pojo.MeetingMinutes"> <id property="id" column="id" jdbcType="BIGINT"/> <result property="meetingId" column="meeting_id" jdbcType="BIGINT"/> <result property="title" column="title" jdbcType="VARCHAR"/> <result property="content" column="content" jdbcType="VARCHAR"/> <result property="createUser" column="create_user" jdbcType="BIGINT"/> <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> <result property="updateUser" column="update_user" jdbcType="BIGINT"/> <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> <result property="tenantId" column="tenant_id" jdbcType="BIGINT"/> </resultMap> <sql id="Base_Column_List"> id,meeting_id,title, content,create_user,create_time, update_user,update_time,tenant_id </sql> </mapper> src/main/resources/mapper/collaborativeApproval/MeetingRoomMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.collaborativeApproval.mapper.MeetingRoomMapper"> <resultMap id="BaseResultMap" type="com.ruoyi.collaborativeApproval.pojo.MeetingRoom"> <id property="id" column="id" jdbcType="BIGINT"/> <result property="name" column="name" jdbcType="VARCHAR"/> <result property="location" column="location" jdbcType="VARCHAR"/> <result property="capacity" column="capacity" jdbcType="INTEGER"/> <result property="equipment" column="equipment" jdbcType="VARCHAR"/> <result property="status" column="status" jdbcType="TINYINT"/> <result property="remark" column="remark" jdbcType="VARCHAR"/> <result property="createUser" column="create_user" jdbcType="VARCHAR"/> <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/> <result property="updateUser" column="update_user" jdbcType="VARCHAR"/> <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/> <result property="tenantId" column="tenant_id" jdbcType="BIGINT"/> </resultMap> <sql id="Base_Column_List"> id,name,location, capacity,equipment,status, remark,create_user,create_time, update_user,update_time,tenant_id </sql> </mapper>