'use strict'; async function list (ctx) { try { const { models } = ctx.fs.dc; const { clickHouse } = ctx.app.fs const { utils: { judgeSuper, anxinStrucIdRange } } = ctx.app.fs const { database: anxinyun } = clickHouse.anxinyun.opts.config const { pepProjectId, groupId, groupUnitId, sustainTimeStart, sustainTimeEnd } = ctx.query const isSuper = judgeSuper(ctx) let anxinStrucIds = null if (!isSuper || pepProjectId) { anxinStrucIds = await anxinStrucIdRange({ ctx, pepProjectId }) } let whereOption = [] if (anxinStrucIds) { whereOption.push(`alarms.StructureId IN (${anxinStrucIds.join(",")})`) } if (groupId) { whereOption.push(`alarms.AlarmGroup=${groupId}`) } if (groupUnitId) { whereOption.push(`alarms.AlarmGroupUnit=${groupId}`) } if (sustainTimeStart && sustainTimeEnd) { let momentStart = moment(sustainTimeStart).format() let momentEnd = moment(sustainTimeEnd).format() whereOption.push(` ( alarms."StartTime" BETWEEN '${momentStart}' AND '${momentEnd}' OR "alarms"."EndTime" BETWEEN '${momentStart}' AND '${momentEnd}' OR ( "alarms"."StartTime" <= '${momentStart}' AND "alarms"."EndTime" >= '${momentEnd}' ) ) `) } const alarmRes = await clickHouse.dataAlarm.query(` SELECT alarms.AlarmId, alarms.State, SourceName, StartTime, EndTime, alarms.CurrentLevel, SourceTypeId, AlarmAdviceProblem,AlarmGroup, AlarmGroupUnit, AlarmAdviceProblem, ${anxinyun}.t_structure.name AS StructureName, StructureId, ${anxinyun}.t_alarm_code.name AS AlarmCodeName, alarm_details.Time, alarm_details.Content FROM alarms LEFT JOIN ${anxinyun}.t_structure ON ${anxinyun}.t_structure.id = alarms.StructureId LEFT JOIN ${anxinyun}.t_alarm_code ON ${anxinyun}.t_alarm_code.code = alarms.AlarmTypeCode LEFT JOIN alarm_details ON alarms.AlarmId = alarm_details.AlarmId AND alarm_details.Time = ( SELECT MAX(alarm_details.Time) from alarm_details WHERE AlarmId = alarms.AlarmId ) ${whereOption.length ? 'WHERE ' + whereOption.join(' AND ') : ''} `).toPromise(); ctx.status = 200; ctx.body = [] } catch (error) { ctx.fs.logger.error(`path: ${ctx.path}, error: error`); ctx.status = 400; ctx.body = { message: typeof error == 'string' ? error : undefined } } } async function detail (ctx) { try { const { models } = ctx.fs.dc; const { clickHouse } = ctx.app.fs const { alarmId } = ctx.query const detailRes = await clickHouse.dataAlarm.query(` SELECT * FROM alarm_details WHERE AlarmId = '${alarmId}' ORDER BY Time ASC `).toPromise() ctx.status = 200; ctx.body = detailRes } catch (error) { ctx.fs.logger.error(`path: ${ctx.path}, error: error`); ctx.status = 400; ctx.body = { message: typeof error == 'string' ? error : undefined } } } module.exports = { list, detail };