|  |  | @ -7,27 +7,27 @@ module.exports = function (app, opts) { | 
			
		
	
		
			
				
					|  |  |  |    const { database: anxinyun } = clickHouse.anxinyun.opts.config | 
			
		
	
		
			
				
					|  |  |  |    const alarmHandleStatistics = app.fs.scheduleInit( | 
			
		
	
		
			
				
					|  |  |  |       { | 
			
		
	
		
			
				
					|  |  |  |          interval: '0 58 9 * * *', | 
			
		
	
		
			
				
					|  |  |  |          interval: '0 48 1 ? * MON',//0 48 1 ? * MON 每周一凌晨1点48开始执行
 | 
			
		
	
		
			
				
					|  |  |  |          // immediate: true,
 | 
			
		
	
		
			
				
					|  |  |  |          //proRun: true,
 | 
			
		
	
		
			
				
					|  |  |  |          proRun: true, | 
			
		
	
		
			
				
					|  |  |  |       }, | 
			
		
	
		
			
				
					|  |  |  |       async () => { | 
			
		
	
		
			
				
					|  |  |  |          try { | 
			
		
	
		
			
				
					|  |  |  |             let anxinStruc = await getAxyStructs() | 
			
		
	
		
			
				
					|  |  |  |             let pomsProject = await pomsProjectRange() | 
			
		
	
		
			
				
					|  |  |  |             if (anxinStruc.length) { | 
			
		
	
		
			
				
					|  |  |  |                let dataAlarms = await getDataAlarms(anxinStruc);//数据告警
 | 
			
		
	
		
			
				
					|  |  |  |                let { dataSum, dataMaps } = await getDataAlarms(anxinStruc);//数据告警
 | 
			
		
	
		
			
				
					|  |  |  |                let appAlarms = await getAppAlarms(pomsProject);//应用告警
 | 
			
		
	
		
			
				
					|  |  |  |                let videoAlarms = await getVideoAlarms(anxinStruc);//视频告警
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                let time = moment().format() | 
			
		
	
		
			
				
					|  |  |  |                //算全局
 | 
			
		
	
		
			
				
					|  |  |  |                let dataArrToSave = [] | 
			
		
	
		
			
				
					|  |  |  |                let dataMap = calculate(dataAlarms, appAlarms, videoAlarms) | 
			
		
	
		
			
				
					|  |  |  |                let sum = dataAlarms.length + appAlarms.length + videoAlarms.length; | 
			
		
	
		
			
				
					|  |  |  |                //let dataArrToSave = []
 | 
			
		
	
		
			
				
					|  |  |  |                let dataMap = calculate(dataMaps, appAlarms, videoAlarms) | 
			
		
	
		
			
				
					|  |  |  |                let sum = dataSum + appAlarms.length + videoAlarms.length; | 
			
		
	
		
			
				
					|  |  |  |                if (sum) { | 
			
		
	
		
			
				
					|  |  |  |                   dataArrToSave.push({ | 
			
		
	
		
			
				
					|  |  |  |                   let data = { | 
			
		
	
		
			
				
					|  |  |  |                      time: time, | 
			
		
	
		
			
				
					|  |  |  |                      projectCorrelationId: null,//全局
 | 
			
		
	
		
			
				
					|  |  |  |                      day1: parseFloat((100 * dataMap.day1 / sum).toFixed(2)), | 
			
		
	
	
		
			
				
					|  |  | @ -36,32 +36,60 @@ module.exports = function (app, opts) { | 
			
		
	
		
			
				
					|  |  |  |                      day15: parseFloat((100 * dataMap.day15 / sum).toFixed(2)), | 
			
		
	
		
			
				
					|  |  |  |                      day30: parseFloat((100 * dataMap.day30 / sum).toFixed(2)), | 
			
		
	
		
			
				
					|  |  |  |                      day30m: parseFloat((100 * dataMap.day30m / sum).toFixed(2)), | 
			
		
	
		
			
				
					|  |  |  |                   }) | 
			
		
	
		
			
				
					|  |  |  |                   } | 
			
		
	
		
			
				
					|  |  |  |                   await models.AlarmHandleStatistics.create(data) | 
			
		
	
		
			
				
					|  |  |  |                } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                //算单个项目
 | 
			
		
	
		
			
				
					|  |  |  |                pomsProject.map(p => { | 
			
		
	
		
			
				
					|  |  |  |                pomsProject.map(async p => { | 
			
		
	
		
			
				
					|  |  |  |                   let pid = p.id; | 
			
		
	
		
			
				
					|  |  |  |                   let pDataAlarms = dataAlarms.filter(da => da.pomsProject.indexOf(pid) != -1) | 
			
		
	
		
			
				
					|  |  |  |                   let pAppAlarms = appAlarms.filter(aa => aa.app.projectCorrelations.map(ap => ap.id).indexOf(pid) != -1) | 
			
		
	
		
			
				
					|  |  |  |                   let pVideoAlarms = videoAlarms.filter(va => va.pomsProject.indexOf(pid) != -1) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                   let pDataMap = calculate(pDataAlarms, pAppAlarms, pVideoAlarms) | 
			
		
	
		
			
				
					|  |  |  |                   let sm = pDataAlarms.length + pAppAlarms.length + pVideoAlarms.length; | 
			
		
	
		
			
				
					|  |  |  |                   //let pid = 11
 | 
			
		
	
		
			
				
					|  |  |  |                   let pAnxinStruc = await getAxyStructs(pid) | 
			
		
	
		
			
				
					|  |  |  |                   let pPomsProject = await pomsProjectRange(pid) | 
			
		
	
		
			
				
					|  |  |  |                   if (pAnxinStruc.length) { | 
			
		
	
		
			
				
					|  |  |  |                      let { dataSum, dataMaps } = await getDataAlarms(pAnxinStruc);//数据告警
 | 
			
		
	
		
			
				
					|  |  |  |                      let pAppAlarms = await getAppAlarms(pPomsProject);//应用告警
 | 
			
		
	
		
			
				
					|  |  |  |                      let pVideoAlarms = await getVideoAlarms(pAnxinStruc);//视频告警
 | 
			
		
	
		
			
				
					|  |  |  |                      let pDataMap = calculate(dataMaps, pAppAlarms, pVideoAlarms) | 
			
		
	
		
			
				
					|  |  |  |                      let sm = dataSum + pAppAlarms.length + pVideoAlarms.length; | 
			
		
	
		
			
				
					|  |  |  |                      if (sm) { | 
			
		
	
		
			
				
					|  |  |  |                      dataArrToSave.push({ | 
			
		
	
		
			
				
					|  |  |  |                         let data = { | 
			
		
	
		
			
				
					|  |  |  |                            time: time, | 
			
		
	
		
			
				
					|  |  |  |                            projectCorrelationId: pid,//单个项目
 | 
			
		
	
		
			
				
					|  |  |  |                         day1: parseFloat((100 * pDataMap.day1 / sum).toFixed(2)), | 
			
		
	
		
			
				
					|  |  |  |                         day3: parseFloat((100 * pDataMap.day3 / sum).toFixed(2)), | 
			
		
	
		
			
				
					|  |  |  |                         day7: parseFloat((100 * pDataMap.day7 / sum).toFixed(2)), | 
			
		
	
		
			
				
					|  |  |  |                         day15: parseFloat((100 * pDataMap.day15 / sum).toFixed(2)), | 
			
		
	
		
			
				
					|  |  |  |                         day30: parseFloat((100 * pDataMap.day30 / sum).toFixed(2)), | 
			
		
	
		
			
				
					|  |  |  |                         day30m: parseFloat((100 * pDataMap.day30m / sum).toFixed(2)), | 
			
		
	
		
			
				
					|  |  |  |                      }) | 
			
		
	
		
			
				
					|  |  |  |                            day1: parseFloat((100 * pDataMap.day1 / sm).toFixed(2)), | 
			
		
	
		
			
				
					|  |  |  |                            day3: parseFloat((100 * pDataMap.day3 / sm).toFixed(2)), | 
			
		
	
		
			
				
					|  |  |  |                            day7: parseFloat((100 * pDataMap.day7 / sm).toFixed(2)), | 
			
		
	
		
			
				
					|  |  |  |                            day15: parseFloat((100 * pDataMap.day15 / sm).toFixed(2)), | 
			
		
	
		
			
				
					|  |  |  |                            day30: parseFloat((100 * pDataMap.day30 / sm).toFixed(2)), | 
			
		
	
		
			
				
					|  |  |  |                            day30m: parseFloat((100 * pDataMap.day30m / sm).toFixed(2)), | 
			
		
	
		
			
				
					|  |  |  |                         } | 
			
		
	
		
			
				
					|  |  |  |                         await models.AlarmHandleStatistics.create(data) | 
			
		
	
		
			
				
					|  |  |  |                      } | 
			
		
	
		
			
				
					|  |  |  |                   } | 
			
		
	
		
			
				
					|  |  |  |                }) | 
			
		
	
		
			
				
					|  |  |  |                await models.AlarmHandleStatistics.bulkCreate(dataArrToSave) | 
			
		
	
		
			
				
					|  |  |  |                //算单个项目
 | 
			
		
	
		
			
				
					|  |  |  |                // pomsProject.map(p => {
 | 
			
		
	
		
			
				
					|  |  |  |                //    let pid = p.id;
 | 
			
		
	
		
			
				
					|  |  |  |                //    let pDataAlarms = dataAlarms.filter(da => da.pomsProject.indexOf(pid) != -1)
 | 
			
		
	
		
			
				
					|  |  |  |                //    let pAppAlarms = appAlarms.filter(aa => aa.app.projectCorrelations.map(ap => ap.id).indexOf(pid) != -1)
 | 
			
		
	
		
			
				
					|  |  |  |                //    let pVideoAlarms = videoAlarms.filter(va => va.pomsProject.indexOf(pid) != -1)
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                //    let pDataMap = calculate(pDataAlarms, pAppAlarms, pVideoAlarms)
 | 
			
		
	
		
			
				
					|  |  |  |                //    let sm = pDataAlarms.length + pAppAlarms.length + pVideoAlarms.length;
 | 
			
		
	
		
			
				
					|  |  |  |                //    if (sm) {
 | 
			
		
	
		
			
				
					|  |  |  |                //       dataArrToSave.push({
 | 
			
		
	
		
			
				
					|  |  |  |                //          time: time,
 | 
			
		
	
		
			
				
					|  |  |  |                //          projectCorrelationId: pid,//单个项目
 | 
			
		
	
		
			
				
					|  |  |  |                //          day1: parseFloat((100 * pDataMap.day1 / sum).toFixed(2)),
 | 
			
		
	
		
			
				
					|  |  |  |                //          day3: parseFloat((100 * pDataMap.day3 / sum).toFixed(2)),
 | 
			
		
	
		
			
				
					|  |  |  |                //          day7: parseFloat((100 * pDataMap.day7 / sum).toFixed(2)),
 | 
			
		
	
		
			
				
					|  |  |  |                //          day15: parseFloat((100 * pDataMap.day15 / sum).toFixed(2)),
 | 
			
		
	
		
			
				
					|  |  |  |                //          day30: parseFloat((100 * pDataMap.day30 / sum).toFixed(2)),
 | 
			
		
	
		
			
				
					|  |  |  |                //          day30m: parseFloat((100 * pDataMap.day30m / sum).toFixed(2)),
 | 
			
		
	
		
			
				
					|  |  |  |                //       })
 | 
			
		
	
		
			
				
					|  |  |  |                //    }
 | 
			
		
	
		
			
				
					|  |  |  |                // })
 | 
			
		
	
		
			
				
					|  |  |  |                //await models.AlarmHandleStatistics.bulkCreate(dataArrToSave)
 | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |          } catch (error) { | 
			
		
	
		
			
				
					|  |  |  |             console.error(error); | 
			
		
	
	
		
			
				
					|  |  | @ -69,33 +97,34 @@ module.exports = function (app, opts) { | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |    ) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |    function calculate(dataAlarms, appAlarms, videoAlarms) { | 
			
		
	
		
			
				
					|  |  |  |    function calculate(dataMaps, appAlarms, videoAlarms) { | 
			
		
	
		
			
				
					|  |  |  |       try { | 
			
		
	
		
			
				
					|  |  |  |          let { day1, day3, day7, day15, day30, day30m } = dataMaps; | 
			
		
	
		
			
				
					|  |  |  |          //算全局
 | 
			
		
	
		
			
				
					|  |  |  |          let dataMap = { | 
			
		
	
		
			
				
					|  |  |  |             day1: 0,//当日处理
 | 
			
		
	
		
			
				
					|  |  |  |             day3: 0,//3日内
 | 
			
		
	
		
			
				
					|  |  |  |             day7: 0,//7日内
 | 
			
		
	
		
			
				
					|  |  |  |             day15: 0,//15日内
 | 
			
		
	
		
			
				
					|  |  |  |             day30: 0,//30日内
 | 
			
		
	
		
			
				
					|  |  |  |             day30m: 0//超过30日
 | 
			
		
	
		
			
				
					|  |  |  |          } | 
			
		
	
		
			
				
					|  |  |  |          dataAlarms.filter(d => d.State > 3).map(da => { | 
			
		
	
		
			
				
					|  |  |  |             let range = moment(da.confirmTime).diff(moment(da.StartTime), 'day') | 
			
		
	
		
			
				
					|  |  |  |             if (range <= 1) { | 
			
		
	
		
			
				
					|  |  |  |                dataMap.day1++ | 
			
		
	
		
			
				
					|  |  |  |             } else if (range > 1 && range <= 3) { | 
			
		
	
		
			
				
					|  |  |  |                dataMap.day3++ | 
			
		
	
		
			
				
					|  |  |  |             } else if (range > 3 && range <= 7) { | 
			
		
	
		
			
				
					|  |  |  |                dataMap.day7++ | 
			
		
	
		
			
				
					|  |  |  |             } else if (range > 7 && range <= 15) { | 
			
		
	
		
			
				
					|  |  |  |                dataMap.day15++ | 
			
		
	
		
			
				
					|  |  |  |             } else if (range > 15 && range <= 30) { | 
			
		
	
		
			
				
					|  |  |  |                dataMap.day30++ | 
			
		
	
		
			
				
					|  |  |  |             } else if (range > 30) { | 
			
		
	
		
			
				
					|  |  |  |                dataMap.day30m++ | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |          }) | 
			
		
	
		
			
				
					|  |  |  |             day1: day1[0].count,//当日处理
 | 
			
		
	
		
			
				
					|  |  |  |             day3: day3[0].count,//3日内
 | 
			
		
	
		
			
				
					|  |  |  |             day7: day7[0].count,//7日内
 | 
			
		
	
		
			
				
					|  |  |  |             day15: day15[0].count,//15日内
 | 
			
		
	
		
			
				
					|  |  |  |             day30: day30[0].count,//30日内
 | 
			
		
	
		
			
				
					|  |  |  |             day30m: day30m[0].count//超过30日
 | 
			
		
	
		
			
				
					|  |  |  |          } | 
			
		
	
		
			
				
					|  |  |  |          // dataAlarms.filter(d => d.State > 3).map(da => {
 | 
			
		
	
		
			
				
					|  |  |  |          //    let range = moment(da.confirmTime).diff(moment(da.StartTime), 'day')
 | 
			
		
	
		
			
				
					|  |  |  |          //    if (range <= 1) {
 | 
			
		
	
		
			
				
					|  |  |  |          //       dataMap.day1++
 | 
			
		
	
		
			
				
					|  |  |  |          //    } else if (range > 1 && range <= 3) {
 | 
			
		
	
		
			
				
					|  |  |  |          //       dataMap.day3++
 | 
			
		
	
		
			
				
					|  |  |  |          //    } else if (range > 3 && range <= 7) {
 | 
			
		
	
		
			
				
					|  |  |  |          //       dataMap.day7++
 | 
			
		
	
		
			
				
					|  |  |  |          //    } else if (range > 7 && range <= 15) {
 | 
			
		
	
		
			
				
					|  |  |  |          //       dataMap.day15++
 | 
			
		
	
		
			
				
					|  |  |  |          //    } else if (range > 15 && range <= 30) {
 | 
			
		
	
		
			
				
					|  |  |  |          //       dataMap.day30++
 | 
			
		
	
		
			
				
					|  |  |  |          //    } else if (range > 30) {
 | 
			
		
	
		
			
				
					|  |  |  |          //       dataMap.day30m++
 | 
			
		
	
		
			
				
					|  |  |  |          //    }
 | 
			
		
	
		
			
				
					|  |  |  |          // })
 | 
			
		
	
		
			
				
					|  |  |  |          appAlarms.filter(d => d.confirmTime).map(da => { | 
			
		
	
		
			
				
					|  |  |  |             let range = moment(da.confirmTime).diff(moment(da.createTime), 'day') | 
			
		
	
		
			
				
					|  |  |  |             if (range < 1) { | 
			
		
	
	
		
			
				
					|  |  | @ -134,6 +163,17 @@ module.exports = function (app, opts) { | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |    } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |    function getStr(alarmQueryOptionStr, paramStr) { | 
			
		
	
		
			
				
					|  |  |  |       return ` | 
			
		
	
		
			
				
					|  |  |  |       select count(AlarmId) count from | 
			
		
	
		
			
				
					|  |  |  |       (SELECT  | 
			
		
	
		
			
				
					|  |  |  |       alarms.AlarmId AS AlarmId,  | 
			
		
	
		
			
				
					|  |  |  |       alarms.State AS State,  | 
			
		
	
		
			
				
					|  |  |  |       alarms.StructureId AS StructureId, | 
			
		
	
		
			
				
					|  |  |  |       StartTime, EndTime | 
			
		
	
		
			
				
					|  |  |  |       ${alarmQueryOptionStr}) where State>3 and ${paramStr}` | 
			
		
	
		
			
				
					|  |  |  |    } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |    async function getDataAlarms(anxinStruc) { | 
			
		
	
		
			
				
					|  |  |  |       try { | 
			
		
	
		
			
				
					|  |  |  |          const anxinStrucIds = anxinStruc.map(a => a.strucId) | 
			
		
	
	
		
			
				
					|  |  | @ -151,42 +191,61 @@ module.exports = function (app, opts) { | 
			
		
	
		
			
				
					|  |  |  |          console.log('开始查数据-数据-数据类告警---' + moment().format('YYYY-MM-DD HH:mm:ss')) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |          const alarmRes = await clickHouse.dataAlarm.query(` | 
			
		
	
		
			
				
					|  |  |  |                SELECT  | 
			
		
	
		
			
				
					|  |  |  |                select count(AlarmId) count from | 
			
		
	
		
			
				
					|  |  |  |                (SELECT  | 
			
		
	
		
			
				
					|  |  |  |                alarms.AlarmId AS AlarmId,  | 
			
		
	
		
			
				
					|  |  |  |                alarms.State AS State,  | 
			
		
	
		
			
				
					|  |  |  |                alarms.StructureId AS StructureId, | 
			
		
	
		
			
				
					|  |  |  |                StartTime, EndTime | 
			
		
	
		
			
				
					|  |  |  |                ${alarmQueryOptionStr}`).toPromise();
 | 
			
		
	
		
			
				
					|  |  |  |                ${alarmQueryOptionStr})`).toPromise();
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |          console.log('数据-数据-数据告警查询结束---' + moment().format('YYYY-MM-DD HH:mm:ss') + `---一共${alarmRes.length}条`) | 
			
		
	
		
			
				
					|  |  |  |          let day1Str = getStr(alarmQueryOptionStr, 'Date(EndTime) - Date(StartTime)<=1'); | 
			
		
	
		
			
				
					|  |  |  |          let day1 = await clickHouse.dataAlarm.query(day1Str).toPromise(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |          const confirmedAlarm = alarmRes.filter(ar => ar.State && ar.State > 2).map(ar => "'" + ar.AlarmId + "'"); | 
			
		
	
		
			
				
					|  |  |  |          const confirmedAlarmDetailMax = confirmedAlarm.length ? | 
			
		
	
		
			
				
					|  |  |  |             await clickHouse.dataAlarm.query(` | 
			
		
	
		
			
				
					|  |  |  |                   SELECT  | 
			
		
	
		
			
				
					|  |  |  |                      max(Time) AS Time, AlarmId | 
			
		
	
		
			
				
					|  |  |  |                   FROM  | 
			
		
	
		
			
				
					|  |  |  |                      alarm_details | 
			
		
	
		
			
				
					|  |  |  |                   WHERE | 
			
		
	
		
			
				
					|  |  |  |                      AlarmId IN (${confirmedAlarm.join(',')}) | 
			
		
	
		
			
				
					|  |  |  |                   GROUP BY AlarmId | 
			
		
	
		
			
				
					|  |  |  |                `).toPromise() : [];
 | 
			
		
	
		
			
				
					|  |  |  |          let day3Str = getStr(alarmQueryOptionStr, 'Date(EndTime) - Date(StartTime)>1 and Date(EndTime) - Date(StartTime)<=3'); | 
			
		
	
		
			
				
					|  |  |  |          let day3 = await clickHouse.dataAlarm.query(day3Str).toPromise(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |          alarmRes.forEach(ar => { | 
			
		
	
		
			
				
					|  |  |  |             ar.pomsProject = ( | 
			
		
	
		
			
				
					|  |  |  |                anxinStruc.find(as => as.strucId == ar.StructureId) || | 
			
		
	
		
			
				
					|  |  |  |                { | 
			
		
	
		
			
				
					|  |  |  |                   pomsProject: [ | 
			
		
	
		
			
				
					|  |  |  |                      // TODO: 开发临时添加
 | 
			
		
	
		
			
				
					|  |  |  |                   ] | 
			
		
	
		
			
				
					|  |  |  |                } | 
			
		
	
		
			
				
					|  |  |  |             ).pomsProject.map(p => p.id) | 
			
		
	
		
			
				
					|  |  |  |          let day7Str = getStr(alarmQueryOptionStr, 'Date(EndTime) - Date(StartTime)>3 and Date(EndTime) - Date(StartTime)<=7'); | 
			
		
	
		
			
				
					|  |  |  |          let day7 = await clickHouse.dataAlarm.query(day7Str).toPromise(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             // 最新告警详情 - 确认信息
 | 
			
		
	
		
			
				
					|  |  |  |             let corConfirmedData = (confirmedAlarmDetailMax.find(cdm => cdm.AlarmId == ar.AlarmId) || {}); | 
			
		
	
		
			
				
					|  |  |  |             ar.confirmTime = corConfirmedData.Time || ar.EndTime | 
			
		
	
		
			
				
					|  |  |  |          }) | 
			
		
	
		
			
				
					|  |  |  |          return alarmRes; | 
			
		
	
		
			
				
					|  |  |  |          let day15Str = getStr(alarmQueryOptionStr, 'Date(EndTime) - Date(StartTime)>7 and Date(EndTime) - Date(StartTime)<=15'); | 
			
		
	
		
			
				
					|  |  |  |          let day15 = await clickHouse.dataAlarm.query(day15Str).toPromise(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |          let day30Str = getStr(alarmQueryOptionStr, 'Date(EndTime) - Date(StartTime)>15 and Date(EndTime) - Date(StartTime)<=30'); | 
			
		
	
		
			
				
					|  |  |  |          let day30 = await clickHouse.dataAlarm.query(day30Str).toPromise(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |          let day30mStr = getStr(alarmQueryOptionStr, 'Date(EndTime) - Date(StartTime)>30'); | 
			
		
	
		
			
				
					|  |  |  |          let day30m = await clickHouse.dataAlarm.query(day30mStr).toPromise(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |          // console.log('数据-数据-数据告警查询结束---' + moment().format('YYYY-MM-DD HH:mm:ss') + `---一共${alarmRes.length}条`)
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |          // const confirmedAlarm = alarmRes.filter(ar => ar.State && ar.State > 2).map(ar => "'" + ar.AlarmId + "'");
 | 
			
		
	
		
			
				
					|  |  |  |          // const confirmedAlarmDetailMax = confirmedAlarm.length ?
 | 
			
		
	
		
			
				
					|  |  |  |          //    await clickHouse.dataAlarm.query(`
 | 
			
		
	
		
			
				
					|  |  |  |          //          SELECT 
 | 
			
		
	
		
			
				
					|  |  |  |          //             max(Time) AS Time, AlarmId
 | 
			
		
	
		
			
				
					|  |  |  |          //          FROM 
 | 
			
		
	
		
			
				
					|  |  |  |          //             alarm_details
 | 
			
		
	
		
			
				
					|  |  |  |          //          WHERE
 | 
			
		
	
		
			
				
					|  |  |  |          //             AlarmId IN (${confirmedAlarm.join(',')})
 | 
			
		
	
		
			
				
					|  |  |  |          //          GROUP BY AlarmId
 | 
			
		
	
		
			
				
					|  |  |  |          //       `).toPromise() : [];
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |          // alarmRes.forEach(ar => {
 | 
			
		
	
		
			
				
					|  |  |  |          //    ar.pomsProject = (
 | 
			
		
	
		
			
				
					|  |  |  |          //       anxinStruc.find(as => as.strucId == ar.StructureId) ||
 | 
			
		
	
		
			
				
					|  |  |  |          //       {
 | 
			
		
	
		
			
				
					|  |  |  |          //          pomsProject: [
 | 
			
		
	
		
			
				
					|  |  |  |          //             // TODO: 开发临时添加
 | 
			
		
	
		
			
				
					|  |  |  |          //          ]
 | 
			
		
	
		
			
				
					|  |  |  |          //       }
 | 
			
		
	
		
			
				
					|  |  |  |          //    ).pomsProject.map(p => p.id)
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |          //    // 最新告警详情 - 确认信息
 | 
			
		
	
		
			
				
					|  |  |  |          //    let corConfirmedData = (confirmedAlarmDetailMax.find(cdm => cdm.AlarmId == ar.AlarmId) || {});
 | 
			
		
	
		
			
				
					|  |  |  |          //    ar.confirmTime = corConfirmedData.Time || ar.EndTime
 | 
			
		
	
		
			
				
					|  |  |  |          // })
 | 
			
		
	
		
			
				
					|  |  |  |          return { dataSum: alarmRes[0].count, dataMaps: { day1, day3, day7, day15, day30, day30m } }; | 
			
		
	
		
			
				
					|  |  |  |       } catch (error) { | 
			
		
	
		
			
				
					|  |  |  |          console.error(error); | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
	
		
			
				
					|  |  | @ -318,9 +377,9 @@ module.exports = function (app, opts) { | 
			
		
	
		
			
				
					|  |  |  |          console.error(error); | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |    } | 
			
		
	
		
			
				
					|  |  |  |    async function pomsProjectRange() { | 
			
		
	
		
			
				
					|  |  |  |    async function pomsProjectRange(pepProjectId) { | 
			
		
	
		
			
				
					|  |  |  |       try { | 
			
		
	
		
			
				
					|  |  |  |          const { pepProjectRes, bindRes } = await pomsWithPepRangeParams() | 
			
		
	
		
			
				
					|  |  |  |          const { pepProjectRes, bindRes } = await pomsWithPepRangeParams(pepProjectId) | 
			
		
	
		
			
				
					|  |  |  |          let pomsProject = [] | 
			
		
	
		
			
				
					|  |  |  |          for (let b of bindRes) { | 
			
		
	
		
			
				
					|  |  |  |             if (b.pepProjectId) { | 
			
		
	
	
		
			
				
					|  |  | @ -341,9 +400,18 @@ module.exports = function (app, opts) { | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |    } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |    async function pomsWithPepRangeParams() { | 
			
		
	
		
			
				
					|  |  |  |    async function pomsWithPepRangeParams(pepProjectId) { | 
			
		
	
		
			
				
					|  |  |  |       try { | 
			
		
	
		
			
				
					|  |  |  |          const bindRes = await models.ProjectCorrelation.findAll({ where: { del: false } }); | 
			
		
	
		
			
				
					|  |  |  |          let findOption = { | 
			
		
	
		
			
				
					|  |  |  |             where: { | 
			
		
	
		
			
				
					|  |  |  |                del: false | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |          } | 
			
		
	
		
			
				
					|  |  |  |          if (pepProjectId) { | 
			
		
	
		
			
				
					|  |  |  |             // 有 特定的项目id 就按此查询
 | 
			
		
	
		
			
				
					|  |  |  |             findOption.where.id = pepProjectId | 
			
		
	
		
			
				
					|  |  |  |          } | 
			
		
	
		
			
				
					|  |  |  |          const bindRes = await models.ProjectCorrelation.findAll(findOption); | 
			
		
	
		
			
				
					|  |  |  |          // 获取不重复的 项企项目id
 | 
			
		
	
		
			
				
					|  |  |  |          let pepProjectIds = [] | 
			
		
	
		
			
				
					|  |  |  |          for (let b of bindRes) { | 
			
		
	
	
		
			
				
					|  |  | @ -379,9 +447,9 @@ module.exports = function (app, opts) { | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |    } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |    async function getAxyStructs() { | 
			
		
	
		
			
				
					|  |  |  |    async function getAxyStructs(pepProjectId) { | 
			
		
	
		
			
				
					|  |  |  |       try { | 
			
		
	
		
			
				
					|  |  |  |          const { pepProjectRes, bindRes } = await pomsWithPepRangeParams() | 
			
		
	
		
			
				
					|  |  |  |          const { pepProjectRes, bindRes } = await pomsWithPepRangeParams(pepProjectId) | 
			
		
	
		
			
				
					|  |  |  |          // 获取不重复的 安心云项目 id
 | 
			
		
	
		
			
				
					|  |  |  |          const anxinProjectIds = [ | 
			
		
	
		
			
				
					|  |  |  |             ...(bindRes).reduce( | 
			
		
	
	
		
			
				
					|  |  | 
 |