/* * @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 ( "scd_check_tools/global" "scd_check_tools/models/bo" "scd_check_tools/tools" "math" "net" "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 } 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() 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 "" } type ResultOK struct { Data interface{} Code int Count int Msg string } type ResultError struct { Data interface{} Code int Count int Msg string } func (c *BaseController) ResultOK(data interface{}, number interface{}) 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 } type WarpOK struct { Data interface{} Returncode int Msg string } type WarpError struct { Data interface{} Returncode int Msg string } 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 }