wenlele
2 years ago
7 changed files with 201 additions and 126 deletions
@ -0,0 +1,167 @@ |
|||||
|
const schedule = require('node-schedule'); |
||||
|
const moment = require('moment') |
||||
|
|
||||
|
module.exports = function (app, opts) { |
||||
|
const freshYingshiState = schedule.scheduleJob( |
||||
|
// '* * 4 * * *',
|
||||
|
'*/10 * * * *', |
||||
|
async () => { |
||||
|
try { |
||||
|
const startTime = moment() |
||||
|
const { models } = app.fs.dc |
||||
|
const { token4yingshi } = app.fs.utils |
||||
|
const secretRes = await models.SecretYingshi.findAll() |
||||
|
let deviceList = [] |
||||
|
for (let s of secretRes) { |
||||
|
const tokenYingshi = await token4yingshi(s.dataValues) |
||||
|
// 查询所有设备
|
||||
|
let pageStart = 0 |
||||
|
while (pageStart >= 0) { |
||||
|
const deviceRes = await app.fs.yingshiRequest.post('lapp/device/list', { |
||||
|
query: { |
||||
|
accessToken: tokenYingshi, |
||||
|
pageStart, |
||||
|
pageSize: 50 |
||||
|
} |
||||
|
}) |
||||
|
if (deviceRes.code == 200) { |
||||
|
|
||||
|
deviceList = deviceList.concat.apply(deviceList, deviceRes.data) |
||||
|
for (let d of deviceRes.data) { |
||||
|
const existD = await models.GbCamera.findOne({ |
||||
|
where: { |
||||
|
streamid: d.deviceSerial |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
let storageD = { |
||||
|
level: 0, |
||||
|
ipctype: 'yingshi', |
||||
|
streamid: d.deviceSerial, |
||||
|
online: d.status ? 'ON' : 'OFF', |
||||
|
name: d.deviceName, |
||||
|
} |
||||
|
if (existD) { |
||||
|
if (existD.online != storageD.online) { |
||||
|
// 状态更新
|
||||
|
await models.GbCamera.update(storageD, { |
||||
|
where: { |
||||
|
id: existD.id |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
// 状态推送
|
||||
|
const { connected } = app.socket.sockets |
||||
|
const roomId = 'ROOM_' + Math.random() + '_' + d.deviceSerial |
||||
|
let cameraName = '' |
||||
|
if (connected) { |
||||
|
for (let c in connected) { |
||||
|
const { client: { conn: { request: { _query } } } } = connected[c] |
||||
|
if (_query && _query.token) { |
||||
|
let userInfo = await app.redis.hget(_query.token, 'userInfo'); |
||||
|
if (userInfo) { |
||||
|
userInfo = JSON.parse(userInfo) |
||||
|
const corCameraRes = await models.Camera.findOne({ |
||||
|
where: { |
||||
|
gbId: existD.id, |
||||
|
createUserId: userInfo.id |
||||
|
} |
||||
|
}) |
||||
|
// TODO 管理员判断
|
||||
|
if (corCameraRes) { |
||||
|
cameraName = corCameraRes.name |
||||
|
connected[c].join(roomId) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
app.socket.to(roomId).emit('CAMERA_ONLINE', { |
||||
|
ipctype: 'yingshi', |
||||
|
online: storageD.online, |
||||
|
gbId: existD.id, |
||||
|
name: cameraName |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
} else { |
||||
|
const yingshiRes = await models.GbCamera.create(storageD) |
||||
|
await models.Camera.update({ |
||||
|
gbId: yingshiRes.id |
||||
|
}, { |
||||
|
where: { |
||||
|
serialNo: d.deviceSerial |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (deviceRes.data.length == 50) { |
||||
|
pageStart++ |
||||
|
} else { |
||||
|
pageStart = -1 |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
// console.log(deviceList);
|
||||
|
console.info(`萤石设备 ${deviceList.length} 状态查询用时 ${moment().diff(startTime, 'seconds')} s`) |
||||
|
} catch (error) { |
||||
|
app.fs.logger.error(`sechedule: freshYingshiState, error: ${error}`); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
const freshYingshiPlayUrl = schedule.scheduleJob( |
||||
|
// '* * 4 * * *',
|
||||
|
'*/1 * * * *', |
||||
|
async () => { |
||||
|
const protocolMap = { |
||||
|
|
||||
|
} |
||||
|
try { |
||||
|
const { models } = app.fs.dc |
||||
|
const { token4yingshi } = app.fs.utils |
||||
|
const secretRes = await models.SecretYingshi.findAll() |
||||
|
for (let s of secretRes) { |
||||
|
const tokenYingshi = await token4yingshi(s.dataValues) |
||||
|
// 查询所有设备
|
||||
|
let pageStart = 0 |
||||
|
while (pageStart >= 0) { |
||||
|
const deviceRes = await app.fs.yingshiRequest.post('lapp/device/list', { |
||||
|
query: { |
||||
|
accessToken: tokenYingshi, |
||||
|
pageStart, |
||||
|
pageSize: 50 |
||||
|
} |
||||
|
}) |
||||
|
if (deviceRes.code == 200) { |
||||
|
let deviceSerials = deviceRes.data.map(d => d.deviceSerial) |
||||
|
|
||||
|
|
||||
|
const devicePlayUrlRes = await app.fs.yingshiRequest.post('lapp/v2/live/address/get', { |
||||
|
query: { |
||||
|
accessToken: tokenYingshi, |
||||
|
deviceSerial: deviceSerials[0], |
||||
|
protocol: 3 |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
if (deviceRes.data.length == 50) { |
||||
|
pageStart++ |
||||
|
} else { |
||||
|
pageStart = -1 |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} catch (error) { |
||||
|
app.fs.logger.error(`sechedule: freshYingshiPlayUrl, error: ${error}`); |
||||
|
} |
||||
|
} |
||||
|
) |
||||
|
return { |
||||
|
freshYingshiState, |
||||
|
freshYingshiPlayUrl |
||||
|
} |
||||
|
} |
@ -1,116 +0,0 @@ |
|||||
const schedule = require('node-schedule'); |
|
||||
const moment = require('moment') |
|
||||
|
|
||||
module.exports = function (app, opts) { |
|
||||
const freshYingshiState = schedule.scheduleJob( |
|
||||
// '* * 4 * * *',
|
|
||||
'*/1 * * * *', |
|
||||
async () => { |
|
||||
|
|
||||
try { |
|
||||
const startTime = moment() |
|
||||
const { models } = app.fs.dc |
|
||||
const { token4yingshi } = app.fs.utils |
|
||||
const secretRes = await models.SecretYingshi.findAll() |
|
||||
let deviceList = [] |
|
||||
for (let s of secretRes) { |
|
||||
const tokenYingshi = await token4yingshi(s.dataValues) |
|
||||
// 查询所有设备
|
|
||||
let pageStart = 0 |
|
||||
while (pageStart >= 0) { |
|
||||
const deviceRes = await app.fs.yingshiRequest.post('lapp/device/list', { |
|
||||
query: { |
|
||||
accessToken: tokenYingshi, |
|
||||
pageStart, |
|
||||
pageSize: 50 |
|
||||
} |
|
||||
}) |
|
||||
if (deviceRes.code == 200) { |
|
||||
if (deviceRes.data.length) { |
|
||||
deviceList = deviceList.concat.apply(deviceList, deviceRes.data) |
|
||||
for (let d of deviceRes.data) { |
|
||||
const existD = await models.GbCamera.findOne({ |
|
||||
where: { |
|
||||
streamid: d.deviceSerial |
|
||||
} |
|
||||
}) |
|
||||
|
|
||||
let storageD = { |
|
||||
level: 0, |
|
||||
ipctype: 'yingshi', |
|
||||
streamid: d.deviceSerial, |
|
||||
online: d.status ? 'ON' : 'OFF', |
|
||||
name: d.deviceName, |
|
||||
} |
|
||||
if (existD) { |
|
||||
if (existD.online != storageD.online) { |
|
||||
// 状态更新
|
|
||||
await models.GbCamera.update(storageD, { |
|
||||
where: { |
|
||||
id: existD.id |
|
||||
} |
|
||||
}) |
|
||||
|
|
||||
// 状态推送
|
|
||||
const { connected } = app.socket.sockets |
|
||||
const roomId = 'ROOM_' + Math.random() + '_' + d.deviceSerial |
|
||||
let cameraName = '' |
|
||||
if (connected) { |
|
||||
for (let c in connected) { |
|
||||
const { client: { conn: { request: { _query } } } } = connected[c] |
|
||||
if (_query && _query.token) { |
|
||||
let userInfo = await app.redis.hget(_query.token, 'userInfo'); |
|
||||
if (userInfo) { |
|
||||
userInfo = JSON.parse(userInfo) |
|
||||
const corCameraRes = await models.Camera.findOne({ |
|
||||
where: { |
|
||||
gbId: existD.id, |
|
||||
createUserId: userInfo.id |
|
||||
} |
|
||||
}) |
|
||||
// TODO 管理员判断
|
|
||||
if (corCameraRes) { |
|
||||
cameraName = corCameraRes.name |
|
||||
connected[c].join(roomId) |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
app.socket.to(roomId).emit('CAMERA_ONLINE', { |
|
||||
ipctype: 'yingshi', |
|
||||
online: storageD.online, |
|
||||
gbId: existD.id, |
|
||||
name: cameraName |
|
||||
}) |
|
||||
} |
|
||||
} |
|
||||
} else { |
|
||||
const yingshiRes = await models.GbCamera.create(storageD) |
|
||||
await models.Camera.update({ |
|
||||
gbId: yingshiRes.id |
|
||||
}, { |
|
||||
where: { |
|
||||
serialNo: d.deviceSerial |
|
||||
} |
|
||||
}) |
|
||||
} |
|
||||
} |
|
||||
pageStart++ |
|
||||
} else { |
|
||||
pageStart = -1 |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
// console.log(deviceList);
|
|
||||
console.info(`萤石状态查询用时 ${moment().diff(startTime, 'seconds')} s`) |
|
||||
} catch (error) { |
|
||||
app.fs.logger.error(`sechedule: freshYingshiState, error: ${error}`); |
|
||||
} |
|
||||
}); |
|
||||
|
|
||||
return { |
|
||||
freshYingshiState |
|
||||
} |
|
||||
} |
|
Loading…
Reference in new issue