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="请输入或选择关键词" /> - 数据中断 - 数据异常 - 策略命中 - 视频异常 - 应用异常 - 设备异常 + 即时推送机制 + 持续时长推送机制 + 异常率推送机制