diff --git a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/StudentRecordsController.java b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/StudentRecordsController.java
index ef3ae0604..12c477850 100644
--- a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/StudentRecordsController.java
+++ b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/StudentRecordsController.java
@@ -384,23 +384,41 @@ public class StudentRecordsController {
// ======================== 课程成绩查询 ========================
/**
- * 查询学员的课程成绩列表JW
+ * 分页查询学员的课程成绩列表。
+ *
默认不传参数则全部分页展示;可按学员编号、年度筛选;年度不传时默认展示最新年度(最大年度)的数据。
*
- * @param xybh 学员编号
+ * @param pageNum 页码(默认1)
+ * @param pageSize 每页条数(默认20)
+ * @param xybh 学员编号(可选)
+ * @param nd 年度(可选)
*/
@GetMapping("/grades")
- public Result> getGrades(@RequestParam("xybh") String xybh) {
- return Result.success(studentRecordsService.getCourseGrades(xybh));
+ public Result> getGrades(
+ @RequestParam(defaultValue = "1") Integer pageNum,
+ @RequestParam(defaultValue = "20") Integer pageSize,
+ @RequestParam(required = false) String xybh,
+ @RequestParam(required = false) Integer nd) {
+ return Result.success(studentRecordsService.pageCourseGrades(
+ new PageQuery(pageNum, pageSize), xybh, nd));
}
/**
- * 查询学员的课程过程成绩列表
+ * 分页查询学员的课程过程成绩列表。
+ * 默认不传参数则全部分页展示;可按学员编号、年度筛选;年度不传时默认展示最新年度(最大年度)的数据。
*
- * @param xybh 学员编号
+ * @param pageNum 页码(默认1)
+ * @param pageSize 每页条数(默认20)
+ * @param xybh 学员编号(可选)
+ * @param nd 年度(可选)
*/
@GetMapping("/process-grades")
- public Result> getProcessGrades(@RequestParam("xybh") String xybh) {
- return Result.success(studentRecordsService.getCourseProcessGrades(xybh));
+ public Result> getProcessGrades(
+ @RequestParam(defaultValue = "1") Integer pageNum,
+ @RequestParam(defaultValue = "20") Integer pageSize,
+ @RequestParam(required = false) String xybh,
+ @RequestParam(required = false) Integer nd) {
+ return Result.success(studentRecordsService.pageCourseProcessGrades(
+ new PageQuery(pageNum, pageSize), xybh, nd));
}
/**
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/config/AccountManagementWebMvcConfig.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/config/AccountManagementWebMvcConfig.java
index f9321a5f0..f3977cbd3 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/config/AccountManagementWebMvcConfig.java
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/config/AccountManagementWebMvcConfig.java
@@ -1,6 +1,7 @@
package com.roomroot.jwgl.config;
import com.roomroot.jwgl.interceptor.AccountManagementAuthorizationInterceptor;
+import com.roomroot.jwgl.interceptor.JwglApiAccessInterceptor;
import com.roomroot.jwgl.interceptor.OperationLogInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
@@ -26,21 +27,27 @@ public class AccountManagementWebMvcConfig implements WebMvcConfigurer {
*/
private final OperationLogInterceptor operationLogInterceptor;
+ private final JwglApiAccessInterceptor jwglApiAccessInterceptor;
+
/**
* 构造账户管理和操作日志统一 Web MVC 配置。
*
* @param authorizationInterceptor 账户管理身份和权限拦截器
* @param operationLogInterceptor 操作日志统一请求采集拦截器
+ * @param jwglApiAccessInterceptor 教务角色接口访问拦截器
*/
public AccountManagementWebMvcConfig(
AccountManagementAuthorizationInterceptor
authorizationInterceptor,
- OperationLogInterceptor operationLogInterceptor) {
+ OperationLogInterceptor operationLogInterceptor,
+ JwglApiAccessInterceptor jwglApiAccessInterceptor) {
// 第一步:保存账户管理专用拦截器,供 MVC 注册阶段使用。
this.authorizationInterceptor = authorizationInterceptor;
// 第二步:保存操作日志采集拦截器,供 MVC 注册阶段使用。
this.operationLogInterceptor = operationLogInterceptor;
+
+ this.jwglApiAccessInterceptor = jwglApiAccessInterceptor;
}
/**
@@ -65,6 +72,17 @@ public class AccountManagementWebMvcConfig implements WebMvcConfigurer {
* 第五步:覆盖全部 Controller 请求,由采集拦截器自行跳过
* 非 Controller 处理器和没有有效登录记录的请求。
*/
+ registry.addInterceptor(jwglApiAccessInterceptor)
+ .addPathPatterns("/**")
+ .excludePathPatterns(
+ "/login",
+ "/register",
+ "/captchaImage",
+ "/jys/teacher/list",
+ "/swagger-ui/**",
+ "/v3/api-docs/**",
+ "/druid/**");
+
registry.addInterceptor(operationLogInterceptor)
.addPathPatterns("/**");
}
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SSKCB_RZMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SSKCB_RZMapper.xml
index 6b82c18d5..fa0ef674e 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SSKCB_RZMapper.xml
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SSKCB_RZMapper.xml
@@ -85,6 +85,9 @@
AND k."课名称" LIKE CONCAT('%', #{cond.kcmc}, '%')
+
+ AND r."教员编号" = #{cond.jybh}
+
AND j."教员姓名" LIKE CONCAT('%', #{cond.skjy}, '%')
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCCJMapper.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCCJMapper.java
index 8c71102c8..9ea40cca4 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCCJMapper.java
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCCJMapper.java
@@ -1,6 +1,7 @@
package com.roomroot.jwgl.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.roomroot.jwgl.entity.XYKCCJ;
import com.roomroot.jwgl.vo.elective.StudentGradeVO;
import org.apache.ibatis.annotations.Mapper;
@@ -13,6 +14,14 @@ public interface XYKCCJMapper extends BaseMapper {
List selectByStudentId(@Param("xybh") String xybh);
+ /**
+ * 分页条件查询课程成绩。
+ * 学员编号、年度可选;年度未传时默认取最大年度(最新年度)的数据。
+ */
+ Page selectPageByCondition(Page page,
+ @Param("xybh") String xybh,
+ @Param("nd") Integer nd);
+
/** 按学员队查询成绩(含学员姓名学号) */
List selectGradeByXydbh(@Param("xydbh") String xydbh, @Param("kmbh") String kmbh);
}
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCCJMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCCJMapper.xml
index 251a21cbd..b10afdc98 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCCJMapper.xml
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCCJMapper.xml
@@ -36,6 +36,23 @@
ORDER BY 年度 DESC, 科目编号
+
+
+
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCGCCJMapper.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCGCCJMapper.java
index 9517fe756..8a95660c9 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCGCCJMapper.java
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCGCCJMapper.java
@@ -1,6 +1,7 @@
package com.roomroot.jwgl.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.roomroot.jwgl.entity.XYKCGCCJ;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -11,4 +12,12 @@ import java.util.List;
public interface XYKCGCCJMapper extends BaseMapper {
List selectByStudentId(@Param("xybh") String xybh);
+
+ /**
+ * 分页条件查询课程过程成绩。
+ * 学员编号、年度可选;年度未传时默认取最大年度(最新年度)的数据。
+ */
+ Page selectPageByCondition(Page page,
+ @Param("xybh") String xybh,
+ @Param("nd") Integer nd);
}
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCGCCJMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCGCCJMapper.xml
index 9d2092da6..9af709432 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCGCCJMapper.xml
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYKCGCCJMapper.xml
@@ -37,4 +37,21 @@
ORDER BY 年度 DESC, 科目编号
+
+
+
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/StudentRecordsService.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/StudentRecordsService.java
index 5558b62c1..a372e2846 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/StudentRecordsService.java
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/StudentRecordsService.java
@@ -47,11 +47,11 @@ public interface StudentRecordsService {
// ========== 学员课程成绩查询 ==========
- /** 查询学员的所有课程成绩 */
- List getCourseGrades(String xybh);
+ /** 分页查询学员的课程成绩列表(按学员编号、年度筛选,年度为空默认最新年度) */
+ PageResult pageCourseGrades(PageQuery query, String xybh, Integer nd);
- /** 查询学员的所有课程过程成绩 */
- List getCourseProcessGrades(String xybh);
+ /** 分页查询学员的课程过程成绩列表(按学员编号、年度筛选,年度为空默认最新年度) */
+ PageResult pageCourseProcessGrades(PageQuery query, String xybh, Integer nd);
// ========== Excel 导出 ==========
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/KSServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/KSServiceImpl.java
index 4f54dc646..c6f1b4b6e 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/KSServiceImpl.java
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/KSServiceImpl.java
@@ -2,24 +2,18 @@ package com.roomroot.jwgl.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.roomroot.common.constant.Constants;
-import com.roomroot.common.core.domain.entity.SysRole;
-import com.roomroot.common.core.domain.entity.SysUser;
-import com.roomroot.common.core.domain.model.LoginUser;
import com.roomroot.common.exception.ServiceException;
-import com.roomroot.common.utils.SecurityUtils;
import com.roomroot.common.utils.StringUtils;
import com.roomroot.common.utils.poi.ExcelUtil;
import com.roomroot.jwgl.dto.ks.HourStatisticsQuery;
-import com.roomroot.jwgl.entity.JYB;
import com.roomroot.jwgl.entity.KSFBZ;
-import com.roomroot.jwgl.mapper.JYBMapper;
import com.roomroot.jwgl.mapper.KSFBZMapper;
import com.roomroot.jwgl.mapper.KSTJBMapper;
import com.roomroot.jwgl.mapper.SystemInitializationMapper;
import com.roomroot.jwgl.service.KSService;
import com.roomroot.jwgl.unit.PageQuery;
import com.roomroot.jwgl.unit.PageResult;
+import com.roomroot.jwgl.utils.JwglRoleHelper;
import com.roomroot.jwgl.vo.ks.HourStatisticsVO;
import com.roomroot.jwgl.vo.systeminitialization.SemesterInitializationVO;
import jakarta.servlet.http.HttpServletResponse;
@@ -31,9 +25,7 @@ import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.List;
-import static com.roomroot.jwgl.utils.AccountManagementConstants.ROLE_DEPARTMENT_PERSONNEL;
import static com.roomroot.jwgl.utils.BasicManagementConstants.BAD_REQUEST;
-import static com.roomroot.jwgl.utils.BasicManagementConstants.FORBIDDEN;
import static com.roomroot.jwgl.utils.BasicManagementConstants.NOT_FOUND;
/**
@@ -45,18 +37,18 @@ public class KSServiceImpl implements KSService {
private static final double DEFAULT_STANDARD_HOURS = 180D;
private static final double DEFAULT_BASE_RATE = 13D;
- @Resource
- private KSTJBMapper kstjbMapper;
-
@Resource
private KSFBZMapper ksfbzMapper;
@Resource
- private JYBMapper jybMapper;
+ private KSTJBMapper kstjbMapper;
@Resource
private SystemInitializationMapper systemInitializationMapper;
+ @Resource
+ private JwglRoleHelper jwglRoleHelper;
+
@Override
public PageResult pageHourStatistics(PageQuery query, HourStatisticsQuery cond) {
Page page = queryHours(query, cond);
@@ -132,65 +124,14 @@ public class KSServiceImpl implements KSService {
filter.setNd(LocalDate.now().getYear());
}
}
- if (isAdminViewer()) {
+ if (jwglRoleHelper.isDepartmentPersonnel()) {
return;
}
- String teacherId = resolveLoginTeacherId();
+ String teacherId = jwglRoleHelper.requireTeacherId();
filter.setJybh(teacherId);
filter.setJyxm(null);
}
- private boolean isAdminViewer() {
- try {
- if (SecurityUtils.isAdmin()) {
- return true;
- }
- LoginUser loginUser = SecurityUtils.getLoginUser();
- if (loginUser.getPermissions() != null
- && loginUser.getPermissions().contains(Constants.ALL_PERMISSION)) {
- return true;
- }
- SysUser user = loginUser.getUser();
- if (user == null || user.getRoles() == null) {
- return false;
- }
- for (SysRole role : user.getRoles()) {
- if (role == null || StringUtils.isEmpty(role.getRoleKey())) {
- continue;
- }
- String key = role.getRoleKey();
- if (Constants.SUPER_ADMIN.equals(key)
- || ROLE_DEPARTMENT_PERSONNEL.equalsIgnoreCase(key)) {
- return true;
- }
- }
- return false;
- } catch (Exception ex) {
- return false;
- }
- }
-
- private String resolveLoginTeacherId() {
- LoginUser loginUser = SecurityUtils.getLoginUser();
- SysUser user = loginUser.getUser();
- String username = loginUser.getUsername();
- if (StringUtils.isNotEmpty(username)) {
- JYB byId = jybMapper.selectById(username);
- if (byId != null) {
- return byId.getJybh();
- }
- }
- String nickName = user == null ? null : user.getNickName();
- if (StringUtils.isNotEmpty(nickName)) {
- List matched = jybMapper.selectList(
- new LambdaQueryWrapper().eq(JYB::getJyxm, nickName));
- if (matched != null && matched.size() == 1) {
- return matched.get(0).getJybh();
- }
- }
- throw new ServiceException("当前登录用户不是教员,无法查看课时统计", FORBIDDEN);
- }
-
private SemesterInitializationVO resolveCurrentSemester() {
return systemInitializationMapper.selectCurrentSemester();
}
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/LogServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/LogServiceImpl.java
index 64c69c130..fb8adec99 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/LogServiceImpl.java
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/LogServiceImpl.java
@@ -6,9 +6,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.roomroot.jwgl.entity.*;
import com.roomroot.jwgl.mapper.*;
import com.roomroot.jwgl.mapper.*;
+import com.roomroot.common.exception.ServiceException;
import com.roomroot.jwgl.service.LogService;
import com.roomroot.jwgl.unit.PageQuery;
import com.roomroot.jwgl.unit.PageResult;
+import com.roomroot.jwgl.utils.JwglRoleHelper;
import com.roomroot.jwgl.vo.log.TeacherHoursVO;
import com.roomroot.jwgl.vo.log.TeachingLogListVO;
import org.springframework.stereotype.Service;
@@ -23,6 +25,8 @@ import java.util.Map;
import lombok.extern.slf4j.Slf4j;
+import static com.roomroot.jwgl.utils.BasicManagementConstants.FORBIDDEN;
+
/**
* 教学日志管理服务实现
*/
@@ -70,6 +74,9 @@ public class LogServiceImpl implements LogService {
@Resource
private TeacherHoursMapper teacherHoursMapper;
+ @Resource
+ private JwglRoleHelper jwglRoleHelper;
+
// ==================== 教学日志核心 ====================
@Override
@@ -99,11 +106,29 @@ public class LogServiceImpl implements LogService {
@Override
public PageResult pageTeachingLogDetail(PageQuery query, TeachingLogListVO cond) {
+ TeachingLogListVO filter = cond == null ? new TeachingLogListVO() : cond;
+ applyTeachingLogScope(filter);
Page page = new Page<>(query.getPageNum(), query.getPageSize());
- Page result = sskcbRzMapper.selectTeachingLogList(page, cond);
+ Page result = sskcbRzMapper.selectTeachingLogList(page, filter);
return new PageResult<>(result.getRecords(), result.getTotal(), query.getPageNum(), query.getPageSize());
}
+ /**
+ * 学员不可看教学日志;教员只看本人;机关人员看全部(已上报待审核由查询状态控制)。
+ */
+ private void applyTeachingLogScope(TeachingLogListVO filter) {
+ if (jwglRoleHelper.isAdmin() || jwglRoleHelper.isDepartmentPersonnel()) {
+ return;
+ }
+ if (jwglRoleHelper.isStudent()) {
+ throw new ServiceException("学员无权查看教学日志", FORBIDDEN);
+ }
+ if (jwglRoleHelper.isTeacher()) {
+ filter.setJybh(jwglRoleHelper.requireTeacherId());
+ filter.setSkjy(null);
+ }
+ }
+
// ==================== 教学日志(实施_课程表_日志 36字段表) ====================
@Override
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/StudentRecordsServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/StudentRecordsServiceImpl.java
index 2c7fd4a33..3234ec553 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/StudentRecordsServiceImpl.java
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/StudentRecordsServiceImpl.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.roomroot.common.exception.ServiceException;
import com.roomroot.jwgl.entity.XYXX;
import com.roomroot.jwgl.entity.XYDB;
import com.roomroot.jwgl.entity.XYXJYDSQB;
@@ -22,6 +23,7 @@ import com.roomroot.jwgl.service.StudentRecordsService;
import com.roomroot.jwgl.unit.PageQuery;
import com.roomroot.jwgl.unit.PageResult;
import com.roomroot.jwgl.utils.ExcelParseUtil;
+import com.roomroot.jwgl.utils.JwglRoleHelper;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
@@ -40,6 +42,8 @@ import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
+import static com.roomroot.jwgl.utils.BasicManagementConstants.FORBIDDEN;
+
/**
* 学员档案管理服务实现类
*/
@@ -67,9 +71,13 @@ public class StudentRecordsServiceImpl implements StudentRecordsService {
@Resource
private XYKCGCCJMapper xykgccjMapper;
+ @Resource
+ private JwglRoleHelper jwglRoleHelper;
+
@Override
@Transactional
public void add(XYXX xyxx) {
+ denyStudentWrite();
xyxx.setTxzt(0);
xyxx.setLjzt(0);
xyxx.setFbzt(0);
@@ -79,6 +87,7 @@ public class StudentRecordsServiceImpl implements StudentRecordsService {
@Override
@Transactional
public void delete(String bh) {
+ denyStudentWrite();
XYXX xyxx = new XYXX();
xyxx.setBh(bh);
xyxx.setTxzt(1);
@@ -88,18 +97,24 @@ public class StudentRecordsServiceImpl implements StudentRecordsService {
@Override
@Transactional
public void update(XYXX xyxx) {
+ denyStudentWrite();
xyxxMapper.updateById(xyxx);
}
@Override
public XYXX getById(String bh) {
+ assertStudentOwn(bh);
return xyxxMapper.selectById(bh);
}
@Override
public PageResult pageList(PageQuery query, XYXX xyxx) {
+ XYXX filter = xyxx == null ? new XYXX() : xyxx;
+ if (jwglRoleHelper.isStudent()) {
+ filter.setBh(jwglRoleHelper.requireStudentId());
+ }
Page page = new Page<>(query.getPageNum(), query.getPageSize());
- Page result = xyxxMapper.selectPage(page, buildQueryWrapper(xyxx));
+ Page result = xyxxMapper.selectPage(page, buildQueryWrapper(filter));
return new PageResult<>(result.getRecords(), result.getTotal(),
query.getPageNum(), query.getPageSize());
}
@@ -176,13 +191,27 @@ public class StudentRecordsServiceImpl implements StudentRecordsService {
// ========== 学员课程成绩查询 ==========
@Override
- public List getCourseGrades(String xybh) {
- return xykccjMapper.selectByStudentId(xybh);
+ public PageResult pageCourseGrades(PageQuery query, String xybh, Integer nd) {
+ String studentId = xybh;
+ if (jwglRoleHelper.isStudent()) {
+ studentId = jwglRoleHelper.requireStudentId();
+ }
+ Page page = new Page<>(query.getPageNum(), query.getPageSize());
+ Page result = xykccjMapper.selectPageByCondition(page, studentId, nd);
+ return new PageResult<>(result.getRecords(), result.getTotal(),
+ query.getPageNum(), query.getPageSize());
}
@Override
- public List getCourseProcessGrades(String xybh) {
- return xykgccjMapper.selectByStudentId(xybh);
+ public PageResult pageCourseProcessGrades(PageQuery query, String xybh, Integer nd) {
+ String studentId = xybh;
+ if (jwglRoleHelper.isStudent()) {
+ studentId = jwglRoleHelper.requireStudentId();
+ }
+ Page page = new Page<>(query.getPageNum(), query.getPageSize());
+ Page result = xykgccjMapper.selectPageByCondition(page, studentId, nd);
+ return new PageResult<>(result.getRecords(), result.getTotal(),
+ query.getPageNum(), query.getPageSize());
}
// ========== Excel 导出 ==========
@@ -409,6 +438,22 @@ public class StudentRecordsServiceImpl implements StudentRecordsService {
return value != null && !value.isEmpty();
}
+ private void denyStudentWrite() {
+ if (jwglRoleHelper.isStudent()) {
+ throw new ServiceException("学员无权修改学籍档案", FORBIDDEN);
+ }
+ }
+
+ private void assertStudentOwn(String studentId) {
+ if (!jwglRoleHelper.isStudent()) {
+ return;
+ }
+ String ownId = jwglRoleHelper.requireStudentId();
+ if (studentId == null || !ownId.equals(studentId)) {
+ throw new ServiceException("学员只能查看本人数据", FORBIDDEN);
+ }
+ }
+
// ========== 学员学籍预警条件管理 ==========
@Override
@@ -460,20 +505,26 @@ public class StudentRecordsServiceImpl implements StudentRecordsService {
@Override
public XYXJYJJGB getWarningResultById(String bh) {
- return xyxjyjjgbMapper.selectById(bh);
+ XYXJYJJGB result = xyxjyjjgbMapper.selectById(bh);
+ if (result != null && jwglRoleHelper.isStudent()) {
+ assertStudentOwn(result.getXybh());
+ }
+ return result;
}
@Override
public PageResult pageWarningResult(PageQuery query, XYXJYJJGB cond) {
+ XYXJYJJGB filter = cond == null ? new XYXJYJJGB() : cond;
+ if (jwglRoleHelper.isStudent()) {
+ filter.setXybh(jwglRoleHelper.requireStudentId());
+ }
Page page = new Page<>(query.getPageNum(), query.getPageSize());
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
- if (cond != null) {
- wrapper.eq(isNotBlank(cond.getBh()), XYXJYJJGB::getBh, cond.getBh());
- wrapper.eq(cond.getNd() != null, XYXJYJJGB::getNd, cond.getNd());
- wrapper.eq(isNotBlank(cond.getYjtjbh()), XYXJYJJGB::getYjtjbh, cond.getYjtjbh());
- wrapper.eq(isNotBlank(cond.getXybh()), XYXJYJJGB::getXybh, cond.getXybh());
- wrapper.eq(cond.getFb() != null, XYXJYJJGB::getFb, cond.getFb());
- }
+ wrapper.eq(isNotBlank(filter.getBh()), XYXJYJJGB::getBh, filter.getBh());
+ wrapper.eq(filter.getNd() != null, XYXJYJJGB::getNd, filter.getNd());
+ wrapper.eq(isNotBlank(filter.getYjtjbh()), XYXJYJJGB::getYjtjbh, filter.getYjtjbh());
+ wrapper.eq(isNotBlank(filter.getXybh()), XYXJYJJGB::getXybh, filter.getXybh());
+ wrapper.eq(filter.getFb() != null, XYXJYJJGB::getFb, filter.getFb());
wrapper.orderByDesc(XYXJYJJGB::getCjsj);
Page result = xyxjyjjgbMapper.selectPage(page, wrapper);
return new PageResult<>(result.getRecords(), result.getTotal(),