From 4efd67364c4c543035ad37cb8ec9c91491110b44 Mon Sep 17 00:00:00 2001 From: Romesum Date: Sun, 24 May 2020 03:00:56 +0800 Subject: [PATCH] =?UTF-8?q?[fix][M]:=20=E5=AE=8C=E5=96=84LabTime=E6=9F=A5?= =?UTF-8?q?=E6=89=BE=E6=8E=A5=E5=8F=A3=E4=B8=8E=E4=BF=AE=E6=94=B9=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=88=E6=9C=AA=E8=B0=83=E8=AF=95=E5=AE=8C=E6=88=90?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/LabTimeController.java | 105 +++++++++++------- .../repository/LabTimeRepository.java | 33 +++++- .../bookingsystem/service/LabTimeService.java | 21 ++-- .../service/impl/LabTimeServiceImpl.java | 52 +++++++-- 4 files changed, 155 insertions(+), 56 deletions(-) diff --git a/java/src/main/java/com/hzu/bookingsystem/controller/LabTimeController.java b/java/src/main/java/com/hzu/bookingsystem/controller/LabTimeController.java index aaadda5..48ecaa4 100644 --- a/java/src/main/java/com/hzu/bookingsystem/controller/LabTimeController.java +++ b/java/src/main/java/com/hzu/bookingsystem/controller/LabTimeController.java @@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -21,15 +22,14 @@ public class LabTimeController { private LabTimeService labTimeService; //创建实验室可预约时间段 - @PostMapping(value = "/addLabTime" , consumes = "application/json") - public ResultVO addLabTime(@RequestBody Map map){ + @PostMapping(value = "/addLabTime", consumes = "application/json") + public ResultVO addLabTime(@RequestBody Map map) { //转换对象 - LabTimeBean labTime1 = (LabTimeBean) Map2Object.map2Object(map,LabTimeBean.class); + LabTimeBean labTime1 = (LabTimeBean) Map2Object.map2Object(map, LabTimeBean.class); System.out.println(labTime1); //查重 - if(labTimeService.findByTime(labTime1.getTime()) != null) - { - return ResultVOUtil.error(-1,"该时间段已存在"); + if (labTimeService.findByTime(labTime1.getTime()) != null) { + return ResultVOUtil.error(-1, "该时间段已存在"); } labTimeService.add(labTime1); return ResultVOUtil.success(); @@ -37,10 +37,10 @@ public class LabTimeController { //通过ltId删除实验室可预约时间段 @PostMapping(value = "/deleteLabTime") - public ResultVO deleteLabTime(@RequestBody LabTimeBean labTime){ + public ResultVO deleteLabTime(@RequestBody LabTimeBean labTime) { //查找实验室是否存在 LabTimeBean labTime1 = labTimeService.findByLtId(labTime.getLtId()); - if(labTime1 == null) { + if (labTime1 == null) { return ResultVOUtil.error(-1, "该时间段不存在"); } else { labTimeService.deleteByLtId(labTime1.getLabId()); @@ -49,12 +49,12 @@ public class LabTimeController { } //修改实验室可预约时间段 - @PostMapping(value = "/updateLabTime" , consumes = "application/json") - public ResultVO updateLabTime(@RequestBody Map map , HttpServletRequest request){ + @PostMapping(value = "/updateLabTimeOld", consumes = "application/json") + public ResultVO updateLabTimeOld(@RequestBody Map map, HttpServletRequest request) { //转换对象 - LabTimeBean labTime1 = (LabTimeBean) Map2Object.map2Object(map,LabTimeBean.class); - if(labTime1.getLtId() == null){ - return ResultVOUtil.error(-1,"该实验室不存在,无法修改"); + LabTimeBean labTime1 = (LabTimeBean) Map2Object.map2Object(map, LabTimeBean.class); + if (labTime1.getLtId() == null) { + return ResultVOUtil.error(-1, "该实验室不存在,无法修改"); } else { labTimeService.update(labTime1); } @@ -63,41 +63,68 @@ public class LabTimeController { //通过ltId查找实验室预约时间段 @GetMapping(value = "/findLabTimeById") - public ResultVO> findLabTimeById(@RequestParam("ltId") Integer lt_id){ + public ResultVO> findLabTimeById(@RequestParam("ltId") Integer lt_id) { LabTimeBean labTime1 = labTimeService.findByLtId(lt_id); System.out.println(labTime1); return ResultVOUtil.success(labTime1); } - //查找实验室可预约时间段 - @GetMapping(value = "/findlabtimebylabidandyearandsemester") - public ResultVO> findLabTimeByLabIdAndYearAndSemester(@RequestParam("labId") Integer lab_id , @RequestParam("year") String year , @RequestParam("semester") Integer semester , @RequestParam("status") Integer status){ - List labTimeList1 = labTimeService.findByLabIdAndYearAndSemester(lab_id , year , semester); - System.out.println(labTimeList1); - LabTimeBean array[] = new LabTimeBean[labTimeList1.size()]; - int i = 0; - for(LabTimeBean labtime : labTimeList1){ - if (labtime.getStatus().equals(status)) { - System.out.println(labtime.getTime()); - array[i] = labtime; - i++; - } - } - return ResultVOUtil.success(array); + //查找实验室预约周次(包含已预约) + // author 吴志岳 + @GetMapping(value = "/getWeeks") + public ResultVO findLabTimeByLabIdAndYearAndSemester(@RequestParam("labId") Integer lab_id, + @RequestParam("year") String year, + @RequestParam("semester") Integer semester, + @RequestParam("day") Integer day, + @RequestParam("time") Integer time) { + List weeks = labTimeService.findWeeks(lab_id, year, semester, day, time); + return ResultVOUtil.success(weeks); } - //查找所有实验室列表 - @GetMapping(value = "/getLabListTime") - public ResultVO getLabTimeList(){ - List labTimeList = labTimeService.findAllLabInfo(); - return ResultVOUtil.success(labTimeList); + //查找实验室可预约周次(不包含已预约) + // author 吴志岳 + @GetMapping(value = "/getWeeksAbleBook") + public ResultVO findLabTimeByLabIdAndYearAndSemesterAbleBook(@RequestParam("labId") Integer lab_id, + @RequestParam("year") String year, + @RequestParam("semester") Integer semester, + @RequestParam("day") Integer day, + @RequestParam("time") Integer time) { + List weeks = labTimeService.findWeeksAble(lab_id, year, semester, day, time); + return ResultVOUtil.success(weeks); } - // 查找所有课程列表 - @GetMapping(value = "/getLabTimelist") - public ResultVO getUserCourseList(){ - List labTimelist = labTimeService.findAll(); - return ResultVOUtil.success(labTimelist); + //修改实验室可预约时间段 + @PostMapping(value = "/updateLabTime", consumes = "application/json") + public ResultVO updateLabTime(@RequestBody Map map, HttpServletRequest request) { + //转换对象 + LabTimeBean labTime = (LabTimeBean) Map2Object.map2Object(map, LabTimeBean.class); + // 用户发起的修改请求 + List weeks = (List)map.get("weeks"); + // 实验室预约时间段 + List weeksAll = labTimeService.findWeeks(labTime.getLabId(),labTime.getYear(),labTime.getSemester(),labTime.getDay(),labTime.getTime()); + // 实验室可预约时间段 + List weeksAble = labTimeService.findWeeksAble(labTime.getLabId(),labTime.getYear(),labTime.getSemester(),labTime.getDay(),labTime.getTime()); + // 实验室不可变换或不可选取的时间段 + List weeksDisable = new ArrayList<>(weeksAll); + weeksDisable.removeAll(weeksAble); + + // 如果请求weeks中不包含不可选取的时间段,报错 + if (!weeks.containsAll(weeksDisable)){ + return ResultVOUtil.error(-1,"已被预约的时间段无法去除"); + } + + // 需要insert的weeks + List weekInsert = new ArrayList<>(weeks); + weekInsert.removeAll(weeksAll); + + // 需要delete的weeks + List weekDelete = new ArrayList<>(weeksAll); + weekDelete.removeAll(weeks); + System.out.println("用户请求"+weeks); + System.out.println("原来有的"+weeksAll); + System.out.println("要插入的"+weekInsert); + System.out.println("要删除的"+weekDelete); + return ResultVOUtil.success(); } } diff --git a/java/src/main/java/com/hzu/bookingsystem/repository/LabTimeRepository.java b/java/src/main/java/com/hzu/bookingsystem/repository/LabTimeRepository.java index 1961198..2227902 100644 --- a/java/src/main/java/com/hzu/bookingsystem/repository/LabTimeRepository.java +++ b/java/src/main/java/com/hzu/bookingsystem/repository/LabTimeRepository.java @@ -3,6 +3,7 @@ package com.hzu.bookingsystem.repository; import com.hzu.bookingsystem.bean.LabTimeBean; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import java.util.List; @@ -46,12 +47,42 @@ public interface LabTimeRepository extends JpaRepository { */ LabTimeBean findByTime(Integer time); + /** + * 通过学期、周、星期、上课时间查找实验室预约时间段 + * + * @param lab_id、year、semester + * @return + */ + @Query(value = "SELECT " + + " tb_lab_time.* " + + "FROM " + + "tb_lab_time LEFT JOIN tb_lab_record ON tb_lab_time.lt_id=tb_lab_record.lt_id " + + "WHERE " + + " tb_lab_time.lab_id = ?1 AND " + + " tb_lab_time.`year` = ?2 AND " + + " tb_lab_time.semester = ?3 AND " + + " tb_lab_time.`day` = ?4 AND " + + " tb_lab_time.time = ?5 AND " + + "tb_lab_time.lt_id not in (select lt_id from tb_lab_record where status = 1)", nativeQuery = true) + List findByLabIdAndYearAndSemesterAndDayAndTime(Integer lab_id,String year,Integer semester, Integer day,Integer time) ; + /** * 通过学期、周、星期、上课时间查找实验室可预约时间段 * * @param lab_id、year、semester * @return */ - List findByLabIdAndYearAndSemester(Integer lab_id,String year,Integer semester) ; + @Query(value = "SELECT " + + " tb_lab_time.* " + + "FROM " + + "tb_lab_time LEFT JOIN tb_lab_record ON tb_lab_time.lt_id=tb_lab_record.lt_id " + + "WHERE " + + " tb_lab_time.lab_id = ?1 AND " + + " tb_lab_time.`year` = ?2 AND " + + " tb_lab_time.semester = ?3 AND " + + " tb_lab_time.`day` = ?4 AND " + + " tb_lab_time.time = ?5 AND " + + " tb_lab_time.lt_id not in (select lt_id from tb_lab_record where status is not null)" , nativeQuery = true) + List findWeeksAbleBook(Integer lab_id, String year, Integer semester, Integer day, Integer time) ; } diff --git a/java/src/main/java/com/hzu/bookingsystem/service/LabTimeService.java b/java/src/main/java/com/hzu/bookingsystem/service/LabTimeService.java index a3ee456..f06b933 100644 --- a/java/src/main/java/com/hzu/bookingsystem/service/LabTimeService.java +++ b/java/src/main/java/com/hzu/bookingsystem/service/LabTimeService.java @@ -62,17 +62,24 @@ public interface LabTimeService { LabTimeBean findByTime(Integer time); /** - * 通过学期、周、星期、上课时间查找实验室可预约时间段 - * - * @param lab_id、year、semester + * 查找所有实约时间信息 * @return */ - List findByLabIdAndYearAndSemester(Integer lab_id,String year,Integer semester) ; + List findAllLabInfo(); /** - * 查找所有实约时间信息 - * @return + * 通过学期、周、星期、上课时间查找实验室预约时间段周次 + *author 吴志岳 + * @param lab_id、year、semester + * @return List */ - List findAllLabInfo(); + List findWeeks(Integer lab_id,String year,Integer semester, Integer day,Integer time) ; + /** + * 通过学期、周、星期、上课时间查找实验室可预约时间段周次 + *author 吴志岳 + * @param lab_id、year、semester + * @return List + */ + List findWeeksAble(Integer lab_id,String year,Integer semester, Integer day,Integer time) ; } \ No newline at end of file diff --git a/java/src/main/java/com/hzu/bookingsystem/service/impl/LabTimeServiceImpl.java b/java/src/main/java/com/hzu/bookingsystem/service/impl/LabTimeServiceImpl.java index 617b23f..71190a4 100644 --- a/java/src/main/java/com/hzu/bookingsystem/service/impl/LabTimeServiceImpl.java +++ b/java/src/main/java/com/hzu/bookingsystem/service/impl/LabTimeServiceImpl.java @@ -13,7 +13,9 @@ import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import javax.transaction.Transactional; +import java.util.ArrayList; import java.util.List; + /** * author 莫家豪 */ @@ -33,12 +35,12 @@ public class LabTimeServiceImpl implements LabTimeService { @Override @Transactional - public void deleteByLtId(Integer ltId){ + public void deleteByLtId(Integer ltId) { labTimeRepository.deleteByLtId(ltId); } @Override - public LabTimeBean update(LabTimeBean labTime){ + public LabTimeBean update(LabTimeBean labTime) { return labTimeRepository.save(labTime); } @@ -48,7 +50,7 @@ public class LabTimeServiceImpl implements LabTimeService { } @Override - public LabTimeBean findByLtId(Integer ltId){ + public LabTimeBean findByLtId(Integer ltId) { return labTimeRepository.findByLtId(ltId); } @@ -58,17 +60,13 @@ public class LabTimeServiceImpl implements LabTimeService { } @Override - public LabTimeBean findByTime(Integer time){ + public LabTimeBean findByTime(Integer time) { return labTimeRepository.findByTime(time); } - @Override - public List findByLabIdAndYearAndSemester(Integer lab_id,String year,Integer semester){ - return labTimeRepository.findByLabIdAndYearAndSemester(lab_id , year , semester); - } @Override - public List findAllLabInfo(){ + public List findAllLabInfo() { String sql = "SELECT tb_lab_time.lt_id as LtId," + "tb_lab_time.year," + "tb_lab_time.semester," + @@ -85,4 +83,40 @@ public class LabTimeServiceImpl implements LabTimeService { return LabTimeDTOList; } + /** + * author 吴志岳 + * + * @param lab_id、year、semester + * @param year + * @param semester + * @return + */ + @Override + public List findWeeks(Integer lab_id, String year, Integer semester, Integer day, Integer time) { + List list = labTimeRepository.findByLabIdAndYearAndSemesterAndDayAndTime(lab_id, year, semester, day, time); + List weeks = new ArrayList<>(); + for (LabTimeBean labtime : list) { + weeks.add(labtime.getWeek()); + } + return weeks; + } + + /** + * author 吴志岳 + * + * @param lab_id、year、semester + * @param year + * @param semester + * @return + */ + @Override + public List findWeeksAble(Integer lab_id, String year, Integer semester, Integer day, Integer time) { + List list = labTimeRepository.findWeeksAbleBook(lab_id, year, semester, day, time); + List weeks = new ArrayList<>(); + for (LabTimeBean labtime : list) { + weeks.add(labtime.getWeek()); + } + return weeks; + } + } \ No newline at end of file