safety-eval-service/docs/监管端驾驶舱接口设计.md

9.2 KiB
Raw Permalink Blame History

监管端驾驶舱(/container/driver → Cockpit接口设计

适用范围:前端「监管端」大屏(src/pages/Container/Supervision/Cockpit)。 设计原则:高内聚(一业务域一接口)、松耦合(前端只消费扁平 CO、高性能单接口聚合 + 短 TTL 缓存)、稳定性(面板级接口独立、可降级)、业务边界清晰。 实现约束:全部为新增接口,落在新的 RegulatorCockpitController,不改/不删任何既有功能;聚合逻辑在 RegulatorCockpitExecutor 内基于现有 Gateway 完成(监管端上下文 orgId 为空Gateway page 不强制机构过滤,返回全市数据)。


一、总体说明

大屏原 RegulatorRiskCenterController 为内存 Mock本设计基于现有数据源给出可用的真实接口,剔除无数据源的板块(风险预警研判、隐患整改率、合格率)。

新增 7 个聚合接口(基址 /safetyEval/regulator/cockpit

# 路径 对应板块 主数据源
1 GET /qualification-overview 资质全生命周期管理 org_infoorg_personnelIndustryEnum
2 GET /kpi 核心KPI仅开展评价率 eval_projecteval_risk_analysis
3 GET /region-distribution 区域地图分布 eval_projectorg_info
4 GET /process-overview 执业全过程管控 + 项目流程 8 个节点(复用 EvalProjectNodeOverviewAssembler+ eval_project
5 GET /eval-type-trend 评价类型趋势 eval_projectinsp_notice
6 GET /review-summary 复盘评估改进提效 insp_noticeeval_project
7 GET /project-monitor 项目实时监控 eval_projecteval_project_process_waring、复用 selectRegulatorSurveyStat

二、各接口详细设计

1. 资质全生命周期管理 qualification-overview

  • 入参year(可选,默认当前年)。
  • 出参lifecycleStats{newFilingOrgCount, currentFilingOrgCount, logoutOrgCount, totalFilingOrgCount, exitedEvaluatorCount, currentEvaluatorCount}progress{filingCompleteRate, bizActiveRate, newGrowthRate}industryList[{industryCode, industryName, orgCount, typeCount}]。
  • 边界:仅机构/人员/资质维度;不含项目与风险。
  • 数据源org_infofiling_record_status_codecreate_timedistrict_codesafety_industry_category_code)、org_personnelperson_type_code='2' 专职评价师employment_status_code 1在职/2离职eval_project(计算开展业务率:有在监项目的机构数 ÷ 当前备案机构数)、IndustryEnum(行业字典)。
  • 业务逻辑
    • currentFilingOrgCount = filing_record_status_code=1(已备案)机构数;newFilingOrgCount = 同上且 create_time 落在 yeartotalFilingOrgCount = 全部机构数;logoutOrgCount = 当前字典无「注销」状态,暂置 0(待补来源)。
    • 评价师按 person_type_code='2'employment_status_code 区分在职/离职计数。
    • industryListsafety_industry_category_code 分组(支持单值或逗号分隔多值)。
  • 已知缺口logoutOrgCount 无「注销」状态,需后续补数据源。

2. 核心KPI kpi

  • 入参cycleyear|quarter|month默认 yearyear(可选)。
  • 出参items[{code, name, value, yoy}]。
  • 边界:仅提供「备案项目开展评价率」(现有数据可支撑);不提供「企业评价项目合格率」(无合格状态字段)、「隐患整改率」(无隐患表)。
  • 数据源eval_projectis_statutory=1)、eval_risk_analysis(风险分析已建立=已开展评价)。
  • 业务逻辑:分母=法定项目数;分子=存在 eval_risk_analysis 的项目数;value=率值;yoy=当前周期率−上一周期率(百分点)。

3. 区域地图分布 region-distribution

  • 入参:无。
  • 出参list[{districtCode, districtName, evalProjectCount, filingOrgCount}]summary{totalEvalProject, totalFilingOrg}。
  • 边界:仅「评价项目数」「备案机构数」两维度;隐患/整改率无数据源,前端可用项目数替代。
  • 数据源eval_project.district_code(法定项目按区县计数)、org_info.district_code(已备案机构按区县计数)。
  • 业务逻辑:两路按 district_code 分组后按区县编码对齐,缺侧补 0。

4. 执业全过程管控 + 项目流程 process-overview

  • 入参:无。
  • 出参nodes[{nodeCode, nodeName, totalCount, pendingCount}]。
  • 边界totalCount=到达该节点项目数(状态≠未开始);pendingCount=未开始(待办)项目数。覆盖 8 个真实节点(风险分析/合同签订/成立项目组/现场勘查/过程管控/报告草稿/内审/技审);大屏额外的「初勘/从业告知/编制检查表/制定工作计划/归档」无独立实体,由前端并入相邻节点或留空。
  • 数据源:复用 EvalProjectNodeOverviewAssembler.buildForRegulator(projectId) 逐项目取节点状态,再全局累加。
  • 业务逻辑:遍历法定项目,对每个节点累计 reached/pendingstatusName≠「未开始」即 reached否则 pending

5. 评价类型趋势 eval-type-trend

  • 入参periodyear|quarter|month必填year(可选)。
  • 出参buckets[时间桶]series[{evalTypeCode, evalTypeName, projectCounts[], inspCounts[]}]。
  • 边界projectCounts 来自 eval_projecteval_type_code+时间桶;inspCounts 来自 insp_noticeproject_id 关联 eval_projecteval_type_code+时间桶。
  • 数据源eval_project.eval_type_code/create_timeinsp_notice.create_time/project_id
  • 业务逻辑:先按项目建 projectId→evalTypeCode 映射;项目按创建时间入桶,监督检查按创建时间入桶(仅统计能关联到项目的检查)。

6. 复盘评估改进提效 review-summary

  • 入参year(可选,默认当前年)。
  • 出参stats{inspCount, onsiteCheckCount(项目过程检查), qualKeepCount(资质保持检查), specialCount(专项检查), checkedOrgCount, foundProblemCount(resultCode=2/3)}pie[{OVERDUE 超期未完成数, PUNISH 监管处罚数}]。
  • 边界:基于 insp_notice 真实字段(insp_type_code = PROJECT_PROCESS/QUAL_KEEP/SPECIALresult_code 1未发现问题/2责令整改/3转入风险预警。原大屏 pie 中的「现场确认风险隐患数/复查评估报告数/项目主要负责人变更数」无现成数据源,本次仅输出可用的 OVERDUE、PUNISH 两项。
  • 数据源insp_noticeeval_projectplan_end_date 逾期、未归档)。
  • 业务逻辑:检查类按 insp_type_coderesult_code 分组;OVERDUE=法定未归档且 plan_end_date 早于今日;PUNISH=result_code=3 检查数。

7. 项目实时监控 project-monitor

  • 入参month可选yyyy-MM默认当前月
  • 出参monitor{activeProjectCount, normalExecCount, warningCount, monthPlanFinishCount}survey{noticeArchived, noticeAbnormal, clockInNormal, clockInAbnormal}。
  • 边界
    • activeProjectCount=法定项目数;normalExecCount=clock_in_status='NORMAL'warningCount=存在过程预警的项目数(真实计算,替代原硬编码 0monthPlanFinishCount=plan_end_date 落在 month 的项目数。
    • survey 四项复用既有聚合 SQL EvalProjectMapper.selectRegulatorSurveyStat()(告知书/打卡数据源正确性);监控/预警/计划完成数为本次新实现。
  • 数据源eval_projecteval_project_process_waringeval_survey_attach(经既有 Mapper
  • 业务逻辑:遍历法定项目计数;warningCountEvalProjectProcessWaringGateway.checkProjectHasWaring(projectId)

三、实现要点与性能建议

  • 聚合方式:监管端无机构上下文,Gateway.page() 不强制 org 过滤Executor 以较大 pageSize 拉取全量后在内存聚合,避免 N+1 与脆弱手写 SQL。
  • 缓存:大屏建议对 7 个接口加 30~60s 短 TTL 缓存,降低 DB 压力。
  • 索引建议eval_project(is_statutory, district_code, eval_type_code, create_time, plan_end_date, clock_in_status)insp_notice(insp_type_code, result_code, create_time, project_id, org_id)org_info(filing_record_status_code, district_code)
  • 故障隔离7 个接口相互独立,单接口异常不影响其余面板。

四、已剔除(无现有数据源)

  • risk-overview(资质备案类失信统计、违法触发饼图)—— RegulatorRiskCenterController 为内存 Mock缺信/违法实体。
  • KPI「企业评价项目合格率」「隐患整改率」——缺合格状态字段与隐患表。

五、新增文件清单

  • safety-eval-adapter/.../web/regulator/RegulatorCockpitController.java(新 Controller
  • safety-eval-client/.../api/regulator/RegulatorCockpitApi.java(新 Api
  • safety-eval-client/.../co/regulator/cockpit/*.java7 个 CO
  • safety-eval-app/.../executor/regulator/RegulatorCockpitExecutor.java(新 Executor聚合逻辑