diff --git a/api/app/lib/controllers/control/data.js b/api/app/lib/controllers/control/data.js
index f894575..a52223b 100644
--- a/api/app/lib/controllers/control/data.js
+++ b/api/app/lib/controllers/control/data.js
@@ -336,7 +336,7 @@ async function getLatestDynamic(ctx) {
}
if (d.emailSendId) {
notice.push({
- userName: userPepRes.find(u => d.emailSendLog.toPepUserIds.indexOf(u.id) != -1),
+ userName: userPepRes.filter(u => d.emailSendLog.toPepUserIds.indexOf(u.id) != -1),
projectName,
...d.emailSendLog.dataValues
});
diff --git a/api/app/lib/controllers/push/config.js b/api/app/lib/controllers/push/config.js
index 21c630a..8e64b37 100644
--- a/api/app/lib/controllers/push/config.js
+++ b/api/app/lib/controllers/push/config.js
@@ -171,6 +171,21 @@ async function edit (ctx) {
name, pomsProjectId, alarmType, receiverPepUserId, timeType, disable,
strucId, tactics, tacticsParams
}
+
+ let repeatOption = {
+ where: {
+ name,
+ del: false,
+ }
+ }
+ if (pushId) {
+ repeatOption.where.id = { $ne: pushId }
+ }
+ let repeatRes = await models.AlarmPushConfig.findOne(repeatOption)
+ if (repeatRes) {
+ throw `已有名称为[${name}]的同名策略`
+ }
+
if (pushId) {
await models.AlarmPushConfig.update(storageData, {
where: {
diff --git a/web/client/src/sections/control/containers/control.jsx b/web/client/src/sections/control/containers/control.jsx
index 92072cc..54e12db 100644
--- a/web/client/src/sections/control/containers/control.jsx
+++ b/web/client/src/sections/control/containers/control.jsx
@@ -8,6 +8,7 @@ import repairFQA from '../../means/containers/repairFQA';
import { Setup, OutHidden } from "$components";
import ReactECharts from 'echarts-for-react';
import moment from "moment";
+import { log } from 'ezuikit-js';
let newScrollbar;
let overviewScrollbar;
@@ -52,6 +53,7 @@ const Control = (props) => {
const exhibition = useRef({ workbench: [], statistical: [] }) //页面结构
const FormApi = useRef()
+ // const query={ limit: 10, page: 0, projectCorrelationId: '', types: '1,2,3,4' } //最新动态
// websocket 使用测试
useEffect(() => {
@@ -87,7 +89,6 @@ const Control = (props) => {
})
-
}, [])
useEffect(() => {
@@ -154,13 +155,12 @@ const Control = (props) => {
})
}, [pepProjectId, projectId])
-
+ // console.log(exhibition?.current?.dynamic);
useEffect(() => {
//查询最新动态
if (exhibition?.current?.dynamic?.length > 0) {
dispatch(control.getLatestDynamic({ ...query, projectCorrelationId: pepProjectId })).then(res => {
- console.log(res.payload.data);
- let data = []
+ let data = querydata
if (res.success) {
if (exhibition?.current?.dynamic?.find(v => v.key == 'discovery')) {
res.payload.data?.appear?.map(v => data.push({
@@ -182,6 +182,18 @@ const Control = (props) => {
// confirmContent:v.confirmContent,
}))
}
+ if (exhibition?.current?.dynamic?.find(v => v.key == 'notice')) {
+ res.payload.data?.notice?.map(v => data.push({
+ seed: 'notice',
+ time: v.time,
+ project: v.projectName,
+ userName: v.userName?.map(u => u.name),
+ alarmPushConfig: v.alarmPushConfig?.name,
+ tactics: v.tactics,
+ interval: v.tacticsParams?.interval,
+ deviceProportion: v.tacticsParams?.deviceProportion,
+ }))
+ }
data.sort((a, b) => {
if (moment(a.time).isBefore(b.time)) {
return 1
@@ -189,12 +201,21 @@ const Control = (props) => {
return -1
}
})
- console.log(data);
setQueryData(data)
}
})
- } else {
- setQueryData([])
+ }
+
+ const line = document.getElementById("line")
+ const news = document.getElementById("news")
+ if (line && news) {
+ news.onscroll = () => {
+ // console.log(news.scrollTop)
+ // console.log(line.clientHeight)
+ if ((line.clientHeight - 600) < news.scrollTop) {
+ setQuery({ ...query, page: query.page + 1 })
+ }
+ }
}
}, [pepProjectId, query, exhibition.current])
@@ -388,7 +409,7 @@ const Control = (props) => {
exhibition.current = { ...exhibition.current, [title]: TableDisplay }
setTableSetup([{ list: data }])
}
- console.log(memberList)
+
return (
<>
@@ -920,31 +941,42 @@ const Control = (props) => {
-
- {querydata?.map((v, index) => {
- let title = v.seed == 'discovery' ?
- v.project + '项目' + v.sources + v.type :
- v.seed == 'confirm' ?
- v.userName + '确认并关闭' + v.project + v.sources + v.type + '的问题' : ""
- return (
-
-
-
- {title}
-
-
-
- )
- })}
-
+
+
+ {querydata?.map((v, index) => {
+ let title = ''
+ if (v.seed == 'discovery') {
+ title = v.project + v.sources + ',诊断为' + v.type
+ } else if (v.seed == 'confirm') {
+ title = v.userName + '确认并关闭' + v.project + v.sources + v.type + '的问题'
+ } else {
+ title = '【信鸽-' + v.alarmPushConfig + '】已邮件通知' +
+ v.userName?.map((u, i) => (i > 0 ? ',' + u : u)) + '【' + v.project + '】【' +
+ (v.tactics == 'immediately' ?
+ '发现在' + v.interval + '分钟内,有告警源新增' :
+ (v.tactics == 'continue' ? '告警源持续产生时间超过' + v.interval + '分钟' : '异常设备数量达到项目或结构物内设备总数量的' +
+ v.deviceProportion + '%,且持续时长超过' + v.interval + '小时' + '】-【' + v.time + '】'))
+ }
+ return (
+
+
+
+ {title}
+
+
+
+ )
+ })}
+
+
{/* 我常用的工具 */}
diff --git a/web/client/src/sections/problem/components/tableData.jsx b/web/client/src/sections/problem/components/tableData.jsx
index 6b2120e..a3780db 100644
--- a/web/client/src/sections/problem/components/tableData.jsx
+++ b/web/client/src/sections/problem/components/tableData.jsx
@@ -138,8 +138,8 @@ const TableData = ({ route, dispatch, actions, collectData, setSetup, exhibition
}, [query, search, pepProjectId])
- console.log(exhibition);
- console.log(tableData);
+ // console.log(exhibition);
+ // console.log(tableData);
return (
<>
diff --git a/web/client/src/sections/service/components/pushModal.jsx b/web/client/src/sections/service/components/pushModal.jsx
index d271001..823a436 100644
--- a/web/client/src/sections/service/components/pushModal.jsx
+++ b/web/client/src/sections/service/components/pushModal.jsx
@@ -123,6 +123,11 @@ function pushModal (props) {
delete obj.interval2
delete obj.interval3
delete obj.deviceProportion
+ dispatch(service.postPush({ pushId: editObj.id, ...obj, msg: '编辑推送配置' })).then((res) => {//获取项企(PEP)全部部门及其下用户
+ if (res.success) {
+ close();
+ }
+ })
} else {
Notification.error({
content: '即时推送时间不能大于1440分钟',
@@ -153,6 +158,11 @@ function pushModal (props) {
delete obj.interval2
delete obj.interval3
delete obj.deviceProportion
+ dispatch(service.postPush({ pushId: editObj.id, ...obj, msg: '编辑推送配置' })).then((res) => {//获取项企(PEP)全部部门及其下用户
+ if (res.success) {
+ close();
+ }
+ })
} else {
Notification.error({
content: '持续时长推送时间不能大于1440分钟',
@@ -183,6 +193,11 @@ function pushModal (props) {
delete obj.interval2
delete obj.interval3
delete obj.deviceProportion
+ dispatch(service.postPush({ pushId: editObj.id, ...obj, msg: '编辑推送配置' })).then((res) => {//获取项企(PEP)全部部门及其下用户
+ if (res.success) {
+ close();
+ }
+ })
} else if (obj.interval3 <= 720 && obj.deviceProportion > 100) {
Notification.error({
content: '异常率推送异常率不能超过100%',
@@ -224,11 +239,6 @@ function pushModal (props) {
})
}
}
- dispatch(service.postPush({ pushId: editObj.id, ...obj, msg: '编辑推送配置' })).then((res) => {//获取项企(PEP)全部部门及其下用户
- if (res.success) {
- close();
- }
- })
}
else {
let obj = JSON.parse(JSON.stringify(values))
@@ -247,6 +257,11 @@ function pushModal (props) {
delete obj.interval2
delete obj.interval3
delete obj.deviceProportion
+ dispatch(service.postPush({ ...obj, msg: '新增推送配置' })).then((res) => {//获取项企(PEP)全部部门及其下用户
+ if (res.success) {
+ close();
+ }
+ })
} else {
Notification.error({
content: '即时推送时间不能大于1440分钟',
@@ -277,6 +292,11 @@ function pushModal (props) {
delete obj.interval2
delete obj.interval3
delete obj.deviceProportion
+ dispatch(service.postPush({ ...obj, msg: '新增推送配置' })).then((res) => {//获取项企(PEP)全部部门及其下用户
+ if (res.success) {
+ close();
+ }
+ })
} else {
Notification.error({
content: '持续时长推送时间不能大于1440分钟',
@@ -307,6 +327,11 @@ function pushModal (props) {
delete obj.interval2
delete obj.interval3
delete obj.deviceProportion
+ dispatch(service.postPush({ ...obj, msg: '新增推送配置' })).then((res) => {//获取项企(PEP)全部部门及其下用户
+ if (res.success) {
+ close();
+ }
+ })
} else if (obj.interval3 <= 720 && obj.deviceProportion > 100) {
Notification.error({
content: '异常率推送异常率不能超过100%',
@@ -348,11 +373,6 @@ function pushModal (props) {
})
}
}
- dispatch(service.postPush({ ...obj, msg: '新增推送配置' })).then((res) => {//获取项企(PEP)全部部门及其下用户
- if (res.success) {
- close();
- }
- })
}
})
}
@@ -414,6 +434,8 @@ function pushModal (props) {
{
]
function expandRowRender (record, index) {
return (
-
+
结构物:
{
record.structure?.map((item, index) => {
return (
-
+
{item.name}
-
+
)
})
}
@@ -558,20 +561,17 @@ const EmPush = (props) => {
placeholder="请输入或选择关键词"
/>
- 数据中断
- 数据异常
- 策略命中
- 视频异常
- 应用异常
- 设备异常
+ 即时推送机制
+ 持续时长推送机制
+ 异常率推送机制