# 智慧牲畜养殖管理系统 **Repository Path**: rootxss/FMS ## Basic Information - **Project Name**: 智慧牲畜养殖管理系统 - **Description**: 智慧养殖管理系统,旨在减轻畜牧场管理员负担,可以一站式管理牲畜健康,场地管理,围栏管理,iot接入等功能 demo地址:https://fms.sec.hn.cn/ - **Primary Language**: Python - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: https://fms.sec.hn.cn/ - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 2 - **Created**: 2025-12-08 - **Last Updated**: 2026-06-26 ## Categories & Tags **Categories**: erp **Tags**: Python, vue3, FastAPI, 智慧养殖 ## README # FMS 智慧养殖管理系统(系统界面图在最后) ## 前置环境 - Python 3.11/3.12 - Node.js 18+ - MySQL(已提供连接:`mysql.sec.hn.cn:63306`,用户 `liangshanmei`,库 `liangshanmei`) ## 数据库初始化 - 推荐:执行合并后的建库脚本 - `db/schema_all.sql` 包含全部业务表(采购/养殖/环境/成本/健康等)与索引 - 命令示例: - `mysql -h mysql.sec.hn.cn -P 63306 -u liangshanmei -p liangshanmei < db/schema_all.sql` - 兼容:Alembic 迁移 - 配置后端 `.env`(见“后端初始化”) - 执行迁移:`alembic -c backend/alembic.ini upgrade head` ## 后端初始化与启动(FastAPI + SQLAlchemy + Alembic + MySQL) 1. 配置环境变量 - 复制 `backend/.env.example` 为 `backend/.env` 并替换密码 - 或直接使用已生成文件: - `DATABASE_URL=mysql+aiomysql://liangshanmei:YXap8y3Yp2h6crj6@mysql.sec.hn.cn:63306/liangshanmei` - `ALEMBIC_DATABASE_URL=mysql+pymysql://liangshanmei:YXap8y3Yp2h6crj6@mysql.sec.hn.cn:63306/liangshanmei` - 其他:`JWT_SECRET`、`JWT_ALGORITHM`、`JWT_EXPIRE_MINUTES` 2. 安装依赖 - `pip install -r backend/requirements.txt` 3. 数据库迁移 - `alembic -c backend/alembic.ini upgrade head` 4. 可选:初始化种子数据 - `python backend/scripts/seed.py` 5. 启动服务 - `python -m uvicorn backend.app.main:app --host 127.0.0.1 --port 8000 --reload` - 接口文档:`http://127.0.0.1:8000/docs` 默认账号: - 管理员:`admin/000000` - 普通用户:`user/000000` ## 前端(单目录 Vue3 + Element Plus) 1. 进入目录并安装依赖 - `cd frontend/web` - `npm install` 2. 配置 API 地址 - 前端已内置代理:开发环境请求默认走 `/api` 代理至 `VITE_API_BASE`(默认 `http://127.0.0.1:8000`) - 可在前端顶部齿轮“后端地址”弹窗中直接修改并测试连通性(写入本地存储) 3. 启动开发服务器 - `npm run dev` - 访问:`http://localhost:5176/` 功能入口: - 登录 → 根据角色跳转(Admin → 仪表盘;Employee → 订单) - Admin:仪表盘、猪场管理、采购订单(创建/审批/分配)、健康监控、成本管理 - Employee:采购订单列表与到货登记、健康监控、成本管理(仅查看与汇总;录入需 Admin) ## 常见问题 - 无法安装 `aiomysql`:后端已兼容同步 `pymysql` 驱动,正常使用不影响接口功能。 - 迁移失败 `No module named 'backend'`:已在 `backend/alembic/env.py` 中注入项目根路径,如仍报错请确认在项目根目录执行命令。 - 创建采购订单 500(`NoReferencedTableError: suppliers`):请确认已执行 `db/schema_all.sql`(包含 `suppliers` 表),重启后端;若仍报错,检查后端日志与数据库连接串。 - 成本汇总 500:已修复日期计算依赖导入;更新后端并重启即可。 ## 后端接口新增(近期) - 健康监控 `/health` - `GET /health/latest?minutes=&limit=`:返回近时序与均值 - `POST /health/ingest`:管理员写入监测数据 - 成本管理 `/costs` - `GET /costs/`:列表(Admin) - `POST /costs/`:录入(Admin) - `GET /costs/summary?month=YYYY-MM`:月度汇总(Admin) ## 前端改动(近期) - 登录页深度美化:动态背景、玻璃卡片、成功反馈与彩带动画 - 顶栏搜索:支持用户/猪场/订单/档案/耳标联想并跳转 - 顶栏齿轮:后端地址设置与连通性测试 - 侧栏固定:滚动时保持左侧栏常驻,主内容区域自动避让 - 员工可见入口:健康监控、成本管理(录入仅限管理员) ## 目录结构摘要 - `backend/` 后端源码与迁移脚本 - `frontend/web/` 单前端目录(Vue3 + Element Plus) - `db/schema_all.sql` 完整合并版建库脚本(推荐使用) - `db/reset.sql` 清表脚本(开发环境用) ## 项目概览 - 目标:面向养殖场的生产管理与运营平台,涵盖采购、养殖档案、耳标、出勤与薪资、环境监测、健康监控、成本管理等模块 - 特点:前后端分离、角色权限控制、暗色主题适配、统一交互与动效优化、可扩展的数据采集与统计 ## 技术栈与架构 - 前端:`Vue 3` + `Vite` + `Element Plus`,路由 `vue-router@4` - 后端:`FastAPI` + `SQLAlchemy` + `Alembic`,数据库 `MySQL` - 认证:`JWT`,角色 `Admin / Employee` - 代理与配置:开发下使用 Vite `server.proxy` 代理至 `VITE_API_BASE` ## 核心模块与功能 - 采购订单:创建/审批/分配/到货登记,支持订单明细(品种/数量/均重/单价/备注)与状态进度展示 - 我的订单:员工查看分配订单、到货登记与详情 - 耳标管理:登记/绑定/解绑,批量登记与扫码枪录入,指标(心率/体温/步数)查询 - 生猪档案:档案列表、筛选与创建,状态标签美化 - 出勤:提交与列表查看,默认值优化与反馈 - 薪资:录入与列表,概览卡片(待发/已发/当页总额) - 环境监测:写入与列表,概览卡片(最近温湿度)与趋势微图(Sparkline) - 健康监控:时序与均值查询,后端指标写入与前端概览卡片 - 成本管理:录入与列表,月度汇总(饲料/用工/养殖)+ 前端汇总展示 ## API 概览(节选) - 认证/用户:`/auth/*`、`/users/*` - 采购:`GET /purchase-orders/`、`POST /purchase-orders/`、`POST /purchase-orders/{id}/approve`、`POST /purchase-orders/{id}/assign`、`POST /purchase-orders/deliveries`、`GET /purchase-orders/{id}` - 供应商:`GET /suppliers/`、`POST /suppliers/` - 耳标:`GET /ear-tags/`、`POST /ear-tags/`、`POST /ear-tags/bind`、`POST /ear-tags/bulk-unbind`、`POST /ear-tags/metrics`、`GET /ear-tags/metrics`、`POST /ear-tags/bulk` - 生猪档案:`GET /pigs/`、`POST /pigs/` - 出勤:`GET /attendance/`、`POST /attendance/` - 薪资:`GET /payroll/`、`POST /payroll/` - 环境:`GET /environment/`、`POST /environment/` - 健康:`GET /health/latest`、`POST /health/ingest` - 成本:`GET /costs/`、`POST /costs/`、`GET /costs/summary?month=YYYY-MM` ## 角色与权限 - Admin:拥有配置与创建权限(订单创建/审批/分配、成本录入、供应商管理等) - Employee:拥有列表与提交权限(我的订单到货、出勤提交、指标查看等);录入限制受后端校验 ## 配置项说明 - 后端 `.env`: - `DATABASE_URL` / `ALEMBIC_DATABASE_URL`:数据库连接(推荐 MySQL) - `JWT_SECRET` / `JWT_ALGORITHM` / `JWT_EXPIRE_MINUTES`:JWT 设置 - 前端 `.env.local`(可选): - `VITE_API_BASE`:后端地址;也可在顶栏齿轮弹窗设置并测试,写入本地存储 ### .env 文件结构说明 - 必需键: - `DATABASE_URL`:运行时数据库连接,示例:`mysql+aiomysql://liangshanmei:@mysql.sec.hn.cn:63306/liangshanmei` - `ALEMBIC_DATABASE_URL`:迁移时数据库连接,示例:`mysql+pymysql://liangshanmei:@mysql.sec.hn.cn:63306/liangshanmei` - `JWT_SECRET`:JWT 密钥(请自行设置,切勿提交到仓库) - `JWT_ALGORITHM`:默认 `HS256` - `JWT_EXPIRE_MINUTES`:默认 `60` - 在线数据库使用: - 默认推荐使用在线数据库 `mysql.sec.hn.cn:63306/liangshanmei`,将上述两项 DSN 写入 `.env` 即可直接运行。 - 若需本地开发,将主机改为 `localhost` 并确保本机 MySQL 可用,如:`mysql+aiomysql://user:password@localhost:3306/fms`。 - 安全提醒:`.env` 仅用于本地运行,包含敏感信息(密码、密钥),不要提交到仓库。 ## 开发与测试建议 - 一键运行(建议创建脚本):后端 `uvicorn` + 前端 `vite` 并行,使用不同终端 - 接口测试:通过 `http://127.0.0.1:8000/docs` 快速试调 - 数据校验:先执行 `db/schema_all.sql` 建全表,再启动后端;采购订单依赖 `suppliers`、`farms`、`users` 外键 - 账号与鉴权:登录后本地存储 `token/role/farm_id`;切换角色可测试不同入口与权限 ## Roadmap(建议) - 采购订单明细的后端编辑与校验(行级增删改接口) - 环境/健康指标的图表化与告警规则(图表库) - 成本管理与薪资的报表导出(Excel/CSV)与权限细分 - 扫码枪模式的优化(焦点与音效)与文件导入(CSV/Excel) - 自动化测试(后端接口 + 前端 E2E)与 CI 集成 ## 界面图片 ![输入图片说明](.trae/documents/8cdd62d2c8cf3e2dad7c9181e1bfe67f.png) ![输入图片说明](.trae/documents/f29b5d00314ae093c6ce8a4c19c40e91.png) ![输入图片说明](.trae/documents/9562231c4e9f9966fda7c484b527a154.png) ![输入图片说明](.trae/documents/bd4dc85bb91bbd225b9d4183a4f8035c.png) ![输入图片说明](.trae/documents/97a74cbc4856cba56f78b64860b8041d.png) ![输入图片说明](.trae/documents/909a1c5d018a8b1260a7cec8b092cc36.png) ![输入图片说明](.trae/documents/fafcd3be7fa1cf3ebd19383342191853.png) ![输入图片说明](.trae/documents/5049bd9e54b1509641ecb56ade0add01.png) ![输入图片说明](.trae/documents/9640c96863046e399ffa34e7239da5c2.png) ![输入图片说明](.trae/documents/6decd17759d77950612436aedb1c3b7a.png) ![输入图片说明](.trae/documents/dc88fa922f1ace5dcc39f0159686c6be.png)