baseController.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. /*
  2. * @Author: liling
  3. * @Date: 2022-03-15 9:23:02
  4. * @LastEditors: liling
  5. * @LastEditTime: 2022-03-15 9:23:25
  6. * @FilePath: \SCD\controllers\baseController.go
  7. * @Description:控制器基类。所有业务控制器都应该从该类继承。本控制器为beegoController的子控制器。
  8. *
  9. * Copyright (c) 2022 by liling/jujutong, All Rights Reserved.
  10. */
  11. package controllers
  12. import (
  13. "scd_check_tools/global"
  14. "scd_check_tools/models/bo"
  15. "scd_check_tools/tools"
  16. "math"
  17. "net"
  18. "strconv"
  19. "strings"
  20. "sync"
  21. "time"
  22. "github.com/astaxie/beego"
  23. )
  24. var usrLock = sync.RWMutex{}
  25. type BaseController struct {
  26. beego.Controller
  27. }
  28. //获取当前登录用户信息
  29. //返回结果:map[string]interface{}
  30. //主要信息key键:userid|name|account|ip
  31. func (c *BaseController) GetCurrentUserInfo() (obj map[string]interface{}) {
  32. token := c.Ctx.Request.Header.Get("Authorization")
  33. if token == "" {
  34. return nil
  35. }
  36. usrLock.Lock()
  37. token = strings.ReplaceAll(strings.ReplaceAll(token, "Bearer ", ""), " ", "")
  38. usr, _ := bo.GetUserInfoByToken(token)
  39. if usr != nil {
  40. key := token + "-ip"
  41. ip, _ := global.GoCahce.Get(key)
  42. if ip == nil {
  43. ip = c.GetClientIP()
  44. if ip != "" {
  45. global.GoCahce.Add(key, ip, 5*time.Minute)
  46. }
  47. }
  48. usr["ip"] = ip.(string)
  49. }
  50. usrLock.Unlock()
  51. return usr
  52. }
  53. func (c *BaseController) GetClientIP() (clientip string) {
  54. ip := c.Ctx.Request.Header.Get("X-Real-IP")
  55. if net.ParseIP(ip) == nil {
  56. ips := c.Ctx.Request.Header.Get("X-Forward-For")
  57. for _, i := range strings.Split(ips, ",") {
  58. if net.ParseIP(i) != nil {
  59. ip = i
  60. break
  61. }
  62. }
  63. if ip == "" {
  64. ip, _, _ = net.SplitHostPort(c.Ctx.Request.RemoteAddr)
  65. }
  66. }
  67. if ip != "" {
  68. return ip
  69. }
  70. return ""
  71. }
  72. type ResultOK struct {
  73. Data interface{}
  74. Code int
  75. Count int
  76. Msg string
  77. }
  78. type ResultError struct {
  79. Data interface{}
  80. Code int
  81. Count int
  82. Msg string
  83. }
  84. func (c *BaseController) ResultOK(data interface{}, number interface{}) interface{} {
  85. formateResult := make(map[string]interface{})
  86. formateResult["data"] = data
  87. formateResult["code"] = 0
  88. formateResult["msg"] = ""
  89. formateResult["count"] = number
  90. return formateResult
  91. }
  92. func (c *BaseController) ResultError(message interface{}) interface{} {
  93. formateResult := make(map[string]interface{})
  94. formateResult["data"] = nil
  95. formateResult["code"] = 1
  96. formateResult["msg"] = message
  97. formateResult["count"] = 0
  98. return formateResult
  99. }
  100. func (c *BaseController) WarpPageOk(pagedata map[string]interface{}, data interface{}) interface{} {
  101. meta := map[string]interface{}{"field": "", "sort": "", "page": "", "pages": "", "perpage": 20, "total": 0}
  102. meta["field"] = pagedata["field"].(string)
  103. meta["sort"] = pagedata["sort"].(string)
  104. if tools.Typeof(pagedata["page"]) == "int" {
  105. meta["page"] = pagedata["page"].(int)
  106. } else {
  107. meta["page"], _ = strconv.Atoi(pagedata["page"].(string))
  108. }
  109. var perpage = 0
  110. if tools.Typeof(pagedata["perpage"]) == "int" {
  111. perpage = pagedata["perpage"].(int)
  112. } else {
  113. perpage, _ = strconv.Atoi(pagedata["perpage"].(string))
  114. }
  115. meta["pages"] = int(math.Ceil(float64(pagedata["total"].(int) / perpage)))
  116. meta["perpage"] = perpage
  117. meta["total"] = pagedata["total"].(int)
  118. if data == nil {
  119. data = []interface{}{}
  120. }
  121. result := map[string]interface{}{"meta": meta, "data": data}
  122. return result
  123. }
  124. type WarpOK struct {
  125. Data interface{}
  126. Returncode int
  127. Msg string
  128. }
  129. type WarpError struct {
  130. Data interface{}
  131. Returncode int
  132. Msg string
  133. }
  134. func (c *BaseController) WarpOK(data interface{}) interface{} {
  135. user := make(map[string]interface{})
  136. user["data"] = data
  137. user["returncode"] = 200
  138. user["msg"] = ""
  139. return user
  140. }
  141. func (c *BaseController) WarpError(msg string) interface{} {
  142. user := make(map[string]interface{})
  143. user["data"] = ""
  144. user["returncode"] = 500
  145. user["msg"] = msg
  146. return user
  147. }