fix: 第1批 M2、M3、M16、M23 导入与展示类缺陷
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 8h37m36s

- M2 批量换绑表头改为“平台登录账号”,只认手机号,细分格式、不存在、多匹配、非平台、已禁用失败原因
- M3 后台订单列表与详情返回 C 端在线购买的交易流水号、支付渠道、商户名称,详情新增全部支付单 payments
- M16 预警规则不再返回 real_data_mb,预警列表/详情新增 threshold_mb,导出末列追加“阈值流量(MB)”
- M23 设备导入 IMEI 必填,空 IMEI 行记为失败
- OpenSpec Change fix-august-iteration-follow-up-gaps:13/18,导入任务、导出任务的 Worker 端到端验证与前端/运营通知待部署后完成
This commit is contained in:
邹进
2026-10-11 23:49:29 +09:00
parent 260fec7114
commit 25c081fe60
24 changed files with 553 additions and 42 deletions

View File

@@ -9,6 +9,9 @@ import (
"github.com/xuri/excelize/v2"
)
// DeviceImportIMEIRequiredReason 设备导入行 IMEI 为空(含仅空白)时的失败原因。
const DeviceImportIMEIRequiredReason = "设备IMEI(imei)不能为空"
// CardInfo 卡信息(ICCID + MSISDN + VirtualNo)
type CardInfo struct {
ICCID string
@@ -185,6 +188,15 @@ func ParseDeviceExcel(filePath string) (*DeviceParseResult, error) {
continue
}
// IMEI 只校验非空,不校验长度、格式与唯一性;虚拟号与 IMEI 都为空时只记虚拟号一条原因。
if row.IMEI == "" {
parseResult.ParseErrors = append(parseResult.ParseErrors, CSVParseError{
Line: lineNum,
Reason: DeviceImportIMEIRequiredReason,
})
continue
}
// 解析最大SIM槽数
if maxSimSlotsStr != "" {
if n, err := strconv.Atoi(maxSimSlotsStr); err == nil {