2bec257289
iotlcm-worker-svr:异步执行中枢(RabbitMQ 消费者 + 全量同步编排)。 - Go module:iotlcm-worker-svr → git.5iot.com/iotlcm-public/iotlcm-worker-svr(214 文件) - 凭据与内部标识脱敏:MySQL/Redis 凭据、私网与生产 IP、内网域名、 库名 xiujie_admin → iotlcm、哨兵名占位 - 159 处真实手机号 → 合法 11 位编造号(保留号段与后 4 位,维持互异, 不破坏「校验 MSISDN 格式」等测试断言) - 移除内部资产:CI 触发器、Jenkins 触发测试文档、预演门禁与镜像 digest 记录 - Dockerfile 改用公共基础镜像(golang:1.25-alpine → alpine:3.23), 移除写死的 git 凭据 - README 重写(架构/全量同步模型/配置/已知失败),补 Apache-2.0 LICENSE,LF 行尾 + .gitattributes 已知:3 个测试包在源仓同一提交上同样失败(client/upstream、 service/allocate、service/inbound),属既有缺陷,本仓未引入亦未修复。
111 lines
3.0 KiB
Go
111 lines
3.0 KiB
Go
package model
|
|
|
|
import "time"
|
|
|
|
type UpstreamChanConfig struct {
|
|
Address string `json:"address"`
|
|
Timeout time.Duration `json:"timeout"`
|
|
}
|
|
|
|
type SimKey struct {
|
|
ChanKey string `json:"chanKey"`
|
|
ICCID string `json:"iccid"`
|
|
IMSI string `json:"imsi"`
|
|
MSISDN string `json:"msisdn"`
|
|
}
|
|
|
|
type SimBaseReq[T any] struct {
|
|
SimKeys []*SimKey `json:"simKeys"`
|
|
ReqData T `json:"reqData"`
|
|
}
|
|
|
|
// SimInputReqNullDate is used by current-month real-time usage calls. The
|
|
// upstream determines the current month at request time.
|
|
type SimInputReqNullDate struct{}
|
|
|
|
type SimDataUsageInput = SimBaseReq[SimInputReqNullDate]
|
|
|
|
type SimDataUsageItem struct {
|
|
DataUsage float64 `json:"dataUsage"`
|
|
}
|
|
|
|
type SimBaseRes[T any] struct {
|
|
Code int `json:"code"`
|
|
Message string `json:"message"`
|
|
ErrCode string `json:"errCode"`
|
|
SimKey *SimKey `json:"simKey"`
|
|
ResData T `json:"resData"`
|
|
}
|
|
|
|
type SimBasicInfoInput = SimBaseReq[SimInputReqNullDate]
|
|
|
|
type SimBasicInfoItem struct {
|
|
ICCID string `json:"iccid"`
|
|
IMSI string `json:"imsi"`
|
|
MSISDN string `json:"msisdn"`
|
|
ActiveDate string `json:"activeDate"`
|
|
OpenDate string `json:"openDate"`
|
|
Remark string `json:"remark"`
|
|
}
|
|
|
|
type SimDataUsageMonthlyInput = SimBaseReq[SimDataUsageMonthlyInputItem]
|
|
type SimDataUsageMonthlyInputItem struct {
|
|
QueryDate string `json:"queryDate"`
|
|
}
|
|
type SimDataUsageMonthlyOutputItem struct {
|
|
DeadLine string `json:"deadLine"`
|
|
DataAmount float64 `json:"dataAmount"`
|
|
}
|
|
|
|
type SimDataUsageDailyInput = SimBaseReq[SimDataUsageDailyInputItem]
|
|
type SimDataUsageDailyInputItem struct {
|
|
QueryDate string `json:"queryDate"`
|
|
}
|
|
type SimDataUsageDailyOutputItem struct {
|
|
QueryDate string `json:"queryDate"`
|
|
DataAmount float64 `json:"dataAmount"`
|
|
}
|
|
|
|
// SimCardStatusInput is the request envelope for carrier status queries.
|
|
type SimCardStatusInput = SimBaseReq[SimInputReqNullDate]
|
|
|
|
// SimImeiInput is the request envelope for terminal IMEI queries.
|
|
type SimImeiInput = SimBaseReq[SimInputReqNullDate]
|
|
|
|
// SimImeiItem is the terminal IMEI returned for one SIM card.
|
|
//
|
|
// A carrier may answer successfully yet return an empty value (for example a
|
|
// card whose device never reported an IMEI, or a template whose upstream
|
|
// endpoint does not expose IMEI at all). Callers must therefore distinguish
|
|
// "query succeeded with an empty value" from "query failed".
|
|
type SimImeiItem struct {
|
|
Imei string `json:"imei"`
|
|
}
|
|
|
|
// SimCardStatusItem is the carrier status returned for one SIM card.
|
|
type SimCardStatusItem struct {
|
|
CardStatus int `json:"cardStatus"`
|
|
LastChangeDate string `json:"lastChangeDate"`
|
|
}
|
|
|
|
type SimCardStatusChangeInput = SimBaseReq[SimCardStatusChangeInputItem]
|
|
|
|
type SimCardStatusChangeInputItem struct {
|
|
OperType string `json:"operType"`
|
|
}
|
|
|
|
type SimCardStatusChangeOutputItem struct {
|
|
OrderNum string `json:"orderNum"`
|
|
}
|
|
|
|
type SimCardApnChangeInput = SimBaseReq[SimCardApnChangeInputItem]
|
|
|
|
type SimCardApnChangeInputItem struct {
|
|
OperType string `json:"operType"`
|
|
ApnName string `json:"apnName"`
|
|
}
|
|
|
|
type SimCardApnChangeOutputItem struct {
|
|
OrderNum string `json:"orderNum"`
|
|
}
|