package app import ( "context" "strings" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" ) const ( appUpstreamProviderMock = "onelink_mock" ) type appSimUpstreamProvider interface { QuerySimBasicInfo(ctx context.Context, input appSimBasicInfoInput) (*appSimBasicInfoOutput, error) ChangeSimStatus(ctx context.Context, operation appCardLifecycleOperation, row *appCardLifecycleExecutionRow) (appSimStatusChangeOutcome, error) } type appSimBasicInfoInput struct { CardValue string Iccid string Msisdn string Imsi string Imei string } type appSimBasicInfoOutput struct { Provider string Iccid string Msisdn string Imsi string Imei string OpenDate string ActiveDate string Remark string CardStatus int LastChangeDate string } type appSimStatusChangeOutcome struct { Success bool Code int Message string OrderNum string } func newAppSimUpstreamProvider(ctx context.Context) (appSimUpstreamProvider, error) { provider := strings.TrimSpace(g.Cfg().MustGet(ctx, "upstream.provider", appUpstreamProviderMock).String()) if provider == "" { provider = appUpstreamProviderMock } switch provider { case appUpstreamProviderMock: return newAppOneLinkMockClient(ctx) default: return nil, gerror.Newf("不支持的上游服务提供方:%s", provider) } } func appSimBasicInfoInputFromCardValue(cardValue string) appSimBasicInfoInput { value := strings.TrimSpace(cardValue) input := appSimBasicInfoInput{CardValue: value} switch { case len(value) == 20: input.Iccid = value case len(value) == 15: input.Imsi = value default: input.Msisdn = value } return input } func appErrUpstreamUnavailable(err error) error { if err == nil { return nil } return gerror.Wrap(err, "上游挡板暂不可用") }