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, getYingshiPlayUrl, cameraStatePush } = 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) { // 状态更新 if (storageD.online == 'ON' && !existD.playUrl) { const playUrlRes = await getYingshiPlayUrl({ deviceSerial: d.deviceSerial, token: tokenYingshi }) storageD.playUrl = playUrlRes } await models.GbCamera.update(storageD, { where: { id: existD.id } }) // 状态更新 END // 状态推送 cameraStatePush({ gbId: existD.id, online: storageD.online, ipctype: storageD.ipctype, }) // 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( // '0 0 4 */1 *', // '*/30 * * * *', '0 34 5 * * *', async () => { try { const { models } = app.fs.dc const { token4yingshi, getYingshiPlayUrl } = 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) { for (let d of deviceRes.data) { const playUrlRes = await getYingshiPlayUrl({ deviceSerial: d.deviceSerial, token: tokenYingshi }) await models.GbCamera.update({ playUrl: playUrlRes, }, { where: { streamid: d.deviceSerial } }) } if (deviceRes.data.length == 50) { pageStart++ } else { pageStart = -1 } } } } } catch (error) { app.fs.logger.error(`sechedule: freshYingshiPlayUrl, error: ${error}`); } } ) return { freshYingshiState, freshYingshiPlayUrl } }