风险预警中心
parent
7a2639438f
commit
e8777e9f7c
|
|
@ -73,10 +73,10 @@ paths:
|
|||
type: string
|
||||
enum:
|
||||
- 证书过期
|
||||
- 证书临期
|
||||
- 社保异常
|
||||
- 人员离职
|
||||
- 信息变更
|
||||
- 项目超期
|
||||
- 账号限制
|
||||
- name: sourceModule
|
||||
in: query
|
||||
description: 来源模块
|
||||
|
|
@ -153,21 +153,20 @@ paths:
|
|||
type: string
|
||||
enum:
|
||||
- 证书过期
|
||||
- 证书临期
|
||||
- 社保异常
|
||||
- 人员离职
|
||||
- 信息变更
|
||||
- 项目超期
|
||||
- 账号限制
|
||||
- $ref: '#/components/parameters/levelParam'
|
||||
- name: filterKind
|
||||
- name: processStatus
|
||||
in: query
|
||||
description: Tab 筛选
|
||||
description: 处理状态
|
||||
schema:
|
||||
type: string
|
||||
enum:
|
||||
- all
|
||||
- urgent
|
||||
- unread
|
||||
default: all
|
||||
- 未处理
|
||||
- 处理中
|
||||
- 已处理
|
||||
- $ref: '#/components/parameters/currentParam'
|
||||
- $ref: '#/components/parameters/sizeParam'
|
||||
responses:
|
||||
|
|
@ -457,10 +456,10 @@ components:
|
|||
description: 预警类型
|
||||
enum:
|
||||
- 证书过期
|
||||
- 证书临期
|
||||
- 社保异常
|
||||
- 人员离职
|
||||
- 信息变更
|
||||
- 项目超期
|
||||
- 账号限制
|
||||
level:
|
||||
type: string
|
||||
description: 等级编码
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@
|
|||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| id | String | 预警编号,如 W-2026-008 |
|
||||
| warningType | String | 证书过期 / 社保异常 / 信息变更 / 项目超期 / 账号限制 |
|
||||
| warningType | String | 证书过期 / 证书临期 / 社保异常 / 人员离职 / 信息变更 |
|
||||
| level | String | urgent / important / normal |
|
||||
| levelName | String | 紧急 / 重要 / 一般 |
|
||||
| sourceModule | String | 来源模块名称 |
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
| 参数 | 必填 | 默认 | 说明 |
|
||||
|------|------|------|------|
|
||||
| level | 否 | urgent | 等级:urgent / important / normal |
|
||||
| warningType | 否 | — | 证书过期、社保异常、信息变更、项目超期、账号限制 |
|
||||
| warningType | 否 | — | 证书过期、证书临期、社保异常、人员离职、信息变更 |
|
||||
| sourceModule | 否 | — | 来源模块,如 评价师信息管理 |
|
||||
| keyword | 否 | — | 标题/预警编号/预警内容关键字 |
|
||||
| onlyUntreated | 否 | true | 仅未处理(未处理/待确认/处理中) |
|
||||
|
|
@ -169,25 +169,18 @@ GET /safetyEval/regulator/risk-center/high-priority-alerts?level=important&limit
|
|||
| 参数 | 必填 | 说明 |
|
||||
|------|------|------|
|
||||
| keyword | 否 | 机构/人员/项目/预警编号 |
|
||||
| warningType | 否 | 证书过期、社保异常、信息变更、项目超期、账号限制 |
|
||||
| warningType | 否 | 证书过期、证书临期、社保异常、人员离职、信息变更 |
|
||||
| level | 否 | urgent / important / normal |
|
||||
| filterKind | 否 | Tab 筛选:`all`(默认)/ `urgent` / `unread` |
|
||||
| processStatus | 否 | 未处理、处理中、已处理 |
|
||||
| current | 否 | 当前页 |
|
||||
| size | 否 | 每页条数 |
|
||||
|
||||
**Tab 对应关系**(原型页右上角):
|
||||
|
||||
| Tab | filterKind |
|
||||
|-----|------------|
|
||||
| 全部消息 | all 或不传 |
|
||||
| 紧急 | urgent |
|
||||
| 未读/未处理 | unread |
|
||||
|
||||
**请求示例**:
|
||||
|
||||
```
|
||||
GET /safetyEval/regulator/risk-center/page?filterKind=urgent¤t=1&size=10
|
||||
GET /safetyEval/regulator/risk-center/page?level=urgent¤t=1&size=10
|
||||
GET /safetyEval/regulator/risk-center/page?keyword=张建国&warningType=证书过期
|
||||
GET /safetyEval/regulator/risk-center/page?processStatus=未处理¤t=1&size=10
|
||||
```
|
||||
|
||||
**响应示例**:
|
||||
|
|
|
|||
|
|
@ -10,6 +10,9 @@ import org.qinan.safetyeval.client.dto.SingleResponse;
|
|||
import org.qinan.safetyeval.client.dto.regulator.RegulatorRiskHandleCmd;
|
||||
import org.qinan.safetyeval.client.dto.regulator.RegulatorRiskMessagePageQuery;
|
||||
import org.qinan.safetyeval.client.dto.regulator.RegulatorRiskPriorityAlertQuery;
|
||||
import org.qinan.safetyeval.client.enums.regulator.RegulatorRiskLevelEnum;
|
||||
import org.qinan.safetyeval.client.enums.regulator.RegulatorRiskProcessStatusEnum;
|
||||
import org.qinan.safetyeval.client.enums.regulator.RegulatorRiskWarningTypeEnum;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
|
@ -45,12 +48,12 @@ public class RegulatorRiskCenterController {
|
|||
messages.add(message("W-2026-005", "信息变更", "normal", "备案变更管理",
|
||||
Arrays.asList("注册地址", "变更材料"),
|
||||
"恒安安全评价注册地址变更材料超过 5 个工作日未确认。", "待确认", "qual-change"));
|
||||
messages.add(message("W-2026-004", "项目超期", "important", "项目过程控制",
|
||||
Arrays.asList("项目名称", "计划完成日期"),
|
||||
"某化工项目安全评价报告超过计划节点 7 天未完成。", "未处理", "qual-monitor"));
|
||||
messages.add(message("W-2026-003", "账号限制", "normal", "机构账号管理",
|
||||
Arrays.asList("机构名称", "账号状态"),
|
||||
"渝安风险评估中心账号处于禁用状态,仍有新业务备案尝试。", "待确认", "institution-account"));
|
||||
messages.add(message("W-2026-004", "人员离职", "important", "评价师信息管理",
|
||||
Arrays.asList("人员姓名", "离职日期"),
|
||||
"某安全评价师已离职但仍在机构备案名单中。", "未处理", "evaluator"));
|
||||
messages.add(message("W-2026-003", "人员离职", "normal", "评价师信息管理",
|
||||
Arrays.asList("人员姓名", "离职日期"),
|
||||
"某安全评价师已提交离职申请,资质系统未更新。", "待确认", "evaluator"));
|
||||
messages.add(message("W-2026-002", "证书过期", "urgent", "评价师信息管理",
|
||||
Arrays.asList("人员姓名", "证书类型", "有效期至"),
|
||||
"李明华注册安全工程师证书已过期。", "已闭环", "evaluator"));
|
||||
|
|
@ -200,17 +203,25 @@ public class RegulatorRiskCenterController {
|
|||
if (StringUtils.hasText(query.getLevel()) && !query.getLevel().equals(item.getLevel())) {
|
||||
return false;
|
||||
}
|
||||
if (StringUtils.hasText(query.getFilterKind()) && !"all".equals(query.getFilterKind())) {
|
||||
if ("urgent".equals(query.getFilterKind()) && !"urgent".equals(item.getLevel())) {
|
||||
return false;
|
||||
}
|
||||
if ("unread".equals(query.getFilterKind()) && !isUntreated(item.getStatus())) {
|
||||
return false;
|
||||
}
|
||||
if (StringUtils.hasText(query.getProcessStatus()) && !matchProcessStatus(query.getProcessStatus(), item.getStatus())) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean matchProcessStatus(String queryStatus, String itemStatus) {
|
||||
if (RegulatorRiskProcessStatusEnum.UNPROCESSED.getName().equals(queryStatus)) {
|
||||
return Arrays.asList("未处理", "待确认").contains(itemStatus);
|
||||
}
|
||||
if (RegulatorRiskProcessStatusEnum.PROCESSING.getName().equals(queryStatus)) {
|
||||
return "处理中".equals(itemStatus);
|
||||
}
|
||||
if (RegulatorRiskProcessStatusEnum.PROCESSED.getName().equals(queryStatus)) {
|
||||
return Arrays.asList("已闭环", "已发函", "已提醒", "已处置").contains(itemStatus);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private String resolveStatus(RegulatorRiskHandleCmd cmd) {
|
||||
if (StringUtils.hasText(cmd.getStatus())) {
|
||||
return cmd.getStatus();
|
||||
|
|
|
|||
|
|
@ -15,12 +15,12 @@ public class RegulatorRiskMessagePageQuery extends BasePageQuery {
|
|||
@ApiModelProperty("关键词:机构/人员/项目/预警编号")
|
||||
private String keyword;
|
||||
|
||||
@ApiModelProperty("预警类型:证书过期/社保异常/信息变更/项目超期/账号限制")
|
||||
@ApiModelProperty(value = "预警类型", allowableValues = "证书过期,证书临期,社保异常,人员离职,信息变更")
|
||||
private String warningType;
|
||||
|
||||
@ApiModelProperty("等级:urgent/important/normal")
|
||||
@ApiModelProperty(value = "预警等级", allowableValues = "urgent,important,normal")
|
||||
private String level;
|
||||
|
||||
@ApiModelProperty("Tab筛选:all/urgent/unread")
|
||||
private String filterKind;
|
||||
@ApiModelProperty(value = "处理状态", allowableValues = "未处理,处理中,已处理")
|
||||
private String processStatus;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@ import lombok.Data;
|
|||
@Data
|
||||
public class RegulatorRiskPriorityAlertQuery {
|
||||
|
||||
@ApiModelProperty("等级:urgent/important/normal,默认 urgent")
|
||||
@ApiModelProperty(value = "等级:urgent/important/normal,默认 urgent", allowableValues = "urgent,important,normal")
|
||||
private String level = "urgent";
|
||||
|
||||
@ApiModelProperty("预警类型:证书过期/社保异常/信息变更/项目超期/账号限制")
|
||||
@ApiModelProperty(value = "预警类型", allowableValues = "证书过期,证书临期,社保异常,人员离职,信息变更")
|
||||
private String warningType;
|
||||
|
||||
@ApiModelProperty("来源模块")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,42 @@
|
|||
package org.qinan.safetyeval.client.enums.regulator;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 监管端-风险预警等级
|
||||
*/
|
||||
public enum RegulatorRiskLevelEnum {
|
||||
|
||||
URGENT("urgent", "紧急"),
|
||||
IMPORTANT("important", "重要"),
|
||||
NORMAL("normal", "一般"),
|
||||
;
|
||||
|
||||
private final String code;
|
||||
private final String name;
|
||||
|
||||
RegulatorRiskLevelEnum(String code, String name) {
|
||||
this.code = code;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public static RegulatorRiskLevelEnum ofCode(String code) {
|
||||
if (code == null) {
|
||||
return null;
|
||||
}
|
||||
for (RegulatorRiskLevelEnum item : values()) {
|
||||
if (Objects.equals(item.code, code)) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package org.qinan.safetyeval.client.enums.regulator;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 监管端-风险处理状态
|
||||
*/
|
||||
public enum RegulatorRiskProcessStatusEnum {
|
||||
|
||||
UNPROCESSED("未处理"),
|
||||
PROCESSING("处理中"),
|
||||
PROCESSED("已处理"),
|
||||
;
|
||||
|
||||
private final String name;
|
||||
|
||||
RegulatorRiskProcessStatusEnum(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public static RegulatorRiskProcessStatusEnum ofName(String name) {
|
||||
if (name == null) {
|
||||
return null;
|
||||
}
|
||||
for (RegulatorRiskProcessStatusEnum item : values()) {
|
||||
if (Objects.equals(item.name, name)) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package org.qinan.safetyeval.client.enums.regulator;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 监管端-风险预警类型
|
||||
*/
|
||||
public enum RegulatorRiskWarningTypeEnum {
|
||||
|
||||
CERT_EXPIRED("证书过期"),
|
||||
CERT_EXPIRING("证书临期"),
|
||||
SOCIAL_INSURANCE_ABNORMAL("社保异常"),
|
||||
EMPLOYEE_RESIGNED("人员离职"),
|
||||
INFO_CHANGED("信息变更"),
|
||||
;
|
||||
|
||||
private final String name;
|
||||
|
||||
RegulatorRiskWarningTypeEnum(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public static RegulatorRiskWarningTypeEnum ofName(String name) {
|
||||
if (name == null) {
|
||||
return null;
|
||||
}
|
||||
for (RegulatorRiskWarningTypeEnum item : values()) {
|
||||
if (Objects.equals(item.name, name)) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
spring:
|
||||
spring:
|
||||
web:
|
||||
resources:
|
||||
cache:
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-rspack.2 Frontend_Env[production] Build_Date[2026/7/14 16:52:04] App_Identifier[safetyEval-h5]"><meta charset="UTF-8"/><meta name="renderer" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"/><meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><meta charset="UTF-8" name="referrer" content="strict-origin-when-cross-origin"/><title>大屏</title><script>(function () {
|
||||
<!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-rspack.2 Frontend_Env[production] Build_Date[2026/7/15 11:35:53] App_Identifier[safetyEval-h5]"><meta charset="UTF-8"/><meta name="renderer" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"/><meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><meta charset="UTF-8" name="referrer" content="strict-origin-when-cross-origin"/><title>大屏</title><script>(function () {
|
||||
const APP_ENV = {
|
||||
antd: {
|
||||
'ant-prefix': 'micro-temp',
|
||||
|
|
@ -126,4 +126,4 @@
|
|||
}
|
||||
mergeParams();
|
||||
})();
|
||||
})();</script><script defer="defer" src="/safetyEval-h5/static/js/548.ac3036a0ff72bbda.js"></script><script defer="defer" src="/safetyEval-h5/static/js/551.40cd16b83ccef834.js"></script><script defer="defer" src="/safetyEval-h5/static/js/485.cc16547839dceff2.js"></script><script defer="defer" src="/safetyEval-h5/static/js/main.acbe16f096b75fe9.js"></script><link href="/safetyEval-h5/static/css/main.82ee4667fd2973b4.css" rel="stylesheet"></head><body><noscript>此网页需要开启JavaScript功能。</noscript><div id="root" style="width: 100%; height: 100%; position: relative;overflow-y: auto;"></div><script type="text/javascript">/* @cqsjjb/script 输出当前应用基本信息 */console.log("%c@cqsjjb/scripts@2.0.0-rspack.2 Frontend_Env[production] Build_Date[2026/7/14 16:52:04] App_Identifier[safetyEval-h5] Frontend_Branch[dev] Backend_Branch[<branch-name>]", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body><script src="https://cesium.com/downloads/cesiumjs/releases/1.91/Build/Cesium/Cesium.js"></script><link href="https://cesium.com/downloads/cesiumjs/releases/1.91/Build/Cesium/Widgets/widgets.css" rel="stylesheet"></html>
|
||||
})();</script><script defer="defer" src="/safetyEval-h5/static/js/548.ac3036a0ff72bbda.js"></script><script defer="defer" src="/safetyEval-h5/static/js/551.40cd16b83ccef834.js"></script><script defer="defer" src="/safetyEval-h5/static/js/485.cc16547839dceff2.js"></script><script defer="defer" src="/safetyEval-h5/static/js/main.f98503f3c068bbb9.js"></script><link href="/safetyEval-h5/static/css/main.82ee4667fd2973b4.css" rel="stylesheet"></head><body><noscript>此网页需要开启JavaScript功能。</noscript><div id="root" style="width: 100%; height: 100%; position: relative;overflow-y: auto;"></div><script type="text/javascript">/* @cqsjjb/script 输出当前应用基本信息 */console.log("%c@cqsjjb/scripts@2.0.0-rspack.2 Frontend_Env[production] Build_Date[2026/7/15 11:35:53] App_Identifier[safetyEval-h5] Frontend_Branch[dev_1.0.1] Backend_Branch[<branch-name>]", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body><script src="https://cesium.com/downloads/cesiumjs/releases/1.91/Build/Cesium/Cesium.js"></script><link href="https://cesium.com/downloads/cesiumjs/releases/1.91/Build/Cesium/Widgets/widgets.css" rel="stylesheet"></html>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,4 +1,4 @@
|
|||
<!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-rspack.1 Frontend_Env[production] Build_Date[2026/7/14 17:06:09] App_Identifier[safetyEval]"><meta charset="UTF-8"/><meta name="renderer" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"/><meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><title>--</title><script>(function () {
|
||||
<!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-rspack.1 Frontend_Env[production] Build_Date[2026/7/15 10:50:52] App_Identifier[safetyEval]"><meta charset="UTF-8"/><meta name="renderer" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"/><meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><title>--</title><script>(function () {
|
||||
const APP_ENV = {
|
||||
antd: {
|
||||
'ant-prefix': 'micro-temp',
|
||||
|
|
@ -89,4 +89,4 @@
|
|||
},
|
||||
|
||||
}
|
||||
}</script><script defer="defer" src="/safetyEval/static/js/323.fd0657fd2fffbe7a.js"></script><script defer="defer" src="/safetyEval/static/js/121.ae75e71830bf4ae0.js"></script><script defer="defer" src="/safetyEval/static/js/289.ab5c99a14babc2d4.js"></script><script defer="defer" src="/safetyEval/static/js/main.5a03dc1748bb1352.js"></script><link href="/safetyEval/static/css/main.1d4eeef67f56f89e.css" rel="stylesheet"></head><body><noscript>此网页需要开启JavaScript功能。</noscript><div id="root" style="width: 100%; height: 100%; position: relative;overflow-y: auto"></div><script type="text/javascript">/* @cqsjjb/script 输出当前应用基本信息 */console.log("%c@cqsjjb/scripts@2.0.0-rspack.1 Frontend_Env[production] Build_Date[2026/7/14 17:06:09] App_Identifier[safetyEval] Frontend_Branch[dev] Backend_Branch[dev]", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body></html>
|
||||
}</script><script defer="defer" src="/safetyEval/static/js/323.fd0657fd2fffbe7a.js"></script><script defer="defer" src="/safetyEval/static/js/121.ae75e71830bf4ae0.js"></script><script defer="defer" src="/safetyEval/static/js/289.ab5c99a14babc2d4.js"></script><script defer="defer" src="/safetyEval/static/js/main.1b45652ffb1e8f5c.js"></script><link href="/safetyEval/static/css/main.d4bcd75c2815b66b.css" rel="stylesheet"></head><body><noscript>此网页需要开启JavaScript功能。</noscript><div id="root" style="width: 100%; height: 100%; position: relative;overflow-y: auto"></div><script type="text/javascript">/* @cqsjjb/script 输出当前应用基本信息 */console.log("%c@cqsjjb/scripts@2.0.0-rspack.1 Frontend_Env[production] Build_Date[2026/7/15 10:50:52] App_Identifier[safetyEval] Frontend_Branch[dev_1.0.1] Backend_Branch[dev]", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body></html>
|
||||
|
|
@ -1693,7 +1693,7 @@
|
|||
color: #1e293b;
|
||||
}
|
||||
.qual-monitor .org-info .org-name {
|
||||
font-weight: 500;
|
||||
font-weight: 600;
|
||||
}
|
||||
.qual-monitor .org-info .org-meta {
|
||||
font-size: 0.72rem;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue