---
title: 职来后端接口
language_tabs:
- shell: Shell
- http: HTTP
- javascript: JavaScript
- ruby: Ruby
- python: Python
- php: PHP
- java: Java
- go: Go
toc_footers: []
includes: []
search: true
code_clipboard: true
highlight_theme: darkula
headingLevel: 2
generator: "@tarslib/widdershins v4.0.30"
---
# 职来后端接口
Base URLs:
# Authentication
- HTTP Authentication, scheme: bearer
通过 /auth/login 获取的 Access Token,请求头格式:Authorization: Bearer <token>
# Default
## GET 评分完整性概览(ADMIN)
GET /admin/scoring/fairness/overview
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|period|query|string| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"basis": "string",
"scope": "string",
"period": "string",
"capturedAt": "2019-08-24T14:15:22Z",
"populationSize": 0,
"computableSnapshotRatio": 0,
"confidence": "string",
"riskLevel": "string",
"versionCounts": {
"property1": 0,
"property2": 0
},
"mixedVersionCount": 0,
"unknownVersionCount": 0,
"distribution": {
"sampleSize": 0,
"mean": 0,
"median": 0,
"p10": 0,
"p25": 0,
"p75": 0,
"p90": 0,
"min": 0,
"max": 0,
"standardDeviation": 0,
"buckets": {
"property1": 0,
"property2": 0
},
"concentrationRate": 0,
"riskLevel": "string",
"availability": "string",
"reason": "string"
},
"distributionsByRulesVersion": {
"property1": {
"sampleSize": 0,
"mean": 0,
"median": 0,
"p10": 0,
"p25": 0,
"p75": 0,
"p90": 0,
"min": 0,
"max": 0,
"standardDeviation": 0,
"buckets": {
"property1": 0,
"property2": 0
},
"concentrationRate": 0,
"riskLevel": "string",
"availability": "string",
"reason": "string"
},
"property2": {
"sampleSize": 0,
"mean": 0,
"median": 0,
"p10": 0,
"p25": 0,
"p75": 0,
"p90": 0,
"min": 0,
"max": 0,
"standardDeviation": 0,
"buckets": {
"property1": 0,
"property2": 0
},
"concentrationRate": 0,
"riskLevel": "string",
"availability": "string",
"reason": "string"
}
},
"coherentVersionSubset": [
"string"
],
"availability": "string",
"reason": "string"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseFairnessResponseOverview](#schemaapiresponsefairnessresponseoverview)|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|非法 period|None|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|None|
## GET 评分维度分布(ADMIN)
GET /admin/scoring/fairness/dimensions
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|period|query|string| 是 |none|
|dimension|query|string| 否 |none|
|Authorization|header|string| 否 |none|
#### 枚举值
|属性|值|
|---|---|
|dimension|EDUCATION|
|dimension|INTERNSHIP|
|dimension|ABILITY|
|dimension|COMPLIANCE|
|dimension|STABILITY|
|dimension|GROWTH|
|dimension|INTEGRITY|
|dimension|ACTIVITY|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"basis": "string",
"scope": "string",
"period": "string",
"capturedAt": "2019-08-24T14:15:22Z",
"dimensions": [
{
"dimension": "string",
"populationSize": 0,
"rowCount": 0,
"missingRowCount": 0,
"validSampleSize": 0,
"confidence": "string",
"missingRowRate": 0,
"nullScoreRate": 0,
"validCoverage": 0,
"statusCounts": {
"property1": 0,
"property2": 0
},
"versionCounts": {
"property1": 0,
"property2": 0
},
"inconsistentRecordCount": 0,
"unknownStatusCount": 0,
"outOfRangeScoreCount": 0,
"unknownRulesVersionCount": 0,
"distribution": {
"sampleSize": 0,
"mean": 0,
"median": 0,
"p10": 0,
"p25": 0,
"p75": 0,
"p90": 0,
"min": 0,
"max": 0,
"standardDeviation": 0,
"buckets": {},
"concentrationRate": 0,
"riskLevel": "string",
"availability": "string",
"reason": "string"
},
"distributionsByRulesVersion": {
"property1": {
"sampleSize": null,
"mean": null,
"median": null,
"p10": null,
"p25": null,
"p75": null,
"p90": null,
"min": null,
"max": null,
"standardDeviation": null,
"buckets": null,
"concentrationRate": null,
"riskLevel": null,
"availability": null,
"reason": null
},
"property2": {
"sampleSize": null,
"mean": null,
"median": null,
"p10": null,
"p25": null,
"p75": null,
"p90": null,
"min": null,
"max": null,
"standardDeviation": null,
"buckets": null,
"concentrationRate": null,
"riskLevel": null,
"availability": null,
"reason": null
}
},
"availability": "string",
"reason": "string"
}
],
"availability": "string",
"reason": "string"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseFairnessResponseDimensions](#schemaapiresponsefairnessresponsedimensions)|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|非法参数|None|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|None|
## GET 评分历史漂移(ADMIN)
GET /admin/scoring/fairness/drift
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"availability": "UNAVAILABLE",
"reason": "string",
"capturedAt": "2019-08-24T14:15:22Z"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseFairnessResponseUnavailable](#schemaapiresponsefairnessresponseunavailable)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|None|
## GET 排名稳定性(ADMIN)
GET /admin/scoring/fairness/ranking-stability
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"availability": "UNAVAILABLE",
"reason": "string",
"capturedAt": "2019-08-24T14:15:22Z"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseFairnessResponseUnavailable](#schemaapiresponsefairnessresponseunavailable)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|None|
## GET 申诉纠错聚合(ADMIN)
GET /admin/scoring/fairness/appeals
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|from|query|string(date)| 否 |none|
|to|query|string(date)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"basis": "string",
"from": "2019-08-24",
"to": "2019-08-24",
"capturedAt": "2019-08-24T14:15:22Z",
"appealCount": 0,
"sampleSize": 0,
"statusCounts": {
"property1": 0,
"property2": 0
},
"statusEventCounts": {
"property1": 0,
"property2": 0
},
"statusCandidateCounts": {
"property1": 0,
"property2": 0
},
"confidence": "string",
"approvedEverCount": 0,
"approvalRate": 0,
"rollbackExecutionRate": 0,
"duplicateAppealCount": 0,
"duplicateAppealRate": 0,
"comparableRollbackCount": 0,
"comparableRollbackCandidateCount": 0,
"changedCount": 0,
"changedCandidateCount": 0,
"actualScoreChangeRate": 0,
"meanDelta": 0,
"meanAbsoluteDelta": 0,
"duplicateRollbackHistoryCount": 0,
"invalidScoreRollbackCount": 0,
"ruleVersionChangedRollbackCount": 0,
"reasonCounts": {
"property1": 0,
"property2": 0
},
"availability": "string",
"reason": "string",
"exposureAppealRateAvailability": "string",
"exposureAppealRateReason": "string"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseFairnessResponseAppeals](#schemaapiresponsefairnessresponseappeals)|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|非法日期范围|None|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|None|
# 个人资料
## GET 查询当前学生资料
GET /profile/me
查询当前登录学生(仅 STUDENT 角色)自己的学生资料。身份仅从 JWT/SecurityContext 获取,不接受 userId、studentUserId 等请求参数;本接口无 Path、Query、Body 参数。若尚未创建个人资料:HTTP 200,data 为空对象 {}(非 null),且不会自动创建数据库记录。当前未设置接口级限流。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 成功;有资料返回资料对象,无资料返回空对象 \{\};message=ok
```json
{
"code": 200,
"message": "ok",
"data": {
"id": 1,
"userId": 2,
"realName": "张三",
"education": "本科",
"school": "某某大学",
"graduationYear": 2026,
"resumeUrl": "/uploads/resumes/2/resume.pdf",
"skills": "[Java, Spring Boot]",
"createdAt": "2026-08-24T10:00:00"
},
"timestamp": "2026-08-24T10:00:00Z"
}
```
> 未登录、Token 缺失/非法/过期;运行时实际返回 code=401、message=not authenticated
```json
{
"code": 401,
"message": "not authenticated",
"timestamp": "2026-08-24T10:00:00Z"
}
```
> 已登录但不是 STUDENT 角色(COMPANY/ADMIN);code=2002、message=forbidden
```json
{
"code": 2002,
"message": "forbidden",
"data": null,
"timestamp": "2026-08-24T10:00:00Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功;有资料返回资料对象,无资料返回空对象 {};message=ok|[ApiResponseStudentProfileResponse](#schemaapiresponsestudentprofileresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录、Token 缺失/非法/过期;运行时实际返回 code=401、message=not authenticated|Inline|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|已登录但不是 STUDENT 角色(COMPANY/ADMIN);code=2002、message=forbidden|Inline|
### 返回数据结构
状态码 **200**
|名称|类型|必选|约束|中文名|说明|
|---|---|---|---|---|---|
|» code|integer(int32)|false|none||none|
|» message|string|false|none||none|
|» data|[StudentProfileResponse](#schemastudentprofileresponse)|false|none||none|
|»» id|integer(int64)|false|none||none|
|»» userId|integer(int64)|false|none||none|
|»» realName|string|false|none||none|
|»» bio|string|false|none||none|
|»» location|string|false|none||none|
|»» education|string|false|none||none|
|»» school|string|false|none||none|
|»» graduationYear|integer(int32)|false|none||none|
|»» resumeUrl|string|false|none||none|
|»» skills|string|false|none||none|
|»» createdAt|string(date-time)|false|none||none|
|» requestId|string|false|none||none|
|» timestamp|string(date-time)|false|none||none|
## PUT 更新学生资料
PUT /profile/me
仅更新传入的非 null 字段;不存在则自动创建
> Body 请求参数
```json
{
"realName": "string",
"bio": "string",
"location": "string",
"education": "string",
"school": "string",
"graduationYear": 0,
"resumeUrl": "string",
"skills": [
"string"
]
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[StudentProfileUpdateRequest](#schemastudentprofileupdaterequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 下载简历
GET /profile/me/resume
下载当前学生上传的简历文件,仅 STUDENT 角色
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
"string"
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|string|
## POST 上传简历
POST /profile/me/resume
仅 STUDENT 角色;PDF/DOC/DOCX,≤10MB;上传新简历时替换旧文件
> Body 请求参数
```yaml
file: ""
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|object| 否 |none|
|» file|body|string(binary)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## DELETE 删除简历
DELETE /profile/me/resume
删除当前学生的简历文件并清空 resumeUrl,仅 STUDENT 角色
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
# 岗位
## GET 查询已发布岗位列表
GET /jobs
仅返回 PUBLISHED 岗位,支持关键词、城市、用工类型、薪资筛选和分页
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|keyword|query|string| 否 |none|
|city|query|string| 否 |none|
|employmentType|query|string| 否 |none|
|salaryMin|query|integer(int32)| 否 |none|
|salaryMax|query|integer(int32)| 否 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 创建岗位
POST /jobs
仅企业账号可调用,新岗位默认 DRAFT 状态
> Body 请求参数
```json
{
"title": "string",
"description": "string",
"requirements": "string",
"city": "string",
"employmentType": "string",
"salaryMin": 0,
"salaryMax": 0
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[JobCreateRequest](#schemajobcreaterequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 岗位筛选选项
GET /jobs/filters
返回当前 PUBLISHED 岗位可用的城市、用工类型和薪资范围
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 查询岗位详情(公开)
GET /jobs/public/{jobId}
仅返回 PUBLISHED 岗位详情;CLOSED 也可查看详情
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 岗位高级搜索
GET /jobs/search
仅返回 PUBLISHED 岗位,支持关键词、城市、用工类型、薪资、公司筛选、排序和分页
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|keyword|query|string| 否 |none|
|city|query|string| 否 |none|
|employmentType|query|string| 否 |none|
|salaryMin|query|integer(int32)| 否 |none|
|salaryMax|query|integer(int32)| 否 |none|
|companyId|query|integer(int64)| 否 |none|
|sort|query|string| 否 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 查询岗位详情
GET /jobs/{jobId}
企业可查看自己管理的岗位详情
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## PUT 更新岗位
PUT /jobs/{jobId}
仅岗位所属企业可修改
> Body 请求参数
```json
{
"title": "string",
"description": "string",
"requirements": "string",
"city": "string",
"employmentType": "string",
"salaryMin": 0,
"salaryMax": 0
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[JobUpdateRequest](#schemajobupdaterequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## PATCH 发布/关闭岗位
PATCH /jobs/{jobId}/status
DRAFT→PUBLISHED,PUBLISHED→CLOSED;禁止非法回退
> Body 请求参数
```json
{
"status": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[JobStatusRequest](#schemajobstatusrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
# 企业
## GET 查询当前企业资料
GET /companies/me
返回当前登录用户绑定的企业资料,未绑定企业返回 404
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## PUT 更新企业资料
PUT /companies/me
仅更新传入的非 null 字段;未绑定企业时返回 404
> Body 请求参数
```json
{
"name": "string",
"logoUrl": "string",
"description": "string",
"industry": "string",
"website": "string",
"address": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[CompanyUpdateRequest](#schemacompanyupdaterequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 创建企业资料
POST /companies/me
仅 COMPANY 角色可调用;已存在时返回 409
> Body 请求参数
```json
{
"name": "string",
"logoUrl": "string",
"description": "string",
"industry": "string",
"website": "string",
"address": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[CompanyCreateRequest](#schemacompanycreaterequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 查询企业公开详情
GET /companies/{companyId}
匿名可访问,仅返回 6 个公开字段
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|companyId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"id":0,"name":"string","logoUrl":"string","description":"string","industry":"string","verified":true},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyPublicView](#schemaapiresponsecompanypublicview)|
## GET 查询企业公开岗位列表
GET /companies/{companyId}/jobs
匿名可访问,仅返回 PUBLISHED 岗位
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|companyId|path|integer(int64)| 是 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|sort|query|string| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 查询企业入驻状态
GET /companies/me/onboarding
返回当前企业资料、认证状态和允许动作
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"company":{"id":0,"name":"string","logoUrl":"string","description":"string","industry":"string","website":"string","address":"string","verified":true},"onboardingStatus":"string","latestVerification":{"id":0,"status":"string","submittedAt":"2019-08-24T14:15:22Z","decidedAt":"2019-08-24T14:15:22Z"},"missingFields":["string"],"allowedActions":["string"]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyOnboardingResponse](#schemaapiresponsecompanyonboardingresponse)|
# 认证
## POST 手机号验证码登录
POST /auth/login
手机号验证码登录;新手机号创建 UNASSIGNED 统一账号,identitySelectionRequired=true 时前端必须进入首次身份选择;旧角色保持不变。保留原字段及成功码 200。
> Body 请求参数
```json
{
"phone": "string",
"code": "string",
"purpose": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[LoginRequest](#schemaloginrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 当前用户信息
GET /auth/me
需要 JWT 认证
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 发送短信验证码
POST /auth/sms/send
开发/测试使用 Mock 发送实现;生产环境未接入短信网关时返回服务不可用。验证码不会写入日志。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|phone|query|string| 是 |none|
|purpose|query|string| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":"string","property2":"string"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringString](#schemaapiresponsemapstringstring)|
## POST 刷新 Token
POST /auth/refresh
使用 Refresh Token 换取新的 Access/Refresh Token 对;旧 Refresh Token 立即失效
> Body 请求参数
```json
{
"refreshToken": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[RefreshTokenRequest](#schemarefreshtokenrequest)| 是 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"accessToken": "string",
"refreshToken": "string",
"expiresIn": 0
}
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseTokenPairResponse](#schemaapiresponsetokenpairresponse)|
## POST 登出
POST /auth/logout
撤销当前登录会话;需要 Access Token,不接受任何请求体
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"property1": "string",
"property2": "string"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseMapStringString](#schemaapiresponsemapstringstring)|
## POST 首次设置密码
POST /auth/password/set
> Body 请求参数
```json
{
"smsCode": "string",
"newPassword": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[PasswordSetRequest](#schemapasswordsetrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"passwordConfigured":true,"reauthenticationRequired":true},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePasswordOperationResponse](#schemaapiresponsepasswordoperationresponse)|
## POST 短信找回并重置密码
POST /auth/password/reset
> Body 请求参数
```json
{
"phone": "string",
"smsCode": "string",
"newPassword": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[PasswordResetRequest](#schemapasswordresetrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"passwordConfigured":true,"reauthenticationRequired":true},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePasswordOperationResponse](#schemaapiresponsepasswordoperationresponse)|
## POST 手机号密码登录
POST /auth/password/login
使用手机号和密码登录,返回 Access/Refresh Token;不自动创建账号
> Body 请求参数
```json
{
"phone": "string",
"password": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[PasswordLoginRequest](#schemapasswordloginrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 修改密码
POST /auth/password/change
> Body 请求参数
```json
{
"currentPassword": "string",
"newPassword": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[PasswordChangeRequest](#schemapasswordchangerequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"passwordConfigured":true,"reauthenticationRequired":true},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePasswordOperationResponse](#schemaapiresponsepasswordoperationresponse)|
## POST 企业注册
POST /auth/company/register
使用 company-register 短信验证码创建企业账号和企业资料
> Body 请求参数
```json
{
"phone": "string",
"code": "string",
"password": "stringstring",
"company": {
"name": "string",
"logoUrl": "string",
"description": "string",
"industry": "string",
"website": "string",
"address": "string"
}
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[CompanyRegistrationRequest](#schemacompanyregistrationrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"userId":0,"companyId":0,"role":"string","onboardingStatus":"string","accessToken":"string","refreshToken":"string","expiresIn":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyRegistrationResponse](#schemaapiresponsecompanyregistrationresponse)|
## POST 首次选择账号身份
POST /auth/identity/select
统一账号一次性选择 STUDENT 或 COMPANY;COMPANY 必须提交 company 资料且注册开关开启。首次成功撤销全部旧会话并返回新凭证;同身份重复请求只返回状态,不重复颁发凭证。
> Body 请求参数
```json
{
"identity": "STUDENT",
"company": {
"name": "string",
"logoUrl": "string",
"description": "string",
"industry": "string",
"website": "string",
"address": "string"
}
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[IdentitySelectionRequest](#schemaidentityselectionrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"userId":0,"role":"string","identitySelectionRequired":true,"companyId":0,"onboardingStatus":"string","accessToken":"string","refreshToken":"string","expiresIn":0,"reauthenticationRequired":true},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseIdentitySelectionResponse](#schemaapiresponseidentityselectionresponse)|
# 投递
## POST 投递岗位
POST /applications
只能投递 PUBLISHED 状态的岗位,不可重复投递
> Body 请求参数
```json
{
"jobId": 0
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[ApplicationCreateRequest](#schemaapplicationcreaterequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 我的投递列表
GET /applications/me
查看当前学生自己的投递记录,支持 status 筛选和分页
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|status|query|string| 否 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 投递详情
GET /applications/{id}
查看自己的投递记录详情
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## PATCH 更新投递状态(企业)
PATCH /applications/{id}/status
SUBMITTED→VIEWED→INTERVIEW→REJECTED/HIRED
> Body 请求参数
```json
{
"status": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[ApplicationStatusRequest](#schemaapplicationstatusrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 投递状态时间线
GET /applications/{id}/timeline
学生本人或岗位所属企业可查看状态变更历史
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)|
## POST 撤回投递
POST /applications/{id}/withdraw
仅 SUBMITTED/VIEWED 状态可撤回,撤回后不可逆
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 查看岗位投递列表(企业)
GET /company/applications
企业查看自己发布的某个岗位收到的投递,支持 status 筛选和分页
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|query|integer(int64)| 是 |none|
|status|query|string| 否 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 企业候选人列表
GET /company/candidates
跨岗位查询本企业所有候选人投递,支持按岗位、状态、关键词筛选,支持分页和排序
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|query|integer(int64)| 否 |none|
|status|query|string| 否 |none|
|keyword|query|string| 否 |none|
|sort|query|string| 否 |none|
|order|query|string| 否 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"items":[{"applicationId":0,"jobId":0,"jobTitle":"string","status":"string","candidateName":"string","candidateSchool":"string","candidateEducation":"string","candidateGraduationYear":0,"candidateAvatarUrl":"string","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"}],"total":0,"page":0,"size":0,"totalPages":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateListResponse](#schemaapiresponsecandidatelistresponse)|
## GET 企业候选人详情
GET /company/candidates/{applicationId}
查看投递详情及候选人公开资料,只能查看本企业岗位下的投递
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|applicationId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"applicationId":0,"jobId":0,"jobTitle":"string","jobCity":"string","jobEmploymentType":"string","status":"string","coverLetter":"string","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","candidateName":"string","candidateAvatarUrl":"string","candidateBio":"string","candidateLocation":"string","candidateSchool":"string","candidateEducation":"string","candidateGraduationYear":0,"candidateSkills":["string"]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateDetailView](#schemaapiresponsecandidatedetailview)|
## GET 企业下载候选人简历
GET /company/candidates/{applicationId}/resume
按候选人隐私设置授权后返回简历文件流;不返回存储路径、学生 ID 或联系方式
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|applicationId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
"string"
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|string|
# 系统
## GET 应用健康检查
GET /health
返回应用及依赖服务状态
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 应用信息
GET /info
返回应用版本、运行时信息
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
# health-controller
## GET healthDetails
GET /health/details
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
# API
## GET API 信息
GET /
返回 API v0.1 基本信息
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
# 简历版本
## GET 简历版本列表
GET /profile/me/resume-versions
本人 ACTIVE 版本,version_no 倒序
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)|
## POST 创建简历版本
POST /profile/me/resume-versions
仅本人(STUDENT);PDF/DOC/DOCX ≤10MB;可附版本名
> Body 请求参数
```yaml
file: ""
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|name|query|string| 否 |none|
|Authorization|header|string| 否 |none|
|body|body|object| 否 |none|
|» file|body|string(binary)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 简历版本详情
GET /profile/me/resume-versions/{id}
仅本人可查看;他人 403,不存在 404
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## PUT 修改简历版本
PUT /profile/me/resume-versions/{id}
本人;可选重命名 + 可选替换文件(替换时删除旧文件)
> Body 请求参数
```yaml
file: ""
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|name|query|string| 否 |none|
|Authorization|header|string| 否 |none|
|body|body|object| 否 |none|
|» file|body|string(binary)| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## DELETE 删除简历版本
DELETE /profile/me/resume-versions/{id}
默认版本需先设其他默认;导出进行中不可删;删除文件并移除记录
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 设为默认简历
POST /profile/me/resume-versions/{id}/default
同用户最多一个默认;已默认幂等;并发冲突 409
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 创建简历导出任务
POST /profile/me/resume-versions/{id}/export
异步复制该版本文件到导出目录;返回任务状态
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 导出任务状态
GET /resume-export-tasks/{taskId}
仅本人可查询;SUCCESS 含输出文件,FAILED 含失败原因
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|taskId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 下载导出产物
GET /resume-export-tasks/{taskId}/download
仅本人且任务 SUCCESS 可下载;attachment;不暴露内部路径
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|taskId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
"string"
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|string|
# 求职偏好
## GET 查询求职偏好
GET /profile/me/preferences
仅 STUDENT;无记录时返回空偏好对象
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## PUT 保存求职偏好
PUT /profile/me/preferences
仅 STUDENT;upsert,完全替换传入字段
> Body 请求参数
```json
{
"expectedSalaryMin": 0,
"expectedSalaryMax": 0,
"preferredCities": [
"string"
],
"employmentTypes": [
"string"
],
"preferredIndustries": [
"string"
],
"preferredJobTypes": [
"string"
],
"remoteAllowed": true,
"salaryRangeValid": true
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[StudentPreferenceRequest](#schemastudentpreferencerequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
# Offer
## GET Offer 列表
GET /offers
候选人查看收到的、企业查看发出的 Offer;支持 status、applicationId 筛选与分页
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|status|query|string| 否 |none|
|applicationId|query|integer(int64)| 否 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 创建 Offer
POST /offers
仅企业账号;投递存在、岗位属于本企业、投递状态可发、无有效 Offer;默认 DRAFT
> Body 请求参数
```json
{
"applicationId": 0,
"title": "string",
"salaryMin": 0,
"salaryMax": 0,
"salaryCurrency": "string",
"salaryPeriod": "string",
"workCity": "string",
"employmentType": "string",
"probationMonths": 0,
"benefits": "string",
"description": "string",
"expireAt": "2019-08-24T14:15:22Z",
"onboardingDate": "2019-08-24",
"baseSalary": 0,
"housingAllowance": 0,
"annualBonusMonths": 0,
"otherAllowances": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[OfferCreateRequest](#schemaoffercreaterequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET Offer 比较
GET /offers/compare
仅候选人本人;比较 2-5 个非 DRAFT 的 Offer
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|ids|query|string| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)|
## GET Offer 统计
GET /offers/statistics
仅企业;统计本企业 Offer 状态分布、接受率、平均响应时间
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|months|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET Offer 详情
GET /offers/{id}
仅目标候选人、所属企业可访问;其他账号返回无权限错误
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## PUT 修改 Offer
PUT /offers/{id}
仅所属企业、仅 DRAFT 状态可修改;其余状态返回业务错误
> Body 请求参数
```json
{
"title": "string",
"salaryMin": 0,
"salaryMax": 0,
"salaryCurrency": "string",
"salaryPeriod": "string",
"workCity": "string",
"employmentType": "string",
"probationMonths": 0,
"benefits": "string",
"description": "string",
"expireAt": "2019-08-24T14:15:22Z",
"onboardingDate": "2019-08-24",
"baseSalary": 0,
"housingAllowance": 0,
"annualBonusMonths": 0,
"otherAllowances": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[OfferUpdateRequest](#schemaofferupdaterequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 还价列表
GET /offers/{id}/counter-offers
候选人查看本人 Offer 的还价、企业查看本企业 Offer 的还价
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)|
## POST 发起还价
POST /offers/{id}/counter-offers
仅候选人本人;仅 SENT/NEGOTIATING 可发起;SENT 时自动进入 NEGOTIATING
> Body 请求参数
```json
{
"proposedSalaryMin": 0,
"proposedSalaryMax": 0,
"proposedOnboardingDate": "2019-08-24",
"reason": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[CounterOfferCreateRequest](#schemacounteroffercreaterequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## PATCH 接受还价
PATCH /offers/{id}/counter-offers/{coId}/accept
仅所属企业;接受后更新 Offer 薪资/入职日期并变为 ACCEPTED
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|coId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## PATCH 拒绝还价
PATCH /offers/{id}/counter-offers/{coId}/reject
仅所属企业;拒绝后 Offer 保持 NEGOTIATING
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|coId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 手动提醒
POST /offers/{id}/remind
仅所属企业;仅 SENT/NEGOTIATING 可提醒;相同提醒不重复创建
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## PATCH Offer 状态变更
PATCH /offers/{id}/status
DRAFT→SENT 企业;SENT/NEGOTIATING→ACCEPTED/REJECTED/NEGOTIATING 候选人;重复提交幂等
> Body 请求参数
```json
{
"status": "string",
"reason": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[OfferStatusRequest](#schemaofferstatusrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET Offer 状态时间线
GET /offers/{id}/timeline
完整状态变更历史,含操作者、原因与请求 ID
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)|
# 岗位评价
## GET 岗位对比
GET /jobs/compare
公开访问;ids 为 2-3 个公开岗位;返回公开岗位字段与公开评分
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|ids|query|string| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)|
## GET 查询岗位评价列表
GET /jobs/{jobId}/reviews
公开访问;仅返回 PUBLISHED 评价,分页;每条含八维评分
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 创建岗位评价
POST /jobs/{jobId}/reviews
仅 STUDENT;同一学生对同一岗位只能评价一次
> Body 请求参数
```json
{
"rating": 1,
"content": "string",
"tags": [
"string"
],
"dimensionScores": {
"property1": 0,
"property2": 0
}
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[JobReviewCreateRequest](#schemajobreviewcreaterequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 评分汇总
GET /jobs/{jobId}/reviews/summary
公开访问;统计 PUBLISHED 评价的平均分、分布和热门标签
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 岗位评价详情
GET /jobs/{jobId}/reviews/{reviewId}
公开访问;返回单条 PUBLISHED 评价与八维评分
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|reviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## PUT 修改评价
PUT /jobs/{jobId}/reviews/{reviewId}
仅评价本人可以修改
> Body 请求参数
```json
{
"rating": 1,
"content": "string",
"tags": [
"string"
],
"status": "string",
"dimensionScores": {
"property1": 0,
"property2": 0
}
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|reviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[JobReviewUpdateRequest](#schemajobreviewupdaterequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## DELETE 删除评价
DELETE /jobs/{jobId}/reviews/{reviewId}
仅评价本人可以删除
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|reviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
# 候选人反馈
## GET 查询候选人反馈
GET /applications/{applicationId}/feedback
该投递的企业或学生可查看
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|applicationId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"id":1,"applicationId":31,"rating":5,"content":"沟通良好","tags":["string"],"createdAt":"2026-08-25T10:00:00","updatedAt":"2026-08-25T10:00:00"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateFeedbackResponse](#schemaapiresponsecandidatefeedbackresponse)|
## PUT 修改候选人反馈
PUT /applications/{applicationId}/feedback
仅岗位所属企业
> Body 请求参数
```json
{
"rating": 1,
"content": "string",
"tags": [
"string"
]
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|applicationId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[CandidateFeedbackRequest](#schemacandidatefeedbackrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"id":1,"applicationId":31,"rating":5,"content":"沟通良好","tags":["string"],"createdAt":"2026-08-25T10:00:00","updatedAt":"2026-08-25T10:00:00"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateFeedbackResponse](#schemaapiresponsecandidatefeedbackresponse)|
## POST 创建候选人反馈
POST /applications/{applicationId}/feedback
仅岗位所属企业;同一投递只能反馈一次
> Body 请求参数
```json
{
"rating": 1,
"content": "string",
"tags": [
"string"
]
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|applicationId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[CandidateFeedbackRequest](#schemacandidatefeedbackrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"id":1,"applicationId":31,"rating":5,"content":"沟通良好","tags":["string"],"createdAt":"2026-08-25T10:00:00","updatedAt":"2026-08-25T10:00:00"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateFeedbackResponse](#schemaapiresponsecandidatefeedbackresponse)|
## DELETE 删除候选人反馈
DELETE /applications/{applicationId}/feedback
仅岗位所属企业
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|applicationId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
# 通知
## GET 通知列表
GET /notifications
当前用户的通知,分页,按时间倒序
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 全部已读
POST /notifications/read-all
标记当前用户全部通知已读(幂等)
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 未读数
GET /notifications/unread-count
当前用户未读通知数
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 标记已读
POST /notifications/{id}/read
标记单条通知已读(幂等)
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
# 岗位收藏
## GET 我的收藏列表
GET /jobs/favorites
仅 STUDENT;分页,按收藏时间倒序
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 收藏岗位
POST /jobs/{jobId}/favorite
仅 STUDENT;仅 PUBLISHED;幂等
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## DELETE 取消收藏
DELETE /jobs/{jobId}/favorite
仅 STUDENT;幂等,未收藏也返回 200
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
# 消息
## GET 会话列表
GET /conversations
当前用户参与的所有会话
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)|
## POST 创建/获取会话
POST /conversations
创建或返回与另一用户的 DIRECT 会话
> Body 请求参数
```json
{
"participantUserId": 0
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[CreateConversationRequest](#schemacreateconversationrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 发送消息
POST /conversations/messages
在会话中发送消息,仅成员可发送
> Body 请求参数
```json
{
"conversationId": 0,
"content": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[SendMessageRequest](#schemasendmessagerequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 会话详情
GET /conversations/{id}
查看会话信息和未读数
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 消息列表
GET /conversations/{id}/messages
分页查询会话消息,倒序;仅成员可查看
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"items":[{"id":0,"conversationId":0,"senderUserId":0,"senderScope":"string","content":"string","status":"SENT","recalledAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","isRead":true}],"total":0,"page":0,"size":0,"totalPages":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMessagePageResponse](#schemaapiresponsemessagepageresponse)|
## POST 标记已读
POST /conversations/{id}/read
将当前会话所有消息标记为已读
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 撤回消息
POST /conversations/{conversationId}/messages/{messageId}/recall
仅原发送者可在发送后两分钟内撤回消息;重复撤回幂等返回当前状态
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|conversationId|path|integer(int64)| 是 |none|
|messageId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"id":0,"conversationId":0,"senderUserId":0,"senderScope":"string","content":"string","status":"SENT","recalledAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","isRead":true},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMessageResponse](#schemaapiresponsemessageresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非会话成员或非原发送者|None|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|会话或消息不存在|None|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|撤回窗口已过期或并发冲突|None|
# 岗位匹配
## GET 岗位匹配诊断
GET /jobs/{jobId}/match
仅 STUDENT;返回匹配分、硬性条件、缺口和说明
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
# student-review-weight-controller
## GET getPersonalizedScore
GET /jobs/{jobId}/personalized-review-score
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"jobId":0,"score":0,"status":"string","source":"string","templateCode":"string","configuredWeights":{"property1":0,"property2":0},"effectiveWeights":{"property1":0,"property2":0},"dimensionScores":{"property1":0,"property2":0},"coveredWeight":0,"missingDimensions":["string"]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePersonalizedScoreResponse](#schemaapiresponsepersonalizedscoreresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)|
## GET getMyWeights
GET /profile/me/review-weights
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"source":"string","templateCode":"string","configuredWeights":{"property1":0,"property2":0},"updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseReviewWeightResponse](#schemaapiresponsereviewweightresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)|
## PUT saveWeights
PUT /profile/me/review-weights
> Body 请求参数
```json
{
"templateCode": "string",
"weights": {
"property1": 0,
"property2": 0
}
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[SaveWeightRequest](#schemasaveweightrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"source":"string","templateCode":"string","configuredWeights":{"property1":0,"property2":0},"updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseReviewWeightResponse](#schemaapiresponsereviewweightresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)|
## GET getTemplates
GET /review-weight-templates
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":[{"code":"string","name":"string","description":"string","weights":{"property1":0,"property2":0}}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListWeightTemplateResponse](#schemaapiresponselistweighttemplateresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
# 双向匹配阈值
## GET 查询企业匹配阈值
GET /companies/me/match-rule
未配置返回默认 60
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## PUT 更新企业匹配阈值
PUT /companies/me/match-rule
requiredCandidateScore 0-100;首次更新创建配置
> Body 请求参数
```json
{
"requiredCandidateScore": 100
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[CompanyMatchRuleRequest](#schemacompanymatchrulerequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 查询学生匹配阈值
GET /profile/me/match-rule
未配置返回默认 60
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## PUT 更新学生匹配阈值
PUT /profile/me/match-rule
requiredHrScore 0-100;首次更新创建配置
> Body 请求参数
```json
{
"requiredHrScore": 100
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[StudentMatchRuleRequest](#schemastudentmatchrulerequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
# 面试
## GET 查询投递的面试列表
GET /applications/{applicationId}/interviews
学生本人或岗位所属企业可查看
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|applicationId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)|
## POST 创建面试邀请
POST /applications/{applicationId}/interviews
企业为投递记录创建面试邀请
> Body 请求参数
```json
{
"roundNo": 0,
"title": "string",
"interviewType": "string",
"startAt": "2019-08-24T14:15:22Z",
"endAt": "2019-08-24T14:15:22Z",
"timezone": "string",
"meetingUrl": "string",
"address": "string",
"interviewerName": "string",
"notes": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|applicationId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[InterviewCreateRequest](#schemainterviewcreaterequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 我的面试列表
GET /interviews/me
查看当前用户相关的面试,支持 status/from/to 筛选和分页
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|status|query|string| 否 |none|
|from|query|string(date-time)| 否 |none|
|to|query|string(date-time)| 否 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 面试详情
GET /interviews/{interviewId}
学生本人或企业可查看面试详情
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|interviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## PUT 修改面试
PUT /interviews/{interviewId}
企业修改面试时间、地点等信息,仅 SCHEDULED/CONFIRMED 状态可修改
> Body 请求参数
```json
{
"title": "string",
"startAt": "2019-08-24T14:15:22Z",
"endAt": "2019-08-24T14:15:22Z",
"timezone": "string",
"meetingUrl": "string",
"address": "string",
"interviewerName": "string",
"notes": "string",
"timeRangeValid": true
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|interviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[InterviewUpdateRequest](#schemainterviewupdaterequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 取消面试
POST /interviews/{interviewId}/cancel
企业取消已安排的面试
> Body 请求参数
```json
{
"reason": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|interviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[InterviewCancelRequest](#schemainterviewcancelrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 完成面试
POST /interviews/{interviewId}/complete
企业在面试时间结束后将面试标记为完成
> Body 请求参数
```json
{
"property1": "string",
"property2": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|interviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|object| 否 |none|
|» **additionalProperties**|body|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 响应面试邀请
POST /interviews/{interviewId}/respond
学生接受、拒绝或申请改期
> Body 请求参数
```json
{
"action": "string",
"reason": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|interviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[InterviewRespondRequest](#schemainterviewrespondrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 面试状态时间线
GET /interviews/{interviewId}/timeline
查看面试状态变更历史
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|interviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)|
# 双向匹配
## PUT 提交求职者岗位意愿分
PUT /applications/{id}/candidate-interest-score
仅投递本人(STUDENT);0-100;MATCHED/CLOSED 后不可修改
> Body 请求参数
```json
{
"score": 100
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[ScoreRequest](#schemascorerequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## PUT 提交企业 HR 适配分
PUT /applications/{id}/hr-suitability-score
仅岗位所属企业;0-100;MATCHED/CLOSED 后不可修改
> Body 请求参数
```json
{
"score": 100
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[ScoreRequest](#schemascorerequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 查询投递匹配状态
GET /applications/{id}/match
仅投递求职者或岗位所属企业;不暴露内部路径/事件 ID
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
# 企业认证
## GET 待审核认证列表
GET /admin/companies/verifications
管理员查看认证申请列表,支持 status/from/to 筛选和分页
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|status|query|string| 否 |none|
|from|query|string(date-time)| 否 |none|
|to|query|string(date-time)| 否 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 认证审核历史
GET /admin/companies/verifications/history
管理员查看某个认证申请的审核历史
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|verificationId|query|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":[{"property1":null,"property2":null}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListMapStringObject](#schemaapiresponselistmapstringobject)|
## GET 认证详情
GET /admin/companies/verifications/{id}
管理员查看认证申请详情
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 审核决定
POST /admin/companies/verifications/{id}/decision
管理员通过或拒绝认证申请,拒绝时必须填写原因
> Body 请求参数
```json
{
"decision": "string",
"reason": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[VerificationDecisionRequest](#schemaverificationdecisionrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 查询企业认证状态
GET /companies/me/verification
企业查询自己的认证状态和历史
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 提交企业认证
POST /companies/me/verification
企业提交认证材料(营业执照等),只能提交自己的认证
> Body 请求参数
```json
{
"materialsJson": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[VerificationSubmitRequest](#schemaverificationsubmitrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
# 双向匹配沟通
## POST 创建/获取匹配会话
POST /applications/{id}/conversation
仅 MATCHED 双方可调用;重复调用返回同一会话
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
# 评价审核
## GET 待审评价列表
GET /admin/reviews/pending
仅 ADMIN;分页 + jobId/riskLevel/createdFrom/createdTo 筛选;不返回明文 IP/UA
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|query|integer(int64)| 否 |none|
|riskLevel|query|string| 否 |none|
|createdFrom|query|string(date-time)| 否 |none|
|createdTo|query|string(date-time)| 否 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 评价审核决策
POST /admin/reviews/{reviewId}/decision
仅 ADMIN;仅 PENDING 可审,重复提交 409;决策写入历史与 audit_logs
> Body 请求参数
```json
{
"decision": "string",
"reason": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|reviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[ReviewDecisionRequest](#schemareviewdecisionrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## GET 审核历史
GET /admin/reviews/history
仅 ADMIN;分页返回审核结果、审核人、时间与原因
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 企业回复审核决策
POST /admin/reviews/replies/{replyId}/decision
仅 ADMIN;仅 PENDING 可审,重复提交 409
> Body 请求参数
```json
{ "decision": "APPROVED", "reason": "内容合规,同意公开" }
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|replyId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[ReviewDecisionRequest](#schemareviewdecisionrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"id":0,"content":"string","status":"string","version":0,"updatedAt":"2019-08-24T14:15:22Z","rejectionReason":"string"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyReviewReplyResponse](#schemaapiresponsecompanyreviewreplyresponse)|
## GET 待审企业回复列表
GET /admin/reviews/replies/pending
仅 ADMIN;分页 + 企业/岗位/回复状态/创建时间范围筛选;moderationStatus 缺省为 PENDING
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|companyId|query|integer(int64)| 否 |none|
|jobId|query|integer(int64)| 否 |none|
|moderationStatus|query|string| 否 |none|
|createdFrom|query|string(date-time)| 否 |none|
|createdTo|query|string(date-time)| 否 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"items":[{"id":1,"reviewId":100,"companyUserId":5,"content":"感谢您的反馈,我们会持续改进","moderationStatus":"PENDING","moderationReason":"内容合规","createdAt":"2026-09-01T10:00:00","updatedAt":"2026-09-01T10:00:00","moderationUpdatedAt":"2026-09-01T10:00:00","jobId":50,"jobTitle":"Java 后端工程师","companyId":2,"companyName":"本源科技","reviewRating":3,"reviewContent":"整体体验不错","studentUserId":2}],"total":0,"page":0,"size":0,"totalPages":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageResponseAdminCompanyReviewReplyResponse](#schemaapiresponsepageresponseadmincompanyreviewreplyresponse)|
# 求职者评分卡
## GET 查询百分位
GET /profile/me/candidate-percentile
仅 STUDENT;返回自己在候选人中的评分百分位
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"candidateId":0,"status":"string","scoreType":"string","score":0,"percentile":0,"cohortSize":0,"sampleCount":0,"minimumSampleCount":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidatePercentileResponse](#schemaapiresponsecandidatepercentileresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)|
## GET 查询求职者评分卡
GET /profile/me/candidate-score-card
仅 STUDENT;返回自己的评价聚合卡
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"candidateId":0,"status":"string","overallScore":0,"sampleCount":0,"feedbackSummary":{"totalCount":0,"averageRating":0,"ratingDistribution":{"property1":0,"property2":0},"tags":[{"name":"string","count":0}]},"matchSignals":{"candidateInterestScore":{"average":0,"sampleCount":0},"hrSuitabilityScore":{"average":0,"sampleCount":0}},"unsupportedDimensions":["string"],"generatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateScoreCardResponse](#schemaapiresponsecandidatescorecardresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)|
## GET 查询评分趋势
GET /profile/me/candidate-score-trend
仅 STUDENT;返回最近月份的反馈趋势
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|months|query|integer(int32)| 否 |统计月数,默认 6,范围 1-24|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"candidateId":0,"months":0,"items":[{"month":"string","feedbackCount":0,"averageRating":0,"ratingScore":0}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateScoreTrendResponse](#schemaapiresponsecandidatescoretrendresponse)|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|参数不合法|[ApiResponseCandidateScoreTrendResponse](#schemaapiresponsecandidatescoretrendresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)|
# 求职者评分体系
## GET 企业候选人评分卡
GET /company/candidates/{applicationId}/scoring
仅岗位所属企业;只读,仅返回 applicationId/overallScore/status/dimensions/generatedAt/rulesVersion,不泄露候选人敏感信息
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|applicationId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"applicationId":0,"overallScore":0,"status":"string","dimensions":[{"dimension":"string","score":0,"status":"string"}],"generatedAt":"2019-08-24T14:15:22Z","rulesVersion":"string"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyCandidateScoringResponse](#schemaapiresponsecompanycandidatescoringresponse)|
## GET 综合评分卡
GET /profile/me/candidate-scoring
仅 STUDENT;返回本人 8 维评分、综合分、权重与状态
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"candidateId":0,"status":"string","overallScore":0,"weights":{"property1":0,"property2":0},"dimensions":[{"dimension":"string","score":0,"status":"string","weight":0,"summary":"string"}],"rulesVersion":"string","generatedAt":"2019-08-24T14:15:22Z","explanationVersion":"string","coverage":{"computableDimensions":0,"totalDimensions":0,"includedDimensions":["string"],"excludedDimensions":[{"dimension":"string","status":"string","reason":"string"}]},"comparabilityNotice":"string"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateScoringOverviewResponse](#schemaapiresponsecandidatescoringoverviewresponse)|
## GET 单维度明细
GET /profile/me/candidate-scoring/dimensions/{dimension}
仅 STUDENT;返回某维度分项、归因与数据源;非法 dimension 返回 400
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|dimension|path|string| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"dimension":"string","score":0,"status":"string","subScores":[{"name":"string","score":0,"weight":0,"description":"string"}],"reasons":["string"],"dataSources":[{"source":"string","time":"2019-08-24T14:15:22Z","note":"string"}],"updatedAt":"2019-08-24T14:15:22Z","rulesVersion":"string","displayName":"string","whatItMeasures":"string","interpretation":"string","limitations":["string"],"evidenceLevel":"DIRECT_RULE","ruleContributions":[{"ruleCode":"string","outcome":"APPLIED","contribution":0,"maxContribution":0,"label":"string","observation":"string","explanation":"string"}],"improvementActions":["string"],"explanationVersion":"string","validity":{"completedAt":"2019-08-24T14:15:22Z","validUntil":"2019-08-24T14:15:22Z","expired":true},"calculatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseDimensionScoreDetailResponse](#schemaapiresponsedimensionscoredetailresponse)|
## GET 评分趋势
GET /profile/me/candidate-scoring/trend
仅 STUDENT;基于快照按月返回综合分与维度分(months 1-24)
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|months|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"candidateId":0,"months":0,"items":[{"period":"string","overallScore":0,"rulesVersion":"string","dimensions":{"property1":0,"property2":0}}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateScoringTrendResponse](#schemaapiresponsecandidatescoringtrendresponse)|
# 评分治理
## GET 全部申诉列表
GET /admin/candidate-scoring/appeals
仅 ADMIN
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|status|query|string| 否 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 审核决定
POST /admin/candidate-scoring/appeals/{appealId}/decision
仅 ADMIN;APPROVE/REJECT,REJECT 必须填 reason
> Body 请求参数
```json
{
"decision": "string",
"reason": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|appealId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[AppealDecisionRequest](#schemaappealdecisionrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"appealId":0,"candidateId":0,"dimension":"string","period":"string","status":"string","reason":"string","decision":"string","decisionReason":"string","reviewerId":0,"reviewedAt":"2019-08-24T14:15:22Z","rollbackAt":"2019-08-24T14:15:22Z","scoreAtAppeal":0,"snapshotVersionAtAppeal":0,"rulesVersion":"string","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAppealResponse](#schemaapiresponseappealresponse)|
## GET 申诉历史
GET /admin/candidate-scoring/appeals/{appealId}/history
本人(脱敏,无 actorUserId)或 ADMIN(全量);此路径的本人放行先于 ADMIN 通用规则
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|appealId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":[{"id":0,"fromStatus":"string","toStatus":"string","actorUserId":0,"actorRole":"string","reason":"string","createdAt":"2019-08-24T14:15:22Z"}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListAppealHistoryItem](#schemaapiresponselistappealhistoryitem)|
## POST 执行回滚
POST /admin/candidate-scoring/appeals/{appealId}/rollback
仅 ADMIN;记录前态+确定性重算+新版本;年 3 次上限
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|appealId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"appealId":0,"candidateId":0,"dimension":"string","period":"string","status":"string","reason":"string","decision":"string","decisionReason":"string","reviewerId":0,"reviewedAt":"2019-08-24T14:15:22Z","rollbackAt":"2019-08-24T14:15:22Z","scoreAtAppeal":0,"snapshotVersionAtAppeal":0,"rulesVersion":"string","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAppealResponse](#schemaapiresponseappealresponse)|
## GET 快照变更审计
GET /admin/candidate-scoring/snapshots/{candidateUserId}/{dimension}/{period}/history
仅 ADMIN;按学生+维度+周期查看回滚前后完整变化
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|candidateUserId|path|integer(int64)| 是 |none|
|dimension|path|string| 是 |none|
|period|path|string| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":[{"id":0,"appealId":0,"action":"string","dimension":"string","period":"string","beforeScore":0,"afterScore":0,"beforeVersion":0,"afterVersion":0,"beforeRulesVersion":"string","afterRulesVersion":"string","createdAt":"2019-08-24T14:15:22Z"}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListSnapshotHistoryItem](#schemaapiresponselistsnapshothistoryitem)|
## GET 我的申诉列表
GET /profile/me/candidate-scoring/appeals
仅 STUDENT 本人
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|status|query|string| 否 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"property1":null,"property2":null},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseMapStringObject](#schemaapiresponsemapstringobject)|
## POST 提交评分申诉
POST /profile/me/candidate-scoring/appeals
仅 STUDENT 本人;同一学生+维度+周期 PENDING/APPROVED 唯一
> Body 请求参数
```json
{
"dimension": "string",
"period": "string",
"reason": "string",
"idempotencyKey": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[CreateAppealRequest](#schemacreateappealrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"appealId":0,"candidateId":0,"dimension":"string","period":"string","status":"string","reason":"string","decision":"string","decisionReason":"string","reviewerId":0,"reviewedAt":"2019-08-24T14:15:22Z","rollbackAt":"2019-08-24T14:15:22Z","scoreAtAppeal":0,"snapshotVersionAtAppeal":0,"rulesVersion":"string","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAppealResponse](#schemaapiresponseappealresponse)|
## GET 申诉详情
GET /profile/me/candidate-scoring/appeals/{appealId}
本人或 ADMIN
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|appealId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"appealId":0,"candidateId":0,"dimension":"string","period":"string","status":"string","reason":"string","decision":"string","decisionReason":"string","reviewerId":0,"reviewedAt":"2019-08-24T14:15:22Z","rollbackAt":"2019-08-24T14:15:22Z","scoreAtAppeal":0,"snapshotVersionAtAppeal":0,"rulesVersion":"string","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAppealResponse](#schemaapiresponseappealresponse)|
## POST 撤销申诉
POST /profile/me/candidate-scoring/appeals/{appealId}/cancel
仅本人;仅 PENDING 可撤销
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|appealId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"appealId":0,"candidateId":0,"dimension":"string","period":"string","status":"string","reason":"string","decision":"string","decisionReason":"string","reviewerId":0,"reviewedAt":"2019-08-24T14:15:22Z","rollbackAt":"2019-08-24T14:15:22Z","scoreAtAppeal":0,"snapshotVersionAtAppeal":0,"rulesVersion":"string","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAppealResponse](#schemaapiresponseappealresponse)|
# 评分运营看板
## GET 全局运营概览
GET /admin/scoring/dashboard/overview
仅 ADMIN
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"totalCompanies":0,"totalJobs":0,"totalCandidates":0,"avgCandidateScore":0,"topCompanies":[{"companyId":0,"companyName":"string","avgCandidateScore":0,"jobCount":0}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAdminDashboardOverviewResponse](#schemaapiresponseadmindashboardoverviewresponse)|
## GET 候选人评分排名
GET /company/scoring/dashboard/candidate-rankings
仅 COMPANY;按学生去重;overallScore DESC, applicationId DESC
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"items":[{"applicationId":0,"jobId":0,"candidateName":"string","candidateSchool":"string","overallScore":0,"percentile":0,"sampleCount":0}],"total":0,"page":0,"size":0,"totalPages":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateRankingListResponse](#schemaapiresponsecandidaterankinglistresponse)|
## GET 单候选人评分排名明细
GET /company/scoring/dashboard/candidate-rankings/{applicationId}
仅 COMPANY;跨企业 403/8004
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|applicationId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"applicationId":0,"jobId":0,"candidateName":"string","candidateSchool":"string","overallScore":0,"percentile":0,"cohortSize":0,"dimensionScores":[{"dimension":"string","score":0,"status":"string"}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCandidateRankingDetailResponse](#schemaapiresponsecandidaterankingdetailresponse)|
## GET 岗位评分排名
GET /company/scoring/dashboard/job-rankings
仅 COMPANY;avgRating DESC, jobId DESC;审核通过评价
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"items":[{"jobId":0,"title":"string","city":"string","employmentType":"string","avgRating":0,"reviewCount":0,"rank":0,"cohortSize":0,"dimensionAverages":{"property1":0,"property2":0}}],"total":0,"page":0,"size":0,"totalPages":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseJobRankingListResponse](#schemaapiresponsejobrankinglistresponse)|
## GET 单岗位评分排名
GET /company/scoring/dashboard/job-rankings/{jobId}
仅 COMPANY;跨企业 403/8004
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"jobId":0,"title":"string","city":"string","employmentType":"string","avgRating":0,"reviewCount":0,"rank":0,"cohortSize":0,"dimensionAverages":{"property1":0,"property2":0}},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseJobRankingItem](#schemaapiresponsejobrankingitem)|
## GET 企业评分运营概览
GET /company/scoring/dashboard/overview
仅 COMPANY;只返回本企业数据
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"companyId":0,"totalJobs":0,"publishedJobs":0,"avgJobScore":0,"totalCandidates":0,"avgCandidateScore":0,"scoreDistribution":{"property1":0,"property2":0},"updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseDashboardOverviewResponse](#schemaapiresponsedashboardoverviewresponse)|
## GET 企业评分趋势
GET /company/scoring/dashboard/trend
仅 COMPANY;months 1–24
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|months|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"companyId":0,"months":0,"items":[{"period":"string","overallScore":0,"rulesVersion":"string","dimensions":{"property1":0,"property2":0}}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseScoreTrendResponse](#schemaapiresponsescoretrendresponse)|
## GET 企业回复率统计
GET /company/review-reply/stats
仅企业;返回本公司本月回复率、行业平均回复率、本月待回复条数
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
# 账号
## GET 查询注销状态
GET /account/deletion-request
查询注销状态
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 200,
"message": "success",
"requestId": "string",
"timestamp": "string",
"data": {
"id": 0,
"userId": 0,
"status": "string",
"applyTime": "string",
"expireTime": "string"
}
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
### 返回数据结构
状态码 **200**
|名称|类型|必选|约束|中文名|说明|
|---|---|---|---|---|---|
|» code|integer|true|none||none|
|» message|string|true|none||none|
|» requestId|string|true|none||none|
|» timestamp|string(date‑time)|true|none||none|
|» data|object¦null|true|none||none|
|»» id|integer|false|none||none|
|»» userId|integer|false|none||none|
|»» status|string|false|none||PENDING待注销 / CANCELLED已撤销 / COMPLETED已注销|
|»» applyTime|string(date‑time)|false|none||none|
|»» expireTime|string(date‑time)|false|none||none|
## POST 注销账号
POST /account/deletion-request
注销账号
> Body 请求参数
```json
{
"reason": "ad exercitation ex in in"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|object| 是 |none|
|» reason|body|string| 是 |none|
> 返回示例
> 200 Response
```json
{"code":200,"message":"ok","data":{"reason":"ad exercitation ex in in","completedAt":"2026-08-26T17:01:31.7861713","requestedAt":"2026-08-26T17:01:31.7861713","status":"COMPLETED"},"requestId":"dade5739b05d4fd2","timestamp":"2026-08-26T09:01:31.946347100Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
### 返回数据结构
状态码 **200**
|名称|类型|必选|约束|中文名|说明|
|---|---|---|---|---|---|
|» code|integer|true|none||none|
|» message|string|true|none||none|
|» requestId|string|true|none||none|
|» timestamp|string(date-time)|true|none||none|
|» data|object|true|none||none|
|»» id|integer|false|none||none|
|»» userId|integer|false|none||none|
|»» status|string|false|none||COMPLETED‑立即注销完成|
|»» applyTime|string(date-time)|false|none||none|
|»» reason|string¦null|false|none||用户填写的注销原因,非必填|
# 同岗位竞争力排名
## GET 同岗位竞争力排名
GET /jobs/{jobId}/competition-ranking
仅 STUDENT 且已投递该(PUBLISHED)岗位的学生可查看。返回本人排名/综合分/百分位/维度/缺口及匿名 Top 5。COMPANY/ADMIN 或未投递学生返回 403;岗位不存在或非 PUBLISHED 返回 404。身份仅取自 JWT,不接收 userId/studentUserId/candidateId 参数。topCandidates 每项仅含 rank 与 overallScore,不含任何身份字段(studentUserId/candidateId/name/school/phone/email/resumeUrl/applicationId)。cohort 排除 WITHDRAWN/REJECTED 投递。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|jobId 为空或 <=0|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色或学生未投递该岗位|[ApiResponse](#schemaapiresponse)|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|岗位不存在或岗位状态非 PUBLISHED|[ApiResponse](#schemaapiresponse)|
# 求职进度
## GET 统一求职进度聚合
GET /profile/me/career-progress
只读学生端接口:汇总当前学生的投递分页、岗位摘要、下一场面试、最近已提交结构化面试评分、可展示 Offer、同岗位竞争力排名,以及待办/通知计数(仅计数,不含通知标题/正文/详情)。仅 STUDENT 可访问,身份仅从 JWT/SecurityContext 获取,不接受 userId/studentUserId/candidateId 参数;COMPANY/ADMIN 返回 403/2002,未登录返回 401,参数非法返回 400/1001。通知详情仍由既有 /notifications 提供。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|status|query|string| 否 |none|
|Authorization|header|string| 否 |none|
#### 枚举值
|属性|值|
|---|---|
|status|SUBMITTED|
|status|VIEWED|
|status|INTERVIEW|
|status|HIRED|
|status|REJECTED|
|status|WITHDRAWN|
> 返回示例
> 200 Response
```
{"code":200,"message":"ok","data":{"todo":{"pendingInterviewResponseCount":0,"upcomingConfirmedInterviewCount":0,"pendingOfferResponseCount":0,"unreadNotificationCount":0,"unreadReportDecisionCount":0},"applications":{"items":[{"applicationId":0,"applicationStatus":"string","appliedAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","job":{},"nextInterview":{},"latestSubmittedInterviewScore":{},"offer":{},"competition":{}}],"total":0,"page":0,"size":0,"totalPages":0},"generatedAt":"2019-08-24T14:15:22Z"},"requestId":"req-1","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCareerProgressResponse](#schemaapiresponsecareerprogressresponse)|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|page/size/status 参数非法|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)|
# account-deletion-controller
## GET getStatus
GET /profile/me/deletion
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":200,"message":"ok","data":{"userId":2,"status":"PENDING","requestedAt":"2019-08-24T14:15:22Z","effectiveAt":"2019-08-24T14:15:22Z","cancelledAt":"2019-08-24T14:15:22Z","completedAt":"2019-08-24T14:15:22Z","version":0},"requestId":"req-1","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseAccountDeletionResponse](#schemaapiresponseaccountdeletionresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|error|[ApiResponse](#schemaapiresponse)|
## POST initiate
POST /profile/me/deletion
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":200,"message":"ok","data":{"userId":2,"status":"PENDING","requestedAt":"2019-08-24T14:15:22Z","effectiveAt":"2019-08-24T14:15:22Z","cancelledAt":"2019-08-24T14:15:22Z","completedAt":"2019-08-24T14:15:22Z","version":0},"requestId":"req-1","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseAccountDeletionResponse](#schemaapiresponseaccountdeletionresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|error|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|error|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|error|[ApiResponse](#schemaapiresponse)|
## POST cancelAccountDeletion
POST /profile/me/deletion/cancel
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":200,"message":"ok","data":{"userId":2,"status":"PENDING","requestedAt":"2019-08-24T14:15:22Z","effectiveAt":"2019-08-24T14:15:22Z","cancelledAt":"2019-08-24T14:15:22Z","completedAt":"2019-08-24T14:15:22Z","version":0},"requestId":"req-1","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseAccountDeletionResponse](#schemaapiresponseaccountdeletionresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|error|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|error|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|error|[ApiResponse](#schemaapiresponse)|
# personal-data-export-controller
## GET 查询个人数据导出任务列表
GET /profile/me/data-export-tasks
仅本人;按创建时间倒序分页;status 可选:PENDING/PROCESSING/COMPLETED/FAILED/EXPIRED/CANCELLED
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|page|query|integer| 否 |none|
|size|query|integer| 否 |none|
|status|query|string| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"items":[{"taskId":0,"status":"string","format":"string","requestedAt":"2019-08-24T14:15:22Z","startedAt":"2019-08-24T14:15:22Z","completedAt":"2019-08-24T14:15:22Z","expiresAt":"2019-08-24T14:15:22Z","sizeBytes":0,"downloadAvailable":true,"errorCode":"string"}],"totalElements":0,"page":0,"size":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponsePageResponseDataExportTaskResponse](#schemaapiresponsepageresponsedataexporttaskresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|error|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|error|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|error|[ApiResponse](#schemaapiresponse)|
## POST 创建个人数据导出任务
POST /profile/me/data-export-tasks
异步生成 ZIP;同 idempotencyKey 重放返回原任务;注销 PENDING/COMPLETED 禁止创建
> Body 请求参数
```json
{
"format": "string",
"idempotencyKey": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[CreateDataExportRequest](#schemacreatedataexportrequest)| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"taskId":0,"status":"string","format":"string","requestedAt":"2019-08-24T14:15:22Z","startedAt":"2019-08-24T14:15:22Z","completedAt":"2019-08-24T14:15:22Z","expiresAt":"2019-08-24T14:15:22Z","sizeBytes":0,"downloadAvailable":true,"errorCode":"string"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseDataExportTaskResponse](#schemaapiresponsedataexporttaskresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|error|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|error|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|error|[ApiResponse](#schemaapiresponse)|
## GET 查询个人数据导出任务详情
GET /profile/me/data-export-tasks/{taskId}
仅本人;不暴露 storageKey 与内部字段
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|taskId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"taskId":0,"status":"string","format":"string","requestedAt":"2019-08-24T14:15:22Z","startedAt":"2019-08-24T14:15:22Z","completedAt":"2019-08-24T14:15:22Z","expiresAt":"2019-08-24T14:15:22Z","sizeBytes":0,"downloadAvailable":true,"errorCode":"string"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseDataExportTaskResponse](#schemaapiresponsedataexporttaskresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|error|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|error|[ApiResponse](#schemaapiresponse)|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|error|[ApiResponse](#schemaapiresponse)|
## GET 下载个人数据导出 ZIP
GET /profile/me/data-export-tasks/{taskId}/download
仅本人且 COMPLETED 未过期;attachment;需 JWT
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|taskId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
> 401 Response
```
{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|string|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|error|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|error|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|error|[ApiResponse](#schemaapiresponse)|
# 结构化面试评分
## PUT 保存评分草稿
PUT /interviews/{interviewId}/score
企业 owner 为已完成的面试保存/更新草稿;草稿阶段五个维度可为空;overallScore 由服务端计算;SUBMITTED 后再次 PUT 返回 409/9503
> Body 请求参数
```json
{
"technicalScore": 1,
"communicationScore": 1,
"problemSolvingScore": 1,
"roleFitScore": 1,
"professionalismScore": 1,
"recommendation": "STRONG_HIRE",
"comment": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|interviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[InterviewScoreSaveRequest](#schemainterviewscoresaverequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"id":0,"interviewId":0,"applicationId":0,"status":"DRAFT","technicalScore":0,"communicationScore":0,"problemSolvingScore":0,"roleFitScore":0,"professionalismScore":0,"overallScore":0,"recommendation":"STRONG_HIRE","comment":"string","submittedAt":"2019-08-24T14:15:22Z","version":0,"createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseInterviewScoreResponse](#schemaapiresponseinterviewscoreresponse)|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|非法维度或推荐值|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非企业/跨企业/非岗位 owner|[ApiResponse](#schemaapiresponse)|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|面试不存在 8401|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|未完成 9502 / 已提交 9503 / 并发冲突 9501|[ApiResponse](#schemaapiresponse)|
## GET 查看评分
GET /interviews/{interviewId}/score
企业 owner 可看 DRAFT/SUBMITTED;目标学生仅可看 SUBMITTED;无评分返回 404/9504
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|interviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"id":0,"interviewId":0,"applicationId":0,"status":"DRAFT","technicalScore":0,"communicationScore":0,"problemSolvingScore":0,"roleFitScore":0,"professionalismScore":0,"overallScore":0,"recommendation":"STRONG_HIRE","comment":"string","submittedAt":"2019-08-24T14:15:22Z","version":0,"createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseInterviewScoreResponse](#schemaapiresponseinterviewscoreresponse)|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|请求体校验失败|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非目标学生 / 跨企业 / 非岗位 owner / ADMIN|[ApiResponse](#schemaapiresponse)|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|无评分 9504 / 面试不存在 8401|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|未完成 9502|[ApiResponse](#schemaapiresponse)|
## POST 提交评分
POST /interviews/{interviewId}/score/submit
将 DRAFT 提交为 SUBMITTED,提交后不可逆;并发冲突 409;重复提交幂等返回原评分
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|interviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"id":0,"interviewId":0,"applicationId":0,"status":"DRAFT","technicalScore":0,"communicationScore":0,"problemSolvingScore":0,"roleFitScore":0,"professionalismScore":0,"overallScore":0,"recommendation":"STRONG_HIRE","comment":"string","submittedAt":"2019-08-24T14:15:22Z","version":0,"createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseInterviewScoreResponse](#schemaapiresponseinterviewscoreresponse)|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|缺维度 1001|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非企业/跨企业/非岗位 owner|[ApiResponse](#schemaapiresponse)|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|面试不存在 8401|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|未完成 9502 / 并发冲突 9501|[ApiResponse](#schemaapiresponse)|
## GET 评分历史
GET /interviews/{interviewId}/score/history
企业 owner 可查看全部历史;目标学生仅在 SUBMITTED 后可见;无历史返回 200 空数组;不返回内部用户标识
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|interviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":[{"id":0,"scoreId":0,"interviewId":0,"fromStatus":"DRAFT","toStatus":"DRAFT","actorRole":"COMPANY","snapshot":{"property1":null,"property2":null},"createdAt":"2019-08-24T14:15:22Z"}],"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|success|[ApiResponseListInterviewScoreHistoryItem](#schemaapiresponselistinterviewscorehistoryitem)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非目标学生 / 跨企业 / 非岗位 owner / ADMIN|[ApiResponse](#schemaapiresponse)|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|面试不存在 8401|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|未完成 9502|[ApiResponse](#schemaapiresponse)|
# 举报与屏蔽
## POST 提交举报
POST /reports
targetType=USER 必填 targetUserId;MESSAGE 必填 messageId;reportedUserId 由服务端推导。同 reporter+idempotencyKey+相同请求体返回原举报 200;不同请求体 409/9606;同目标同分类已有 PENDING 409/9603。限流:每用户每小时 10 次,超限 429/9609。
> Body 请求参数
```json
{
"targetType": "USER",
"targetUserId": 0,
"messageId": 0,
"category": "string",
"reason": "string",
"evidenceUrls": [
"string"
],
"idempotencyKey": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[CreateReportRequest](#schemacreatereportrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"id":0,"targetType":"USER","targetUserId":0,"messageId":0,"reportedUserId":0,"category":"string","reason":"string","evidenceUrls":["string"],"status":"PENDING","decision":"RESOLVED","decisionNote":"string","decidedAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","messagePreview":"string","reportedUser":{"userId":0,"nickname":"string","role":"string"},"history":[{"id":0,"fromStatus":"string","toStatus":"string","actorUserId":0,"actorRole":"string","note":"string","createdAt":"2019-08-24T14:15:22Z"}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseReportResponse](#schemaapiresponsereportresponse)|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|BAD_REQUEST(1001)/举报自己 9602/理由缺失 9607|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|无权访问消息(2002,不泄露消息是否存在)|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|重复举报 9603 / 幂等冲突 9606|[ApiResponse](#schemaapiresponse)|
|429|[Too Many Requests](https://tools.ietf.org/html/rfc6585#section-4)|频率超限 9609|[ApiResponse](#schemaapiresponse)|
## GET 我的举报列表
GET /reports/me
仅返回当前用户创建的举报;身份来自 JWT;不返回举报人内部信息/phone/email/passwordHash/resumeUrl/消息全文;支持 status/page/size。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|status|query|string| 否 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"items":[{"id":0,"targetType":"USER","targetUserId":0,"messageId":0,"reportedUserId":0,"category":"string","reason":"string","evidenceUrls":["string"],"status":"PENDING","decision":"RESOLVED","decisionNote":"string","decidedAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","messagePreview":"string","reportedUser":{"userId":0,"nickname":"string","role":"string"},"history":[{"id":null,"fromStatus":null,"toStatus":null,"actorUserId":null,"actorRole":null,"note":null,"createdAt":null}]}],"totalElements":0,"page":0,"size":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageResponseReportResponse](#schemaapiresponsepageresponsereportresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
## GET 举报详情(本人/ADMIN)
GET /reports/{id}
当前举报人本人或 ADMIN 可查看;其他 403/2002;非 ADMIN 不显示举报人内部 ID/手机号/邮箱;MESSAGE 仅返回脱敏 messagePreview。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"id":0,"targetType":"USER","targetUserId":0,"messageId":0,"reportedUserId":0,"category":"string","reason":"string","evidenceUrls":["string"],"status":"PENDING","decision":"RESOLVED","decisionNote":"string","decidedAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","messagePreview":"string","reportedUser":{"userId":0,"nickname":"string","role":"string"},"history":[{"id":0,"fromStatus":"string","toStatus":"string","actorUserId":0,"actorRole":"string","note":"string","createdAt":"2019-08-24T14:15:22Z"}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseReportResponse](#schemaapiresponsereportresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非本人非 ADMIN(2002)|[ApiResponse](#schemaapiresponse)|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|举报不存在(9601)|[ApiResponse](#schemaapiresponse)|
## PUT 屏蔽用户
PUT /blocks/{blockedUserId}
屏蔽自己 400/9608;目标不存在复用用户不存在错误码;已存在返回 200 不新增;不影响系统通知/投递/Offer/面试/评分/评价。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|blockedUserId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"id":0,"blockedUserId":0,"nickname":"string","createdAt":"2019-08-24T14:15:22Z"},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseBlockRelationResponse](#schemaapiresponseblockrelationresponse)|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|屏蔽自己 9608|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
## DELETE 解除屏蔽
DELETE /blocks/{blockedUserId}
幂等:不存在时返回 200 不报错。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|blockedUserId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK(幂等)|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
## GET 我的屏蔽列表
GET /blocks/me
仅返回当前用户主动屏蔽的用户;不返回对方手机号/邮箱/密码/简历地址;支持 page/size。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"items":[{"id":0,"blockedUserId":0,"nickname":"string","createdAt":"2019-08-24T14:15:22Z"}],"totalElements":0,"page":0,"size":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageResponseBlockRelationResponse](#schemaapiresponsepageresponseblockrelationresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
# 举报管理
## GET 举报列表(ADMIN)
GET /admin/reports
仅 ADMIN;COMPANY/STUDENT/未登录分别 403/403/401;支持 status/targetType/category/page/size;响应脱敏。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|status|query|string| 否 |none|
|targetType|query|string| 否 |none|
|category|query|string| 否 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"items":[{"id":0,"targetType":"USER","targetUserId":0,"messageId":0,"reportedUserId":0,"category":"string","reason":"string","evidenceUrls":["string"],"status":"PENDING","decision":"RESOLVED","decisionNote":"string","decidedAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","messagePreview":"string","reportedUser":{"userId":0,"nickname":"string","role":"string"},"history":[{"id":null,"fromStatus":null,"toStatus":null,"actorUserId":null,"actorRole":null,"note":null,"createdAt":null}]}],"totalElements":0,"page":0,"size":0},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageResponseReportResponse](#schemaapiresponsepageresponsereportresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|[ApiResponse](#schemaapiresponse)|
## GET 举报详情(ADMIN)
GET /admin/reports/{id}
仅 ADMIN;可见类型/分类/理由/脱敏证据 URL/MESSAGE 脱敏内容/会话最小信息/处理历史;不返回密码/JWT/手机号/邮箱/resumeUrl。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"id":0,"targetType":"USER","targetUserId":0,"messageId":0,"reportedUserId":0,"category":"string","reason":"string","evidenceUrls":["string"],"status":"PENDING","decision":"RESOLVED","decisionNote":"string","decidedAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","messagePreview":"string","reportedUser":{"userId":0,"nickname":"string","role":"string"},"history":[{"id":0,"fromStatus":"string","toStatus":"string","actorUserId":0,"actorRole":"string","note":"string","createdAt":"2019-08-24T14:15:22Z"}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseReportResponse](#schemaapiresponsereportresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|[ApiResponse](#schemaapiresponse)|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|举报不存在(9601)|[ApiResponse](#schemaapiresponse)|
## POST 举报处理决定(ADMIN)
POST /admin/reports/{id}/decision
仅 ADMIN;decision 仅 RESOLVED/REJECTED;REJECTED 必填 note;仅 PENDING 可处理,重复 409/9604,非法流转 409/9605;处理后发送一条 REPORT_DECISION 通知。
> Body 请求参数
```json
{
"decision": "RESOLVED",
"note": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[ReportDecisionRequest](#schemareportdecisionrequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":{"id":0,"targetType":"USER","targetUserId":0,"messageId":0,"reportedUserId":0,"category":"string","reason":"string","evidenceUrls":["string"],"status":"PENDING","decision":"RESOLVED","decisionNote":"string","decidedAt":"2019-08-24T14:15:22Z","createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z","messagePreview":"string","reportedUser":{"userId":0,"nickname":"string","role":"string"},"history":[{"id":0,"fromStatus":"string","toStatus":"string","actorUserId":0,"actorRole":"string","note":"string","createdAt":"2019-08-24T14:15:22Z"}]},"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseReportResponse](#schemaapiresponsereportresponse)|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|参数错误(REJECTED 缺 note)|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 ADMIN|[ApiResponse](#schemaapiresponse)|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|举报不存在(9601)|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|重复决定 9604 / 非法流转 9605|[ApiResponse](#schemaapiresponse)|
# 企业回复评价
## GET 查询回复
GET /reviews/{reviewId}/reply
公开访问;回复所属企业可见任意状态,其他用户仅见已审核通过的回复
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|reviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
## PUT 更新回复
PUT /reviews/{reviewId}/reply
仅回复所属企业;更新后需重新审核
> Body 请求参数
```json
{ "content": "感谢您的反馈,我们会持续改进。" }
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|reviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|object| 是 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
## POST 创建回复
POST /reviews/{reviewId}/reply
仅岗位所属企业;一条评价只能回复一次
> Body 请求参数
```json
{ "content": "感谢您的反馈,我们会持续改进。" }
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|reviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|object| 是 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
## DELETE 删除回复
DELETE /reviews/{reviewId}/reply
仅回复所属企业
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|reviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
# RIASEC 职业兴趣测评
## GET 测评类型列表
GET /assessments/types
返回全部 ACTIVE 测评定义。任意已登录用户可访问;未登录 401。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
## GET 题目列表
GET /assessments/{type}/questions
返回指定测评的 ACTIVE 题目,隐藏维度/reverseScored/source/版本等内部字段。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|type|path|string| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|测评类型不存在(9701)|[ApiResponse](#schemaapiresponse)|
## POST 创建答卷
POST /assessments/attempts
照六维各抽 5 题共 30 道并持久化,刷新不重抽。幂等键重放返回原答卷;同键不同定义 409/9709;已有活跃答卷 409/9708。仅 STUDENT。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT(2002)|[ApiResponse](#schemaapiresponse)|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|测评类型不存在(9701)|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|活跃答卷/幂等冲突(9708/9709)|[ApiResponse](#schemaapiresponse)|
## GET 答卷详情
GET /assessments/attempts/{attemptId}
返回本次抽中的 30 道题(固定顺序)、已保存答案、进度与当前状态。仅本人可访问;非 STUDENT 403。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|attemptId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非本人或非 STUDENT(2002)|[ApiResponse](#schemaapiresponse)|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|答卷不存在(9702)|[ApiResponse](#schemaapiresponse)|
## PATCH 保存答案
PATCH /assessments/attempts/{attemptId}/answers
单题或批量保存,重复保存 upsert;value 1-5;题目必须属于本答卷;版本冲突 409/9707;首次保存后状态置为 IN_PROGRESS。仅本人。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|attemptId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非本人或非 STUDENT(2002)|[ApiResponse](#schemaapiresponse)|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|答卷不存在(9702)|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|非法状态/并发(9703/9707)|[ApiResponse](#schemaapiresponse)|
## POST 提交答卷
POST /assessments/attempts/{attemptId}/submit
30 题全答且每维各 5 题后方可提交(否则 400/9706);提交后生成结果并写审计;重复提交返回原结果,不重复生成与审计。仅本人。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|attemptId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|未完成(9706)|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非本人或非 STUDENT(2002)|[ApiResponse](#schemaapiresponse)|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|答卷不存在(9702)|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|非法状态(9703)|[ApiResponse](#schemaapiresponse)|
## GET 查看结果
GET /assessments/attempts/{attemptId}/result
答卷 COMPLETED 后返回聚合分、类型排名、探索方向。仅本人可访问。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|attemptId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非本人或非 STUDENT(2002)|[ApiResponse](#schemaapiresponse)|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|答卷不存在(9702)|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|答卷未完成(9703)|[ApiResponse](#schemaapiresponse)|
## GET 我的测评历史
GET /assessments/me
分页返回当前学生的全部答卷与结果概要。仅 STUDENT 本人可访问。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":0,"message":"string","data":null,"requestId":"string","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT(2002)|[ApiResponse](#schemaapiresponse)|
# privacy-settings-controller
## GET getMyPrivacySettings
GET /profile/me/privacy
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{"code":200,"message":"ok","data":{"id":1,"studentUserId":2,"resumeVisibility":"APPLIED_COMPANIES","contactVisible":true,"version":0,"createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"req-1","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功;无记录时返回默认对象(PRIVATE/contactVisible=false/version=0)|[ApiResponsePrivacySettingsResponse](#schemaapiresponseprivacysettingsresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)|
## PUT updateMyPrivacySettings
PUT /profile/me/privacy
> Body 请求参数
```json
{
"resumeVisibility": "APPLIED_COMPANIES",
"contactVisible": true,
"version": 0
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[PrivacySettingsUpdateRequest](#schemaprivacysettingsupdaterequest)| 是 |none|
> 返回示例
> 200 Response
```
{"code":200,"message":"ok","data":{"id":1,"studentUserId":2,"resumeVisibility":"APPLIED_COMPANIES","contactVisible":true,"version":0,"createdAt":"2019-08-24T14:15:22Z","updatedAt":"2019-08-24T14:15:22Z"},"requestId":"req-1","timestamp":"2019-08-24T14:15:22Z"}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功;返回更新后的隐私设置对象|[ApiResponsePrivacySettingsResponse](#schemaapiresponseprivacysettingsresponse)|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|请求体校验失败(缺少必填字段或非法枚举)|[ApiResponse](#schemaapiresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|[ApiResponse](#schemaapiresponse)|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|非 STUDENT 角色|[ApiResponse](#schemaapiresponse)|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|乐观锁版本冲突(9201)|[ApiResponse](#schemaapiresponse)|
# 四维能力测评
## GET 能力测评类型列表
GET /abilities/types
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"typeCode": "string",
"displayName": "string",
"description": "string",
"questionCount": 0,
"attemptQuestionCount": 0,
"timeLimitMinutes": 0,
"resultValidDays": 0,
"status": "string"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAbilityTypeResponse](#schemaapiresponseabilitytyperesponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None|
## POST 创建能力测评答卷
POST /abilities/attempts
> Body 请求参数
```json
{
"typeCode": "string",
"idempotencyKey": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[CreateAbilityAttemptRequest](#schemacreateabilityattemptrequest)| 是 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"attemptId": 0,
"status": "string",
"answeredCount": 0,
"totalQuestions": 0,
"completionRate": 0,
"startedAt": "2019-08-24T14:15:22Z",
"expiresAt": "2019-08-24T14:15:22Z",
"remainingSeconds": 0,
"questions": [
{
"attemptQuestionId": 0,
"position": 0,
"itemType": "string",
"stem": "string",
"options": [
{
"optionId": null,
"text": null
}
],
"selectedOptionId": "string"
}
]
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAbilityAttemptResponse](#schemaapiresponseabilityattemptresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|9801|None|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|9808/9809/9810|None|
|429|[Too Many Requests](https://tools.ietf.org/html/rfc6585#section-4)|9811|None|
## GET getAbilityAttempt
GET /abilities/attempts/{attemptId}
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|attemptId|path|string| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"attemptId": 0,
"status": "string",
"answeredCount": 0,
"totalQuestions": 0,
"completionRate": 0,
"startedAt": "2019-08-24T14:15:22Z",
"expiresAt": "2019-08-24T14:15:22Z",
"remainingSeconds": 0,
"questions": [
{
"attemptQuestionId": 0,
"position": 0,
"itemType": "string",
"stem": "string",
"options": [
{
"optionId": null,
"text": null
}
],
"selectedOptionId": "string"
}
]
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAbilityAttemptResponse](#schemaapiresponseabilityattemptresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|404|None|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|409|None|
## PATCH saveAbilityAnswers
PATCH /abilities/attempts/{attemptId}/answers
> Body 请求参数
```json
{
"answers": [
{
"attemptQuestionId": 0,
"selectedOptionId": "stri"
}
]
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|attemptId|path|string| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[SaveAbilityAnswersRequest](#schemasaveabilityanswersrequest)| 是 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"attemptId": 0,
"status": "string",
"answeredCount": 0,
"totalQuestions": 0,
"completionRate": 0,
"startedAt": "2019-08-24T14:15:22Z",
"expiresAt": "2019-08-24T14:15:22Z",
"remainingSeconds": 0,
"questions": [
{
"attemptQuestionId": 0,
"position": 0,
"itemType": "string",
"stem": "string",
"options": [
{
"optionId": null,
"text": null
}
],
"selectedOptionId": "string"
}
]
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAbilityAttemptResponse](#schemaapiresponseabilityattemptresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|404|None|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|409|None|
## POST submitAbilityAttempt
POST /abilities/attempts/{attemptId}/submit
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|attemptId|path|string| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"attemptId": 0,
"typeCode": "string",
"status": "string",
"validityStatus": "string",
"validUntil": "2019-08-24T14:15:22Z",
"dimensionScores": [
{
"code": "string",
"score": 0,
"answeredCount": 0
}
],
"overallScore": 0,
"weaknesses": [
{
"code": "string",
"score": 0
}
],
"improvementAreas": [
{
"dimension": "string",
"currentScore": 0,
"summary": "string",
"actions": [
"string"
]
}
],
"radar": [
{
"code": "string",
"value": 0
}
],
"answeredCount": 0,
"completionRate": 0,
"questionFeedback": [
{
"attemptQuestionId": 0,
"position": 0,
"stem": "string",
"selectedOptionId": "string",
"awardedScore": 0,
"maxScore": 0,
"explanation": "string"
}
],
"questionSetVersion": "string",
"rulesVersion": "string",
"generatedAt": "2019-08-24T14:15:22Z",
"disclaimer": "string"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAbilityResultResponse](#schemaapiresponseabilityresultresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|404|None|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|409|None|
## GET getAbilityResult
GET /abilities/attempts/{attemptId}/result
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|attemptId|path|string| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"attemptId": 0,
"typeCode": "string",
"status": "string",
"validityStatus": "string",
"validUntil": "2019-08-24T14:15:22Z",
"dimensionScores": [
{
"code": "string",
"score": 0,
"answeredCount": 0
}
],
"overallScore": 0,
"weaknesses": [
{
"code": "string",
"score": 0
}
],
"improvementAreas": [
{
"dimension": "string",
"currentScore": 0,
"summary": "string",
"actions": [
"string"
]
}
],
"radar": [
{
"code": "string",
"value": 0
}
],
"answeredCount": 0,
"completionRate": 0,
"questionFeedback": [
{
"attemptQuestionId": 0,
"position": 0,
"stem": "string",
"selectedOptionId": "string",
"awardedScore": 0,
"maxScore": 0,
"explanation": "string"
}
],
"questionSetVersion": "string",
"rulesVersion": "string",
"generatedAt": "2019-08-24T14:15:22Z",
"disclaimer": "string"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAbilityResultResponse](#schemaapiresponseabilityresultresponse)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None|
|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|404|None|
|409|[Conflict](https://tools.ietf.org/html/rfc7231#section-6.5.8)|409|None|
## GET 我的能力测评历史
GET /abilities/me
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"items": [
{
"attemptId": 0,
"typeCode": "string",
"status": "string",
"validityStatus": "string",
"overallScore": 0,
"answeredCount": 0,
"completionRate": 0,
"startedAt": "2019-08-24T14:15:22Z",
"expiresAt": "2019-08-24T14:15:22Z",
"completedAt": "2019-08-24T14:15:22Z",
"validUntil": "2019-08-24T14:15:22Z"
}
],
"totalElements": 0,
"page": 0,
"size": 0
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageResponseAbilityHistoryItem](#schemaapiresponsepageresponseabilityhistoryitem)|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|None|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None|
# 风险治理
## GET 风险概览(ADMIN)
GET /admin/scoring/risk/overview
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|from|query|string| 否 |none|
|to|query|string| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"openCount": 0,
"bySeverity": [
{
"severity": "string",
"count": 0
}
],
"byRule": [
{
"ruleCode": "string",
"count": 0
}
],
"lastDetectedAt": "2019-08-24T14:15:22Z"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRiskOverviewResponse](#schemaapiresponseriskoverviewresponse)|
## GET 风险趋势(ADMIN)
GET /admin/scoring/risk/trend
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|bucket|query|string| 否 |none|
|from|query|string| 否 |none|
|to|query|string| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"bucket": "string",
"items": [
{
"time": "2019-08-24T14:15:22Z",
"count": 0
}
]
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRiskTrendResponse](#schemaapiresponserisktrendresponse)|
## GET 风险分布(ADMIN)
GET /admin/scoring/risk/distribution
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|from|query|string| 否 |none|
|to|query|string| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"items": [
{
"ruleCode": "string",
"severity": "string",
"count": 0
}
]
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRiskDistributionResponse](#schemaapiresponseriskdistributionresponse)|
## GET 风险事件分页(ADMIN)
GET /admin/scoring/risk/events
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|page|query|string| 否 |none|
|size|query|string| 否 |none|
|status|query|string| 否 |none|
|severity|query|string| 否 |none|
|ruleCode|query|string| 否 |none|
|from|query|string| 否 |none|
|to|query|string| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"items": [
{
"eventId": 0,
"ruleCode": "string",
"sourceAction": "string",
"severity": "string",
"status": "string",
"occurrenceCount": 0,
"windowStartedAt": "2019-08-24T14:15:22Z",
"windowEndedAt": "2019-08-24T14:15:22Z",
"detectedAt": "2019-08-24T14:15:22Z",
"version": 0
}
],
"totalElements": 0,
"page": 0,
"size": 0
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageResponseRiskEventResponse](#schemaapiresponsepageresponseriskeventresponse)|
## GET 风险规则列表(ADMIN)
GET /admin/scoring/risk/rules
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": [
{
"ruleCode": "string",
"sourceAction": "string",
"thresholdCount": 0,
"windowMinutes": 0,
"severity": "string",
"enabled": true,
"version": 0
}
],
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListRiskRuleResponse](#schemaapiresponselistriskruleresponse)|
## PUT 更新风险规则(ADMIN)
PUT /admin/scoring/risk/rules/{ruleCode}
> Body 请求参数
```json
{
"enabled": true,
"thresholdCount": 0,
"windowMinutes": 0,
"severity": "string",
"expectedVersion": 0
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|ruleCode|path|string| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[RiskRuleUpdateRequest](#schemariskruleupdaterequest)| 是 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"ruleCode": "string",
"sourceAction": "string",
"thresholdCount": 0,
"windowMinutes": 0,
"severity": "string",
"enabled": true,
"version": 0
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRiskRuleResponse](#schemaapiresponseriskruleresponse)|
## POST 风险事件人工操作(ADMIN)
POST /admin/scoring/risk/events/{eventId}/actions
> Body 请求参数
```json
{
"action": "string",
"reasonCode": "string",
"expectedVersion": 0
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|eventId|path|string| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[RiskEventActionRequest](#schemariskeventactionrequest)| 是 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"eventId": 0,
"ruleCode": "string",
"sourceAction": "string",
"severity": "string",
"status": "string",
"occurrenceCount": 0,
"windowStartedAt": "2019-08-24T14:15:22Z",
"windowEndedAt": "2019-08-24T14:15:22Z",
"detectedAt": "2019-08-24T14:15:22Z",
"version": 0
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRiskEventResponse](#schemaapiresponseriskeventresponse)|
# 岗位推荐
## GET recommendationTaxonomies
GET /job-recommendation-taxonomies
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": [
{
"code": "string",
"parentCode": "string",
"type": "string",
"displayName": "string"
}
]
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseListTaxonomyResponse](#schemaapiresponselisttaxonomyresponse)|
## GET myJobRecommendations
GET /profile/me/job-recommendations
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|page|query|integer| 否 |none|
|size|query|integer| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"items": [
{
"jobId": 0,
"title": "string",
"city": "string",
"employmentType": "string",
"salaryMin": 0,
"salaryMax": 0,
"mode": "PERSONALIZED",
"score": 0,
"reasons": [
"string"
]
}
],
"total": 0,
"page": 0,
"size": 0,
"totalPages": 0
}
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageJobRecommendationItem](#schemaapiresponsepagejobrecommendationitem)|
## POST createRecommendationFeedback
POST /profile/me/job-recommendations/{jobId}/feedback
> Body 请求参数
```json
{
"feedbackType": "string",
"reasonType": "string",
"idempotencyKey": "string",
"expectedVersion": 0
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|string| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[RecommendationFeedbackRequest](#schemarecommendationfeedbackrequest)| 是 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"jobId": 0,
"feedbackType": "string",
"reasonType": "string",
"status": "string",
"version": 0
}
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRecommendationFeedbackResponse](#schemaapiresponserecommendationfeedbackresponse)|
## DELETE revokeNotInterestedFeedback
DELETE /profile/me/job-recommendations/{jobId}/feedback
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|string| 是 |none|
|expectedVersion|query|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|None|
## GET companyRecommendationProfile
GET /companies/me/jobs/{jobId}/recommendation-profile
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|string| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"jobId": 0,
"industryCode": "string",
"jobFamilyCode": "string",
"riasecWeights": {
"property1": 0,
"property2": 0
},
"abilityExpectations": {
"property1": 0,
"property2": 0
},
"enabled": true,
"reviewStatus": "string",
"reviewReason": "string",
"version": 0,
"updatedAt": "2019-08-24T14:15:22Z"
}
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRecommendationProfileResponse](#schemaapiresponserecommendationprofileresponse)|
## PUT updateCompanyRecommendationProfile
PUT /companies/me/jobs/{jobId}/recommendation-profile
> Body 请求参数
```json
{
"industryCode": "string",
"jobFamilyCode": "string",
"riasecWeights": {
"property1": 0,
"property2": 0
},
"abilityExpectations": {
"property1": 0,
"property2": 0
},
"enabled": true,
"expectedVersion": 0
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|string| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[RecommendationProfileRequest](#schemarecommendationprofilerequest)| 是 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"jobId": 0,
"industryCode": "string",
"jobFamilyCode": "string",
"riasecWeights": {
"property1": 0,
"property2": 0
},
"abilityExpectations": {
"property1": 0,
"property2": 0
},
"enabled": true,
"reviewStatus": "string",
"reviewReason": "string",
"version": 0,
"updatedAt": "2019-08-24T14:15:22Z"
}
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRecommendationProfileResponse](#schemaapiresponserecommendationprofileresponse)|
## GET adminRecommendationProfiles
GET /admin/job-recommendation-profiles
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"items": [
{
"jobId": 0,
"industryCode": "string",
"jobFamilyCode": "string",
"riasecWeights": {
"property1": 0,
"property2": 0
},
"abilityExpectations": {
"property1": 0,
"property2": 0
},
"enabled": true,
"reviewStatus": "string",
"reviewReason": "string",
"version": 0,
"updatedAt": "2019-08-24T14:15:22Z"
}
],
"total": 0,
"page": 0,
"size": 0,
"totalPages": 0
}
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponsePageRecommendationProfileResponse](#schemaapiresponsepagerecommendationprofileresponse)|
## POST decideRecommendationProfile
POST /admin/job-recommendation-profiles/{jobId}/decision
> Body 请求参数
```json
{
"decision": "APPROVE",
"reasonCode": "string",
"expectedVersion": 0
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|string| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[RecommendationDecisionRequest](#schemarecommendationdecisionrequest)| 是 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"jobId": 0,
"industryCode": "string",
"jobFamilyCode": "string",
"riasecWeights": {
"property1": 0,
"property2": 0
},
"abilityExpectations": {
"property1": 0,
"property2": 0
},
"enabled": true,
"reviewStatus": "string",
"reviewReason": "string",
"version": 0,
"updatedAt": "2019-08-24T14:15:22Z"
}
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseRecommendationProfileResponse](#schemaapiresponserecommendationprofileresponse)|
# 企业评价管理
## GET listCompanyJobReviews
GET /companies/me/job-reviews
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|query|integer(int64)| 否 |none|
|rating|query|integer| 否 |none|
|reviewModerationStatus|query|string| 否 |none|
|replyStatus|query|string| 否 |none|
|createdFrom|query|string(date-time)| 否 |none|
|createdTo|query|string(date-time)| 否 |none|
|page|query|integer| 否 |none|
|size|query|integer| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"items": [
{
"reviewId": 0,
"job": {
"id": 0,
"title": "string"
},
"rating": 0,
"content": "string",
"tags": [
"string"
],
"dimensionScores": {
"property1": 0,
"property2": 0
},
"reviewStatus": "string",
"reviewCreatedAt": "2019-08-24T14:15:22Z",
"reply": {
"id": 0,
"content": "string",
"status": "string",
"version": 0,
"updatedAt": "2019-08-24T14:15:22Z",
"rejectionReason": "string"
}
}
],
"total": 0,
"page": 0,
"size": 0,
"totalPages": 0
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseReviewReplyPageResponse](#schemaapiresponsereviewreplypageresponse)|
## GET getCompanyJobReview
GET /companies/me/job-reviews/{reviewId}
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|reviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"reviewId": 0,
"job": {
"id": 0,
"title": "string"
},
"rating": 0,
"content": "string",
"tags": [
"string"
],
"dimensionScores": {
"property1": 0,
"property2": 0
},
"reviewStatus": "string",
"reviewCreatedAt": "2019-08-24T14:15:22Z",
"reply": {
"id": 0,
"content": "string",
"status": "string",
"version": 0,
"updatedAt": "2019-08-24T14:15:22Z",
"rejectionReason": "string"
}
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyReviewDetailResponse](#schemaapiresponsecompanyreviewdetailresponse)|
## POST createCompanyReviewReply
POST /companies/me/job-reviews/{reviewId}/reply
> Body 请求参数
```json
{
"content": "string",
"idempotencyKey": "0c14c6a6-6f50-4d1e-b0c4-b46ff43ba6a1"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|reviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[CreateCompanyReviewReplyRequest](#schemacreatecompanyreviewreplyrequest)| 是 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"id": 0,
"content": "string",
"status": "string",
"version": 0,
"updatedAt": "2019-08-24T14:15:22Z",
"rejectionReason": "string"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyReviewReplyResponse](#schemaapiresponsecompanyreviewreplyresponse)|
## PUT reviseCompanyReviewReply
PUT /companies/me/job-reviews/{reviewId}/reply
> Body 请求参数
```json
{
"content": "string",
"expectedVersion": 0
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|reviewId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[UpdateCompanyReviewReplyRequest](#schemaupdatecompanyreviewreplyrequest)| 是 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"id": 0,
"content": "string",
"status": "string",
"version": 0,
"updatedAt": "2019-08-24T14:15:22Z",
"rejectionReason": "string"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseCompanyReviewReplyResponse](#schemaapiresponsecompanyreviewreplyresponse)|
# 官方回复审核
## GET listPendingReviewReplies
GET /admin/review-replies/pending
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|companyId|query|integer(int64)| 否 |none|
|jobId|query|integer(int64)| 否 |none|
|riskLevel|query|string| 否 |none|
|createdFrom|query|string(date-time)| 否 |none|
|createdTo|query|string(date-time)| 否 |none|
|page|query|integer| 否 |none|
|size|query|integer| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"items": [
{
"replyId": 0,
"reviewId": 0,
"jobId": 0,
"jobTitle": "string",
"companyId": 0,
"companyName": "string",
"rating": 0,
"reviewContent": "string",
"reviewModerationStatus": "string",
"replyContent": "string",
"replyStatus": "string",
"version": 0,
"riskScore": 0,
"riskLevel": "string",
"reasonCodes": [
"string"
],
"createdAt": "2019-08-24T14:15:22Z"
}
],
"total": 0,
"page": 0,
"size": 0,
"totalPages": 0
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAdminReviewReplyPageResponse](#schemaapiresponseadminreviewreplypageresponse)|
## POST decideReviewReply
POST /admin/review-replies/{replyId}/decision
> Body 请求参数
```json
{
"decision": "APPROVE",
"reason": "string"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|replyId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[ReviewReplyDecisionRequest](#schemareviewreplydecisionrequest)| 是 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"replyId": 0,
"reviewId": 0,
"jobId": 0,
"jobTitle": "string",
"companyId": 0,
"companyName": "string",
"rating": 0,
"reviewContent": "string",
"reviewModerationStatus": "string",
"replyContent": "string",
"replyStatus": "string",
"version": 0,
"riskScore": 0,
"riskLevel": "string",
"reasonCodes": [
"string"
],
"createdAt": "2019-08-24T14:15:22Z"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|[ApiResponseAdminReviewReplyResponse](#schemaapiresponseadminreviewreplyresponse)|
# 企业人才发现
## GET 查询人才发现授权
GET /profile/me/talent-discovery
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"enabled": true,
"version": 0,
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseTalentDiscoveryPreferenceResponse](#schemaapiresponsetalentdiscoverypreferenceresponse)|
## PUT 更新人才发现授权
PUT /profile/me/talent-discovery
> Body 请求参数
```json
{
"enabled": true,
"expectedVersion": 0
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|[TalentDiscoveryPreferenceUpdateRequest](#schematalentdiscoverypreferenceupdaterequest)| 是 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"enabled": true,
"version": 0,
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseTalentDiscoveryPreferenceResponse](#schemaapiresponsetalentdiscoverypreferenceresponse)|
## GET 查询岗位人才发现推荐
GET /companies/me/jobs/{jobId}/talent-recommendations
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"mode": "PERSONALIZED",
"items": [
{
"candidateKey": "string",
"candidateLabel": "string",
"city": "string",
"education": "string",
"graduationYear": 0,
"skills": [
"string"
],
"fitBand": "HIGH",
"summary": "string",
"signalsAvailable": [
"PREFERENCE"
]
}
],
"total": 0,
"page": 0,
"size": 0,
"totalPages": 0,
"message": "string"
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseTalentDiscoveryPageResponse](#schemaapiresponsetalentdiscoverypageresponse)|
# 企业人才邀约
## POST 创建人才邀约
POST /companies/me/jobs/{jobId}/talent-invitations
> Body 请求参数
```json
{
"candidateKey": "string",
"message": "string",
"idempotencyKey": "0c14c6a6-6f50-4d1e-b0c4-b46ff43ba6a1"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|jobId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[CreateTalentInvitationRequest](#schemacreatetalentinvitationrequest)| 是 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"invitationId": 0,
"jobId": 0,
"jobTitle": "string",
"candidateLabel": "string",
"message": "string",
"status": "PENDING",
"createdAt": "2019-08-24T14:15:22Z",
"expiresAt": "2019-08-24T14:15:22Z",
"decidedAt": "2019-08-24T14:15:22Z",
"conversationId": 0
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseCompanyTalentInvitationResponse](#schemaapiresponsecompanytalentinvitationresponse)|
## GET 企业邀约列表
GET /companies/me/talent-invitations
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"items": [
{
"invitationId": 0,
"jobId": 0,
"jobTitle": "string",
"candidateLabel": "string",
"message": "string",
"status": "PENDING",
"createdAt": "2019-08-24T14:15:22Z",
"expiresAt": "2019-08-24T14:15:22Z",
"decidedAt": "2019-08-24T14:15:22Z",
"conversationId": 0
}
],
"total": 0,
"page": 0,
"size": 0,
"totalPages": 0
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseCompanyTalentInvitationPageResponse](#schemaapiresponsecompanytalentinvitationpageresponse)|
## GET 企业邀约详情
GET /companies/me/talent-invitations/{invitationId}
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|invitationId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"invitationId": 0,
"jobId": 0,
"jobTitle": "string",
"candidateLabel": "string",
"message": "string",
"status": "PENDING",
"createdAt": "2019-08-24T14:15:22Z",
"expiresAt": "2019-08-24T14:15:22Z",
"decidedAt": "2019-08-24T14:15:22Z",
"conversationId": 0
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseCompanyTalentInvitationResponse](#schemaapiresponsecompanytalentinvitationresponse)|
## GET 学生收到的邀约列表
GET /profile/me/talent-invitations
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"items": [
{
"invitationId": 0,
"companyId": 0,
"companyName": "string",
"jobId": 0,
"jobTitle": "string",
"jobCity": "string",
"message": "string",
"status": "PENDING",
"version": 0,
"createdAt": "2019-08-24T14:15:22Z",
"expiresAt": "2019-08-24T14:15:22Z",
"decidedAt": "2019-08-24T14:15:22Z",
"conversationId": 0
}
],
"total": 0,
"page": 0,
"size": 0,
"totalPages": 0
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseStudentTalentInvitationPageResponse](#schemaapiresponsestudenttalentinvitationpageresponse)|
## GET 学生邀约详情
GET /profile/me/talent-invitations/{invitationId}
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|invitationId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"invitationId": 0,
"companyId": 0,
"companyName": "string",
"jobId": 0,
"jobTitle": "string",
"jobCity": "string",
"message": "string",
"status": "PENDING",
"version": 0,
"createdAt": "2019-08-24T14:15:22Z",
"expiresAt": "2019-08-24T14:15:22Z",
"decidedAt": "2019-08-24T14:15:22Z",
"conversationId": 0
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseStudentTalentInvitationResponse](#schemaapiresponsestudenttalentinvitationresponse)|
## POST 处理人才邀约
POST /profile/me/talent-invitations/{invitationId}/decision
> Body 请求参数
```json
{
"decision": "ACCEPT",
"expectedVersion": 0
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|invitationId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|[TalentInvitationDecisionRequest](#schematalentinvitationdecisionrequest)| 是 |none|
> 返回示例
> 200 Response
```json
{
"code": 0,
"message": "string",
"data": {
"invitationId": 0,
"companyId": 0,
"companyName": "string",
"jobId": 0,
"jobTitle": "string",
"jobCity": "string",
"message": "string",
"status": "PENDING",
"version": 0,
"createdAt": "2019-08-24T14:15:22Z",
"expiresAt": "2019-08-24T14:15:22Z",
"decidedAt": "2019-08-24T14:15:22Z",
"conversationId": 0
},
"requestId": "string",
"timestamp": "2019-08-24T14:15:22Z"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功|[ApiResponseStudentTalentInvitationResponse](#schemaapiresponsestudenttalentinvitationresponse)|
# 行业技能词云
## GET 查询行业技能词云
GET /skills/word-cloud
返回当前筛选范围内的全部技能,按热度降序排列;前端取前十条作为 TOP10。仅 STUDENT 可访问。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|industryId|query|integer(int64)| 是 |行业 ID,必填正整数|
|occupationId|query|integer(int64)| 是 |职位 ID,必填正整数|
|categoryId|query|integer(int64)| 否 |技能分类 ID,可选正整数;省略时返回职位下全部分类|
|Authorization|header|string| 否 |none|
> 返回示例
> 成功返回筛选范围内的全部技能
```json
{
"code": 200,
"message": "ok",
"data": {
"industry": {
"id": 1,
"code": "INTERNET",
"name": "互联网"
},
"occupation": {
"id": 1,
"code": "FRONTEND_DEVELOPER",
"name": "前端开发工程师"
},
"category": null,
"total": 1,
"items": [
{
"rank": 1,
"skillId": 26,
"skillCode": "REACT",
"nameZh": "React",
"nameEn": "React",
"sourceType": "O*NET",
"sourceCode": "15-1254.00|React|2.E.7.h",
"categoryId": 103,
"categoryName": "前端框架",
"heat": 4.38,
"heatSourceCode": "15-1254.00",
"heatElementId": "2.E.7.h",
"heatProxy": true
}
]
}
}
```
> 400 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功返回筛选范围内的全部技能|Inline|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|筛选参数缺失、非正整数或节点关系非法|Inline|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|Inline|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|已登录但不是 STUDENT 角色|Inline|
### 返回数据结构
## GET 查询个人技能匹配度
GET /skills/match
使用当前 STUDENT 的个人技能,与筛选结果热度 TOP10 比对并返回命中、缺失和匹配度。仅 STUDENT 可访问。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|industryId|query|integer(int64)| 是 |行业 ID,必填正整数|
|occupationId|query|integer(int64)| 是 |职位 ID,必填正整数|
|categoryId|query|integer(int64)| 否 |技能分类 ID,可选正整数;省略时使用职位下全部技能|
|Authorization|header|string| 否 |none|
> 返回示例
> 成功返回个人技能匹配结果
```json
{
"code": 200,
"message": "ok",
"data": {
"matchScore": 50,
"matchedCount": 1,
"totalCount": 2,
"matchedSkills": [
{
"rank": 1,
"skillId": 26,
"skillCode": "REACT",
"nameZh": "React",
"nameEn": "React",
"sourceType": "O*NET",
"sourceCode": "15-1254.00|React|2.E.7.h",
"categoryId": 103,
"categoryName": "前端框架",
"heat": 4.38,
"heatSourceCode": "15-1254.00",
"heatElementId": "2.E.7.h",
"heatProxy": true
}
],
"missingSkills": [
{
"rank": 2,
"skillId": 31,
"skillCode": "DOCKER",
"nameZh": "Docker",
"nameEn": "Docker",
"sourceType": "O*NET",
"sourceCode": "15-1299.08|Docker|2.E.7.h",
"categoryId": 105,
"categoryName": "工程化工具",
"heat": 4.12,
"heatSourceCode": "15-1299.08",
"heatElementId": "2.E.7.h",
"heatProxy": true
}
]
}
}
```
> 400 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功返回个人技能匹配结果|Inline|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|筛选参数缺失、非正整数或节点关系非法|Inline|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|Inline|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|已登录但不是 STUDENT 角色|Inline|
### 返回数据结构
## GET 生成个人学习路径
GET /skills/learning-path
仅针对个人 TOP10 中未命中的技能,按热度顺序返回优先级和通用学习建议。仅 STUDENT 可访问。
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|industryId|query|integer(int64)| 是 |行业 ID,必填正整数|
|occupationId|query|integer(int64)| 是 |职位 ID,必填正整数|
|categoryId|query|integer(int64)| 否 |技能分类 ID,可选正整数;省略时使用职位下全部技能|
|Authorization|header|string| 否 |none|
> 返回示例
> 成功返回缺失技能的学习路径;没有缺口时列表为空
```json
{
"code": 200,
"message": "ok",
"data": {
"total": 1,
"items": [
{
"priority": 1,
"skillId": 26,
"skillName": "React",
"categoryId": 103,
"categoryName": "前端框架",
"suggestion": "先理解 React 的核心概念与生命周期,再通过一个小型项目练习集成。"
}
]
}
}
```
> 400 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|成功返回缺失技能的学习路径;没有缺口时列表为空|Inline|
|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|筛选参数缺失、非正整数或节点关系非法|Inline|
|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|未登录|Inline|
|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|已登录但不是 STUDENT 角色|Inline|
### 返回数据结构
# 公司知识介绍
## GET 读取本企业知识配置
GET /onboarding/company/knowledge
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
## PUT 创建或更新本企业知识配置
PUT /onboarding/company/knowledge
> Body 请求参数
```json
{
"culture": "我们倡导透明沟通、长期主义和持续学习。",
"workPolicies": "核心工作时间为 10:00-17:00;每周可申请 1 天远程办公。",
"onboardingGuide": "入职当天 9:30 到 A 座 8 层前台报到,联系行政同事。",
"version": 0
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|object| 是 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
## GET 读取公司知识介绍
GET /onboarding/companies/{companyId}/knowledge
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|companyId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
# 入职清单
## PUT 更新本企业自定义清单项
PUT /onboarding/company/checklist-items/{itemId}
使用 version 执行乐观锁控制
> Body 请求参数
```json
{
"title": "领取并激活门禁卡",
"description": "到行政前台领取门禁卡,并在企业 App 中完成激活。",
"category": "ADMIN",
"sortOrder": 900,
"required": true,
"active": true,
"version": 2
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|itemId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|object| 是 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
## DELETE 软删除本企业自定义清单项
DELETE /onboarding/company/checklist-items/{itemId}
重复删除保持幂等成功
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|itemId|path|integer(int64)| 是 |none|
|version|query|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
## PUT 更新清单条目完成状态
PUT /onboarding/companies/{companyId}/checklist/items/{itemId}/completion
使用绝对状态语义设置当前学生的完成状态
> Body 请求参数
```json
{
"completed": true,
"version": 0
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|companyId|path|integer(int64)| 是 |none|
|itemId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
|body|body|object| 是 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
## GET 查询本企业自定义清单项
GET /onboarding/company/checklist-items
返回活动与软删除项及当前版本
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
## POST 创建本企业自定义清单项
POST /onboarding/company/checklist-items
支持 idempotencyKey 重放与冲突检测
> Body 请求参数
```json
{
"title": "领取门禁卡",
"description": "到行政前台领取门禁卡并激活权限。",
"category": "ADMIN",
"sortOrder": 1000,
"required": false,
"idempotencyKey": "company-10-card-20260917-001"
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|object| 是 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
## GET 读取有效入职清单
GET /onboarding/companies/{companyId}/checklist
返回通用项与企业活动自定义项的合并结果
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|companyId|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
# 薪资计算器
## GET 查询本人薪资历史
GET /salary-calculator/calculations
仅 STUDENT;按创建时间倒序分页
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|page|query|integer(int32)| 否 |none|
|size|query|integer(int32)| 否 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
## POST 计算并保存到手工资
POST /salary-calculator/calculations
仅 STUDENT;校验政策版本,支持幂等键
> Body 请求参数
```json
{
"cityCode": "110000",
"grossMonthlySalary": 15000.00,
"monthIndex": 3,
"specialAdditionalDeduction": 2000.00,
"expectedPolicyVersion": "2026-09-20-v1",
"idempotencyKey": "salary-20260921-001",
"overrides": {
"socialSecurityBase": 15000.00,
"housingFundBase": 15000.00,
"pensionRate": 0.08,
"medicalRate": 0.02,
"unemploymentRate": 0.005,
"housingFundRate": 0.12,
"seriousIllnessMonthlyFee": 0.00
}
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
|body|body|object| 是 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
## GET 查询启用城市列表
GET /salary-calculator/cities
仅 STUDENT;返回全部启用城市摘要,不分页
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
## GET 查询城市默认参数
GET /salary-calculator/cities/{cityCode}
仅 STUDENT;返回城市元数据和当前整套默认参数
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|cityCode|path|string| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
## GET 查询本人薪资历史详情
GET /salary-calculator/calculations/{id}
仅 STUDENT;返回完整快照
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
## DELETE 删除本人薪资历史
DELETE /salary-calculator/calculations/{id}
仅 STUDENT;物理删除
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|integer(int64)| 是 |none|
|Authorization|header|string| 否 |none|
> 返回示例
> 200 Response
```
{}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
### 返回数据结构
# 数据模型