You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
2.3 KiB
115 lines
2.3 KiB
|
1 year ago
|
package app
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"fmt"
|
||
|
|
"net/http"
|
||
|
|
"reflect"
|
||
|
|
"server/modules/customer/bdb"
|
||
|
|
"server/modules/customer/values"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"github.com/gin-gonic/gin"
|
||
|
|
"github.com/liangdas/mqant/log"
|
||
|
|
"gorm.io/gorm"
|
||
|
|
)
|
||
|
|
|
||
|
|
type Gin struct {
|
||
|
|
C *gin.Context
|
||
|
|
R
|
||
|
|
User *values.User
|
||
|
|
}
|
||
|
|
|
||
|
|
type R struct {
|
||
|
|
Data interface{} `json:"data"`
|
||
|
|
Msg string `json:"msg"`
|
||
|
|
Code int `json:"code"`
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewApp(c *gin.Context) *Gin {
|
||
|
|
g := &Gin{C: c, R: R{Code: values.CodeOK, Msg: "ok"}}
|
||
|
|
user, ex := c.Get("user")
|
||
|
|
if ex {
|
||
|
|
g.User = user.(*values.User)
|
||
|
|
if len(g.User.Channels) > 0 {
|
||
|
|
json.Unmarshal([]byte(g.User.Channels), &g.User.SChannels)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return g
|
||
|
|
}
|
||
|
|
|
||
|
|
// Response setting gin.JSON
|
||
|
|
func (g *Gin) Response() {
|
||
|
|
if g.Code == values.CodeRetry {
|
||
|
|
g.Msg = "内部错误"
|
||
|
|
} else if g.Code == values.CodePower {
|
||
|
|
g.Msg = "您无权操作此项"
|
||
|
|
}
|
||
|
|
g.C.JSON(http.StatusOK, g.R)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (g *Gin) RecordEdit(t int, detail string) {
|
||
|
|
u, _ := g.C.Get("user")
|
||
|
|
user := u.(*values.User)
|
||
|
|
one := &values.EditHistory{Model: t, Detail: detail, Time: time.Now().Unix(), Operator: user.Name, UID: int(user.ID)}
|
||
|
|
bdb.BackDB.Create(one)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (g *Gin) S(one interface{}) (pass bool) {
|
||
|
|
err := g.C.ShouldBind(one)
|
||
|
|
if err != nil {
|
||
|
|
g.R.Code = values.CodeParam
|
||
|
|
g.R.Msg = err.Error()
|
||
|
|
log.Error("bind %v err:%v", reflect.TypeOf(one), err)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
pass = true
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// U 统一json解析方法
|
||
|
|
func (g *Gin) U(src []byte, tar interface{}) (pass bool) {
|
||
|
|
err := json.Unmarshal(src, tar)
|
||
|
|
if err != nil {
|
||
|
|
log.Error("%v err:%v", reflect.TypeOf(tar), err)
|
||
|
|
g.R.Code = values.CodeRetry
|
||
|
|
g.R.Msg = err.Error()
|
||
|
|
return
|
||
|
|
}
|
||
|
|
pass = true
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// MCommit 提交事务
|
||
|
|
func (g *Gin) MCommit(tx *gorm.DB) {
|
||
|
|
if g.Code == values.CodeOK {
|
||
|
|
if err := tx.Commit().Error; err != nil {
|
||
|
|
tx.Rollback()
|
||
|
|
return
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
tx.Rollback()
|
||
|
|
return
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// CheckPower 检查权限是否合法
|
||
|
|
func (g *Gin) CheckPower(power string) bool {
|
||
|
|
newMap := map[int][]int{}
|
||
|
|
if err := json.Unmarshal([]byte(power), &newMap); err != nil {
|
||
|
|
log.Error("err:%v", err)
|
||
|
|
g.Code = values.CodeParam
|
||
|
|
g.Msg = err.Error()
|
||
|
|
return false
|
||
|
|
}
|
||
|
|
for i := range newMap {
|
||
|
|
if !values.IsValidPower(i) {
|
||
|
|
log.Error("invalid power:%v", i)
|
||
|
|
g.Code = values.CodeParam
|
||
|
|
g.Msg = fmt.Sprintf("未知权限参数%v", i)
|
||
|
|
return false
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return true
|
||
|
|
}
|