openapi: 3.0.3 info: title: 机构端-安评报告库 API description: | 对齐原型页 `institution-report-library`(机构端「报告库」)的展示与功能。 ## 原型能力对照 | 原型 | 接口 | |------|------| | 顶栏汇总(总数/近三年/已报送/待完善/抽查中) | `GET /summary` | | 列表筛选(名称编号/年度/评价类型/行业/报送状态) | `GET /page` | | 查看详情 | `GET /get` | | 下载 | 详情 `fileUrl` 由前端下载(无单独下载流接口) | | 上传历史报告 | `POST /add`(文件先走统一上传拿 URL) | | 报送监管 | `POST /submit` | | 抽查记录/整改 | `/eval-report-spotcheck/**` | **Apifox 导入**:项目设置 → 导入数据 → OpenAPI → 选择本文件。 统一前缀:`/safetyEval/institution` 成功:`success=true` 且 `code="0"` version: 1.1.0 contact: name: safety-eval-service servers: - url: http://localhost:8095 description: 本地开发 - url: http://192.168.20.100:30140 description: 测试网关(100) tags: - name: 机构端-安评报告库 description: 报告库列表/详情/上传/报送/汇总 - name: 机构端-报告抽查整改 description: 抽查记录查询与整改反馈 paths: /safetyEval/institution/eval-report/summary: get: tags: [机构端-安评报告库] summary: 报告库页顶栏汇总 operationId: institutionEvalReportSummary responses: '200': description: 成功 content: application/json: schema: $ref: '#/components/schemas/SingleResponseInstitutionEvalReportSummaryCO' example: success: true code: "0" data: totalCount: 126 recentThreeYearCount: 98 submittedCount: 86 incompleteCount: 5 spotcheckingCount: 3 /safetyEval/institution/eval-report/page: get: tags: [机构端-安评报告库] summary: 分页查询本机构报告 operationId: institutionEvalReportPage parameters: - $ref: '#/components/parameters/current' - $ref: '#/components/parameters/size' - name: keyword in: query description: 报告名称 / 编号 schema: { type: string } - name: reportYear in: query schema: { type: integer, example: 2026 } - name: evalTypeCode in: query description: PRE / ACCEPT / STATUS schema: { type: string, example: PRE } - name: industryCode in: query description: 所属行业编码,如 HAZCHEM schema: { type: string } - name: reportStatusCode in: query description: 1已入库 2抽查中 3待整改 4已复核 schema: { type: integer } - name: displayStatus in: query description: | 原型「报送状态」筛选: `UN_SUBMITTED` 未报送 / `SUBMITTED` 已报送 / `SPOTCHECKING` 抽查中 / `RECTIFYING` 整改中 / `REVIEWED` 已复核 schema: type: string enum: [UN_SUBMITTED, SUBMITTED, SPOTCHECKING, RECTIFYING, REVIEWED] responses: '200': description: 成功 content: application/json: schema: $ref: '#/components/schemas/PageResponseEvalReportLibraryCO' /safetyEval/institution/eval-report/get: get: tags: [机构端-安评报告库] summary: 报告详情 description: 含 `fileUrl`/`fileName`,前端下载直接使用文件地址。 operationId: institutionEvalReportGet parameters: - name: id in: query required: true schema: { type: string } responses: '200': description: 成功 content: application/json: schema: $ref: '#/components/schemas/SingleResponseEvalReportLibraryCO' /safetyEval/institution/eval-report/add: post: tags: [机构端-安评报告库] summary: 上传历史报告 description: | 对齐原型弹窗「上传历史报告」。 文件请先调用统一文件上传接口拿到 `fileUrl` 再提交本接口。 `submitToRegulator=true` 时 `submitFlag=1`(已报送);否则 `submitFlag=2`(未报送)。 同机构下 `reportNo` 不可重复。 operationId: institutionEvalReportAdd requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InstitutionEvalReportAddCmd' example: reportNo: CQAP-XZ-2026-001 reportName: 华安化工园区建设项目安全预评价报告 reportYear: 2026 evalTypeCode: PRE evalTypeName: 安全预评价 industryCode: HAZCHEM industryName: 危险化学品 evaluatedUnitName: 重庆华安化工有限公司 issueDate: '2026-07-16' pageCount: 186 fileUrl: https://oss.example.com/reports/xxx.pdf fileName: 华安化工预评价.pdf secretLevelCode: NORMAL secretLevelName: 普通 remarks: 正式签章版 submitToRegulator: false responses: '200': description: 成功 content: application/json: schema: $ref: '#/components/schemas/SingleResponseEvalReportLibraryCO' /safetyEval/institution/eval-report/submit: post: tags: [机构端-安评报告库] summary: 报送监管 description: 将 `submitFlag=2`(未报送)的报告改为已报送;已报送则报错 06-07-009。 operationId: institutionEvalReportSubmit requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InstitutionEvalReportSubmitCmd' example: id: 10001 responses: '200': description: 成功 content: application/json: schema: $ref: '#/components/schemas/SingleResponseEvalReportLibraryCO' /safetyEval/institution/eval-report-spotcheck/list: get: tags: [机构端-报告抽查整改] summary: 按报告查询抽查记录 operationId: institutionSpotcheckList parameters: - name: reportId in: query required: true schema: { type: integer, format: int64 } responses: '200': description: 成功 content: application/json: schema: $ref: '#/components/schemas/SingleResponseEvalReportSpotcheckCOList' /safetyEval/institution/eval-report-spotcheck/get: get: tags: [机构端-报告抽查整改] summary: 抽查详情 operationId: institutionSpotcheckGet parameters: - name: id in: query required: true schema: { type: string } responses: '200': description: 成功 content: application/json: schema: $ref: '#/components/schemas/SingleResponseEvalReportSpotcheckCO' /safetyEval/institution/eval-report-spotcheck/rectify: post: tags: [机构端-报告抽查整改] summary: 提交整改反馈 description: 报告须处于抽查中且抽查结果为不合格。 operationId: institutionSpotcheckRectify requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InstitutionSpotcheckRectifyCmd' example: spotcheckId: 20001 rectifyFeedback: 已按抽查意见完成修订并重新盖章 responses: '200': description: 成功 content: application/json: schema: $ref: '#/components/schemas/SingleResponseEvalReportSpotcheckCO' components: parameters: current: name: current in: query description: 页码(从 1 开始) schema: { type: integer, default: 1 } size: name: size in: query description: 每页条数 schema: { type: integer, default: 10 } schemas: SingleResponseBase: type: object properties: success: { type: boolean, example: true } code: { type: string, example: "0" } message: { type: string } errCode: { type: string } errMessage: { type: string } EvalReportLibraryCO: type: object properties: id: { type: string } orgId: { type: string } projectId: { type: string } customerId: { type: string } evaluatedUnitName: { type: string, description: 被评价单位 } reportNo: { type: string } reportName: { type: string } reportYear: { type: integer } evalTypeCode: { type: string, example: PRE } evalTypeName: { type: string, example: 安全预评价 } industryCode: { type: string, example: HAZCHEM } industryName: { type: string, example: 危险化学品 } businessScope: { type: string } fileUrl: { type: string } fileName: { type: string } publicFlag: { type: integer, description: "1是2否" } completeFlag: { type: integer, description: "1完整2待完善" } submitFlag: { type: integer, description: "1已报送2未报送" } reportStatusCode: { type: integer, description: "1已入库2抽查中3待整改4已复核" } reportStatusName: { type: string } displayStatusName: type: string description: 列表展示报送状态(未报送/已报送/抽查中/整改中/已复核) example: 已报送 archiveTime: { type: string, format: date-time } issueDate: { type: string, format: date, description: 签发日期 } pageCount: { type: integer } secretLevelCode: { type: string, example: NORMAL } secretLevelName: { type: string, example: 普通 } remarks: { type: string } InstitutionEvalReportSummaryCO: type: object properties: totalCount: { type: integer, format: int64 } recentThreeYearCount: { type: integer, format: int64 } submittedCount: { type: integer, format: int64 } incompleteCount: { type: integer, format: int64 } spotcheckingCount: { type: integer, format: int64 } InstitutionEvalReportAddCmd: type: object required: [reportNo, reportName, evaluatedUnitName, issueDate, fileUrl] properties: reportNo: { type: string } reportName: { type: string } reportYear: { type: integer } evalTypeCode: { type: string } evalTypeName: { type: string } industryCode: { type: string } industryName: { type: string } evaluatedUnitName: { type: string } customerId: { type: integer, format: int64 } issueDate: { type: string, format: date } pageCount: { type: integer } fileUrl: { type: string } fileName: { type: string } secretLevelCode: { type: string } secretLevelName: { type: string } remarks: { type: string } submitToRegulator: { type: boolean, description: true=同步报送监管 } InstitutionEvalReportSubmitCmd: type: object required: [id] properties: id: { type: integer, format: int64 } EvalReportSpotcheckCO: type: object properties: id: { type: string } orgId: { type: string } reportId: { type: string } checkResultCode: { type: integer, description: "1合格2不合格" } checkResultName: { type: string } checkOpinion: { type: string } rectifyRequire: { type: string } rectifyFeedback: { type: string } reviewResultCode: { type: integer, description: "1通过2不通过" } reviewResultName: { type: string } checkerId: { type: string } checkerName: { type: string } checkTime: { type: string, format: date-time } InstitutionSpotcheckRectifyCmd: type: object required: [spotcheckId, rectifyFeedback] properties: spotcheckId: { type: integer, format: int64 } rectifyFeedback: { type: string } SingleResponseEvalReportLibraryCO: allOf: - $ref: '#/components/schemas/SingleResponseBase' - type: object properties: data: $ref: '#/components/schemas/EvalReportLibraryCO' SingleResponseInstitutionEvalReportSummaryCO: allOf: - $ref: '#/components/schemas/SingleResponseBase' - type: object properties: data: $ref: '#/components/schemas/InstitutionEvalReportSummaryCO' PageResponseEvalReportLibraryCO: allOf: - $ref: '#/components/schemas/SingleResponseBase' - type: object properties: data: type: array items: $ref: '#/components/schemas/EvalReportLibraryCO' total: type: integer format: int64 SingleResponseEvalReportSpotcheckCO: allOf: - $ref: '#/components/schemas/SingleResponseBase' - type: object properties: data: $ref: '#/components/schemas/EvalReportSpotcheckCO' SingleResponseEvalReportSpotcheckCOList: allOf: - $ref: '#/components/schemas/SingleResponseBase' - type: object properties: data: type: array items: $ref: '#/components/schemas/EvalReportSpotcheckCO'