明树Git Lab

Commit e768aafd authored by zengfanpei's avatar zengfanpei

update

parent 8efc7461
......@@ -16,7 +16,7 @@ async function list(req, res, next) {
search.name = { $regex: req.body.name };
}
const count = await DB.Device.countDocuments(search);
let list = await DB.Device.find(search).skip(skip).limit(pageSize).select('deviceNumber creatTime deviceHQState deviceHQType name').populate({path: "land"}).lean().exec();
let list = await DB.Device.find(search).skip(skip).limit(pageSize).select('deviceNumber creatTime deviceHQType name').populate({path: "land"}).lean().exec();
let deviceNumbers = [];
//处理在线状态
let onlineArr = await deviceModule.getDeviceOnlineMap();
......
......@@ -52,190 +52,8 @@ async function getAllDevice() {
}
}
/* -------------------------------------------有诸多不确定因素,暂时分开,后续 请求日志需要分别按照不同设备种类区分类型------------------------------------------------------------------ */
/**
* 采集上述设备 3 的信息
*/
async function collectDeviceInfo3({ deviceHQType }) {
if (!deviceHQType) {
return;
}
// 查询有效状态、类型的设备信息
const devices = await deviceModule.findAll({ deviceHQType: deviceHQType || 3, deviceHQState: 1, deviceNumber: { $exists: true } }, ['deviceNumber', 'deviceHQType']);
// if (col.includes("温度") && data[i]) {
// const dataArr = data[i].trim().split(' ');
// obj.soilTemperature = String(dataArr[0]).trim();
// obj.soilTemperatureUnit = String(dataArr[1]).trim();
// }
// if (col.includes("湿度")) {
// const dataArr = data[i].trim().split(' ');
// obj.soilMoisture = String(dataArr[0]).trim();
// obj.soilMoistureUnit = String(dataArr[1]).trim();
// }
// if (col.includes("氮")) {
// const dataArr = data[i].trim().split(' ');
// obj.nitrogen = String(dataArr[0]).trim();
// obj.nitrogenUnit = String(dataArr[1]).trim();
// }
// if (col.includes("磷")) {
// const dataArr = data[i].trim().split(' ');
// obj.phosphorus = String(dataArr[0]).trim();
// obj.phosphorusUnit = String(dataArr[1]).trim();
// }
// if (col.includes("钾")) {
// const dataArr = data[i].trim().split(' ');
// obj.potassium = String(dataArr[0]).trim();
// obj.potassiumUnit = String(dataArr[1]).trim();
// }
// if (col.includes("信号强度")) {
// const dataArr = data[i].trim().split(' ');
// obj.signalSterngth = String(dataArr[0]).trim();
// obj.signalSterngthUnit = String(dataArr[1]).trim();
// }
// if (col.includes("错误码")) {
// obj.errorCode = data[i].trim();
// }
// if (col.includes("版本号")) {
// obj.version = data[i].trim();
// }
}
/**
* 采集上述设备 4 的信息
*/
async function collectDeviceInfo4({ deviceHQType }) {
if (!deviceHQType) {
return;
}
const url = sysConfig.device.getInsectNewCollectionResult;
const token = sysConfig.device.token;
const userName = sysConfig.device.userName;
// const password = sysConfig.device.password;
// 查询有效状态、类型的设备信息
const devices = await deviceModule.findAll({ deviceHQType: '4', deviceHQState: 1 }, ['deviceNumber', 'deviceHQType']);
console.log(devices.length)
for (let index = 0; index < devices.length; index++) {
const dev = devices[index];
// console.log(dev);
const result = await httpRequest({
url,
method: "POST",
params: { token, userName, deviceNumber: dev.deviceNumber }
});
// console.log(result);
if(result && result.data && result.data.state == "success") {
let obj = result.data.data || {};
obj.name = obj.name || dev.name;
await collectIPSModule.insertHQData(obj);
console.log(obj);
// 3. 处理虫情每日种类数量记录
// handleIPS(obj);
// 4. 处理设备在线状态
handleDeviceOnLine({deviceNumber: obj.deviceNumber, online: obj.online}); //onLineState 1在线0离线
}
}
}
/**-------------数据处理---------------- */
// colInfo是一个硬件设备的一条信息
async function handleCJData(colInfo, deviceHQType) {
let handleData = {}, attrExistMap = {};
//1. 先获取到attr配置
let attrs = await DB.CollectAttribute.find({del: 0, enable: true, deviceHQType});
let types = colInfo.type.split('/');
let data = colInfo.data.split('|');
for (let i = 0; i < types.length; i++) {
const col = types[i];
for (let j = 0; j < attrs.length; j++) {
const attr = attrs[j];
if(col.includes(attr.deviceKey)) {
if(['errorCode', 'version'].includes(attr.dbKey)) {
handleData[attr.dbKey] = data[i].trim();
} else {
const dataArr = data[i].trim().split(' ');
if(attrExistMap[attr.dbKey]) {
handleData[`${attr.dbKey}Arr`] = handleData[`${attr.dbKey}Arr`] || [];
handleData[`${attr.dbKey}Arr`].push(Number(String(dataArr[0]).trim()));
} else {
handleData[attr.dbKey] = Number(String(dataArr[0]).trim());
}
handleData[`${attr.dbKey}Unit`] = String(dataArr[1]).trim();
}
}
}
}
for (let index = 0; index < attrs.length; index++) {
const attr = attrs[index];
if(handleData[`${attr.dbKey}Arr`] && handleData[`${attr.dbKey}Arr`].length) {
handleData[attr.dbKey] = (_.sum(handleData[`${attr.dbKey}Arr`]) / handleData[`${attr.dbKey}Arr`].length).toFixed(2)
}
}
return handleData;
}
async function handleDeviceOnLine({deviceNumber, online}) {
// 虫情 online = 0;//在线状态 0false/1true
// 土壤 onLineState 1在线0离线
if(!deviceNumber) {
return;
}
//该方式待定
let key = `device_online`;
if(online == 0) {
await ioRedis.hdel(key, deviceNumber);
} else {
let obj = {};
obj[deviceNumber] = 1;
await ioRedis.hset(key, obj)
}
}
async function handleDeviceThreshold(obj) {
let ths = await DB.CollectThreshold.find({del: 0, enable: true, deviceNumber: obj.deviceNumber}).populate({path: "attrId"}).lean().exec();
let exceeds = [];
for (let i = 0; i < ths.length; i++) {
const element = ths[i];
// console.log(element, "====", obj[element.dbKey], _.isNumber(obj[element.dbKey]), _.gt(obj[element.dbKey], element.max), _.isNumber(element.max))
if(_.isNumber(obj[element.dbKey])) {
if(_.isNumber(element.max) && _.gt(obj[element.dbKey], element.max)) {
// 采集值 > 最大设置值
// exceeds.push({...element, collectValue: obj[element.dbKey], deviceNumber: obj.deviceNumber});
exceeds.push(`设备${obj.deviceNumber}, 采集值: ${obj[element.dbKey]}, 最大阈值:${element.max}`);
}
if(_.isNumber(element.min) && _.lt(obj[element.dbKey], element.min)) {
// exceeds.push({...element, collectValue: obj[element.dbKey], deviceNumber: obj.deviceNumber});
exceeds.push(`设备${obj.deviceNumber}, 采集值: ${obj[element.dbKey]}, 最小阈值:${element.min}`);
}
}
}
console.log(exceeds);
// 处理通知模板
if(exceeds.length) {
await DB.Notice.create({
sendUser: "66d6c4099f8480c6db53ce13",
receiveUser: "66d6c4099f8480c6db53ce13",
content: exceeds.join("\\n"),
});
}
}
/**-------------数据处理---------------- */
// collectDeviceInfo1({deviceHQType:1});
// getDeviceList()
module.exports = {
getDeviceList,
getAllDevice,
collectDeviceInfo3,
collectDeviceInfo4,
}
\ No newline at end of file
......@@ -4,6 +4,10 @@ const config = require('../config');
const deviceCron = require('./deviceCron');
//土壤
const smcCron = require('./smcCron');
//气象
const wsCron = require('./wsCron');
// 虫情
const ipsCron = require('./ipsCron');
/**
根据config cron 配置 定时处理
......@@ -20,63 +24,65 @@ const smcCron = require('./smcCron');
const cron = () => {
/*-----------------------------采集设备信息-------------------------------------*/
// 1 土壤温湿度、土壤氮磷钾, 2 土壤ph、土壤电导率, 3 气象站
if (sysConfig && sysConfig.cron && sysConfig.cron.getDeviceList) {
console.log("getDeviceList:", new Date());
// 每天10点30分 处理 1 30 10 * * *
// new nodeCron.schedule('1 30 10 * * *', async () => {
new nodeCron.schedule('1 * * * * *', async () => {
await deviceCron.getDeviceList();
}, { timezone: "Asia/Shanghai" });
}
// if (sysConfig && sysConfig.cron && sysConfig.cron.getDeviceList) {
// console.log("getDeviceList:", new Date());
// // 每天10点30分 处理 1 30 10 * * *
// // new nodeCron.schedule('1 30 10 * * *', async () => {
// new nodeCron.schedule('1 * * * * *', async () => {
// await deviceCron.getDeviceList();
// }, { timezone: "Asia/Shanghai" });
// }
// 4 虫情
if (sysConfig && sysConfig.cron && sysConfig.cron.getAllDevice) {
console.log("getAllDevice:", new Date());
// // 4 虫情
// if (sysConfig && sysConfig.cron && sysConfig.cron.getAllDevice) {
// console.log("getAllDevice:", new Date());
// new nodeCron.schedule('1 30 10 * * *', async () => {
new nodeCron.schedule('1 * * * * *', async () => {
await deviceCron.getAllDevice();
}, { timezone: "Asia/Shanghai" });
}
// // new nodeCron.schedule('1 30 10 * * *', async () => {
// new nodeCron.schedule('1 * * * * *', async () => {
// await deviceCron.getAllDevice();
// }, { timezone: "Asia/Shanghai" });
// }
/*-----------------------------采集数据信息-------------------------------------*/
// 土壤温湿度、氮磷钾 deviceHQType 1
if (sysConfig && sysConfig.cron && sysConfig.cron.collectDeviceInfo) {
console.log("collectDeviceInfo1:", new Date());
// 每10分钟
new nodeCron.schedule('0 */3 * * * *', async () => {
await smcCron.collectDeviceInfo1({ deviceHQType: 1 });
}, { timezone: "Asia/Shanghai" });
}
// 土壤ph土壤电导率 deviceHQType 2
if (sysConfig && sysConfig.cron && sysConfig.cron.collectDeviceInfo) {
console.log("collectDeviceInfo2:", new Date());
new nodeCron.schedule('0 */3 * * * *', async () => {
await smcCron.collectDeviceInfo1({ deviceHQType: 2 });
}, { timezone: "Asia/Shanghai" });
}
// if (sysConfig && sysConfig.cron && sysConfig.cron.collectDeviceInfo) {
// console.log("collectDeviceInfo1:", new Date());
// // 每10分钟
// new nodeCron.schedule('0 */1 * * * *', async () => {
// await smcCron.collectDeviceInfo1({ deviceHQType: 1 });
// }, { timezone: "Asia/Shanghai" });
// }
// // 获取设备上述设备 3 采集信息
// // 土壤ph土壤电导率 deviceHQType 2
// if (sysConfig && sysConfig.cron && sysConfig.cron.collectDeviceInfo) {
// console.log("collectDeviceInfo3:", new Date());
// console.log("collectDeviceInfo2:", new Date());
// new nodeCron.schedule('* */3 * * * *', async () => {
// await deviceCron.collectDeviceInfo3({ deviceHQType: 3 });
// new nodeCron.schedule('30 */1 * * * *', async () => {
// await smcCron.collectDeviceInfo1({ deviceHQType: 2 });
// }, { timezone: "Asia/Shanghai" });
// }
// // 获取设备上述设备 4 采集信息
// // 3 气象站 获取设备上述设备 3 采集信息
// if (sysConfig && sysConfig.cron && sysConfig.cron.collectDeviceInfo) {
// console.log("collectDeviceInfo4:", new Date());
// console.log("collectDeviceInfo3:", new Date());
// new nodeCron.schedule('* */3 * * * *', async () => {
// await deviceCron.collectDeviceInfo4({ deviceHQType: 4 });
// new nodeCron.schedule('50 */1 * * * *', async () => {
// await wsCron.collectDeviceInfo3({ deviceHQType: 3 });
// }, { timezone: "Asia/Shanghai" });
// }
// 获取设备上述设备 4 采集信息
if (sysConfig && sysConfig.cron && sysConfig.cron.collectDeviceInfo) {
console.log("collectDeviceInfo4:", new Date());
new nodeCron.schedule('1 */1 * * * *', async () => {
await ipsCron.collectDeviceInfo4({deviceHQType: 4});
}, { timezone: "Asia/Shanghai" });
}
}
module.exports = cron;
\ No newline at end of file
// 气象
const httpRequest = require('../utils/httpRequest');
const deviceModule = require('../module/deviceModule');
const collectIPSModule = require('../module/collectIPSModule');
const _ = require('lodash');
/**
* 采集上述设备 4 的信息
*/
async function collectDeviceInfo4({ deviceHQType }) {
// const url = sysConfig.device.getAllDevice;
// const token = sysConfig.device.token;
// const userName = sysConfig.device.userName;
// const password = sysConfig.device.password;
// // 查询有效状态、类型的设备信息
// const devices = await deviceModule.findAll({ deviceHQType: '4'}, ['deviceNumber', 'deviceHQType']);
// console.log(devices.length)
// for (let index = 0; index < devices.length; index++) {
// const dev = devices[index];
// // console.log(dev);
// const result = await httpRequest({
// url,
// method: "POST",
// params: { token, userName, deviceNumber: dev.deviceNumber }
// });
// // console.log(result);
// if(result && result.data && result.data.state == "success") {
// let obj = result.data.data || {};
// obj.name = obj.name || dev.name;
// await collectIPSModule.insertHQData(obj);
// console.log(obj);
// // 3. 处理虫情每日种类数量记录
// // 4. 处理设备在线状态
// handleDeviceOnLine({deviceNumber: obj.deviceNumber, online: obj.online}); //onLineState 1在线0离线
// } else {
// handleDeviceOnLine({deviceNumber: obj.deviceNumber, online: 0}); //onLineState 1在线0离线
// }
// }
/**
* 按硬件方要求 获取虫子的种类 和 数量 均调用设备列表接口
*/
const url = sysConfig.device.getAllDevice;
const token = sysConfig.device.token;
const userName = sysConfig.device.userName;
const password = sysConfig.device.password;
let result = await httpRequest({
url,
method: "POST",
params: { token, userName, password },
});
if (result && result.data && result.data.state == "success") {
let devArr = result.data.data || [];
for (let index = 0; index < devArr.length; index++) {
const element = devArr[index];
let obj = {
downloadUrl: element.imgUrl,
newTime: element.latestCollectionTime,
results: element.results || "",
typeCount: element.typeCount || 0,
newCount: element.newCount || 0,
online: element.online,
deviceNumber: element.deviceNumber,
}
console.log(obj, "===================================")
await collectIPSModule.insertHQData(obj); // 处理虫子种类入库 数量入库
handleDeviceOnLine({ deviceNumber: obj.deviceNumber, online: obj.online }); //onLineState 1在线0离线
}
}
}
/**
* {
data: [
{
id: 2041,
creatTime: '2024-10-15 09:48:55',
deviceNumber: 'FF35029f76da',
name: '乐田运行中心虫情检测仪1',
leader: '吴工',
phone: '15766510011',
position: '雷州市客路镇乐尾村',
latitudeAndLongitude: '110.04843,21.063616',
createUser: 'ZJLTNY',
latestCollectionCount: 0,
latestCollectionTime: '2024-10-17 14:58:00',
typeCount: 0,
imgUrl: 'picturesCompress/FF35029F76DA/orgin_2024-10-17-14-57-59.jpg',
readState: 1,
online: 0,
dayEarlyCount: 0,
rain: 0,
wind: 0,
startType: 'position',
hours: 0,
minute: 0,
sun: 0,
rainMouth: 0,
uploadInterval: 0,
isUpdate: 0,
deviceType: 0,
riseHour: '6',
riseMin: '36',
setHour: '18',
setMin: '13'
}
],
state: 'success'
}
*/
async function handleDeviceOnLine({ deviceNumber, online }) {
// 虫情 online = 0;//在线状态 0false/1true
// 土壤 onLineState 1在线0离线
if (!deviceNumber) {
return;
}
//该方式待定
let key = `device_online`;
if (online == 0) {
await ioRedis.hdel(key, deviceNumber);
} else {
let obj = {};
obj[deviceNumber] = 1;
await ioRedis.hset(key, obj)
}
}
module.exports = {
collectDeviceInfo4,
}
......@@ -19,7 +19,7 @@ async function collectDeviceInfo1({ deviceHQType }) {
const secretKey = sysConfig.device.secretKey;
// 查询有效状态、类型的设备信息
const devices = await deviceModule.findAll({ deviceHQType: deviceHQType, deviceHQState: 1, deviceNumber: { $exists: true } }, ['deviceNumber', 'deviceHQType', 'name']);
const devices = await deviceModule.findAll({ deviceHQType: deviceHQType, deviceNumber: { $exists: true } }, ['deviceNumber', 'deviceHQType', 'name']);
for (let index = 0; index < devices.length; index++) {
const dev = devices[index];
......@@ -59,11 +59,18 @@ async function collectDeviceInfo1({ deviceHQType }) {
/**-------------数据处理---------------- */
/**
* type: '土壤PH1 / 土壤电导率1 / 土壤PH2 / 土壤电导率2 / 土壤PH3 / 土壤电导率3 / 信号强度 / 错误码 / 版本号',
data: '3.03 PH | 207 us/cm | 3 PH | 202 us/cm | 3.06 PH | 216 us/cm | 31 RSSI | 0 | 11.7 Version',
type: '智壤仪温度1 / 智壤仪湿度1 / 土壤氮1 / 土壤磷1 / 土壤钾1 / 智壤仪温度2 / 智壤仪湿度2 / 土壤氮2 / 土壤磷2 / 土壤钾2 / 智壤仪温度3 / 智壤仪湿度3 / 土壤氮3 / 土壤磷3 / 土壤钾3 / 信号强度 / 错误码 / 版本号',
data: '30.2 ℃ | 11.4 % | 9 mg/kg | 10 mg/kg | 24 mg/kg | 30.1 ℃ | 10.9 % | 10 mg/kg | 12 mg/kg | 20 mg/kg | 30.7 ℃ | 0 % | 8 mg/kg | 11 mg/kg | 17 mg/kg | 31 RSSI | 0 | 11.7 Version',
*/
// colInfo是一个硬件设备的一条信息
async function handleCJData(colInfo, deviceHQType) {
let handleData = {}, attrExistMap = {};
//1. 先获取到attr配置
let attrs = await DB.CollectAttribute.find({del: 0, enable: true, deviceHQType});
let attrs = await DB.CollectAttribute.find({del: 0, enable: true, deviceHQType: {$in: [0, deviceHQType]}});
console.log(attrs)
let types = colInfo.type.split('/');
let data = colInfo.data.split('|');
......
// 气象
const httpRequest = require('../utils/httpRequest');
const deviceModule = require('../module/deviceModule');
const collectWSModule = require('../module/collectWSModule');
const _ = require('lodash');
/* -------------------------------------------有诸多不确定因素,暂时分开,后续 请求日志需要分别按照不同设备种类区分类型------------------------------------------------------------------ */
/**
* 采集上述设备 1 的信息
*/
async function collectDeviceInfo3({ deviceHQType }) {
if (!deviceHQType) {
return;
}
const url = sysConfig.device.getDeviceInfo;
const secretKey = sysConfig.device.secretKey;
// 查询有效状态、类型的设备信息
const devices = await deviceModule.findAll({ deviceHQType: deviceHQType, deviceNumber: { $exists: true } }, ['deviceNumber', 'deviceHQType', 'name']);
for (let index = 0; index < devices.length; index++) {
const dev = devices[index];
const result = await httpRequest({
url,
method: "GET",
params: { secretKey, deviceNumber: dev.deviceNumber }
});
if (result && result.data && result.data.state == "success") {
let colInfo = result.data.data;
if (colInfo && colInfo.deviceNumber) {
// 1. 处理 type 和 data
let handleData = await handleCJData(colInfo, deviceHQType);
let obj = { ...colInfo, ...handleData, deviceHQType };
obj.name = dev.name || obj.name;
console.log(obj, "=============collectDeviceInfo3=============")
// 2. 入库
await collectWSModule.insertHQData(obj); // collectWSModule
// 3. 处理阈值报警通知
// handleDeviceThreshold(obj);
// 4. 处理设备在线状态
handleDeviceOnLine({deviceNumber: obj.deviceNumber, online: obj.onLineState}); //onLineState 1在线0离线
} else {
//出错
// handleDeviceOnLine({deviceNumber: obj.deviceNumber, online: 0}); //onLineState 1在线0离线
}
} else {
handleDeviceOnLine({deviceNumber: dev.deviceNumber, online: 0}); //onLineState 1在线0离线
}
}
}
/**-------------数据处理---------------- */
/**
* type: '温度 / 湿度 / 光照度 / 风速 / 风向 / 雨量 / 信号强度 / 错误码 / 版本号',
data: '25.1 ℃ | 96.2 %RH | 33534 Lux | 2.4 m/s | 西南 | 0.2 mm | 31 RSSI | 0 | 11.7 Version',
*/
async function handleCJData(colInfo, deviceHQType) {
let handleData = {};
//1. 先获取到attr配置
let attrs = await DB.CollectAttribute.find({del: 0, enable: true, deviceHQType: {$in: [0, deviceHQType]}});
console.log(attrs)
let types = colInfo.type.split('/');
let data = colInfo.data.split('|');
for (let i = 0; i < types.length; i++) {
const col = types[i];
for (let j = 0; j < attrs.length; j++) {
const attr = attrs[j];
if(col.includes(attr.deviceKey)) {
if(['errorCode', 'version', 'signalSterngth', 'windDirection'].includes(attr.dbKey)) {
handleData[attr.dbKey] = data[i].trim();
} else {
const dataArr = data[i].trim().split(' ');
handleData[attr.dbKey] = Number(String(dataArr[0]).trim());
handleData[`${attr.dbKey}Unit`] = String(dataArr[dataArr.length - 1]).trim() || "";
}
}
}
}
console.log(handleData, "======1")
return handleData;
}
async function handleDeviceOnLine({deviceNumber, online}) {
// 虫情 online = 0;//在线状态 0false/1true
// 土壤 onLineState 1在线0离线
if(!deviceNumber) {
return;
}
//该方式待定
let key = `device_online`;
if(online == 0) {
await ioRedis.hdel(key, deviceNumber);
} else {
let obj = {};
obj[deviceNumber] = 1;
await ioRedis.hset(key, obj)
}
}
async function handleDeviceThreshold(obj) {
let ths = await DB.CollectThreshold.find({del: 0, enable: true, deviceNumber: obj.deviceNumber}).populate({path: "attrId"}).lean().exec();
let exceeds = [];
for (let i = 0; i < ths.length; i++) {
const element = ths[i];
// console.log(element, "====", obj[element.dbKey], _.isNumber(obj[element.dbKey]), _.gt(obj[element.dbKey], element.max), _.isNumber(element.max))
if(_.isNumber(obj[element.dbKey])) {
if(_.isNumber(element.max) && _.gt(obj[element.dbKey], element.max)) {
// 采集值 > 最大设置值
// exceeds.push({...element, collectValue: obj[element.dbKey], deviceNumber: obj.deviceNumber});
exceeds.push(`设备${obj.deviceNumber}, 采集值: ${obj[element.dbKey]}, 最大阈值:${element.max}`);
}
if(_.isNumber(element.min) && _.lt(obj[element.dbKey], element.min)) {
// exceeds.push({...element, collectValue: obj[element.dbKey], deviceNumber: obj.deviceNumber});
exceeds.push(`设备${obj.deviceNumber}, 采集值: ${obj[element.dbKey]}, 最小阈值:${element.min}`);
}
}
}
console.log(exceeds);
// 处理通知模板
if(exceeds.length) {
await DB.Notice.create({
sendUser: "66d6c4099f8480c6db53ce13",
receiveUser: "66d6c4099f8480c6db53ce13",
content: exceeds.join("\\n"),
});
}
}
/**-------------数据处理---------------- */
// collectDeviceInfo1({deviceHQType:1});
// getDeviceList()
module.exports = {
collectDeviceInfo3,
}
\ No newline at end of file
......@@ -89,12 +89,12 @@ const deviceSchema = new Schema({
ref: "Land",
},
/* -------------------------------------------------- */
deviceHQState: {
type: Number,
default: 1,
comment: "通过http接口获取到的设备状态, 默认有效: 1,某次获取若设备消失,则状态置为失效: 0",
},
// /* -------------------------------------------------- */
// deviceHQState: {
// type: Number,
// default: 1,
// comment: "通过http接口获取到的设备状态, 默认有效: 1,某次获取若设备消失,则状态置为失效: 0",
// },
deviceHQType: {
type: Number,
comment: "用来获取数据的设备类型-(接口文档): 1.土壤温湿度、土壤氮磷钾, 2土壤ph、土壤电导率, 3 气象站, 4虫情",
......
......@@ -32,14 +32,79 @@ async function insertHQData(data) {
if (!(data.deviceNumber && data.newTime)) {
return;
}
data.time = data.newTime;
data.time = data.newTime; // 为跟其他采集一致 ,都用time
let check = await DB.CollectIPS.findOne({ newTime: data.newTime });
if (!check) {
let ret = await DB.CollectIPS.create(data);
ret.results = '蚊子:1'
handleIPSResult(ret);
}
}
/**
* 直接利用硬件的信息结果
* @param {*} data
*/
async function handleIPSResult(data) {
const url = sysConfig.device.getPreventionToInsectName;
const token = sysConfig.device.token;
const userName = sysConfig.device.userName;
try {
if (data.results && data.results != "数据提取成功" && data.results.includes(":")) {
let retArr = data.results.split(',') || [];
for (let index = 0; index < retArr.length; index++) {
const element = retArr[index];
let eleArr = element.split(':');
let name = String(eleArr[0]).trim();
let count = Number(eleArr[1]) || 0;
// 记录虫子类型
let bugType = await DB.CollectIPSType.findOneAndUpdate({ name }, { name }, { upsert: true , returnOriginal: false});
// //获取防止建议---此处建议不从远端取,在本系统根据虫子种类维护建议即可
let plan;
try {
let preInRet = await httpRequest({
url,
method: "GET",
params: { token, userName, name },
});
// console.log("000", preInRet)
if (preInRet && preInRet.status) {
let pData = preInRet.data && preInRet.data.data || [];
for (let pi = 0; pi < pData.length; pi++) {
const pir = pData[pi];
plan = await DB.CollectIPSPlan.findOneAndUpdate({ name }, pir, { upsert: true , returnOriginal: false});
}
}
} catch (error) {
console.log("获取防治建议失败")
}
// 记录识别的每一次识别的 虫子 的种类 和 数量
// 此处暂时 每一次单独记录 不是对每一天做累加
await DB.CollectIPSResult.create({
deviceNumber: data.deviceNumber,
name,
count: count,
time: data.time || data.newTime,
type: bugType && bugType._id,
plan: plan && plan._id || null,
data: data._id,
});
}
// await DB.CollectIPS.updateOne({ _id: data._id }, { cameraRecognition: data.results });
}
} catch (error) {
console.log(error)
}
}
/**
* 复杂版本 直接上传图片 获取结果
* @param {*} data
......@@ -113,86 +178,9 @@ async function insertHQData(data) {
// }
/**
* 直接利用硬件的信息结果
* @param {*} data
*/
async function handleIPSResult(data) {
try {
const url = sysConfig.device.getInsectNewCollectionResult;
const token = sysConfig.device.token;
const userName = sysConfig.device.userName;
if (data.results != "数据提取成功" && data.results.includes(":")) {
let retArr = data.results.split(',') || [];
for (let index = 0; index < retArr.length; index++) {
const element = retArr[index];
let eleArr = element.split(':');
let name = String(eleArr[0]).trim();
// 记录虫子类型
let bugType = await DB.CollectIPSType.findOneAndUpdate({ name }, { name }, { upsert: true });
//获取防止建议---此处建议不从远端取,在本系统根据虫子种类维护建议即可
let preInRet = await httpRequest({
url: sysConfig.device.getPreventionToInsectName,
method: "GET",
params: { token, userName, name },
});
console.log("000", preInRet)
let plan;
if (preInRet && preInRet.status) {
let pData = preInRet.data && preInRet.data.data || [];
for (let pi = 0; pi < pData.length; pi++) {
const pir = pData[pi];
plan = await DB.CollectIPSPlan.findOneAndUpdate({ name }, pir, { upsert: true });
}
}
// 记录识别的每一次识别的 虫子 的种类 和 数量
// 此处暂时 每一次单独记录 不是对每一天做累加
await DB.CollectIPSResult.create({
deviceNumber: data.deviceNumber,
name,
// $inc: {count: 11},
count: element.newCount,
time: data.time || data.newTime,
type: bugType && bugType._id,
plan: plan && plan._id,
data: data._id,
});
}
await DB.CollectIPS.updateOne({ _id: data._id }, { cameraRecognition: data.results });
}
} catch (error) {
console.log(error)
}
}
// setTimeout(() => {
// handleIPSResult({
// downloadUrl: 'pictures/FF355138D5C3/2024-05-29-05-59-43.jpg',
// taggingImgUrl: 'picturesResult/FF355138D5C3/2024-05-29-05-59-43.jpg',
// downloadUrlCompress: 'picturesCompress/FF355138D5C3/orgin_2024-05-29-05-59-43.jpg',
// taggingImgUrlCompress: 'picturesCompress/FF355138D5C3/result_2024-05-29-05-59-43.jpg',
// deviceNumber: 'FF355138D5C3',
// newTime: '2024-05-29 05:59:43',
// results: '飞蛾:2',
// newCount: 2,
// typeCount: 1,
// oldCount: 0,
// oldTime: null,
// oldResults: null,
// oldTypeCount: 0,
// oldDownloadUrl: 'pictures/FF355138D5C3/2024-05-29-05-59-43.jpg',
// oldTaggingImgUrl: 'picturesResult/FF355138D5C3/2024-05-29-05-59-43.jpg',
// oldDownloadUrlCompress: null,
// oldTaggingImgUrlCompress: 'picturesCompress/FF355138D5C3/result_2024-05-29-05-59-43.jpg',
// name: undefined,
// time: '2024-05-29 05:59:43',
// "_id": "66d6d20cdc4220c02affe05d"
// })
// }, 5000)
......
......@@ -31,7 +31,7 @@ async function insertHQDevice(datas, deviceHQType) {
const element = datas[i];
if(element.deviceNumber) {
devNumArr.push(element.deviceNumber);
await DB.Device.findOneAndUpdate({deviceNumber: element.deviceNumber}, {...element, deviceHQType, deviceHQState: 1 }, {upsert: true})
await DB.Device.findOneAndUpdate({deviceNumber: element.deviceNumber}, {...element, deviceHQType }, {upsert: true})
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment