You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
263 lines
7.4 KiB
263 lines
7.4 KiB
'use strict';
|
|
|
|
const request = require('superagent');
|
|
|
|
const moment = require("moment");
|
|
|
|
|
|
function getFireAlarmList (opts) {
|
|
return async function (ctx, next) {
|
|
const models = ctx.fs.dc.models;
|
|
let errMsg = { message: '获取消防告警失败' }
|
|
try {
|
|
const res = await models.FireAlarm.findAll();
|
|
ctx.status = 200;
|
|
ctx.body = res;
|
|
} catch (error) {
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
|
|
ctx.status = 400;
|
|
ctx.body = errMsg
|
|
}
|
|
}
|
|
}
|
|
|
|
// 新增消防告警
|
|
function addAlarm (opts) {
|
|
return async function (ctx, next) {
|
|
const models = ctx.fs.dc.models;
|
|
try {
|
|
const body = ctx.request.body
|
|
await models.FireAlarm.create(body)
|
|
|
|
ctx.status = 204;
|
|
ctx.body = { message: '新建消防告警成功' }
|
|
} catch (error) {
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
|
|
ctx.status = 400;
|
|
ctx.body = { message: '新建消防告警失败' }
|
|
}
|
|
}
|
|
}
|
|
|
|
// 修改消防告警
|
|
function updateAlarm (opts) {
|
|
return async function (ctx, next) {
|
|
try {
|
|
const models = ctx.fs.dc.models;
|
|
const { id } = ctx.params;
|
|
const body = ctx.request.body;
|
|
await models.FireAlarm.update(
|
|
body,
|
|
{ where: { id: id, } }
|
|
)
|
|
ctx.status = 204;
|
|
ctx.body = { message: '修改消防告警成功' }
|
|
|
|
} catch (error) {
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
|
|
ctx.status = 400;
|
|
ctx.body = { message: '修改消防告警失败' }
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function videoList (opts) {
|
|
return async function (ctx) {
|
|
try {
|
|
const { models, } = ctx.fs.dc;
|
|
const { app, yingshiTokenRes } = ctx
|
|
|
|
let yingshiToken = ''
|
|
if (yingshiTokenRes && yingshiTokenRes.token && yingshiTokenRes.expire && moment().isBefore(moment(yingshiTokenRes.expire))) {
|
|
yingshiToken = yingshiTokenRes.token
|
|
} else {
|
|
const tokenRes = await app.fs.yingshiRequest.post(`lapp/token/get`, {
|
|
query: {
|
|
appKey: opts.yingshiKey,
|
|
appSecret: opts.yingshiSecret
|
|
}
|
|
})
|
|
if (tokenRes.code == 200 && tokenRes.data) {
|
|
const { accessToken, expireTime } = tokenRes.data
|
|
|
|
ctx.yingshiTokenRes = {
|
|
token: accessToken,
|
|
expire: expireTime
|
|
}
|
|
yingshiToken = accessToken
|
|
} else {
|
|
throw '未能获取进行萤石鉴权'
|
|
}
|
|
}
|
|
|
|
// const deviceRes = await app.fs.yingshiRequest.post(`lapp/device/list`, {
|
|
// query: {
|
|
// accessToken: yingshiToken,
|
|
// }
|
|
// })
|
|
|
|
ctx.status = 200;
|
|
|
|
let deviceRes_ = [{
|
|
deviceName: '楼前大桥',
|
|
deviceSerial: 'L48947105',
|
|
}, {
|
|
deviceName: '滁北大桥',
|
|
deviceSerial: 'L48947108',
|
|
}, {
|
|
deviceName: '新联桥',
|
|
deviceSerial: 'L48947110',
|
|
}, {
|
|
deviceName: '湾庄线',
|
|
deviceSerial: 'L48947112',
|
|
}, {
|
|
deviceName: '新土线',
|
|
deviceSerial: 'AA9943808',
|
|
}, {
|
|
deviceName: '东文大桥',
|
|
deviceSerial: 'L48947087',
|
|
}, {
|
|
deviceName: '莲姚线',
|
|
deviceSerial: 'L48947082',
|
|
}, {
|
|
deviceName: '荷漳公路',
|
|
deviceSerial: 'L48947109',
|
|
}, {
|
|
deviceName: '新武大桥',
|
|
deviceSerial: 'L48947086',
|
|
},]
|
|
|
|
const deviceState = await Promise.all(deviceRes_.map(d => {
|
|
return app.fs.yingshiRequest.post(`lapp/device/info`, {
|
|
query: {
|
|
accessToken: yingshiToken,
|
|
deviceSerial: d.deviceSerial
|
|
}
|
|
})
|
|
}))
|
|
|
|
for (let d of deviceRes_) {
|
|
let corState = deviceState.find(item => item.code == 200 && item.data && item.data.deviceSerial == d.deviceSerial)
|
|
if (corState) {
|
|
d.status = corState.data.status
|
|
} else {
|
|
d.status = 0
|
|
}
|
|
d.token = yingshiToken
|
|
}
|
|
|
|
ctx.body = deviceRes_
|
|
// ||
|
|
// (deviceRes.data || []).map(item => {
|
|
// return {
|
|
// ...item,
|
|
// token: yingshiToken,
|
|
// }
|
|
// })
|
|
} catch (error) {
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: error`);
|
|
ctx.status = 400;
|
|
ctx.body = {
|
|
message: typeof error == 'string' ? error : undefined
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function getDetails (opts) {
|
|
return async function (ctx) {
|
|
try {
|
|
const { app, yingshiTokenRes } = ctx
|
|
const res = await app.fs.baiDuJiaotong.get('trafficindex/city/details/?cityCode=163')
|
|
|
|
ctx.status = 200
|
|
ctx.body = res || {}
|
|
|
|
} catch (error) {
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: error`);
|
|
ctx.status = 400;
|
|
ctx.body = {
|
|
message: '获取南昌市道路数据失败'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// 获取消防设备
|
|
function getFireDevice (opts) {
|
|
return async function (ctx, next) {
|
|
let rslt = {};
|
|
try {
|
|
let url = `${opts.tfApi}/device/alarm/statistic?_timeStamp=${new Date().getTime()}`;
|
|
const res = (await request.get(url).set("X-API-TOKEN", "9911510d-9dae-438d-9b6e-0545ef003c58")).body.data;
|
|
rslt = res.items;
|
|
ctx.status = 200;
|
|
ctx.body = rslt;
|
|
} catch (error) {
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
|
|
ctx.status = 400;
|
|
ctx.body = { message: '获取消防设备失败' }
|
|
}
|
|
}
|
|
}
|
|
|
|
// 获取火情趋势
|
|
function getFireTrend (opts) {
|
|
return async function (ctx, next) {
|
|
let rslt = [];
|
|
try {
|
|
let url = `${opts.tfApi}/alarms/trend?key=1`;
|
|
const res = (await request.get(url).set("X-API-TOKEN", "9911510d-9dae-438d-9b6e-0545ef003c58")).body.data;
|
|
let start = moment().add(-6, 'day').startOf('day').valueOf();
|
|
let end = moment().endOf('day').valueOf();
|
|
res.map(item => {
|
|
const time = moment(item.time).valueOf();
|
|
if (time >= start && time <= end) {
|
|
rslt.push({ time: item.time, count: item.val })
|
|
}
|
|
})
|
|
ctx.status = 200;
|
|
ctx.body = rslt;
|
|
} catch (error) {
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
|
|
ctx.status = 400;
|
|
ctx.body = { message: '获取火情趋势失败' }
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function getSurroundingConditions (opts) {
|
|
return async function (ctx) {
|
|
try {
|
|
|
|
const { app, yingshiTokenRes } = ctx
|
|
const { center } = ctx.query;
|
|
const res = await app.fs.baiDu.get(`traffic/v1/around?ak=${opts.baiduAK}¢er=${center}&radius=1000`)
|
|
|
|
ctx.status = 200
|
|
ctx.body = res && JSON.parse(res) || {}
|
|
|
|
} catch (error) {
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: error`);
|
|
ctx.status = 400;
|
|
ctx.body = {
|
|
message: '获取周边路况数据失败'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
addAlarm,
|
|
updateAlarm,
|
|
getFireAlarmList,
|
|
getFireDevice,
|
|
getFireTrend,
|
|
videoList,
|
|
getDetails,
|
|
getSurroundingConditions
|
|
}
|