森雅养殖场 · 肉牛数据系统 部署说明（V19.60 · 玩客云版）
============================================================

本说明对应「玩客云刷机 → 一键脚本安装」这一种部署方式。
云服务器（阿里云/腾讯云等 Linux 主机）同样可以直接跑这个一键脚本。

【包内文件（15 个）】
1. api.php                —— 数据接口（后端；内置自动升级、跨服务器同步、
                             数据库自动升级、OCR 识别接口）
2. index.html             —— 前端页面（手机、电脑都能用）
3. js/app-core.js         —— 前端脚本：核心功能与弹窗逻辑
4. js/app-views.js        —— 前端脚本：各功能页面
5. js/app-modals.js       —— 前端脚本：弹窗与版本号
6. js/echarts.min.js      —— 图表库（首页体重曲线、投入构成饼图要用）。必须放在
                             网站的 js/ 目录下，缺了首页图表会空白
7. install.php            —— 网页安装向导（一键脚本会自动调它装库建号；
                             手动装的话装完必须删除）
8. check.php              —— 环境探针（装机前用，浏览器打开看服务器环境是否达标）。
                             只是给你自己看的，装完必须删除
9. config.php.new         —— 新装配置模板，留作参考；install.php 会自动生成
                             真正的 config.php，一般不用手动改名
10. README.txt             —— 本说明
11. auto_weight/auto_weight.py      —— 自动称重采集程序
12. auto_weight/auto_weight.service —— 自动称重开机自启服务（systemd）
13. auto_weight/config.json         —— 采集程序配置（账号、串口、开关）
14. auto_weight/install.sh          —— 自动称重手动安装脚本
15. auto_weight/README.txt          —— 自动称重使用说明


============================================================
【一、部署：玩客云刷机后一条命令装好】
============================================================

准备：
- 玩客云主板（1G 内存版）刷好 Armbian Debian 12，已联网（网线插好）；
- 一条 SSH 能连上的通道（同局域网用电脑 SSH 工具，或用 ZeroTier/Tailscale 远程）。

第 1 步：SSH 登录玩客云
    默认账号 root，密码为你刷机时设的密码（刷机包不同默认密码可能不同，
    刷机说明里会写）。

第 2 步：执行一条命令（脚本会自动换国内源、装环境、下载部署包、装库建号）

    wget -qO wankeyun_setup.sh http://api.pingling.net/wankeyun_setup.sh && bash wankeyun_setup.sh

    脚本会自动按顺序完成：
    - 换国内软件源，安装 nginx / PHP / MariaDB / phpMyAdmin / FTP（vsftpd）；
    - 给 nginx 开 gzip 压缩（首屏脚本压缩后体积只剩约四分之一，打开更快）；
    - 下载最新部署包解压到网站根目录 /var/www/html/；
    - 建数据库、调 install.php 自动安装（生成 config.php、创建管理员账号、
      删除 install.php）；
    - 装好自动称重采集程序并设为开机自启（默认关闭采集，见第二节）；
    - 刷新 SSH 登录提示，登录后直接显示本机网页地址、后台账号、数据库、
      重装脚本位置。

第 3 步：运行过程中需要你填 3 个密码
    ① 数据库 root 密码（自己设，记牢，重装脚本时还要用）
    ② FTP 密码（账号固定是 senya，密码自己设）
    ③ 管理员账号与登录密码（至少 6 位，用来登录本系统）

第 4 步：跑完打开本机网页
    浏览器访问  http://玩客云的局域网IP  （或你给它配的固定域名/IP）
    用第 3 步设的管理员账号密码登录，就能开始记账。
    登录后到「更多」里可以改密码、加家人和工人账号。

第 5 步（可选）：用 phpMyAdmin 直接看数据库

    浏览器访问  http://玩客云的局域网IP/phpmyadmin
    账号填 root，密码填第 3 步设的数据库 root 密码。

    脚本装完会把 MySQL 的 root 改成密码认证，所以 root 能直接登录；
    万一提示「无法登录 MySQL 服务器」，说明 root 还是 socket 认证，
    SSH 里执行一次再登：

        sudo mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('你的root密码'); FLUSH PRIVILEGES;"

说明：
- 建议在路由器里给玩客云绑定固定 IP（或 DHCP 静态分配），否则重启后 IP 变了，
  手机上存的网址就打不开。
- 重复执行同一条命令是安全的：已经装好的部分会跳过，只是重写配置再重启服务，
  不会清空数据。
- 想整机重来（清空数据重装）：用刷机包里的 wankeyun_reinstall.zip 重刷后，
  再跑上面这条命令。


============================================================
【二、自动称重（可选，需要地磅和耳标阅读器）】
============================================================

1. 硬件清单（参考价，按实际采购为准）
- 耀华地磅 XK3190（双插口版，约 200 元）；
- 玩客云（约 50 元，就是本系统这台）；
- 科智牧 JY-L8600 低频耳标阅读器（RS485 / FDX-B，约 660 元）；
- 两条 USB 转串口线（分别接地磅和阅读器）。

2. 原理
牛上磅 → 自动读耳标 + 读稳定重量 → 写入玩客云本地数据库 →
每天 22:00 汇总同一头牛当天多次称重（去掉最大最小取平均）→
每天上传一次主服务器 → 体重合并显示在台账「体重变化」里（自动记录带"自动"标签）。

3. 安装与开机自启
- 一键脚本已把采集程序装到 /var/www/html/auto_weight/，并设为开机自启
  （systemd 服务名 auto-weight，断电重启后会自动起来，进程崩了 10 秒后自动重启）。
- 如果是手动装（部署包里已带 auto_weight 目录）：

    cd /var/www/html/auto_weight && bash install.sh

- 检查是否在运行：

    systemctl status auto-weight

4. 开关默认是关的
    服务装好即在运行，但采集和上传默认关闭（config.json 里 enabled=false），
    这样接好硬件可以先调试、不会乱记数据。
    到网页「更多 → 自动称重」把开关打开，就开始采集，不需要重启服务。
    老设备配置里没有这个开关字段的，视为已开启。

5. 串口识别
    插好两条 USB 线后，到网页「自动称重」点「检测 USB 设备」，程序会扫描
    串口并自动判断哪个是地磅、哪个是耳标阅读器，写回配置。
    建议两条线固定插同一组 USB 口，避免重启后串口号变化识别错；
    万一识别错了，再点一次「检测 USB 设备」即可。

6. 调试耳标
    网页「自动称重」面板里有三个调试按钮：
    - 「读取耳标数据」：只把阅读器上报的原始数据读回来，用来填「读取数据（样例帧）」；
    - 「按上面正则读取耳标号」：按页面填的「耳标号解析正则」当场解析出号，
      用来验证正则抓得对不对；
    - 「读取地磅重量」：读一次当前重量，确认地磅通了。
    阅读器上报的是 16 位芯片号时，系统会一律换算成耳标牌面印的号
    （9920 系列 = 前 4 位 + 第 12~15 位；9010 系列 = 去掉末位；其他原样）。

7. 上传主服务器需要 VIP
    自动称重上传属于 VIP 功能，未激活卡密时只在本机记录，不上传。
    激活方式见第十一节。


============================================================
【三、老版本升级】
============================================================

升级前先备份：登录后 → 备份与恢复 → 在线备份数据库（或把备份下载到电脑）。

方式 A：自动升级（推荐，本机 api.php 已是 V17.6 及以上时）
1. 管理员登录后，页面右上角点「检查更新」；
2. 检测到新版 → 点「立即升级」，弹框显示进度（下载→校验→备份→写入），
   完成后自动刷新。新版 api.php 首次运行会自动升级数据库结构，
   不需要再手动跑 install.php；
3. 前提：本机 api.php 至少 V17.6。更老的版本先用方式 B 手动升到 V17.6 以上，
   以后就能一直用自动升级。

方式 B：手动升级（老版本兜底）
1. 把部署包里的 index.html、api.php、js/ 下三个脚本覆盖上传到网站根目录；
2. 浏览器打开  http://本机地址/install.php?mode=upgrade
   页面显示「升级模式」，点「开始升级」，自动补建新表、新字段，不动已有数据；
3. 完成后删除 install.php。

版本源：最新版统一发布在 https://api.pingling.net ，其他服务器默认从这里检测。
也可以在 config.php 里用 $UPGRADE_SOURCE 改成别的地址。


============================================================
【四、养殖场名称自定义】
============================================================

每台服务器可以各用各的名字（玩客云、网页版互不影响）：
用 SSH 编辑本机 config.php，在文件末尾加一行：

    $FARM_NAME = '你的养殖场名';

保存后刷新页面，左上角 LOGO、登录页、打印台账标题、跨服务器同步识别名
都会自动显示这个名称。不设置就默认显示「森雅养殖场」。


============================================================
【五、跨服务器数据同步（部署要点）】
============================================================

- 入口：管理员登录 → 备份与恢复 → 跨服务器数据同步（默认隐藏，可在
  备份与恢复里点「显示」调出来）；
- 两端都要有新版 api.php（版本不一致时先升级再同步）；
- 同步密钥两端必须一致（默认 senya2026，可点「修改密钥」改成自己的）；
- 同步前两端会自动在服务器 sync_backups 目录留 SQL 快照，出错可下载恢复。


============================================================
【六、数据库重建（只有数据乱套、无法恢复时才用）】
============================================================

第 1 步：先到「备份与恢复」把数据备份下载到自己电脑（重要！）
第 2 步：浏览器打开  http://本机地址/install.php?mode=rebuild
        页面提示会清空全部业务数据，点「我确认已备份，清空并重建」
第 3 步：确认页面显示「重建成功」后，删除 install.php
第 4 步：重新登录，要恢复旧数据：备份与恢复 → 恢复数据库 → 选备份文件


============================================================
【七、功能介绍和使用】
============================================================

1. 账号与权限
- 管理员（场主）：全部功能——管牛、出栏、死淘、原料、配方、账号、备份恢复；
- 员工（worker）：日常记录——记饲喂/诊疗/称重，其他页面只能看不能改；
- 工人账号：由上级账号在「账号管理」添加，登录后操作的是上级的数据，
  适合雇工记录饲喂、称重；
- 访客（不登录）：可以浏览全部数据，不能新增/修改/删除；
- 新注册账号需管理员在「账号管理 → 待审核的注册申请」里同意后才能登录。

2. 首页看板
- 总览牛只数量、圈舍分布、在栏/出栏/死淘、饲喂成本、诊疗费用、最近动态；
- 点圈舍标签可直接跳到该圈牛只档案。

3. 牛只档案
- 新增牛只：填耳标、品种、买牛信息、到家体重、圈舍等；支持「批量生成」
  一次性生成多头（生成时每头牛自动分配一个隐藏编号，同步用它识别，
  改耳标也不变，不会同步成双份）；
- 批量操作：勾选多头可「批量编辑」（弹窗里除耳标号灰色不可改外，
  品种/圈舍/买入信息/体重/免疫运费中介费/来源地/备注都可批量填，
  留空表示不改）、批量删除；
- 编辑牛只：弹窗里备注下方有一行灰色小字「牛只编号 XXXXXXXXX」
  （纯数字、只读，是同步识别用的隐藏编号，不用管它）；
- 详情：查看每头牛的称重记录、诊疗记录、累计投入（买牛价+入场费+
  饲喂成本+诊疗费等）和当前利润。

4. 饲喂记录
- 记饲喂：选整圈或单头 → 选日期、时段（上午/中午/下午/全天）→
  填 TMR 成分（选原料/精料配方+斤数，自动算成本和每头摊分）或直接填总成本；
  可以「导入上一天/选日期导入/导入TMR配方」快速套用；
- 饲喂明细：按天合并显示（一行=该圈当天），顶部可切换月份；
  点「编辑」可改当天某一顿；支持单条删除、批量删除；
- 打印饲喂明细：弹出选择框勾选要打印的内容（饲喂明细台账、
  饲喂原料用量统计、诊疗费用明细），台账可选简单（全天合并）/详细（分顿）
  两种样式，可直接打印或存 PDF 做台账本；
- 饲喂原料用量统计：按原料汇总全程/某月用量和金额，与打印台账对账用。

5. 自拌料（配方）
- 新建精料配方：成分标题提示「推荐总用量 2000 斤」；填完用量自动计算，
  总用量在 2000 斤 ±2% 内显示绿色「≈ 推荐总量」，多了/少了显示红色提示；
- 计算精料后下方「对照育肥推荐」实时读取页面「育肥牛日粮营养推荐」下拉
  选的牛体重/日增重档，对照干物质、维持净能、增重净能、粗蛋白够不够；
- TMR 日粮计算：填牛头数、平均体重、目标日增重和全天 TMR 组成，
  自动算成本、每头摊分，可保存多个方案、一键套用；
- 我的精料配方/我的 TMR 方案：可查看、打印、编辑、删除、共享给其他用户、
  精料配方可「同步到原料库」当整袋精料用；
- 育肥牛日粮营养推荐：先选牛体重和日增重档，看每天每头需要多少
  干物质、能量和蛋白（来源《日粮计算2026》2026公牛 表）。

6. 免疫与诊疗
- 记一笔：选单头牛或整个圈舍，填类型（疫苗/驱虫/诊疗等）、项目、费用、备注；
  费用自动计入每头牛累计投入和养殖场诊疗累计；
- 畜牧局台账项目：记一笔里可填生产厂家、销售人、生产批号、生产日期、
  有效期至、用量（如 2ml/头、每圈 5 瓶）；列表里项目和用药下方用小字显示
  厂家/批号/用量，打印「诊疗费用明细」时会整列带出厂家批号、生产日期~
  有效期、用量，可直接交畜牧局查；
- 记录按耳标号显示，支持编辑、单条删除、批量删除。

7. 粪污处理台账
- 导航栏「更多 → 粪污处理」进入；记一笔填日期、处理方式（堆肥/还田利用/
  沼气处理/干湿分离/委托清运/其他）、数量、单位（吨/车/方/头份）、
  去向或利用方式（如发酵后还田 15 亩）、费用、备注；
- 环保检查时按日期逐条展示粪污去向和处理方式，支持编辑、单条删除、批量删除；
- 记录随跨服务器同步、备份恢复、清理重复一起走，不会丢。

8. 养殖场信息
- 管理员：导航栏「更多 → 养殖场信息」填写养殖场名称、畜牧养殖代码、
  动物防疫合格证编号、畜禽种类、负责人、养殖地址、联系方式；
- 保存后存在服务器数据库（settings 表），所有登录账号都能在台账里核对；
  员工账号只读，只有管理员能修改。

9. 出栏
- 登记出栏：可单头登记，也可「整圈出栏」（选圈舍、填平均出栏重和总卖价，
  自动给整圈每头登记）；
- 金额校准：工人费/电费/油费等可按「单头」或「圈舍分摊」（按头数摊）；
- 结算单：每笔出栏可打印结算单（含出栏参数、累计投入、校准费用、毛利），
  支持编辑重算；
- 出栏明细有「月增重」列（出栏重−到家体重 ÷ 饲养月数）。

10. 原料库
- 私有原料库：自己的原料表，点「编辑」改价格和营养参数；支持批量删除、
  排序、显示列设置；点「同步公共库参数」把公共库同名的价格营养一键同步；
  可「添加公共原料库原料」、「青贮折算」算每斤成本、「拍照识别配料表」
  自动识别原料名；
- 公共原料库（管理员维护）：可新增、批量删除、导入导出（本地/在线）、
  在线导出生成 senya.txt 供其他用户导入；普通用户可申请新增原料，
  管理员审核后入公共库；
- 回收站：所有删除都先进回收站，7 天内可恢复，支持批量恢复/彻底删除/清空。

11. 统计
- 成本统计：每头牛成本利润明细（买牛价、饲喂、诊疗、必要花费、累计投入、
  出栏毛利）；养殖场仪表盘看饲喂成本、诊疗累计等；
- 饲喂原料用量统计（也在饲喂页）；
- 出栏汇总、死淘统计。

12. 备份与恢复
- 数据库备份：在线备份（可勾选要备份的内容：牛只/称重/原料/饲喂/诊疗/
  费用/出栏/死淘/配方/公共原料库/账号，默认全选）、刷新列表、删除备份、
  下载备份、恢复数据库（可选服务器在线备份，或上传本地 .sql 文件恢复）；
- 跨服务器数据同步：测试连接 → 从远程同步到本地 / 推送本地到远程；
  合并模式（新覆盖旧，两端各自有的都留）或覆盖模式（以对端为准整体替换
  本机业务数据，不覆盖账号和公共原料库）；同步前自动留 SQL 快照；
  「清理重复牛只」可清理历史重复档案；
- 跨服务器同步卡片默认隐藏，可在备份与恢复里选择显示/隐藏。

13. 自动升级（管理员）
- 登录后自动检测一次（发现新版才提示，不打扰）；也可点右上角「检查更新」手动查；
- 发现新版：右上角出现红色小字「● 新版 Vxx 立即升级｜忽略」，点「立即升级」
  弹出进度框，逐文件显示下载→校验→备份→写入过程，完成自动刷新；
  点「忽略」后这个版本不再打扰（手动检查仍可升级）；
- 右上角出现红点提示「页面文件较旧/后端过旧」＝ index.html 和 api.php
  有一个没传到位，补传即可。


============================================================
【八、常见问题（玩客云 / Linux 通用）】
============================================================

排查用的命令都在 SSH 里执行；看服务状态用 systemctl，看日志用 journalctl
或 tail。

- 打开页面一直停在登录框 / 提示网络错误：
  ① 确认 nginx、PHP、MariaDB 都在跑：
       systemctl status nginx mariadb php*-fpm
  ② 看 nginx 报错：tail -n 50 /var/log/nginx/error.log
  ③ 确认跑过 install.php（首次安装用安装模式，老库用升级模式）；
  ④ 浏览器打开 http://本机地址/check.php 看环境是否达标（PHP 版本、
     MySQL 连通、目录写权限）。
- 按钮点了没反应 / 提示服务器错误：
  先 Ctrl+F5 强刷；还不行就重新访问一次 install.php?mode=upgrade，
  一般是数据库缺新表/新字段。
- 页面版本号和后端版本号对不上（右上角红点）：
  index.html 和 api.php 有一个没传到位，把缺的那个重新上传覆盖。
- 检测升级提示「无法连接更新服务器」：
  ① 先浏览器打开 https://api.pingling.net 确认版本源能访问；
  ② 本机 api.php 必须 V17.6 及以上（老版本先手动升级一次）；
  ③ 再点一次「检查更新」，提示会显示具体原因。
- 升级下载报「校验未通过」：
  版本源必须是 V17.23 及以上（已带 upgrade_download 源码下载接口）。
- 升级后界面没变 / 显示旧版本号：
  按 Ctrl+F5 强刷，或点导航里的「清除缓存」按钮带新版本号重载。
- 出现 502 / 504 / 空白页：
  多半是 PHP 或 MySQL 挂了：systemctl restart php*-fpm mariadb；
  再看磁盘是否满了：df -h。
- 上传大文件失败 / 提示写入失败：
  检查网站目录写权限：
      ls -l /var/www/html
      chown -R www-data:www-data /var/www/html
  PHP 上传大小限制改 /etc/php/*/fpm/php.ini 里的
  upload_max_filesize 和 post_max_size，改完 systemctl restart php*-fpm。
- 手机打不开 / 样式乱：
  用手机浏览器直接访问本机地址（不是电脑模拟器）；样式乱按 Ctrl+F5 强刷。
- 玩客云重启后 IP 变了、手机打不开：
  在路由器里给它绑定固定 IP（DHCP 静态分配），或给设备配固定地址。
- 开机后自动称重不采集：
  ① systemctl status auto-weight 看服务是否在跑；
  ② 到网页「自动称重」确认总开关是开的；
  ③ 点「检测 USB 设备」重认串口（重启后串口号可能变）；
  ④ 看日志：tail -n 50 /var/www/html/auto_weight/auto_weight.log。
- 自动称重页点「删除」报 attempt to write a readonly database：
  采集程序以 root 运行，建的 weigh_data.db 属主是 root，网页（www-data）
  没有写权限，删不掉记录。新装脚本已自动把库和状态文件交给 www-data，
  新版采集程序每次启动也会自己校正；老设备手工执行一次即可：

      chown www-data:www-data /var/www/html/auto_weight/weigh_data.db
      chmod 664 /var/www/html/auto_weight/weigh_data.db
      systemctl restart auto-weight

  如果用 SD 卡存数据，把上面路径换成 SD 卡里的
  <挂载路径>/senya_weigh/weigh_data.db 再执行一遍。

【日常用法问答】
- 忘了管理员密码：
  用 SSH 进数据库处理，或在「备份与恢复」之前先备份数据后重建。
  最省事的办法：先在线备份下载，再访问 install.php?mode=rebuild 重建，
  重建完恢复备份。
- 数据记乱了 / 想重来：
  先备份下载，再用 install.php?mode=rebuild 重建，最后恢复备份。
- 两台服务器数据对不上 / 有双份牛：
  ① 先把两端都升到最新版；
  ② 备份与恢复 → 跨服务器数据同步 → 先「清理重复牛只」，
  再用「覆盖模式」（以对端为准）同步一次修复历史坏数据；
  ③ 以后新增牛只用「批量生成」，每头牛自带隐藏编号，不会再双份。
- 同步提示「同步密钥不正确」：
  两端密钥必须一致（默认 senya2026）；任一端改过密钥，另一端也要改成相同值。
- 打印的饲喂台账对不上账：
  饲喂明细台账总计应与「饲喂原料用量统计」金额一致；
  整圈饲喂同一顿只算一份（不会按头数重复乘），不同顿正常相加。
- 配方营养不够/超标：
  看「对照育肥推荐」，干物质不够加粗饲料量，蛋白差/能量差调精料比例。
- 不想升级某次新版：
  点红点里的「忽略」，这个版本不再提示；手动点「检查更新」仍可升级。


============================================================
【九、AI 营养检测 / 智能助手（模型 Key 配置）】
============================================================

功能：
- 「自拌料」页每个 TMR 方案右上角有「AI检测」按钮（精料配方只有精料、
  没有粗料，营养不完整，所以 AI 检测只对 TMR 方案开放）。点开填牛平均体重、
  日增重、头数，选一家 AI 模型，系统把配方组成、营养现状、牛群情况和育肥牛
  营养需要标准一起发给 AI，AI 指出哪个营养不足/超标、差多少、怎么调；
- 「AI 智能助手」（AI 问诊 / AI 成本医生 / AI 推荐配方）在「自拌料」页内部末尾，
  手机小程序在「我的 → 智能助手」。

配置模型 Key（只用一家即可，不配置则点「AI检测」会提示先配置）：
最简单：登录管理员 → 右上角「更多 → AI 配置」→ 选一家填 Key → 保存，
不用改文件（页面里保存的配置优先于 config.php）。

也可以 SSH 编辑 /var/www/html/config.php 手动填：
1. 任选一家填 Key：
   ① 智谱：
      - 打开 open.bigmodel.cn → 注册/登录 → 左侧「API 密钥」→ 创建；
      - 该模型按量计费，新用户有赠送额度；glm-4-flash 完全免费；
      - 填到 config.php：
        $AI_PROVIDER = 'zhipu';
        $ZHIPU_API_KEY = '你的Key';
   ② DeepSeek：
      - 打开 platform.deepseek.com → 注册/登录 → 左侧「API Keys」→ 创建；
      - 新用户有赠送额度，用完再充值（最低 10 元即可用很久）；
      - 填到 config.php：
        $AI_PROVIDER = 'deepseek';
        $DEEPSEEK_API_KEY = '你的Key';
   ③ 豆包（火山方舟）：
      - 打开 console.volcengine.com → 开通「火山方舟」（新用户有免费 token 额度）；
      - 创建 API Key；
      - 再创建一个「推理接入点」（如 Doubao-pro-32k），创建成功后得到一个
        ep- 开头的接入点 ID（形如 ep-20240530-xxxxx）；
      - 填到 config.php：
        $AI_PROVIDER = 'doubao';
        $DOUBAO_API_KEY = '你的Key（apikey- 开头）';
        $DOUBAO_MODEL = '你的接入点ID（ep- 开头）';
      ⚠️ $DOUBAO_MODEL 填的是「接入点 ID」（ep- 开头），不是 API Key
        （apikey- 开头）。填错会报「模型或接入点不存在」
        （InvalidEndpointOrModel.NotFound）。新版已做容错：即使填成 apikey-
        开头，也会自动改用默认模型名。
保存后刷新页面即可用。

说明：DeepSeek / 豆包会产生少量费用（一次分析约几分钱到几毛钱）；
分析结果只作参考，请结合自家牛群实际采食和增重调整，用药请咨询当地兽医。


============================================================
【十、部署情况与卡密】
============================================================

1. 部署情况（管理员：右上角「更多 → 部署情况」）
- 只有版本源主服务器（api.pingling.net）显示「部署情况」菜单：
  看全部部署点、每条后面有「编辑/删除」按钮、生成卡密；
- 主服务器永久使用，无需授权、无需激活卡密；
- 其他服务器（玩客云等）不显示部署列表，只在以后收费时出现「卡密激活」；
- 各台服务器只要登录过、或点过「检查更新/检测升级」，就会自动把网址、
  名称、版本、IP 上报到 api.pingling.net；
- 每条记录按网址去重（重复上报只更新时间和版本），可删除；
- 「编辑」里可改网址、名称，还能设置状态：正常 / 黑名单 / 白名单
  （现在只做标记，标黑名单的网址检测升级时会提示已停用）；
- 上报是静默的，检测不到版本源也不影响本机正常使用。

2. 卡密
- 收费后在主服务器「部署情况 → 卡密管理」里按天数生成卡密，发给使用方；
  使用方在本机「卡密激活」里输入卡密激活；
- 激活后本机授权状态和卡密随上报带给主服务器，能看到哪个网址用了哪个卡密
  （已用/未用一目了然）；
- 现在免费期：激活只做记录，不限制使用；检测不到主服务器照常使用。


============================================================
【十一、VIP（卡密激活后解锁的功能）】
============================================================

- 默认免费用户：本地记录、本地备份正常；
- 输入卡密激活后成为 VIP：云备份（备份到主服务器）+ 远程恢复 +
  自动称重上传；
- 免费用户「账号管理」只能添加「我的工人」，不能添加独立账号和饲料厂报价
  用户；激活 VIP 后可添加独立账号（有独立数据）和饲料厂报价用户；
  api.pingling.net 主服务器不受此限制；
- 激活入口：账号菜单「成为VIP用户」→ 输入卡密 → 显示授权状态。


============================================================
【十二、免疫诊疗整圈共用】
============================================================

「诊疗」页点「记一笔」：记录对象选「整个圈舍」后，多了一个
「整圈共用（记一笔，不摊到每头牛）」勾选项。
- 勾选：费用整圈共用记一笔，列表显示「整圈·圈名」，
  不计入单头牛成本，适合整圈消毒、整圈驱虫等共用开销；
- 不勾选：按原来方式给圈舍每头牛各记一条、费用计入各牛。
单头牛的诊疗费统计、出栏利润都不受整圈共用记录影响；
打印「诊疗费用明细」时整圈共用记录也会显示「整圈·圈名」。


============================================================
【十三、智能预警 + AI 智能助手】
============================================================

一、首页「智能预警中心」（自动盯牛，不用天天翻账本）
首页牛场实时数据下面有四类自动预警，按你设的规则自动算：

1. 掉膘预警   —— 日增重低于你设的线（默认 0.5 斤/天）的牛；
2. 成本超支预警 —— 斤成本（总成本÷最新体重）高于行情价（默认 14 元/斤）的牛；
3. 出栏建议   —— 体重达到目标出栏重（默认 1400 斤）、或增重停了的牛；
4. 久未称重提醒 —— 超过设的天数（默认 30 天）没称重、或从没称过重的牛。

点预警里的小标签（耳标号）会直接跳到该牛档案。
预警规则随时可改：首页预警区右上角「预警设置」弹窗里改四项数字，
点「保存设置」立即按新规则重新算（设置存在服务器，换手机也一样）。

二、AI 智能助手（AI 问诊 / AI 成本医生 / AI 推荐配方）
- AI 问诊：把牛的症状（不吃食、拉稀、发烧、喘等）发给 AI，
  AI 给出疑似疾病、鉴别要点和用药参考，答完还能继续追问；
- AI 成本医生：一键汇总全场成本（买牛/入场/饲喂/诊疗/杂费/出栏收入），
  AI 分析哪项钱花多了、哪里能省、哪些钱不能省；
- AI 推荐配方：填牛群阶段（如西门塔尔育肥牛、平均 900 斤、目标日增重 3 斤）
  和手头可用原料，AI 按现有料给出每头每天的参考配方并讲营养思路。
提醒：AI 诊断仅供参考，用药请务必咨询当地兽医、注意休药期。

三、小程序同步
- 小程序「首页」同样显示智能预警中心和预警设置；
- 小程序「我的 → 智能助手」可用 AI 问诊/成本医生/推荐配方；
- 小程序升级后首次打开会自动检测新版接口；服务器仍是旧版时
  预警区自动隐藏、AI 功能提示先配置模型 Key，不会报错。


============================================================
【版本记录（最近两版）】
============================================================

V18.99（2026-11-08）
-------------------------------------------------
1. 一键部署脚本内置自动称重五个文件（auto_weight.py / .service /
   config.json / install.sh / README.txt），部署包里不带 auto_weight 目录
   也能装齐；自动称重默认关闭，服务照常在跑、随时能调试，
   到网页「自动称重」打开开关即开始采集，不用重启服务。
2. 网页「自动称重」耳标调试拆成两个按钮：
   「读取耳标数据」只读原始帧；「按上面正则读取耳标号」按页面正则当场解析。
3. 删除「按耳标上印的号记录」勾选项：阅读器上报 16 位芯片号时一律换算成
   耳标牌面印的号（9920 系列=前 4 位+第 12~15 位，9010 系列=去掉末位，
   其他原样）。
4. 前后端版本号 V18.98 -> V18.99。

V19.0（2026-11-08）
-------------------------------------------------
1. 网页加载慢：修掉 all_data 里的 N+1 查询——原来「每种原料各查一次
   价格历史」，原料上百种就是上百条 SQL，现在改成一次查出再分组，
   打开网页明显变快。
2. 一键部署脚本给 nginx 开 gzip（js/css/JSON 全压缩）：
   首屏脚本约 750KB，压缩后传到浏览器只剩四分之一左右。
   已装好的设备重跑一次脚本即生效（脚本会重写 nginx 站点配置）。
3. 待绑定称重记录「删除后刷新不及时」根治：
   - 删除玩客云本地采集记录时，本机「待绑定」表里同一串号的那条一起清掉
     （原来只删本地库，待绑定那份还在，刷新后又冒出来）；
   - 前端点删除/绑定后，本地列表立刻摘掉该条并重绘，不再等全量刷新。
4. 「部署情况」弹窗变快：ZeroTier 配置改成后台填充，不再挡住部署列表。
5. 一键部署脚本：
   - 远程调试 ZeroTier 默认自动安装，提示精简为一行结果（不再刷一大段说明）；
   - 新增 SSH 登录提示刷新：清掉刷机固件自带的旧提示，登录后显示
     网页地址 / 后台账号 / 数据库 / 重装脚本位置。
6. 前后端版本号 V18.99 -> V19.0。

【V19.16 → V19.60 期间的更新摘要】
----------------------------------------------------------------
1. 安卓 App 转到 2.3.32：版本号只放在「我的 → 关于森雅养殖台账 → 版本号」，
   关于页不再显示服务器地址；「检查新版本」走 app_ver 接口自动比对；
   APK 改由静态直链 senya-app.apk 提供（服务器已配 .apk MIME 并支持断点续传，
   手机自带下载管理器不会再卡在 0M）。
2. api.php 的 app_apk 接口补 Range 分段（206/416），作为直链之外的第二条下载通道。
3. 插件中心卡片改为折叠态显示，每张卡带「卸载」按钮。
4. 主服务器侧不再提供网页终端（仅玩客云保留），避免误操作。
5. 官网「产品下载」页整理：一键部署命令只保留一处；刷机教程折叠；
   新增「支持哪些设备」说明（Debian/Ubuntu 小主机、NAS、云主机可跑，
   OpenWrt 路由器与群晖/威联通原系统不行）。
6. 当前版本：网页版 V19.60，安卓 App 2.3.32（versionCode 45）。
