From 07e55d9f3857ee369602046ab3ff5fb631c65d4b Mon Sep 17 00:00:00 2001 From: break Date: Tue, 23 Jun 2026 11:36:51 +0900 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BC=80=E6=94=BE=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=20wallet/package-orders=20=E6=94=AF=E6=8C=81=20IMEI?= =?UTF-8?q?=20=E4=B8=8B=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/model/dto/agent_open_api_dto.go | 2 +- internal/service/agent_open_api/service.go | 23 +++++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/internal/model/dto/agent_open_api_dto.go b/internal/model/dto/agent_open_api_dto.go index b53dc4b..402b779 100644 --- a/internal/model/dto/agent_open_api_dto.go +++ b/internal/model/dto/agent_open_api_dto.go @@ -106,7 +106,7 @@ type AgentOpenAPIWalletTransactionListRequest struct { // AgentOpenAPIWalletPackageOrderRequest 开放接口钱包套餐购买请求 type AgentOpenAPIWalletPackageOrderRequest struct { - CardNos []string `json:"card_nos" validate:"required,min=1,max=100,dive,min=1,max=100" required:"true" minItems:"1" maxItems:"100" description:"卡标识列表(支持 ICCID、虚拟号、MSISDN)"` + CardNos []string `json:"card_nos" validate:"required,min=1,max=100,dive,min=1,max=100" required:"true" minItems:"1" maxItems:"100" description:"卡标识列表(支持 ICCID、虚拟号、MSISDN、设备 IMEI;传入设备 IMEI 时自动转为设备维度购买)"` PackageCode string `json:"package_code" validate:"required,min=1,max=100" required:"true" minLength:"1" maxLength:"100" description:"套餐编码(一次只能购买一个套餐)"` } diff --git a/internal/service/agent_open_api/service.go b/internal/service/agent_open_api/service.go index 6b340d7..1f06add 100644 --- a/internal/service/agent_open_api/service.go +++ b/internal/service/agent_open_api/service.go @@ -320,15 +320,18 @@ func (s *Service) CreateWalletPackageOrders(ctx context.Context, req *dto.AgentO resp.FailedCards = append(resp.FailedCards, buildFailedCard(rawCardNo, errors.New(errors.CodeInvalidParam, "卡标识不能为空"))) continue } - card, err := s.resolveOpenAPICard(ctx, cardNo) - if err != nil { - resp.FailedCards = append(resp.FailedCards, buildFailedCard(cardNo, err)) - continue - } - - // 卡已绑定设备时,自动转为设备维度购买 - identifier := card.ICCID - if !card.IsStandalone { + var identifier string + card, cardErr := s.resolveOpenAPICard(ctx, cardNo) + if cardErr != nil { + // 兜底:尝试解析为设备标识(支持 IMEI/虚拟号) + device, devErr := s.resolveOpenAPIDevice(ctx, cardNo) + if devErr != nil { + resp.FailedCards = append(resp.FailedCards, buildFailedCard(cardNo, cardErr)) + continue + } + identifier = device.VirtualNo + } else if !card.IsStandalone { + // 卡已绑定设备时,自动转为设备维度购买 binding, bindErr := s.deviceSimBindingStore.GetActiveBindingByCardID(ctx, card.ID) if bindErr != nil { resp.FailedCards = append(resp.FailedCards, buildFailedCard(cardNo, errors.Wrap(errors.CodeInternalError, bindErr, "查询卡绑定设备失败"))) @@ -340,6 +343,8 @@ func (s *Service) CreateWalletPackageOrders(ctx context.Context, req *dto.AgentO continue } identifier = device.VirtualNo + } else { + identifier = card.ICCID } orderResp, err := s.orderService.CreateAdminOrder(ctx, &dto.CreateAdminOrderRequest{