diff --git a/src/controller/environment.controller.js b/src/controller/environment.controller.js index ec79da4..4a347f1 100644 --- a/src/controller/environment.controller.js +++ b/src/controller/environment.controller.js @@ -1,4 +1,7 @@ -const { getEnvironmentByCoopId } = require("../service/environment.service"); +const { + getEnvironmentByCoopId, + addNewLog, +} = require("../service/environment.service"); const Response = require("../utils/response"); class EnvironmentController { @@ -7,6 +10,30 @@ class EnvironmentController { const res = await getEnvironmentByCoopId(coop_id); ctx.body = Response(0, "获取当前鸡舍的环境检测结果成功", res); } + + async addLog(ctx, next) { + const { + coop_id, + temperature, + humidity, + co2, + nh3, + illumination, + wind_speed, + h2s, + } = ctx.request.body; + const res = await addNewLog( + coop_id, + temperature, + humidity, + co2, + nh3, + illumination, + wind_speed, + h2s + ); + ctx.body = Response(0, "新增环境检测数据成功", res); + } } module.exports = new EnvironmentController(); diff --git a/src/controller/overview.controller.js b/src/controller/overview.controller.js index 276673d..aadbbc1 100644 --- a/src/controller/overview.controller.js +++ b/src/controller/overview.controller.js @@ -3,8 +3,8 @@ const Response = require("../utils/response"); class OverviewController { async list(ctx, next) { - const { house_id } = ctx.request.body; - const res = await getAllOverViewList(house_id); + const { house_id, coop_ids, batch_ids } = ctx.request.body; + const res = await getAllOverViewList(house_id, coop_ids, batch_ids); ctx.body = Response(0, "获取总览列表数据成功", res); } } diff --git a/src/model/environment.model.js b/src/model/environment.model.js index c8b340a..9107332 100644 --- a/src/model/environment.model.js +++ b/src/model/environment.model.js @@ -44,6 +44,12 @@ const Environment = seq.define("chicken_environment", { allowNull: false, comment: "h2s", }, + log_time: { + type: DataTypes.DATE, + allowNull: false, + defaultValue: DataTypes.NOW, + comment: "记录时间", + }, }); // 强制同步数据库(创建数据表) diff --git a/src/router/environment.route.js b/src/router/environment.route.js index 8747e07..85f826a 100644 --- a/src/router/environment.route.js +++ b/src/router/environment.route.js @@ -3,8 +3,10 @@ const Router = require("koa-router"); const router = new Router({ prefix: "/environment" }); const { auth } = require("../middleware/auth.middleware"); -const { detail } = require("../controller/environment.controller"); +const { detail, addLog } = require("../controller/environment.controller"); router.get("/detail", auth, detail); +router.post("/log", auth, addLog); + module.exports = router; diff --git a/src/service/environment.service.js b/src/service/environment.service.js index 6ad459a..d1944ed 100644 --- a/src/service/environment.service.js +++ b/src/service/environment.service.js @@ -1,6 +1,40 @@ const Environment = require("../model/environment.model"); +const { isIntTime } = require("../utils/common"); +const moment = require("moment"); class EnvironmentService { async getEnvironmentByCoopId(coop_id) { + const res = await Environment.findOne({ + coop_id, + }); + return res ? res.dataValues : null; + } + + async addNewLog( + coop_id, + temperature, + humidity, + co2, + nh3, + illumination, + wind_speed, + h2s + ) { + // 判断当前时间是否为正点 如果是整点则记录 + if (isIntTime()) { + const log_time = moment().format("YYYY-MM-DD HH:mm:ss"); + const res = await Environment.create({ + coop_id, + temperature, + humidity, + co2, + nh3, + illumination, + wind_speed, + h2s, + log_time, + }); + return res ? res.dataValues : null; + } return null; } } diff --git a/src/service/overview.service.js b/src/service/overview.service.js index 2b527b2..1b2abc2 100644 --- a/src/service/overview.service.js +++ b/src/service/overview.service.js @@ -1,39 +1,85 @@ const Chicken = require("../model/chicken.model"); -const { getDayLife } = require("../utils/common"); +const { getDayLife, haveSame } = require("../utils/common"); const { getDieTotal } = require("./die.service"); const { getBatchCoopByIds, getEmptyCoopList, getCoopNumbyHouseId, } = require("./coop.service"); +const { Op } = require("sequelize"); class OverviewService { - async getAllOverViewList(house_id) { + async getAllOverViewList(house_id, coop_ids = [], batch_ids = []) { + // 需要根据coop_ids 和 batch_ids进行模糊查询 + let whereObj = { + house_id, + is_marketed: 0, + }; + batch_ids && + batch_ids.length > 0 && + Object.assign(whereObj, { + batch_number: { + [Op.in]: batch_ids, + }, + }); const res = await Chicken.findAll({ - where: { - house_id, - is_marketed: 0, - }, + where: whereObj, }); const arr = res?.map((item) => item.dataValues); const p = arr.map(async (item) => { const ids = item.coop_id.split(","); - const allCoops = await getBatchCoopByIds(ids); - item.allCoops = allCoops - .map((item) => { - return item.coop_name; - }) - .join(","); - // 需要减去死淘 - const dieNumber = await getDieTotal(ids, house_id); - item.now_number = item.chicken_number - dieNumber; - item.day_life = getDayLife(new Date(), item.real_life_init_time); - return item; + if (coop_ids.length == 0) { + const allCoops = await getBatchCoopByIds(ids); + item.allCoops = allCoops + .map((item) => { + return item.coop_name; + }) + .join(","); + // 需要减去死淘 + const dieNumber = await getDieTotal(ids, house_id); + item.now_number = item.chicken_number - dieNumber; + item.day_life = getDayLife(new Date(), item.real_life_init_time); + return item; + } + // 判断ids和coop_ids有无交集 + if ( + haveSame( + ids.map((item) => parseInt(item)), + coop_ids + ) + ) { + const allCoops = await getBatchCoopByIds(ids); + item.allCoops = allCoops + .map((item) => { + return item.coop_name; + }) + .join(","); + // 需要减去死淘 + const dieNumber = await getDieTotal(ids, house_id); + item.now_number = item.chicken_number - dieNumber; + item.day_life = getDayLife(new Date(), item.real_life_init_time); + return item; + } }); const result = await Promise.all(p); const emptyCoop = await getEmptyCoopList(house_id); + const realCoop = emptyCoop.filter((item) => { + if (coop_ids.length == 0) { + return true; + } + if (coop_ids.includes(parseInt(item.id))) { + return true; + } + return false; + }); + const length = emptyCoop?.length; const totalCount = await getCoopNumbyHouseId(house_id); - const hasCoopCount = totalCount - (emptyCoop?.length || 0); - const real = [...result, ...emptyCoop]; + const hasCoopCount = totalCount - (length || 0); + let real = []; + if (batch_ids.length == 0) { + real = [...result, ...realCoop]; + } else { + real = [...result]; + } return { list: real, coopNum: hasCoopCount, diff --git a/src/test/someFunc.js b/src/test/someFunc.js index 1871333..9770f3a 100644 --- a/src/test/someFunc.js +++ b/src/test/someFunc.js @@ -73,6 +73,17 @@ // console.log(joinTime); // } -const { getTimeLastDate } = require("../utils/common"); +// const { getTimeLastDate } = require("../utils/common"); -console.log(getTimeLastDate("2023-03-28 12:12:12", 3)); +// console.log(getTimeLastDate("2023-03-28 12:12:12", 3)); + +function isIntTime() { + const now = new Date(); + const hour = now.getHours(); //得到小时数 + const minute = now.getMinutes(); //得到分钟数 + const second = now.getSeconds(); //得到秒数 + console.log(minute); + console.log(second); +} + +isIntTime(); diff --git a/src/utils/common.js b/src/utils/common.js index 0809587..3cc8f5f 100644 --- a/src/utils/common.js +++ b/src/utils/common.js @@ -19,6 +19,18 @@ function generateSerialNumber() { return `${year}${month}${date}${hour}${minute}${second}${time}`; } +// 判断当时时间是否为整点 +function isIntTime() { + const now = new Date(); + const hour = now.getHours(); //得到小时数 + const minute = now.getMinutes(); //得到分钟数 + const second = now.getSeconds(); //得到秒数 + if (second == 0 && minute == 0) { + return true; + } + return false; +} + // 判断两数组是否有相同元素, true: 存在相同 false:没相同 function haveSame(arr, otherArr) { // 合并数组 @@ -85,6 +97,7 @@ module.exports = { generateSerialNumber, haveSame, getDayLife, + isIntTime, findDiffArr, getTimeLastDate, };