package sdk import ( "errors" "go-nc/configs/global" "go-nc/internal/utils" "go-nc/model" "go-nc/pkg/sim" "go-nc/pkg/sim/grace" "strconv" "github.com/gin-gonic/gin" "github.com/tidwall/gjson" ) // token 获取 func AgentToken(c *gin.Context) { type Param struct { AccessKey string `json:"accessKey" validate:"required"` SecretKey string `json:"secretKey" validate:"required"` } var param Param if err := c.ShouldBindJSON(¶m); err != nil { c.Error(errors.New("lack:" + err.Error())) return } err := utils.ValidateStruct(param) if err != nil { c.Error(err) return } userName := utils.DecryptDES_ECB(param.AccessKey, "Mirendemianbaina") var data model.Sys_user global.App.DB.Where("username = ? AND password = ?", userName, param.SecretKey).First(&data) if data.Id == 0 { c.Error(errors.New("用户名或密码错误!")) return } token, err := utils.GenerateToken(utils.UserInfo{ Id: data.Id, UserName: data.Username, UserType: data.UserType, }) if err != nil { c.Error(err) return } c.Set("res_data", token) } // 查询卡信息 func CardInfo(c *gin.Context) { iccid := c.Query("iccid") if iccid == "" { c.Error(errors.New("lack:iccid")) return } type SimCard struct { Iccid string ` json:"iccid"` // ICCID CurrentImsi string ` json:"currentImsi"` // 当前 IMSI BindImsi string ` json:"bindImsi"` // 当前 SIM 卡绑定的 IMSI,多个以逗号隔开 CreateTime string ` json:"createTime"` // SIM 卡生成日期 IccidStatus string ` json:"iccidStatus"` // SIM 卡状态 DataUsageTotal string ` json:"dataUsageTotal"` // 已使用总流量(单位:MB) VoiceMtTotal string ` json:"voiceMtTotal"` // 语音呼入分钟数 VoiceMoTotal string ` json:"voiceMoTotal"` // 语音呼出分钟数 VoiceTotal string ` json:"voiceTotal"` // 总的语音分钟数 SmsTotal string ` json:"smsTotal"` // 发短信数 ValidMonth string ` json:"validMonth"` // SIM 卡有效期(单位:月) CloseTime string ` json:"closeTime"` // SIM 卡关闭日期 ActiveTime string ` json:"activeTime"` // SIM 卡激活日期 CurrentImsiProvider string ` json:"currentImsiProvider"` // 当前 IMSI 所属供应商名称 DataSpeed string ` json:"dataSpeed"` // 默认限速 TariffId string ` json:"packageId"` // 资费ID PoolId string ` json:"poolId"` // 流量池Id } iccids := []SimCard{} if err := global.App.DB.Model(&model.Sim_card{}). Where("iccid = ?", iccid). Find(&iccids).Error; err != nil { c.Error(err) return } c.Set("res_data", iccids) } // 查询卡流量包信息 func CardTraffic(c *gin.Context) { iccid := c.Query("iccid") if iccid == "" { c.Error(errors.New("lack:iccid")) return } type SimPackage struct { Iccid string `json:"iccid"` // ICCID // TId string `json:"tId"` // 订单ID // TrafficId string `json:"packageId"` // 资费id // TrafficName string `json:"packageName"` // 资费名称 // ProductId string `json:"productId"` // 流量包ID // OTWProductId int `json:"otwProductId"` // 流量包ID // ProductName string `json:"productName"` // 流量包名称 Status string `json:"status"` // 状态 套餐状态 0:Inactive 1:Activated 2:Close 3:Expired CreateTime string `json:"createTime"` // 套餐生成日期 ActiveTime string `json:"activeTime"` // 套餐激活时间 ExpiryTime string `json:"expiryTime"` // 套餐过期时间 DataTotal int `json:"dataTotal"` // 套餐可用流量:-1表示无限流量(单位: MB) DataUsage int `json:"dataUsage"` // 套餐已使用流量(单位:MB) DataToday int `json:"dataToday"` // 套餐今日使用流量(单位:MB) ValidDays int `json:"validDays"` // 套餐有效天数 // Present int `json:"present"` // 是否赠送套餐 0-否 1-是 } Package := []SimPackage{} if err := global.App.DB.Model(&model.Sim_package{}). Where("iccid = ?", iccid). Find(&Package).Error; err != nil { c.Error(errors.New("fail")) return } // 获取资费Id TrafficId := "" if err := global.App.DB.Model(&model.Sim_card{}).Select("tariff_id").Where("iccid = ?", iccid).Find(&TrafficId).Error; err != nil { c.Error(errors.New("fail")) return } // 资费名称 TrafficName := "" if err := global.App.DB.Model(&model.Sim_traffic{}).Select("label").Where("id = ?", TrafficId).Find(&TrafficName).Error; err != nil { c.Error(errors.New("fail")) return } type Records struct { SimPackage TrafficId string `json:"packageId"` // 资费id TrafficName string `json:"packageName"` // 资费名称 } var records []Records for _, v := range Package { records = append(records, Records{ SimPackage: v, TrafficId: TrafficId, TrafficName: TrafficName, }) } c.Set("res_data", records) } // 停卡 func StopCard(c *gin.Context) { iccid := c.Query("iccid") if iccid == "" { c.Error(errors.New("lack:iccid")) return } result, err := sim.StopSim("grace", iccid) if err != nil { c.Error(err) return } go sim.GetCardInfo("grace", iccid, nil) resultStr := result.String() data := gjson.Get(resultStr, "result").String() msg := gjson.Get(resultStr, "message").String() c.Set("res_msg", msg) c.Set("res_data", data) } // 恢复卡 func RunCard(c *gin.Context) { iccid := c.Query("iccid") if iccid == "" { c.Error(errors.New("lack:iccid")) return } result, err := sim.RuneSim("grace", iccid) if err != nil { c.Error(err) return } go sim.GetCardInfo("grace", iccid, nil) resultStr := result.String() data := gjson.Get(resultStr, "result").String() msg := gjson.Get(resultStr, "message").String() c.Set("res_msg", msg) c.Set("res_data", data) } // 查询套餐 func Tariff(c *gin.Context) { userInfoInterface, _ := c.Get("userInfo") userInfo, _ := userInfoInterface.(model.Sys_user) type SimTraffic struct { // UserId uint `gorm:"not null;" json:"userId"` // 用户ID Id string `json:"packageId"` // SimDataPlanId string `gorm:"not null;type:varchar(255)" json:"packageId"` // 流量包ID Label string `json:"PackageName"` // 资费名称 // Source string `gorm:"not null;type:varchar(255)" json:"source"` // 来源 // BillingCycle string `gorm:"not null;type:varchar(255)" json:"billingCycle"` // 计费周期 // BillingMethod string `gorm:"not null;type:varchar(255)" json:"billingMethod"` // 计费方式 // EndDate string `gorm:"not null;type:varchar(255)" json:"endDate"` // 结算周期 // Pricing int64 `gorm:"not null;" json:"pricing"` // 价格 // Currency string `gorm:"not null;type:varchar(255)" json:"currency"` // 币种 // TrafficBilling string `json:"trafficBilling"` // 流量资费计费 // TrafficBillingType string `json:"trafficBillingType"` // 流量资费计费类型 // TrafficBillingAmount string `json:"trafficBillingAmount"` // 流量资费计费金额 // MRCAmount string `json:"mrcAmount"` // MRC金额 // NetworkAccessFee string `json:"networkAccessFee"` // 网络接入费 } data := []SimTraffic{} if err := global.App.DB.Where("user_id = ?", userInfo.Id).First(&data).Error; err != nil { c.Error(errors.New("fail")) return } c.Set("res_data", data) } // 绑定套餐 func BindTariff(c *gin.Context) { type Param struct { Iccid string `json:"iccid" validate:"required"` PackageId string `json:"packageId" validate:"required"` } var param Param if err := c.ShouldBindJSON(¶m); err != nil { c.Error(errors.New("lack11:" + err.Error())) return } err := utils.ValidateStruct(param) if err != nil { c.Error(errors.New("fail")) return } // 查询套餐id SimDataPlanId := "" if err := global.App.DB.Model(&model.Sim_traffic{}). Select("sim_data_plan_id"). Where("id = ?", param.PackageId). First(&SimDataPlanId).Error; err != nil { c.Error(errors.New("fail")) return } // 给卡绑定套餐 if err := global.App.DB.Model(&model.Sim_card{}). Where("iccid = ?", param.Iccid). Update("tariff_id", param.PackageId).Error; err != nil { c.Error(errors.New("fail")) return } productId, _ := strconv.Atoi(SimDataPlanId) // 绑定成功后进行订购 sim.RechargeCard("grace", grace.RechargeSimPackage{ Iccid: param.Iccid, Type: "1", ProductId: productId, Num: "1", }) c.Set("res_data", "success") } // CDR 统计 func SimCDR(c *gin.Context) { type Param struct { ICCID string `json:"iccid" validate:"required"` // 卡ID StartDate string `json:"startDate" validate:"required"` // 开始日期:如 2024-09-29 EndDate string `json:"endDate" validate:"required"` // 结束日期:如 2024-09-29 } var param Param if err := c.ShouldBindJSON(¶m); err != nil { c.Error(errors.New("缺少参数:" + err.Error())) return } err := utils.ValidateStruct(param) if err != nil { c.Error(err) return } data, err := sim.GetSimCdr("grace", param.ICCID, param.StartDate, param.EndDate) if err != nil { c.Error(err) return } raw := gjson.GetBytes(data.Bytes(), "items") var responses []map[string]interface{} for _, v := range raw.Array() { responses = append(responses, map[string]interface{}{ "iccid": v.Get("account").String(), "date": v.Get("date").String(), "usage": v.Get("usage").Int(), "imsi": v.Get("imsi").String(), }) } c.Set("res_data", responses) }