Kaynağa Gözat

会议室预约调整

sangwenwei 1 yıl önce
ebeveyn
işleme
268a5599e3

+ 5 - 4
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/meetingRoom/controller/MeetingRoomController.java

@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
 import java.text.ParseException;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 @Slf4j
 @Api(tags ="嘉溢会议室预约")
@@ -43,7 +44,7 @@ public class MeetingRoomController {
      */
     @ApiOperation(value = "会议室添加/修改")
     @PostMapping(value = "/saveForm")
-    public ResponseEntity saveForm(@RequestBody MeetingRoomDTO meetingRoomDTO){
+    public ResponseEntity saveForm(@RequestBody MeetingRoomDTO meetingRoomDTO) throws ParseException {
         String id=meetingRoomService.saveForm(meetingRoomDTO);
         return ResponseUtil.newInstance().add("businessTable","jy_meeting_room").add("businessId",id).ok("操作成功");
     }
@@ -73,9 +74,9 @@ public class MeetingRoomController {
      */
     @ApiOperation(value = "根据会议开始时间查询最近结束的会议时间")
     @GetMapping(value = "/checkTime")
-    public Boolean checkTime(@RequestParam String startTime) throws ParseException {
-        Boolean check=meetingRoomService.checkTime(startTime);
-        return check;
+    public Map<String, String> checkTime(@RequestParam String startDate) throws ParseException {
+        Map<String, String> map=meetingRoomService.checkTime(startDate);
+        return map;
     }
 
     /**

+ 11 - 7
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/meetingRoom/domain/MeetingRoom.java

@@ -7,6 +7,7 @@ import com.jeeplus.core.domain.BaseEntity;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.sql.Time;
 import java.util.Date;
 
 @Data
@@ -21,14 +22,17 @@ public class MeetingRoom extends BaseEntity {
     private String title;
 
     /**
-     * 会议开始,结束时间
+     * 会议开始,结束时间,开始日期
      */
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
-    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
-    private Date startTime;
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
-    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
-    private Date endTime;
+    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;
 
     /**
      * 会议时长

+ 2 - 1
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/meetingRoom/mapper/MeetingRoomMapper.java

@@ -11,6 +11,7 @@ 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> {
@@ -20,5 +21,5 @@ public interface MeetingRoomMapper extends BaseMapper<MeetingRoom> {
 
     void updateStatusById(@Param("id")String id, @Param("status")String status);
 
-    MeetingRoom checkTime(@Param("startTime")Date date);
+    MeetingRoom checkTime(@Param("date")Date date);
 }

+ 3 - 1
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/meetingRoom/mapper/xml/MeetingRoomMapper.xml

@@ -11,6 +11,7 @@
             su.name as createName,
             a.title,
             a.start_time,
+            a.start_date,
             a.duration,
             a.remarks,
             a.create_time as createDate,
@@ -36,6 +37,7 @@
             su.name as createName,
             a.title,
             a.start_time,
+            a.start_date,
             a.duration,
             a.remarks,
             a.create_time as createDate,
@@ -79,7 +81,7 @@
         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.end_time &lt;= #{startTime} or a.end_time &gt;= #{startTime}) and a.del_flag =0
+        where (a.start_date=#{date}) and a.del_flag =0 and  a.`status` not in ('1', '3')
         order by a.end_time DESC limit 1
     </select>
 

+ 81 - 19
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/meetingRoom/service/MeetingRoomService.java

@@ -17,9 +17,15 @@ 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.util.Date;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.*;
 
 @Service
 public class MeetingRoomService {
@@ -42,7 +48,7 @@ public class MeetingRoomService {
         meetingRoomQueryWrapper.eq("a.del_flag",0);
         //会议开始时间
         if (meetingRoom.getMeetingDates() != null && meetingRoom.getMeetingDates().length >0){
-            meetingRoomQueryWrapper.between("a.start_time",meetingRoom.getMeetingDates()[0],meetingRoom.getMeetingDates()[1]);
+            meetingRoomQueryWrapper.between("a.start_date",meetingRoom.getMeetingDates()[0],meetingRoom.getMeetingDates()[1]);
         }
         //标题
         if (StringUtils.isNotBlank(meetingRoom.getTitle())){
@@ -53,6 +59,9 @@ public class MeetingRoomService {
             meetingRoomQueryWrapper.eq("so.id",meetingRoom.getOfficeId());
         }
         IPage<MeetingRoom> iPage=meetingRoomMapper.findPageList(page,meetingRoomQueryWrapper);
+        iPage.getRecords().stream().forEach(item->{
+            item.setStartDateTime(item.getStartDate()+" "+item.getStartTime());
+        });
 
         return iPage;
     }
@@ -62,11 +71,14 @@ public class MeetingRoomService {
      * @param meetingRoomDTO
      * @return
      */
-    public String saveForm(MeetingRoomDTO meetingRoomDTO) {
+    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");
+        meetingRoom.setStartDate(meetingRoomDTO.getStartDate()); // 会议开始日期
         meetingRoom.setStartTime(meetingRoomDTO.getStartTime());// 会议开始时间
         meetingRoom.setTitle(meetingRoomDTO.getTitle()); //标题
         Integer timeLong=0;
@@ -86,8 +98,18 @@ public class MeetingRoomService {
         meetingRoom.setUpdateTime(new Date());
         meetingRoom.setDelFlag(0);
         //会议结束时间
-        Date endDate = new Date(meetingRoomDTO.getStartTime().getTime() + (timeLong * 1000));
-        meetingRoom.setEndTime(endDate);
+
+        //将开始时间转为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);
+
 
         if (StringUtils.isNotBlank(meetingRoomDTO.getId())){
             meetingRoomMapper.updateById(meetingRoom);
@@ -119,30 +141,70 @@ public class MeetingRoomService {
 
     /**
      * 根据会议开始时间查询最近结束的会议时间
-     * @param startTime
+     * @param startDate
      * @return
      */
-    public Boolean checkTime(String startTime) throws ParseException {
+    public Map<String, String> checkTime(String startDate) throws ParseException {
         //格式化输入的开始时间
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
-        Date date = simpleDateFormat.parse(startTime);
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        Date date = simpleDateFormat.parse(startDate);
 
         MeetingRoom meetingRoom=meetingRoomMapper.checkTime(date);
+        ArrayList<Map<String, String>> strings = new ArrayList<>();
+
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
+        HashMap<String, String> hashMap = new HashMap<>();
+
+        //限制会议选择的时间 并转为time类型
+        LocalTime time1 = LocalTime.of(9, 0, 0); // 9:00:00
+        String date1 = time1.format(formatter);
+        Time am1 = Time.valueOf(date1);
+        LocalTime time2 = LocalTime.of(11, 30, 0); // 11:30:00
+        String date2 = time2.format(formatter);
+        Time am2 = Time.valueOf(date2);
+        LocalTime time3 = LocalTime.of(14, 0, 0); // 14:00:00
+        String date3 = time3.format(formatter);
+        Time pm1 = Time.valueOf(date3);
+        LocalTime time4 = LocalTime.of(17, 0, 0); // 17:00:00
+        String date4 = time4.format(formatter);
+        Time pm2 = Time.valueOf(date4);
 
         if (ObjectUtil.isNotEmpty(meetingRoom)){
-            //判断上一个会议结束的时间在新的开始时间之前还是之后
-            if (meetingRoom.getEndTime().after(date)){
-                return false;
-            }else {
-                //将上一个会议往后顺延30分钟,然后在判断顺延后的时间与新的开始时间大小
-                Long endTime=meetingRoom.getEndTime().getTime()+30*60*1000;
-                Long time=date.getTime();
-                if (endTime>=time){
-                    return false;
+            //判断会议结束后的半小时是否在规定范围内
+            LocalTime newEndTime = meetingRoom.getEndTime().toLocalTime().plus(30 * 60, ChronoUnit.SECONDS);
+            String format = newEndTime.format(formatter);
+            Time endTime = Time.valueOf(format);
+            if ((endTime.after(am1) && endTime.before(am2)) || (endTime.after(pm1) && endTime.before(pm2))){
+                //创建集合将获取到的开始时间存到集合中
+                LocalTime localTime = meetingRoom.getStartTime().toLocalTime();
+                hashMap.put("0", meetingRoom.getStartTime().toString());
+                //将开始时间之后的每半小时的时间存到map中
+                for (int i = 0; i < 48; i++) {
+                    int minute = localTime.getMinute();
+                    if (minute<30){
+                        localTime=localTime.withMinute(30);
+                    }else {
+                        localTime=localTime.withMinute(0).plusHours(1);
+                    }
+                    hashMap.put((i+1)+"", localTime.format(formatter));
+                    //当新时间与会议结束时间一致时,在延续半小时,循环结束
+                    Time time = Time.valueOf(localTime.format(formatter));
+                    if (time.equals(meetingRoom.getEndTime())) {
+                        int m=localTime.getMinute();
+                        if (m<30){
+                            localTime=localTime.withMinute(30);
+                        }else {
+                            localTime=localTime.withMinute(0).plusHours(1);
+                        }
+                        hashMap.put((i+2)+"", localTime.format(formatter));
+                        break;
+                    }
                 }
+            }else {
+                return hashMap;
             }
         }
-        return true;
+        return hashMap;
     }
 
     /**

+ 12 - 6
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/meetingRoom/service/dto/MeetingRoomDTO.java

@@ -5,12 +5,17 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jeeplus.core.domain.BaseEntity;
 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;
@@ -23,12 +28,13 @@ public class MeetingRoomDTO extends BaseDTO {
     /**
      * 会议开始,结束时间
      */
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
-    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
-    private Date startTime;
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
-    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
-    private Date endTime;
+
+    private Time startTime;
+
+    private Time endTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private String startDate;
 
     /**
      * 会议时长