simCardManage.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. package acceleronix
  2. import (
  3. "encoding/json"
  4. "go.uber.org/zap"
  5. )
  6. // SIM卡状态
  7. type AcceleronixSimCardState int
  8. const (
  9. SCS_PreActivation AcceleronixSimCardState = iota + 2 // 2 预激活
  10. SCS_Test // 3 测试
  11. SCS_Silence // 4 沉默
  12. SCS_Standby // 5 待机
  13. SCS_Activated // 6 激活
  14. SCS_Deactivated // 7 停机
  15. SCS_Pause // 8 暂停
  16. SCS_PreCancellation // 9 预注销
  17. SCS_Cancellation // 10 注销
  18. )
  19. // 查询SIM列表 - 请求结构体
  20. type AcceleronixSimCardListRequestBody struct {
  21. EnterpriseCode *string `json:"enterpriseCode,omitempty"` // 企业编码
  22. EnterpriseDataPlan *string `json:"enterpriseDataPlan,omitempty"` // 企业资费计划名称
  23. ExpirationTimeEnd *string `json:"expirationTimeEnd,omitempty"` // 支持到期时间区间段查询,这里指截止到期时间 格式:yyyy-MM-dd
  24. ExpirationTimeStart *string `json:"expirationTimeStart,omitempty"` // 支持到期时间区间段查询,这里指起始到期时间 格式:yyyy-MM-dd
  25. IccidEnd *string `json:"iccidEnd,omitempty"` // 支持ICCID号段查询,这里指ICCID截止号码
  26. IccidStart *string `json:"iccidStart,omitempty"` // 支持ICCID号段查询,这里指ICCID起始号码
  27. Label *string `json:"label,omitempty"` // 标签
  28. PageNum uint `json:"pageNum"` // 页码 默认值:1
  29. PageSize uint `json:"pageSize"` // 每页记录数 默认值:10 最大值:1000
  30. SimState *AcceleronixSimCardState `json:"simState,omitempty"` // 卡状态 AcceleronixSimCardState
  31. SimType *string `json:"simType,omitempty"` // 卡类型
  32. }
  33. // 查询SIM列表 - 响应
  34. type AcceleronixSimCardListResponse struct {
  35. Code int `json:"code"` // 响应码
  36. Data struct {
  37. Current int64 `json:"current"` // 当前页码
  38. List []struct {
  39. ActivationTime string `json:"activationTime"` // 激活时间 格式:yyyy-MM-ddd
  40. Enterprise string `json:"enterprise"` // 归属企业
  41. EnterpriseDataPlan string `json:"enterpriseDataPlan"` // 企业资费计划
  42. ExpirationTime string `json:"expirationTime"` // 到期时间 格式:yyyy-MM-dd
  43. Iccid string `json:"iccid"` // ICCID
  44. Imei string `json:"imei"` // IMEI
  45. Imsi string `json:"imsi"` // IMSI
  46. InitialTime string `json:"initialTime"` // 开卡时间 格式:yyyy-MM-dd
  47. Label string `json:"label"` // 标签,多个标签时逗号隔开
  48. Msisdn string `json:"msisdn"` // MSISDN
  49. NetworkType string `json:"networkType"` // 网络制式 1:ALL 2:Cat-M 3:LTE-M
  50. SimId string `json:"simId"` // SIM ID
  51. SimState AcceleronixSimCardState `json:"simState"` // 卡状态 AcceleronixSimCardState
  52. SimStateChangeReason string `json:"simStateChangeReason"` // 卡状态变更原因
  53. SimType string `json:"simType"` // 卡类型
  54. } `json:"list"` // 数据集合
  55. Pages int64 `json:"pages"` // 总页码
  56. Size int64 `json:"size"` // 每页数量
  57. Total int64 `json:"total"` // 总条数
  58. } `json:"data"` // 响应体
  59. Msg string `json:"msg"` // 响应描述
  60. ReqId string `json:"reqId"`
  61. }
  62. // 查询SIM卡详情 - 响应
  63. type AcceleronixSimCardInfoResponse struct {
  64. Code int `json:"code"` // 响应码
  65. Data struct {
  66. ActivationTime string `json:"activationTime"` // 激活时间 格式:yyyy-MM-dd
  67. Apn string `json:"apn"` // APN
  68. CountryRegion string `json:"countryRegion"` // 所在国家/地区
  69. Enterprise string `json:"enterprise"` // 归属企业
  70. EnterpriseDataPlan string `json:"enterpriseDataPlan"` // 企业资费计划
  71. EnterpriseDataPlanCode string `json:"enterpriseDataPlanCode"` // 计划编码
  72. ExpirationTime string `json:"expirationTime"` // 到期时间 格式:yyyy-MM-dd
  73. FirstActivationCdrTime string `json:"firstActivationCdrTime"` // 激活首次使用时间,格式yyyy-MM-dd
  74. Iccid string `json:"iccid"` // ICCID
  75. Imei string `json:"imei"` // IMEI
  76. Imsi string `json:"imsi"` // IMSI
  77. InitialTime string `json:"initialTime"` // 开卡时间 格式:yyyy-MM-dd
  78. Label string `json:"label"` // 标签
  79. LastSessionTime string `json:"lastSessionTime"` // 上次会话时间 格式:yyyy-MM-dd HH:mm:ss
  80. Msisdn string `json:"msisdn"` // MSISDN
  81. NetCommStatus int32 `json:"netCommStatus"` // 网络通讯状态:0:关闭 1:开启
  82. NetworkType string `json:"networkType"` // 网络制式
  83. OperatorNetwork string `json:"operatorNetwork"` // 所在运营商网络
  84. Rat string `json:"rat"` // RAT
  85. SimId string `json:"simId"` // SIM ID
  86. SimState AcceleronixSimCardState `json:"simState"` // 卡状态 AcceleronixSimCardState
  87. SimStateChangeReason string `json:"simStateChangeReason"` // 卡状态变更原因
  88. SimType string `json:"simType"` // 卡类型
  89. UsedDataOfCurrentPeriod int64 `json:"usedDataOfCurrentPeriod"` // 当前周期数据用量(B)
  90. } `json:"data"` // 响应体
  91. Msg string `json:"msg"` // 响应描述
  92. ReqId string `json:"reqId"`
  93. }
  94. // 批量查询SIM卡流量 - 请求结构体
  95. type AcceleronixBatchDataUsageRequestBody struct {
  96. Iccids []string `json:"iccids"` // ICCID 最多支持100张卡批量操作
  97. Month string `json:"month"` // 统计月份,yyyyMM 日期格式化字符串
  98. }
  99. // 批量查询SIM卡流量 - 响应
  100. type AcceleronixSimCardDataUsageInfoResponse struct {
  101. DataUsageDetails []struct {
  102. DataAllowance string `json:"dataAllowance"` // 总流量 单位:MB
  103. DataUsage string `json:"dataUsage"` // 已用流量 单位:MB
  104. OrderName string `json:"orderName"` // 订购名
  105. OutsideRegionDataUsage string `json:"outsideRegionDataUsage"` // 超区流量 单位:MB
  106. Type int32 `json:"type"` // 流量类型 1:激活期资费套餐 2:测试期资费套餐 3:流量包
  107. } `json:"dataUsageDetails"` // 流量详细
  108. Iccid string `json:"iccid"` // ICCID
  109. Month string `json:"month"` // 统计月份 格式:yyyyMM
  110. OutsideRegionDataUsage string `json:"outsideRegionDataUsage"` // 超区流量 单位:MB
  111. RemainingData string `json:"remainingData"` // 剩余流量(若无使用上限,剩余流量也为0) 单位:MB
  112. TotalDataAllowance string `json:"totalDataAllowance"` // 总流量 单位:MB
  113. TotalDataUsage string `json:"totalDataUsage"` // 已用流量 单位:MB
  114. }
  115. // 查询流量池列表 - 请求结构体
  116. type AcceleronixDataPoolListRequestBody struct {
  117. EnterpriseCode *string `json:"enterpriseCode,omitempty"` // 企业编码。默认查询范围:本企业。可通过“子企业编码”查询子企业流量池
  118. DataPoolId *string `json:"dataPoolId"` // 流量池ID
  119. PageNum uint `json:"pageNum"` // 页码 默认值:1
  120. PageSize uint `json:"pageSize"` // 每页记录数 默认值:10 最大值:1000
  121. }
  122. // 查询流量池列表 - 响应
  123. type AcceleronixDataPoolListResponse struct {
  124. Code int `json:"code"` // 响应码
  125. Data struct {
  126. Current int64 `json:"current"` // 当前页码
  127. List []struct {
  128. DataPlanAllowance string `json:"dataPlanAllowance"` // 资费计划额度(MB)
  129. DataPoolId string `json:"dataPoolId"` // 流量池ID
  130. DataPoolName string `json:"dataPoolName"` // 流量池名称
  131. DataUsage float32 `json:"dataUsage"` // 数据用量(MB)
  132. EffectiveSims int64 `json:"effectiveSims"` // 生效SIM数
  133. EnterpriseName string `json:"enterpriseName"` // 企业名称
  134. Excessive float32 `json:"excessive"` // 超池用量(MB)
  135. RemainingData float32 `json:"remainingData"` // 剩余用量(MB)
  136. RemainingPercentage float32 `json:"remainingPercentage"` // 剩余百分比(%)
  137. TotalData float32 `json:"totalData"` // 池总量(MB)
  138. TotalSims int64 `json:"totalSims"` // 总SIM数
  139. TotalVolume float32 `json:"totalVolume"` // 流量包总量(MB)
  140. UsedSms int64 `json:"usedSms"` // 短信用量(条)
  141. } `json:"list"` // 数据集合
  142. Pages int64 `json:"pages"` // 总页码
  143. Size int64 `json:"size"` // 每页数量
  144. Total int64 `json:"total"` // 总条数
  145. } `json:"data"` // 响应体
  146. Msg string `json:"msg"` // 响应描述
  147. ReqId string `json:"reqId"`
  148. }
  149. // 查询流量池SIM详情 - 响应
  150. type AcceleronixDataPoolSimInfoResponse struct {
  151. Code int `json:"code"` // 响应码
  152. Data struct {
  153. Current int64 `json:"current"` // 当前页码
  154. List []struct {
  155. DataSharingState int32 `json:"dataSharingState"` // 数据共享状态 0:未生效 1:生效
  156. DataUsage float32 `json:"dataUsage"` // 当月数据用量(MB)
  157. EffectiveTime string `json:"effectiveTime"` // 生效时间 格式:yyyy-MM-dd HH:mm:ss
  158. EnterpriseDataPlan string `json:"enterpriseDataPlan"` // 企业资费计划
  159. EnterpriseDataPlanCode string `json:"enterpriseDataPlanCode"` // 企业资费计划编码
  160. EstimatedExpirationTime string `json:"estimatedExpirationTime"` // 预计失效时间 格式:yyyy-MM-dd HH:mm:ss
  161. Iccid string `json:"iccid"` // ICCID
  162. PoolInTime string `json:"poolInTime"` // 入池时间 格式:yyyy-MM-dd HH:mm:ss
  163. SimState AcceleronixSimCardState `json:"simState"` // 卡状态 AcceleronixSimCardState
  164. UsedSms float32 `json:"usedSms"` // 当月短信用量(条)
  165. } `json:"list"` // 数据集合
  166. Pages int64 `json:"pages"` // 总页码
  167. Size int64 `json:"size"` // 每页数量
  168. Total int64 `json:"total"` // 总条数
  169. } `json:"data"` // 响应体
  170. Msg string `json:"msg"` // 响应描述
  171. ReqId string `json:"reqId"`
  172. }
  173. // 查询SIM卡列表
  174. func QuerySimCardList(page uint, size uint) (*AcceleronixSimCardListResponse, error) {
  175. res, err := acceleronixHttpPost("/sim/page", AcceleronixSimCardListRequestBody{
  176. PageNum: page,
  177. PageSize: size,
  178. })
  179. if err != nil {
  180. zap.L().Error("QuerySimCardList failed.", zap.String("err", err.Error()))
  181. return nil, err
  182. }
  183. var resList AcceleronixSimCardListResponse
  184. if err := json.Unmarshal(res.Body, &resList); err != nil {
  185. return nil, err
  186. }
  187. return &resList, nil
  188. }
  189. // 查询SIM卡详情
  190. func QuerySimCardInfo(iccid string) (*AcceleronixSimCardInfoResponse, error) {
  191. res, err := acceleronixHttpPost("/sim/detail", map[string]interface{}{
  192. "iccid": iccid,
  193. })
  194. if err != nil {
  195. zap.L().Error("QuerySimCardInfo failed.", zap.String("err", err.Error()))
  196. return nil, err
  197. }
  198. var resInfo AcceleronixSimCardInfoResponse
  199. if err := json.Unmarshal(res.Body, &resInfo); err != nil {
  200. return nil, err
  201. }
  202. return &resInfo, nil
  203. }
  204. // 批量获取SIM卡数据用量信息
  205. // month 格式YYYYMM exp.202301
  206. func QueryBatchSimCardDataInfo(iccidList []string, month string) ([]AcceleronixSimCardDataUsageInfoResponse, error) {
  207. res, err := acceleronixHttpPost("/sim/batchQueryMonthData", AcceleronixBatchDataUsageRequestBody{
  208. Iccids: iccidList,
  209. Month: month,
  210. })
  211. if err != nil {
  212. zap.L().Error("QueryBatchSimCardDataInfo failed.", zap.String("err", err.Error()))
  213. return nil, err
  214. }
  215. var resList []AcceleronixSimCardDataUsageInfoResponse
  216. if err := json.Unmarshal(res.Body, &resList); err != nil {
  217. return nil, err
  218. }
  219. return resList, nil
  220. }
  221. // 查询流量池列表
  222. func QueryDataPoolList(page uint, size uint) (*AcceleronixDataPoolListResponse, error) {
  223. res, err := acceleronixHttpPost("/dataPool/page", AcceleronixDataPoolListRequestBody{
  224. PageNum: page,
  225. PageSize: size,
  226. })
  227. if err != nil {
  228. zap.L().Error("QueryDataPoolList failed.", zap.String("err", err.Error()))
  229. return nil, err
  230. }
  231. var resList AcceleronixDataPoolListResponse
  232. if err := json.Unmarshal(res.Body, &resList); err != nil {
  233. return nil, err
  234. }
  235. return &resList, nil
  236. }
  237. // 查询流量池SIM详情
  238. func QueryDataPoolSimInfo(dataPoolId string, page uint, size uint) (*AcceleronixDataPoolSimInfoResponse, error) {
  239. res, err := acceleronixHttpPost("/dataPool/detail", map[string]interface{}{
  240. "dataPoolId": dataPoolId,
  241. "pageNum": page,
  242. "pageSize": size,
  243. })
  244. if err != nil {
  245. zap.L().Error("QueryDataPoolSimInfo failed.", zap.String("err", err.Error()))
  246. return nil, err
  247. }
  248. var resInfo AcceleronixDataPoolSimInfoResponse
  249. if err := json.Unmarshal(res.Body, &resInfo); err != nil {
  250. return nil, err
  251. }
  252. return &resInfo, nil
  253. }