maochaoying 2 years ago
parent
commit
fbd51ef4b4
  1. 29
      src/controller/environment.controller.js
  2. 4
      src/controller/overview.controller.js
  3. 6
      src/model/environment.model.js
  4. 4
      src/router/environment.route.js
  5. 34
      src/service/environment.service.js
  6. 58
      src/service/overview.service.js
  7. 15
      src/test/someFunc.js
  8. 13
      src/utils/common.js

29
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();

4
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);
}
}

6
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: "记录时间",
},
});
// 强制同步数据库(创建数据表)

4
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;

34
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;
}
}

58
src/service/overview.service.js

@ -1,22 +1,33 @@
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) {
const res = await Chicken.findAll({
where: {
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: whereObj,
});
const arr = res?.map((item) => item.dataValues);
const p = arr.map(async (item) => {
const ids = item.coop_id.split(",");
if (coop_ids.length == 0) {
const allCoops = await getBatchCoopByIds(ids);
item.allCoops = allCoops
.map((item) => {
@ -28,12 +39,47 @@ class OverviewService {
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,

15
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();

13
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,
};
Loading…
Cancel
Save