From ec97835313ccece99bef12d6bf302733038e0d82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Tue, 24 Nov 2020 08:42:25 +0800 Subject: [PATCH] =?UTF-8?q?=E9=82=80=E8=AF=B74=E4=BA=BA=E5=BE=97=E4=BC=9A?= =?UTF-8?q?=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/authz.go | 2 +- business/jxstore/cms/cms.go | 2 +- business/jxstore/cms/user2.go | 75 ++++++++++++++++++++++++++------- business/jxstore/event/event.go | 4 ++ business/model/dao/dao_user.go | 6 ++- business/model/user.go | 7 ++- controllers/user2_controller.go | 2 +- 7 files changed, 76 insertions(+), 22 deletions(-) diff --git a/business/jxstore/cms/authz.go b/business/jxstore/cms/authz.go index 09b1643f5..695572cfd 100644 --- a/business/jxstore/cms/authz.go +++ b/business/jxstore/cms/authz.go @@ -71,7 +71,7 @@ func TransferLegacyWeixins(mobile string) (err error) { if user.Name == "" { user.Name = user.GetMobile() } - userList, _, err2 := dao.GetUsers(db, 0, "", nil, nil, []string{v.Tel}, 0, -1) + userList, _, err2 := dao.GetUsers(db, 0, "", "", nil, nil, []string{v.Tel}, 0, -1) if err = err2; err != nil { return err } diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index fc8b5de61..b14a16bd0 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -180,7 +180,7 @@ func DeleteConfig(ctx *jxcontext.Context, key, configType string) (err error) { errList := errlist.New() userIDs, err2 := api2.RoleMan.GetRoleUserList(autils.NewRole(key, 0)) if err = err2; err == nil && len(userIDs) > 0 { - userList, totalCount, err2 := dao.GetUsers(dao.GetDB(), 0, "", userIDs, nil, nil, 0, -1) + userList, totalCount, err2 := dao.GetUsers(dao.GetDB(), 0, "", "", userIDs, nil, nil, 0, -1) if err = err2; err == nil && totalCount > 0 { // todo // err = fmt.Errorf("还有人员在使用角色:%s,人员信息:%s", key, utils.MustMarshal(utils.Struct2Map(userList, "compact"))) diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index e7013d4f5..aa3b77716 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -6,6 +6,8 @@ import ( "sync" "time" + "git.rosy.net.cn/jx-callback/business/jxstore/event" + "git.rosy.net.cn/jx-callback/business/jxstore/financial" "git.rosy.net.cn/baseapi/platformapi/dingdingapi" @@ -273,7 +275,7 @@ func OnDingDingMsg(msg map[string]interface{}) (callbackResponse *dingdingapi.Ca } func GetUsers(ctx *jxcontext.Context, userType int, keyword string, userIDs []string, userID2, mobile string, offset, pageSize int) (pagedInfo *model.PagedInfo, err error) { - userList, totalCount, err := dao.GetUsers(dao.GetDB(), userType, keyword, userIDs, jxutils.BatchString2Slice(userID2), jxutils.BatchString2Slice(mobile), offset, pageSize) + userList, totalCount, err := dao.GetUsers(dao.GetDB(), userType, keyword, "", userIDs, jxutils.BatchString2Slice(userID2), jxutils.BatchString2Slice(mobile), offset, pageSize) if err == nil { pagedInfo = &model.PagedInfo{ TotalCount: totalCount, @@ -288,7 +290,7 @@ func GetUser(ctx *jxcontext.Context, userID string) (user *model.GetUserResult, } func checkUserType(userID string, userType int8) (err error) { - userList, _, err := dao.GetUsers(dao.GetDB(), 0, "", []string{userID}, nil, nil, 0, 0) + userList, _, err := dao.GetUsers(dao.GetDB(), 0, "", "", []string{userID}, nil, nil, 0, 0) if err != nil { return err } @@ -525,15 +527,21 @@ func RefreshUserMemberStatus(ctx *jxcontext.Context) (err error) { return err } -func InvestMember(ctx *jxcontext.Context, memberID int) (errCode string, err error) { +func InvestMember(ctx *jxcontext.Context, memberID int, userID string, isFree bool) (errCode string, err error) { var ( db = dao.GetDB() memberCards []*model.MemberCard memberCard *model.MemberCard + userIDReal string ) - userMembers, err := dao.GetUserMember(db, ctx.GetUserID(), model.MemberTypeNormal) + if !isFree { + userIDReal = ctx.GetUserID() + } else { + userIDReal = userID + } + userMembers, err := dao.GetUserMember(db, userIDReal, model.MemberTypeNormal) configList, err := dao.QueryConfigs(db, model.ConfigTypeName[model.ConfigTypeMemberCard], model.ConfigTypeMemberCard, "") - userBill, err := dao.GetUserBill(db, ctx.GetUserID(), "") + userBill, err := dao.GetUserBill(db, userIDReal, "") if len(configList) <= 0 { return "", fmt.Errorf("未找到会员卡配置!") } @@ -547,12 +555,14 @@ func InvestMember(ctx *jxcontext.Context, memberID int) (errCode string, err err memberCard = v } } - //验证微信绑定 - if err = auth2.CheckWeixinminiAuthBind(ctx.GetUserID()); err != nil { - return "", err - } - if userBill.AccountBalance < memberCard.Price { - return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!") + if !isFree { + //验证微信绑定 + if err = auth2.CheckWeixinminiAuthBind(userIDReal); err != nil { + return "", err + } + if userBill.AccountBalance < memberCard.Price { + return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!") + } } dao.Begin(db) defer func() { @@ -575,7 +585,7 @@ func InvestMember(ctx *jxcontext.Context, memberID int) (errCode string, err err } } else { userMember2 := &model.UserMember{ - UserID: ctx.GetUserID(), + UserID: userIDReal, MemberType: model.MemberTypeNormal, MemberTypeID: memberID, } @@ -590,10 +600,12 @@ func InvestMember(ctx *jxcontext.Context, memberID int) (errCode string, err err return } } - //支出明细 - if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeMember, memberCard.Price); err != nil { - dao.Rollback(db) - return + if !isFree { + //支出明细 + if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeMember, memberCard.Price); err != nil { + dao.Rollback(db) + return + } } dao.Commit(db) return errCode, err @@ -650,5 +662,36 @@ func UpdateUser(ctx *jxcontext.Context, payload map[string]interface{}) (err err } dao.Commit(db) } + if payload["popUser"] != "" { + user2, err2 := dao.GetUserByID(db, "user_id", payload["popUser"].(string)) + err = err2 + if user2 != nil { + user2.PopCount++ + //邀请过4人直接开通一个月会员并创建群组 + if user2.PopCount >= 4 && user2.PopFlag == model.NO { + _, err = InvestMember(ctx, 1, user2.UserID, true) + //如果他已经有群了,被邀请人直接进群 + //如果他没群,自动创一个群,所有被邀请人打上标志 + messageGroupsResult, err3 := dao.GetMessageGroups(db, user2.UserID, 0, model.GroupTypeMulit, false, "") + err = err3 + if len(messageGroupsResult) > 0 { + err = event.AddMessageGroup(ctx, messageGroupsResult[0].GroupID, user.UserID) + } else { + _, err = event.CreateMessageGroup(ctx, user2.UserID, "", "", 5, 100) + user.PopedFlag = model.YES + } + user2.PopFlag = model.YES + dao.UpdateEntity(db, user2, "PopFlag") + if users, _, err := dao.GetUsers(db, 0, "", user2.UserID, nil, nil, nil, 0, 999); err == nil { + for _, v := range users { + v.PopedFlag = model.YES + dao.UpdateEntity(db, v, "PopedFlag") + } + } + } else { + dao.UpdateEntity(db, user2, "PopCount") + } + } + } return err } diff --git a/business/jxstore/event/event.go b/business/jxstore/event/event.go index ab6e6f00c..6ed579c77 100644 --- a/business/jxstore/event/event.go +++ b/business/jxstore/event/event.go @@ -263,6 +263,7 @@ func AddMessageGroup(ctx *jxcontext.Context, groupID int, userID string) (err er messageGroupMembers, err := dao.GetMessageGroupMembers(db, groupID, 0, userID) messageGroupsResult, err := dao.GetMessageGroups(db, userID, groupID, model.GroupTypeMulit, false, "") messageGroupsResult2, err := dao.GetMessageGroups(db, "", groupID, model.GroupTypeMulit, false, "") + messageGroupsResult3, err := dao.GetMessageGroups(db, userID, 0, model.GroupTypeMulit, false, "") messageGroupMembers2, err := dao.GetMessageGroupMembers(db, groupID, 0, "") if err != nil { return err @@ -278,6 +279,9 @@ func AddMessageGroup(ctx *jxcontext.Context, groupID int, userID string) (err er return fmt.Errorf("抱歉该群组已经满员了!") } } + if len(messageGroupsResult3) > 0 { + return fmt.Errorf("您已经拥有[%v]群了,不能再加入其它群!", messageGroupsResult3[0].GroupID) + } messageGroupMember := &model.MessageGroupMember{ GroupID: groupID, diff --git a/business/model/dao/dao_user.go b/business/model/dao/dao_user.go index 1bde0bc55..4f0bbeaec 100644 --- a/business/model/dao/dao_user.go +++ b/business/model/dao/dao_user.go @@ -59,7 +59,7 @@ func GetUserByIDWithMembers(db *DaoDB, fieldName, fieldValue string) (getSelfInf return getSelfInfoResult, err } -func GetUsers(db *DaoDB, userType int, keyword string, userIDs, userID2s, mobiles []string, offset, pageSize int) (userList []*model.User, totalCount int, err error) { +func GetUsers(db *DaoDB, userType int, keyword, popUser string, userIDs, userID2s, mobiles []string, offset, pageSize int) (userList []*model.User, totalCount int, err error) { offset = jxutils.FormalizePageOffset(offset) pageSize = jxutils.FormalizePageSize(pageSize) if userType == 0 { @@ -84,6 +84,10 @@ func GetUsers(db *DaoDB, userType int, keyword string, userIDs, userID2s, mobile sql += " AND t1.mobile IN (" + GenQuestionMarks(len(mobiles)) + ")" sqlParams = append(sqlParams, mobiles) } + if popUser != "" { + sql += " AND t1.pop_user = ?" + sqlParams = append(sqlParams, popUser) + } if keyword != "" { keywordLike := "%" + keyword + "%" sql += " AND (t1.user_id LIKE ? OR t1.user_id2 LIKE ? OR t1.mobile LIKE ? OR t1.email LIKE ? OR t1.name LIKE ?)" diff --git a/business/model/user.go b/business/model/user.go index 5b8d0207d..8fc5d889a 100644 --- a/business/model/user.go +++ b/business/model/user.go @@ -56,8 +56,11 @@ type User struct { LastLoginAt *time.Time `orm:"null" json:"lastLoginAt"` LastLoginIP string `orm:"size(64);column(last_login_ip)" json:"lastLoginIP"` LastLoginType string `orm:"size(16)" json:"lastLoginType"` - PopCode string `json:"popCode"` //推广码 - PopUser string `json:"popUser"` //推广人 + PopCode string `json:"popCode"` //推广码 + PopUser string `json:"popUser"` //推广人 + PopCount int `json:"popCount"` //推荐人数 + PopFlag int `json:"popFlag"` //是否已通过推荐获得免费会员 + PopedFlag int `json:"popedFlag"` //被邀请标志(弹框) } func (*User) TableUnique() [][]string { diff --git a/controllers/user2_controller.go b/controllers/user2_controller.go index c2590bfb6..4737df21b 100644 --- a/controllers/user2_controller.go +++ b/controllers/user2_controller.go @@ -336,7 +336,7 @@ func (c *User2Controller) GetUserByMiniInfo() { // @router /InvestMember [post] func (c *User2Controller) InvestMember() { c.callInvestMember(func(params *tUser2InvestMemberParams) (retVal interface{}, errCode string, err error) { - errCode, err = cms.InvestMember(params.Ctx, params.MemberID) + errCode, err = cms.InvestMember(params.Ctx, params.MemberID, "", false) return retVal, errCode, err }) }