From 770d32a6252f25b55bcb2a704c685e78813f9708 Mon Sep 17 00:00:00 2001
From: liumengyu <2459468901@qq.com>
Date: Fri, 28 Aug 2026 17:34:56 +0800
Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../web/controller/jwgl/JYSController.java | 5 +-
.../jwgl/SemesterCalendarController.java | 5 +
.../jwgl/StudentRecordsController.java | 34 +++-
.../jwgl/TrainingProgramController.java | 1 +
.../controller/jwgl/ZYJXJHBController.java | 12 +-
.../java/com/roomroot/jwgl/entity/JCXX.java | 4 +-
.../java/com/roomroot/jwgl/entity/PXRW.java | 4 +-
.../java/com/roomroot/jwgl/entity/XYXX.java | 24 +++
.../com/roomroot/jwgl/mapper/JYSBMapper.xml | 4 +-
.../com/roomroot/jwgl/mapper/PXRWMapper.java | 22 +++
.../com/roomroot/jwgl/mapper/PXRWMapper.xml | 38 ++++
.../roomroot/jwgl/mapper/XYKCCJMapper.java | 9 +-
.../com/roomroot/jwgl/mapper/XYKCCJMapper.xml | 28 ++-
.../com/roomroot/jwgl/mapper/XYXXMapper.java | 9 +
.../com/roomroot/jwgl/mapper/XYXXMapper.xml | 34 ++++
.../com/roomroot/jwgl/mapper/ZYBMapper.xml | 5 +-
.../jwgl/service/StudentRecordsService.java | 14 +-
.../roomroot/jwgl/service/ZYJXJHBService.java | 14 +-
.../service/impl/DisciplineServiceImpl.java | 1 +
.../impl/SemesterCalendarServiceImpl.java | 2 +-
.../impl/StudentRecordsServiceImpl.java | 187 +++++++++++++++++-
.../jwgl/service/impl/ZYJXJHBServiceImpl.java | 19 +-
.../roomroot/jwgl/vo/StudentListEchoVO.java | 31 +++
23 files changed, 464 insertions(+), 42 deletions(-)
create mode 100644 backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/PXRWMapper.java
create mode 100644 backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/PXRWMapper.xml
create mode 100644 backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/vo/StudentListEchoVO.java
diff --git a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/JYSController.java b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/JYSController.java
index dd492ca49..f8f919da0 100644
--- a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/JYSController.java
+++ b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/JYSController.java
@@ -1,5 +1,6 @@
package com.roomroot.web.controller.jwgl;
+import com.roomroot.common.utils.StringUtils;
import com.roomroot.jwgl.dto.faculty.AddTeacherDTO;
import com.roomroot.jwgl.dto.jys.ElectiveCourseBatchDTO;
import com.roomroot.jwgl.dto.jys.ElectiveCourseQuery;
@@ -119,7 +120,8 @@ public class JYSController {
@RequestParam(defaultValue = "20") Integer pageSize,
@RequestParam(required = false) String jysdh,
@RequestParam(required = false) String jysmc,
- @RequestParam(required = false) String bx) {
+ @RequestParam(required = false) String bx,
+ @RequestParam(required = false) String ty) {
PageQuery query = new PageQuery();
query.setPageNum(pageNum);
query.setPageSize(pageSize);
@@ -127,6 +129,7 @@ public class JYSController {
cond.setJysdh(jysdh);
cond.setJysmc(jysmc);
cond.setBx(bx);
+ cond.setTy(StringUtils.hasText(ty) ? Integer.valueOf(ty) : null);
PageResult pageResult = facultyService.pageJYSB(query, cond);
return Result.success(pageResult);
}
diff --git a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/SemesterCalendarController.java b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/SemesterCalendarController.java
index 8138230a9..085a12941 100644
--- a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/SemesterCalendarController.java
+++ b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/SemesterCalendarController.java
@@ -42,6 +42,11 @@ public class SemesterCalendarController {
*/
@PostMapping("/update")
public Result update(@RequestBody XQXLB xqxlb) {
+
+
+ if(xqxlb.getBh() == null || xqxlb.getBh().trim().isEmpty()){
+ return Result.error(200,"编号不得为空");
+ }
semesterCalendarService.update(xqxlb);
return Result.success();
}
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 12c477850..b09161a69 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
@@ -3,6 +3,7 @@ package com.roomroot.web.controller.jwgl;
import com.roomroot.jwgl.entity.XYXX;
import com.roomroot.jwgl.entity.XYDNDXQJBXXB;
import com.roomroot.jwgl.entity.XYDB;
+import com.roomroot.jwgl.entity.PXRW;
import com.roomroot.jwgl.entity.XYXJYDSQB;
import com.roomroot.jwgl.entity.XYXJYJJGB;
import com.roomroot.jwgl.entity.XYXJYJTJB;
@@ -44,8 +45,22 @@ public class StudentRecordsController {
@Resource
private ClassSemesterService classSemesterService;
+ /**
+ * 校验培训:按主体培训任务 0/1 查询培训任务。
+ *
+ * @param ztpxrw 主体培训任务,0-否,1-是
+ */
+ @GetMapping("/training-tasks")
+ public Result> listTrainingTasks(@RequestParam("ztpxrw") Integer ztpxrw) {
+ return Result.success(studentRecordsService.listTrainingTasks(ztpxrw));
+ }
+
// ======================== 学员信息维护 ========================
+ /**
+ * 新增学员。
+ * 编号由后台生成 UUID;学号按当前班次编号查学员队期表的学号前缀、学号位数顺序生成,保证不重复。
+ */
@PostMapping("/add")
public Result add(@RequestBody XYXX xyxx) {
studentRecordsService.add(xyxx);
@@ -69,6 +84,11 @@ public class StudentRecordsController {
return Result.success(studentRecordsService.getById(bh));
}
+ /**
+ * 分页查询学员信息。
+ * 回显年级、专业、班次、考试情况、不及格门数、管理机构。
+ * 当前班次编号关联学员队表、专业表、学员课程成绩。
+ */
@GetMapping("/list")
public Result> list(PageQuery query, XYXX xyxx) {
return Result.success(studentRecordsService.pageList(query, xyxx));
@@ -385,21 +405,27 @@ public class StudentRecordsController {
/**
* 分页查询学员的课程成绩列表。
- * 默认不传参数则全部分页展示;可按学员编号、年度筛选;年度不传时默认展示最新年度(最大年度)的数据。
+ *
+ * 按课程编号、学员队编号、学号、年度筛选。学号通过学员编号关联学员信息表匹配。
+ *
*
* @param pageNum 页码(默认1)
* @param pageSize 每页条数(默认20)
- * @param xybh 学员编号(可选)
+ * @param kcbh 课程编号(对应成绩表科目编号,可选)
+ * @param xydbh 学员队编号(可选)
+ * @param xh 学号(可选,关联学员信息表)
* @param nd 年度(可选)
*/
@GetMapping("/grades")
public Result> getGrades(
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "20") Integer pageSize,
- @RequestParam(required = false) String xybh,
+ @RequestParam(required = false) String kcbh,
+ @RequestParam(required = false) String xydbh,
+ @RequestParam(required = false) String xh,
@RequestParam(required = false) Integer nd) {
return Result.success(studentRecordsService.pageCourseGrades(
- new PageQuery(pageNum, pageSize), xybh, nd));
+ new PageQuery(pageNum, pageSize), kcbh, xydbh, xh, nd));
}
/**
diff --git a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/TrainingProgramController.java b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/TrainingProgramController.java
index 40b3ce4c8..54f798283 100644
--- a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/TrainingProgramController.java
+++ b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/TrainingProgramController.java
@@ -87,6 +87,7 @@ public class TrainingProgramController {
* zydm — 专业代码(模糊匹配)
* pxlx — 培训类型(精确匹配,用于版本筛选)
* pxcc — 培训层次(精确匹配)
+ * ty — 停用(精确匹配)
*
*
*
diff --git a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/ZYJXJHBController.java b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/ZYJXJHBController.java
index b4584d920..f241095ff 100644
--- a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/ZYJXJHBController.java
+++ b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/ZYJXJHBController.java
@@ -2,6 +2,8 @@ package com.roomroot.web.controller.jwgl;
import com.roomroot.jwgl.entity.ZYJXJHB;
import com.roomroot.jwgl.service.ZYJXJHBService;
+import com.roomroot.jwgl.unit.PageQuery;
+import com.roomroot.jwgl.unit.PageResult;
import com.roomroot.jwgl.unit.Result;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.*;
@@ -79,9 +81,13 @@ public class ZYJXJHBController {
* @param ty 停用标识(0-正常,1-停用)
*/
@GetMapping("/listByZydhAndTy")
- public Result> listByZydhAndTy(@RequestParam("zydh") String zydh,
- @RequestParam("ty") Integer ty) {
- return Result.success(zyjxjhbService.listByZydhAndTy(zydh, ty));
+ public Result> listByZydhAndTy(
+ @RequestParam(defaultValue = "1") Integer pageNum,
+ @RequestParam(defaultValue = "20") Integer pageSize,
+ @RequestParam(required = false) String zydh,
+ @RequestParam(required = false) Integer ty) {
+ return Result.success(zyjxjhbService.pageByZydhAndTy(
+ new PageQuery(pageNum, pageSize), zydh, ty));
}
/**
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JCXX.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JCXX.java
index fd0075e8b..99999133a 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JCXX.java
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JCXX.java
@@ -18,9 +18,9 @@ import java.time.LocalDateTime;
public class JCXX extends BaseEntity {
/**
- * 教研室代号
+ * 主键ID
*/
- @TableId(value = "ID", type = IdType.INPUT)
+ @TableId(value = "ID")
private String id;
/**
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/PXRW.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/PXRW.java
index 8c1cca8d9..d929f9bec 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/PXRW.java
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/PXRW.java
@@ -3,6 +3,7 @@ package com.roomroot.jwgl.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.roomroot.jwgl.unit.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -99,8 +100,9 @@ public class PXRW extends BaseEntity {
private String ssdw;
/**
- * 主体培训任务
+ * 主体培训任务:0-否,1-是
*/
+ @TableField("主体培训任务")
private Integer ztpxrw;
}
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYXX.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYXX.java
index 006872a07..ef00939ad 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYXX.java
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYXX.java
@@ -216,4 +216,28 @@ public class XYXX {
/** 异动历史JSON数组,每条记录含 from/to/time/reason */
@TableField("异动历史")
private String transferHistory;
+
+ /** 年级(当前班次关联学员队表,仅列表回显) */
+ @TableField(exist = false)
+ private String nj;
+
+ /** 专业(当前班次关联专业表,仅列表回显) */
+ @TableField(exist = false)
+ private String zy;
+
+ /** 班次(当前班次对应学员队名称,仅列表回显) */
+ @TableField(exist = false)
+ private String bc;
+
+ /** 考试情况(当前班次关联学员课程成绩汇总,仅列表回显) */
+ @TableField(exist = false)
+ private String ksqk;
+
+ /** 不及格门数(当前班次关联学员课程成绩统计,仅列表回显) */
+ @TableField(exist = false)
+ private Integer bjgms;
+
+ /** 管理机构(专业表教学管理机构,仅列表回显) */
+ @TableField(exist = false)
+ private String gljg;
}
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/JYSBMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/JYSBMapper.xml
index a78a4d4ea..bdbcd5cb8 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/JYSBMapper.xml
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/JYSBMapper.xml
@@ -34,7 +34,9 @@
AND 部系 LIKE CONCAT('%', #{jysb.bx}, '%')
- ORDER BY 序号
+
+ AND 停用 = #{jysb.ty}
+
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/PXRWMapper.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/PXRWMapper.java
new file mode 100644
index 000000000..bde2fb6d5
--- /dev/null
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/PXRWMapper.java
@@ -0,0 +1,22 @@
+package com.roomroot.jwgl.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.roomroot.jwgl.entity.PXRW;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 培训任务 Mapper。
+ */
+@Mapper
+public interface PXRWMapper extends BaseMapper {
+
+ /**
+ * 按主体培训任务标志查询培训任务。
+ *
+ * @param ztpxrw 主体培训任务:0-否,1-是
+ */
+ List selectByZtpxrw(@Param("ztpxrw") Integer ztpxrw);
+}
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/PXRWMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/PXRWMapper.xml
new file mode 100644
index 000000000..468fa6c1f
--- /dev/null
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/PXRWMapper.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "标识号", "序号", "任务来源", "年级", "在校状态", "任务类别",
+ "入学日期", "毕业日期", "备注", "学科专业信息标识号", "名称",
+ "计划人数", "任务说明", "计划班次数", "JSONZD", "所属单位", "主体培训任务"
+
+
+
+
+
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 9ea40cca4..6b4350364 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
@@ -16,11 +16,14 @@ public interface XYKCCJMapper extends BaseMapper {
/**
* 分页条件查询课程成绩。
- * 学员编号、年度可选;年度未传时默认取最大年度(最新年度)的数据。
+ * 按课程编号(科目编号)、学员队编号、学号、年度筛选。学号经学员编号关联学员信息表匹配。
*/
Page selectPageByCondition(Page page,
- @Param("xybh") String xybh,
- @Param("nd") Integer nd);
+ @Param("kcbh") String kcbh,
+ @Param("xydbh") String xydbh,
+ @Param("xh") String xh,
+ @Param("nd") Integer nd,
+ @Param("xybh") String xybh);
/** 按学员队查询成绩(含学员姓名学号) */
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 b10afdc98..e1650f01d 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,21 +36,31 @@
ORDER BY 年度 DESC, 科目编号
-
+
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYXXMapper.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYXXMapper.java
index 5150ba6b6..37270eef6 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYXXMapper.java
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYXXMapper.java
@@ -3,9 +3,12 @@ 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.XYXX;
+import com.roomroot.jwgl.vo.StudentListEchoVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
+import java.util.List;
+
/**
* 学员信息表 Mapper
*/
@@ -16,4 +19,10 @@ public interface XYXXMapper extends BaseMapper {
* 分页查询学员信息(支持条件筛选)
*/
Page selectPageList(Page page, @Param("xyxx") XYXX xyxx);
+
+ /**
+ * 按学员编号批量回显年级、专业、班次、考试情况、不及格门数、管理机构。
+ * 当前班次编号关联学员队表、专业表、学员课程成绩。
+ */
+ List selectEchoByStudentIds(@Param("ids") List ids);
}
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYXXMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYXXMapper.xml
index 3290e35c4..9bcf6b1f4 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYXXMapper.xml
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYXXMapper.xml
@@ -89,4 +89,38 @@
ORDER BY 学号
+
+
+
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/ZYBMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/ZYBMapper.xml
index 8ad3b6970..634802549 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/ZYBMapper.xml
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/ZYBMapper.xml
@@ -49,7 +49,10 @@
SELECT
FROM "专业表"
- WHERE 停用 = 0
+ WHERE 1=1
+
+ AND 停用 = #{zyb.ty},
+
AND 专业名称 LIKE CONCAT('%', #{zyb.zymc}, '%')
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 a372e2846..0e64821f8 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
@@ -2,6 +2,7 @@ package com.roomroot.jwgl.service;
import com.roomroot.jwgl.entity.XYXX;
import com.roomroot.jwgl.entity.XYDB;
+import com.roomroot.jwgl.entity.PXRW;
import com.roomroot.jwgl.entity.XYXJYDSQB;
import com.roomroot.jwgl.entity.XYXJYJJGB;
import com.roomroot.jwgl.entity.XYXJYJTJB;
@@ -23,7 +24,7 @@ import java.util.List;
*/
public interface StudentRecordsService {
- /** 新增学员 */
+ /** 新增学员。编号后台生成 UUID;学号按当前班次在学员队期表的学号前缀、学号位数顺序生成。 */
void add(XYXX xyxx);
/** 删除学员(退学处理) */
@@ -47,8 +48,8 @@ public interface StudentRecordsService {
// ========== 学员课程成绩查询 ==========
- /** 分页查询学员的课程成绩列表(按学员编号、年度筛选,年度为空默认最新年度) */
- PageResult pageCourseGrades(PageQuery query, String xybh, Integer nd);
+ /** 分页查询学员的课程成绩列表(按课程编号、学员队编号、学号、年度筛选) */
+ PageResult pageCourseGrades(PageQuery query, String kcbh, String xydbh, String xh, Integer nd);
/** 分页查询学员的课程过程成绩列表(按学员编号、年度筛选,年度为空默认最新年度) */
PageResult pageCourseProcessGrades(PageQuery query, String xybh, Integer nd);
@@ -127,4 +128,11 @@ public interface StudentRecordsService {
/** 从 Excel(.xls/.xlsx) 批量导入学员信息 */
int importStudents(MultipartFile file) throws Exception;
+
+ /**
+ * 按主体培训任务标志查询培训任务。
+ *
+ * @param ztpxrw 主体培训任务:0-否,1-是
+ */
+ List listTrainingTasks(Integer ztpxrw);
}
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/ZYJXJHBService.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/ZYJXJHBService.java
index 1813b9bb2..d24c57bfa 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/ZYJXJHBService.java
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/ZYJXJHBService.java
@@ -1,6 +1,8 @@
package com.roomroot.jwgl.service;
import com.roomroot.jwgl.entity.ZYJXJHB;
+import com.roomroot.jwgl.unit.PageQuery;
+import com.roomroot.jwgl.unit.PageResult;
import java.util.List;
@@ -53,13 +55,15 @@ public interface ZYJXJHBService {
List list();
/**
- * 根据专业代号和停用标识查询
+ * 分页查询专业教学计划。
+ * 专业代号、停用标识可选,传了才作为等值条件过滤;不传则查询全部。
*
- * @param zydh 专业代号
- * @param ty 停用标识(0-正常,1-停用)
- * @return 列表
+ * @param query 分页参数
+ * @param zydh 专业代号(可选)
+ * @param ty 停用标识(可选,0-正常,1-停用)
+ * @return 分页结果
*/
- List listByZydhAndTy(String zydh, Integer ty);
+ PageResult pageByZydhAndTy(PageQuery query, String zydh, Integer ty);
/** 从 Excel(.xls/.xlsx) 导入专业教学计划 */
int importZYJXJHBFromExcel(org.springframework.web.multipart.MultipartFile file) throws Exception;
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/DisciplineServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/DisciplineServiceImpl.java
index 0c931fd1b..b3798ca10 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/DisciplineServiceImpl.java
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/DisciplineServiceImpl.java
@@ -44,6 +44,7 @@ public class DisciplineServiceImpl implements DisciplineService {
@Transactional
public void add(XKZYXX entity) {
entity.setTy(0);
+ entity.setBsh(UuidUtil.getUUID());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
entity.setTysj(sdf.format(new Date()));
xkzyxxMapper.insert(entity);
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/SemesterCalendarServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/SemesterCalendarServiceImpl.java
index 8af48c650..bed7fe9e9 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/SemesterCalendarServiceImpl.java
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/SemesterCalendarServiceImpl.java
@@ -39,7 +39,6 @@ public class SemesterCalendarServiceImpl implements SemesterCalendarService {
XQXLB query = new XQXLB();
//将日期分为年度和月日
LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
-
int nd = date.getYear();
String md = String.format("%02d%02d", date.getMonthValue(), date.getDayOfMonth());
query.setJqsj(md);
@@ -81,6 +80,7 @@ public class SemesterCalendarServiceImpl implements SemesterCalendarService {
@Override
public void update(XQXLB xqxlb) {
+
xqxlbMapper.updateById(xqxlb);
}
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 3234ec553..86d1fe3dd 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
@@ -7,6 +7,8 @@ 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.XYDQB;
+import com.roomroot.jwgl.entity.PXRW;
import com.roomroot.jwgl.entity.XYXJYDSQB;
import com.roomroot.jwgl.entity.XYXJYJJGB;
import com.roomroot.jwgl.entity.XYXJYJTJB;
@@ -14,6 +16,8 @@ import com.roomroot.jwgl.entity.XYKCCJ;
import com.roomroot.jwgl.entity.XYKCGCCJ;
import com.roomroot.jwgl.mapper.XYXXMapper;
import com.roomroot.jwgl.mapper.XYDBMapper;
+import com.roomroot.jwgl.mapper.XYDQBMapper;
+import com.roomroot.jwgl.mapper.PXRWMapper;
import com.roomroot.jwgl.mapper.XYXJYDSQBMapper;
import com.roomroot.jwgl.mapper.XYXJYJJGBMapper;
import com.roomroot.jwgl.mapper.XYXJYJTJBMapper;
@@ -24,6 +28,8 @@ 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 com.roomroot.jwgl.utils.UuidUtil;
+import com.roomroot.jwgl.vo.StudentListEchoVO;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
@@ -39,7 +45,10 @@ import java.lang.reflect.Field;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import static com.roomroot.jwgl.utils.BasicManagementConstants.FORBIDDEN;
@@ -56,6 +65,12 @@ public class StudentRecordsServiceImpl implements StudentRecordsService {
@Resource
private XYDBMapper xydbMapper;
+ @Resource
+ private XYDQBMapper xydqbMapper;
+
+ @Resource
+ private PXRWMapper pxrwMapper;
+
@Resource
private XYXJYDSQBMapper xyxjydsqbMapper;
@@ -78,12 +93,112 @@ public class StudentRecordsServiceImpl implements StudentRecordsService {
@Transactional
public void add(XYXX xyxx) {
denyStudentWrite();
+ if (xyxx == null) {
+ throw new ServiceException("学员信息不能为空");
+ }
+ String classId = trimToNull(xyxx.getDqbzbh());
+ if (classId == null) {
+ throw new ServiceException("当前班次编号不能为空");
+ }
+ xyxx.setDqbzbh(classId);
+ xyxx.setBh(UuidUtil.getOriginalUUID());
+ XYDQB period = findPeriodByClassId(classId);
+ if (period == null) {
+ throw new ServiceException("未找到当前班次对应的学员队期,无法生成学号");
+ }
+ xyxx.setXh(generateStudentNumber(period, classId));
+ if (trimToNull(xyxx.getXydqbh()) == null) {
+ xyxx.setXydqbh(period.getBh());
+ }
xyxx.setTxzt(0);
xyxx.setLjzt(0);
xyxx.setFbzt(0);
xyxxMapper.insert(xyxx);
}
+ /**
+ * 按当前班次在学员队期表中的学号前缀、学号位数,顺序生成不重复学号。
+ */
+ private String generateStudentNumber(XYDQB period, String classId) {
+ String prefix = period.getXhqz() == null ? "" : period.getXhqz().trim();
+ int digits = (period.getXhws() == null || period.getXhws() <= 0) ? 3 : period.getXhws();
+ int seq = maxSequence(prefix, digits, classId) + 1;
+ int max = (int) Math.pow(10, digits) - 1;
+ while (seq <= max) {
+ String studentNo = prefix + padNumber(seq, digits);
+ Long exists = xyxxMapper.selectCount(new LambdaQueryWrapper().eq(XYXX::getXh, studentNo));
+ if (exists == null || exists == 0) {
+ return studentNo;
+ }
+ seq++;
+ }
+ throw new ServiceException("该班次学号已用尽,请调整学员队期的学号位数");
+ }
+
+ private XYDQB findPeriodByClassId(String classId) {
+ return xydqbMapper.selectOne(new LambdaQueryWrapper()
+ .eq(XYDQB::getXydbh, classId)
+ .orderByDesc(XYDQB::getRxrq)
+ .last("LIMIT 1"));
+ }
+
+ private int maxSequence(String prefix, int digits, String classId) {
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ if (!prefix.isEmpty()) {
+ wrapper.likeRight(XYXX::getXh, prefix);
+ } else {
+ wrapper.eq(XYXX::getDqbzbh, classId);
+ }
+ wrapper.select(XYXX::getXh);
+ List list = xyxxMapper.selectList(wrapper);
+ int max = 0;
+ int prefixLen = prefix.length();
+ int expectedLen = prefixLen + digits;
+ for (XYXX row : list) {
+ if (row == null || row.getXh() == null) {
+ continue;
+ }
+ String xh = row.getXh().trim();
+ if (!xh.startsWith(prefix) || xh.length() != expectedLen) {
+ continue;
+ }
+ String suffix = xh.substring(prefixLen);
+ if (!isDigits(suffix)) {
+ continue;
+ }
+ int value = Integer.parseInt(suffix);
+ if (value > max) {
+ max = value;
+ }
+ }
+ return max;
+ }
+
+ private String padNumber(int value, int digits) {
+ String text = String.valueOf(value);
+ if (text.length() >= digits) {
+ return text;
+ }
+ StringBuilder builder = new StringBuilder(digits);
+ for (int i = text.length(); i < digits; i++) {
+ builder.append('0');
+ }
+ builder.append(text);
+ return builder.toString();
+ }
+
+ private boolean isDigits(String text) {
+ if (text == null || text.isEmpty()) {
+ return false;
+ }
+ for (int i = 0; i < text.length(); i++) {
+ if (!Character.isDigit(text.charAt(i))) {
+ return false;
+ }
+ }
+ return true;
+ }
+
@Override
@Transactional
public void delete(String bh) {
@@ -115,10 +230,51 @@ public class StudentRecordsServiceImpl implements StudentRecordsService {
}
Page page = new Page<>(query.getPageNum(), query.getPageSize());
Page result = xyxxMapper.selectPage(page, buildQueryWrapper(filter));
+ fillListEcho(result.getRecords());
return new PageResult<>(result.getRecords(), result.getTotal(),
query.getPageNum(), query.getPageSize());
}
+ /**
+ * 当前班次编号关联学员队表、专业表、学员课程成绩,回显年级、专业、班次、考试情况、不及格门数、管理机构。
+ */
+ private void fillListEcho(List records) {
+ if (records == null || records.isEmpty()) {
+ return;
+ }
+ List ids = new ArrayList<>();
+ for (XYXX row : records) {
+ if (row != null && row.getBh() != null && !row.getBh().isEmpty()) {
+ ids.add(row.getBh());
+ }
+ }
+ if (ids.isEmpty()) {
+ return;
+ }
+ List echos = xyxxMapper.selectEchoByStudentIds(ids);
+ if (echos == null || echos.isEmpty()) {
+ return;
+ }
+ Map byId = new HashMap<>();
+ for (StudentListEchoVO echo : echos) {
+ if (echo != null && echo.getBh() != null) {
+ byId.put(echo.getBh(), echo);
+ }
+ }
+ for (XYXX row : records) {
+ StudentListEchoVO echo = byId.get(row.getBh());
+ if (echo == null) {
+ continue;
+ }
+ row.setNj(echo.getNj());
+ row.setZy(echo.getZy());
+ row.setBc(echo.getBc());
+ row.setKsqk(echo.getKsqk());
+ row.setBjgms(echo.getBjgms() == null ? 0 : echo.getBjgms());
+ row.setGljg(echo.getGljg());
+ }
+ }
+
/**
* 全字段动态查询条件。
*
@@ -135,6 +291,10 @@ public class StudentRecordsServiceImpl implements StudentRecordsService {
// 需要模糊匹配的字段(属性名)
Set fuzzyFields = Set.of("xm", "lxdh", "txdz");
for (Field field : XYXX.class.getDeclaredFields()) {
+ TableField tableField = field.getAnnotation(TableField.class);
+ if (tableField != null && !tableField.exist()) {
+ continue;
+ }
Object value = getFieldValue(field, query);
if (value == null || !(value instanceof String) || ((String) value).isEmpty()) {
continue;
@@ -191,13 +351,14 @@ public class StudentRecordsServiceImpl implements StudentRecordsService {
// ========== 学员课程成绩查询 ==========
@Override
- public PageResult pageCourseGrades(PageQuery query, String xybh, Integer nd) {
- String studentId = xybh;
+ public PageResult pageCourseGrades(PageQuery query, String kcbh, String xydbh, String xh, Integer nd) {
+ String selfStudentId = null;
if (jwglRoleHelper.isStudent()) {
- studentId = jwglRoleHelper.requireStudentId();
+ selfStudentId = jwglRoleHelper.requireStudentId();
}
Page page = new Page<>(query.getPageNum(), query.getPageSize());
- Page result = xykccjMapper.selectPageByCondition(page, studentId, nd);
+ Page result = xykccjMapper.selectPageByCondition(
+ page, trimToNull(kcbh), trimToNull(xydbh), trimToNull(xh), nd, selfStudentId);
return new PageResult<>(result.getRecords(), result.getTotal(),
query.getPageNum(), query.getPageSize());
}
@@ -387,6 +548,7 @@ public class StudentRecordsServiceImpl implements StudentRecordsService {
@Transactional
public void addApplication(XYXJYDSQB entity) {
LocalDateTime now = LocalDateTime.now();
+ entity.setBh(UuidUtil.getUUID());
entity.setCjsj(now);
entity.setXgsj(now);
// 状态默认待审核(0)
@@ -668,7 +830,24 @@ public class StudentRecordsServiceImpl implements StudentRecordsService {
return list.size();
}
+ @Override
+ public List listTrainingTasks(Integer ztpxrw) {
+ if (ztpxrw == null || (ztpxrw != 0 && ztpxrw != 1)) {
+ throw new ServiceException("主体培训任务只能为 0 或 1");
+ }
+ List list = pxrwMapper.selectByZtpxrw(ztpxrw);
+ return list == null ? new ArrayList<>() : list;
+ }
+
private String nvl(String value) {
return value == null ? "" : value;
}
+
+ private String trimToNull(String value) {
+ if (value == null) {
+ return null;
+ }
+ String text = value.trim();
+ return text.isEmpty() ? null : text;
+ }
}
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/ZYJXJHBServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/ZYJXJHBServiceImpl.java
index 9ee21f514..9886daff3 100644
--- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/ZYJXJHBServiceImpl.java
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/ZYJXJHBServiceImpl.java
@@ -2,9 +2,12 @@ package com.roomroot.jwgl.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.roomroot.jwgl.entity.ZYJXJHB;
import com.roomroot.jwgl.mapper.ZYJXJHBMapper;
import com.roomroot.jwgl.service.ZYJXJHBService;
+import com.roomroot.jwgl.unit.PageQuery;
+import com.roomroot.jwgl.unit.PageResult;
import com.roomroot.jwgl.utils.UuidUtil;
import org.springframework.stereotype.Service;
@@ -65,11 +68,19 @@ public class ZYJXJHBServiceImpl implements ZYJXJHBService {
}
@Override
- public List listByZydhAndTy(String zydh, Integer ty) {
+ public PageResult pageByZydhAndTy(PageQuery query, String zydh, Integer ty) {
+ Page page = new Page<>(query.getPageNum(), query.getPageSize());
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
- wrapper.eq(ZYJXJHB::getZydh, zydh)
- .eq(ZYJXJHB::getTy, ty);
- return zyjxjhbMapper.selectList(wrapper);
+ if (zydh != null && !zydh.isEmpty()) {
+ wrapper.eq(ZYJXJHB::getZydh, zydh);
+ }
+ if (ty != null) {
+ wrapper.eq(ZYJXJHB::getTy, ty);
+ }
+ wrapper.orderByAsc(ZYJXJHB::getZydh);
+ Page result = zyjxjhbMapper.selectPage(page, wrapper);
+ return new PageResult<>(result.getRecords(), result.getTotal(),
+ query.getPageNum(), query.getPageSize());
}
@Override
diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/vo/StudentListEchoVO.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/vo/StudentListEchoVO.java
new file mode 100644
index 000000000..703a8e0b0
--- /dev/null
+++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/vo/StudentListEchoVO.java
@@ -0,0 +1,31 @@
+package com.roomroot.jwgl.vo;
+
+import lombok.Data;
+
+/**
+ * 学员列表回显字段:年级、专业、班次、考试情况、不及格门数、管理机构。
+ */
+@Data
+public class StudentListEchoVO {
+
+ /** 学员编号 */
+ private String bh;
+
+ /** 年级 */
+ private String nj;
+
+ /** 专业 */
+ private String zy;
+
+ /** 班次 */
+ private String bc;
+
+ /** 考试情况 */
+ private String ksqk;
+
+ /** 不及格门数 */
+ private Integer bjgms;
+
+ /** 管理机构 */
+ private String gljg;
+}