Browse Source

会议室预约

sangwenwei 8 months ago
parent
commit
47c548f3f1

+ 1 - 0
jeeplus-common/jeeplus-common-mybatis-plus/src/main/java/com/jeeplus/config/TenantLineHandlerImpl.java

@@ -82,6 +82,7 @@ public class TenantLineHandlerImpl implements TenantLineHandler {
                 || (tableName.startsWith ( "ccpm_" ))
                 || (tableName.startsWith ( "signature_" ))
                 || (tableName.startsWith ( "consultancy_" ))
+                || (tableName.startsWith ( "meeting_" ))
                 || (tableName.startsWith ( "program_" ))) {
             return true;
         }

+ 142 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/meetingRoom/controller/MeetingRoomController.java

@@ -0,0 +1,142 @@
+package com.jeeplus.pubmodules.meetingRoom.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.common.excel.ExcelOptions;
+import com.jeeplus.common.excel.annotation.ExportMode;
+import com.jeeplus.common.utils.ResponseUtil;
+import com.jeeplus.flowable.feign.IFlowableApi;
+import com.jeeplus.logging.annotation.ApiLog;
+import com.jeeplus.logging.constant.enums.LogTypeEnum;
+import com.jeeplus.pubmodules.holiday.utils.EasyPoiUtil;
+import com.jeeplus.pubmodules.meetingRoom.domain.MeetingRoom;
+import com.jeeplus.pubmodules.meetingRoom.service.MeetingRoomService;
+import com.jeeplus.pubmodules.meetingRoom.service.dto.MeetingRoomDTO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Api(tags ="会议室预约")
+@RestController
+@RequestMapping(value = "/meetingRoom")
+public class MeetingRoomController {
+
+    @Autowired
+    private MeetingRoomService meetingRoomService;
+
+    @Resource
+    private IFlowableApi flowTaskService;
+
+
+    /**
+     * 会议室列表
+     */
+    @ApiOperation(value = "会议室列表")
+    @GetMapping(value = "/list")
+    public ResponseEntity<IPage<MeetingRoom>> findPageList(MeetingRoom meetingRoom, Page<MeetingRoom> page) throws Exception {
+       IPage<MeetingRoom> iPage= meetingRoomService.findPageList(meetingRoom,page);
+       iPage.getRecords().stream().forEach(i ->{
+           if (StringUtils.isNotBlank(i.getTaskId()) && StringUtils.isNotBlank(i.getStatus())) {
+               if ("2".equals(i.getStatus())) { // “审核中”的数据要获取数据审核人
+                   i.setAuditUserIds(flowTaskService.getTaskAuditUsers(i.getTaskId()));  // 获取数据审核人
+               }
+           }
+       });
+       return ResponseEntity.ok(iPage);
+    }
+
+
+    /**
+     * 会议室添加/修改
+     */
+    @ApiOperation(value = "会议室添加/修改")
+    @PostMapping(value = "/saveForm")
+    public ResponseEntity saveForm(@RequestBody MeetingRoomDTO meetingRoomDTO) throws ParseException {
+        String id=meetingRoomService.saveForm(meetingRoomDTO);
+        return ResponseUtil.newInstance().add("businessTable","meeting_room").add("businessId",id).ok("操作成功");
+    }
+
+    /**
+     * 根据id查询会议室信息
+     */
+    @ApiOperation(value = "根据id查询会议室信息")
+    @GetMapping(value = "/findById")
+    public ResponseEntity<MeetingRoomDTO> findById(@RequestParam String id){
+        MeetingRoomDTO roomDTO=meetingRoomService.findById(id);
+        return ResponseEntity.ok(roomDTO);
+    }
+
+    /**
+     * 根据id修改状态status
+     * @param
+     */
+    @ApiOperation(value = "根据id修改状态status")
+    @PostMapping(value = "/updateStatusById")
+    public void updateStatusById(String id,String status) {
+        meetingRoomService.updateStatusById(id,status);
+    }
+
+    /**
+     * 根据会议开始时间查询最近结束的会议时间
+     */
+    @ApiOperation(value = "根据会议开始时间查询最近结束的会议时间")
+    @GetMapping(value = "/checkTime")
+    public Map<String, String> checkTime(@RequestParam String startDate,@RequestParam String meetNumber) throws ParseException {
+        Map<String, String> map=meetingRoomService.checkTime(startDate,meetNumber);
+        return map;
+    }
+
+    /**
+     * 根据id删除
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "根据id删除")
+    @GetMapping(value = "/deleteById")
+    public ResponseEntity<String> deleteById(@RequestParam String id){
+        String s = meetingRoomService.deleteById(id);
+        return ResponseEntity.ok(s);
+    }
+
+    @ApiLog(value = "导出会议室预约数据", type = LogTypeEnum.EXPORT)
+    @GetMapping("export")
+    @ApiOperation(value = "导出会议室预约数据")
+    public void exportFile(MeetingRoom meetingRoom, Page <MeetingRoom> page, ExcelOptions options, HttpServletResponse response) throws Exception {
+        String fileName = options.getFilename();
+        String sheetName = options.getSheetName();
+        List<MeetingRoom> result = new ArrayList<>();
+        if ( ExportMode.current.equals ( options.getMode() ) ) {
+            result = meetingRoomService.findPageList(meetingRoom,page).getRecords();
+        } else if (ExportMode.selected.equals ( options.getMode() )) {
+            result = meetingRoomService.findPageList(meetingRoom,page).getRecords().stream ( ).filter ( item ->
+                    options.getSelectIds ( ).contains ( item.getId ( ) )
+            ).collect ( Collectors.toList ( ) );
+        } else {
+            page.setSize (-1);
+            page.setCurrent (0);
+            result = meetingRoomService.findPageList(meetingRoom,page).getRecords();
+        }
+        EasyPoiUtil.exportExcel ( result, sheetName,  sheetName, MeetingRoom.class, fileName, response );
+
+    }
+
+
+
+
+
+
+
+}

+ 129 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/meetingRoom/domain/MeetingRoom.java

@@ -0,0 +1,129 @@
+package com.jeeplus.pubmodules.meetingRoom.domain;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.jeeplus.core.domain.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.sql.Time;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("meeting_room")
+public class MeetingRoom extends BaseEntity {
+
+    private String id;
+
+    /**
+     * 标题
+     */
+    @Excel(name = "标题",width = 16)
+    private String title;
+    @Excel(name = "会议开始时间",width = 16,exportFormat = "yyyy-MM-dd HH:mm:ss")
+    @TableField(exist = false)
+    private Date roomDateTime;
+    @Excel(name = "会议时长",width = 16)
+    private String longTime;
+
+    /**
+     * 会议开始,结束时间,开始日期
+     */
+    private Time startTime;
+
+    private Time endTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private String startDate;
+
+    @TableField(exist = false)
+    private String startDateTime;
+    @TableField(exist = false)
+    private String endDateTime;
+
+    /**
+     * 会议时长
+     */
+    private Integer duration;
+
+    /**
+     * 会议说明
+     */
+    private String remarks;
+
+    /**
+     * 流程id
+     */
+    private String procInsId;
+
+    /**
+     * 流程信息
+     */
+    private String processDefinitionId;
+    @TableField(exist = false)
+    private String taskId;
+
+    /**
+     * 状态
+     */
+    private String status;
+
+    /**
+     * 会议室编号
+     */
+    private String meetNumber;
+
+    @TableField(exist = false)
+    @Excel(name = "会议室编号",width = 16)
+    private String meetNumberLabel;
+
+    /**
+     * 创建时间
+     */
+    @TableField(exist = false)
+    private String[] meetingDates;
+
+    /**
+     * 创建人
+     */
+    @TableField(exist = false)
+    @Excel(name = "会议发起人",width = 16)
+    private String createName;
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "发起时间",width = 16,exportFormat = "yyyy-MM-dd")
+    private Date createDate;
+
+    /**
+     * 部门
+     */
+    @TableField(exist = false)
+    private String officeId;
+    @TableField(exist = false)
+    @Excel(name = "发起人部门",width = 16)
+    private String officeName;
+    @TableField(exist = false)
+    @Excel(name = "状态",width = 16)
+    private String roomTypeName;
+
+    /**
+     * 数据审核人
+     */
+    @TableField(exist = false)
+    private List<String> auditUserIds;
+
+    private static final long serialVersionUID = 1L;
+
+
+
+
+
+
+}

+ 27 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/meetingRoom/mapper/MeetingRoomMapper.java

@@ -0,0 +1,27 @@
+package com.jeeplus.pubmodules.meetingRoom.mapper;
+
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.pubmodules.meetingRoom.domain.MeetingRoom;
+import com.jeeplus.pubmodules.meetingRoom.service.dto.MeetingRoomDTO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+@Mapper
+public interface MeetingRoomMapper extends BaseMapper<MeetingRoom> {
+    @InterceptorIgnore(tenantLine = "true")
+    IPage<MeetingRoom> findPageList(Page<MeetingRoom> page, @Param(Constants.WRAPPER) QueryWrapper<MeetingRoom> meetingRoomQueryWrapper);
+    @InterceptorIgnore(tenantLine = "true")
+    MeetingRoomDTO findById(@Param("id") String id);
+
+    void updateStatusById(@Param("id")String id, @Param("status")String status);
+
+    List<MeetingRoom> checkTime(@Param("date")Date date,@Param("meetNumber") String meetNumber);
+}

+ 99 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/meetingRoom/mapper/xml/MeetingRoomMapper.xml

@@ -0,0 +1,99 @@
+<?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.jeeplus.pubmodules.meetingRoom.mapper.MeetingRoomMapper">
+
+    <select id="findPageList" resultType="com.jeeplus.pubmodules.meetingRoom.domain.MeetingRoom">
+        select distinct
+            a.id,
+            a.create_by_id,
+            su.name as createName,
+            a.title,
+            a.start_time,
+            a.start_date,
+            a.end_time,
+            a.duration,
+            a.meet_number,
+            a.remarks,
+            a.create_time as createDate,
+            concat(a.start_date,' ',a.start_time) as roomDateTime,
+            (case when a.duration = '30' then concat(a.duration,'分钟')
+            when a.duration not in ('24','30') then concat(a.duration,'小时')
+            when a.duration = '24' then '全天' else '' end) as longTime,
+            (select dv.label from sys_dict_value dv LEFT JOIN sys_dict_type dt on dt.id=dv.dict_type_id where dv.value=a.status and dt.type='program_project_list_info_status') as roomTypeName,
+            (select dv.label from sys_dict_value dv LEFT JOIN sys_dict_type dt on dt.id=dv.dict_type_id where dv.value=a.meet_number and dt.type='meet_number') as meetNumberLabel,
+            a.status,
+            so.id as officeId,
+            so.name as officeName,
+            a.proc_ins_id as procInsId ,
+            a.process_definition_id as processDefinitionId,
+            art.ID_ as task_id
+        from
+            meeting_room a
+        left join sys_user su on a.create_by_id = su.id and su.del_flag = 0
+        left join sys_office so on su.office_id = so.id
+        left join act_ru_task art ON a.proc_ins_id = art.PROC_INST_ID_
+        left join sys_user_manage_office sumo on sumo.office_id = su.office_id
+        ${ew.customSqlSegment}
+        ORDER BY a.create_time DESC
+    </select>
+
+    <select id="findById" resultType="com.jeeplus.pubmodules.meetingRoom.service.dto.MeetingRoomDTO">
+        select
+            a.id,
+            a.create_by_id,
+            su.name as createName,
+            a.title,
+            a.start_time,
+            a.start_date,
+            a.duration,
+            a.meet_number,
+            a.remarks,
+            a.create_time as createDate,
+            a.status,
+            so.id as officeId,
+            so.name as officeName,
+            a.proc_ins_id as procInsId ,
+            a.process_definition_id as processDefinitionId,
+            art.ID_ as task_id
+        from
+            meeting_room a
+        left join sys_user su on a.create_by_id = su.id and su.del_flag = 0
+        left join sys_office so on su.office_id = so.id
+        left join act_ru_task art ON a.proc_ins_id = art.PROC_INST_ID_
+        where a.id=#{id}
+    </select>
+
+    <update id="updateStatusById">
+        update meeting_room set status=#{status} where id=#{id}
+    </update>
+
+    <select id="checkTime" resultType="com.jeeplus.pubmodules.meetingRoom.domain.MeetingRoom">
+        select
+             a.id,
+            a.create_by_id,
+            su.name as createName,
+            a.title,
+            a.start_time,
+            a.end_time,
+            a.duration,
+            a.meet_number,
+            a.remarks,
+            a.create_time as createDate,
+            a.status,
+            so.id as officeId,
+            so.name as officeName,
+            a.proc_ins_id as procInsId ,
+            a.process_definition_id as processDefinitionId,
+            art.ID_ as task_id
+        from
+            meeting_room a
+        left join sys_user su on a.create_by_id = su.id and su.del_flag = 0
+        left join sys_office so on su.office_id = so.id
+        left join act_ru_task art ON a.proc_ins_id = art.PROC_INST_ID_
+        where (a.start_date=#{date}) and a.meet_number = #{meetNumber} and a.del_flag =0 and  a.`status` not in ('1', '3','4')
+        order by a.end_time DESC
+    </select>
+
+</mapper>

+ 259 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/meetingRoom/service/MeetingRoomService.java

@@ -0,0 +1,259 @@
+package com.jeeplus.pubmodules.meetingRoom.service;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import com.jeeplus.common.TokenProvider;
+import com.jeeplus.core.query.QueryWrapperGenerator;
+import com.jeeplus.pubmodules.meetingRoom.domain.MeetingRoom;
+import com.jeeplus.pubmodules.meetingRoom.mapper.MeetingRoomMapper;
+import com.jeeplus.pubmodules.meetingRoom.service.dto.MeetingRoomDTO;
+import com.jeeplus.sys.feign.IUserApi;
+import com.jeeplus.sys.service.dto.UserDTO;
+import com.jeeplus.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.Time;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.*;
+
+@Service
+public class MeetingRoomService {
+
+    @Autowired
+    private MeetingRoomMapper meetingRoomMapper;
+
+
+    /**
+     * 会议室列表查询
+     * @param meetingRoom
+     * @param page
+     * @return
+     */
+    public IPage<MeetingRoom> findPageList(MeetingRoom meetingRoom, Page<MeetingRoom> page) throws Exception {
+        QueryWrapper<MeetingRoom> meetingRoomQueryWrapper = QueryWrapperGenerator.buildQueryCondition(meetingRoom, MeetingRoom.class);
+        if (ObjectUtil.isNotEmpty(meetingRoomQueryWrapper) && StringUtils.isNotBlank(meetingRoom.getCreateById())){
+            meetingRoomQueryWrapper.eq("a.create_by_id",meetingRoom.getCreateById());
+        }
+        meetingRoomQueryWrapper.eq("a.del_flag",0);
+        //会议开始时间
+        if (meetingRoom.getMeetingDates() != null && meetingRoom.getMeetingDates().length >0){
+            meetingRoomQueryWrapper.between("a.start_date",meetingRoom.getMeetingDates()[0],meetingRoom.getMeetingDates()[1]);
+        }
+        //标题
+        if (StringUtils.isNotBlank(meetingRoom.getTitle())){
+            meetingRoomQueryWrapper.like("a.title",meetingRoom.getTitle());
+        }
+        //发起人部门
+        if (StringUtils.isNotBlank(meetingRoom.getOfficeId())){
+            meetingRoomQueryWrapper.eq("so.id",meetingRoom.getOfficeId());
+        }
+        //会议室编号
+        if (StringUtils.isNotBlank(meetingRoom.getMeetNumber())){
+            meetingRoomQueryWrapper.eq("a.meet_number",meetingRoom.getMeetNumber());
+        }
+        IPage<MeetingRoom> iPage=meetingRoomMapper.findPageList(page,meetingRoomQueryWrapper);
+        iPage.getRecords().stream().forEach(item->{
+            if (ObjectUtils.isNotEmpty(item.getStartDate()) && ObjectUtils.isNotEmpty(item.getStartTime())){
+                item.setStartDateTime(item.getStartDate()+" "+item.getStartTime());
+            }else {
+                item.setStartDateTime("");
+            }
+            if (ObjectUtils.isNotEmpty(item.getStartDate()) && ObjectUtils.isNotEmpty(item.getEndTime())){
+                item.setEndDateTime(item.getStartDate()+" "+item.getEndTime());
+            }else {
+                item.setEndDateTime("");
+            }
+
+        });
+
+        return iPage;
+    }
+
+    /**
+     * 会议室新增或修改
+     * @param meetingRoomDTO
+     * @return
+     */
+    public String saveForm(MeetingRoomDTO meetingRoomDTO) throws ParseException {
+        UserDTO userDTO = SpringUtil.getBean(IUserApi.class).getByToken(TokenProvider.getCurrentToken());
+        //创建会议室对象并进行复制
+        MeetingRoom meetingRoom = new MeetingRoom();
+        BeanUtil.copyProperties(meetingRoomDTO,meetingRoom);
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        SimpleDateFormat Format = new SimpleDateFormat("HH:mm");
+        if (StringUtils.isNotBlank(meetingRoomDTO.getStartDate())){
+            meetingRoom.setStartDate(meetingRoomDTO.getStartDate()); // 会议开始日期
+        }
+        if (ObjectUtils.isNotEmpty(meetingRoomDTO.getStartTime())){
+            meetingRoom.setStartTime(meetingRoomDTO.getStartTime());// 会议开始时间
+        }
+        if (ObjectUtils.isNotEmpty(meetingRoomDTO.getDuration())){
+            Integer timeLong=0;
+            //会议时长计算
+            if (meetingRoomDTO.getDuration()==30){
+                timeLong=30*60;
+            }
+            if (meetingRoomDTO.getDuration() != 30 && meetingRoomDTO.getDuration() != 24 ){
+                timeLong=meetingRoomDTO.getDuration()*60*60;
+            }
+            /**
+             * 会议结束时间
+             */
+            //将开始时间转为LocalTime
+            LocalTime localTime = meetingRoom.getStartTime().toLocalTime();
+            //调用plus方法获取timglong之后的时间
+            LocalTime plus = localTime.plus(timeLong, ChronoUnit.SECONDS);
+            //设置时间格式
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
+            String formattedDate = plus.format(formatter);
+            //生成新的time类型的时间
+            Time time = Time.valueOf(formattedDate);
+            meetingRoom.setEndTime(time);
+            //当会议时长为24时意味着全天,那么将结束日期设置为当天最后时间节点即可
+            if (meetingRoomDTO.getDuration()==24){
+                Time endOfDay = Time.valueOf(LocalTime.of(23, 59, 59));
+                meetingRoom.setEndTime(endOfDay);
+            }
+
+        }
+
+        meetingRoom.setTitle(meetingRoomDTO.getTitle()); //标题
+
+         //会议时长
+        meetingRoom.setDuration(meetingRoomDTO.getDuration());
+        meetingRoom.setRemarks(meetingRoomDTO.getRemarks()); //会议说明
+        meetingRoom.setUpdateById(userDTO.getId());
+        meetingRoom.setUpdateTime(new Date());
+        meetingRoom.setDelFlag(0);
+
+
+        if (StringUtils.isNotBlank(meetingRoomDTO.getId())){
+            meetingRoomMapper.updateById(meetingRoom);
+        }else {
+            meetingRoom.setCreateById(userDTO.getId());
+            meetingRoom.setCreateTime(new Date());
+            meetingRoomMapper.insert(meetingRoom);
+        }
+        return meetingRoom.getId();
+
+    }
+
+    /**
+     * 根据id查询
+     * @param id
+     * @return
+     */
+    public MeetingRoomDTO findById(String id) {
+        MeetingRoomDTO roomDTO= meetingRoomMapper.findById(id);
+        return roomDTO;
+    }
+
+    /**
+     * 根据id修改状态
+     * @param id
+     * @param status
+     */
+    public void updateStatusById(String id, String status) {
+        meetingRoomMapper.updateStatusById(id,status);
+    }
+
+    /**
+     * 根据会议开始时间查询最近结束的会议时间
+     * @param startDate
+     * @return
+     */
+    public Map<String, String> checkTime(String startDate,String meetNumber) throws ParseException {
+        //格式化输入的开始时间
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        Date date = simpleDateFormat.parse(startDate);
+        //获取审核中的会议时间
+        List<MeetingRoom> meetingRooms=meetingRoomMapper.checkTime(date,meetNumber);
+
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
+
+        LocalDate curDate = LocalDate.now();//当前日期
+        //限制会议选择的时间 并转为time类型
+        LocalTime time1 = LocalTime.of(8, 30, 0); // 9:00:00
+
+        Map<String, String> mergedMap = new HashMap<>();
+
+        if (ObjectUtil.isNotEmpty(meetingRooms)){
+            for (MeetingRoom meetingRoom : meetingRooms) {
+                //将获取到的开始时间和结束时间转为LocalDateTime格式,用以比较
+                LocalTime startTimeLocal  = meetingRoom.getStartTime().toLocalTime();
+                LocalTime endTimeLocal   = meetingRoom.getEndTime().toLocalTime();
+
+                LocalDateTime startDateTime = LocalDateTime.of(curDate, startTimeLocal);
+                LocalDateTime endDateTime = LocalDateTime.of(curDate, endTimeLocal);
+
+                LocalDateTime current = startDateTime;
+                //确保开始时间在结束时间之前
+                while (!current.isAfter(endDateTime) || current.isEqual(endDateTime)) {
+                    String start = current.format(formatter);
+                    mergedMap.put(start,start);
+                    //计算半小时之后的时间
+                    LocalDateTime truncatedTime = current.truncatedTo(ChronoUnit.HOURS).plusMinutes(current.getMinute() / 30 * 30);
+                    String truncatedTimeStr = truncatedTime.format(formatter);
+                    //存到map中
+                    mergedMap.put(truncatedTimeStr,truncatedTimeStr);
+
+                    current = current.plusMinutes(30); // 移到下一个半小时的时间点
+                }
+            }
+        }
+
+        //获取会议预约日期
+        DateTimeFormatter formatte = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDate startDate1 = LocalDate.parse(startDate, formatte);
+        //比较两个日期是否为当天,
+        if (curDate.equals(startDate1)){
+            //获取当前时间
+            LocalTime now = LocalTime.now();
+            LocalDateTime nowDate = LocalDateTime.of(curDate, now);//当前时间
+            ArrayList<LocalTime> dateList = new ArrayList<>();
+            LocalDateTime morning=LocalDateTime.of(curDate, time1); //上午九点
+            LocalTime nowTime = nowDate.toLocalTime();//当前时间,精确到分钟
+            //将上午九点开始,截止到当前时间,中间的每半个小时存放到集合中
+            if (nowDate.isAfter(morning) || nowDate.isEqual(morning)){
+                LocalTime currentTime = time1;
+                dateList.add(currentTime);
+                while (currentTime.isBefore(nowTime) || (currentTime.equals(nowTime) && currentTime.getMinute() <= nowTime.getMinute())) {
+                    // 每隔半小时增加currentTime
+                    currentTime = currentTime.plus(30, ChronoUnit.MINUTES);
+                    if (currentTime.isBefore(nowTime)){
+                        dateList.add(currentTime);
+                    }
+
+                }
+            }
+            //将获取到的时间存到map中
+            for (LocalTime localTime : dateList) {
+                mergedMap.put(localTime.format(formatter),localTime.format(formatter));
+            }
+        }
+        return mergedMap;
+    }
+
+    /**
+     * 根据id删除
+     * @param id
+     * @return
+     */
+    public String deleteById(String id) {
+        meetingRoomMapper.deleteById(id);
+        return "删除成功";
+    }
+}

+ 101 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/meetingRoom/service/dto/MeetingRoomDTO.java

@@ -0,0 +1,101 @@
+package com.jeeplus.pubmodules.meetingRoom.service.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.jeeplus.core.service.dto.BaseDTO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.sql.Time;
+import java.util.Date;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class MeetingRoomDTO extends BaseDTO {
+
+    private String id;
+
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 会议开始,结束时间
+     */
+
+    private Time startTime;
+
+    private Time endTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private String startDate;
+
+    /**
+     * 会议时长
+     */
+    private Integer duration;
+
+    /**
+     * 会议说明
+     */
+    private String remarks;
+
+    /**
+     * 流程id
+     */
+    private String procInsId;
+
+    /**
+     * 流程信息
+     */
+    private String processDefinitionId;
+    private String taskId;
+
+    /**
+     * 状态
+     */
+    private String status;
+
+    /**
+     * 会议室编号
+     */
+    private String meetNumber;
+
+    /**
+     * 创建时间
+     */
+    @TableField(exist = false)
+    private String[] meetingDates;
+
+    /**
+     * 创建人
+     */
+    @TableField(exist = false)
+    private String createName;
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createDate;
+
+    /**
+     * 部门
+     */
+    @TableField(exist = false)
+    private String officeId;
+    @TableField(exist = false)
+    private String officeName;
+
+    private static final long serialVersionUID = 1L;
+
+
+
+
+
+
+
+
+
+}