Files
iotlcm/server/internal/model/sim_card_query.go
T
2026-10-29 14:36:49 +08:00

116 lines
6.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package model
import (
"github.com/gogf/gf/v2/os/gtime"
)
// 卡基础信息查询 / 月历史用量查询 共用的输入模式。
const (
SimCardQueryModeExcel = "excel" // Excel 模板导入
SimCardQueryModeInput = "input" // 多行文本批量输入
SimCardQueryModeRange = "range" // 连号(起止号段)
SimCardQueryModeDept = "dept" // 按所属公司查询(仅月历史用量查询支持)
)
// 单次查询的号码条数上限。
//
// 取值依据:
// - 与现有批量卡操作上限 20000 保持一致,避免用户对「批量」能力的容量认知分裂;
// - t_export_task.query_params 是 JSON 列,20000 条号码快照约 1MB,仍在可控范围;
// - 20000 行 xlsx 约 3~5MB,导出中心单任务 10 分钟超时内可以写完。
const SimCardQueryMaxRows = 20000
// SimCardQueryExportParam 卡基础信息查询导出参数。
// Excel 模式用 File,批量输入用 BatchInput,连号模式用 Dimension/StartNum/EndNum。
type SimCardQueryExportParam struct {
Mode string `json:"mode" dc:"输入方式 excel/input/range"`
BatchInput string `json:"batchInput" dc:"批量输入内容,每行 ICCID 或 ICCID MSISDN IMSI"`
Dimension string `json:"dimension" dc:"连号维度 iccid/msisdn/imsi"`
StartNum string `json:"startNum" dc:"起始号段"`
EndNum string `json:"endNum" dc:"结束号段"`
Iccid string `json:"iccid" dc:"仅按 ICCID 精确查询"`
ExportColumnsJson string `json:"exportColumnsJson" dc:"导出列(JSON字符串)"`
ExportColumns []ExportColumn `json:"exportColumns" dc:"导出列"`
}
// SimCardUsageHistoryExportParam 月历史用量查询导出参数。
// 在卡基础信息查询的基础上增加「按所属公司」模式。
type SimCardUsageHistoryExportParam struct {
SimCardQueryExportParam
DeptId int64 `json:"deptId" dc:"所属公司部门ID,mode=dept 时必填"`
// 到期日期区间,仅 dept 模式生效;为空表示不限。
ExpireStartTime string `json:"expireStartTime" dc:"到期日期起(含)"`
ExpireEndTime string `json:"expireEndTime" dc:"到期日期止(含)"`
}
// SimCardQuerySubmitRes 提交导出后的回执。
// 文件不在本次响应里返回,用户到「下载中心」下载;执行日志里看汇总结果。
type SimCardQuerySubmitRes struct {
TaskId int64 `json:"taskId" dc:"任务ID"`
TaskNo string `json:"taskNo" dc:"任务编号"`
Total int `json:"total" dc:"预计导出行数"`
}
// SimCardQueryResolveResult 输入解析结果。
// Rows 为按输入顺序展开的待导出行,未命中的行同样保留,用于在文件里写明失败原因。
type SimCardQueryResolveResult struct {
Rows []*SimCardBaseQueryRow
HitCount int
MissCount int
// Summaries 输入侧的错误(如某行格式错误),按行记录,最终汇总进执行日志。
Summaries []string
}
// SimCardBaseQueryRow 卡基础信息查询的导出行。
// 字段顺序即无列清单时的默认导出顺序;Field 名与前端列配置的 field 一一对应。
type SimCardBaseQueryRow struct {
Iccid string `json:"iccid" dc:"ICCID"`
Msisdn string `json:"msisdn" dc:"MSISDN"`
Imsi string `json:"imsi" dc:"IMSI"`
Imei string `json:"imei" dc:"IMEI"`
UsedFlowMb float64 `json:"usedFlowMb" dc:"当月用量(MB)"`
RemainFlowMb float64 `json:"remainFlowMb" dc:"当月剩余用量(MB)"`
PackageTotalMb float64 `json:"packageTotalMb" dc:"套餐总流量(MB)"`
CardStatus int `json:"cardStatus" dc:"卡状态"`
NetModel int `json:"netModel" dc:"网络类型"`
Operators string `json:"operators" dc:"运营商"`
ActivateAt *gtime.Time `json:"activateAt" dc:"激活时间"`
OutStockTime *gtime.Time `json:"outStockTime" dc:"出库时间"`
ExpireAt *gtime.Time `json:"expireAt" dc:"到期时间"`
OutboundBatch string `json:"outboundBatch" dc:"出库批次"`
InboundBatch string `json:"inboundBatch" dc:"入库批次"`
PackageName string `json:"packageName" dc:"当前套餐名称"`
DeptName string `json:"deptName" dc:"所属企业"`
Remark string `json:"remark" dc:"备注"`
ExtraRemark string `json:"extraRemark" dc:"其他备注"`
// QueryResult / FailReason 固定在文件末尾两列,保证「部分成功」时失败原因可追溯到具体输入。
QueryResult string `json:"queryResult" dc:"查询结果"`
FailReason string `json:"failReason" dc:"失败原因"`
}
// SimCardUsageHistoryRow 月历史用量查询的导出行。
// 近 12 个月的用量按月份动态列展开,MonthValues 与请求里的月份顺序一致。
type SimCardUsageHistoryRow struct {
Iccid string `json:"iccid" dc:"ICCID"`
Msisdn string `json:"msisdn" dc:"MSISDN"`
Imsi string `json:"imsi" dc:"IMSI"`
OutStockTime *gtime.Time `json:"outStockTime" dc:"出库时间"`
ExpireAt *gtime.Time `json:"expireAt" dc:"到期时间"`
// MonthValues 由调用方按月份顺序拼成 "2026-09" 这样的键,导出时逐列取值。
// 键不存在表示「查询成功但该月没有流量记录」,导出为 "-"。
MonthValues map[string]float64 `json:"monthValues" dc:"近12个月用量(MB)"`
// UsageQueryFailed 该卡的流量数据整体查询失败(服务抖动),导出时月份列写「查询失败」,
// 与「无记录(-)」「零用量(0)」区分开,避免客户误解。
UsageQueryFailed bool `json:"usageQueryFailed" dc:"流量数据是否查询失败"`
QueryResult string `json:"queryResult" dc:"查询结果"`
FailReason string `json:"failReason" dc:"失败原因"`
}
// SimCardQueryDeptOption 所属公司下拉项。
type SimCardQueryDeptOption struct {
DeptId int64 `json:"deptId" dc:"部门ID"`
DeptName string `json:"deptName" dc:"公司名称"`
CardCount int64 `json:"cardCount" dc:"名下卡数量"`
ParentId int64 `json:"parentId" dc:"上级部门ID"`
}