fix(cms): 修复联系表单手机号长度及格式问题

- 为 CmsContactLead 实体的 name 和 phone 加入 @NotBlank、@Size 及 @Pattern 校验
- 规范 company、delivery、need、source、ip 字段长度限制,防止数据异常
- 在提交服务中新增 sanitizePhone 方法,清除手机号中的空格、横线及括号等分隔符
- 扩展数据库中 phone 字段长度到 VARCHAR(32),支持国际及带分机号格式
- 更新数据库中 name、company、need 字段长度,避免未来数据截断风险
- 补充项目长期记忆文件,记录技术栈及该修复详情
This commit is contained in:
2026-07-19 19:36:38 +08:00
parent 8256817ef7
commit b79cc1003c
5 changed files with 103 additions and 2 deletions

View File

@@ -0,0 +1,38 @@
-- ============================================================
-- 修复: cms_contact_lead.phone 字段长度不足导致 "Data too long"
-- 错误: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation:
-- Data truncation: Data too long for column 'phone' at row 1
-- 原因: 公开接口 /api/cms/cms-contact-lead/submit 传入超长/带分隔符的手机号
-- (如 "+86 (138) 1234-5678 ext 8888" 或恶意超长 payload)
-- 方案:
-- 1. 将 phone 字段从原长度(VARCHAR(20)) 扩到 VARCHAR(32)
-- 足以容纳国际号码 + 分机号;
-- 2. (可选) 同时放宽 name / company 等字段,避免后续再撞同类问题。
-- 配合代码侧改动:
-- - CmsContactLead 实体加 @Size / @Pattern / @NotBlank 校验
-- - CmsContactLeadServiceImpl.submit 加 phone 清洗逻辑
-- (去除空格、横线、括号,仅保留 + 和数字)
-- 执行环境: 所有部署了 cms-api 的租户库 (cms_contact_lead 为全局表)
-- 执行方式: 幂等,可重复执行
-- ============================================================
-- 1. 主修复:扩展 phone 字段到 VARCHAR(32)
ALTER TABLE cms_contact_lead
MODIFY COLUMN phone VARCHAR(32) DEFAULT NULL COMMENT '手机号';
-- 2. (可选) 同步放宽 name / company避免后续同类报错
ALTER TABLE cms_contact_lead
MODIFY COLUMN name VARCHAR(50) DEFAULT NULL COMMENT '联系人姓名';
ALTER TABLE cms_contact_lead
MODIFY COLUMN company VARCHAR(100) DEFAULT NULL COMMENT '单位/公司名称';
ALTER TABLE cms_contact_lead
MODIFY COLUMN need VARCHAR(1000) DEFAULT NULL COMMENT '需求描述';
-- 3. 验证字段类型已更新
-- 预期: phone VARCHAR(32), name VARCHAR(50), company VARCHAR(100), need VARCHAR(1000)
SHOW COLUMNS FROM cms_contact_lead LIKE 'phone';
SHOW COLUMNS FROM cms_contact_lead LIKE 'name';
SHOW COLUMNS FROM cms_contact_lead LIKE 'company';
SHOW COLUMNS FROM cms_contact_lead LIKE 'need';