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