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 }