123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- package svc
- import (
- "context"
- "encoding/json"
- "fmt"
- "net/http"
- "strconv"
- "time"
- "git.i2edu.net/i2/go-zero/core/stores/sqlx"
- "git.i2edu.net/i2/go-zero/rest/token"
- "git.i2edu.net/i2/go-zero/zrpc"
- "git.i2edu.net/i2/i2-bill-api/internal/config"
- "git.i2edu.net/i2/i2-bill-api/model"
- "git.i2edu.net/i2/i2-bill-erp/transformclient"
- "github.com/dgrijalva/jwt-go"
- _ "github.com/go-sql-driver/mysql"
- "github.com/xormplus/xorm"
- )
- var ServiceConfig config.Config
- type ServiceContext struct {
- Config config.Config
- SqlConn sqlx.SqlConn
- RdCli Cache
- Wechat *Wechat
- Transformer transformclient.Transform
- UserModel model.UserModel
- I2billAcquirerStudentModel model.I2billAcquirerStudentModel
- DB *xorm.Engine
- }
- // GetUserId defined TODO
- func (sc *ServiceContext) GetClaims(r *http.Request) (int64, string, error) {
- parser := token.NewTokenParser(token.WithResetDuration(time.Minute))
- tok, err := parser.ParseToken(r, sc.Config.JwtAuth.AccessSecret, "")
- if err != nil {
- return 0, "", err
- }
- userId, sessionKey := int64(0), ""
- m := tok.Claims.(jwt.MapClaims)
- switch nbf := m["userId"].(type) {
- case string:
- i, err := strconv.ParseInt(nbf, 10, 64)
- if err != nil {
- return 0, "", err
- }
- userId = i
- case json.Number:
- v, err := nbf.Int64()
- if err != nil {
- return 0, "", err
- }
- userId = v
- }
- switch nbf := m["sessionKey"].(type) {
- case string:
- sessionKey = nbf
- case json.Number:
- v, err := nbf.Int64()
- if err != nil {
- return 0, "", err
- }
- sessionKey = fmt.Sprintf("%v", v)
- }
- return userId, sessionKey, err
- }
- func (sc *ServiceContext) GetUserIdByJwt(ctx context.Context) int64 {
- UserIdStr := ctx.Value("userId").(json.Number)
- number, _ := strconv.ParseInt(UserIdStr.String(), 10, 64)
- return number
- }
- func NewServiceContext(c config.Config) *ServiceContext {
- db, err := xorm.NewEngine("mysql", c.DataSource)
- if err != nil {
- panic(err)
- }
- db.RegisterSqlMap(xorm.Xml("sqlconfig", ".xml"))
- db.RegisterSqlTemplate(xorm.Pongo2("sqlconfig", ".stpl"))
- db.RegisterSqlTemplate(xorm.Jet("sqlconfig", ".jet"))
- db.RegisterSqlTemplate(xorm.Default("sqlconfig", ".tpl"))
- db.ShowSQL(true)
- svc := &ServiceContext{
- Config: c,
- SqlConn: sqlx.NewMysql(c.DataSource),
- Transformer: transformclient.NewTransform(zrpc.MustNewClient(c.Transform)),
- DB: db,
- }
- svc.UserModel = model.NewUserModel(svc.SqlConn, c.Cache)
- svc.I2billAcquirerStudentModel = model.NewI2billAcquirerStudentModel(svc.SqlConn)
- svc.RdCli = svc.UserModel.CacheStorage()
- svc.Wechat = &Wechat{
- RdCli: svc.RdCli,
- c: c,
- }
- ServiceConfig = svc.Config
- return svc
- }
|