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