zhangzengfei
2023-09-05 63645d248c765244488cd34dbc1bb6528ca6b7c7
version-control/controller/authorize-ol.go
@@ -1,248 +1,248 @@
package controller
import (
   "basic.com/valib/bhomedbapi.git"
   "basic.com/valib/licence.git"
   "basic.com/valib/logger.git"
   "encoding/json"
   "errors"
   "github.com/gin-gonic/gin"
   "io/ioutil"
   "net/http"
   "os"
   "strings"
   "time"
   "vamicro/config"
   "vamicro/extend/code"
   "vamicro/extend/util"
   "vamicro/version-control/service"
)
/*
     在线激活smartai
   1.登录商城
   2.展示商城订单
   3.选择订单进行激活
*/
func pRet(b []byte, err error, c *gin.Context, cb func(data interface{}) (interface{}, error)) {
   if err != nil {
      logger.Error("pRet err:", err)
      util.ResponseFormat(c, code.ComError, err.Error())
      return
   }
   var ret bhomedbapi.Result
   err = json.Unmarshal(b, &ret)
   if err != nil {
      logger.Error("pRet err:", err)
      util.ResponseFormat(c, code.ComError, err.Error())
      return
   }
   if !ret.Success {
      logger.Error("!ret.Success ret:", ret)
      c.JSON(http.StatusInternalServerError, ret)
      return
   }
   if cb != nil {
      var rd interface{}
      rd, err = cb(ret.Data)
      if err != nil {
         util.ResponseFormat(c, code.ComError, err.Error())
         return
      } else {
         util.ResponseFormat(c, code.Success, rd)
         return
      }
   }
   c.JSON(http.StatusOK, ret)
}
//请求商城端发送短信验证码
func shopMakSmsHandle(c *gin.Context) {
   phoneNum := c.Query("phoneNum")
   if phoneNum == "" {
      util.ResponseFormat(c, code.RequestParamError, "")
      return
   }
   url := util.GetShopUrl() + "/data/api-u/user/makeVerifyCode"
   if !strings.HasPrefix(url, "http://") {
      url = "http://" + url
   }
   m := map[string]string{
      "phoneNum": phoneNum,
   }
   b, err := util.DoGetRequest(url, m, nil)
   pRet(b, err, c, nil)
}
//调用商城端登录,获取token
func shopCenterLoginHandle(c *gin.Context) {
   phoneNum := c.PostForm("phoneNum")
   verifyCode := c.PostForm("verifyCode")
   if phoneNum == "" || verifyCode == "" {
      util.ResponseFormat(c, code.RequestParamError, "")
      return
   }
   url := util.GetShopUrl() + "/data/api-u/user/login"
   if !strings.HasPrefix(url, "http://") {
      url = "http://" + url
   }
   m := map[string]interface{}{
      "phoneNum":   phoneNum,
      "verifyCode": verifyCode,
   }
   b, err := util.DoPostRequest(url, util.CONTENT_TYPE_FORM, m, nil, nil, time.Second*5)
   pRet(b, err, c, func(data interface{}) (interface{}, error) {
      d, e := json.Marshal(data)
      if e != nil {
         return nil, e
      }
      type sld struct {
         AccessToken string `json:"access_token"`
      }
      var u sld
      e = json.Unmarshal(d, &u)
      if e != nil {
         return nil, e
      }
      if !strings.HasPrefix(u.AccessToken, "Bearer ") {
         u.AccessToken = "Bearer " + u.AccessToken
      }
      return u, nil
   })
}
//获取可用于激活的订单列表
func shopCenterGetOrderListHandle(c *gin.Context) {
   token := c.PostForm("token")
   if token == "" {
      util.ResponseFormat(c, code.RequestParamError, "")
      return
   }
   if !strings.HasPrefix(token, "Bearer ") {
      token = "Bearer " + token
   }
   url := util.GetShopUrl() + "/data/api-s/order/getActiveOrder"
   if !strings.HasPrefix(url, "http://") {
      url = "http://" + url
   }
   header := map[string]string{
      "Authorization": token,
   }
   m := map[string]interface{}{
      "page": 1,
      "size": 100,
   }
   b, err := util.DoPostRequest(url, util.CONTENT_TYPE_JSON, m, nil, header, time.Second*5)
   pRet(b, err, c, nil)
}
//请求商城使用订单进行激活,返回内容:
//请求码  通道数量  摄像机数量  设备数量  服务时长   产品密钥
func authActiveByOrderHandle(c *gin.Context) {
   token := c.PostForm("token")
   orderId := c.PostForm("orderId")
   productId := c.PostForm("productId")
   activateCode := c.PostForm("activateCode") //25位激活码
   if token == "" || activateCode == "" {
      util.ResponseFormat(c, code.RequestParamError, "")
      return
   }
   if !strings.HasPrefix(token, "Bearer ") {
      token = "Bearer " + token
   }
   url := util.GetShopUrl() + "/data/api-s/q_authorization"
   if !strings.HasPrefix(url, "http://") {
      url = "http://" + url
   }
   header := map[string]string{
      "Authorization": token,
   }
   var rd = util.AuthorizationInfo{
      DevId:        config.Server.AnalyServerId,
      MachineCode:  licence.GetMachineCode(),
      DeviceType:   config.Server.DeviceType,
      DeviceMode:   config.Server.DeviceModel,
      ActivateCode: activateCode,
   }
   var sysInitApi bhomedbapi.SysInitApi
   b, rInfo := sysInitApi.GetRegInfo()
   if b {
      rbd, e := json.Marshal(rInfo)
      if e == nil {
         var sysRI service.RegUserInfo
         if e = json.Unmarshal(rbd, &sysRI); e == nil {
            rd.UserType = sysRI.UserType
            rd.PhoneNum = sysRI.PhoneNum
            rd.Name = sysRI.Name
            rd.ProvinceId = sysRI.ProvinceId
            rd.CityId = sysRI.CityId
            rd.CountyId = sysRI.CountyId
            rd.Email = sysRI.Email
         }
      }
   }
   q, err := service.HackAuthorizationInfo(rd)
   if err != nil {
      logger.Error("Haq err:", err)
      util.ResponseFormat(c, code.ComError, err.Error())
      return
   }
   body := map[string]interface{}{
      "sn":           q,
      "orderId":      orderId,
      "productId":    productId,
      "activateCode": activateCode,
   }
   rb, err := util.DoPostRequest(url, util.CONTENT_TYPE_JSON, body, nil, header, time.Second*5)
   cb := func(data interface{}) (interface{}, error) {
      rb, err := json.Marshal(data)
      if err != nil {
         logger.Error("json.Marshal err:", err)
         return nil, err
      }
      type rs struct {
         AuthInfo string `json:"authInfo"`
      }
      var rai rs
      err = json.Unmarshal(rb, &rai)
      if err != nil {
         logger.Error("json.Unmarshal err:", err)
         return nil, err
      }
      authInfo, e := util.GetAuthorizationInfo(rai.AuthInfo)
      if e != nil {
         logger.Error("GetAuthorizationInfo e:", e)
         return nil, e
      }
      machineCode := licence.GetMachineCode()
      if machineCode != authInfo.MachineCode {
         logger.Error("GetAuthorization machineCode not match, local:", machineCode, " remote:", authInfo.MachineCode)
         return nil, errors.New("机器码不匹配")
      }
      sn := util.GetVamicroPath() + "/sn.txt"
      pathAuth := util.GetVamicroPath() + "/auth.txt"
      ioutil.WriteFile(sn, []byte(""), os.ModePerm)
      ioutil.WriteFile(pathAuth, []byte(rai.AuthInfo), os.ModePerm)
      rm := map[string]interface{}{
         "sn":          authInfo.ActivateCode,
         "edition":     authInfo.Edition,
         "chCount":     authInfo.ChCount,
         "cameraCount": authInfo.CameraCount,
         "devCount":    authInfo.DevCount,
         "serveYear":   authInfo.ServeYear,
         "authInfo":    rai.AuthInfo,
      }
      return rm, nil
   }
   pRet(rb, err, c, cb)
}
package controller
import (
   "basic.com/valib/bhomedbapi.git"
   "basic.com/valib/licence.git"
   "basic.com/valib/logger.git"
   "encoding/json"
   "errors"
   "github.com/gin-gonic/gin"
   "io/ioutil"
   "net/http"
   "os"
   "strings"
   "time"
   "vamicro/config"
   "vamicro/extend/code"
   "vamicro/extend/util"
   "vamicro/version-control/service"
)
/*
     在线激活smartai
   1.登录商城
   2.展示商城订单
   3.选择订单进行激活
*/
func pRet(b []byte, err error, c *gin.Context, cb func(data interface{}) (interface{}, error)) {
   if err != nil {
      logger.Error("pRet err:", err)
      util.ResponseFormat(c, code.ComError, err.Error())
      return
   }
   var ret bhomedbapi.Result
   err = json.Unmarshal(b, &ret)
   if err != nil {
      logger.Error("pRet err:", err)
      util.ResponseFormat(c, code.ComError, err.Error())
      return
   }
   if !ret.Success {
      logger.Error("!ret.Success ret:", ret)
      c.JSON(http.StatusInternalServerError, ret)
      return
   }
   if cb != nil {
      var rd interface{}
      rd, err = cb(ret.Data)
      if err != nil {
         util.ResponseFormat(c, code.ComError, err.Error())
         return
      } else {
         util.ResponseFormat(c, code.Success, rd)
         return
      }
   }
   c.JSON(http.StatusOK, ret)
}
//请求商城端发送短信验证码
func shopMakSmsHandle(c *gin.Context) {
   phoneNum := c.Query("phoneNum")
   if phoneNum == "" {
      util.ResponseFormat(c, code.RequestParamError, "")
      return
   }
   url := util.GetShopUrl() + "/data/api-u/user/makeVerifyCode"
   if !strings.HasPrefix(url, "http://") {
      url = "http://" + url
   }
   m := map[string]string{
      "phoneNum": phoneNum,
   }
   b, err := util.DoGetRequest(url, m, nil)
   pRet(b, err, c, nil)
}
//调用商城端登录,获取token
func shopCenterLoginHandle(c *gin.Context) {
   phoneNum := c.PostForm("phoneNum")
   verifyCode := c.PostForm("verifyCode")
   if phoneNum == "" || verifyCode == "" {
      util.ResponseFormat(c, code.RequestParamError, "")
      return
   }
   url := util.GetShopUrl() + "/data/api-u/user/login"
   if !strings.HasPrefix(url, "http://") {
      url = "http://" + url
   }
   m := map[string]interface{}{
      "phoneNum":   phoneNum,
      "verifyCode": verifyCode,
   }
   b, err := util.DoPostRequest(url, util.CONTENT_TYPE_FORM, m, nil, nil, time.Second*5)
   pRet(b, err, c, func(data interface{}) (interface{}, error) {
      d, e := json.Marshal(data)
      if e != nil {
         return nil, e
      }
      type sld struct {
         AccessToken string `json:"access_token"`
      }
      var u sld
      e = json.Unmarshal(d, &u)
      if e != nil {
         return nil, e
      }
      if !strings.HasPrefix(u.AccessToken, "Bearer ") {
         u.AccessToken = "Bearer " + u.AccessToken
      }
      return u, nil
   })
}
//获取可用于激活的订单列表
func shopCenterGetOrderListHandle(c *gin.Context) {
   token := c.PostForm("token")
   if token == "" {
      util.ResponseFormat(c, code.RequestParamError, "")
      return
   }
   if !strings.HasPrefix(token, "Bearer ") {
      token = "Bearer " + token
   }
   url := util.GetShopUrl() + "/data/api-s/order/getActiveOrder"
   if !strings.HasPrefix(url, "http://") {
      url = "http://" + url
   }
   header := map[string]string{
      "Authorization": token,
   }
   m := map[string]interface{}{
      "page": 1,
      "size": 100,
   }
   b, err := util.DoPostRequest(url, util.CONTENT_TYPE_JSON, m, nil, header, time.Second*5)
   pRet(b, err, c, nil)
}
//请求商城使用订单进行激活,返回内容:
//请求码  通道数量  摄像机数量  设备数量  服务时长   产品密钥
func authActiveByOrderHandle(c *gin.Context) {
   token := c.PostForm("token")
   orderId := c.PostForm("orderId")
   productId := c.PostForm("productId")
   activateCode := c.PostForm("activateCode") //25位激活码
   if token == "" || activateCode == "" {
      util.ResponseFormat(c, code.RequestParamError, "")
      return
   }
   if !strings.HasPrefix(token, "Bearer ") {
      token = "Bearer " + token
   }
   url := util.GetShopUrl() + "/data/api-s/q_authorization"
   if !strings.HasPrefix(url, "http://") {
      url = "http://" + url
   }
   header := map[string]string{
      "Authorization": token,
   }
   var rd = util.AuthorizationInfo{
      DevId:        config.Server.AnalyServerId,
      MachineCode:  licence.GetMachineCode(),
      DeviceType:   config.Server.DeviceType,
      DeviceMode:   config.Server.DeviceModel,
      ActivateCode: activateCode,
   }
   var sysInitApi bhomedbapi.SysInitApi
   b, rInfo := sysInitApi.GetRegInfo()
   if b {
      rbd, e := json.Marshal(rInfo)
      if e == nil {
         var sysRI service.RegUserInfo
         if e = json.Unmarshal(rbd, &sysRI); e == nil {
            rd.UserType = sysRI.UserType
            rd.PhoneNum = sysRI.PhoneNum
            rd.Name = sysRI.Name
            rd.ProvinceId = sysRI.ProvinceId
            rd.CityId = sysRI.CityId
            rd.CountyId = sysRI.CountyId
            rd.Email = sysRI.Email
         }
      }
   }
   q, err := service.HackAuthorizationInfo(rd)
   if err != nil {
      logger.Error("Haq err:", err)
      util.ResponseFormat(c, code.ComError, err.Error())
      return
   }
   body := map[string]interface{}{
      "sn":           q,
      "orderId":      orderId,
      "productId":    productId,
      "activateCode": activateCode,
   }
   rb, err := util.DoPostRequest(url, util.CONTENT_TYPE_JSON, body, nil, header, time.Second*5)
   cb := func(data interface{}) (interface{}, error) {
      rb, err := json.Marshal(data)
      if err != nil {
         logger.Error("json.Marshal err:", err)
         return nil, err
      }
      type rs struct {
         AuthInfo string `json:"authInfo"`
      }
      var rai rs
      err = json.Unmarshal(rb, &rai)
      if err != nil {
         logger.Error("json.Unmarshal err:", err)
         return nil, err
      }
      authInfo, e := util.GetAuthorizationInfo(rai.AuthInfo)
      if e != nil {
         logger.Error("GetAuthorizationInfo e:", e)
         return nil, e
      }
      machineCode := licence.GetMachineCode()
      if machineCode != authInfo.MachineCode {
         logger.Error("GetAuthorization machineCode not match, local:", machineCode, " remote:", authInfo.MachineCode)
         return nil, errors.New("机器码不匹配")
      }
      sn := util.GetVamicroPath() + "/sn.txt"
      pathAuth := util.GetVamicroPath() + "/auth.txt"
      ioutil.WriteFile(sn, []byte(""), os.ModePerm)
      ioutil.WriteFile(pathAuth, []byte(rai.AuthInfo), os.ModePerm)
      rm := map[string]interface{}{
         "sn":          authInfo.ActivateCode,
         "edition":     authInfo.Edition,
         "chCount":     authInfo.ChCount,
         "cameraCount": authInfo.CameraCount,
         "devCount":    authInfo.DevCount,
         "serveYear":   authInfo.ServeYear,
         "authInfo":    rai.AuthInfo,
      }
      return rm, nil
   }
   pRet(rb, err, c, cb)
}