模块名称:overseas / 出国申请管理
基础路径:/api/rs/overseas
版本:v1.0
负责人:weizzzz
更新时间:2025-01-28
出国申请管理模块提供完整的出国申请业务流程管理功能,包括申请提交、多级审批、记录管理等核心功能。支持学术交流、培训学习、合作项目等多种出国目的,提供完整的审批流程控制和状态追踪。
rs:overseas:application:rs:overseas:application:list - 查询申请列表权限rs:overseas:application:query - 查询申请详情权限rs:overseas:application:add - 新增申请权限rs:overseas:application:edit - 编辑申请权限rs:overseas:application:remove - 删除申请权限rs:overseas:application:export - 导出申请权限rs:overseas:application:submit - 提交申请权限rs:overseas:application:cancel - 取消申请权限rs:overseas:application:approve - 审批申请权限rs:overseas:record:rs:overseas:record:list - 查询记录列表权限rs:overseas:record:query - 查询记录详情权限rs:overseas:record:add - 新增记录权限rs:overseas:record:edit - 编辑记录权限rs:overseas:record:remove - 删除记录权限rs:overseas:record:export - 导出记录权限rs:overseas:record:create - 创建记录权限rs:overseas:record:complete - 完成记录权限rs:overseas:approval:rs:overseas:approval:list - 查询审批记录列表权限rs:overseas:approval:query - 查询审批记录详情权限rs:overseas:approval:export - 导出审批记录权限| 接口名称 | HTTP 方法 | 路径 | 权限要求 | 功能描述 |
|---|---|---|---|---|
| 查询申请列表 | GET | /rs/overseas/application/list |
rs:overseas:application:list |
分页查询出国申请列表 |
| 查询申请详情 | GET | /rs/overseas/application/{id} |
rs:overseas:application:query |
根据ID查询出国申请详情 |
| 新增申请 | POST | /rs/overseas/application |
rs:overseas:application:add |
创建新的出国申请 |
| 修改申请 | PUT | /rs/overseas/application |
rs:overseas:application:edit |
更新出国申请信息 |
| 删除申请 | DELETE | /rs/overseas/application/{ids} |
rs:overseas:application:remove |
批量删除出国申请 |
| 导出申请 | POST | /rs/overseas/application/export |
rs:overseas:application:export |
导出出国申请数据 |
| 接口名称 | HTTP 方法 | 路径 | 权限要求 | 功能描述 |
|---|---|---|---|---|
| 查询我的申请列表 | GET | /rs/overseas/application/my/list |
rs:overseas:application:list |
查询当前用户的申请列表(排除已通过的申请) |
| 查询待审批申请 | GET | /rs/overseas/application/pending/list |
rs:overseas:application:approve |
查询待当前用户审批的申请 |
| 按状态查询申请 | GET | /rs/overseas/application/status/{status} |
rs:overseas:application:list |
根据状态查询申请列表 |
| 提交申请 | PUT | /rs/overseas/application/submit/{id} |
rs:overseas:application:submit |
提交出国申请进入审批流程 |
| 重新提交申请 | PUT | /rs/overseas/application/resubmit/{id} |
rs:overseas:application:edit |
重新提交已拒绝的出国申请 |
| 取消申请 | PUT | /rs/overseas/application/cancel/{id} |
rs:overseas:application:cancel |
取消出国申请 |
| 审批申请 | POST | /rs/overseas/application/approve |
rs:overseas:application:approve |
审批出国申请(通过/拒绝) |
| 修复记录 | POST | /rs/overseas/application/fix/records |
rs:overseas:application:approve |
修复已审批通过但未创建记录的申请 |
| 接口名称 | HTTP 方法 | 路径 | 权限要求 | 功能描述 |
|---|---|---|---|---|
| 查询记录列表 | GET | /rs/overseas/record/list |
rs:overseas:record:list |
分页查询出国记录列表 |
| 查询我的记录列表 | GET | /rs/overseas/record/my/list |
rs:overseas:record:list |
查询当前用户的记录列表 |
| 根据申请查询记录 | GET | /rs/overseas/record/application/{id} |
rs:overseas:record:query |
根据申请ID查询出国记录 |
| 查询记录详情 | GET | /rs/overseas/record/{id} |
rs:overseas:record:query |
根据ID查询出国记录详情 |
| 新增记录 | POST | /rs/overseas/record |
rs:overseas:record:add |
创建新的出国记录 |
| 修改记录 | PUT | /rs/overseas/record |
rs:overseas:record:edit |
更新出国记录信息 |
| 删除记录 | DELETE | /rs/overseas/record/{ids} |
rs:overseas:record:remove |
批量删除出国记录 |
| 导出记录 | POST | /rs/overseas/record/export |
rs:overseas:record:export |
导出出国记录数据 |
| 创建记录 | POST | /rs/overseas/record/create/{id} |
rs:overseas:record:create |
基于申请创建出国记录 |
| 更新完成状态 | PUT | /rs/overseas/record/complete |
rs:overseas:record:complete |
更新出国记录完成状态 |
| 接口名称 | HTTP 方法 | 路径 | 权限要求 | 功能描述 |
|---|---|---|---|---|
| 查询审批记录列表 | GET | /rs/overseas/approval/list |
rs:overseas:approval:list |
分页查询审批记录列表 |
| 查询我的审批记录 | GET | /rs/overseas/approval/my/list |
rs:overseas:approval:list |
查询当前用户的审批记录 |
| 根据申请查询审批记录 | GET | /rs/overseas/approval/application/{id} |
rs:overseas:approval:query |
根据申请ID查询审批记录 |
| 查询审批记录详情 | GET | /rs/overseas/approval/{id} |
rs:overseas:approval:query |
根据ID查询审批记录详情 |
| 查询申请审批历史 | GET | /rs/overseas/application/approval/history/{id} |
rs:overseas:application:query |
查询指定申请的完整审批历史 |
| 导出审批记录 | POST | /rs/overseas/approval/export |
rs:overseas:approval:export |
导出审批记录数据 |
interface OverseasApplicationVO {
applicationId: number | string; // 申请ID
applicantId: number; // 申请人ID
applicantName: string; // 申请人姓名
department: string; // 所属部门
position: string; // 职位
contactPhone: string; // 联系电话
contactEmail: string; // 联系邮箱
purpose: string; // 出国目的编码
purposeDetail: string; // 目的详细说明
destination: string; // 目的地国家
destinationCity: string; // 目的地城市
startDate: string; // 开始日期
endDate: string; // 结束日期
duration: number; // 出国天数
budget: number; // 预算金额
budgetSource: string; // 经费来源编码
invitation: string; // 邀请函信息
itinerary: string; // 行程安排
accommodationPlan: string; // 住宿安排
transportationPlan: string; // 交通安排
status: string; // 申请状态编码
currentApprover: string; // 当前审批人
approvalLevel: string; // 审批级别
applyTime: string; // 申请时间
approvalTime: string; // 审批完成时间
adminRemark: string; // 管理员备注
applicantRemark: string; // 申请人备注
createTime: string; // 创建时间
updateTime: string; // 更新时间
// 显示字段
statusText: string; // 状态文本
purposeText: string; // 目的文本
budgetSourceText: string; // 经费来源文本
approvalLevelText: string; // 审批级别文本
}
interface OverseasRecordVO {
recordId: number | string; // 记录ID
applicationId: number; // 关联申请ID
applicantId: number; // 申请人ID
applicantName: string; // 申请人姓名
department: string; // 所属部门
purpose: string; // 出国目的
destination: string; // 目的地国家
actualStartDate: string; // 实际开始日期
actualEndDate: string; // 实际结束日期
actualDuration: number; // 实际出国天数
actualBudget: number; // 实际花费金额
completionStatus: string; // 完成状态编码
achievement: string; // 出国成果
reportContent: string; // 总结报告内容
certificatePath: string; // 证书文件路径
createTime: string; // 创建时间
updateTime: string; // 更新时间
// 显示字段
purposeText: string; // 目的文本
completionStatusText: string; // 完成状态文本
}
interface OverseasApprovalVO {
approvalId: number | string; // 审批ID
applicationId: number; // 关联申请ID
approverId: number; // 审批人ID
approverName: string; // 审批人姓名
approvalLevel: string; // 审批级别编码
approvalStatus: string; // 审批状态编码
approvalOpinion: string; // 审批意见
approvalTime: string; // 审批时间
createTime: string; // 创建时间
updateTime: string; // 更新时间
// 显示字段
approvalLevelText: string; // 审批级别文本
approvalStatusText: string; // 审批状态文本
}
接口地址:GET /rs/overseas/application/list
权限要求:rs:overseas:application:list
interface OverseasApplicationQuery {
pageNum: number; // 页码(必须)
pageSize: number; // 每页大小(必须)
applicantName?: string; // 申请人姓名
department?: string; // 所属部门
purpose?: string; // 出国目的
destination?: string; // 目的地
status?: string; // 申请状态
approvalLevel?: string; // 审批级别
currentApprover?: string; // 当前审批人
applicantId?: number; // 申请人ID
budgetMin?: number; // 预算最小值
budgetMax?: number; // 预算最大值
applyTimeBegin?: string; // 申请开始时间
applyTimeEnd?: string; // 申请结束时间
startDateBegin?: string; // 出国开始日期范围
startDateEnd?: string; // 出国结束日期范围
}
{
"code": 200,
"msg": "查询成功",
"rows": [
{
"applicationId": 1,
"applicantId": 1,
"applicantName": "张三",
"department": "计算机学院",
"position": "副教授",
"contactPhone": "13800138001",
"contactEmail": "zhangsan@example.com",
"purpose": "academic_exchange",
"purposeDetail": "参加国际人工智能学术交流会议,发表研究论文并进行学术交流",
"destination": "美国",
"destinationCity": "纽约",
"startDate": "2025-03-15",
"endDate": "2025-03-25",
"duration": 11,
"budget": 25000.00,
"budgetSource": "school",
"invitation": "已收到会议邀请函",
"itinerary": "3月15日飞往纽约,参加为期5天的会议,会后进行实验室访问",
"status": "1",
"currentApprover": "admin",
"approvalLevel": "2",
"applyTime": "2025-01-28 10:00:00",
"approvalTime": "2025-01-28 15:30:00",
"applicantRemark": "期待能够带回先进的研究成果",
"createTime": "2025-01-28 10:00:00",
"updateTime": "2025-01-28 15:30:00",
"statusText": "已通过",
"purposeText": "学术交流",
"budgetSourceText": "学校经费",
"approvalLevelText": "分管领导"
}
],
"total": 1
}
接口地址:POST /rs/overseas/application
权限要求:rs:overseas:application:add
interface OverseasApplicationForm {
department: string; // 所属部门(必须)
position?: string; // 职位
contactPhone: string; // 联系电话(必须)
contactEmail: string; // 联系邮箱(必须)
purpose: string; // 出国目的(必须)
purposeDetail: string; // 目的详细说明(必须)
destination: string; // 目的地国家(必须)
destinationCity?: string; // 目的地城市
startDate: string; // 开始日期(必须)
endDate: string; // 结束日期(必须)
budget: number; // 预算金额(必须)
budgetSource: string; // 经费来源(必须)
invitation?: string; // 邀请函信息
itinerary: string; // 行程安排(必须)
accommodationPlan?: string; // 住宿安排
transportationPlan?: string; // 交通安排
applicantRemark?: string; // 申请人备注
}
{
"department": "计算机学院",
"position": "副教授",
"contactPhone": "13800138001",
"contactEmail": "zhangsan@example.com",
"purpose": "academic_exchange",
"purposeDetail": "参加国际人工智能学术交流会议,发表研究论文并进行学术交流",
"destination": "美国",
"destinationCity": "纽约",
"startDate": "2025-03-15",
"endDate": "2025-03-25",
"budget": 25000.00,
"budgetSource": "school",
"invitation": "已收到会议邀请函",
"itinerary": "3月15日飞往纽约,参加为期5天的会议,会后进行实验室访问",
"accommodationPlan": "入住会议指定酒店",
"transportationPlan": "往返机票+当地交通",
"applicantRemark": "期待能够带回先进的研究成果"
}
{
"code": 200,
"msg": "新增成功",
"data": null
}
接口地址: PUT /rs/overseas/application/resubmit/{id}
权限要求: rs:overseas:application:edit
功能说明: 允许用户重新提交已被拒绝的出国申请,支持修改申请内容后重新进入审批流程。
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | Long | 是 | 申请ID |
请求体:
{
"destination": "美国",
"purpose": "1",
"purposeDetail": "参加学术会议",
"destinationCity": "纽约",
"startDate": "2025-02-01",
"endDate": "2025-02-10",
"budget": 15000,
"budgetSource": "科研经费",
"itinerary": "详细行程安排",
"applicantRemark": "申请备注"
}
响应数据:
{
"code": 200,
"msg": "操作成功",
"data": null
}
业务逻辑:
接口地址:POST /rs/overseas/application/approve
权限要求:rs:overseas:application:approve
interface ApprovalRequest {
applicationId: number | string; // 申请ID(必须)
approvalStatus: string; // 审批状态:1-通过,2-拒绝(必须)
approvalOpinion?: string; // 审批意见
}
{
"applicationId": 1,
"approvalStatus": "1",
"approvalOpinion": "同意申请,项目具有重要学术价值,注意安全"
}
{
"code": 200,
"msg": "审批成功",
"data": null
}
接口地址:POST /rs/overseas/application/fix/records
权限要求:rs:overseas:application:approve
修复已审批通过但由于系统异常未自动创建出国记录的申请。该接口会:
无需参数,直接POST请求即可。
POST /rs/overseas/application/fix/records
Authorization: Bearer {token}
Content-Type: application/json
clientid: ruoyi-web
referer: http://localhost
{
"code": 200,
"msg": "修复完成,共修复 3 条记录",
"data": "修复完成,共修复 3 条记录"
}
接口地址:GET /rs/overseas/application/approval/history/{applicationId}
权限要求:rs:overseas:application:query
查询指定出国申请的完整审批历史记录,按审批级别升序、审批时间降序排列。主要用于审批历史追溯和流程透明化。
| 参数名 | 类型 | 必须 | 说明 |
|---|---|---|---|
| applicationId | number | 是 | 申请ID |
GET /rs/overseas/application/approval/history/1
Authorization: Bearer {token}
Content-Type: application/json
clientid: ruoyi-web
referer: http://localhost
{
"code": 200,
"msg": "查询成功",
"data": [
{
"approvalId": 1,
"applicationId": 1,
"approverId": 2,
"approverName": "李部长",
"approvalLevel": "1",
"approvalStatus": "1",
"approvalOpinion": "同意申请,项目具有重要学术价值",
"approvalTime": "2025-01-28 14:30:00",
"createTime": "2025-01-28 14:30:00",
"updateTime": "2025-01-28 14:30:00",
"approvalLevelText": "部门主管",
"approvalStatusText": "通过"
},
{
"approvalId": 2,
"applicationId": 1,
"approverId": 3,
"approverName": "王副校长",
"approvalLevel": "2",
"approvalStatus": "1",
"approvalOpinion": "项目符合学校发展战略,建议通过",
"approvalTime": "2025-01-28 16:15:00",
"createTime": "2025-01-28 16:15:00",
"updateTime": "2025-01-28 16:15:00",
"approvalLevelText": "分管领导",
"approvalStatusText": "通过"
},
{
"approvalId": 3,
"applicationId": 1,
"approverId": 4,
"approverName": "张校长",
"approvalLevel": "3",
"approvalStatus": "1",
"approvalOpinion": "同意出国,注意安全,及时汇报进展",
"approvalTime": "2025-01-28 17:45:00",
"createTime": "2025-01-28 17:45:00",
"updateTime": "2025-01-28 17:45:00",
"approvalLevelText": "校领导",
"approvalStatusText": "通过"
}
]
}
| 字段名 | 类型 | 说明 |
|---|---|---|
| approvalId | number | 审批记录ID |
| applicationId | number | 关联的申请ID |
| approverId | number | 审批人用户ID |
| approverName | string | 审批人姓名 |
| approvalLevel | string | 审批级别编码(1-部门主管,2-分管领导,3-校领导) |
| approvalStatus | string | 审批状态编码(0-待审核,1-通过,2-拒绝) |
| approvalOpinion | string | 审批意见 |
| approvalTime | string | 审批时间 |
| approvalLevelText | string | 审批级别中文描述 |
| approvalStatusText | string | 审批状态中文描述 |
approvalLevel 升序、approvalTime 降序排列{
"code": 500,
"msg": "申请ID不存在"
}
| 编码 | 含义 | 描述 |
|---|---|---|
| 0 | 待审核 | 申请已提交,等待审批 |
| 1 | 已通过 | 申请审批通过 |
| 2 | 已拒绝 | 申请审批被拒绝 |
| 3 | 已取消 | 申请被申请人主动取消 |
| 4 | 已完成 | 出国活动已完成 |
| 编码 | 含义 | 描述 |
|---|---|---|
| academic_exchange | 学术交流 | 参加学术交流活动 |
| conference | 学术会议 | 参加学术会议 |
| training | 培训学习 | 参加培训课程 |
| cooperation | 合作项目 | 开展合作研究项目 |
| research | 科研访问 | 科研访问学者 |
| other | 其他 | 其他出国目的 |
| 编码 | 含义 | 描述 |
|---|---|---|
| school | 学校经费 | 学校提供经费支持 |
| government | 政府资助 | 政府资助项目 |
| project | 项目经费 | 科研项目经费 |
| self | 个人承担 | 个人承担费用 |
| cooperation | 合作单位 | 合作单位提供经费 |
| other | 其他 | 其他经费来源 |
| 编码 | 含义 | 描述 |
|---|---|---|
| 1 | 部门主管 | 第一级审批:部门主管 |
| 2 | 分管领导 | 第二级审批:分管领导 |
| 3 | 校领导 | 第三级审批:校领导 |
| 编码 | 含义 | 描述 |
|---|---|---|
| 0 | 待审核 | 等待审批 |
| 1 | 通过 | 审批通过 |
| 2 | 拒绝 | 审批拒绝 |
⚠️ 重要说明:完成状态(completionStatus)与申请状态(status)是两个不同的概念!
- 申请状态(status):表示审批流程的状态(待审核/已通过/已拒绝)
- 完成状态(completionStatus):表示出国任务执行的状态(未完成/进行中/已完成/已取消)
| 编码 | 含义 | 描述 | 使用场景 |
|---|---|---|---|
| 0 | 未完成 | 出国活动尚未开始 | 已通过审批但尚未出发 |
| 1 | 进行中 | 出国活动正在进行 | 已出发但未返回(默认值) |
| 2 | 已完成 | 出国活动已完成 | 已返回并完成回执 |
| 3 | 已取消 | 出国活动取消 | 计划取消 |
字段关系示例:
status='1'),默认完成状态为"进行中"(completionStatus='1')status='1'),因为只有通过审批的申请才会出现在记录中草稿状态 → 待审核 → 已通过/已拒绝
↓
已取消
↓
已完成
http://localhost:8080必需Header:
Authorization: Bearer {token}
Content-Type: application/json
clientid: ruoyi-web
referer: http://localhost
YYYY-MM-DD HH:mm:ss| 版本 | 更新时间 | 更新内容 | 更新人 |
|---|---|---|---|
| v1.0 | 2025-01-28 | 初始版本,包含完整的API接口文档 | weizzzz |
| v1.1 | 2025-08-03 | 新增查询申请审批历史接口,完善审批流程追溯功能 | weizzzz |
| v1.2 | 2025-01-09 | 新增修复记录接口,修复审批通过后记录创建问题 | weizzzz |
| v1.3 | 2025-01-08 | 调整我的申请列表接口,显示完整申请历史(包括已通过申请) | weizzzz |
| v1.4 | 2025-01-08 | 修正我的申请列表接口,排除已通过申请(已通过申请显示在出国记录中) | weizzzz |
| v1.5 | 2025-01-28 | 新增盖章文件上传功能,用户需上传盖章文件后才能提交申请 | weizzzz |
接口地址:POST /rs/overseas/application/uploadStampedFile
权限要求:rs:overseas:add
用于上传填写并加盖公章后的登记备案表文件。支持PDF、JPG、PNG格式,文件大小不超过10MB。上传成功后,用户才能提交出国申请。
Content-Type: multipart/form-data
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| file | File | 是 | 盖章文件,支持PDF、JPG、PNG格式 |
| applicationId | Long | 是 | 申请ID |
POST /rs/overseas/application/uploadStampedFile
Content-Type: multipart/form-data
Authorization: Bearer {token}
clientid: ruoyi-web
referer: http://localhost
form-data:
file: [选择的盖章文件]
applicationId: 1
成功响应:
{
"code": 200,
"msg": "盖章文件上传成功",
"data": {
"filePath": "overseas/stamped/stamped_1_1704076800000.pdf",
"fileName": "出国境登记表_张三.pdf",
"uploadTime": "2025-01-28 14:30:00"
}
}
失败响应:
{
"code": 500,
"msg": "不支持的文件格式,请上传PDF、JPG或PNG文件"
}
上传成功后,系统会自动更新以下字段:
stamped_registration_file_path: 文件存储路径stamped_registration_file_name: 原始文件名stamped_file_upload_time: 上传时间stamped_file_upload_status: 上传状态(设为'1')📞 技术支持:如有疑问请联系开发团队
📚 相关文档:参考项目API文档基础规范和开发规范