baseController.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  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. "fmt"
  14. "math"
  15. "net"
  16. "rtzh_elec_temperature/conf"
  17. "rtzh_elec_temperature/global"
  18. "rtzh_elec_temperature/logger"
  19. "rtzh_elec_temperature/models/bo"
  20. "rtzh_elec_temperature/rtelec_app_public_lib/models"
  21. "rtzh_elec_temperature/rtelec_app_public_lib/service"
  22. "rtzh_elec_temperature/tools"
  23. "strconv"
  24. "strings"
  25. "sync"
  26. "time"
  27. "github.com/astaxie/beego"
  28. )
  29. var usrLock = sync.RWMutex{}
  30. type BaseController struct {
  31. beego.Controller
  32. }
  33. //获取当前登录用户信息
  34. //返回结果:map[string]interface{}
  35. //主要信息key键:userid|name|account|ip
  36. func (c *BaseController) GetCurrentUserInfo() (obj map[string]interface{}) {
  37. token := c.Ctx.Request.Header.Get("Authorization")
  38. if token == "" {
  39. return nil
  40. }
  41. logger.Logger.Debug(fmt.Sprintf("正在获取用户信息:%s", token))
  42. usrLock.Lock()
  43. token = strings.ReplaceAll(strings.ReplaceAll(token, "Bearer ", ""), " ", "")
  44. usr, _ := bo.GetUserInfoByToken(token)
  45. if usr != nil {
  46. key := token + "-ip"
  47. ip, _ := global.GoCahce.Get(key)
  48. if ip == nil {
  49. ip = c.GetClientIP()
  50. if ip != "" {
  51. global.GoCahce.Add(key, ip, 5*time.Minute)
  52. }
  53. }
  54. usr["ip"] = ip.(string)
  55. }
  56. usrLock.Unlock()
  57. logger.Logger.Debug(fmt.Sprintf("当前用户信息:%+v", usr))
  58. return usr
  59. }
  60. //获取当前通过rt统一平台登录用户信息
  61. //返回结果:Sys_usr{}
  62. //主要信息key键:userid|name|account|ip
  63. func (c *BaseController) GetCurrentUserInfo_rt() (obj models.Sys_usr) {
  64. token := c.Ctx.Request.Header.Get("Authorization")
  65. if token == "" {
  66. return models.Sys_usr{}
  67. }
  68. usrLock.Lock()
  69. token = strings.ReplaceAll(strings.ReplaceAll(token, "Bearer ", ""), " ", "")
  70. if conf.GlobalConfig["unittest"] == "true" && token == "testtoken" {
  71. //单元测试
  72. usrLock.Unlock()
  73. return models.Sys_usr{Usrname: "UnitTest", Ip: "127.0.0.1"}
  74. }
  75. usr, _ := service.RtelecManageApp().GetUserInfo(token)
  76. if usr.Id == 0 {
  77. key := token + "-ip"
  78. ip, _ := global.GoCahce.Get(key)
  79. if ip == nil {
  80. ip = c.GetClientIP()
  81. if ip != "" {
  82. global.GoCahce.Add(key, ip, 5*time.Minute)
  83. }
  84. }
  85. usr.Ip = ip.(string)
  86. }
  87. usrLock.Unlock()
  88. return usr
  89. }
  90. func (c *BaseController) GetClientIP() (clientip string) {
  91. ip := c.Ctx.Request.Header.Get("X-Real-IP")
  92. if net.ParseIP(ip) == nil {
  93. ips := c.Ctx.Request.Header.Get("X-Forward-For")
  94. for _, i := range strings.Split(ips, ",") {
  95. if net.ParseIP(i) != nil {
  96. ip = i
  97. break
  98. }
  99. }
  100. if ip == "" {
  101. ip, _, _ = net.SplitHostPort(c.Ctx.Request.RemoteAddr)
  102. }
  103. }
  104. if ip != "" {
  105. return ip
  106. }
  107. return ""
  108. }
  109. func (c *BaseController) ResultOK(data interface{}, number int) interface{} {
  110. formateResult := make(map[string]interface{})
  111. formateResult["data"] = data
  112. formateResult["code"] = 0
  113. formateResult["msg"] = ""
  114. formateResult["count"] = number
  115. return formateResult
  116. }
  117. func (c *BaseController) ResultError(message interface{}) interface{} {
  118. formateResult := make(map[string]interface{})
  119. formateResult["data"] = nil
  120. formateResult["code"] = 1
  121. formateResult["msg"] = message
  122. formateResult["count"] = 0
  123. return formateResult
  124. }
  125. func (c *BaseController) WarpPageOk(pagedata map[string]interface{}, data interface{}) interface{} {
  126. meta := map[string]interface{}{"field": "", "sort": "", "page": "", "pages": "", "perpage": 20, "total": 0}
  127. meta["field"] = pagedata["field"].(string)
  128. meta["sort"] = pagedata["sort"].(string)
  129. if tools.Typeof(pagedata["page"]) == "int" {
  130. meta["page"] = pagedata["page"].(int)
  131. } else {
  132. meta["page"], _ = strconv.Atoi(pagedata["page"].(string))
  133. }
  134. var perpage = 0
  135. if tools.Typeof(pagedata["perpage"]) == "int" {
  136. perpage = pagedata["perpage"].(int)
  137. } else {
  138. perpage, _ = strconv.Atoi(pagedata["perpage"].(string))
  139. }
  140. meta["pages"] = int(math.Ceil(float64(pagedata["total"].(int) / perpage)))
  141. meta["perpage"] = perpage
  142. meta["total"] = pagedata["total"].(int)
  143. if data == nil {
  144. data = []interface{}{}
  145. }
  146. result := map[string]interface{}{"meta": meta, "data": data}
  147. return result
  148. }
  149. func (c *BaseController) WarpOK(data interface{}) interface{} {
  150. user := make(map[string]interface{})
  151. user["data"] = data
  152. user["returncode"] = 200
  153. user["msg"] = ""
  154. return user
  155. }
  156. func (c *BaseController) WarpError(msg string) interface{} {
  157. user := make(map[string]interface{})
  158. user["data"] = ""
  159. user["returncode"] = 500
  160. user["msg"] = msg
  161. return user
  162. }
  163. /*
  164. 数据返回结果统一结果定义
  165. 其他controllers类应调用该类中的方法(函数)进行接口调用的统一格式返回
  166. */
  167. //接口调用返回成功调用
  168. func (c *BaseController) ApiOK(data interface{}) map[string]interface{} {
  169. return map[string]interface{}{
  170. "data": data,
  171. "success": true,
  172. "msg": "操作成功",
  173. }
  174. }
  175. //接口调用返回成功调用
  176. func (c *BaseController) ApiPageOK(data interface{}, total int) map[string]interface{} {
  177. return map[string]interface{}{
  178. "data": data,
  179. "total": total,
  180. "success": true,
  181. "msg": "操作成功",
  182. }
  183. }
  184. //接口调用返回成功调用
  185. func (c *BaseController) ApiEmptyArray() map[string]interface{} {
  186. return map[string]interface{}{
  187. "data": []interface{}{},
  188. "success": true,
  189. "msg": "操作成功",
  190. }
  191. }
  192. //接口调用返回失败调用
  193. func (c *BaseController) ApiError(msg interface{}) interface{} {
  194. return map[string]interface{}{
  195. "data": "",
  196. "success": false,
  197. "msg": msg,
  198. }
  199. }