From 0693c1d6d3489cc8f4d6980f4e2e3b8a341fb85e Mon Sep 17 00:00:00 2001 From: howell <2827207845@qq.com> Date: Thu, 27 Jan 2022 14:47:46 +0800 Subject: [PATCH] fix:vip --- internal/v2/controller/manage/jyy/app.go | 39 ++++++ internal/v2/logic/manage/jyy/app.go | 157 +++++++++++++++++++++++ internal/v2/router/manage.go | 11 ++ 3 files changed, 207 insertions(+) create mode 100644 internal/v2/controller/manage/jyy/app.go create mode 100644 internal/v2/logic/manage/jyy/app.go diff --git a/internal/v2/controller/manage/jyy/app.go b/internal/v2/controller/manage/jyy/app.go new file mode 100644 index 0000000..d55f4eb --- /dev/null +++ b/internal/v2/controller/manage/jyy/app.go @@ -0,0 +1,39 @@ +package jyy + +import ( + "recook/internal/back" + "recook/internal/libs/bean" + "recook/internal/v2/logic/manage/jyy" + "recook/tools" + + "github.com/gin-gonic/gin" +) + +func (o Proxy) User(c *gin.Context) { + var args jyy.AppUserReq + if err := tools.Params(&args, c); err != nil { + back.Fail(c, err.Error()) + return + } + if data, total, err := jyy.Logic.AppUser(args); err != nil { + back.Fail(c, err.Error()) + } else { + back.Suc(c, "ok", bean.ResultLists{ + List: data, + Total: int(total), + }) + } +} + +func (o Proxy) Vip(c *gin.Context) { + var args jyy.AppUserReq + if err := tools.Params(&args, c); err != nil { + back.Fail(c, err.Error()) + return + } + if err := jyy.Logic.Vip(args); err != nil { + back.Fail(c, err.Error()) + } else { + back.Suc(c, "ok", "") + } +} diff --git a/internal/v2/logic/manage/jyy/app.go b/internal/v2/logic/manage/jyy/app.go new file mode 100644 index 0000000..15b2a1b --- /dev/null +++ b/internal/v2/logic/manage/jyy/app.go @@ -0,0 +1,157 @@ +package jyy + +import ( + "errors" + "fmt" + "recook/internal/define" + "recook/internal/libs/bean" + "recook/internal/service/baseCode" + "recook/internal/v2/model/recook/user" + "strings" + "time" + + "git.oa00.com/go/mysql" + "github.com/golangkit/formatime" + "gorm.io/gorm" +) + +type AppUserReq struct { + bean.Page + AppUserInfo + Start string `json:"start"` + End string `json:"end"` + Kind uint `json:"kind"` +} + +type AppUserInfo struct { + Mobile string `json:"mobile"` + Nickname string `json:"nickname"` + Level uint `json:"level"` + IsOffline bool `json:"is_offline"` + CreatedAt formatime.Second `json:"created_at"` +} + +func (o logic) AppUser(args AppUserReq) (res []AppUserInfo, total int64, err error) { + query := mysql.Db.Table((&user.RecookUserInfoModel{}).TableName()).Where("LENGTH(mobile) =11") + { + if args.Mobile != "" { + query = query.Where("mobile = ?", args.Mobile) + } + + if args.Nickname != "" { + query = query.Where("nickname = ?", args.Nickname) + } + if args.Start != "" { + query = query.Where("created_at > ?", args.Start) + } + if args.End != "" { + query = query.Where("created_at < ?", args.End) + } + if args.Kind != 0 { + switch args.Kind { + case 1: // 会员 + query = query.Where("level = 0") + case 2: // 店主 + query = query.Where("level = 1") + case 3: // 云店铺 + query = query.Where("level = 2") + case 4: // vip店铺 + query = query.Where("level = 2 and is_offline = 1") + case 5: // 子公司 + query = query.Where("level = 10") + } + } + } + query.Count(&total) + var temp []user.RecookUserInfoModel + query.Offset(args.GetStart()).Limit(args.GetLimit()).Find(&temp) + for _, v := range temp { + res = append(res, AppUserInfo{ + Mobile: v.Mobile, + Nickname: v.Nickname, + Level: uint(v.Level), + IsOffline: v.IsOffline, + CreatedAt: v.CreatedAt, + }) + } + return +} + +func (o logic) Vip(args AppUserReq) error { + + if len(args.Mobile) != 11 || !strings.HasPrefix(args.Mobile, "1") { + return errors.New("手机格式异常") + } + var u user.RecookUserInfoModel + mysql.Db.First(&u, "mobile = ?", args.Mobile) + if u.Level > 2 { + return nil + } + mobile := args.Mobile + if u.Id == 0 { + // 没有就创建 + if err := mysql.Db.Transaction(func(tx *gorm.DB) error { + sql := `select max(id)+floor(1+rand()*5) from recook_user_info` + var lastId int64 + if err := tx.Raw(sql).Count(&lastId).Error; err != nil { + return err + } + info := user.RecookUserInfoModel{ + Id: uint(lastId), + Nickname: "左家右厨" + mobile[7:], + Mobile: mobile, + Birthday: formatime.NewSecondFrom(define.DefaultBirthday), + HeadImgUrl: "", + Phone: mobile, + Identifier: time.Now().Format("060102") + baseCode.Encode(uint64(lastId)), + Level: 2, + ParentID: 0, + RootID: 3212341, + IsOffline: true, + UpgradeTime2: formatime.NewSecondNow(), + } + + if err := tx.Create(&info).Error; err != nil { + tx.Rollback() + err = fmt.Errorf("创建用户错误101:" + err.Error()) + return err + } + + // 生成邀请码和推荐码 + info.InvitationNo = baseCode.Encode(uint64(info.Id)) + if err := tx.Save(&info).Error; err != nil { + err = fmt.Errorf("创建用户错误102:" + err.Error()) + return err + } + // 建立钱包 + wallet := user.RecookUserWalletModel{ + UserId: info.Id, + } + if err := tx.Create(&wallet).Error; err != nil { + tx.Rollback() + err = fmt.Errorf("创建用户错误103:" + err.Error()) + return err + } + return nil + }); err != nil { + return err + } + + } else { + if err := mysql.Db.Transaction(func(tx *gorm.DB) error { + if err := tx.Model(&u).Updates(map[string]interface{}{ + "level": 2, + "parent_id": 0, + "root_id": 3212341, + "upgrade_time1": formatime.NewSecondNow(), + "is_offline": true, + }).Error; err != nil { + return err + } + return nil + }); err != nil { + return err + } + } + return nil +} diff --git a/internal/v2/router/manage.go b/internal/v2/router/manage.go index 24cd9e8..811d775 100644 --- a/internal/v2/router/manage.go +++ b/internal/v2/router/manage.go @@ -812,4 +812,15 @@ func routerManage(manageRouter *gin.RouterGroup) { } } } + + { + appUserRouter := manageRouter.Group("app") + { + proxy := jyy.Proxy{} + { + appUserRouter.POST("user", proxy.User) + appUserRouter.POST("vip", proxy.Vip) + } + } + } }