/* * @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, } }