'use strict'; const moment = require('moment'); async function list (ctx) { try { const { models } = ctx.fs.dc; const { userId, pepUserId } = ctx.fs.api const linkListRes = await models.QuickLink.findAll({ attributes: { exclude: ['userId'] }, where: { userId, } }) ctx.status = 200; ctx.body = linkListRes } catch (error) { ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.status = 400; ctx.body = { message: typeof error == 'string' ? error : undefined } } } async function edit (ctx) { try { const { models } = ctx.fs.dc; const { userId, pepUserId } = ctx.fs.api const { linkId, name, link } = ctx.request.body if (!name || !link) { throw '请将参数填写完整' } let findOption = { where: { userId: userId, $or: [{ name, }, { link, }] } } if (linkId) { findOption.where.id = { $ne: linkId } } const existRes = await models.QuickLink.findOne({ where: { userId: userId, $or: [{ name, }, { link, }] } }) if (existRes) { throw '已有相同名称/地址的工具' } if (linkId) { await models.QuickLink.update({ name, link, }, { where: { id: linkId } }) } else { await models.QuickLink.create({ userId, name, link, }) } ctx.status = 204; } catch (error) { ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.status = 400; ctx.body = { message: typeof error == 'string' ? error : undefined } } } async function del (ctx) { try { const { models } = ctx.fs.dc; const { userId, pepUserId } = ctx.fs.api const { linkId } = ctx.params await models.QuickLink.destroy({ where: { id: linkId, userId, } }) ctx.status = 204; } catch (error) { ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.status = 400; ctx.body = { message: typeof error == 'string' ? error : undefined } } } async function count (ctx) { try { const { models } = ctx.fs.dc; const { userId, pepUserId, userInfo = {}, pepUserInfo } = ctx.fs.api const { clickHouse } = ctx.app.fs const { utils: { judgeSuper, anxinStrucIdRange } } = ctx.app.fs const { database: anxinyun } = clickHouse.anxinyun.opts.config const { pepProjectId } = ctx.request.body let anxinStruc = await anxinStrucIdRange({ ctx, pepProjectId }) if (anxinStruc.length) { const anxinStrucIds = anxinStruc.map(a => a.strucId) || [] const dataAlarm = await clickHouse.dataAlarm.query(` SELECT AlarmId,State,StartTime FROM alarms WHERE alarms.StructureId IN (${anxinStrucIds.join(",")}) `).toPromise(); //数据告警总数 const alarm = await clickHouse.dataAlarm.query(` SELECT count(alarms.AlarmId) AS count FROM alarms WHERE alarms.StructureId IN (${anxinStrucIds.join(",")}) `).toPromise(); const confirmedAlarm = dataAlarm // TODO: 开发临时注释 .filter(ar => ar.State && ar.State > 2) .map(ar => "'" + ar.AlarmId + "'") //剩余数据告警 const alarmSurplus = dataAlarm.filter(ar => ar.State && ar.State < 3).length || 0 //今日新增数据告警 const alarmNewAdd = await clickHouse.dataAlarm.query(` SELECT count(alarms.StartTime) AS count FROM alarms WHERE alarms.StructureId IN (${anxinStrucIds.join(",")}) AND alarms.StartTime >= '${moment().startOf('day').format('YYYY-MM-DD HH:mm:ss')}' AND alarms.StartTime <= '${moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')}' `).toPromise(); //今日确认数据告警 const confirmedAlarmDetailMax = confirmedAlarm.length ? await clickHouse.dataAlarm.query(` SELECT max(Time) AS Time, AlarmId , max(Content) AS Content FROM alarm_details WHERE AlarmId IN (${confirmedAlarm.join(',')}) AND alarm_details.Time >= '${moment().startOf('day').format('YYYY-MM-DD HH:mm:ss')}' AND alarm_details.Time <= '${moment().endOf('day').format('YYYY-MM-DD HH:mm:ss')}' GROUP BY AlarmId `).toPromise() : []; ctx.status = 200; ctx.body = { dataAlarm: { alarm: alarm[0].count || 0, alarmSurplus: alarmSurplus, alarmNewAdd: alarmNewAdd[0].count || 0, confirmedAlarmDetailMax: confirmedAlarmDetailMax.length || 0, }, videoAlarm:{ } } } else { ctx.body = { dataAlarm: 0, } } ctx.status = 200; } 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, edit, del, count };