fix(bot-bridge): subjects 写入端点编码长度收敛到 DB 列宽20 — 21~32字符编码原穿过校验触发 MySQL 1406 整批500, 改为400拒绝 (dama-cma-subjects-write-endpoint-20260912 复核)

This commit is contained in:
Hermes CI Fix
2026-09-12 10:46:57 +08:00
parent 840d98765d
commit ca2832b698
2 changed files with 23 additions and 2 deletions
+5 -2
View File
@@ -987,7 +987,10 @@ _SUBJ_FIELDS = ("subject_code", "subject_name", "parent_code", "level", "categor
_SUBJ_CATEGORIES = ("asset", "liability", "equity", "cost", "income", "expense", "detail", "other")
_SUBJ_LEVELS = (1, 2, 3)
_SUBJ_MAX_ROWS = 2000
_SUBJ_CODE_MAXLEN = 32
# subject_code / parent_code 长度上限:任务规格为 ≤32,但 DB 列 subjects.subject_code /
# parent_code 实为 varchar(20) —— 取交集 20。若按 32 放行,21~32 字符的编码会穿过校验直达
# MySQL,报 (1406, Data too long) → 整批 500(2026-09-12 生产实测),故此处收敛到 DB 列宽。
_SUBJ_CODE_MAXLEN = 20
_SUBJ_NAME_MAXLEN = 200
@@ -1006,7 +1009,7 @@ def _validate_subject_rows(rows, db):
"""行级全量校验(任一错误 → 400 且零落库),返回标准化行 [{字段}]
规则(任务 dama-cma-subjects-write-endpoint-20260912):
subject_code 非空且 ≤32 字符 + 批次内去重;subject_name 非空(DB NOT NULL)且 ≤200;
subject_code 非空且 ≤_SUBJ_CODE_MAXLEN(=20,DB varchar(20) 列宽)+ 批次内去重;subject_name 非空(DB NOT NULL)且 ≤200;
level ∈ {1,2,3}(缺省 1);parent_code 为空或存在于本表(或本批次内,支持层级同批导入);
category 限枚举;is_active ∈ {0,1}(缺省 1)。
"""