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:
@@ -8,6 +8,9 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.Pattern;
|
||||
import javax.validation.constraints.Size;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@@ -28,25 +31,35 @@ public class CmsContactLead implements Serializable {
|
||||
@TableId(value = "lead_id", type = IdType.AUTO)
|
||||
private Integer leadId;
|
||||
|
||||
@Schema(description = "联系人姓名")
|
||||
@Schema(description = "联系人姓名", required = true)
|
||||
@NotBlank(message = "姓名不能为空")
|
||||
@Size(max = 50, message = "姓名长度不能超过50个字符")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "手机号")
|
||||
@Schema(description = "手机号", required = true)
|
||||
@NotBlank(message = "手机号不能为空")
|
||||
@Size(max = 25, message = "手机号长度不能超过25个字符")
|
||||
@Pattern(regexp = "^[+]?[0-9\\-\\s()]{6,25}$", message = "手机号格式不正确")
|
||||
private String phone;
|
||||
|
||||
@Schema(description = "单位/公司名称")
|
||||
@Size(max = 100, message = "公司名称长度不能超过100个字符")
|
||||
private String company;
|
||||
|
||||
@Schema(description = "交付方式: saas/private/hybrid")
|
||||
@Size(max = 20, message = "交付方式长度不能超过20个字符")
|
||||
private String delivery;
|
||||
|
||||
@Schema(description = "需求描述")
|
||||
@Size(max = 1000, message = "需求描述长度不能超过1000个字符")
|
||||
private String need;
|
||||
|
||||
@Schema(description = "来源渠道: web/miniapp/app")
|
||||
@Size(max = 20, message = "来源渠道长度不能超过20个字符")
|
||||
private String source;
|
||||
|
||||
@Schema(description = "提交IP")
|
||||
@Size(max = 50, message = "IP长度不能超过50个字符")
|
||||
private String ip;
|
||||
|
||||
@Schema(description = "跟进状态: 0待跟进 1跟进中 2已成交 3无效")
|
||||
|
||||
@@ -70,6 +70,10 @@ public class CmsContactLeadServiceImpl extends ServiceImpl<CmsContactLeadMapper,
|
||||
lead.setIp(ip);
|
||||
lead.setStatus(0); // 默认待跟进
|
||||
|
||||
// 清洗手机号:去除空格、横线、括号等分隔符,仅保留 + 和数字
|
||||
// 防止 "Data too long for column 'phone'" 异常
|
||||
lead.setPhone(sanitizePhone(lead.getPhone()));
|
||||
|
||||
boolean result = save(lead);
|
||||
if (result) {
|
||||
log.info("[联系表单] 新线索提交成功,name={}, phone={}", lead.getName(), lead.getPhone());
|
||||
@@ -79,6 +83,17 @@ public class CmsContactLeadServiceImpl extends ServiceImpl<CmsContactLeadMapper,
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 清洗手机号:去除空格、横线、括号等分隔符,仅保留 + 和数字
|
||||
* 例如:"+86 (138) 1234-5678" -> "+8613812345678"
|
||||
*/
|
||||
private String sanitizePhone(String phone) {
|
||||
if (StrUtil.isBlank(phone)) {
|
||||
return phone;
|
||||
}
|
||||
return phone.replaceAll("[^+0-9]", "");
|
||||
}
|
||||
|
||||
// --------------------------------------------------------
|
||||
// 异步通知(企业微信 + 飞书)
|
||||
// --------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user