'use strict'; const moment = require('moment'); //工作台 async function getWorkbench(ctx) { try { const { models } = ctx.fs.dc; const { clickHouse } = ctx.app.fs const { alarmId, limit, page } = ctx.query 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 getProjectsInfo(ctx) { try { const { models } = ctx.fs.dc; const { clickHouse } = ctx.app.fs const { alarmId, limit, page } = ctx.query 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 } } } //BI分析 async function getBiAnalysis(ctx) { try { const { models } = ctx.fs.dc; const { clickHouse } = ctx.app.fs const { alarmId, limit, page } = ctx.query 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 getLatestDynamic(ctx) { try { const { models } = ctx.fs.dc; const { limit, page, projectCorrelationId } = ctx.query; const { userInfo } = ctx.fs.api; const { clickHouse } = ctx.app.fs; let where = {} if (!userInfo.role.includes('SuperAdmin') && !userInfo.role.includes('admin')) { where.projectCorrelationId = { $in: userInfo.correlationProject } } if (projectCorrelationId) {//查指定项目,控制台全局切换 where.projectCorrelationId = projectCorrelationId } let news = await models.LatestDynamicList.findAll({//最新动态 include: [{ model: models.ProjectCorrelation, where: { del: false }, attributes: ['id', 'name', 'pepProjectId'], }, { model: models.AlarmAppearRecord }, { model: models.EmailSendLog }, { model: models.AlarmConfirmLog }], where: where, offset: Number(page) * Number(limit), limit: Number(limit), order: [['time', 'desc']], }); //查项目名称 查用户名 let pepPojectIds = new Set(), notedUserIds = new Set(); for (let p of news) { pepPojectIds.add(p.projectCorrelation.pepProjectId); if (p.emailSendLog) { notedUserIds.add(p.emailSendLog.toPepUserId);//通知 接收人 } if (p.alarmConfirmLog && p.alarmConfirmLog.pepUserId) { notedUserIds.add(p.alarmConfirmLog.pepUserId);//确认 操作者 } } let pepProjects = pepPojectIds.size ? await clickHouse.projectManage.query(` SELECT id, project_name FROM t_pim_project WHERE id IN (${[...pepPojectIds]}) `).toPromise() : []; let userPepRes = notedUserIds.size ? await clickHouse.pepEmis.query( `SELECT DISTINCT user.id AS id, "user"."name" AS name FROM user WHERE user.id IN (${[...notedUserIds].join(',')}) `).toPromise() : [] let appear = [], notice = [], confirm = []; news.map(d => { let projectName = d.projectCorrelation.name || pepProjects.find(pp => pp.id == d.projectCorrelation.pepProjectId).project_name; if (d.alarmAppearId) { appear.push({ projectName, ...d.alarmAppearRecord }); } if (d.emailSendId) { notice.push({ userName: userPepRes.find(u => u.id == d.emailSendLog.toPepUserId).name, projectName, ...d.emailSendLog }); } if (d.alarmConfirmId) { confirm.push({ userName: d.alarmConfirmLog.pepUserId ? userPepRes.find(u => u.id == d.alarmConfirmLog.pepUserId).name : '自动恢复', projectName, ...d.alarmConfirmLog.dataValues }); } }) ctx.status = 200; ctx.body = { appear,//发现 notice,//通知 confirm//确认 }; } catch (error) { ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.status = 400; ctx.body = { message: typeof error == 'string' ? error : undefined } } } module.exports = { getWorkbench, getProjectsInfo, getBiAnalysis, getLatestDynamic };