70 lines
1.6 KiB
Markdown
70 lines
1.6 KiB
Markdown
# 快速修复:批次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
|