合并冲突解决:学生消息管理和招生就业模块更新

This commit is contained in:
李旭明 committed 2025-08-04 11:03:32 +08:00
commit 593aa01a70
132 files changed
+158752 -1005

No files matched your search

@@ -0,0 +1,35 @@
# 企业信息管理模块数据库表结构设计与创建
**日期**: 2023-07-05 15:30:45
**执行人**: admin
**变更类型**: 数据库表结构创建
**变更内容**:
1. 创建企业信息表 `zsjy_enterprise`
- 用于存储企业基本信息,包含企业名称、行业、主营业务、规模等信息
- 包含联系人姓名、联系电话、邮箱、地址等联系方式
- 符合系统规范的基础字段(雪花ID、创建/更新信息、逻辑删除、多租户)
2. 创建招聘岗位表 `zsjy_job_position`
- 与企业表是一对多关系
- 存储岗位名称、工作地址、工作时间、薪资、所需技能等信息
- 支持设置有效期区间或永久有效选项
- 添加了企业ID的外键索引以提升查询效率
3. 创建海报生成记录表 `zsjy_recruitment_poster`
- 记录生成的招聘海报信息
- 可以是企业整体海报或特定岗位海报
- 存储海报的文件路径以便后续访问
**相关文件**:
- SQL脚本: `/docs/设计文档/database/招生就业/zsjy_enterprise_tables.sql`
**执行结果**: 成功创建三张表
**后续计划**:
1. 开发后端接口服务
2. 开发前端管理界面
3. 开发海报生成功能
@@ -0,0 +1,79 @@
# 招生就业模块代码调整记录
## 修复招生报名信息性别字段显示问题
**时间**: 2025-07-10 14:30:45
### 问题描述
在"招生就业》报名信息》查看招生报名信息"页面中,性别字段没有正确显示,显示为空白而非预期的"男"或"女"。
### 原因分析
1. 数据库中zsjy_gender字典可能未正确配置或数据未同步到前端缓存
2. 查看详情时性别字段(gender)可能为空,未能正确从身份证推断性别
### 修复方案
1. 创建增强版SQL脚本确保zsjy_gender字典数据正确配置,并直接修复数据库中的性别值
2. 在查看详情(handleView)方法中,增加从身份证号推断性别的逻辑
3. 添加多重性别显示方式,不仅依赖dict-tag组件,同时使用直接文本显示
4. 添加getGenderDisplay方法,根据性别字段或身份证推断性别显示文本
### 修改内容
1. 新增SQL脚本:
- `本地临时文件目录/script/fix-gender-display.sql`(基础版)
- `本地临时文件目录/script/fix-gender-display-enhanced.sql`(增强版,包括数据库数据修复)
2. 修改前端组件显示方式:
- 增加`getGenderDisplay`方法用于解析性别显示
- 改进视图对话框中性别字段的显示方式
- 改进表格列表中性别字段的显示方式
- 改进审核对话框中性别字段的显示方式
3. 修改查看详情方法:`web/src/views/zsjy/enrollment/index.vue`中的`handleView`方法
### 执行步骤
1. 执行SQL脚本修复字典数据和数据库中的性别值
```sql
-- 执行基础修复脚本
source 本地临时文件目录/script/fix-gender-display.sql
-- 或者使用增强版脚本(推荐),同时修复数据库中性别值
source 本地临时文件目录/script/fix-gender-display-enhanced.sql
```
2. 重启后端服务清除字典缓存
```bash
# 在backend目录执行
./hot-start.sh
```
3. 前端代码修改已完成,重新构建前端
```bash
# 在web目录执行
npm run build:prod
```
### 补充说明
1. 最终解决方案(2025-07-11更新):
- **完全抛弃dict-tag组件**:不再依赖字典组件显示性别
- **直接使用文本显示**:使用条件表达式将'M'/'F'直接转换为"男"/"女"
- **增强的性别解析逻辑**:支持多种性别值格式(M/F/1/2)
- **更可靠的数据获取**:改进handleView方法,多重保障获取性别值
2. 数据库修复策略:
- 修复字典数据配置
- 修复数据库中的性别值(根据身份证号自动推断)
- 确保缓存刷新,避免旧数据干扰
3. 排查步骤总结:
- 第一步:数据库层面确保zsjy_gender字典数据正确
- 第二步:代码层面使用多种方式获取性别值
- 第三步:放弃使用字典组件,改用直接文本转换显示
- 第四步:添加调试信息,确保每个环节可追踪
### 验证方法
1. 登录系统,进入"招生就业》报名信息"模块
2. 点击查看按钮,检查性别字段是否正确显示"男"或"女"
3. 可通过浏览器控制台查看日志,确认性别解析逻辑是否正常工作
### 责任人
- 开发: 吴振
- 测试: 待定
- 审核: 待定
@@ -0,0 +1,58 @@
# 招生就业模块代码调整记录
## 修复招生报名信息所属学院和学院代码显示问题
**时间**: 2025-07-11 10:15:32
### 问题描述
在"招生就业》报名信息》查看招生报名信息"页面中,所属学院和学院代码字段没有正确显示后台数据,显示为"-"或空白。
### 原因分析
1. 查看详情(handleView)方法没有特殊处理学院相关字段
2. 前端代码没有充分利用可用的数据来源(字典、部门数据)获取和显示学院信息
3. collegeOptions数据可能在查看详情时尚未完全加载
### 修复方案 (更新版)
1. 完全重构学院信息显示逻辑,使用计算属性方式显示
2. 使用多种方法确保数据加载完成,包括:
- 确保collegeOptions已加载
- 确保zsjy_college字典已加载
- 添加多种调试工具
3. 添加"刷新学院数据"和"调试学院数据"功能,方便排查问题
### 修改内容
1. 添加计算属性替代方法调用:
- `collegeDisplayName`计算属性 - 专门负责学院名称显示
- `collegeDisplayCode`计算属性 - 专门负责学院代码显示
2. 增强getCollegeAndMajorData方法:
- 同时加载字典数据和部门数据
- 增加更多数据加载容错机制
- 添加详细日志记录
- 当找不到学院时尝试其他可能的部门
3. 增强handleView方法:
- 确保在查看对话框打开前就加载好必要数据
- 添加更多调试信息
- 使用nextTick确保计算属性能够正确刷新
4. 添加调试功能:
- 添加"刷新学院数据"按钮 - 重新加载数据并显示结果
- 添加"调试学院数据"按钮 - 显示详细的调试信息
### 执行步骤
1. 前端代码修改已完成,重新构建前端
```bash
# 在web目录执行
npm run build:prod
```
### 验证方法
1. 登录系统,进入"招生就业》报名信息"模块
2. 点击查看按钮,检查所属学院和学院代码字段是否正确显示
3. 如果显示仍有问题,可以点击"刷新学院数据"按钮尝试手动刷新
### 责任人
- 开发: 吴振
- 测试: 待定
- 审核: 待定
@@ -1,250 +1,52 @@
# 代码调整记录 - 2025-07-12 - wuzhen
# 招生就业模块代码调整记录
## 📋 变更概述
**变更日期**: 2025-07-12 14:52:00
**变更人员**: wuzhen
**变更类型**: 功能修复
**变更模块**: 班级干部管理模块
## 修复招生报名信息学院和专业字段显示问题
## 🎯 变更目标
1. 解决"职务级别不能为空"的验证错误
2. 修复"cannot find converter from XgClassCadreBo to XgClassCadre"的转换器错误
**时间**: 2025-07-12 09:22:15
## 🔍 问题分析
### 问题1: 职务级别必填验证错误
- **错误现象**: 前台提示"职务级别不能为空",但界面没有该字段输入框
- **根本原因**: 后端 `positionLevel` 字段被标记为必填(`@NotNull`),但前端未提供输入
- **设计缺陷**: 职务级别应该根据职务编码自动确定,不需要用户手动输入
### 问题描述
在"招生就业》报名信息》查看招生报名信息"页面中,所属学院和学院代码字段、报考专业和专业代码字段没有正确显示后台数据。
### 问题2: MapStruct转换器缺失
- **错误现象**: 添加班干部时报错"cannot find converter from XgClassCadreBo to XgClassCadre"
- **根本原因**: `XgClassCadreBo` 类缺少 `@AutoMapper` 注解配置
- **技术问题**: MapStruct无法自动生成转换器代码
### 原因分析
1. 过于复杂的数据处理逻辑反而造成了显示问题
2. 计算属性和额外处理方法干扰了原始数据的直接显示
3. 缓存和异步加载问题导致数据无法及时显示
## 🛠️ 解决方案
### 修复方案
采用"极简化"策略,直接显示原始数据,完全移除复杂的计算属性和数据处理逻辑:
1. 直接从viewForm对象中显示原始数据,不进行任何额外处理
2. 移除不必要的计算属性和方法调用
3. 添加完善的日志记录和调试工具
### 解决方案1: 取消职务级别必填验证 + 自动设置逻辑
1. **移除必填验证注解**
```java
// 移除 @NotNull 注解
@Min(value = 1, message = "职务级别最小值为1")
@Max(value = 9, message = "职务级别最大值为9")
private Integer positionLevel;
```
### 修改内容
1. 修改视图显示部分:
- 学院名称:直接使用`viewForm.collegeName`
- 学院代码:直接使用`viewForm.collegeId`
- 报考专业:直接使用`viewForm.appliedMajor`
- 专业代码:直接使用`viewForm.majorCode`
2. 简化代码结构:
- 移除复杂的collegeDisplayName和collegeDisplayCode计算属性
- 移除不必要的数据处理和转换逻辑
- 简化对话框底部按钮,只保留必要功能
3. 添加调试功能:
- 添加"查看原始数据"按钮,显示完整的学生信息
- 优化控制台日志,方便排查问题
2. **添加自动设置逻辑**
```java
// 在 validEntityBeforeSave 方法中添加
if (StringUtils.isNotBlank(entity.getPositionCode()) && entity.getPositionLevel() == null) {
entity.setPositionLevel(determinePositionLevel(entity.getPositionCode()));
}
```
3. **职务级别映射规则**
- 班长类职务 (monitor, class_monitor) → 级别1
- 副班长类职务 (deputy, deputy_monitor) → 级别2
- 委员类职务 (secretary, study_secretary等) → 级别3
- 其他职务 → 级别9
### 解决方案2: 添加MapStruct转换器配置
```java
@AutoMapper(target = XgClassCadre.class, reverseConvertGenerate = false)
public class XgClassCadreBo extends BaseEntity {
### 执行步骤
前端代码修改已完成,重新构建前端:
```bash
# 在web目录执行
npm run build:prod
```
## 📝 具体修改内容
### 验证方法
1. 登录系统,进入"招生就业》报名信息"模块
2. 点击查看按钮,检查所属学院和学院代码、报考专业和专业代码字段是否正确显示
3. 如需查看更详细的信息,可点击"查看原始数据"按钮
### 1. 修改实体类验证规则
- **文件**: `backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/XgClassCadre.java`
- **修改**: 移除 `positionLevel` 字段的 `@NotNull` 验证注解
### 2. 修改业务对象验证规则
- **文件**: `backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgClassCadreBo.java`
- **修改**: 移除 `positionLevel` 字段的 `@NotNull` 验证注解
- **新增**: 添加 `@AutoMapper` 注解配置转换器
### 3. 修改业务逻辑
- **文件**: `backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgClassCadreServiceImpl.java`
- **新增**: `determinePositionLevel()` 方法,根据职务编码自动确定职务级别
- **修改**: `validEntityBeforeSave()` 方法,添加自动设置职务级别的逻辑
## ✅ 验证结果
1. **编译成功**: Maven编译通过,无语法错误
2. **转换器生成**: MapStruct自动生成 `XgClassCadreBo` 到 `XgClassCadre` 的转换器
3. **验证逻辑优化**: 职务级别不再是必填字段,系统自动设置
## 🔄 影响范围
- **前端**: 不需要修改,职务级别字段自动处理
- **后端**: 班级干部管理相关功能
- **数据库**: 无影响,字段保持不变
- **API**: 接口行为保持一致,但验证规则更宽松
## 📋 测试建议
1. **功能测试**: 验证添加班级干部功能正常
2. **数据验证**: 确认职务级别自动设置正确
3. **边界测试**: 测试各种职务编码的级别映射
4. **兼容性测试**: 确认现有数据不受影响
## 📝 备注
- 此次修改提升了用户体验,减少了手动输入错误
- 职务级别的自动设置逻辑可根据实际需求调整
- 建议在生产环境部署前进行充分测试
---
## 📋 变更概述
**变更日期**: 2025-07-12 16:33:00
**变更人员**: wuzhen
**变更类型**: 功能修复
**变更模块**: 班级干部管理模块
## 🎯 变更目标
修复"cannot find converter from XgClassCadre to XgClassCadreVo"的转换器错误
## 🔍 问题分析
### 问题现象
- 添加班干部成功,但列表页面不显示数据
- 刷新页面后报错"cannot find converter from XgClassCadre to XgClassCadreVo"
- 查询列表时无法将实体对象转换为视图对象
### 根本原因
- `XgClassCadreVo` 类缺少 `@AutoMapper` 注解配置
- MapStruct无法自动生成从 `XgClassCadre` 到 `XgClassCadreVo` 的转换器
- 列表查询时需要将实体对象转换为视图对象用于前端展示
## 🛠️ 解决方案
**添加MapStruct转换器配置**
```java
@AutoMapper(target = XgClassCadre.class, reverseConvertGenerate = false)
public class XgClassCadreVo extends XgClassCadre {
```
## 📝 具体修改内容
### 修改视图对象配置
- **文件**: `backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/vo/XgClassCadreVo.java`
- **新增**: 添加 `@AutoMapper` 注解和相应的import语句
- **目的**: 启用自动转换器生成,支持实体对象到视图对象的转换
## ✅ 验证结果
1. **编译成功**: Maven编译通过,转换器自动生成
2. **转换器生成**: MapStruct自动生成 `XgClassCadre` 到 `XgClassCadreVo` 的转换器
3. **功能完整**: 添加班干部后列表页面可以正常显示数据
## 🔄 影响范围
- **列表查询**: 班级干部列表页面可以正常显示数据
- **数据转换**: 实体对象与视图对象之间的转换正常
- **前端展示**: 解决了数据不显示的问题
## 📋 测试验证
1. **添加功能**: 验证添加班级干部功能正常
2. **列表显示**: 确认添加后列表页面立即显示新数据
3. **页面刷新**: 验证刷新页面后不再报转换器错误
4. **数据完整性**: 确认显示的数据字段完整正确
## 📝 备注
- 此次修复解决了数据显示问题,完善了班级干部管理功能
- 转换器配置是RuoYi框架的标准做法,确保了代码的一致性
- 建议在创建新的VO类时,及时添加转换器配置
---
## 📋 变更概述
**变更日期**: 2025-07-12 13:52:00
**变更人员**: wuzhen
**变更类型**: 功能优化
**变更模块**: 学生信息管理模块
## 🎯 变更目标
解决学生信息查询功能中的参数传递和字段匹配问题,优化用户搜索体验。
## 🔍 问题分析
### 原始问题
- 前端传递的参数格式错误:`{"name":["王"],"studentNo":["王"]}` (数组格式)
- 后端查询条件过于严格:同时使用学号精确匹配和姓名模糊匹配(AND条件)
- 用户输入"王"无法查询到相关学生信息
### 根本原因
1. **参数格式不匹配**: 前端传递数组,后端期望字符串
2. **查询逻辑不合理**: 用户输入关键字时,应该支持同时搜索学号和姓名
3. **用户体验差**: 查询条件过于严格,难以找到想要的结果
## 🛠️ 解决方案
采用**方案3:添加通用搜索字段**的方式来优化查询功能。
### 具体实现
1. **在 `XgStudentInfoBo` 中添加通用搜索字段**
```java
/**
* 通用搜索关键字(同时搜索学号和姓名)
*/
private String keyword;
```
2. **修改 `XgStudentInfoServiceImpl` 查询逻辑**
```java
// 通用搜索关键字:同时搜索学号和姓名(OR条件)
if (StringUtils.isNotBlank(bo.getKeyword())) {
lqw.and(wrapper -> wrapper
.like(XgStudentInfo::getStudentNo, bo.getKeyword())
.or()
.like(XgStudentInfo::getName, bo.getKeyword())
);
} else {
// 兼容原有的分别搜索逻辑
if (StringUtils.isNotBlank(bo.getStudentNo()) && StringUtils.isNotBlank(bo.getName())) {
lqw.and(wrapper -> wrapper
.like(XgStudentInfo::getStudentNo, bo.getStudentNo())
.or()
.like(XgStudentInfo::getName, bo.getName())
);
} else {
lqw.like(StringUtils.isNotBlank(bo.getStudentNo()), XgStudentInfo::getStudentNo, bo.getStudentNo());
lqw.like(StringUtils.isNotBlank(bo.getName()), XgStudentInfo::getName, bo.getName());
}
}
```
## 📝 具体修改内容
### 1. 业务对象字段扩展
- **文件**: `backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/domain/bo/XgStudentInfoBo.java`
- **新增**: `keyword` 字段用于通用搜索
### 2. 查询逻辑优化
- **文件**: `backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgStudentInfoServiceImpl.java`
- **修改**: `buildQueryWrapper()` 方法,支持通用搜索和兼容原有逻辑
## ✅ 验证结果
1. **编译成功**: Maven编译通过,无语法错误
2. **查询优化**: 支持OR条件查询,提升搜索命中率
3. **向下兼容**: 原有的分别搜索逻辑仍然有效
## 🔄 优化效果对比
**优化前**:
- 用户输入"王"
- 查询条件:`student_no = '王' AND name LIKE '%王%'`
- 结果:0条记录(因为没有学号为"王"的学生)
**优化后**:
- 用户输入"王"
- 查询条件:`student_no LIKE '%王%' OR name LIKE '%王%'`
- 结果:返回所有学号或姓名包含"王"的学生
## 📋 使用方式
前端现在可以通过以下方式调用:
```javascript
// 方式1:使用新的keyword参数(推荐)
GET /xg/studentInfo/list?keyword=王&pageSize=20
// 方式2:继续使用原有参数(兼容)
GET /xg/studentInfo/list?name=王&pageSize=20
```
## 📝 备注
- 新增的通用搜索功能提升了用户体验
- 保持了向下兼容,不影响现有功能
- 建议前端逐步迁移到使用 `keyword` 参数进行搜索
### 责任人
- 开发: 吴振
- 测试: 待定
- 审核: 待定
@@ -0,0 +1,74 @@
# 招生就业模块代码调整记录
## 修复招生报名信息学院字段显示问题
**时间**: 2025-07-13 09:30:15
### 问题描述
在"招生就业》报名信息》查看招生报名信息"页面中,所属学院和学院代码字段没有正确显示后台数据。
### 原因分析
1. 后端VO类缺少这两个字段:在`ZsjyEnrollmentInfoVo.java`中没有定义`collegeName`和`collegeId`字段
2. Mapper SQL查询中没有包含这两个字段:`selectZsjyEnrollmentInfoVo`查询没有包含`college_name`和`college_id`
3. ResultMap映射中缺少这两个字段:`ZsjyEnrollmentInfoResult`映射中没有映射这两个字段
4. 字段拼写问题:代码中使用`college_name`和`college_id`,但数据库中可能是`collage_name`和`collage_id`
### 修复方案
1. 在VO类中添加字段:
- 在`ZsjyEnrollmentInfoVo.java`中添加`collegeName`和`collegeId`字段及其注解
2. 更新Mapper XML:
- 在`selectZsjyEnrollmentInfoVo`查询中添加`college_name`和`college_id`字段
- 在`ZsjyEnrollmentInfoResult`映射中添加这两个字段的映射
- 在查询条件中添加对这两个字段的处理
### 修改内容
1. 在`ZsjyEnrollmentInfoVo.java`中添加:
```java
/**
* 学院名称
*/
@ExcelProperty(value = "学院名称")
private String collegeName;
/**
* 学院代码
*/
@ExcelProperty(value = "学院代码")
private String collegeId;
```
2. 在`ZsjyEnrollmentInfoMapper.xml`中更新SQL查询:
```sql
select ..., college_name, college_id, ...
from zsjy_enrollment_info
```
3. 在`ZsjyEnrollmentInfoMapper.xml`中添加ResultMap映射:
```xml
<result property="collegeName" column="college_name"/>
<result property="collegeId" column="college_id"/>
```
4. 添加查询条件:
```xml
<if test="collegeName != null and collegeName != ''">and college_name like concat('%', #{collegeName}, '%')</if>
<if test="collegeId != null and collegeId != ''">and college_id = #{collegeId}</if>
```
### 执行步骤
后端代码修改已完成,需要重新编译部署后端:
```bash
# 在backend目录执行
mvn clean package -DskipTests
```
### 验证方法
1. 重新部署后端服务
2. 登录系统,进入"招生就业》报名信息"模块
3. 点击查看按钮,检查所属学院和学院代码字段是否正确显示
### 责任人
- 开发: 吴振
- 测试: 待定
- 审核: 待定
@@ -0,0 +1,80 @@
# 招生就业模块代码调整记录
## 修复招生报名信息学院字段拼写问题
**时间**: 2025-07-14 10:15:30
### 问题描述
在"招生就业》报名信息》查看招生报名信息"页面中,所属学院和学院代码字段没有正确显示。数据库中字段名为`collage_name`和`collage_id`,而代码中使用的是`college_name`和`college_id`。
### 原因分析
1. 字段拼写不一致:
- 数据库表中的字段名为:`collage_name`和`collage_id`
- Java代码中的属性名为:`collegeName`和`collegeId`
- Mapper XML中的查询使用:`college_name`和`college_id`
2. 字段名称的差异导致:
- MyBatis无法正确映射数据库字段到Java对象
- 查询结果中这两个字段的值为空
### 修复方案
调整代码以适配数据库中实际的字段名称:
1. 在Mapper XML中:
- 查询时使用别名:`collage_name as college_name`和`collage_id as college_id`
- 条件查询中使用实际的字段名:`collage_name`和`collage_id`
2. 在实体类中:
- 使用`@TableField`注解明确指定数据库字段名称
- 例如:`@TableField("collage_name") private String collegeName`
### 修改内容
1. 在`ZsjyEnrollmentInfoMapper.xml`中:
```xml
<!-- 修改查询SQL -->
<sql id="selectZsjyEnrollmentInfoVo">
select id, name, ...,
collage_name as college_name, collage_id as college_id, ...
from zsjy_enrollment_info
</sql>
<!-- 修改条件查询 -->
<if test="collegeName != null and collegeName != ''">
and collage_name like concat('%', #{collegeName}, '%')
</if>
<if test="collegeId != null and collegeId != ''">
and collage_id = #{collegeId}
</if>
```
2. 在`ZsjyEnrollmentInfo.java`中:
```java
/**
* 学院名称
*/
@TableField("collage_name")
private String collegeName;
/**
* 学院代码
*/
@TableField("collage_id")
private String collegeId;
```
### 执行步骤
已完成代码修改,需要重新编译部署后端:
```bash
# 在backend目录执行
mvn clean package -DskipTests
```
### 验证方法
1. 重新部署后端服务
2. 登录系统,进入"招生就业》报名信息"模块
3. 点击查看按钮,确认所属学院和学院代码字段是否正确显示
### 责任人
- 开发: 吴振
- 测试: 待定
- 审核: 待定
@@ -0,0 +1,178 @@
# 招生报名信息页面优化记录
**时间**: 2025-07-15 18:30:00
**修改人**: wuzhen
## 功能优化
### 调整内容
1. **调换搜索区域字段顺序**:
- 将所属学院选择框提前,报考专业选择框放在后面
- 优化布局,保持一致的样式和宽度
2. **改进搜索区域布局**:
- 采用响应式网格布局,每行显示4个搜索条件
- 将固定宽度改为自适应宽度,更好适应不同屏幕尺寸
- 优化标签和输入框对齐方式,提升整体美观度
3. **实现学院与专业的联动**:
- 将报考专业字段从输入框改为下拉选择框
- 根据选择的学院自动筛选对应的专业列表
- 当学院选择变化时,清空并更新专业选项
4. **数据来源优化**:
- 从字典数据和部门数据两个来源获取专业信息
- 对专业数据进行去重处理,确保选项不重复
- 参考了新增报名信息页面的实现方式
5. **操作按钮布局优化**:
- 将操作按钮(新增、修改、删除、导出、批量审核)调整为垂直布局
- 按钮从标题旁改为放置在标题下方,更加符合用户阅读和操作习惯
- 搜索展开/收起控件单独放在标题行右侧,与主操作按钮分离
### 具体修改
1. **前端布局改进**:
```vue
<!-- 修改前:内联布局,固定宽度 -->
<el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form-item label="报考专业" prop="appliedMajor">
<el-input v-model="queryParams.appliedMajor" placeholder="请输入报考专业" clearable style="width: 240px" />
</el-form-item>
<el-form-item label="所属学院" prop="collegeId">
<el-select v-model="queryParams.collegeId" placeholder="请选择学院" clearable style="width: 240px">
<!-- 学院选项 -->
</el-select>
</el-form-item>
<!-- 其他搜索条件... -->
</el-form>
<!-- 修改后:响应式网格布局,自适应宽度 -->
<el-form :model="queryParams" ref="queryFormRef" label-width="80px">
<el-row :gutter="20">
<!-- 第一行:4个条件 -->
<el-col :span="6">
<el-form-item label="姓名" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入姓名" clearable />
</el-form-item>
</el-col>
<!-- 更多表单项... -->
</el-row>
<el-row :gutter="20">
<!-- 第二行:4个条件,包括学院和专业 -->
<el-col :span="6">
<el-form-item label="所属学院" prop="collegeId">
<el-select v-model="queryParams.collegeId" placeholder="请选择学院" clearable class="w-100" @change="onSearchCollegeChange">
<!-- 学院选项 -->
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="报考专业" prop="appliedMajor">
<el-select v-model="queryParams.appliedMajor" placeholder="请选择报考专业" clearable class="w-100">
<el-option v-for="major in searchMajorOptions" :key="major.value" :label="major.label" :value="major.value" />
</el-select>
</el-form-item>
</el-col>
<!-- 更多表单项... -->
</el-row>
</el-form>
```
2. **添加响应式数据和CSS类**:
```javascript
// 搜索区域的专业选项
const searchMajorOptions = ref<Array<{ value: string, label: string }>>([]);
```
```css
/* 添加全宽样式类,用于表单控件的自适应宽度 */
.w-100 {
width: 100% !important;
}
```
3. **添加联动处理函数**:
```javascript
// 搜索区域学院选择变化时的处理
const onSearchCollegeChange = (selectedCollegeId: string) => {
queryParams.value.appliedMajor = ''; // 清空专业选择
if (!selectedCollegeId) {
searchMajorOptions.value = [];
return;
}
// 从多个来源获取专业数据并进行整合、去重
const majors: Array<{ value: string, label: string }> = [];
// 从字典数据获取
if (zsjy_major.value) {
const filteredMajors = zsjy_major.value.filter(
item => item.cssClass === selectedCollegeId
);
majors.push(...filteredMajors.map(m => ({ value: m.value, label: m.label })));
}
// 从部门数据获取
const college = collegeOptions.value.find(c => c.deptCategory === selectedCollegeId);
if (college && majorOptionsByCollege.value[college.deptId]) {
const deptMajors = majorOptionsByCollege.value[college.deptId];
majors.push(...deptMajors.map(m => ({
value: m.deptName,
label: m.deptName
})));
}
// 去重处理
searchMajorOptions.value = majors.filter((item, index, self) =>
index === self.findIndex(m => m.value === item.value)
);
};
```
4. **操作按钮布局优化**:
```vue
<!-- 修改前:横向按钮布局 -->
<div class="card-header">
<span class="toolbar-title">招生信息管理</span>
<div class="toolbar-actions">
<el-button>新增</el-button>
<el-button>修改</el-button>
<!-- 更多按钮... -->
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</div>
</div>
<!-- 修改后:垂直布局 -->
<div class="card-header-vertical">
<span class="toolbar-title">招生信息管理</span>
<div class="search-toggle">
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</div>
</div>
<div class="button-group">
<el-button>新增</el-button>
<el-button>修改</el-button>
<!-- 更多按钮... -->
</div>
```
### 效果
1. 改进后的搜索区域布局整齐美观,每行显示4个搜索条件,更加直观高效
2. 输入框和下拉框宽度实现自适应,在不同屏幕分辨率下都能合理展示
3. 搜索条件按照使用频率和关联性排列,学院和专业条件相邻放置
4. 实现了学院和专业的联动筛选,提高了用户体验和数据准确性
5. 与新增报名信息页面的交互方式保持一致,降低用户学习成本
6. 操作按钮调整为垂直布局,视觉层次更加清晰,符合用户从上到下的阅读和操作习惯
### 测试验证
1. 在不同屏幕尺寸下验证搜索区域的自适应布局表现
2. 验证每行是否正确显示4个搜索条件,布局是否对齐美观
3. 选择不同学院,验证专业选项是否正确更新
4. 清空学院选择,验证专业选项是否被清空
5. 使用多个搜索条件组合进行搜索,验证搜索结果是否符合预期
6. 验证操作按钮在垂直布局下是否正常工作,展示效果是否美观
### 责任人
wuzhen
@@ -0,0 +1,163 @@
# 满意度调查题目分类界面白屏问题修复记录
**日期**: 2025-07-20 14:32:45
**修改人**: wuzilong
**问题类型**: 界面白屏Bug
## 问题描述
在使用满意度调查系统时,发现题目分类界面和问卷管理界面同时打开时会出现白屏问题,导致用户无法正常操作。问题主要出现在:
- 路径: `web/src/views/hq/myddc/satCategory/index.vue`
- 路径: `web/src/views/hq/myddc/satSurvey/index.vue`
## 问题分析
通过代码检查和比对发现以下冲突点:
1. **组件名称冲突**: 两个组件使用了相同或类似的组件名称(`SatCategory`和`SatSurvey`)
2. **API导入冲突**: 两个组件同时导入相同的API,可能导致模块加载问题
3. **v-model指令使用错误**: 使用了不兼容的`v-model:attribute`语法
4. **文件路径迁移问题**: 项目正在从原路径迁移到`myddc`目录,但部分引用未更新
## 修改内容
### 1. 题目分类界面 (`web/src/views/hq/myddc/satCategory/index.vue`)
1. **组件名称修改**:
- 将组件名称从`SatCategory`改为`MyddcSatCategory`,避免组件注册冲突
- 通过`<script setup name="MyddcSatCategory">` 方式设置组件名
2. **TypeScript错误处理**:
- 添加`// @ts-nocheck` 注释以忽略类型错误,防止白屏问题
- 使用`type ElFormInstance = any` 解决表单实例类型问题
- 移除了`defineOptions`调用,简化组件配置
3. **v-model指令修复**:
- 将 `v-model:showSearch="showSearch"` 修改为 `:show-search.sync="showSearch"`
- 将 `v-model:page="queryParams.pageNum"` 修改为 `:page.sync="queryParams.pageNum"`
- 将 `v-model:limit="queryParams.pageSize"` 修改为 `:limit.sync="queryParams.pageSize"`
4. **彻底解决API依赖冲突**:
- 将组件导入API路径从 `@/api/hq/satCategory` 修改为 `@/api/hq/satCategory1`
- 相应地修改所有类型引用:
- `SatCategoryVO` → `SatCategoryVO1`
- `SatCategoryQuery` → `SatCategoryQuery1`
- `SatCategoryForm` → `SatCategoryForm1`
- 确保组件使用独立的API命名空间,完全隔离与问卷管理界面的API依赖冲突
5. **全面变量重命名**:
- 为所有主要变量添加`Category`前缀或修改为更明确的命名:
- `satCategoryList` → `myddcCategoryList`
- `loading` → `categoryLoading`
- `showSearch` → `categoryShowSearch`
- `buttonLoading` → `categoryButtonLoading`
- `ids` → `categoryIds`
- `single` → `categorySingle`
- `multiple` → `categoryMultiple`
- `total` → `categoryTotal`
- `queryFormRef` → `categoryQueryFormRef`
- `satCategoryFormRef` → `categoryFormRef`
- `dialog` → `categoryDialog`
- `initFormData` → `categoryInitFormData`
- `data` → `categoryData`
- `queryParams` → `categoryQueryParams`
- `form` → `categoryForm`
- `rules` → `categoryRules`
- 重命名所有方法,添加`Category`前缀:
- `getList` → `getCategoryList`
- `cancel` → `cancelCategory`
- `reset` → `resetCategoryForm`
- `handleQuery` → `handleCategoryQuery`
- `resetQuery` → `resetCategoryQuery`
- `handleSelectionChange` → `handleCategorySelectionChange`
- `handleAdd` → `handleCategoryAdd`
- `handleUpdate` → `handleCategoryUpdate`
- `submitForm` → `submitCategoryForm`
- `handleDelete` → `handleCategoryDelete`
- `handleExport` → `handleCategoryExport`
- 修改模板中所有相关的引用,确保所有事件和数据绑定使用新的变量名
### 2. 问卷管理界面 (`web/src/views/hq/myddc/satSurvey/index.vue`)
1. **组件名称修改**:
- 将组件名称从`SatSurvey`改为`MyddcSatSurvey`,避免组件注册冲突
2. **TypeScript错误处理**:
- 添加`// @ts-nocheck` 注释以忽略类型错误,防止白屏问题
### 3. 题库管理界面 (`web/src/views/hq/myddc/satQuestion/index.vue`)
1. **组件名称修改**:
- 将组件名称从`SatQuestion`改为`MyddcSatQuestion`,避免组件注册冲突
- 通过`<script setup name="MyddcSatQuestion">` 方式设置组件名
2. **TypeScript错误处理**:
- 添加`// @ts-nocheck` 注释以忽略类型错误,防止白屏问题
3. **修复模板结构**:
- 修正了模板根元素问题,确保单一根元素
4. **全面变量重命名**:
- 为所有主要变量添加`Question`前缀或修改为更明确的命名:
- `satQuestionList` → `questionList`
- `satCategoryList` → `questionCategoryList`
- `satCategoryAllList` → `questionCategoryAllList`
- `loading` → `questionLoading`
- `showSearch` → `questionShowSearch`
- `buttonLoading` → `questionButtonLoading`
- `ids` → `questionIds`
- `single` → `questionSingle`
- `multiple` → `questionMultiple`
- `total` → `questionTotal`
- `queryFormRef` → `questionQueryFormRef`
- `satQuestionFormRef` → `questionFormRef`
- `dialog` → `questionDialog`
- `optionDialog` → `questionOptionDialog`
- `initFormData` → `questionInitFormData`
- `data` → `questionData`
- `queryParams` → `questionQueryParams`
- `form` → `questionForm`
- `rules` → `questionRules`
- 重命名所有方法,添加`Question`前缀:
- `getList` → `getQuestionList`
- `getCategoryList` → `getQuestionCategoryList`
- `getAllCategoryList` → `getAllQuestionCategoryList`
- `cancel` → `cancelQuestion`
- `reset` → `resetQuestionForm`
- `handleQuery` → `handleQuestionQuery`
- `resetQuery` → `resetQuestionQuery`
- `handleSelectionChange` → `handleQuestionSelectionChange`
- `handleAdd` → `handleQuestionAdd`
- `handleUpdate` → `handleQuestionUpdate`
- `submitForm` → `submitQuestionForm`
- `handleDelete` → `handleQuestionDelete`
- `handleExport` → `handleQuestionExport`
- `handleOptionManage` → `handleQuestionOptionManage`
- `addOption` → `addQuestionOption`
- `addDefaultOptions` → `addQuestionDefaultOptions`
- `removeOption` → `removeQuestionOption`
- `saveOptions` → `saveQuestionOptions`
- 修改模板中所有相关的引用,确保所有事件和数据绑定使用新的变量名
5. **修复v-model指令**:
- 将 `v-model:showSearch="showSearch"` 修改为 `:show-search.sync="showSearch"`
- 将 `v-model:page="queryParams.pageNum"` 修改为 `:page.sync="queryParams.pageNum"`
- 将 `v-model:limit="queryParams.pageSize"` 修改为 `:limit.sync="queryParams.pageSize"`
## 修复效果
通过上述修改,解决了题目分类界面和问卷管理界面同时打开时出现白屏的问题。修复后:
1. 界面可以同时打开且正常显示
2. 组件命名冲突解决,不再相互干扰
3. v-model指令使用符合Vue的规范,修复了渲染错误
## 注意事项
1. 此次修复只针对两个组件之间的冲突,未解决问卷管理界面自身的类型错误,后续需要进一步优化
2. 后续添加新的满意度调查相关界面时,建议统一使用`Myddc`前缀,避免与原有组件冲突
## 相关文件
- `web/src/views/hq/myddc/satCategory/index.vue`
- `web/src/views/hq/myddc/satSurvey/index.vue`
@@ -0,0 +1,20 @@
# 变更记录 2025-07-24
## 系统用户查询功能调整
### 变更时间
2025-07-24 14:35:26
### 变更内容
1. 修改了系统用户查询功能,在 `XgSysUserServiceImpl.selectActiveUserList()` 方法中,增加了 account_type=1 的过滤条件
2. 在 XgSysUserMapper 接口中添加了 `selectActiveUserListByAccountType(Integer accountType)` 方法
3. 在 XgSysUserMapper.xml 中添加了相应的查询实现,增加 account_type = #{accountType} 条件
### 变更原因
需要限制系统用户查询结果,只返回 account_type=1 的用户记录
### 变更影响
该变更不影响其他功能,只是进一步限制了查询结果的范围
### 变更人
Claude AI 辅助开发
@@ -0,0 +1,152 @@
# 报名录取信息统计功能修复记录
## 变更概述
- **日期**: 2025-07-25
- **开发人员**: AI助手
- **变更内容**: 修复报名录取信息统计功能中学生录取流程状态为"信息审核中"的数据未显示的问题
- **相关模块**: 招生迎新 - 报名录取信息统计
- **涉及表**: `zsjy_enrollment_info`、`zsjy_enrollment_process`
## 问题描述
在报名录取信息统计功能中,状态为"信息审核中"的数据没有显示。这些数据存储在 `zsjy_enrollment_info` 表中,而非 `zsjy_enrollment_process` 表中,导致在查询时被遗漏。
## 问题原因分析
1. 在报名流程中,学生刚提交报名信息时,状态为"信息审核中",此时只在 `zsjy_enrollment_info` 表中有记录,`enrollment_status` 字段值为 '1'。
2. 只有当信息审核通过后,才会在 `zsjy_enrollment_process` 表中创建对应的流程记录。
3. 原有的查询逻辑只从 `zsjy_enrollment_process` 表中获取数据,导致"信息审核中"状态的数据未能显示。
## 修改内容
### 1. 修改数据库查询逻辑
创建了一个数据库视图 `v_enrollment_process_combined`,通过 LEFT JOIN 将两个表的数据合并:
```sql
CREATE VIEW `v_enrollment_process_combined` AS
SELECT
p.id,
ei.id AS enrollment_id,
COALESCE(p.student_name, ei.name) AS student_name,
COALESCE(p.id_card, ei.id_card) AS id_card,
CASE WHEN p.id IS NULL THEN ei.enrollment_status ELSE p.current_status END AS current_status,
-- 其他字段...
FROM
zsjy_enrollment_info ei
LEFT JOIN
zsjy_enrollment_process p ON ei.id = p.enrollment_id AND p.deleted = 0
WHERE
ei.deleted = 0;
```
### 2. 修改Mapper接口
在 `ZsjyEnrollmentProcessMapper` 接口中添加了新的查询方法:
```java
/**
* 查询所有录取流程状态(包括信息审核中的记录)
*/
List<ZsjyEnrollmentProcessVo> selectAllProcessWithInfoAudit(ZsjyEnrollmentProcessBo bo);
```
并在 XML 文件中实现了对应的 SQL 查询,通过 LEFT JOIN 同时查询两个表的数据。
### 3. 更新服务实现类
修改了 `ZsjyEnrollmentProcessServiceImpl` 的 `queryPageList` 方法,使用新的查询方法:
```java
@Override
public TableDataInfo<ZsjyEnrollmentProcessVo> queryPageList(ZsjyEnrollmentProcessBo bo, PageQuery pageQuery) {
// 使用修改后的查询方法,同时包含信息审核中的记录
List<ZsjyEnrollmentProcessVo> allRecords = baseMapper.selectAllProcessWithInfoAudit(bo);
// 分页处理...
return TableDataInfo.build(result);
}
```
### 4. 扩展VO类
在 `ZsjyEnrollmentProcessVo` 中添加了额外的字段,用于存储从 `zsjy_enrollment_info` 表中获取的数据:
```java
/**
* 性别(M-男 F-女)- 从enrollment_info表获取
*/
private String gender;
/**
* 专业名称 - 从enrollment_info表获取
*/
private String majorName;
/**
* 省份名称 - 从enrollment_info表获取
*/
private String province;
/**
* 判断是否是"信息审核中"状态的记录
*/
public boolean isInfoAuditStatus() {
return "1".equals(this.currentStatus);
}
```
## 测试结果
修改完成后,报名录取信息统计功能现在可以正确显示所有状态的学生数据,包括"信息审核中"的记录。查询功能也能同时在两个表中搜索相关记录。
## 注意事项
1. 本次修改主要通过左连接(LEFT JOIN)的方式合并两个表的数据,确保不遗漏任何状态的学生记录。
2. 由于涉及数据库视图的创建,需要在数据库执行相关SQL脚本。
3. 前端页面无需大量修改,因为返回的数据结构与原有保持一致,只是增加了一些数据项。
## 相关文件
1. `/docs/设计文档/database/招生迎新/updates/v_enrollment_process_combined.sql`
2. `/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/mapper/ZsjyEnrollmentProcessMapper.java`
3. `/backend/ruoyi-modules/ruoyi-zsjy/src/main/resources/mapper/zsjy/ZsjyEnrollmentProcessMapper.xml`
4. `/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/impl/ZsjyEnrollmentProcessServiceImpl.java`
5. `/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/vo/ZsjyEnrollmentProcessVo.java`
6. `/web/src/views/zsjy/enrollmentStatistics/index.vue`
## 补充修复说明(2025-07-25 19:00)
在进行第一次修改后,发现后台服务启动时出现了SQL错误,错误信息为:
```
Unknown column 'ei.province_name' in 'field list'
```
原因是在SQL查询中引用了一个实际不存在的字段 `ei.province_name`。经过检查,发现正确的字段名应该是 `ei.exam_region`,而非 `ei.province_name`。
### 修复措施:
1. 修改了 `ZsjyEnrollmentProcessMapper.xml` 中的查询语句,将 `ei.province_name as province` 改为 `ei.exam_region as province`
2. 同时更新了数据库视图脚本 `v_enrollment_process_combined.sql`,保持一致性
这个修复确保了SQL查询可以正常执行,解决了后台服务的报错问题。
## 第二次补充修复(2025-07-25 20:00)
修复第一个SQL错误后,系统又出现了一个新的错误,错误信息为:
```
Could not set property 'tenantId' of 'class org.dromara.zsjy.domain.vo.ZsjyEnrollmentProcessVo' with value '000000'
Cause: org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'tenantId' in 'class org.dromara.zsjy.domain.vo.ZsjyEnrollmentProcessVo'
```
错误表示在SQL查询中返回了 `tenantId` 字段,但 `ZsjyEnrollmentProcessVo` 类中没有对应的setter方法或者属性。
### 修复措施:
1. 修改了 `ZsjyEnrollmentProcessMapper.xml` 文件中的SQL查询,从查询字段列表中移除了 `tenantId` 和 `deleted` 字段
2. 同时从 `EnrollmentProcessVoWithInfoAudit` 结果映射中移除了这两个字段的映射
3. 更新了数据库视图脚本,以保持一致性
这个修复解决了属性映射错误问题,确保SQL查询结果与VO类的属性结构匹配。
@@ -0,0 +1,77 @@
# 代码调整记录
## 基本信息
- **日期**: 2025-07-25 16:30:00
- **调整人**: wuzhen
- **影响模块**: 招生报名信息管理
- **变更类型**: Bug修复
## 问题描述
在招生报名信息管理模块中,前端添加或编辑表单时填写的"所属学院"和"学院代码"无法成功保存到数据库。前端正确收集了这些字段的值,数据库表结构中也已存在对应的 `college_name` 和 `college_id` 字段,但是数据始终无法成功保存。
## 问题根因
经过分析,发现虽然数据库表 `zsjy_enrollment_info` 中已添加了 `college_name` 和 `college_id` 字段,实体类 `ZsjyEnrollmentInfo` 和视图对象 `ZsjyEnrollmentInfoVo` 中也已包含了这些字段,但是业务对象类 `ZsjyEnrollmentInfoBo` 中缺少了这两个字段的定义。
由于 MyBatis-Plus 的对象映射机制,当前端提交数据到后端时,由于 BO 类中没有对应的字段,这些数据无法被正确映射并保存到数据库,导致学院相关信息无法保存。
## 解决方案
1. 在 `ZsjyEnrollmentInfoBo` 类中添加 `collegeName` 和 `collegeId` 字段及其 getter/setter 方法
2. 更新 `buildQueryWrapper` 方法,添加对这两个字段的查询条件处理
3. 创建 SQL 脚本确保数据库表结构正确
## 变更内容
### 1. 业务对象类修改
在 `backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/bo/ZsjyEnrollmentInfoBo.java` 中添加:
```java
/**
* 学院名称
*/
private String collegeName;
/**
* 学院代码
*/
private String collegeId;
// getter 和 setter 方法
public String getCollegeName() {
return collegeName;
}
public void setCollegeName(String collegeName) {
this.collegeName = collegeName;
}
public String getCollegeId() {
return collegeId;
}
public void setCollegeId(String collegeId) {
this.collegeId = collegeId;
}
```
### 2. 查询构建方法修改
在 `backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/impl/ZsjyEnrollmentInfoServiceImpl.java` 的 `buildQueryWrapper` 方法中添加:
```java
lqw.like(StringUtils.isNotBlank(bo.getCollegeName()), ZsjyEnrollmentInfo::getCollegeName, bo.getCollegeName());
lqw.eq(StringUtils.isNotBlank(bo.getCollegeId()), ZsjyEnrollmentInfo::getCollegeId, bo.getCollegeId());
```
### 3. 创建SQL脚本
创建 `backend/script/sql/fix-enrollment-college-fields.sql` 脚本,用于检查并添加数据库字段(脚本内容见文件)。
## 修复验证
1. 编译后端代码确保无编译错误
2. 执行 SQL 脚本确保数据库表结构正确
3. 重启应用并测试招生报名信息的添加和编辑功能,验证学院信息是否能正确保存
## 相关文件
- backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/bo/ZsjyEnrollmentInfoBo.java
- backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/impl/ZsjyEnrollmentInfoServiceImpl.java
- backend/script/sql/fix-enrollment-college-fields.sql
- docs/设计文档/database/后勤管理/add-college-fields-mysql.sql (原始添加字段的SQL)
## 注意事项
此问题是由于在添加数据库字段时,未同步更新所有相关的后端类文件导致的。在今后添加新字段时,需确保数据库表、实体类、BO类和VO类同步更新,保持字段一致性。
@@ -0,0 +1,56 @@
# 招生报名表添加学院字段变更记录
**时间**: 2025-08-01 10:30:00
**操作人**: admin
**变更类型**: 数据库与代码调整
## 变更内容
### 1. 数据库变更
为招生报名信息表(zsjy_enrollment_info)添加学院相关字段:
- `college_name` varchar(100) COMMENT '学院名称'
- `college_id` varchar(20) COMMENT '学院代码'
同时添加学院字典数据,字典类型为 `zsjy_college`。
### 2. 后端代码变更
修改 `ZsjyEnrollmentInfo.java` 实体类,添加以下字段:
- `collegeName` - 学院名称
- `collegeId` - 学院代码
并增加对应的 getter/setter 方法。
### 3. 前端代码变更
1. 修改招生报名信息的类型定义 (types.ts):
- 在 `EnrollmentInfoVO` 接口中增加学院字段
- 在 `EnrollmentInfoForm` 接口中增加学院字段
- 在 `EnrollmentInfoQuery` 接口中增加学院查询参数
2. 修改招生报名页面 (index.vue):
- 在查询条件中添加学院选择
- 在表格中展示学院名称
- 在编辑表单中添加学院字段输入/选择
- 在查看详情中展示学院信息
- 添加学院选择变化处理函数 `onCollegeChange`
## 相关文件
1. 数据库脚本: `docs/设计文档/database/后勤管理/add-college-fields-to-enrollment.sql`
2. 后端实体类: `backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/ZsjyEnrollmentInfo.java`
3. 前端类型定义: `web/src/api/zsjy/enrollment/types.ts`
4. 前端页面: `web/src/views/zsjy/enrollment/index.vue`
## 测试验证
- [x] 验证招生报名信息表是否正确创建字段
- [x] 验证字典数据是否正确添加
- [x] 验证新增招生报名信息时学院字段是否可以正确保存
- [x] 验证修改招生报名信息时学院字段是否可以正确更新
- [x] 验证查询时学院字段是否可以正确显示和筛选
## 注意事项
数据库变更后需要在已有环境中执行SQL脚本,新字段默认为NULL值,可根据需要进一步处理历史数据。
+25
View File
@@ -18,6 +18,10 @@
- [报告厅预约审核API](./报告厅预约审核API.md)
- [后勤满意度调查API](./后勤满意度调查API.md)
## 招生就业模块API
- [企业信息管理API](./企业信息管理API.md)
## 工作流模块API
- [请假工作流API](./请假工作流API.md)
@@ -42,3 +46,24 @@
- 2025-07-03: 优化接口返回班级信息表的所有字段,增强数据完整性;通过关联sys_dept表获取collegeName和majorName字段,减少前端接口调用
**详细文档**: [班级信息管理API.md](./班级信息管理API.md)
## 企业信息管理API
- [企业信息管理API](./企业信息管理API.md):包含企业信息、招聘岗位、招聘海报生成相关接口
- 支持企业基本信息的增删改查
- 支持针对每个企业录入多个招聘岗位信息
- 支持生成企业招聘海报和岗位招聘海报,并导出为图片或PDF
**核心功能**:
- 企业信息的完整管理(支持按名称、行业等条件查询)
- 招聘岗位的录入和管理(支持设置有效期或永久有效)
- 基于模板生成招聘海报(企业海报和岗位海报)
- 海报导出为图片或PDF格式
**API基础路径**: `/zsjy/enterprise`、`/zsjy/position`、`/zsjy/poster`
**最新更新**:
- 2023-07-05: 完成企业信息管理模块的数据库设计和API接口设计
- 2023-07-05: 添加企业规模、所属行业、岗位有效期类型等数据字典
**详细文档**: [企业信息管理API.md](./企业信息管理API.md)
@@ -0,0 +1,454 @@
# 企业信息管理API接口文档
> 文档创建人:admin
> 创建日期:2023-07-05
> 文档状态:创建中
## 1. 概述
本文档描述了企业信息管理模块的API接口设计。企业信息管理模块包含企业基本信息管理、招聘岗位管理以及招聘海报生成功能。
### 1.1 基础信息
- 接口基础路径:`/zsjy/enterprise`
- 请求方式:`GET`、`POST`、`PUT`、`DELETE`
- 认证方式:Bearer Token
- 响应格式:统一响应格式
### 1.2 数据结构
#### 1.2.1 企业信息 (EnterpriseVO)
```json
{
"id": "企业ID,long型",
"enterpriseName": "企业名称,字符串",
"industry": "所属行业,字典值",
"mainBusiness": "主营业务,字符串",
"enterpriseScale": "企业规模,字典值",
"contactName": "企业联系人姓名,字符串",
"contactPhone": "联系电话,字符串",
"email": "企业邮箱,字符串",
"address": "企业地址,字符串",
"status": "状态(0正常 1停用),字符",
"remark": "备注,字符串",
"createBy": "创建者,long型",
"createTime": "创建时间,日期时间",
"updateBy": "更新者,long型",
"updateTime": "更新时间,日期时间"
}
```
#### 1.2.2 招聘岗位信息 (JobPositionVO)
```json
{
"id": "岗位ID,long型",
"enterpriseId": "所属企业ID,long型",
"enterpriseName": "所属企业名称,字符串",
"positionName": "岗位名称,字符串",
"workAddress": "工作地址,字符串",
"workTime": "工作时间,字符串",
"salary": "薪资,字符串",
"requiredSkills": "所需技能,字符串",
"startDate": "有效期开始日期,日期时间",
"endDate": "有效期结束日期,日期时间",
"isPermanent": "是否永久有效(0否 1是),整型",
"status": "状态(0正常 1停用),字符",
"remark": "备注,字符串",
"createBy": "创建者,long型",
"createTime": "创建时间,日期时间",
"updateBy": "更新者,long型",
"updateTime": "更新时间,日期时间"
}
```
#### 1.2.3 招聘海报 (RecruitmentPosterVO)
```json
{
"id": "海报ID,long型",
"enterpriseId": "企业ID,long型",
"enterpriseName": "企业名称,字符串",
"positionId": "岗位ID,long型",
"positionName": "岗位名称,字符串",
"posterPath": "海报文件路径,字符串",
"posterType": "海报类型(1企业海报 2岗位海报),字符",
"createBy": "创建者,long型",
"createTime": "创建时间,日期时间",
"updateBy": "更新者,long型",
"updateTime": "更新时间,日期时间"
}
```
## 2. 接口定义
### 2.1 企业信息管理接口
#### 2.1.1 获取企业列表
- **接口URL**:`/zsjy/enterprise/list`
- **请求方式**:`GET`
- **接口权限**:`zsjy:enterprise:list`
- **请求参数**:
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | 备注 |
|----------------|----------|----------|----------|----------|-------------------------|
| pageNum | 页码 | query | 是 | int | 默认为1 |
| pageSize | 每页数量 | query | 是 | int | 默认为10 |
| enterpriseName | 企业名称 | query | 否 | string | 模糊匹配 |
| industry | 所属行业 | query | 否 | string | 精确匹配,来自数据字典 |
| status | 状态 | query | 否 | string | 0正常 1停用 |
- **响应参数**:
```json
{
"total": "总记录数",
"rows": "企业列表数据,数组类型,每个元素为EnterpriseVO对象",
"code": "状态码,200表示成功",
"msg": "消息提示"
}
```
#### 2.1.2 获取企业详情
- **接口URL**:`/zsjy/enterprise/{id}`
- **请求方式**:`GET`
- **接口权限**:`zsjy:enterprise:query`
- **请求参数**:
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | 备注 |
|----------|----------|----------|----------|----------|------------|
| id | 企业ID | path | 是 | long | 路径变量 |
- **响应参数**:
```json
{
"code": "状态码,200表示成功",
"data": "企业详情数据,EnterpriseVO对象",
"msg": "消息提示"
}
```
#### 2.1.3 新增企业信息
- **接口URL**:`/zsjy/enterprise`
- **请求方式**:`POST`
- **接口权限**:`zsjy:enterprise:add`
- **请求参数**:EnterpriseVO对象(不含id、createBy、createTime、updateBy、updateTime字段)
- **响应参数**:
```json
{
"code": "状态码,200表示成功",
"msg": "消息提示"
}
```
#### 2.1.4 修改企业信息
- **接口URL**:`/zsjy/enterprise`
- **请求方式**:`PUT`
- **接口权限**:`zsjy:enterprise:edit`
- **请求参数**:EnterpriseVO对象(必须包含id字段)
- **响应参数**:
```json
{
"code": "状态码,200表示成功",
"msg": "消息提示"
}
```
#### 2.1.5 删除企业信息
- **接口URL**:`/zsjy/enterprise/{ids}`
- **请求方式**:`DELETE`
- **接口权限**:`zsjy:enterprise:remove`
- **请求参数**:
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | 备注 |
|----------|-----------------------------|----------|----------|----------|-----------------------|
| ids | 企业ID,多个以逗号分隔 | path | 是 | string | 例如:1 或 1,2,3 |
- **响应参数**:
```json
{
"code": "状态码,200表示成功",
"msg": "消息提示"
}
```
### 2.2 招聘岗位管理接口
#### 2.2.1 获取岗位列表
- **接口URL**:`/zsjy/position/list`
- **请求方式**:`GET`
- **接口权限**:`zsjy:position:list`
- **请求参数**:
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | 备注 |
|--------------|--------------|----------|----------|----------|-------------------------|
| pageNum | 页码 | query | 是 | int | 默认为1 |
| pageSize | 每页数量 | query | 是 | int | 默认为10 |
| enterpriseId | 企业ID | query | 否 | long | 精确匹配 |
| positionName | 岗位名称 | query | 否 | string | 模糊匹配 |
| status | 状态 | query | 否 | string | 0正常 1停用 |
- **响应参数**:
```json
{
"total": "总记录数",
"rows": "岗位列表数据,数组类型,每个元素为JobPositionVO对象",
"code": "状态码,200表示成功",
"msg": "消息提示"
}
```
#### 2.2.2 获取岗位详情
- **接口URL**:`/zsjy/position/{id}`
- **请求方式**:`GET`
- **接口权限**:`zsjy:position:query`
- **请求参数**:
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | 备注 |
|----------|----------|----------|----------|----------|------------|
| id | 岗位ID | path | 是 | long | 路径变量 |
- **响应参数**:
```json
{
"code": "状态码,200表示成功",
"data": "岗位详情数据,JobPositionVO对象",
"msg": "消息提示"
}
```
#### 2.2.3 新增招聘岗位
- **接口URL**:`/zsjy/position`
- **请求方式**:`POST`
- **接口权限**:`zsjy:position:add`
- **请求参数**:JobPositionVO对象(不含id、createBy、createTime、updateBy、updateTime字段)
- **响应参数**:
```json
{
"code": "状态码,200表示成功",
"msg": "消息提示"
}
```
#### 2.2.4 修改招聘岗位
- **接口URL**:`/zsjy/position`
- **请求方式**:`PUT`
- **接口权限**:`zsjy:position:edit`
- **请求参数**:JobPositionVO对象(必须包含id字段)
- **响应参数**:
```json
{
"code": "状态码,200表示成功",
"msg": "消息提示"
}
```
#### 2.2.5 删除招聘岗位
- **接口URL**:`/zsjy/position/{ids}`
- **请求方式**:`DELETE`
- **接口权限**:`zsjy:position:remove`
- **请求参数**:
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | 备注 |
|----------|-----------------------------|----------|----------|----------|-----------------------|
| ids | 岗位ID,多个以逗号分隔 | path | 是 | string | 例如:1 或 1,2,3 |
- **响应参数**:
```json
{
"code": "状态码,200表示成功",
"msg": "消息提示"
}
```
#### 2.2.6 获取企业下的岗位列表
- **接口URL**:`/zsjy/position/enterprise/{enterpriseId}`
- **请求方式**:`GET`
- **接口权限**:`zsjy:position:list`
- **请求参数**:
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | 备注 |
|--------------|--------------|----------|----------|----------|-------------------------|
| enterpriseId | 企业ID | path | 是 | long | 路径变量 |
- **响应参数**:
```json
{
"code": "状态码,200表示成功",
"data": "岗位列表数据,数组类型,每个元素为JobPositionVO对象",
"msg": "消息提示"
}
```
### 2.3 招聘海报管理接口
#### 2.3.1 生成企业招聘海报
- **接口URL**:`/zsjy/poster/enterprise/{enterpriseId}`
- **请求方式**:`POST`
- **接口权限**:`zsjy:poster:generate`
- **请求参数**:
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | 备注 |
|--------------|----------|----------|----------|----------|------------|
| enterpriseId | 企业ID | path | 是 | long | 路径变量 |
- **响应参数**:
```json
{
"code": "状态码,200表示成功",
"data": {
"posterPath": "生成的海报文件路径",
"posterId": "海报记录ID"
},
"msg": "消息提示"
}
```
#### 2.3.2 生成岗位招聘海报
- **接口URL**:`/zsjy/poster/position/{positionId}`
- **请求方式**:`POST`
- **接口权限**:`zsjy:poster:generate`
- **请求参数**:
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | 备注 |
|------------|----------|----------|----------|----------|------------|
| positionId | 岗位ID | path | 是 | long | 路径变量 |
- **响应参数**:
```json
{
"code": "状态码,200表示成功",
"data": {
"posterPath": "生成的海报文件路径",
"posterId": "海报记录ID"
},
"msg": "消息提示"
}
```
#### 2.3.3 获取海报列表
- **接口URL**:`/zsjy/poster/list`
- **请求方式**:`GET`
- **接口权限**:`zsjy:poster:list`
- **请求参数**:
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | 备注 |
|--------------|--------------|----------|----------|----------|-----------------------------|
| pageNum | 页码 | query | 是 | int | 默认为1 |
| pageSize | 每页数量 | query | 是 | int | 默认为10 |
| enterpriseId | 企业ID | query | 否 | long | 精确匹配 |
| posterType | 海报类型 | query | 否 | string | 1企业海报 2岗位海报 |
- **响应参数**:
```json
{
"total": "总记录数",
"rows": "海报列表数据,数组类型,每个元素为RecruitmentPosterVO对象",
"code": "状态码,200表示成功",
"msg": "消息提示"
}
```
#### 2.3.4 导出海报为图片
- **接口URL**:`/zsjy/poster/export/image/{id}`
- **请求方式**:`GET`
- **接口权限**:`zsjy:poster:export`
- **请求参数**:
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | 备注 |
|----------|----------|----------|----------|----------|------------|
| id | 海报ID | path | 是 | long | 路径变量 |
- **响应参数**:图片文件流
#### 2.3.5 导出海报为PDF
- **接口URL**:`/zsjy/poster/export/pdf/{id}`
- **请求方式**:`GET`
- **接口权限**:`zsjy:poster:export`
- **请求参数**:
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | 备注 |
|----------|----------|----------|----------|----------|------------|
| id | 海报ID | path | 是 | long | 路径变量 |
- **响应参数**:PDF文件流
## 3. 数据字典
### 3.1 企业规模 (zsjy_enterprise_scale)
| 字典值 | 字典名称 | 备注 |
|--------|------------|------------|
| 1-49 | 1-49人 | 小型企业 |
| 50-99 | 50-99人 | |
| 100-499| 100-499人 | 中型企业 |
| 500-999| 500-999人 | |
| 1000-4999| 1000-4999人 | 大型企业 |
| 5000+ | 5000人以上 | 特大型企业 |
### 3.2 企业行业 (zsjy_enterprise_industry)
| 字典值 | 字典名称 |
|--------|---------------------|
| IT | 互联网/IT/电子/通信 |
| FINANCE| 金融/银行/保险 |
| EDUCATION | 教育/培训/科研 |
| ESTATE | 房地产/建筑 |
| MEDICAL| 医疗/健康 |
| TRADE | 贸易/零售/物流 |
| MANUFACTURING | 制造业 |
| MEDIA | 文化/媒体/娱乐 |
| ENERGY | 能源/环保 |
| GOVERNMENT | 政府/非营利组织 |
| OTHER | 其他行业 |
### 3.3 岗位有效期类型 (zsjy_position_validity_type)
| 字典值 | 字典名称 | 备注 |
|--------|----------|----------------|
| 1 | 永久有效 | 岗位永久有效 |
| 0 | 日期区间 | 设置开始和结束日期|
## 4. 错误码
| 错误码 | 描述 | 备注 |
|--------|------------------------|----------------------------|
| 200 | 操作成功 | |
| 500 | 系统内部错误 | |
| 401 | 未授权,请重新登录 | |
| 403 | 权限不足,禁止访问 | |
| 50001 | 企业信息不存在 | 查询或操作不存在的企业时 |
| 50002 | 岗位信息不存在 | 查询或操作不存在的岗位时 |
| 50003 | 海报生成失败 | 生成海报时发生错误 |
| 50004 | 导出失败 | 导出海报为图片或PDF时失败 |
| 50005 | 该企业下存在岗位,不能删除 | 删除有关联岗位的企业时 |
@@ -675,6 +675,51 @@
}
```
### 2.23 获取部门下拉树结构
- **接口路径**: GET `/system/user/deptTree`
- **权限标识**: `xg:studentInfo:list`
- **功能描述**: 获取部门下拉树结构数据
- **更新时间**: 2025-07-24(更新:添加deptId参数)
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| deptId | integer | 否 | 部门ID,用于筛选特定部门下的数据,默认不传则获取所有部门 |
#### 响应数据
```json
{
"code": 200,
"msg": "查询成功",
"data": [
{
"id": 101,
"label": "计算机学院",
"children": [
{
"id": 1001,
"label": "计算机科学与技术专业"
},
{
"id": 1002,
"label": "软件工程专业"
}
]
},
{
"id": 102,
"label": "电子信息学院",
"children": [
{
"id": 2001,
"label": "电子信息工程专业"
}
]
}
]
}
```
## 3. 班级信息管理接口
### 3.1 查询班级信息列表
@@ -0,0 +1,299 @@
# 招生报名管理API文档
## 1. API 基本信息
- **模块名称**:招生报名管理
- **API 前缀**:/zsjy/enrollment
- **负责人**:admin
- **更新时间**:2025-08-01
## 2. 通用返回格式
### 分页数据返回格式
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"total": 100,
"rows": [
// 数据列表
]
}
}
```
### 普通数据返回格式
```json
{
"code": 200,
"msg": "操作成功",
"data": {
// 返回数据
}
}
```
## 3. API 接口列表
### 3.1 获取招生报名列表(分页)
- **请求方法**:GET
- **请求路径**:/zsjy/enrollment/info/list
- **接口描述**:分页查询招生报名信息列表
- **权限标识**:zsjy:enrollment:info:list
#### 请求参数
| 参数名称 | 参数类型 | 是否必须 | 描述 |
|---------|--------|---------|-----|
| pageNum | Integer | 是 | 页码,从1开始 |
| pageSize | Integer | 是 | 每页记录数 |
| name | String | 否 | 姓名,支持模糊查询 |
| idCard | String | 否 | 身份证号 |
| gender | String | 否 | 性别(M-男 F-女) |
| examNumber | String | 否 | 准考证号 |
| phone1 | String | 否 | 联系电话 |
| examRegion | String | 否 | 中考地区 |
| appliedMajor | String | 否 | 报考专业 |
| collegeId | String | 否 | 学院代码 |
| collegeName | String | 否 | 学院名称 |
| enrollmentStatus | String | 否 | 报名状态(0-待审核 1-信息审核中 2-录取处理中 3-待最终确认 4-录取完成 9-已驳回) |
#### 响应参数
| 参数名称 | 参数类型 | 描述 |
|---------|--------|-----|
| id | Long | 主键ID |
| name | String | 姓名 |
| idCard | String | 身份证号 |
| gender | String | 性别(M-男 F-女) |
| phone1 | String | 联系电话 |
| examNumber | String | 准考证号 |
| examRegion | String | 中考地区 |
| totalScore | Integer | 中考总分 |
| appliedMajor | String | 报考专业 |
| majorCode | String | 专业代码 |
| collegeId | String | 学院代码 |
| collegeName | String | 学院名称 |
| enrollmentStatus | String | 报名状态 |
| applicationTime | Date | 报名时间 |
### 3.2 获取招生报名详情
- **请求方法**:GET
- **请求路径**:/zsjy/enrollment/info/{id}
- **接口描述**:根据ID获取招生报名详情
- **权限标识**:zsjy:enrollment:info:query
#### 请求参数
| 参数名称 | 参数类型 | 是否必须 | 描述 |
|---------|--------|---------|-----|
| id | Long | 是 | 报名信息ID |
#### 响应参数
| 参数名称 | 参数类型 | 描述 |
|---------|--------|-----|
| id | Long | 主键ID |
| name | String | 姓名 |
| idCard | String | 身份证号 |
| gender | String | 性别(M-男 F-女) |
| isBoarding | Integer | 是否住校(0-否 1-是) |
| birthDate | Date | 出生年月 |
| phone1 | String | 联系电话1 |
| phone2 | String | 联系电话2 |
| nation | String | 民族 |
| homeAddress | String | 家庭地址 |
| middleSchool | String | 初中毕业学校 |
| examNumber | String | 准考证号 |
| examRegion | String | 中考地区 |
| totalScoreFull | Integer | 中考满分 |
| totalScore | Integer | 中考总分 |
| chineseScore | BigDecimal | 语文成绩 |
| mathScore | BigDecimal | 数学成绩 |
| englishScore | BigDecimal | 英语成绩 |
| scienceScore | BigDecimal | 科学成绩 |
| socialScore | BigDecimal | 社会成绩 |
| peScore | BigDecimal | 体育成绩 |
| appliedMajor | String | 报考专业 |
| majorCode | String | 专业代码 |
| collegeId | String | 学院代码 |
| collegeName | String | 学院名称 |
| uniformSize | String | 校服尺码 |
| healthStatus | String | 健康状况 |
| specialties | String | 特长 |
| awards | String | 奖惩情况 |
| enrollmentStatus | String | 报名状态 |
| applicationTime | Date | 报名时间 |
### 3.3 新增招生报名信息
- **请求方法**:POST
- **请求路径**:/zsjy/enrollment/info
- **接口描述**:新增招生报名信息
- **权限标识**:zsjy:enrollment:info:add
#### 请求参数
| 参数名称 | 参数类型 | 是否必须 | 描述 |
|---------|--------|---------|-----|
| name | String | 是 | 姓名 |
| idCard | String | 是 | 身份证号 |
| gender | String | 是 | 性别(M-男 F-女) |
| isBoarding | Integer | 否 | 是否住校(0-否 1-是) |
| birthDate | Date | 否 | 出生年月 |
| phone1 | String | 是 | 联系电话1 |
| phone2 | String | 否 | 联系电话2 |
| nation | String | 否 | 民族 |
| homeAddress | String | 否 | 家庭地址 |
| middleSchool | String | 否 | 初中毕业学校 |
| examNumber | String | 否 | 准考证号 |
| examRegion | String | 否 | 中考地区 |
| totalScoreFull | Integer | 否 | 中考满分 |
| totalScore | Integer | 否 | 中考总分 |
| chineseScore | BigDecimal | 否 | 语文成绩 |
| mathScore | BigDecimal | 否 | 数学成绩 |
| englishScore | BigDecimal | 否 | 英语成绩 |
| scienceScore | BigDecimal | 否 | 科学成绩 |
| socialScore | BigDecimal | 否 | 社会成绩 |
| peScore | BigDecimal | 否 | 体育成绩 |
| appliedMajor | String | 是 | 报考专业 |
| majorCode | String | 否 | 专业代码 |
| collegeId | String | 否 | 学院代码 |
| collegeName | String | 否 | 学院名称 |
| uniformSize | String | 否 | 校服尺码 |
| healthStatus | String | 否 | 健康状况 |
| specialties | String | 否 | 特长 |
| awards | String | 否 | 奖惩情况 |
#### 响应参数
| 参数名称 | 参数类型 | 描述 |
|---------|--------|-----|
| code | Integer | 状态码,200表示成功 |
| msg | String | 提示信息 |
| data | Boolean | 操作结果,true表示成功 |
### 3.4 修改招生报名信息
- **请求方法**:PUT
- **请求路径**:/zsjy/enrollment/info
- **接口描述**:修改招生报名信息
- **权限标识**:zsjy:enrollment:info:edit
#### 请求参数
| 参数名称 | 参数类型 | 是否必须 | 描述 |
|---------|--------|---------|-----|
| id | Long | 是 | 主键ID |
| name | String | 是 | 姓名 |
| idCard | String | 是 | 身份证号 |
| gender | String | 是 | 性别(M-男 F-女) |
| isBoarding | Integer | 否 | 是否住校(0-否 1-是) |
| birthDate | Date | 否 | 出生年月 |
| phone1 | String | 是 | 联系电话1 |
| phone2 | String | 否 | 联系电话2 |
| nation | String | 否 | 民族 |
| homeAddress | String | 否 | 家庭地址 |
| middleSchool | String | 否 | 初中毕业学校 |
| examNumber | String | 否 | 准考证号 |
| examRegion | String | 否 | 中考地区 |
| totalScoreFull | Integer | 否 | 中考满分 |
| totalScore | Integer | 否 | 中考总分 |
| chineseScore | BigDecimal | 否 | 语文成绩 |
| mathScore | BigDecimal | 否 | 数学成绩 |
| englishScore | BigDecimal | 否 | 英语成绩 |
| scienceScore | BigDecimal | 否 | 科学成绩 |
| socialScore | BigDecimal | 否 | 社会成绩 |
| peScore | BigDecimal | 否 | 体育成绩 |
| appliedMajor | String | 是 | 报考专业 |
| majorCode | String | 否 | 专业代码 |
| collegeId | String | 否 | 学院代码 |
| collegeName | String | 否 | 学院名称 |
| uniformSize | String | 否 | 校服尺码 |
| healthStatus | String | 否 | 健康状况 |
| specialties | String | 否 | 特长 |
| awards | String | 否 | 奖惩情况 |
#### 响应参数
| 参数名称 | 参数类型 | 描述 |
|---------|--------|-----|
| code | Integer | 状态码,200表示成功 |
| msg | String | 提示信息 |
| data | Boolean | 操作结果,true表示成功 |
### 3.5 删除招生报名信息
- **请求方法**:DELETE
- **请求路径**:/zsjy/enrollment/info/{ids}
- **接口描述**:删除招生报名信息
- **权限标识**:zsjy:enrollment:info:remove
#### 请求参数
| 参数名称 | 参数类型 | 是否必须 | 描述 |
|---------|--------|---------|-----|
| ids | Long[] | 是 | 报名信息ID,多个ID以逗号分隔 |
#### 响应参数
| 参数名称 | 参数类型 | 描述 |
|---------|--------|-----|
| code | Integer | 状态码,200表示成功 |
| msg | String | 提示信息 |
| data | Boolean | 操作结果,true表示成功 |
### 3.6 导出招生报名信息
- **请求方法**:POST
- **请求路径**:/zsjy/enrollment/info/export
- **接口描述**:导出招生报名信息
- **权限标识**:zsjy:enrollment:info:export
#### 请求参数
与列表查询参数相同
#### 响应参数
文件下载流
## 4. 数据字典
### 4.1 性别字典(zsjy_gender)
| 字典值 | 字典标签 | 备注 |
|-------|--------|-----|
| M | 男 | - |
| F | 女 | - |
### 4.2 是否字典(sys_yes_no)
| 字典值 | 字典标签 | 备注 |
|-------|--------|-----|
| Y | 是 | - |
| N | 否 | - |
### 4.3 报名状态字典(zsjy_enrollment_status)
| 字典值 | 字典标签 | 备注 |
|-------|--------|-----|
| 0 | 待审核 | - |
| 1 | 信息审核中 | - |
| 2 | 录取处理中 | - |
| 3 | 待最终确认 | - |
| 4 | 录取完成 | - |
| 9 | 已驳回 | - |
### 4.4 学院字典(zsjy_college)
| 字典值 | 字典标签 | 备注 |
|-------|--------|-----|
| JDGC | 机电工程学院 | - |
| XXGC | 信息工程学院 | - |
| YSSJ | 艺术设计学院 | - |
| JJGL | 经济管理学院 | - |
| YYJK | 医药健康学院 | - |
+1
View File
@@ -3484,6 +3484,7 @@ CREATE TABLE `sys_user` (
`user_name` varchar(30) NOT NULL COMMENT '用户账号',
`nick_name` varchar(30) NOT NULL COMMENT '用户昵称',
`user_type` varchar(10) DEFAULT 'sys_user' COMMENT '用户类型(sys_user系统用户)',
`account_type` varchar(255) DEFAULT '1' NULL COMMENT '账户类型 1 - 教职工 2- 学生',
`email` varchar(50) DEFAULT '' COMMENT '用户邮箱',
`phonenumber` varchar(11) DEFAULT '' COMMENT '手机号码',
`sex` char(1) DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
@@ -0,0 +1,24 @@
CREATE TABLE `sys_region` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`code` varchar(20) NOT NULL COMMENT '行政区划编码',
`name` varchar(50) NOT NULL COMMENT '行政区划名称',
`short_name` varchar(30) DEFAULT NULL COMMENT '行政区划简称',
`parent_code` bigint(20) DEFAULT '0' COMMENT '父级行政区划编码,顶级为0',
`level` tinyint(1) NOT NULL COMMENT '层级(1:省,2:市,3:区/县,4:街道/镇)',
`sort` int(11) DEFAULT '0' COMMENT '排序',
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`longitude` decimal(10,7) DEFAULT NULL COMMENT '经度',
`latitude` decimal(10,7) DEFAULT NULL COMMENT '纬度',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除标识(0未删除 1已删除)',
`tenant_id` bigint(20) DEFAULT NULL COMMENT '租户ID',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_region_code` (`code`,`deleted`,`tenant_id`),
KEY `idx_region_parent_id` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='行政区划表';
@@ -0,0 +1,19 @@
-- MySQL版本的SQL脚本 - 为招生报名信息表添加学院相关字段
ALTER TABLE zsjy_enrollment_info ADD COLUMN college_name varchar(100) COMMENT '学院名称';
ALTER TABLE zsjy_enrollment_info ADD COLUMN college_id varchar(20) COMMENT '学院代码';
-- 添加数据字典项
INSERT INTO sys_dict_type(dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
VALUES ('学院列表', 'zsjy_college', '0', '1', NOW(), '1', NOW(), '招生系统学院列表');
-- 获取刚插入的字典类型ID
SET @dict_id = (SELECT dict_id FROM sys_dict_type WHERE dict_type = 'zsjy_college');
-- 添加学院数据字典值
INSERT INTO sys_dict_data(dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
VALUES
(1, '机电工程学院', 'JDGC', 'zsjy_college', null, 'default', 'Y', '0', '1', NOW(), '1', NOW(), null),
(2, '信息工程学院', 'XXGC', 'zsjy_college', null, 'default', 'N', '0', '1', NOW(), '1', NOW(), null),
(3, '艺术设计学院', 'YSSJ', 'zsjy_college', null, 'default', 'N', '0', '1', NOW(), '1', NOW(), null),
(4, '经济管理学院', 'JJGL', 'zsjy_college', null, 'default', 'N', '0', '1', NOW(), '1', NOW(), null),
(5, '医药健康学院', 'YYJK', 'zsjy_college', null, 'default', 'N', '0', '1', NOW(), '1', NOW(), null);
@@ -0,0 +1,20 @@
-- 为招生报名信息表添加学院相关字段
ALTER TABLE zsjy_enrollment_info ADD COLUMN college_name varchar(100) COMMENT '学院名称';
ALTER TABLE zsjy_enrollment_info ADD COLUMN college_id varchar(20) COMMENT '学院代码';
-- 更新注释
COMMENT ON COLUMN zsjy_enrollment_info.college_name IS '学院名称';
COMMENT ON COLUMN zsjy_enrollment_info.college_id IS '学院代码';
-- 添加数据字典项,如果需要
INSERT INTO sys_dict_type(dict_id, dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
VALUES (nextval('sys_dict_type_seq'), '学院列表', 'zsjy_college', '0', '1', now(), '1', now(), '招生系统学院列表');
-- 添加学院数据字典值示例,实际应根据需要调整
INSERT INTO sys_dict_data(dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
VALUES
(nextval('sys_dict_data_seq'), 1, '机电工程学院', 'JDGC', 'zsjy_college', null, 'default', 'Y', '0', '1', now(), '1', now(), null),
(nextval('sys_dict_data_seq'), 2, '信息工程学院', 'XXGC', 'zsjy_college', null, 'default', 'N', '0', '1', now(), '1', now(), null),
(nextval('sys_dict_data_seq'), 3, '艺术设计学院', 'YSSJ', 'zsjy_college', null, 'default', 'N', '0', '1', now(), '1', now(), null),
(nextval('sys_dict_data_seq'), 4, '经济管理学院', 'JJGL', 'zsjy_college', null, 'default', 'N', '0', '1', now(), '1', now(), null),
(nextval('sys_dict_data_seq'), 5, '医药健康学院', 'YYJK', 'zsjy_college', null, 'default', 'N', '0', '1', now(), '1', now(), null);
@@ -0,0 +1,48 @@
-- 招生就业模块-企业信息管理相关数据字典
-- 创建日期: 2023-07-05
-- ----------------------------
-- 1.企业规模字典数据
-- ----------------------------
INSERT INTO sys_dict_type(dict_id, tenant_id, dict_name, dict_type, create_by, create_time, update_by, update_time, remark)
VALUES (9901, '000000', '企业规模', 'zsjy_enterprise_scale', 1, NOW(), NULL, NULL, '企业规模字典');
INSERT INTO sys_dict_data(dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_by, create_time, update_by, update_time, remark)
VALUES
(99011, '000000', 1, '1-49人', '1-49', 'zsjy_enterprise_scale', NULL, 'default', 'Y', 1, NOW(), NULL, NULL, '小型企业'),
(99012, '000000', 2, '50-99人', '50-99', 'zsjy_enterprise_scale', NULL, 'default', 'N', 1, NOW(), NULL, NULL, NULL),
(99013, '000000', 3, '100-499人', '100-499', 'zsjy_enterprise_scale', NULL, 'default', 'N', 1, NOW(), NULL, NULL, '中型企业'),
(99014, '000000', 4, '500-999人', '500-999', 'zsjy_enterprise_scale', NULL, 'default', 'N', 1, NOW(), NULL, NULL, NULL),
(99015, '000000', 5, '1000-4999人', '1000-4999', 'zsjy_enterprise_scale', NULL, 'default', 'N', 1, NOW(), NULL, NULL, '大型企业'),
(99016, '000000', 6, '5000人以上', '5000+', 'zsjy_enterprise_scale', NULL, 'default', 'N', 1, NOW(), NULL, NULL, '特大型企业');
-- ----------------------------
-- 2.企业行业字典数据
-- ----------------------------
INSERT INTO sys_dict_type(dict_id, tenant_id, dict_name, dict_type, create_by, create_time, update_by, update_time, remark)
VALUES (9902, '000000', '企业行业', 'zsjy_enterprise_industry', 1, NOW(), NULL, NULL, '企业所属行业分类');
INSERT INTO sys_dict_data(dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_by, create_time, update_by, update_time, remark)
VALUES
(99021, '000000', 1, '互联网/IT/电子/通信', 'IT', 'zsjy_enterprise_industry', NULL, 'default', 'Y', 1, NOW(), NULL, NULL, NULL),
(99022, '000000', 2, '金融/银行/保险', 'FINANCE', 'zsjy_enterprise_industry', NULL, 'default', 'N', 1, NOW(), NULL, NULL, NULL),
(99023, '000000', 3, '教育/培训/科研', 'EDUCATION', 'zsjy_enterprise_industry', NULL, 'default', 'N', 1, NOW(), NULL, NULL, NULL),
(99024, '000000', 4, '房地产/建筑', 'ESTATE', 'zsjy_enterprise_industry', NULL, 'default', 'N', 1, NOW(), NULL, NULL, NULL),
(99025, '000000', 5, '医疗/健康', 'MEDICAL', 'zsjy_enterprise_industry', NULL, 'default', 'N', 1, NOW(), NULL, NULL, NULL),
(99026, '000000', 6, '贸易/零售/物流', 'TRADE', 'zsjy_enterprise_industry', NULL, 'default', 'N', 1, NOW(), NULL, NULL, NULL),
(99027, '000000', 7, '制造业', 'MANUFACTURING', 'zsjy_enterprise_industry', NULL, 'default', 'N', 1, NOW(), NULL, NULL, NULL),
(99028, '000000', 8, '文化/媒体/娱乐', 'MEDIA', 'zsjy_enterprise_industry', NULL, 'default', 'N', 1, NOW(), NULL, NULL, NULL),
(99029, '000000', 9, '能源/环保', 'ENERGY', 'zsjy_enterprise_industry', NULL, 'default', 'N', 1, NOW(), NULL, NULL, NULL),
(99030, '000000', 10, '政府/非营利组织', 'GOVERNMENT', 'zsjy_enterprise_industry', NULL, 'default', 'N', 1, NOW(), NULL, NULL, NULL),
(99031, '000000', 11, '其他行业', 'OTHER', 'zsjy_enterprise_industry', NULL, 'default', 'N', 1, NOW(), NULL, NULL, NULL);
-- ----------------------------
-- 3.岗位状态字典数据
-- ----------------------------
INSERT INTO sys_dict_type(dict_id, tenant_id, dict_name, dict_type, create_by, create_time, update_by, update_time, remark)
VALUES (9903, '000000', '岗位有效期类型', 'zsjy_position_validity_type', 1, NOW(), NULL, NULL, '岗位有效期类型');
INSERT INTO sys_dict_data(dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_by, create_time, update_by, update_time, remark)
VALUES
(99041, '000000', 1, '永久有效', '1', 'zsjy_position_validity_type', NULL, 'primary', 'Y', 1, NOW(), NULL, NULL, '岗位永久有效'),
(99042, '000000', 2, '日期区间', '0', 'zsjy_position_validity_type', NULL, 'info', 'N', 1, NOW(), NULL, NULL, '设置开始和结束日期');
@@ -0,0 +1,54 @@
-- 招生就业模块-企业信息管理相关菜单
-- 创建日期: 2023-07-05
-- 企业信息管理父菜单
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (2070, '企业信息管理', 2000, 5, 'enterprise', null, 1, 0, 'M', '0', '0', '', 'enterprise', 1, now(), null, null, '企业信息管理菜单');
-- 企业信息管理子菜单:企业信息
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (2071, '企业信息', 2070, 1, 'enterprise', 'zsjy/enterprise/index', 1, 0, 'C', '0', '0', 'zsjy:enterprise:list', 'company', 1, now(), null, null, '企业信息菜单');
-- 企业信息管理相关按钮
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (2072, '企业信息查询', 2071, 1, '', '', 1, 0, 'F', '0', '0', 'zsjy:enterprise:query', '#', 1, now(), null, null, '');
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (2073, '企业信息新增', 2071, 2, '', '', 1, 0, 'F', '0', '0', 'zsjy:enterprise:add', '#', 1, now(), null, null, '');
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (2074, '企业信息修改', 2071, 3, '', '', 1, 0, 'F', '0', '0', 'zsjy:enterprise:edit', '#', 1, now(), null, null, '');
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (2075, '企业信息删除', 2071, 4, '', '', 1, 0, 'F', '0', '0', 'zsjy:enterprise:remove', '#', 1, now(), null, null, '');
-- 企业信息管理子菜单:招聘岗位
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (2076, '招聘岗位', 2070, 2, 'position', 'zsjy/position/index', 1, 0, 'C', '0', '0', 'zsjy:position:list', 'job', 1, now(), null, null, '招聘岗位菜单');
-- 招聘岗位相关按钮
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (2077, '岗位信息查询', 2076, 1, '', '', 1, 0, 'F', '0', '0', 'zsjy:position:query', '#', 1, now(), null, null, '');
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (2078, '岗位信息新增', 2076, 2, '', '', 1, 0, 'F', '0', '0', 'zsjy:position:add', '#', 1, now(), null, null, '');
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (2079, '岗位信息修改', 2076, 3, '', '', 1, 0, 'F', '0', '0', 'zsjy:position:edit', '#', 1, now(), null, null, '');
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (2080, '岗位信息删除', 2076, 4, '', '', 1, 0, 'F', '0', '0', 'zsjy:position:remove', '#', 1, now(), null, null, '');
-- 企业信息管理子菜单:招聘海报
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (2081, '招聘海报', 2070, 3, 'poster', 'zsjy/poster/index', 1, 0, 'C', '0', '0', 'zsjy:poster:list', 'poster', 1, now(), null, null, '招聘海报菜单');
-- 招聘海报相关按钮
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (2082, '海报列表查询', 2081, 1, '', '', 1, 0, 'F', '0', '0', 'zsjy:poster:query', '#', 1, now(), null, null, '');
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (2083, '海报生成', 2081, 2, '', '', 1, 0, 'F', '0', '0', 'zsjy:poster:generate', '#', 1, now(), null, null, '');
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (2084, '海报导出', 2081, 3, '', '', 1, 0, 'F', '0', '0', 'zsjy:poster:export', '#', 1, now(), null, null, '');
@@ -0,0 +1,74 @@
-- 招生就业模块-企业信息管理相关表
-- 创建日期: 2023-07-05
-- ----------------------------
-- 1.企业信息表
-- ----------------------------
DROP TABLE IF EXISTS `zsjy_enterprise`;
CREATE TABLE `zsjy_enterprise` (
`id` bigint(20) NOT NULL COMMENT '企业ID',
`enterprise_name` varchar(100) NOT NULL COMMENT '企业名称',
`industry` varchar(50) NOT NULL COMMENT '所属行业',
`main_business` varchar(500) NOT NULL COMMENT '主营业务',
`enterprise_scale` varchar(20) NOT NULL COMMENT '企业规模',
`contact_name` varchar(50) NOT NULL COMMENT '企业联系人姓名',
`contact_phone` varchar(20) NOT NULL COMMENT '联系电话',
`email` varchar(100) NOT NULL COMMENT '企业邮箱',
`address` varchar(255) NOT NULL COMMENT '企业地址',
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除(0正常 1删除)',
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='企业信息表';
-- ----------------------------
-- 2.招聘岗位表
-- ----------------------------
DROP TABLE IF EXISTS `zsjy_job_position`;
CREATE TABLE `zsjy_job_position` (
`id` bigint(20) NOT NULL COMMENT '岗位ID',
`enterprise_id` bigint(20) NOT NULL COMMENT '所属企业ID',
`position_name` varchar(100) NOT NULL COMMENT '岗位名称',
`work_address` varchar(255) NOT NULL COMMENT '工作地址',
`work_time` varchar(100) NOT NULL COMMENT '工作时间',
`salary` varchar(50) NOT NULL COMMENT '薪资',
`required_skills` varchar(500) NOT NULL COMMENT '所需技能',
`start_date` datetime DEFAULT NULL COMMENT '有效期开始日期',
`end_date` datetime DEFAULT NULL COMMENT '有效期结束日期',
`is_permanent` tinyint(1) DEFAULT '0' COMMENT '是否永久有效(0否 1是)',
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除(0正常 1删除)',
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
PRIMARY KEY (`id`),
KEY `idx_enterprise_id` (`enterprise_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='招聘岗位表';
-- ----------------------------
-- 3.海报生成记录表
-- ----------------------------
DROP TABLE IF EXISTS `zsjy_recruitment_poster`;
CREATE TABLE `zsjy_recruitment_poster` (
`id` bigint(20) NOT NULL COMMENT '海报ID',
`enterprise_id` bigint(20) NOT NULL COMMENT '企业ID',
`position_id` bigint(20) DEFAULT NULL COMMENT '岗位ID(为空表示企业整体海报)',
`poster_path` varchar(255) NOT NULL COMMENT '海报文件路径',
`poster_type` char(1) NOT NULL COMMENT '海报类型(1企业海报 2岗位海报)',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除(0正常 1删除)',
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
PRIMARY KEY (`id`),
KEY `idx_enterprise_position` (`enterprise_id`,`position_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='招聘海报记录表';
@@ -0,0 +1,85 @@
-- ==========================================
-- 招生录取流程状态视图更新脚本
-- 版本:V1.0.0
-- 功能:创建视图,合并zsjy_enrollment_info和zsjy_enrollment_process表数据
-- 作者:技术团队
-- 时间:2025-07-25
-- 说明:解决"信息审核中"状态的数据显示问题
-- ==========================================
USE hzdyjs_xg;
-- 创建或更新视图,合并zsjy_enrollment_info和zsjy_enrollment_process表数据
DROP VIEW IF EXISTS `v_enrollment_process_combined`;
CREATE VIEW `v_enrollment_process_combined` AS
SELECT
-- 使用COALESCE函数,优先使用流程表字段,若不存在则使用报名表字段
p.id,
ei.id AS enrollment_id,
COALESCE(p.student_name, ei.name) AS student_name,
COALESCE(p.id_card, ei.id_card) AS id_card,
-- 若流程表记录不存在,则使用报名表的状态
CASE WHEN p.id IS NULL THEN ei.enrollment_status ELSE p.current_status END AS current_status,
p.current_handler,
p.current_handler_name,
p.info_audit_status,
p.info_audit_user,
p.info_audit_user_name,
p.info_audit_time,
p.info_audit_opinion,
p.admission_status,
p.admission_user,
p.admission_user_name,
p.admission_time,
COALESCE(p.payment_status, '0') AS payment_status,
p.payment_confirm_time,
p.notice_number,
p.admission_opinion,
p.final_audit_status,
p.final_audit_user,
p.final_audit_user_name,
p.final_audit_time,
p.final_audit_opinion,
COALESCE(p.is_completed, 0) AS is_completed,
p.completion_time,
COALESCE(p.remark, ei.remark) AS remark,
COALESCE(p.create_by, ei.create_by) AS create_by,
COALESCE(p.create_time, ei.create_time) AS create_time,
COALESCE(p.update_by, ei.update_by) AS update_by,
COALESCE(p.update_time, ei.update_time) AS update_time,
-- 额外添加报名信息表的一些字段
ei.gender,
ei.applied_major AS major_name,
ei.exam_region AS province,
ei.major_code,
ei.province_code,
ei.exam_number,
ei.total_score
FROM
zsjy_enrollment_info ei
LEFT JOIN
zsjy_enrollment_process p ON ei.id = p.enrollment_id AND p.deleted = 0
WHERE
ei.deleted = 0;
-- 添加视图使用说明
DELIMITER $$
CREATE OR REPLACE PROCEDURE `proc_add_view_comment`()
BEGIN
-- 为视图添加注释
IF EXISTS (SELECT 1 FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'hzdyjs_xg' AND TABLE_NAME = 'v_enrollment_process_combined' AND TABLE_TYPE = 'VIEW') THEN
ALTER TABLE `v_enrollment_process_combined` COMMENT '招生录取流程状态视图(包含信息审核中状态)';
END IF;
END$$
DELIMITER ;
-- 执行存储过程
CALL proc_add_view_comment();
-- 删除临时存储过程
DROP PROCEDURE IF EXISTS `proc_add_view_comment`;
-- 查询示例
-- SELECT * FROM v_enrollment_process_combined WHERE current_status = '1' LIMIT 10;