123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- /*
- * @Author: liling
- * @Date: 2022-03-15 9:23:02
- * @LastEditors: liling
- * @LastEditTime: 2022-03-15 9:23:25
- * @FilePath: \SCD\controllers\baseController.go
- * @Description:控制器基类。所有业务控制器都应该从该类继承。本控制器为beegoController的子控制器。
- *
- * Copyright (c) 2022 by liling/jujutong, All Rights Reserved.
- */
- package controllers
- import (
- "fmt"
- "math"
- "net"
- "rtzh_elec_temperature/conf"
- "rtzh_elec_temperature/global"
- "rtzh_elec_temperature/logger"
- "rtzh_elec_temperature/models/bo"
- "rtzh_elec_temperature/rtelec_app_public_lib/models"
- "rtzh_elec_temperature/rtelec_app_public_lib/service"
- "rtzh_elec_temperature/tools"
- "strconv"
- "strings"
- "sync"
- "time"
- "github.com/astaxie/beego"
- )
- var usrLock = sync.RWMutex{}
- type BaseController struct {
- beego.Controller
- }
- //获取当前登录用户信息
- //返回结果:map[string]interface{}
- //主要信息key键:userid|name|account|ip
- func (c *BaseController) GetCurrentUserInfo() (obj map[string]interface{}) {
- token := c.Ctx.Request.Header.Get("Authorization")
- if token == "" {
- return nil
- }
- logger.Logger.Debug(fmt.Sprintf("正在获取用户信息:%s", token))
- usrLock.Lock()
- token = strings.ReplaceAll(strings.ReplaceAll(token, "Bearer ", ""), " ", "")
- usr, _ := bo.GetUserInfoByToken(token)
- if usr != nil {
- key := token + "-ip"
- ip, _ := global.GoCahce.Get(key)
- if ip == nil {
- ip = c.GetClientIP()
- if ip != "" {
- global.GoCahce.Add(key, ip, 5*time.Minute)
- }
- }
- usr["ip"] = ip.(string)
- }
- usrLock.Unlock()
- logger.Logger.Debug(fmt.Sprintf("当前用户信息:%+v", usr))
- return usr
- }
- //获取当前通过rt统一平台登录用户信息
- //返回结果:Sys_usr{}
- //主要信息key键:userid|name|account|ip
- func (c *BaseController) GetCurrentUserInfo_rt() (obj models.Sys_usr) {
- token := c.Ctx.Request.Header.Get("Authorization")
- if token == "" {
- return models.Sys_usr{}
- }
- usrLock.Lock()
- token = strings.ReplaceAll(strings.ReplaceAll(token, "Bearer ", ""), " ", "")
- if conf.GlobalConfig["unittest"] == "true" && token == "testtoken" {
- //单元测试
- usrLock.Unlock()
- return models.Sys_usr{Usrname: "UnitTest", Ip: "127.0.0.1"}
- }
- usr, _ := service.RtelecManageApp().GetUserInfo(token)
- if usr.Id == 0 {
- key := token + "-ip"
- ip, _ := global.GoCahce.Get(key)
- if ip == nil {
- ip = c.GetClientIP()
- if ip != "" {
- global.GoCahce.Add(key, ip, 5*time.Minute)
- }
- }
- usr.Ip = ip.(string)
- }
- usrLock.Unlock()
- return usr
- }
- func (c *BaseController) GetClientIP() (clientip string) {
- ip := c.Ctx.Request.Header.Get("X-Real-IP")
- if net.ParseIP(ip) == nil {
- ips := c.Ctx.Request.Header.Get("X-Forward-For")
- for _, i := range strings.Split(ips, ",") {
- if net.ParseIP(i) != nil {
- ip = i
- break
- }
- }
- if ip == "" {
- ip, _, _ = net.SplitHostPort(c.Ctx.Request.RemoteAddr)
- }
- }
- if ip != "" {
- return ip
- }
- return ""
- }
- func (c *BaseController) ResultOK(data interface{}, number int) interface{} {
- formateResult := make(map[string]interface{})
- formateResult["data"] = data
- formateResult["code"] = 0
- formateResult["msg"] = ""
- formateResult["count"] = number
- return formateResult
- }
- func (c *BaseController) ResultError(message interface{}) interface{} {
- formateResult := make(map[string]interface{})
- formateResult["data"] = nil
- formateResult["code"] = 1
- formateResult["msg"] = message
- formateResult["count"] = 0
- return formateResult
- }
- func (c *BaseController) WarpPageOk(pagedata map[string]interface{}, data interface{}) interface{} {
- meta := map[string]interface{}{"field": "", "sort": "", "page": "", "pages": "", "perpage": 20, "total": 0}
- meta["field"] = pagedata["field"].(string)
- meta["sort"] = pagedata["sort"].(string)
- if tools.Typeof(pagedata["page"]) == "int" {
- meta["page"] = pagedata["page"].(int)
- } else {
- meta["page"], _ = strconv.Atoi(pagedata["page"].(string))
- }
- var perpage = 0
- if tools.Typeof(pagedata["perpage"]) == "int" {
- perpage = pagedata["perpage"].(int)
- } else {
- perpage, _ = strconv.Atoi(pagedata["perpage"].(string))
- }
- meta["pages"] = int(math.Ceil(float64(pagedata["total"].(int) / perpage)))
- meta["perpage"] = perpage
- meta["total"] = pagedata["total"].(int)
- if data == nil {
- data = []interface{}{}
- }
- result := map[string]interface{}{"meta": meta, "data": data}
- return result
- }
- func (c *BaseController) WarpOK(data interface{}) interface{} {
- user := make(map[string]interface{})
- user["data"] = data
- user["returncode"] = 200
- user["msg"] = ""
- return user
- }
- func (c *BaseController) WarpError(msg string) interface{} {
- user := make(map[string]interface{})
- user["data"] = ""
- user["returncode"] = 500
- user["msg"] = msg
- return user
- }
- /*
- 数据返回结果统一结果定义
- 其他controllers类应调用该类中的方法(函数)进行接口调用的统一格式返回
- */
- //接口调用返回成功调用
- func (c *BaseController) ApiOK(data interface{}) map[string]interface{} {
- return map[string]interface{}{
- "data": data,
- "success": true,
- "msg": "操作成功",
- }
- }
- //接口调用返回成功调用
- func (c *BaseController) ApiPageOK(data interface{}, total int) map[string]interface{} {
- return map[string]interface{}{
- "data": data,
- "total": total,
- "success": true,
- "msg": "操作成功",
- }
- }
- //接口调用返回成功调用
- func (c *BaseController) ApiEmptyArray() map[string]interface{} {
- return map[string]interface{}{
- "data": []interface{}{},
- "success": true,
- "msg": "操作成功",
- }
- }
- //接口调用返回失败调用
- func (c *BaseController) ApiError(msg interface{}) interface{} {
- return map[string]interface{}{
- "data": "",
- "success": false,
- "msg": msg,
- }
- }
|