diff --git a/src/constant/err.type.js b/src/constant/err.type.js index f18c056..1ee40f7 100644 --- a/src/constant/err.type.js +++ b/src/constant/err.type.js @@ -16,4 +16,5 @@ module.exports = { varietyNameAlreadyExisted: Response("50003", "鸡苗品种名称重复"), varietyReasonNameAlreadyExisted: Response("50004", "死亡原因名称重复"), factoryNameAlreadyExisted: Response("50005", "鸡苗厂家名称重复"), + exceedMaxChickenNumberIncoop: Response("50006", "进鸡数量超出鸡笼最大容纳量"), }; diff --git a/src/middleware/chicken.middleware.js b/src/middleware/chicken.middleware.js new file mode 100644 index 0000000..bb9bc8f --- /dev/null +++ b/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, +}; diff --git a/src/router/chicken.route.js b/src/router/chicken.route.js index 2e6936e..dc794c0 100644 --- a/src/router/chicken.route.js +++ b/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); diff --git a/src/service/coop.service.js b/src/service/coop.service.js index 4a446a4..03bd3c3 100644 --- a/src/service/coop.service.js +++ b/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();