feat: verify
This commit is contained in:
parent
909e962a5c
commit
edc0dcd357
|
|
@ -0,0 +1,18 @@
|
||||||
|
package controller
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"twin-api/app/api/service"
|
||||||
|
|
||||||
|
"git.u8t.cn/open/go-server/session"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
type User struct {
|
||||||
|
sess *session.ApiSession
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *User) Verify(ctx *gin.Context) {
|
||||||
|
res := service.NewUser(ctx).Verify()
|
||||||
|
ctx.JSON(http.StatusOK, res)
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,206 @@
|
||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
"twin-api/app/api/response"
|
||||||
|
"twin-api/app/common/dao"
|
||||||
|
"twin-api/app/common/model"
|
||||||
|
"twin-api/base/config"
|
||||||
|
|
||||||
|
"git.u8t.cn/open/go-server/session"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/spf13/cast"
|
||||||
|
)
|
||||||
|
|
||||||
|
type User struct {
|
||||||
|
sess *session.ApiSession
|
||||||
|
params map[string]any
|
||||||
|
ctx *gin.Context
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewUser(ctx *gin.Context) *User {
|
||||||
|
u := new(User)
|
||||||
|
u.params = make(map[string]any)
|
||||||
|
u.ctx = ctx
|
||||||
|
if v := ctx.Keys[session.ContextSession]; v != nil {
|
||||||
|
if v, ok := v.(*session.ApiSession); ok {
|
||||||
|
u.sess = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if u.sess == nil {
|
||||||
|
panic(config.ErrPermission.New())
|
||||||
|
}
|
||||||
|
|
||||||
|
exp := u.sess.GetExperiment()
|
||||||
|
// 初始化参数
|
||||||
|
for k, v := range config.KeysDefault {
|
||||||
|
u.params[k] = exp.GetParam(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return u
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断注册时间
|
||||||
|
// 判断免费使用时间
|
||||||
|
// 判断是否有会员
|
||||||
|
// 包更新判断
|
||||||
|
// 判断包是否提示强制更新
|
||||||
|
// 判断包是否提示更新
|
||||||
|
|
||||||
|
func (u *User) Verify() *response.Response {
|
||||||
|
// 检查免费使用时间
|
||||||
|
if resp := u.FreeCheck(); resp != nil {
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查会员状况
|
||||||
|
if resp := u.VipCheck(); resp != nil {
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
// 检查包更新状况
|
||||||
|
if resp := u.PkgCheck(); resp != nil {
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
|
||||||
|
resp := response.New(u.ctx, config.Success, "success")
|
||||||
|
resp.Window(&response.Window{Title: "", Close: true})
|
||||||
|
resp.Data.Buttons = make([]response.Button, 0)
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *User) FreeCheck() *response.Response {
|
||||||
|
var resp *response.Response
|
||||||
|
free := time.Unix(u.sess.GetUserInfo().ActiveTime, 0).AddDate(0, 0, cast.ToInt(u.params[config.ServiceFreeDay]))
|
||||||
|
if free.Unix() >= time.Now().Unix() {
|
||||||
|
// 提示需要充值
|
||||||
|
resp = response.New(u.ctx, config.VipExpire, u.params[config.ServiceVipExpireNotice].(string))
|
||||||
|
button := &response.Button{
|
||||||
|
Text: u.params[config.ServiceVipExpireButton].(string),
|
||||||
|
Url: u.params[config.ServiceVipExpireUrl].(string),
|
||||||
|
}
|
||||||
|
window := &response.Window{Close: false}
|
||||||
|
resp.Botton(button)
|
||||||
|
resp.Window(window)
|
||||||
|
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *User) VipCheck() *response.Response {
|
||||||
|
var resp *response.Response
|
||||||
|
expire := u.sess.GetUserInfo().VipExpireTime
|
||||||
|
if expire == -1 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if expire < time.Now().Unix() {
|
||||||
|
resp = response.New(u.ctx, config.VipExpire, u.params[config.ServiceVipExpireNotice].(string))
|
||||||
|
button := &response.Button{
|
||||||
|
Text: u.params[config.ServiceVipExpireButton].(string),
|
||||||
|
Url: u.params[config.ServiceVipExpireUrl].(string),
|
||||||
|
}
|
||||||
|
window := &response.Window{Close: false}
|
||||||
|
resp.Botton(button)
|
||||||
|
resp.Window(window)
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *User) PkgCheck() *response.Response {
|
||||||
|
var resp *response.Response
|
||||||
|
var userPkg *model.UserPkgInfo
|
||||||
|
var pkg *model.Pkg
|
||||||
|
var err error
|
||||||
|
user := u.sess.GetUserInfo()
|
||||||
|
if userPkg, err = dao.NewUserPkg().GetLatest(user.Id); err != nil {
|
||||||
|
panic(config.ErrDb.New().Append(err))
|
||||||
|
}
|
||||||
|
|
||||||
|
if userPkg == nil {
|
||||||
|
pkg, err = dao.NewPackage().GetByPkgName("")
|
||||||
|
if err != nil {
|
||||||
|
panic(config.ErrDb.New().Append(err))
|
||||||
|
}
|
||||||
|
|
||||||
|
if pkg == nil {
|
||||||
|
panic(config.ErrData.New().Append(err))
|
||||||
|
}
|
||||||
|
resp = response.New(u.ctx, config.UerNoPkg, u.params[config.ServiceUserPackageLack].(string))
|
||||||
|
button := &response.Button{
|
||||||
|
Text: u.params[config.ServicePackageLackButton].(string),
|
||||||
|
Url: u.params[config.ServicePackageLackUrl].(string),
|
||||||
|
}
|
||||||
|
window := &response.Window{Close: false}
|
||||||
|
resp.Botton(button)
|
||||||
|
resp.Window(window)
|
||||||
|
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
|
||||||
|
// 先判断是否强制更新
|
||||||
|
if resp = u.expireCheck(userPkg, cast.ToInt(u.params[config.ServiceForceUpdateDay])); resp != nil {
|
||||||
|
resp.Window(&response.Window{Close: false, Title: u.params[config.ServiceForceUpdateNotice].(string)})
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断是否提示更新
|
||||||
|
if resp = u.expireCheck(userPkg, cast.ToInt(u.params[config.ServiceUpdateBeforeDay])); resp != nil {
|
||||||
|
msg := fmt.Sprintf(u.params[config.ServiceUpdateNotice].(string), time.Unix(userPkg.Pkg.ExpireTime, 0).Format("2006-01-02"))
|
||||||
|
resp.Window(&response.Window{Close: true, Title: msg})
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断包是否在有效时间内
|
||||||
|
func (u *User) expireCheck(userPkg *model.UserPkgInfo, day int) *response.Response {
|
||||||
|
var pkg *model.Pkg
|
||||||
|
var err error
|
||||||
|
var resp *response.Response
|
||||||
|
|
||||||
|
expire := time.Now().AddDate(0, 0, day)
|
||||||
|
if time.Unix(userPkg.Pkg.ExpireTime, 0).Before(expire) {
|
||||||
|
// 提示强制更新
|
||||||
|
// 查询当前有无最新可用的包
|
||||||
|
// 1. 先查询当前包有无可用
|
||||||
|
if pkg, err = dao.NewPackage().GetByPkgName(userPkg.Pkg.Name); err != nil {
|
||||||
|
panic(config.ErrDb.New().Append(err))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 无则查询其他可用包
|
||||||
|
if pkg == nil || time.Unix(pkg.ExpireTime, 0).Before(expire) {
|
||||||
|
if pkg, err = dao.NewPackage().GetByPkgName(""); err != nil {
|
||||||
|
panic(config.ErrDb.New().Append(err))
|
||||||
|
}
|
||||||
|
// 3. 如果都不可用,则提示联系客服
|
||||||
|
if pkg == nil {
|
||||||
|
resp = response.New(u.ctx, config.NoPkg, u.params[config.ServiceContactCustomer].(string))
|
||||||
|
window := &response.Window{Close: false}
|
||||||
|
resp.Window(window)
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 否则返回强制更新
|
||||||
|
message := u.params[config.ServiceForceUpdateNotice].(string)
|
||||||
|
if pkg.Name != userPkg.Pkg.Name {
|
||||||
|
message = u.params[config.ServiceUpdateOtherNotice].(string)
|
||||||
|
}
|
||||||
|
resp = response.New(u.ctx, config.NeedUpgrade, message)
|
||||||
|
button := &response.Button{
|
||||||
|
Text: u.params[config.ServiceInstallButton].(string),
|
||||||
|
Url: pkg.Link,
|
||||||
|
}
|
||||||
|
window := &response.Window{Close: false}
|
||||||
|
resp.Botton(button)
|
||||||
|
resp.Window(window)
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue