diff --git a/internal/model/dto/asset_dto.go b/internal/model/dto/asset_dto.go index fe66ae9..47b93b7 100644 --- a/internal/model/dto/asset_dto.go +++ b/internal/model/dto/asset_dto.go @@ -21,6 +21,7 @@ type AssetResolveResponse struct { // 状态聚合字段 RealNameStatus int `json:"real_name_status" description:"实名状态:0未实名 1已实名"` RealNameAt *time.Time `json:"real_name_at" description:"最近一次完成实名的时间,未实名时为 null"` + RealnamePolicy string `json:"realname_policy" description:"实名认证策略 (none:无需实名, before_order:先实名后充值/购买, after_order:先充值/购买后实名)"` CurrentPackage string `json:"current_package" description:"当前套餐名称(无套餐时为空)"` PackageTotalMB int64 `json:"package_total_mb" description:"当前套餐总虚流量(MB),已按virtual_ratio换算"` PackageUsedMB float64 `json:"package_used_mb" description:"当前已用虚流量(MB),已按virtual_ratio换算"` @@ -73,6 +74,7 @@ type BoundCardInfo struct { CarrierID uint `json:"carrier_id,omitempty" description:"运营商ID"` CarrierType string `json:"carrier_type,omitempty" description:"运营商类型"` CarrierName string `json:"carrier_name,omitempty" description:"运营商名称"` + RealnamePolicy string `json:"realname_policy" description:"实名认证策略 (none:无需实名, before_order:先实名后充值/购买, after_order:先充值/购买后实名)"` } // AssetRealtimeStatusResponse 资产实时状态(只读DB/Redis) @@ -81,6 +83,7 @@ type AssetRealtimeStatusResponse struct { AssetID uint `json:"asset_id" description:"资产ID"` NetworkStatus int `json:"network_status,omitempty" description:"网络状态(asset_type=card时有效):0停机 1开机"` RealNameStatus int `json:"real_name_status,omitempty" description:"实名状态(asset_type=card时有效):0未实名 1已实名"` + RealnamePolicy string `json:"realname_policy,omitempty" description:"实名认证策略 (none:无需实名, before_order:先实名后充值/购买, after_order:先充值/购买后实名)"` CurrentMonthUsageMB float64 `json:"current_month_usage_mb,omitempty" description:"系统累计的自然月流量MB(asset_type=card时有效)"` LastSyncTime *time.Time `json:"last_sync_time,omitempty" description:"最后同步时间(asset_type=card时有效)"` DeviceProtectStatus string `json:"device_protect_status,omitempty" description:"保护期状态(asset_type=device时有效):none/stop/start"` @@ -279,3 +282,16 @@ type UpdateAssetPollingStatusResponse struct { AssetID uint `json:"asset_id" description:"资产ID"` EnablePolling bool `json:"enable_polling" description:"更新后的轮询状态 (true:已启用, false:已禁用)"` } + +// UpdateAssetRealnamePolicyRequest 更新资产实名认证策略请求 +type UpdateAssetRealnamePolicyRequest struct { + Identifier string `path:"identifier" description:"资产标识符(ICCID 或 VirtualNo)" required:"true"` + RealnamePolicy string `json:"realname_policy" description:"实名认证策略 (none:无需实名, before_order:先实名后充值/购买, after_order:先充值/购买后实名)" required:"true" enum:"none,before_order,after_order"` +} + +// UpdateAssetRealnamePolicyResponse 更新资产实名认证策略响应 +type UpdateAssetRealnamePolicyResponse struct { + AssetType string `json:"asset_type" description:"资产类型 (card:IoT卡, device:设备)"` + AssetID uint `json:"asset_id" description:"资产ID"` + RealnamePolicy string `json:"realname_policy" description:"更新后的实名认证策略 (none:无需实名, before_order:先实名后充值/购买, after_order:先充值/购买后实名)"` +} diff --git a/internal/model/dto/device_dto.go b/internal/model/dto/device_dto.go index 1bbbc75..86b2e4a 100644 --- a/internal/model/dto/device_dto.go +++ b/internal/model/dto/device_dto.go @@ -36,6 +36,7 @@ type DeviceResponse struct { SeriesID *uint `json:"series_id" description:"套餐系列ID"` SeriesName string `json:"series_name" description:"套餐系列名称"` ActivatedAt *time.Time `json:"activated_at" description:"激活时间"` + RealnamePolicy string `json:"realname_policy" description:"实名认证策略 (none:无需实名, before_order:先实名后充值/购买, after_order:先充值/购买后实名)"` CreatedAt time.Time `json:"created_at" description:"创建时间"` UpdatedAt time.Time `json:"updated_at" description:"更新时间"` // 设备实时同步字段(由 sync-info 接口写入) @@ -71,16 +72,17 @@ type ListDeviceCardsRequest struct { } type DeviceCardBindingResponse struct { - ID uint `json:"id" description:"绑定记录ID"` - SlotPosition int `json:"slot_position" description:"插槽位置 (1-4)"` - IotCardID uint `json:"iot_card_id" description:"IoT卡ID"` - ICCID string `json:"iccid" description:"ICCID"` - MSISDN string `json:"msisdn" description:"接入号"` - CarrierName string `json:"carrier_name" description:"运营商名称"` - Status int `json:"status" description:"卡状态 (1:在库, 2:已分销, 3:已激活, 4:已停用)"` - StatusName string `json:"status_name" description:"卡状态名称(中文)"` - BindTime *time.Time `json:"bind_time" description:"绑定时间"` - IsCurrent bool `json:"is_current" description:"是否为当前使用的卡"` + ID uint `json:"id" description:"绑定记录ID"` + SlotPosition int `json:"slot_position" description:"插槽位置 (1-4)"` + IotCardID uint `json:"iot_card_id" description:"IoT卡ID"` + ICCID string `json:"iccid" description:"ICCID"` + MSISDN string `json:"msisdn" description:"接入号"` + CarrierName string `json:"carrier_name" description:"运营商名称"` + Status int `json:"status" description:"卡状态 (1:在库, 2:已分销, 3:已激活, 4:已停用)"` + StatusName string `json:"status_name" description:"卡状态名称(中文)"` + BindTime *time.Time `json:"bind_time" description:"绑定时间"` + IsCurrent bool `json:"is_current" description:"是否为当前使用的卡"` + RealnamePolicy string `json:"realname_policy" description:"实名认证策略 (none:无需实名, before_order:先实名后充值/购买, after_order:先充值/购买后实名)"` } type ListDeviceCardsResponse struct { diff --git a/internal/model/dto/iot_card_dto.go b/internal/model/dto/iot_card_dto.go index a873589..582d0c4 100644 --- a/internal/model/dto/iot_card_dto.go +++ b/internal/model/dto/iot_card_dto.go @@ -53,6 +53,7 @@ type StandaloneIotCardResponse struct { SeriesID *uint `json:"series_id" description:"套餐系列ID"` SeriesName string `json:"series_name" description:"套餐系列名称"` DeviceVirtualNo string `json:"device_virtual_no" description:"绑定设备的虚拟号(未绑定时为空字符串)"` + RealnamePolicy string `json:"realname_policy" description:"实名认证策略 (none:无需实名, before_order:先实名后充值/购买, after_order:先充值/购买后实名)"` CreatedAt time.Time `json:"created_at" description:"创建时间"` UpdatedAt time.Time `json:"updated_at" description:"更新时间"` } @@ -65,10 +66,11 @@ type ListStandaloneIotCardResponse struct { } type ImportIotCardRequest struct { - CarrierID uint `json:"carrier_id" validate:"required,min=1" required:"true" minimum:"1" description:"运营商ID"` - BatchNo string `json:"batch_no" validate:"omitempty,max=100" maxLength:"100" description:"批次号"` - FileKey string `json:"file_key" validate:"required,min=1,max=500" required:"true" minLength:"1" maxLength:"500" description:"对象存储文件路径(通过 /storage/upload-url 获取)"` - CardCategory string `json:"card_category" validate:"omitempty,oneof=normal industry" description:"卡业务类型 (normal:普通卡, industry:行业卡),默认 normal"` + CarrierID uint `json:"carrier_id" validate:"required,min=1" required:"true" minimum:"1" description:"运营商ID"` + BatchNo string `json:"batch_no" validate:"omitempty,max=100" maxLength:"100" description:"批次号"` + FileKey string `json:"file_key" validate:"required,min=1,max=500" required:"true" minLength:"1" maxLength:"500" description:"对象存储文件路径(通过 /storage/upload-url 获取)"` + CardCategory string `json:"card_category" validate:"omitempty,oneof=normal industry" description:"卡业务类型 (normal:普通卡, industry:行业卡),默认 normal"` + RealnamePolicy string `json:"realname_policy" validate:"omitempty,oneof=none before_order after_order" description:"实名认证策略 (none:无需实名, before_order:先实名后充值/购买, after_order:先充值/购买后实名),默认 none"` } type ImportIotCardResponse struct { @@ -88,24 +90,25 @@ type ListImportTaskRequest struct { } type ImportTaskResponse struct { - ID uint `json:"id" description:"任务ID"` - TaskNo string `json:"task_no" description:"任务编号"` - Status int `json:"status" description:"任务状态 (1:待处理, 2:处理中, 3:已完成, 4:失败)"` - StatusText string `json:"status_text" description:"任务状态文本"` - CarrierID uint `json:"carrier_id" description:"运营商ID"` - CarrierType string `json:"carrier_type,omitempty" description:"运营商类型 (CMCC:中国移动, CUCC:中国联通, CTCC:中国电信, CBN:中国广电)"` - CarrierName string `json:"carrier_name,omitempty" description:"运营商名称"` - BatchNo string `json:"batch_no,omitempty" description:"批次号"` - CardCategory string `json:"card_category" description:"卡业务类型 (normal:普通卡, industry:行业卡)"` - FileName string `json:"file_name,omitempty" description:"文件名"` - TotalCount int `json:"total_count" description:"总数"` - SuccessCount int `json:"success_count" description:"成功数"` - SkipCount int `json:"skip_count" description:"跳过数"` - FailCount int `json:"fail_count" description:"失败数"` - StartedAt *time.Time `json:"started_at,omitempty" description:"开始处理时间"` - CompletedAt *time.Time `json:"completed_at,omitempty" description:"完成时间"` - ErrorMessage string `json:"error_message,omitempty" description:"错误信息"` - CreatedAt time.Time `json:"created_at" description:"创建时间"` + ID uint `json:"id" description:"任务ID"` + TaskNo string `json:"task_no" description:"任务编号"` + Status int `json:"status" description:"任务状态 (1:待处理, 2:处理中, 3:已完成, 4:失败)"` + StatusText string `json:"status_text" description:"任务状态文本"` + CarrierID uint `json:"carrier_id" description:"运营商ID"` + CarrierType string `json:"carrier_type,omitempty" description:"运营商类型 (CMCC:中国移动, CUCC:中国联通, CTCC:中国电信, CBN:中国广电)"` + CarrierName string `json:"carrier_name,omitempty" description:"运营商名称"` + BatchNo string `json:"batch_no,omitempty" description:"批次号"` + CardCategory string `json:"card_category" description:"卡业务类型 (normal:普通卡, industry:行业卡)"` + RealnamePolicy string `json:"realname_policy" description:"实名认证策略 (none:无需实名, before_order:先实名后充值/购买, after_order:先充值/购买后实名)"` + FileName string `json:"file_name,omitempty" description:"文件名"` + TotalCount int `json:"total_count" description:"总数"` + SuccessCount int `json:"success_count" description:"成功数"` + SkipCount int `json:"skip_count" description:"跳过数"` + FailCount int `json:"fail_count" description:"失败数"` + StartedAt *time.Time `json:"started_at,omitempty" description:"开始处理时间"` + CompletedAt *time.Time `json:"completed_at,omitempty" description:"完成时间"` + ErrorMessage string `json:"error_message,omitempty" description:"错误信息"` + CreatedAt time.Time `json:"created_at" description:"创建时间"` } type ListImportTaskResponse struct {