客户是都尔霍姆蛋鸡养殖场:两个基地(贺胜农场、双溪农场),高床有机平养海兰褐蛋鸡,每天人工清点鸡蛋,一箱 360 枚。他们发来的需求说明书非常专业,我逐条拆解成开发任务:
| 需求维度 | 客户原话(提炼) | 我们做了什么 |
|---|---|---|
| 角色权限 | 5 类人:鸡舍管理员/技术负责人/仓库/饲料配制员/场长 | 服务端 RBAC,鸡舍管理员只能看自己的舍、看不到成本 |
| 鸡蛋分级 | A蛋+B蛋=合格,C蛋=次品,破蛋=废品蛋 | 录入表单按客户术语分 4 档,系统自动合并 A+B=合格 |
| 生产计算 | 只填必填项,其余自动算 | 13 项自动计算:期末存栏/产蛋率/均蛋重/料蛋比/存活率/合格率… |
| 标准对比 | 和海兰褐标准曲线对比 | 内置海兰褐 1-80 周体重/采食/产蛋率标准,偏离自动标红 |
| 物资闭环 | 兽药疫苗先入总仓,领用下发才算成本 | 入库→出库领用→自动扣库存→成本自动抓取 |
| 饲料车间 | 原料/配方/成品独立于总仓 | 原料仓+配方库+配料生产(自动扣料)+调拨鸡舍 |
| 成本核算 | 按鸡舍+批次滚动,算单枚鸡蛋成本 | 直接成本自动抓取+分摊(按存栏权重)+淘汰鸡冲减→单枚/斤蛋成本 |
| AI 决策 | 系统必须有 AI,客户掌握经营状况 | AI 决策中心:健康评分+诊断+行动清单+趋势预判 |
技术选型延续 Y2Ksoft 的成熟套路,但这次是服务端正式版(不是演示版):
// 技术栈
后端 Node.js (Express) + node:sqlite(零依赖数据库)
前端 单页 H5(index.html + app.js),手机微信/电脑双端自适应
存储 SQLite 单文件 farm.db,全量真实持久化
权限 服务端 requireAuth + requireRole 双重校验(前端菜单只是隐藏,后端才拦截)
AI /api/ai/suggestions 规则引擎(可配 LLM_API_KEY 升级真大模型)
// 数据表(26 张,业务闭环全覆盖)
users sessions bases houses batches materials
wh_stock wh_records feed_raw feed_finished formulas
feed_produce feed_dispatch feed_raw_recs daily
immunizations medications weights lights antibodies
monthly_costs incomes settlements ai_suggestions attachments tasks
为什么用 node:sqlite?服务器 Node 20 不支持,我们装 Node 22 到 /opt,服务开箱即用、数据库就一个文件,备份恢复 = 下载/上传一个文件,客户现场部署最简单。
鸡舍管理员在手机上只填 A/B/C/废品蛋枚数 + 存栏 + 死淘 + 饲料,服务端实时算出 13 项指标并和海兰褐标准对比:
function calcDaily(rec, batch){
const end = rec.open - rec.dead - rec.cull; // 期末存栏
const a=rec.a_cnt, b=rec.b_cnt, c=rec.c_cnt, w=rec.waste_cnt;
const qualCnt = a+b; // 合格蛋 = A蛋+B蛋(客户术语)
const subCnt = c, brkCnt = w; // C蛋=次品, 破蛋=废品
layRate: eggsTotal / end * 100 // 产蛋率
avgEggWt: total_kg*1000 / eggsTotal // 均蛋重
fcr: feed_kg / total_kg // 料蛋比
cases: qualCnt / 360 // 合格件数(1件=360枚)
deviation: |理论枚数-实际枚数| / 理论枚数 // 重量校验,>5% 标红
flags: 产蛋率低于标准 / 死淘偏高 / 料蛋比偏高 // 自动预警
}
所有单据走「草稿 → 提交 → 审核」三步,审核通过才生效:总仓出库要审核、饲料调拨要审核、生产日报要审核。审核中心集中处理,全程留痕(谁提交、谁审核、什么时候)。
// 单枚鸡蛋成本(核心公式)
净投入 = 鸡苗成本 + 饲料总费用 + 总仓领用(兽药疫苗耗材)
+ 分摊人工/水电/折旧 + 其他耗材 − 淘汰鸡变卖收入
单枚成本 = 净投入 ÷ 批次累计实际产蛋枚数(人工清点)
斤蛋成本 = 净投入 ÷ 批次产蛋总斤数
// 分摊规则可切换:按存栏权重自动分摊 / 直接指定鸡舍金额
客户说不喜欢干巴巴的表格,更不喜欢挤成一团的数字。我们参考陆龙江 ERP 的图表风格,把驾驶舱做成 6 张图、每张都带数字:
| 图表 | 形式 | 客户看懂什么 |
|---|---|---|
| 近14天产蛋率趋势 | 多折线 + 海兰褐标准虚线 | 我的鸡和标准差多少 |
| 产蛋计划燃尽图 | 计划剩余线 vs 实际剩余线 | 今天该产多少、还差多少 |
| 各鸡舍产蛋率排行 | 水平条形 + 标准竖线 | 哪个舍达标、哪个舍拖后腿 |
| 近14天均蛋重趋势 | 多折线 + 标准蛋重 | 蛋重有没有正常长大 |
| 蛋品质量帕累托 | 柱状 + 累计%折线(双Y轴) | 合格蛋占 98%,次品废品是少数 |
| 疫苗/物料到期 | 水平条(30/60/90天分色) | 哪些苗要到期该补了 |
数字防重叠的细节:折线图数据点多时,只标「峰值点 + 末尾点」,末尾 4 条线上下错开(-6/-19/+12/+23),标准虚线不标数字,图例里显示最新值——客户一眼看清,不会糊成一团。
客户原话:"整个系统必须有 AI 来决策、来控制整个系统的变化情况,这样客户才能掌握自己的经营状况、做成改变和变化"。我们做了规则引擎版(可升级真 LLM):
客户每天登录 → 看分数 → 看问题清单 → 照着行动 → 数据改善 → 分数上升。系统替他盯指标,他做决策——这才是"驱动型系统"。
以下全部为系统真实界面(演示数据 7.5 个月 / 613 条生产记录 / 4 个在产批次),方便客户直接看效果: