Commit 4caf690d by zhangjiec

1

parent 426ff5de
package api_we
import (
"dc_golang_server_1/api"
"dc_golang_server_1/data_db_cache/cache"
"dc_golang_server_1/data_db_cache/dbcurd"
"dc_golang_server_1/data_db_cache/model"
"dc_golang_server_1/logger"
"fmt"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
"net/http"
"strconv"
)
// AddFamilyNum 添加亲情号
// @Tags 家长微信
// @Summary 添加亲情号 [complete]
// @Description 家长绑定亲情号接口
// @Accept json
// @Produce json
// @Param id path integer true "学生ID"
// @Param data body model.CacheFamilyOnePerson true "亲情号内容"
// @Success 0
// @Router /we/familynum/{id} [POST]
// @Security ApiKeyAuth
func AddFamilyNum(c *gin.Context) {
var reqData model.CacheFamilyOnePerson
err := c.ShouldBindJSON(&reqData)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorReqParaFormat,
"message": api.CodeMsg[api.ErrorReqParaFormat],
})
return
}
if len(reqData.Phone) < 3 || len(reqData.Nickname) == 0 {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorReqPara,
"message": api.CodeMsg[api.ErrorReqPara],
})
return
}
cardUserIDInt, _ := strconv.ParseUint(c.Param("id"), 10, 32)
cardUserID := uint32(cardUserIDInt)
if cardUserID == 0 {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorReqPara,
"message": api.CodeMsg[api.ErrorReqPara] + " id不正确",
})
return
}
// 取微信用户
v, ok := c.Get("userID")
weUserID := v.(uint32)
if ok != true || weUserID == 0 {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorSystemErr,
"data": api.CodeMsg[api.ErrorSystemErr],
})
logger.Log.Error("AddFamilyNum",
zap.Reflect("c.Get(\"userID\")", v))
return
}
// 校验weUserID是否有cardUserID权限
cardUserInfo, r := cache.GetCardUserInfoAndCheckCardUserMaserAndSlaveWeID(cardUserID, weUserID)
if r < 2 {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorUserRole,
"data": api.CodeMsg[api.ErrorUserRole],
})
return
}
if cardUserInfo.SimCardID == "" { // 学生未绑卡
c.JSON(
http.StatusOK,
gin.H{
"code": api.ErrorUserNotHavePhoneCard,
"data": api.CodeMsg[api.ErrorUserNotHavePhoneCard] + ",请先绑定共话卡",
},
)
return
}
// 查卡的信息
simInfoP := cache.GetSimInfo(cardUserInfo.SimCardID)
if simInfoP == nil {
fmt.Println("居然查不到卡信息 cardUserInfo.SimCardID:", cardUserInfo.SimCardID)
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorSystemErr,
"message": api.CodeMsg[api.ErrorSystemErr] + "查不到sim卡信息",
})
return
}
if len(simInfoP.FamilyNum) > 2 {
fmt.Println("居然已经>=3个号了还在添加", cardUserInfo.SimCardID, simInfoP)
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorReqPara,
"message": "一张卡最多可绑定3个亲情号码,请删除一个已有的再添加",
})
return
}
// 判断亲情号是否重复
for _, family := range simInfoP.FamilyNum {
if family.Phone == reqData.Phone {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorReqPara,
"message": family.Phone + "已绑定亲情号:" + family.Nickname,
})
return
}
}
// 找移动添加亲情号 todo
// 写库
if dbcurd.InsertUSimFamilyNum(cardUserInfo.SimCardID, reqData.Phone, reqData.Nickname) == dbcurd.InsertSysErr {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorSystemBusy,
"message": api.CodeMsg[api.ErrorSystemBusy],
})
return
}
// 写缓存
simInfoP.FamilyNum = append(simInfoP.FamilyNum, reqData) // 并发不安全
cache.SimInfoMap.Store(cardUserInfo.SimCardID, *simInfoP)
c.JSON(http.StatusOK, gin.H{
"code": api.Success,
})
}
package api_we
import (
"dc_golang_server_1/api"
"dc_golang_server_1/data_db_cache/cache"
"dc_golang_server_1/data_db_cache/dbcurd"
"dc_golang_server_1/logger"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
"net/http"
"strconv"
)
type apiDeleteSlaveWeUserStruct struct {
WeUserID uint32 `json:"weUserID"` // 必填,副家长的id
}
// DeleteSlaveWeUser 删除副家长(仅主家长有权限)
// @Tags 家长微信
// @Summary 删除副家长(仅主家长有权限) [complete]
// @Description 传学生ID和微信UnionID,后台返回成功失败
// @Produce json
// @Param id path integer true "学生ID"
// @Param weUserID body apiDeleteSlaveWeUserStruct true "副家长微信weUserID"
// @Success 0
// @Router /we/slaveweuser/{id} [DELETE]
// @Security ApiKeyAuth
func DeleteSlaveWeUser(c *gin.Context) {
cardUserIDInt, _ := strconv.ParseUint(c.Param("id"), 10, 32)
cardUserID := uint32(cardUserIDInt)
if cardUserID == 0 {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorReqPara,
"message": api.CodeMsg[api.ErrorReqPara] + " id不正确",
})
return
}
// 取微信用户
v, ok := c.Get("userID")
masterWeUserID := v.(uint32)
if ok != true || masterWeUserID == 0 {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorSystemErr,
"data": api.CodeMsg[api.ErrorSystemErr],
})
logger.Log.Error("DeleteSlaveBindCardUser",
zap.Reflect("c.Get(\"userID\")", v))
return
}
// 校验weUserID是否有cardUserID权限
if cache.CheckCardUserMaserAndSlaveWeID(cardUserID, masterWeUserID) != 2 {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorUserRole,
"data": api.CodeMsg[api.ErrorUserRole],
})
return
}
var reqData apiDeleteSlaveWeUserStruct
err := c.ShouldBindJSON(&reqData)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorReqParaFormat,
"message": api.CodeMsg[api.ErrorReqParaFormat],
})
return
}
if reqData.WeUserID == 0 {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorReqPara,
"message": api.CodeMsg[api.ErrorReqPara] + "副家长ID不正确",
})
return
}
if dbcurd.UpdateUWeCardUserDeleteAt(reqData.WeUserID, cardUserID) == false {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorSystemBusy,
"data": api.CodeMsg[api.ErrorSystemBusy],
})
}
cache.DeleteAStudentIDInWechatCustomerMap(reqData.WeUserID, cardUserID, false)
cache.DeleteASlaveWeUserIDInCardUserMap(reqData.WeUserID, cardUserID)
c.JSON(http.StatusOK, gin.H{
"code": api.Success,
})
}
package api_we
import (
"dc_golang_server_1/api"
"dc_golang_server_1/data_db_cache/cache"
"dc_golang_server_1/util"
"github.com/gin-gonic/gin"
"net/http"
"time"
)
type getPreviewCardUserStruct struct {
Name string `json:"name"` // 学生名字,脱敏显示
Area string `json:"area" example:"温江实验中学"` // 区域名字
}
// GetPreviewCardUser 通过邀请码获取学生预览信息
// @Tags 家长微信
// @Summary 通过邀请码获取学生预览信息 [complete]
// @Description 传学生的邀请码,后台返回学生信息预览
// @Produce json
// @Param share_code path string true "学生的邀请码"
// @Success 0 {object} getPreviewCardUserStruct "学生信息预览"
// @Failure 30 "邀请码无效"
// @Failure 31 "邀请码已过期"
// @Router /we/previewcarduser/{share_code} [GET]
// @Security ApiKeyAuth
func GetPreviewCardUser(c *gin.Context) {
str := c.Param("share_code")
if len(str) != 16 {
// todo logger 有人在非法请求
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorShareCode,
"message": api.CodeMsg[api.ErrorShareCode],
})
return
}
clear, err := util.DecryptBase64URLToBytes(str, "Password88OhYeah")
if err != nil {
// todo logger 有人在非法请求
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorShareCode,
"message": api.CodeMsg[api.ErrorShareCode],
})
return
}
if len(clear) != 11 {
// todo logger 有人在非法请求
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorShareCode,
"message": api.CodeMsg[api.ErrorShareCode],
})
return
}
clear[9] += clear[2]
clear[10] -= clear[2]
if util.CheckCRC(clear) == false {
// todo logger 有人在非法请求
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorShareCode,
"message": api.CodeMsg[api.ErrorShareCode],
})
return
}
//clear[5] = byte(eTime)
//clear[1] = byte(eTime >> 8)
//clear[0] = byte(eTime >> 16)
//clear[3] = byte(eTime >> 24)
//clear[7] = byte(cardUserID)
//clear[4] = byte(cardUserID >> 8)
//clear[6] = byte(cardUserID >> 16)
//clear[8] = byte(cardUserID >> 24)
eTime := uint32(clear[5]) + (uint32(clear[1]) << 8) + (uint32(clear[0]) << 16) + (uint32(clear[3]) << 24)
if eTime < uint32(time.Now().Unix()) {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorShareCodeRunTime,
"message": api.CodeMsg[api.ErrorShareCodeRunTime],
})
return
}
cardUserID := uint32(clear[7]) + (uint32(clear[4]) << 8) + (uint32(clear[6]) << 16) + (uint32(clear[8]) << 24)
if cardUserID == 0 {
// todo logger 有人在非法请求
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorShareCode,
"message": api.CodeMsg[api.ErrorShareCode],
})
return
}
cardUserInfo := cache.GetCardUserInfo(cardUserID)
if cardUserInfo == nil {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorShareCode,
"message": api.CodeMsg[api.ErrorShareCode] + "未查到学生信息",
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": api.Success,
"data": getPreviewCardUserStruct{
cardUserInfo.Name,
cache.GetAreaMapName(cardUserInfo.AreaID, true),
},
})
}
package api_we
import (
"dc_golang_server_1/api"
"dc_golang_server_1/data_db_cache/cache"
"dc_golang_server_1/logger"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
"net/http"
)
type WeResUserInfoStruct struct {
ID uint32 `json:"id"` // 学生ID
Name string `json:"name"`
Sex uint8 `json:"sex"` // 0无意义 1女 2男
Area string `json:"area" example:"温江实验中学"` // 区域名字
Grade int8 `json:"grade"` // 0无意义 "1~9对应一年级~九年级,10~12对应高一~高三"
Class int8 `json:"class"` // 0无意义
StuNum string `json:"stuNum"` // ""无意义
// Service [6]uint8 `json:"service" example:"1,2,2,0,0,0"` // 对应6个数字对应公话、定位、饮水、卡消费、洗浴、洗衣机图标(0不显示,1正常,2显示但提示校区暂未开通该服务)
// TopUp bool `json:"topUp"` // 是否已充值(已充值则不能删除,未充值可以删除)
}
type weUserListStruct struct {
Master []WeResUserInfoStruct `json:"master"` // 自己创建的学生列表(主家长)
Slave []WeResUserInfoStruct `json:"slave"` // 添加的学生列表(副家长)
}
// GetStudentList 获取学生列表
// @Tags 家长微信
// @Summary 获取学生列表 [complete]
// @Description 获取学生列表
// @Product json
// @Success 0 {object} weUserListStruct
// @Router /we/stulist [GET]
// @Security ApiKeyAuth
func GetStudentList(c *gin.Context) {
v, ok := c.Get("userID")
userID := v.(uint32)
if ok != true || userID == 0 {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorSystemErr,
"data": api.CodeMsg[api.ErrorSystemErr],
})
logger.Log.Error("GetStudentList",
zap.Reflect("c.Get(\"userID\")", v))
return
}
userInfo := cache.GetWeUserInfoFromMapAndDB(userID)
if userInfo == nil { // 微信服务器登录
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorSystemErr,
"message": api.CodeMsg[api.ErrorSystemErr],
})
return
}
var res weUserListStruct
for _, cardUserID := range userInfo.MasterCardUserID {
cardUserInfo := cache.GetCardUserInfo(cardUserID)
if cardUserInfo != nil {
res.Master = append(res.Master, WeResUserInfoStruct{
cardUserID,
cardUserInfo.Name,
cardUserInfo.Sex,
cache.GetAreaMapName(cardUserInfo.AreaID, userInfo.TestRole),
cardUserInfo.Grade,
cardUserInfo.Class,
cardUserInfo.StuNum,
})
}
}
for _, cardUserID := range userInfo.SlaveCardUserID {
cardUserInfo := cache.GetCardUserInfo(cardUserID)
if cardUserInfo != nil {
res.Slave = append(res.Slave, WeResUserInfoStruct{
cardUserID,
cardUserInfo.Name,
cardUserInfo.Sex,
cache.GetAreaMapName(cardUserInfo.AreaID, userInfo.TestRole),
cardUserInfo.Grade,
cardUserInfo.Class,
cardUserInfo.StuNum,
})
}
}
c.JSON(http.StatusOK, gin.H{
"code": api.Success,
"data": res,
})
}
package api_we
import (
"dc_golang_server_1/api"
"dc_golang_server_1/data_db_cache/cache"
"dc_golang_server_1/data_db_cache/dbcurd"
"dc_golang_server_1/data_db_cache/model"
"dc_golang_server_1/logger"
"fmt"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
"net/http"
"strconv"
)
// PutFamilyNickName 修改亲情号的昵称
// @Tags 家长微信
// @Summary 修改亲情号的昵称(注:号码本身不可修改,只能删除和添加) [complete]
// @Description 修改亲情号接口
// @Accept json
// @Produce json
// @Param id path integer true "学生ID"
// @Param data body model.CacheFamilyOnePerson true "亲情号内容"
// @Success 0
// @Router /we/familynickname/{id} [PUT]
// @Security ApiKeyAuth
func PutFamilyNickName(c *gin.Context) {
cardUserIDInt, _ := strconv.ParseUint(c.Param("id"), 10, 32)
cardUserID := uint32(cardUserIDInt)
if cardUserID == 0 {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorReqPara,
"message": api.CodeMsg[api.ErrorReqPara] + " id不正确",
})
return
}
// 取微信用户
v, ok := c.Get("userID")
weUserID := v.(uint32)
if ok != true || weUserID == 0 {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorSystemErr,
"data": api.CodeMsg[api.ErrorSystemErr],
})
logger.Log.Error("PutFamilyNickName",
zap.Reflect("c.Get(\"userID\")", v))
return
}
// 校验weUserID是否有cardUserID权限
cardUserInfo, r := cache.GetCardUserInfoAndCheckCardUserMaserAndSlaveWeID(cardUserID, weUserID)
if r < 2 {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorUserRole,
"data": api.CodeMsg[api.ErrorUserRole],
})
return
}
if cardUserInfo.SimCardID == "" { // 学生未绑卡
c.JSON(
http.StatusOK,
gin.H{
"code": api.ErrorUserNotHavePhoneCard,
"data": api.CodeMsg[api.ErrorUserNotHavePhoneCard] + ",请先绑定共话卡",
},
)
return
}
// 查卡的信息
simInfoP := cache.GetSimInfo(cardUserInfo.SimCardID)
if simInfoP == nil {
fmt.Println("居然查不到卡信息 cardUserInfo.SimCardID:", cardUserInfo.SimCardID)
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorSystemErr,
"message": api.CodeMsg[api.ErrorSystemErr] + "查不到sim卡信息",
})
return
}
var reqData model.CacheFamilyOnePerson
err := c.ShouldBindJSON(&reqData)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorReqParaFormat,
"message": api.CodeMsg[api.ErrorReqParaFormat],
})
return
}
if len(reqData.Nickname) == 0 {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorReqPara,
"message": api.CodeMsg[api.ErrorReqPara] + " 昵称不能为空",
})
return
}
for i, family := range simInfoP.FamilyNum {
if family.Phone == reqData.Phone {
// 写库
if dbcurd.UpdateUSimFamilyNumNickname(cardUserInfo.SimCardID, reqData.Phone, reqData.Nickname) == false {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorSystemBusy,
"message": api.CodeMsg[api.ErrorSystemBusy] + "更新数据失败",
})
return
}
family.Nickname = reqData.Nickname
simInfoP.FamilyNum[i] = family
cache.SimInfoMap.Store(cardUserInfo.SimCardID, *simInfoP)
c.JSON(http.StatusOK, gin.H{
"code": api.Success,
})
return
}
}
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorReqPara,
"message": api.CodeMsg[api.ErrorReqPara] + "未找到号码" + reqData.Phone,
})
}
package api_we
import (
"dc_golang_server_1/api"
"dc_golang_server_1/data_db_cache/cache"
"dc_golang_server_1/data_db_cache/dbcurd"
"dc_golang_server_1/logger"
"dc_golang_server_1/util"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
"net/http"
"time"
)
type BindCardUserRes struct {
GetCardUserAndTrendRes
Master bool `json:"master" example:"false"` //true:本来就是主家长,false:已成功绑定成副家长
}
// SlaveBindCardUser 通过邀请码绑定学生
// @Tags 家长微信
// @Summary 通过邀请码绑定学生 [complete]
// @Description 传学生的邀请码,后台返回学生信息
// @Produce json
// @Param share_code path string true "学生的邀请码"
// @Success 0 {object} BindCardUserRes "学生信息"
// @Failure 30 "邀请码无效"
// @Failure 31 "邀请码已过期"
// @Router /we/bindcarduser/{share_code} [POST]
// @Security ApiKeyAuth
func SlaveBindCardUser(c *gin.Context) {
str := c.Param("share_code")
if len(str) != 16 {
// todo logger 有人在非法请求
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorShareCode,
"message": api.CodeMsg[api.ErrorShareCode],
})
return
}
clear, err := util.DecryptBase64URLToBytes(str, "Password88OhYeah")
if err != nil {
// todo logger 有人在非法请求
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorShareCode,
"message": api.CodeMsg[api.ErrorShareCode],
})
return
}
if len(clear) != 11 {
// todo logger 有人在非法请求
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorShareCode,
"message": api.CodeMsg[api.ErrorShareCode],
})
return
}
clear[9] += clear[2]
clear[10] -= clear[2]
if util.CheckCRC(clear) == false {
// todo logger 有人在非法请求
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorShareCode,
"message": api.CodeMsg[api.ErrorShareCode],
})
return
}
//clear[5] = byte(eTime)
//clear[1] = byte(eTime >> 8)
//clear[0] = byte(eTime >> 16)
//clear[3] = byte(eTime >> 24)
//clear[7] = byte(cardUserID)
//clear[4] = byte(cardUserID >> 8)
//clear[6] = byte(cardUserID >> 16)
//clear[8] = byte(cardUserID >> 24)
eTime := uint32(clear[5]) + (uint32(clear[1]) << 8) + (uint32(clear[0]) << 16) + (uint32(clear[3]) << 24)
if eTime < uint32(time.Now().Unix()) {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorShareCodeRunTime,
"message": api.CodeMsg[api.ErrorShareCodeRunTime],
})
return
}
cardUserID := uint32(clear[7]) + (uint32(clear[4]) << 8) + (uint32(clear[6]) << 16) + (uint32(clear[8]) << 24)
if cardUserID == 0 {
// todo logger 有人在非法请求
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorShareCode,
"message": api.CodeMsg[api.ErrorShareCode],
})
return
}
cardUserInfo := cache.GetCardUserInfo(cardUserID)
if cardUserInfo == nil {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorShareCode,
"message": api.CodeMsg[api.ErrorShareCode],
})
return
}
// 取微信用户
v, ok := c.Get("userID")
weUserID := v.(uint32)
if ok != true || weUserID == 0 {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorSystemErr,
"data": api.CodeMsg[api.ErrorSystemErr],
})
logger.Log.Error("SlaveBindCardUser",
zap.Reflect("c.Get(\"userID\")", v))
return
}
if cardUserInfo.MasterWechatUserID == weUserID { // 本来就是主家长
c.JSON(http.StatusOK, gin.H{
"code": api.Success,
"data": BindCardUserRes{
Master: true,
GetCardUserAndTrendRes: GetCardUserAndTrendRes{
WeResUserInfoStruct: WeResUserInfoStruct{
ID: cardUserID,
Name: cardUserInfo.Name,
Sex: cardUserInfo.Sex,
Grade: cardUserInfo.Grade,
Class: cardUserInfo.Class,
StuNum: cardUserInfo.StuNum,
},
Service: [6]uint8{1, 2, 2, 2, 2, 2},
Trend: cache.GetCardUserTrendMapByCardUserID(cardUserID),
},
},
})
return
}
for _, slave := range cardUserInfo.SlaveWechatUserID {
if weUserID == slave { // 本来就是副家长
c.JSON(http.StatusOK, gin.H{
"code": api.Success,
"data": BindCardUserRes{
Master: false,
GetCardUserAndTrendRes: GetCardUserAndTrendRes{
WeResUserInfoStruct: WeResUserInfoStruct{
ID: cardUserID,
Name: cardUserInfo.Name,
Sex: cardUserInfo.Sex,
Grade: cardUserInfo.Grade,
Class: cardUserInfo.Class,
StuNum: cardUserInfo.StuNum,
},
Service: [6]uint8{1, 2, 2, 2, 2, 2},
Trend: cache.GetCardUserTrendMapByCardUserID(cardUserID),
},
},
})
return
}
}
// 存数据库
if dbcurd.InsertOrUpdateUWeCardUserSlave(weUserID, cardUserID) == false {
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorSystemBusy,
"data": api.CodeMsg[api.ErrorSystemBusy],
})
return
}
// 存缓存
cache.InsertNewStudentIDToWechatCustomerMap(weUserID, cardUserID, false)
cache.InsertWechatAndCardUserRelationToCardUserMap(weUserID, cardUserID, false) // todo 这里可优化
cardUserInfo = cache.GetCardUserInfo(cardUserID) // todo 这里可优化
if cardUserInfo == nil { // 刚才都有,在就没有了呢
logger.Log.Error("SlaveBindCardUser cache.GetCardUserInfo(cardUserID) 突然没有了",
zap.Uint32("cardUserID", cardUserID),
zap.Uint32("weUserID", weUserID))
c.JSON(http.StatusOK, gin.H{
"code": api.ErrorSystemErr,
"message": api.CodeMsg[api.ErrorSystemErr],
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": api.Success,
"data": BindCardUserRes{
Master: false,
GetCardUserAndTrendRes: GetCardUserAndTrendRes{
WeResUserInfoStruct: WeResUserInfoStruct{
cardUserID,
cardUserInfo.Name,
cardUserInfo.Sex,
cache.GetAreaMapName(cardUserInfo.AreaID, true),
cardUserInfo.Grade,
cardUserInfo.Class,
cardUserInfo.StuNum,
},
Service: [6]uint8{1, 2, 2, 2, 2, 2},
Trend: cache.GetCardUserTrendMapByCardUserID(cardUserID),
},
},
})
}
{"level":"INFO","ts":"2021-10-29 15:37:55.856","msg":"","Status":200,"SpendMS":1,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/index.html","DataSize":3511,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 15:37:56.121","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/swagger-ui.css","DataSize":143669,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 15:37:56.125","msg":"","Status":200,"SpendMS":3,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/swagger-ui-bundle.js","DataSize":1091405,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 15:37:56.126","msg":"","Status":200,"SpendMS":1,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/swagger-ui-standalone-preset.js","DataSize":337216,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 15:37:56.607","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/doc.json","DataSize":54044,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 15:38:03.451","msg":"","Status":200,"SpendMS":45,"Ip":"127.0.0.1","Method":"POST","Path":"/we/login/%7Bcode%7D","DataSize":323,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 19:17:01.053","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/index.html","DataSize":3511,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 19:17:01.096","msg":"","Status":200,"SpendMS":1,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/swagger-ui.css","DataSize":143669,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 19:17:01.100","msg":"","Status":200,"SpendMS":1,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/swagger-ui-standalone-preset.js","DataSize":337216,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 19:17:01.100","msg":"","Status":200,"SpendMS":1,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/swagger-ui-bundle.js","DataSize":1091405,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 19:17:01.597","msg":"","Status":200,"SpendMS":1,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/doc.json","DataSize":53800,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 19:17:12.071","msg":"","Status":200,"SpendMS":86,"Ip":"127.0.0.1","Method":"POST","Path":"/we/login/%7Bcode%7D","DataSize":78,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 19:56:30.046","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/index.html","DataSize":3511,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 19:56:30.067","msg":"","Status":200,"SpendMS":2,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/swagger-ui.css","DataSize":143669,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 19:56:30.072","msg":"","Status":200,"SpendMS":1,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/swagger-ui-standalone-preset.js","DataSize":337216,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 19:56:30.074","msg":"","Status":200,"SpendMS":4,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/swagger-ui-bundle.js","DataSize":1091405,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 19:56:30.564","msg":"","Status":200,"SpendMS":1,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/doc.json","DataSize":55671,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 19:56:50.652","msg":"","Status":200,"SpendMS":1,"Ip":"127.0.0.1","Method":"POST","Path":"/we/login/%7Bcode%7D","DataSize":78,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 19:58:03.881","msg":"","Status":200,"SpendMS":1,"Ip":"127.0.0.1","Method":"GET","Path":"/we/sharestring/5?time=60","DataSize":36,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 19:58:12.328","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/we/previewcarduser/ThpVinmAdJ62fk_9","DataSize":155,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:01:08.621","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/index.html","DataSize":3511,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:01:08.642","msg":"","Status":200,"SpendMS":1,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/swagger-ui.css","DataSize":143669,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:01:08.646","msg":"","Status":200,"SpendMS":1,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/swagger-ui-standalone-preset.js","DataSize":337216,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:01:08.647","msg":"","Status":200,"SpendMS":3,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/swagger-ui-bundle.js","DataSize":1091405,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:01:09.043","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/doc.json","DataSize":55671,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:01:59.718","msg":"","Status":200,"SpendMS":1,"Ip":"127.0.0.1","Method":"POST","Path":"/we/login/%7Bcode%7D","DataSize":78,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:02:13.859","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/we/sharestring/5?time=60","DataSize":36,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:02:28.089","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/we/previewcarduser/-UZ6saCdm8XdwwjW","DataSize":76,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:05:28.835","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/we/previewcarduser/-UZ6saCdm8XdwwjW","DataSize":79,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:05:31.265","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/we/previewcarduser/-UZ6saCdm8XdwwjW","DataSize":79,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:08:50.261","msg":"","Status":200,"SpendMS":167719,"Ip":"127.0.0.1","Method":"GET","Path":"/we/previewcarduser/-UZ6saCdm8XdwwjW","DataSize":79,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:10:17.340","msg":"","Status":200,"SpendMS":33486,"Ip":"127.0.0.1","Method":"GET","Path":"/we/sharestring/5?time=60","DataSize":36,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:10:25.426","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/we/sharestring/5?time=60","DataSize":36,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:10:44.243","msg":"","Status":200,"SpendMS":5356,"Ip":"127.0.0.1","Method":"GET","Path":"/we/previewcarduser/q_tTeskixO2Kmmat","DataSize":79,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:11:55.737","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/we/previewcarduser/q_tTeskixO2Kmmat","DataSize":79,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:11:58.832","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/we/previewcarduser/q_tTeskixO2Kmmat","DataSize":79,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:12:44.724","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/we/previewcarduser/q_tTeskixO2Kmmat","DataSize":66,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:18:36.165","msg":"","Status":200,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/index.html","DataSize":3511,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:18:36.186","msg":"","Status":200,"SpendMS":1,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/swagger-ui.css","DataSize":143669,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:18:36.190","msg":"","Status":200,"SpendMS":2,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/swagger-ui-standalone-preset.js","DataSize":337216,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:18:36.191","msg":"","Status":200,"SpendMS":4,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/swagger-ui-bundle.js","DataSize":1091405,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"INFO","ts":"2021-10-29 20:18:36.606","msg":"","Status":200,"SpendMS":2,"Ip":"127.0.0.1","Method":"GET","Path":"/swagger/doc.json","DataSize":55671,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"WARN","ts":"2021-10-29 15:38:21.399","msg":"","Status":404,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/","DataSize":0,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
{"level":"WARN","ts":"2021-10-29 15:38:22.300","msg":"","Status":404,"SpendMS":0,"Ip":"127.0.0.1","Method":"GET","Path":"/favicon.ico","DataSize":0,"Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3875.400 QQBrowser/10.8.4492.400"}
package chinamobile
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"strconv"
"sync"
"time"
)
var lock sync.Mutex
var appId = "551AIOT2021090208593466876"
var password = "RMm9rMVXUT,S"
var token *Token
type Resp struct {
Status string `json:"status"`
Message string `json:"message"`
}
type Token struct {
Token string
ExpireTime int64 //到期时间戳。秒
}
type TokenResp struct {
Resp
Result []struct {
Token string `json:"token"`
TTL int `json:"ttl"`
} `json:"result"`
}
func main() {
//findPersonVoiceWhiteNumber("898608021221C0008054")
//queryGroupInfo()
//queryGroupByMember("898608021221C0008054")
//addMemberVoiceWhiteList("898608021221C0008054", "9911000019264204", "18111590295")
//queryMemberVoiceWhitelist("898608021221C0008054")
fmt.Println("------------------------------------------------------")
//addMemberVoiceWhiteList("898608021221C0008053", "9911000019264204", "18111590295")
//queryMemberVoiceWhitelist("898608021221C0008053")
//queryOrderInfo("990100002259001411")
//reMoveMemberVoiceWhiteList("898608021221C0008053", "9911000019264204", "15881097999")
//addMemberVoiceWhiteList("898608021221C0008053", "9911000019264204", "18140099115")
//addMemberVoiceWhiteList("898608021221C0008053", "9911000019264204", "15775320296")
ws, _ := queryMemberVoiceWhitelist("898608021221C0008053")
for _, s := range *ws {
fmt.Println(s)
}
}
// getToken 获取token
func getToken() string {
nowTime := time.Now().Unix()
if token == nil || (token.ExpireTime <= nowTime) {
lock.Lock()
if token == nil || (token.ExpireTime <= nowTime) {
if ok, t, l := requestToken(); ok {
tt := Token{}
tt.Token = t
tt.ExpireTime = nowTime + l - 60
token = &tt
}
}
lock.Unlock()
}
if token != nil {
return token.Token
}
return ""
}
func requestToken() (bool, string, int64) {
url := "https://api.iot.10086.cn/v5/ec/get/token?refresh=1&appid=" + appId + "&password=" + password + "&transid=" + greTransId()
log.Println("获取token接口:", url)
var j TokenResp
ret, err := httpGet(url)
if err != nil {
log.Println("请求中移token失败:" + err.Error())
return false, "", 0
}
err1 := json.Unmarshal(ret, &j)
if err1 != nil {
log.Println("请求中移token失败:" + err.Error())
return false, "", 0
}
if j.Status == "0" {
for _, v := range j.Result {
return true, v.Token, int64(v.TTL)
}
}
return false, "", 0
}
// findPersonVoiceWhiteNumber 个人智能网语音白名单查询
func findPersonVoiceWhiteNumber(iccId string) (*[]string, error) {
url := "https://api.iot.10086.cn/v5/ec/query/person-voice-white-number?transid=" + greTransId() + "&token=" + getToken() + "&iccid=" + iccId
log.Println(url)
ret, err := httpGet(url)
if err != nil {
log.Println("个人智能网语音白名单查询失败:" + err.Error())
return nil, err
}
var PersonVoiceWhiteNumbers struct {
Resp
Result []struct {
TotalCount string `json:"totalCount"`
WhiteNumberList []struct {
Msisdn string `json:"msisdn"`
} `json:"whiteNumberList"`
} `json:"result"`
}
err1 := json.Unmarshal(ret, &PersonVoiceWhiteNumbers)
if err1 != nil {
log.Println("个人智能网语音白名单查询失败:" + err.Error())
return nil, err
}
if PersonVoiceWhiteNumbers.Result != nil && len(PersonVoiceWhiteNumbers.Result) > 0 {
totalCount, _ := strconv.Atoi(PersonVoiceWhiteNumbers.Result[0].TotalCount)
ws := make([]string, totalCount)
for i, w := range PersonVoiceWhiteNumbers.Result[0].WhiteNumberList {
ws[i] = w.Msisdn
}
return &ws, nil
}
return nil, nil
}
// queryMemberVoiceWhitelist 成员语音白名单查询
func queryMemberVoiceWhitelist(iccId string) (*[]string, error) {
url := "https://api.iot.10086.cn/v5/ec/query/member-voice-whitelist?transid=" + greTransId() + "&token=" + getToken() + "&iccid=" + iccId + "&groupId=9911000019264204"
log.Println(url)
ret, err := httpGet(url)
if err != nil {
log.Println("成员语音白名单查询失败:" + err.Error())
return nil, err
}
var MemberVoiceWhitelist struct {
Resp
Result []struct {
TotalCount string `json:"totalCount"`
MemVoiceWhiteList []struct {
WhiteNumber string `json:"whiteNumber"`
Status string `json:"status"`
} `json:"memVoiceWhiteList"`
} `json:"result"`
}
err1 := json.Unmarshal(ret, &MemberVoiceWhitelist)
if err1 != nil {
log.Println("成员语音白名单查询失败:" + err.Error())
return nil, err
}
if MemberVoiceWhitelist.Result != nil || len(MemberVoiceWhitelist.Result) > 0 {
totalCount, _ := strconv.Atoi(MemberVoiceWhitelist.Result[0].TotalCount)
ws := make([]string, totalCount)
index := 0
for _, w := range MemberVoiceWhitelist.Result[0].MemVoiceWhiteList {
if w.Status == "1" {
ws[index] = w.WhiteNumber
index++
}
}
return &ws, nil
}
return nil, nil
}
// addMemberVoiceWhiteList 成员语音白名单配置--添加
func addMemberVoiceWhiteList(iccId, groupId, whiteNumber string) {
url := "https://api.iot.10086.cn/v5/ec/config/member-voice-whitelist?transid=" + greTransId() + "&token=" + getToken() + "&iccid=" + iccId + "&groupId=" + groupId + "&operType=1&whiteNumber=" + whiteNumber
log.Println(url)
ret, err := httpGet(url)
if err != nil {
return
}
var MemberVoiceWhiteList struct {
Resp
Result []struct {
OrderNum string `json:"orderNum"`
} `json:"result"`
}
err1 := json.Unmarshal(ret, &MemberVoiceWhiteList)
if err1 != nil {
log.Fatal(err1)
return
}
log.Println("%#v", MemberVoiceWhiteList)
}
// reMoveMemberVoiceWhiteList 成员语音白名单配置--移除
func reMoveMemberVoiceWhiteList(iccid, groupId, whiteNumber string) {
url := "https://api.iot.10086.cn/v5/ec/config/member-voice-whitelist?transid=" + greTransId() + "&token=" + getToken() + "&iccid=" + iccid + "&groupId=" + groupId + "&operType=4&whiteNumber=" + whiteNumber
log.Println(url)
ret, err := httpGet(url)
if err != nil {
return
}
var MemberVoiceWhiteList struct {
Resp
Result []struct {
OrderNum string `json:"orderNum"`
} `json:"result"`
}
err1 := json.Unmarshal(ret, &MemberVoiceWhiteList)
if err1 != nil {
log.Fatal(err1)
return
}
log.Println("%#v", MemberVoiceWhiteList)
}
// queryOrderInfo 单卡操作订单处理情况查询--查询添加或者移除白名单是否成功
func queryOrderInfo(orderNum string) {
url := "https://api.iot.10086.cn/v5/ec/query/order-info?transid=" + greTransId() + "&token=" + getToken() + "&orderNum=" + orderNum
log.Println(url)
ret, err := httpGet(url)
if err != nil {
return
}
var OrderInfo struct {
Resp
Result []struct {
OrderInfo struct {
OrderNum string `json:"orderNum"`
Status string `json:"status"`
StatusDate string `json:"statusDate"`
CreateDate string `json:"createDate"`
} `json:"orderInfo"`
} `json:"result"`
}
err1 := json.Unmarshal(ret, &OrderInfo)
if err1 != nil {
log.Fatal(err1)
return
}
log.Println("%#v", OrderInfo)
}
// queryGroupInfo 查询组群信息
func queryGroupInfo() {
url := "https://api.iot.10086.cn/v5/ec/query/group-info?transid=" + greTransId() + "&token=" + getToken() + "&pageSize=50&startNum=1"
log.Println(url)
httpGet(url)
}
// queryGroupByMember 成员归属群组查询
func queryGroupByMember(iccid string) { //9911000019264204
url := "https://api.iot.10086.cn/v5/ec/query/group-by-member?transid=" + greTransId() + "&token=" + getToken() + "&iccid=" + iccid
log.Println(url)
httpGet(url)
}
// greTransId 生成transid
func greTransId() string {
now := time.Now()
return appId + now.Format("20060102150405") + "00000001"
}
// get方法的http请求,返回原始字符串
func httpGet(url string) ([]byte, error) {
/*client := &http.Client{}
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Fatal(err)
}
req.Header.Add("content-type", "application/json")
rep, err := client.Do(req)
if err != nil {
log.Fatal(err)
return nil, err
}*/
rep, err := http.Get(url)
if err != nil {
log.Fatal(err)
return nil, err
}
defer rep.Body.Close()
data, err := ioutil.ReadAll(rep.Body)
if err != nil {
log.Fatal(err)
return nil, err
}
//log.Println(data)
log.Printf("%s", data)
//return string(data) //[]byte转string
return data, nil
}
package thirdapi
import (
"io/ioutil"
"net/http"
)
// get方法的http请求,返回原始字符串
func HttpGet(url string) ([]byte, error) {
//logger.LogHttpClient
rep, err := http.Get(url)
if err != nil {
return nil, err
}
defer rep.Body.Close()
data, err := ioutil.ReadAll(rep.Body)
if err != nil {
return nil, err
}
return data, nil
}
package tencent
import (
"dc_golang_server_1/thirdapi"
"encoding/json"
"log"
"time"
)
const appId = "551AIOT2021090208593466876"
const password = "RMm9rMVXUT,S"
var token *tokenStruct
type tokenStruct struct {
Token string
ExpireTime int64 //到期时间戳。秒
}
type resp struct {
Status string `json:"status"`
Message string `json:"message"`
}
// greTransId 生成transid
func greTransId() string {
now := time.Now()
return appId + now.Format("20060102150405") + "00000001"
}
func requestToken() (bool, string, int64) {
type tokenResp struct {
resp
Result []struct {
Token string `json:"token"`
TTL int `json:"ttl"`
} `json:"result"`
}
url := "https://api.iot.10086.cn/v5/ec/get/token?refresh=1&appid=" + appId + "&password=" + password + "&transid=" + greTransId()
ret, err := thirdapi.HttpGet(url)
if err != nil {
log.Println("请求中移token失败:" + err.Error())
return false, "", 0
}
var j tokenResp
err1 := json.Unmarshal(ret, &j)
if err1 != nil {
log.Println("请求中移token失败:" + err.Error())
return false, "", 0
}
if j.Status == "0" {
for _, v := range j.Result {
return true, v.Token, int64(v.TTL)
}
}
return false, "", 0
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment