风险预警中心

dev
huwei 2026-07-15 14:59:32 +08:00
parent 38362039d1
commit 5846e058a6
7 changed files with 41 additions and 52 deletions

View File

@ -133,12 +133,7 @@ paths:
- 监管端-风险预警中心
summary: 分页查询预警消息
description: |
消息列表分页查询,支持搜索栏与 Tab 筛选。
Tab 对应关系:
- 全部消息:`filterKind=all` 或不传
- 紧急:`filterKind=urgent`
- 未读/未处理:`filterKind=unread`
消息列表分页查询,支持搜索栏与筛选条件。
operationId: regulatorRiskPage
parameters:
- name: keyword
@ -183,7 +178,7 @@ paths:
data:
- id: W-2026-008
warningType: 证书过期
level: urgent
level: 紧急
levelName: 紧急
sourceModule: 评价师信息管理
sourceFields:
@ -234,7 +229,7 @@ paths:
data:
id: W-2026-008
warningType: 证书过期
level: urgent
level: 紧急
levelName: 紧急
sourceModule: 评价师信息管理
sourceFields:
@ -261,14 +256,14 @@ components:
levelParam:
name: level
in: query
description: 等级编码
description: 预警等级
schema:
type: string
enum:
- urgent
- important
- normal
default: urgent
- 紧急
- 重要
- 一般
default: 紧急
currentParam:
name: current
in: query
@ -462,11 +457,11 @@ components:
- 信息变更
level:
type: string
description: 等级编码
description: 预警等级
enum:
- urgent
- important
- normal
- 紧急
- 重要
- 一般
levelName:
type: string
description: 等级名称

View File

@ -13,7 +13,7 @@
|----------|------|------|
| 顶部 4 个统计卡片 + 处理动作说明 | `GET /overview` | 页面首屏统计区 |
| 高优先级消息区块 | `GET /high-priority-alerts` | 支持等级/类型/来源等筛选 |
| 搜索栏 + Tab全部/紧急/未读)+ 消息列表 | `GET /page` | 分页 + 筛选 |
| search-bar + 筛选 + 消息列表 | `GET /page` | 分页 + 筛选 |
| 处理 / 发函 / 闭环 / 提醒 / 审核 | `POST /handle` | 更新预警状态 |
---
@ -70,7 +70,7 @@
|------|------|------|
| id | String | 预警编号,如 W-2026-008 |
| warningType | String | 证书过期 / 证书临期 / 社保异常 / 人员离职 / 信息变更 |
| level | String | urgent / important / normal |
| level | String | 紧急 / 重要 / 一般 |
| levelName | String | 紧急 / 重要 / 一般 |
| sourceModule | String | 来源模块名称 |
| sourceFields | List\<String\> | 来源字段标签 |
@ -116,7 +116,7 @@
| 参数 | 必填 | 默认 | 说明 |
|------|------|------|------|
| level | 否 | urgent | 等级urgent / important / normal |
| level | 否 | 紧急 | 预警等级:紧急 / 重要 / 一般 |
| warningType | 否 | — | 证书过期、证书临期、社保异常、人员离职、信息变更 |
| sourceModule | 否 | — | 来源模块,如 评价师信息管理 |
| keyword | 否 | — | 标题/预警编号/预警内容关键字 |
@ -127,8 +127,8 @@
```
GET /safetyEval/regulator/risk-center/high-priority-alerts
GET /safetyEval/regulator/risk-center/high-priority-alerts?level=urgent&onlyUntreated=true&limit=2
GET /safetyEval/regulator/risk-center/high-priority-alerts?level=important&limit=5
GET /safetyEval/regulator/risk-center/high-priority-alerts?level=紧急&onlyUntreated=true&limit=2
GET /safetyEval/regulator/risk-center/high-priority-alerts?level=重要&limit=5
```
**响应示例**
@ -170,7 +170,7 @@ GET /safetyEval/regulator/risk-center/high-priority-alerts?level=important&limit
|------|------|------|
| keyword | 否 | 机构/人员/项目/预警编号 |
| warningType | 否 | 证书过期、证书临期、社保异常、人员离职、信息变更 |
| level | 否 | urgent / important / normal |
| level | 否 | 紧急、重要、一般 |
| processStatus | 否 | 未处理、处理中、已处理 |
| current | 否 | 当前页 |
| size | 否 | 每页条数 |
@ -178,7 +178,7 @@ GET /safetyEval/regulator/risk-center/high-priority-alerts?level=important&limit
**请求示例**
```
GET /safetyEval/regulator/risk-center/page?level=urgent&current=1&size=10
GET /safetyEval/regulator/risk-center/page?level=紧急&current=1&size=10
GET /safetyEval/regulator/risk-center/page?keyword=张建国&warningType=证书过期
GET /safetyEval/regulator/risk-center/page?processStatus=未处理&current=1&size=10
```
@ -194,7 +194,7 @@ GET /safetyEval/regulator/risk-center/page?processStatus=未处理&current=1&siz
{
"id": "W-2026-008",
"warningType": "证书过期",
"level": "urgent",
"level": "紧急",
"levelName": "紧急",
"sourceModule": "评价师信息管理",
"sourceFields": ["人员姓名", "证书类型", "有效期至"],
@ -258,7 +258,7 @@ const overview = await fetch(`${BASE}/overview`).then(r => r.json());
const alerts = await fetch(`${BASE}/high-priority-alerts`).then(r => r.json());
// 3. Tab 切换 / 搜索
const list = await fetch(`${BASE}/page?filterKind=unread&current=1&size=10`).then(r => r.json());
const list = await fetch(`${BASE}/page?level=紧急&current=1&size=10`).then(r => r.json());
// 4. 处置
await fetch(`${BASE}/handle`, {

View File

@ -36,28 +36,28 @@ public class RegulatorRiskCenterController {
@PostConstruct
public void initMockData() {
messages.clear();
messages.add(message("W-2026-008", "证书过期", "urgent", "评价师信息管理",
messages.add(message("W-2026-008", "证书过期", "紧急", "评价师信息管理",
Arrays.asList("人员姓名", "证书类型", "有效期至"),
"张建国一级安全评价师证书已过期,机构未上传延续材料。", "未处理", "evaluator"));
messages.add(message("W-2026-007", "社保异常", "urgent", "资质保持监控",
messages.add(message("W-2026-007", "社保异常", "紧急", "资质保持监控",
Arrays.asList("人员姓名", "所在机构", "社保缴纳单位"),
"王丽萍在恒安安全评价和渝安风险评估同时缴纳社保。", "未处理", "qual-monitor"));
messages.add(message("W-2026-006", "证书临期", "important", "资质保持监控",
messages.add(message("W-2026-006", "证书临期", "重要", "资质保持监控",
Arrays.asList("证书有效期", "预警阈值"),
"陈华安全评价师二级证书将于 2026-08-01 到期,距到期不足 30 天。", "处理中", "evaluator"));
messages.add(message("W-2026-005", "信息变更", "normal", "备案变更管理",
messages.add(message("W-2026-005", "信息变更", "一般", "备案变更管理",
Arrays.asList("注册地址", "变更材料"),
"恒安安全评价注册地址变更材料超过 5 个工作日未确认。", "待确认", "qual-change"));
messages.add(message("W-2026-004", "人员离职", "important", "评价师信息管理",
messages.add(message("W-2026-004", "人员离职", "重要", "评价师信息管理",
Arrays.asList("人员姓名", "离职日期"),
"某安全评价师已离职但仍在机构备案名单中。", "未处理", "evaluator"));
messages.add(message("W-2026-003", "人员离职", "normal", "评价师信息管理",
messages.add(message("W-2026-003", "人员离职", "一般", "评价师信息管理",
Arrays.asList("人员姓名", "离职日期"),
"某安全评价师已提交离职申请,资质系统未更新。", "待确认", "evaluator"));
messages.add(message("W-2026-002", "证书过期", "urgent", "评价师信息管理",
messages.add(message("W-2026-002", "证书过期", "紧急", "评价师信息管理",
Arrays.asList("人员姓名", "证书类型", "有效期至"),
"李明华注册安全工程师证书已过期。", "已闭环", "evaluator"));
messages.add(message("W-2026-001", "社保异常", "urgent", "资质保持监控",
messages.add(message("W-2026-001", "社保异常", "紧急", "资质保持监控",
Arrays.asList("人员姓名", "社保缴纳单位"),
"赵磊社保缴纳单位与备案机构不一致。", "已发函", "qual-monitor"));
}
@ -115,8 +115,8 @@ public class RegulatorRiskCenterController {
private List<RegulatorRiskOverviewCO.StatCardCO> buildStats() {
long untreated = messages.stream().filter(m -> isUntreated(m.getStatus())).count();
long urgent = messages.stream().filter(m -> "urgent".equals(m.getLevel())).count();
long important = messages.stream().filter(m -> "important".equals(m.getLevel())).count();
long urgent = messages.stream().filter(m -> "紧急".equals(m.getLevel())).count();
long important = messages.stream().filter(m -> "重要".equals(m.getLevel())).count();
long handledToday = messages.stream().filter(m -> isHandledToday(m.getStatus())).count();
return Arrays.asList(
stat("未处理预警", String.valueOf(untreated), "需监管人员处置"),
@ -180,10 +180,10 @@ public class RegulatorRiskCenterController {
}
private String alertLevel(String level) {
if ("urgent".equals(level)) {
if ("紧急".equals(level)) {
return "danger";
}
if ("important".equals(level)) {
if ("重要".equals(level)) {
return "warning";
}
return "info";
@ -274,12 +274,6 @@ public class RegulatorRiskCenterController {
}
private String levelName(String level) {
if ("urgent".equals(level)) {
return "紧急";
}
if ("important".equals(level)) {
return "重要";
}
return "一般";
return level;
}
}

View File

@ -17,7 +17,7 @@ public class RegulatorRiskMessageCO {
@ApiModelProperty("预警类型")
private String warningType;
@ApiModelProperty("等级编码urgent/important/normal")
@ApiModelProperty("预警等级")
private String level;
@ApiModelProperty("等级名称:紧急/重要/一般")

View File

@ -18,7 +18,7 @@ public class RegulatorRiskMessagePageQuery extends BasePageQuery {
@ApiModelProperty(value = "预警类型", allowableValues = "证书过期,证书临期,社保异常,人员离职,信息变更")
private String warningType;
@ApiModelProperty(value = "预警等级", allowableValues = "urgent,important,normal")
@ApiModelProperty(value = "预警等级", allowableValues = "紧急,重要,一般")
private String level;
@ApiModelProperty(value = "处理状态", allowableValues = "未处理,处理中,已处理")

View File

@ -9,8 +9,8 @@ import lombok.Data;
@Data
public class RegulatorRiskPriorityAlertQuery {
@ApiModelProperty(value = "等级urgent/important/normal默认 urgent", allowableValues = "urgent,important,normal")
private String level = "urgent";
@ApiModelProperty(value = "预警等级", allowableValues = "紧急,重要,一般")
private String level = "紧急";
@ApiModelProperty(value = "预警类型", allowableValues = "证书过期,证书临期,社保异常,人员离职,信息变更")
private String warningType;

View File

@ -7,9 +7,9 @@ import java.util.Objects;
*/
public enum RegulatorRiskLevelEnum {
URGENT("urgent", "紧急"),
IMPORTANT("important", "重要"),
NORMAL("normal", "一般"),
URGENT("紧急", "紧急"),
IMPORTANT("重要", "重要"),
NORMAL("一般", "一般"),
;
private final String code;