123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- 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)
- }
|