maochaoying 2 years ago
parent
commit
10def83a6d
  1. 1
      src/constant/err.type.js
  2. 16
      src/middleware/chicken.middleware.js
  3. 5
      src/router/chicken.route.js
  4. 42
      src/service/coop.service.js

1
src/constant/err.type.js

@ -16,4 +16,5 @@ module.exports = {
varietyNameAlreadyExisted: Response("50003", "鸡苗品种名称重复"),
varietyReasonNameAlreadyExisted: Response("50004", "死亡原因名称重复"),
factoryNameAlreadyExisted: Response("50005", "鸡苗厂家名称重复"),
exceedMaxChickenNumberIncoop: Response("50006", "进鸡数量超出鸡笼最大容纳量"),
};

16
src/middleware/chicken.middleware.js

@ -0,0 +1,16 @@
const { getMaxChickenNumByIds } = require("../service/coop.service");
const { exceedMaxChickenNumberIncoop } = require("../constant/err.type");
const verifyChickenNumberRightful = async (ctx, next) => {
const { chicken_number, coop_id } = ctx.request.body;
const maxNumber = await getMaxChickenNumByIds(coop_id);
if (maxNumber < chicken_number) {
ctx.app.emit("error", exceedMaxChickenNumberIncoop, ctx);
return;
}
await next();
};
module.exports = {
verifyChickenNumberRightful,
};

5
src/router/chicken.route.js

@ -4,6 +4,9 @@ const router = new Router({ prefix: "/chicken" });
const { auth, hasAdminPermission } = require("../middleware/auth.middleware");
const {
verifyChickenNumberRightful,
} = require("../middleware/chicken.middleware");
const {
add,
info,
all,
@ -12,7 +15,7 @@ const {
ratio,
} = require("../controller/chicken.controller");
router.post("/add", auth, add);
router.post("/add", auth, verifyChickenNumberRightful, add);
// 根据id获取新进鸡苗记录详情。
router.get("/info", auth, info);

42
src/service/coop.service.js

@ -116,36 +116,17 @@ class CoopService {
// 查询空闲鸡舍
// 没有进鸡记录的
// 目前鸡舍新增字段is_empty进行判断即可。
async getEmptyCoopList(house_id) {
const res = await Coop.findAll({
where: {
house_id,
is_empty: 1,
},
});
const arr = res.map((item) => item.dataValues);
const coopidArr = res?.map((item) => item.dataValues.id);
// 筛选arr
const chickenList = await Chicken.findAll({
where: {
house_id,
is_marketed: 0,
},
});
const chickArr = chickenList.map((item) => item.dataValues.coop_id);
// 找到两个数组的非交集
const flat = chickArr
.map((item) => item.split(","))
.flat()
.map((item) => parseInt(item));
const resIds = findDiffArr(coopidArr, flat);
let realRes = [];
arr.map((item) => {
if (resIds.includes(item.id)) {
realRes.push(item);
}
});
// realRes 即为空闲 鸡舍
return realRes;
return arr;
}
async getCoopNumbyHouseId(house_id) {
@ -156,6 +137,23 @@ class CoopService {
});
return res;
}
// 获得几个鸡舍的最大容纳量
async getMaxChickenNumByIds(coop_ids) {
const res = await Coop.findAll({
where: {
id: {
[Op.in]: coop_ids,
},
},
});
const arr = res.map((item) => item.dataValues);
let total = 0;
arr.map((item) => {
total += item.coop_cage_number * item.chicken_number;
});
return total;
}
}
module.exports = new CoopService();
Loading…
Cancel
Save