chore: 并入 iotlcm-admin-svr 历史到 admin-svr/(原提交 49818c6)

This commit is contained in:
MiFaZhan
2026-11-02 13:27:59 +08:00
1250 changed files with 154111 additions and 0 deletions
@@ -0,0 +1,129 @@
package model
import (
"context"
"strings"
"github.com/gogf/gf/v2/errors/gerror"
)
const (
TSimChannelsTestInputModeComplete = "complete"
TSimChannelsTestInputModeSingle = "single"
TSimChannelsTestInputModeDirectSingle = "direct_single"
)
type TSimChannelsTestParam struct {
ChannelId int64 `json:"channelId" v:"required#通道ID不能为空" dc:"通道ID"`
InputMode string `json:"inputMode" dc:"输入模式:complete/single"`
CardValueType string `json:"cardValueType" dc:"卡值类型:iccid/msisdn/imsi"`
CardValue string `json:"cardValue" dc:"卡值"`
Iccid string `json:"iccid" dc:"ICCID"`
Imsi string `json:"imsi" dc:"IMSI"`
Msisdn string `json:"msisdn" dc:"MSISDN"`
Items []string `json:"items" dc:"待测试接口;为空时测试全部"`
}
func (in *TSimChannelsTestParam) Filter(ctx context.Context) error {
in.InputMode = strings.ToLower(strings.TrimSpace(in.InputMode))
if in.InputMode == "" {
in.InputMode = TSimChannelsTestInputModeComplete
}
in.CardValueType = strings.ToLower(strings.TrimSpace(in.CardValueType))
in.CardValue = strings.TrimSpace(in.CardValue)
in.Iccid = strings.TrimSpace(in.Iccid)
in.Imsi = strings.TrimSpace(in.Imsi)
in.Msisdn = strings.TrimSpace(in.Msisdn)
items, err := NormalizeTSimChannelTestItems(in.Items)
if err != nil {
return err
}
in.Items = items
switch in.InputMode {
case TSimChannelsTestInputModeComplete:
if in.Iccid == "" || in.Imsi == "" || in.Msisdn == "" {
return gerror.New("完整三码模式下ICCID、IMSI、MSISDN均不能为空")
}
if in.CardValue != "" || in.CardValueType != "" {
return gerror.New("完整三码模式下不需要填写单码查询参数")
}
case TSimChannelsTestInputModeSingle:
if in.CardValue == "" || in.CardValueType == "" {
return gerror.New("单码补全模式下卡值类型和卡值不能为空")
}
if in.Iccid != "" || in.Imsi != "" || in.Msisdn != "" {
return gerror.New("单码补全模式下不需要填写完整三码")
}
switch in.CardValueType {
case "iccid", "imsi", "msisdn":
default:
return gerror.New("单码补全模式下卡值类型只能是iccid、imsi或msisdn")
}
case TSimChannelsTestInputModeDirectSingle:
if in.CardValue == "" || in.CardValueType == "" {
return gerror.New("direct single mode requires card value type and value")
}
if in.Iccid != "" || in.Imsi != "" || in.Msisdn != "" {
return gerror.New("direct single mode does not accept complete card identifiers")
}
switch in.CardValueType {
case "iccid", "imsi", "msisdn":
default:
return gerror.New("direct single mode card value type must be iccid, imsi, or msisdn")
}
default:
return gerror.New("不支持的输入模式")
}
return nil
}
type TSimChannelsTestOutput struct {
Items []*TSimChannelsTestItem `json:"items" dc:"测试结果"`
GatewayResponseRaw string `json:"gatewayResponseRaw,omitempty" dc:"网关原始响应"`
}
// TSimChannelsTestError adds diagnostic response data without replacing the original error.
type TSimChannelsTestError struct {
Err error
GatewayResponseRaw string
}
func (e *TSimChannelsTestError) Error() string { return e.Err.Error() }
func (e *TSimChannelsTestError) Unwrap() error { return e.Err }
type TSimChannelsTestItem struct {
Key string `json:"key" dc:"查询项标识"`
Name string `json:"name" dc:"查询项名称"`
Status string `json:"status" dc:"状态:success/failed/timeout"`
DurationMs int64 `json:"durationMs" dc:"耗时(毫秒)"`
Message string `json:"message,omitempty" dc:"结果消息"`
Data any `json:"data,omitempty" dc:"标准化响应数据"`
ErrorCode int `json:"errorCode,omitempty" dc:"gateway or carrier error code"`
ResponseJSON string `json:"responseJson,omitempty" dc:"本次通道测试响应 JSON"`
}
var tSimChannelTestItemKeys = map[string]struct{}{
"simBasicInfo": {}, "simSession": {}, "simStatus": {}, "simStopReason": {}, "simFrozenState": {},
"simCardBindStatus": {}, "simDeviceStatus": {}, "simRegionLimitStatus": {}, "simImei": {},
"simDataUsage": {}, "simDataUsageMonthly": {}, "simDataUsageDaily": {}, "simApnInfo": {},
}
func NormalizeTSimChannelTestItems(items []string) ([]string, error) {
if len(items) == 0 {
return nil, nil
}
seen := make(map[string]struct{}, len(items))
normalized := make([]string, 0, len(items))
for _, item := range items {
item = strings.TrimSpace(item)
if _, ok := tSimChannelTestItemKeys[item]; !ok {
return nil, gerror.Newf("不支持的测试项:%s", item)
}
if _, ok := seen[item]; ok {
continue
}
seen[item] = struct{}{}
normalized = append(normalized, item)
}
return normalized, nil
}