# 快速修复:批次ID类型错误 ## 错误信息 ``` (asyncmy.errors.DataError) (1264, "Out of range value for column 'batch_id' at row 1") ``` ## 原因 `batch_id` 字段类型为 INTEGER,但时间戳值 `1767883391558` 超出了 INTEGER 的最大值 `2147483647`。 ## 解决步骤 ### 1. 执行数据库修复(必须) ```bash mysql -u root -p your_database < fix_batch_id_bigint.sql ``` 或者手动执行: ```sql ALTER TABLE test_work_order MODIFY COLUMN batch_id BIGINT NULL COMMENT '工单批次ID(用于分组标识)'; ``` ### 2. 重启后端服务(必须) ```bash # 停止后端服务 # 启动后端服务 ``` ### 3. 验证修复 ```sql -- 查看字段类型 DESCRIBE test_work_order; -- 应该看到: -- batch_id | bigint | YES | | NULL | ``` ### 4. 测试 1. 进入样品管理页面 2. 选择样品,点击"生成工单" 3. 填写工单名称,提交 4. **应该成功**,不再报错 ## 技术说明 ### INTEGER vs BIGINT - **INTEGER**: -2147483648 到 2147483647 - **BIGINT**: -9223372036854775808 到 9223372036854775807 ### 时间戳计算 ```python # 毫秒级时间戳 batch_id = int(datetime.now().timestamp() * 1000) # 例如:1767883391558(超出 INTEGER 范围) ``` ### SQLAlchemy 类型映射 - `Integer` → MySQL `INT` - `BigInteger` → MySQL `BIGINT` ## 已修改的文件 - ✅ `fix_batch_id_bigint.sql` - 数据库修复脚本 - ✅ `add_workorder_batch_field.sql` - 更新为 BIGINT - ✅ `test_work_order_do.py` - 使用 BigInteger - ✅ `工单批次分组功能实现说明.md` - 更新文档 ## 完成时间 2026-01-08 22:45