1、课时统计功能调整新增;

2、教学楼序号改为自动填充,无需填写;
3、教学楼检索,教学楼代号下拉选择;
4、课表冲突检查修复
This commit is contained in:
2026-09-24 15:07:26 +08:00
parent bd395a5504
commit f8e6466d24
5 changed files with 171 additions and 58 deletions
@@ -135,6 +135,10 @@ public class KCBServiceImpl implements KCBService {
@Override
public void exportSemesterGrades(TimetableQuery cond, HttpServletResponse response) {
// 成绩表按学员粒度返回且不支持教员过滤,教员账号不能导出
if (jwglRoleHelper.isTeacher()) {
throw new BusinessException(BasicManagementConstants.FORBIDDEN, "教员账号不能导出学期成绩表");
}
TimetableQuery filter = prepareFilter(cond);
List<SemesterGradeExportVO> list = kcbTimetableMapper.selectSemesterGrades(filter);
ExcelUtil<SemesterGradeExportVO> util = new ExcelUtil<>(SemesterGradeExportVO.class);
@@ -183,60 +187,70 @@ public class KCBServiceImpl implements KCBService {
result.setRq(viewDate.format(DATE_FORMAT));
result.setStartDate(start.format(DATE_FORMAT));
result.setEndDate(end.format(DATE_FORMAT));
// 今日/本周按日期范围取数不锁年度(翻页可跨年),角色限定与组合查询一致
TimetableQuery scope = applyRoleScope(new TimetableQuery());
result.setList(kcbTimetableMapper.selectLessonTimetable(
null, result.getStartDate(), result.getEndDate()));
scope, result.getStartDate(), result.getEndDate()));
return result;
}
/**
* 角色数据范围:学员强制只看本队;教员强制只看本人课程;
* 教研室未指定时代号时按本室过滤;其余字段去空白。
* <p>今日/本周课表与组合查询共用,不附带年度默认值。</p>
*/
private TimetableQuery applyRoleScope(TimetableQuery filter) {
if (jwglRoleHelper.isStudent()) {
filter.setXydbh(jwglRoleHelper.requireStudentTeamId());
filter.setXydmc(null);
filter.setXybh(null);
filter.setJybh(null);
filter.setJybhs(null);
return filter;
}
if (StringUtils.isNotEmpty(filter.getXybh())) {
filter.setXydbh(resolveTeamByStudent(filter.getXybh().trim()));
filter.setXydmc(null);
}
if (jwglRoleHelper.isTeacher()) {
filter.setJybh(jwglRoleHelper.requireTeacherId());
filter.setJybhs(null);
}
if (jwglRoleHelper.isResearchOffice() && StringUtils.isEmpty(filter.getJysdh())) {
filter.setJysdh(jwglRoleHelper.requireResearchOfficeId());
}
if (StringUtils.isNotEmpty(filter.getXydbh())) {
filter.setXydbh(filter.getXydbh().trim());
}
if (StringUtils.isNotEmpty(filter.getXydmc())) {
filter.setXydmc(filter.getXydmc().trim());
}
if (StringUtils.isNotEmpty(filter.getJybh())) {
filter.setJybh(filter.getJybh().trim());
}
if (StringUtils.isNotEmpty(filter.getJsbh())) {
filter.setJsbh(filter.getJsbh().trim());
}
if (StringUtils.isNotEmpty(filter.getJysdh())) {
filter.setJysdh(filter.getJysdh().trim());
}
return filter;
}
/**
* 未传年度时按当前学期填充;队别班次名称去空白。
* 学员强制只看本人所在学员队课表。
*/
private TimetableQuery prepareFilter(TimetableQuery cond) {
TimetableQuery filter = cond == null ? new TimetableQuery() : cond;
if (jwglRoleHelper.isStudent()) {
filter.setXydbh(jwglRoleHelper.requireStudentTeamId());
filter.setXydmc(null);
filter.setXybh(null);
filter.setJybh(null);
filter.setJybhs(null);
} else {
if (StringUtils.isNotEmpty(filter.getXybh())) {
filter.setXydbh(resolveTeamByStudent(filter.getXybh().trim()));
filter.setXydmc(null);
}
if (jwglRoleHelper.isTeacher()) {
filter.setJybh(jwglRoleHelper.requireTeacherId());
filter.setJybhs(null);
}
if (jwglRoleHelper.isResearchOffice() && StringUtils.isEmpty(filter.getJysdh())) {
filter.setJysdh(jwglRoleHelper.requireResearchOfficeId());
}
if (StringUtils.isNotEmpty(filter.getXydbh())) {
filter.setXydbh(filter.getXydbh().trim());
}
if (StringUtils.isNotEmpty(filter.getXydmc())) {
filter.setXydmc(filter.getXydmc().trim());
}
if (StringUtils.isNotEmpty(filter.getJybh())) {
filter.setJybh(filter.getJybh().trim());
}
if (StringUtils.isNotEmpty(filter.getJsbh())) {
filter.setJsbh(filter.getJsbh().trim());
}
if (StringUtils.isNotEmpty(filter.getJysdh())) {
filter.setJysdh(filter.getJysdh().trim());
}
}
TimetableQuery filter = applyRoleScope(cond == null ? new TimetableQuery() : cond);
if (filter.getNd() != null) {
return filter;
}
SemesterInitializationVO semester = systemInitializationMapper.selectCurrentSemester();
if (semester != null && semester.getYear() != null) {
filter.setNd(semester.getYear());
if (filter.getXqdc() == null) {
filter.setXqdc(semester.getSequenceNumber());
}
// 不默认学期第次:课程-学员队关联的「学期第次」与校历学期序号口径不同,
// 年度已是学期代号(如 202603),再叠加序号过滤会查不到任何数据。
} else {
filter.setNd(LocalDate.now().getYear());
}