chore: 初始开源发布
iotlcm-openapi:对外 OpenAPI 网关(V3 接口 + 旧版兼容接口)。
- Go module:iotlcm-openapi → git.5iot.com/iotlcm-public/iotlcm-openapi(178 文件)
- 凭据与地址脱敏:JWT signingKey、MySQL DSN、Redis 口令、
RabbitMQ DSN 全部改为 ${*} 占位;私网 IP → 文档地址段
- 7 处真实手机号 → 合法 11 位编造号
- 启动 banner 统一 IOTLCM 方块字 + 社区惯例署名
- 移除内部资产:CI 触发器
- Dockerfile 改用公共基础镜像,移除 GOPRIVATE 内网设置
- README 重写(原为 GoFrame 模板占位文案),补 Apache-2.0 LICENSE,
LF 行尾 + .gitattributes
This commit is contained in:
@@ -0,0 +1,322 @@
|
||||
package oldApi
|
||||
|
||||
import (
|
||||
"context"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-openapi/internal/dao"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-openapi/internal/library/xgorm/handler"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-openapi/internal/model"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-openapi/internal/model/entity"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-openapi/internal/service"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
type sOldApiQuery struct {
|
||||
}
|
||||
|
||||
func NewOldApiQuery() *sOldApiQuery {
|
||||
return &sOldApiQuery{}
|
||||
}
|
||||
|
||||
func init() {
|
||||
service.RegisterOldApiQuery(NewOldApiQuery())
|
||||
}
|
||||
|
||||
func (s *sOldApiQuery) StatusConversion(simCardInfo entity.TSimCardInfo) int {
|
||||
switch simCardInfo.BossCardStatus {
|
||||
case 0:
|
||||
return 8
|
||||
case 1:
|
||||
return 3
|
||||
case 2:
|
||||
return 4
|
||||
case 4:
|
||||
return 5
|
||||
case 6:
|
||||
return 2
|
||||
case 7:
|
||||
return 1
|
||||
case 8:
|
||||
return 6
|
||||
case 9:
|
||||
return 7
|
||||
default:
|
||||
return 8
|
||||
}
|
||||
}
|
||||
|
||||
func oldApiDate(times ...*gtime.Time) string {
|
||||
for _, item := range times {
|
||||
if item == nil || item.IsZero() {
|
||||
continue
|
||||
}
|
||||
return item.Format("Y-m-d")
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func oldApiEndOfDay(t *gtime.Time) *gtime.Time {
|
||||
if t == nil || t.IsZero() {
|
||||
return nil
|
||||
}
|
||||
return t.EndOfDay()
|
||||
}
|
||||
|
||||
func oldApiEndOfDayString(t *gtime.Time) string {
|
||||
if t == nil || t.IsZero() {
|
||||
return ""
|
||||
}
|
||||
return t.EndOfDay().Format("Y-m-d H:i:s")
|
||||
}
|
||||
|
||||
func oldApiScopedCardByIccid(ctx context.Context, iccid string) (card *entity.TSimCardInfo, err error) {
|
||||
err = service.IotTSimCardInfo().
|
||||
Model(ctx).
|
||||
Where(dao.TSimCardInfo.Columns().Iccid, iccid).
|
||||
Limit(1).
|
||||
Scan(&card)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if card == nil {
|
||||
return nil, gerror.New("sim卡不存在")
|
||||
}
|
||||
return card, nil
|
||||
}
|
||||
|
||||
func (s *sOldApiQuery) QuerySimCard(ctx context.Context, input *model.SimCardInfoInput) (output *model.SimCardInfoOutput, err error) {
|
||||
input.Param.Type = strings.ToLower(strings.TrimSpace(input.Param.Type))
|
||||
input.Param.Cardno = strings.TrimSpace(input.Param.Cardno)
|
||||
if input.Param.Type == "" {
|
||||
return nil, gerror.New("数据类型不能为空")
|
||||
}
|
||||
if input.Param.Cardno == "" {
|
||||
return nil, gerror.New("值不能为空")
|
||||
}
|
||||
|
||||
field := ""
|
||||
if input.Param.Type == "iccid" {
|
||||
field = dao.TSimCardInfo.Columns().Iccid
|
||||
} else if input.Param.Type == "imsi" {
|
||||
field = dao.TSimCardInfo.Columns().Imsi
|
||||
} else if input.Param.Type == "msisdn" {
|
||||
field = dao.TSimCardInfo.Columns().Msisdn
|
||||
} else {
|
||||
return nil, gerror.New("数据类型错误")
|
||||
}
|
||||
|
||||
var out []model.TSimCardInfoListModel
|
||||
sysDept := dao.SysDept.Table()
|
||||
cardInfoTable := dao.TSimCardInfo.Table()
|
||||
flowPackage := dao.TSimFlowPackageInfo.Table()
|
||||
err = service.IotTSimCardInfo().
|
||||
Model(ctx, &handler.Option{FilterAuth: false, FilterTenant: true}).
|
||||
Where(field, input.Param.Cardno).
|
||||
LeftJoin(sysDept, sysDept+"."+dao.SysDept.Columns().DeptId+"="+cardInfoTable+"."+dao.TSimCardInfo.Columns().DeptId).
|
||||
LeftJoin(flowPackage, flowPackage+"."+dao.TSimFlowPackageInfo.Columns().PackageCode+"="+cardInfoTable+"."+dao.TSimCardInfo.Columns().CurrentPackageCode).
|
||||
Fields(cardInfoTable + ".*," + sysDept + "." + dao.SysDept.Columns().DeptName + " as DeptName," + flowPackage + "." + dao.TSimFlowPackageInfo.Columns().PackageName + " as PackageName").
|
||||
Limit(1).
|
||||
Scan(&out)
|
||||
if err != nil {
|
||||
return nil, gerror.New("查询sim卡信息失败")
|
||||
}
|
||||
if len(out) == 0 {
|
||||
return nil, gerror.New("sim卡不存在")
|
||||
}
|
||||
|
||||
output = &model.SimCardInfoOutput{
|
||||
Vid: strconv.FormatInt(out[0].Id, 10),
|
||||
Msisdn: out[0].Msisdn,
|
||||
Iccid: out[0].Iccid,
|
||||
Imei: out[0].Imei,
|
||||
Imsi: out[0].Imsi,
|
||||
DeptName: out[0].DeptName,
|
||||
StatusId: s.StatusConversion(entity.TSimCardInfo{
|
||||
BossCardStatus: out[0].BossCardStatus,
|
||||
}),
|
||||
PackageId: out[0].CurrentPackageCode,
|
||||
PackageName: out[0].PackageName,
|
||||
Used: out[0].UsedFlowMb,
|
||||
Remaining: out[0].PackageTotalFlowMb - out[0].UsedFlowMb,
|
||||
Type: model.SimCardNameMap[out[0].CardType],
|
||||
PacketArr: nil,
|
||||
Remark: out[0].Remark,
|
||||
Grouping: "",
|
||||
DeliverDate: "",
|
||||
ActivateDate: oldApiDate(out[0].BossActivateAt, out[0].BossOpenAt, out[0].FlowPkgBeginAt),
|
||||
ExpireTime: oldApiEndOfDay(out[0].FlowPkgEndAt),
|
||||
}
|
||||
return output, nil
|
||||
}
|
||||
|
||||
func (s *sOldApiQuery) QuerySimDataUsage(ctx context.Context, input *model.SimDataUsageOldInput) (output *model.SimDataUsageOldOutput, err error) {
|
||||
input.Param.Iccid = strings.TrimSpace(input.Param.Iccid)
|
||||
if input.Param.Iccid == "" {
|
||||
return nil, gerror.New("iccid不能为空")
|
||||
}
|
||||
|
||||
card, err := oldApiScopedCardByIccid(ctx, input.Param.Iccid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
output = &model.SimDataUsageOldOutput{
|
||||
UseUnit: "MB",
|
||||
UseAmount: card.UsedFlowMb,
|
||||
}
|
||||
return output, nil
|
||||
}
|
||||
|
||||
func (s *sOldApiQuery) QuerySimDataUsageMonthly(ctx context.Context, input *model.SimDataUsageMonthlyOldInput) (output *model.SimDataUsageMonthlyOldOutput, err error) {
|
||||
input.Param.Iccid = strings.TrimSpace(input.Param.Iccid)
|
||||
input.Param.DateTime = strings.TrimSpace(input.Param.DateTime)
|
||||
if input.Param.Iccid == "" {
|
||||
return nil, gerror.New("iccid不能为空")
|
||||
}
|
||||
if input.Param.DateTime == "" {
|
||||
return nil, gerror.New("日期时间不能为空")
|
||||
}
|
||||
if _, err = oldApiScopedCardByIccid(ctx, input.Param.Iccid); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
simDataUsageMonthlyInput := &model.SimDataUsageMonthlyInput{
|
||||
SimKeys: []*model.SimKey{
|
||||
{
|
||||
ICCID: input.Param.Iccid,
|
||||
},
|
||||
},
|
||||
ReqData: model.SimDataUsageMonthlyInputItem{
|
||||
QueryDate: input.Param.DateTime,
|
||||
},
|
||||
}
|
||||
out, err := service.UpstreamChan().QuerySimDatausageMonthly(ctx, simDataUsageMonthlyInput)
|
||||
if err != nil {
|
||||
return nil, gerror.New("查询sim卡历史用量失败")
|
||||
}
|
||||
if len(out) == 0 {
|
||||
return &model.SimDataUsageMonthlyOldOutput{
|
||||
UseUnit: "MB",
|
||||
UseAmount: 0,
|
||||
}, nil
|
||||
}
|
||||
|
||||
output = &model.SimDataUsageMonthlyOldOutput{
|
||||
UseUnit: "MB",
|
||||
UseAmount: out[0].ResData.DataAmount,
|
||||
}
|
||||
return output, nil
|
||||
}
|
||||
|
||||
func (s *sOldApiQuery) QuerySimStatus(ctx context.Context, input *model.SimStatusOldInput) (output *model.SimStatusOldOutput, err error) {
|
||||
input.Param.Iccid = strings.TrimSpace(input.Param.Iccid)
|
||||
if input.Param.Iccid == "" {
|
||||
return nil, gerror.New("iccid不能为空")
|
||||
}
|
||||
|
||||
card, err := oldApiScopedCardByIccid(ctx, input.Param.Iccid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
status := s.StatusConversion(*card)
|
||||
output = &model.SimStatusOldOutput{
|
||||
StatusMessage: model.SimCardStatusMap[status],
|
||||
StatusCode: status,
|
||||
}
|
||||
return output, nil
|
||||
}
|
||||
|
||||
func (s *sOldApiQuery) QuerySimSession(ctx context.Context, input *model.SimStatusOnlineOldInput) (output *model.SimStatusOnlineOldOutput, err error) {
|
||||
input.Param.Iccid = strings.TrimSpace(input.Param.Iccid)
|
||||
if input.Param.Iccid == "" {
|
||||
return nil, gerror.New("iccid不能为空")
|
||||
}
|
||||
if _, err = oldApiScopedCardByIccid(ctx, input.Param.Iccid); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
simSessionInput := &model.SimSessionInput{
|
||||
SimKeys: []*model.SimKey{
|
||||
{
|
||||
ICCID: input.Param.Iccid,
|
||||
},
|
||||
},
|
||||
}
|
||||
outSession, err := service.UpstreamChan().QuerySimSession(ctx, simSessionInput)
|
||||
if err != nil {
|
||||
return nil, gerror.New("查询sim卡会话失败")
|
||||
}
|
||||
if len(outSession) == 0 {
|
||||
return &model.SimStatusOnlineOldOutput{
|
||||
TypeName: "",
|
||||
Imei: "",
|
||||
Data: model.SimStatusOnlineOldData{},
|
||||
StatusMessage: "",
|
||||
StatusCode: 0,
|
||||
}, nil
|
||||
}
|
||||
|
||||
simStatusOnlineOldData := model.SimStatusOnlineOldData{
|
||||
ApnId: outSession[0].ResData.ApnId,
|
||||
Rat: outSession[0].ResData.Rat,
|
||||
Ipv6: outSession[0].ResData.Ipv6,
|
||||
Ip: outSession[0].ResData.Ipv4,
|
||||
Ipv6Prefix: outSession[0].ResData.Ipv6Prefix,
|
||||
Status: outSession[0].ResData.Status,
|
||||
CreateDate: outSession[0].ResData.CreateTime,
|
||||
}
|
||||
output = &model.SimStatusOnlineOldOutput{
|
||||
TypeName: "",
|
||||
Imei: "",
|
||||
Data: simStatusOnlineOldData,
|
||||
StatusMessage: "",
|
||||
StatusCode: 0,
|
||||
}
|
||||
return output, nil
|
||||
}
|
||||
|
||||
func (s *sOldApiQuery) QueryCardInfoList(ctx context.Context, input *model.QueryCardInfoListInput) (output []model.QueryCardInfoListOutput, err error) {
|
||||
iccids := make([]string, 0, len(input.Param.Iccid))
|
||||
for _, iccid := range input.Param.Iccid {
|
||||
iccid = strings.TrimSpace(iccid)
|
||||
if iccid == "" {
|
||||
continue
|
||||
}
|
||||
iccids = append(iccids, iccid)
|
||||
}
|
||||
if len(iccids) == 0 {
|
||||
return nil, gerror.New("iccid不能为空")
|
||||
}
|
||||
if len(iccids) > 100 {
|
||||
return nil, gerror.New("iccid数量不能超过100个")
|
||||
}
|
||||
|
||||
entity := []entity.TSimCardInfo{}
|
||||
if err := service.IotTSimCardInfo().
|
||||
Model(ctx).
|
||||
WhereIn(dao.TSimCardInfo.Columns().Iccid, iccids).
|
||||
Scan(&entity); err != nil {
|
||||
return nil, gerror.New("查询sim卡信息失败")
|
||||
}
|
||||
if len(entity) == 0 {
|
||||
return nil, gerror.New("sim卡不存在")
|
||||
}
|
||||
|
||||
output = make([]model.QueryCardInfoListOutput, 0, len(entity))
|
||||
for _, item := range entity {
|
||||
output = append(output, model.QueryCardInfoListOutput{
|
||||
Iccid: item.Iccid,
|
||||
ActivateDate: oldApiDate(item.BossActivateAt, item.BossOpenAt, item.FlowPkgBeginAt),
|
||||
DueExpireTime: oldApiEndOfDayString(item.FlowPkgEndAt),
|
||||
Imei: item.Imei,
|
||||
Imsi: item.Imsi,
|
||||
Msisdn: item.Msisdn,
|
||||
Type: model.SimCardNameMap[item.CardType],
|
||||
Remarks: item.Remark,
|
||||
Status: s.StatusConversion(item),
|
||||
})
|
||||
}
|
||||
return output, nil
|
||||
}
|
||||
Reference in New Issue
Block a user