diff --git a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/CourseRunningController.java b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/CourseRunningController.java index d13505346..a27078377 100644 --- a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/CourseRunningController.java +++ b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/CourseRunningController.java @@ -296,7 +296,11 @@ public class CourseRunningController { } /** - * 查询当前教员可供调课的课次(学员队任务表 + 课表 + 课程表)。 + * 查询当前教员可供调课的课次。 + *

+ * 返回值对齐 {@code /adjust/submit} 入参:除事由、备注等需用户填写的项外, + * 其余字段带出当前课次默认值。 + *

*/ @GetMapping("/adjust/lessons") public Result> listAdjustableLessons( diff --git a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/KCBController.java b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/KCBController.java index 5b55c747c..82328f135 100644 --- a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/KCBController.java +++ b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/KCBController.java @@ -7,7 +7,7 @@ import com.roomroot.jwgl.unit.PageQuery; import com.roomroot.jwgl.unit.PageResult; import com.roomroot.jwgl.unit.Result; import com.roomroot.jwgl.vo.kcb.ClassTimetableVO; -import com.roomroot.jwgl.vo.kcb.DailyWeeklyTimetableVO; +import com.roomroot.jwgl.vo.kcb.DailyWeeklyTimetableRangeVO; import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.bind.annotation.*; @@ -77,19 +77,29 @@ public class KCBController { } /** - * 今日课表。未传年度时按当前时间取本学期,可按队别班次筛选。 + * 今日课表。可连续点上一天 / 下一天。 + *

+ * 首次不传参数查当天。之后把返回的 {@code rq} 回传,并传 offset:-1 上一天,1 下一天。 + *

*/ @GetMapping("/today/list") - public Result> listToday(TimetableQuery cond) { - return Result.success(kcbService.listToday(cond)); + public Result listToday( + @RequestParam(value = "rq", required = false) String rq, + @RequestParam(value = "offset", required = false) Integer offset) { + return Result.success(kcbService.listToday(rq, offset)); } /** - * 本周课表(周一至周日)。未传年度时按当前时间取本学期,可按队别班次筛选。 + * 本周课表(周一至周日)。可连续点上一周 / 下一周。 + *

+ * 首次不传参数查本周。之后把返回的 {@code rq} 回传,并传 offset:-1 上一周,1 下一周。 + *

*/ @GetMapping("/week/list") - public Result> listWeek(TimetableQuery cond) { - return Result.success(kcbService.listWeek(cond)); + public Result listWeek( + @RequestParam(value = "rq", required = false) String rq, + @RequestParam(value = "offset", required = false) Integer offset) { + return Result.success(kcbService.listWeek(rq, offset)); } /** diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/dto/kcb/TimetableQuery.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/dto/kcb/TimetableQuery.java index cc837ed50..933f2218d 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/dto/kcb/TimetableQuery.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/dto/kcb/TimetableQuery.java @@ -3,7 +3,7 @@ package com.roomroot.jwgl.dto.kcb; import lombok.Data; /** - * 今日 / 本周 / 班次课表查询条件。 + * 班次课表查询条件。 *

未传年度、学期时按当前时间取本学期。

*/ @Data diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SSDKSQMapper.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SSDKSQMapper.java index 667876142..364071184 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SSDKSQMapper.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SSDKSQMapper.java @@ -43,4 +43,24 @@ public interface SSDKSQMapper extends BaseMapper { * 查询可供调课的课次(学员队任务表 + 课表 + 课程表)。 */ List selectAdjustableLessons(@Param("jybh") String jybh, @Param("nd") Integer nd); + + /** + * 按课次编号批量查询教室,用于回填调课提交默认值。 + */ + List selectLessonRooms(@Param("ids") List ids); + + /** + * 按课次编号批量查询辅助教员,用于回填调课提交默认值。 + */ + List selectLessonTeachers(@Param("ids") List ids); + + /** + * 按课次编号批量查询学员队,用于回填调课提交默认值。 + */ + List selectLessonTeams(@Param("ids") List ids); + + /** + * 按课次编号批量查询保障明细,用于回填调课提交默认值。 + */ + List selectLessonSupports(@Param("ids") List ids); } diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SSDKSQMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SSDKSQMapper.xml index 2cf0f29f7..fdcd52f72 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SSDKSQMapper.xml +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SSDKSQMapper.xml @@ -63,17 +63,36 @@ + + + + + + + + + + - - + + + + + + + + + + + @@ -193,12 +212,14 @@ WHERE a.编号 = #{ssdksqbh} - + + + + + + + + + diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/CourseRunningImportService.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/CourseRunningImportService.java index 2c367a146..47d46b84a 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/CourseRunningImportService.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/CourseRunningImportService.java @@ -178,7 +178,7 @@ public interface CourseRunningImportService { PageResult queryScheduleAdjustList(ScheduleAdjustQueryDTO query); /** - * 查询当前教员可供调课的课次,关联学员队任务表、课表、课程表。 + * 查询当前教员可供调课的课次,字段对齐调课提交默认值。 * * @param nd 年度,可空 * @return 可选课次列表 diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/KCBService.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/KCBService.java index d1c116e45..52c331577 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/KCBService.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/KCBService.java @@ -5,7 +5,7 @@ import com.roomroot.jwgl.entity.KCB; import com.roomroot.jwgl.unit.PageQuery; import com.roomroot.jwgl.unit.PageResult; import com.roomroot.jwgl.vo.kcb.ClassTimetableVO; -import com.roomroot.jwgl.vo.kcb.DailyWeeklyTimetableVO; +import com.roomroot.jwgl.vo.kcb.DailyWeeklyTimetableRangeVO; import jakarta.servlet.http.HttpServletResponse; import java.util.List; @@ -59,14 +59,14 @@ public interface KCBService { List list(); /** - * 今日课表。未传年度时按当前时间取本学期。 + * 今日课表。rq 为当前查看日期,offset 为相对天数,可连续切换。 */ - List listToday(TimetableQuery cond); + DailyWeeklyTimetableRangeVO listToday(String rq, Integer offset); /** - * 本周课表(周一至周日)。未传年度时按当前时间取本学期。 + * 本周课表(周一至周日)。rq 为当前查看日期,offset 为相对周数,可连续切换。 */ - List listWeek(TimetableQuery cond); + DailyWeeklyTimetableRangeVO listWeek(String rq, Integer offset); /** * 班次课表。未传年度时按当前时间取本学期,可按队别班次筛选。 diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/CourseRunningImportServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/CourseRunningImportServiceImpl.java index 7a08bd9e7..20e6bebc5 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/CourseRunningImportServiceImpl.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/CourseRunningImportServiceImpl.java @@ -898,7 +898,9 @@ public class CourseRunningImportServiceImpl implements CourseRunningImportServic @Override public List listAdjustableLessons(Integer nd) { - return ssdksqMapper.selectAdjustableLessons(jwglRoleHelper.requireTeacherId(), nd); + List lessons = ssdksqMapper.selectAdjustableLessons(jwglRoleHelper.requireTeacherId(), nd); + fillAdjustableLessonSubmitDefaults(lessons); + return lessons; } private void applyScheduleAdjustDataScope(ScheduleAdjustQueryDTO query) { @@ -973,6 +975,7 @@ public class CourseRunningImportServiceImpl implements CourseRunningImportServic AdjustableLessonVO picked = null; List mine = ssdksqMapper.selectAdjustableLessons(teacherId, lesson.getNd()); + fillAdjustableLessonSubmitDefaults(mine); if (mine != null) { for (AdjustableLessonVO item : mine) { if (lesson.getBh().equals(item.getSskcbbh())) { @@ -992,23 +995,23 @@ public class CourseRunningImportServiceImpl implements CourseRunningImportServic apply.setYdsjap(resolveYdsjap(lesson)); apply.setZxzt(0); apply.setYszt(0); - apply.setXydrwbh(cut(StringUtils.isNotEmpty(dto.getXydrwbh()) ? dto.getXydrwbh() : picked.getXydrwbh(), 50)); - apply.setKbh(cut(StringUtils.isNotEmpty(dto.getKbh()) ? dto.getKbh() : picked.getKbh(), 50)); - apply.setKcbbh(cut(StringUtils.isNotEmpty(dto.getKcbbh()) ? dto.getKcbbh() : picked.getKcbbh(), 50)); + apply.setXydrwbh(cut(firstNonEmpty(dto.getXydrwbh(), picked.getXydrwbh()), 50)); + apply.setKbh(cut(firstNonEmpty(dto.getKbh(), picked.getKbh()), 50)); + apply.setKcbbh(cut(firstNonEmpty(dto.getKcbbh(), picked.getKcbbh()), 50)); apply.setJysdh(cut(picked.getJysdh(), 50)); - apply.setYjsbh(cut(picked.getJsbh(), 50)); - apply.setXjsbh(cut(resolveNewClassroom(dto), 50)); + apply.setYjsbh(cut(firstNonEmpty(picked.getYjsbh(), picked.getJsbh()), 50)); + apply.setXjsbh(cut(resolveNewClassroom(dto, picked), 50)); apply.setSqjybh(cut(teacherId, 50)); apply.setSy(cut(dto.getSy(), 200)); apply.setRq(dto.getRq()); apply.setJc(dto.getJc() != null ? dto.getJc() : 0); apply.setNd(dto.getNd() != null ? dto.getNd() : (lesson.getNd() != null ? lesson.getNd() : 0)); - apply.setJxnr(cut(dto.getJxnr(), 500)); - apply.setJxyd(dto.getJxyd()); - String jxff = cut(dto.getJxff(), 50); + apply.setJxnr(cut(firstNonEmpty(dto.getJxnr(), picked.getJxnr()), 500)); + apply.setJxyd(firstNonEmpty(dto.getJxyd(), picked.getJxyd())); + String jxff = cut(firstNonEmpty(dto.getJxff(), picked.getJxff()), 50); apply.setJxff(jxff == null ? "" : jxff); - apply.setJxbzbz(dto.getJxbzbz()); - apply.setYcxx(dto.getYcxx()); + apply.setJxbzbz(firstNonEmpty(dto.getJxbzbz(), picked.getJxbzbz())); + apply.setYcxx(firstNonEmpty(dto.getYcxx(), picked.getYcxx())); apply.setBz(cut(dto.getBz(), 50)); apply.setJyspzzt(0); apply.setJyscszt(0); @@ -1018,8 +1021,9 @@ public class CourseRunningImportServiceImpl implements CourseRunningImportServic apply.setCjsj(LocalDateTime.now()); ssdksqMapper.insert(apply); - if (dto.getRoomList() != null && !dto.getRoomList().isEmpty()) { - for (AdjustRoomDTO roomDto : dto.getRoomList()) { + List roomList = dto.getRoomList() != null ? dto.getRoomList() : picked.getRoomList(); + if (roomList != null && !roomList.isEmpty()) { + for (AdjustRoomDTO roomDto : roomList) { if (StringUtils.isEmpty(roomDto.getJsbh())) { continue; } @@ -1043,8 +1047,9 @@ public class CourseRunningImportServiceImpl implements CourseRunningImportServic roomEntity.setJc(apply.getJc()); dksqjsMapper.insert(roomEntity); } - if (dto.getTeacherList() != null && !dto.getTeacherList().isEmpty()) { - for (AdjustTeacherDTO teacherDto : dto.getTeacherList()) { + List teacherList = dto.getTeacherList() != null ? dto.getTeacherList() : picked.getTeacherList(); + if (teacherList != null && !teacherList.isEmpty()) { + for (AdjustTeacherDTO teacherDto : teacherList) { if (StringUtils.isEmpty(teacherDto.getFzjybh())) { continue; } @@ -1060,8 +1065,9 @@ public class CourseRunningImportServiceImpl implements CourseRunningImportServic dksqfzjyMapper.insert(teacherEntity); } } - if (dto.getTeamList() != null && !dto.getTeamList().isEmpty()) { - for (AdjustTeamDTO teamDto : dto.getTeamList()) { + List teamList = dto.getTeamList() != null ? dto.getTeamList() : picked.getTeamList(); + if (teamList != null && !teamList.isEmpty()) { + for (AdjustTeamDTO teamDto : teamList) { if (StringUtils.isEmpty(teamDto.getXydbh())) { continue; } @@ -1075,8 +1081,9 @@ public class CourseRunningImportServiceImpl implements CourseRunningImportServic dksqxydMapper.insert(teamEntity); } } - if (dto.getSupportList() != null && !dto.getSupportList().isEmpty()) { - for (AdjustSupportDTO supportDto : dto.getSupportList()) { + List supportList = dto.getSupportList() != null ? dto.getSupportList() : picked.getSupportList(); + if (supportList != null && !supportList.isEmpty()) { + for (AdjustSupportDTO supportDto : supportList) { if (StringUtils.isEmpty(supportDto.getBztgmxbh()) || supportDto.getSl() == null) { continue; } @@ -1152,17 +1159,146 @@ public class CourseRunningImportServiceImpl implements CourseRunningImportServic return text.length() <= max ? text : text.substring(0, max); } - private String resolveNewClassroom(ScheduleAdjustApplyDTO dto) { - if (StringUtils.isNotEmpty(dto.getXjsbh())) { + private String firstNonEmpty(String... values) { + if (values == null) { + return null; + } + for (String value : values) { + if (StringUtils.isNotEmpty(value)) { + return value; + } + } + return null; + } + + private String resolveNewClassroom(ScheduleAdjustApplyDTO dto, AdjustableLessonVO picked) { + if (dto != null && StringUtils.isNotEmpty(dto.getXjsbh())) { return dto.getXjsbh().trim(); } - if (dto.getRoomList() != null && !dto.getRoomList().isEmpty() + if (dto != null && dto.getRoomList() != null && !dto.getRoomList().isEmpty() && StringUtils.isNotEmpty(dto.getRoomList().get(0).getJsbh())) { return dto.getRoomList().get(0).getJsbh().trim(); } + if (picked != null && StringUtils.isNotEmpty(picked.getXjsbh())) { + return picked.getXjsbh().trim(); + } + if (picked != null && picked.getRoomList() != null && !picked.getRoomList().isEmpty() + && StringUtils.isNotEmpty(picked.getRoomList().get(0).getJsbh())) { + return picked.getRoomList().get(0).getJsbh().trim(); + } + if (picked != null && StringUtils.isNotEmpty(picked.getJsbh())) { + return picked.getJsbh().trim(); + } return null; } + /** + * 把当前课次的教室、辅助教员、学员队、保障明细回填到可选课次上,供提交调课直接使用。 + */ + private void fillAdjustableLessonSubmitDefaults(List lessons) { + if (lessons == null || lessons.isEmpty()) { + return; + } + List ids = new ArrayList<>(); + Map byId = new HashMap<>(); + for (AdjustableLessonVO lesson : lessons) { + if (lesson == null || StringUtils.isEmpty(lesson.getSskcbbh())) { + continue; + } + if (StringUtils.isEmpty(lesson.getSqjybh())) { + lesson.setSqjybh(lesson.getJybh()); + } + if (StringUtils.isEmpty(lesson.getYjsbh())) { + lesson.setYjsbh(lesson.getJsbh()); + } + if (StringUtils.isEmpty(lesson.getXjsbh())) { + lesson.setXjsbh(lesson.getJsbh()); + } + if (lesson.getJxff() == null) { + lesson.setJxff(""); + } + lesson.setRoomList(new ArrayList<>()); + lesson.setTeacherList(new ArrayList<>()); + lesson.setTeamList(new ArrayList<>()); + lesson.setSupportList(new ArrayList<>()); + ids.add(lesson.getSskcbbh()); + byId.put(lesson.getSskcbbh(), lesson); + } + if (ids.isEmpty()) { + return; + } + List rooms = ssdksqMapper.selectLessonRooms(ids); + if (rooms != null) { + for (AdjustableLessonVO.ChildRow row : rooms) { + AdjustableLessonVO lesson = byId.get(row.getSskcbbh()); + if (lesson == null || StringUtils.isEmpty(row.getJsbh())) { + continue; + } + AdjustRoomDTO dto = new AdjustRoomDTO(); + dto.setJsbh(row.getJsbh()); + dto.setBz(row.getBz()); + lesson.getRoomList().add(dto); + } + } + List teachers = ssdksqMapper.selectLessonTeachers(ids); + if (teachers != null) { + for (AdjustableLessonVO.ChildRow row : teachers) { + AdjustableLessonVO lesson = byId.get(row.getSskcbbh()); + if (lesson == null || StringUtils.isEmpty(row.getFzjybh())) { + continue; + } + AdjustTeacherDTO dto = new AdjustTeacherDTO(); + dto.setFzjybh(row.getFzjybh()); + dto.setZjy(row.getZjy() == null ? 0 : row.getZjy()); + dto.setBz(row.getBz()); + lesson.getTeacherList().add(dto); + } + } + List teams = ssdksqMapper.selectLessonTeams(ids); + if (teams != null) { + for (AdjustableLessonVO.ChildRow row : teams) { + AdjustableLessonVO lesson = byId.get(row.getSskcbbh()); + if (lesson == null || StringUtils.isEmpty(row.getXydbh())) { + continue; + } + AdjustTeamDTO dto = new AdjustTeamDTO(); + dto.setXydbh(row.getXydbh()); + lesson.getTeamList().add(dto); + } + } + List supports = ssdksqMapper.selectLessonSupports(ids); + if (supports != null) { + for (AdjustableLessonVO.ChildRow row : supports) { + AdjustableLessonVO lesson = byId.get(row.getSskcbbh()); + if (lesson == null || StringUtils.isEmpty(row.getBztgmxbh()) || row.getSl() == null) { + continue; + } + AdjustSupportDTO dto = new AdjustSupportDTO(); + dto.setBztgmxbh(row.getBztgmxbh()); + dto.setSl(row.getSl()); + dto.setBz(row.getBz()); + lesson.getSupportList().add(dto); + } + } + for (AdjustableLessonVO lesson : lessons) { + if (lesson.getRoomList() != null && !lesson.getRoomList().isEmpty()) { + if (StringUtils.isEmpty(lesson.getXjsbh())) { + lesson.setXjsbh(lesson.getRoomList().get(0).getJsbh()); + } + if (StringUtils.isEmpty(lesson.getYjsbh())) { + lesson.setYjsbh(lesson.getRoomList().get(0).getJsbh()); + } + if (StringUtils.isEmpty(lesson.getJsbh())) { + lesson.setJsbh(lesson.getRoomList().get(0).getJsbh()); + } + } else if (StringUtils.isNotEmpty(lesson.getJsbh())) { + AdjustRoomDTO dto = new AdjustRoomDTO(); + dto.setJsbh(lesson.getJsbh()); + lesson.getRoomList().add(dto); + } + } + } + /** * 教研室审批调课申请。 *

diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/KCBServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/KCBServiceImpl.java index af08e13b1..1ad5c1bb9 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/KCBServiceImpl.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/KCBServiceImpl.java @@ -9,11 +9,14 @@ import com.roomroot.jwgl.mapper.KCBMapper; import com.roomroot.jwgl.mapper.KcbTimetableMapper; import com.roomroot.jwgl.mapper.SystemInitializationMapper; import com.roomroot.jwgl.service.KCBService; +import com.roomroot.jwgl.unit.BusinessException; import com.roomroot.jwgl.unit.PageQuery; import com.roomroot.jwgl.unit.PageResult; import com.roomroot.jwgl.utils.UuidUtil; +import com.roomroot.jwgl.utils.BasicManagementConstants; import com.roomroot.jwgl.utils.JwglRoleHelper; import com.roomroot.jwgl.vo.kcb.ClassTimetableVO; +import com.roomroot.jwgl.vo.kcb.DailyWeeklyTimetableRangeVO; import com.roomroot.jwgl.vo.kcb.DailyWeeklyTimetableVO; import com.roomroot.jwgl.vo.kcb.SemesterGradeExportVO; import com.roomroot.jwgl.vo.systeminitialization.SemesterInitializationVO; @@ -25,6 +28,7 @@ import java.time.DayOfWeek; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.util.List; /** @@ -85,20 +89,19 @@ public class KCBServiceImpl implements KCBService { } @Override - public List listToday(TimetableQuery cond) { - TimetableQuery filter = prepareFilter(cond); - String today = LocalDate.now().format(DATE_FORMAT); - return kcbTimetableMapper.selectLessonTimetable(filter, today, today); + public DailyWeeklyTimetableRangeVO listToday(String rq, Integer offset) { + int dayOffset = offset == null ? 0 : offset; + LocalDate day = parseViewDate(rq).plusDays(dayOffset); + return buildRangeResult(day, day, day); } @Override - public List listWeek(TimetableQuery cond) { - TimetableQuery filter = prepareFilter(cond); - LocalDate today = LocalDate.now(); - LocalDate monday = today.with(DayOfWeek.MONDAY); - LocalDate sunday = today.with(DayOfWeek.SUNDAY); - return kcbTimetableMapper.selectLessonTimetable(filter, - monday.format(DATE_FORMAT), sunday.format(DATE_FORMAT)); + public DailyWeeklyTimetableRangeVO listWeek(String rq, Integer offset) { + int weekOffset = offset == null ? 0 : offset; + LocalDate day = parseViewDate(rq).plusWeeks(weekOffset); + LocalDate monday = day.with(DayOfWeek.MONDAY); + LocalDate sunday = day.with(DayOfWeek.SUNDAY); + return buildRangeResult(monday, monday, sunday); } @Override @@ -136,6 +139,27 @@ public class KCBServiceImpl implements KCBService { util.exportExcel(response, list, "班次课程列表"); } + private LocalDate parseViewDate(String rq) { + if (StringUtils.isEmpty(rq)) { + return LocalDate.now(); + } + try { + return LocalDate.parse(rq.trim(), DATE_FORMAT); + } catch (DateTimeParseException e) { + throw new BusinessException(BasicManagementConstants.BAD_REQUEST, "日期格式应为 yyyy-MM-dd"); + } + } + + private DailyWeeklyTimetableRangeVO buildRangeResult(LocalDate viewDate, LocalDate start, LocalDate end) { + DailyWeeklyTimetableRangeVO result = new DailyWeeklyTimetableRangeVO(); + result.setRq(viewDate.format(DATE_FORMAT)); + result.setStartDate(start.format(DATE_FORMAT)); + result.setEndDate(end.format(DATE_FORMAT)); + result.setList(kcbTimetableMapper.selectLessonTimetable( + null, result.getStartDate(), result.getEndDate())); + return result; + } + /** * 未传年度时按当前学期填充;队别班次名称去空白。 * 学员强制只看本人所在学员队课表。 diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/vo/courserunning/AdjustableLessonVO.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/vo/courserunning/AdjustableLessonVO.java index 3ab6b942e..6ff86926d 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/vo/courserunning/AdjustableLessonVO.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/vo/courserunning/AdjustableLessonVO.java @@ -1,52 +1,114 @@ package com.roomroot.jwgl.vo.courserunning; +import com.roomroot.jwgl.dto.courserunning.AdjustRoomDTO; +import com.roomroot.jwgl.dto.courserunning.AdjustSupportDTO; +import com.roomroot.jwgl.dto.courserunning.AdjustTeacherDTO; +import com.roomroot.jwgl.dto.courserunning.AdjustTeamDTO; import lombok.Data; +import java.time.LocalDateTime; +import java.util.List; + /** - * 可供调课的课次,来自学员队任务表,并关联课表、课程表。 + * 可供调课的课次。 + *

+ * 字段与 {@code /adjust/submit} 入参对齐:除事由、备注等需用户填写的项外, + * 其余提交字段均带出当前课次默认值,前端可直接用于新增调课申请。 + *

*/ @Data public class AdjustableLessonVO { - /** 实施_课程表编号(实施_调课申请主关联) */ + /** 实施_课程表编号,对应提交参数 sskcbbh */ private String sskcbbh; - /** 原上课日期 */ - private java.time.LocalDateTime rq; + /** 当前上课日期,作为提交参数 rq 的默认值 */ + private LocalDateTime rq; - /** 原节次 */ + /** 当前节次,作为提交参数 jc 的默认值 */ private Integer jc; - /** 学员队任务表编号 */ + /** 年度,对应提交参数 nd */ + private Integer nd; + + /** 申请教员编号,对应提交参数 sqjybh */ + private String sqjybh; + + /** 学员队任务表编号,对应提交参数 xydrwbh */ private String xydrwbh; - /** 课表.课编号 */ + /** 课表.课编号,对应提交参数 kbh */ private String kbh; - /** 课程名称 */ + /** 课程表编号,对应提交参数 kcbbh */ + private String kcbbh; + + /** 拟调整教室编号,默认当前教室,对应提交参数 xjsbh */ + private String xjsbh; + + /** 当前教学内容,对应提交参数 jxnr */ + private String jxnr; + + /** 当前教学要点,对应提交参数 jxyd */ + private String jxyd; + + /** 当前教学方法,对应提交参数 jxff */ + private String jxff; + + /** 当前教学保障备注,对应提交参数 jxbzbz */ + private String jxbzbz; + + /** 当前用车信息,对应提交参数 ycxx */ + private String ycxx; + + /** 当前教室列表,对应提交参数 roomList */ + private List roomList; + + /** 当前辅助教员列表,对应提交参数 teacherList */ + private List teacherList; + + /** 当前学员队列表,对应提交参数 teamList */ + private List teamList; + + /** 当前保障明细列表,对应提交参数 supportList */ + private List supportList; + + /** 原教室编号 */ + private String yjsbh; + + /** 课程名称(展示用) */ private String kcmc; - /** 学员队编号 */ + /** 学员队编号(展示用) */ private String xydbh; - /** 学员队名称 */ + /** 学员队名称(展示用) */ private String xydmc; - /** 教员编号 */ + /** 教员编号(展示用) */ private String jybh; - /** 课次序号 */ + /** 课次序号(展示用) */ private Integer kcxh; - /** 教室编号 */ + /** 当前教室编号(展示用,与 xjsbh 同值) */ private String jsbh; - /** 年度 */ - private Integer nd; - /** 教研室代号 */ private String jysdh; - /** 课程表编号 */ - private String kcbbh; + /** + * 课次关联子表明细行,仅用于批量回填,不对外返回。 + */ + @Data + public static class ChildRow { + private String sskcbbh; + private String jsbh; + private String bz; + private String fzjybh; + private Integer zjy; + private String xydbh; + private String bztgmxbh; + private Integer sl; + } } diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/vo/kcb/DailyWeeklyTimetableRangeVO.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/vo/kcb/DailyWeeklyTimetableRangeVO.java new file mode 100644 index 000000000..ebd455c39 --- /dev/null +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/vo/kcb/DailyWeeklyTimetableRangeVO.java @@ -0,0 +1,27 @@ +package com.roomroot.jwgl.vo.kcb; + +import lombok.Data; + +import java.util.List; + +/** + * 今日课表、本周课表查询结果。 + *

+ * {@code rq} 为当前查看日期,连续点上一天/下一天/上一周/下一周时把该值回传,并带 offset。 + *

+ */ +@Data +public class DailyWeeklyTimetableRangeVO { + + /** 当前查看日期(yyyy-MM-dd),下次切换时回传 */ + private String rq; + + /** 查询起始日期 */ + private String startDate; + + /** 查询结束日期 */ + private String endDate; + + /** 课表行 */ + private List list; +}