邀请4人得会员
This commit is contained in:
@@ -71,7 +71,7 @@ func TransferLegacyWeixins(mobile string) (err error) {
|
|||||||
if user.Name == "" {
|
if user.Name == "" {
|
||||||
user.Name = user.GetMobile()
|
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 {
|
if err = err2; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ func DeleteConfig(ctx *jxcontext.Context, key, configType string) (err error) {
|
|||||||
errList := errlist.New()
|
errList := errlist.New()
|
||||||
userIDs, err2 := api2.RoleMan.GetRoleUserList(autils.NewRole(key, 0))
|
userIDs, err2 := api2.RoleMan.GetRoleUserList(autils.NewRole(key, 0))
|
||||||
if err = err2; err == nil && len(userIDs) > 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 {
|
if err = err2; err == nil && totalCount > 0 {
|
||||||
// todo
|
// todo
|
||||||
// err = fmt.Errorf("还有人员在使用角色:%s,人员信息:%s", key, utils.MustMarshal(utils.Struct2Map(userList, "compact")))
|
// err = fmt.Errorf("还有人员在使用角色:%s,人员信息:%s", key, utils.MustMarshal(utils.Struct2Map(userList, "compact")))
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxstore/event"
|
||||||
|
|
||||||
"git.rosy.net.cn/jx-callback/business/jxstore/financial"
|
"git.rosy.net.cn/jx-callback/business/jxstore/financial"
|
||||||
|
|
||||||
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
|
"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) {
|
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 {
|
if err == nil {
|
||||||
pagedInfo = &model.PagedInfo{
|
pagedInfo = &model.PagedInfo{
|
||||||
TotalCount: totalCount,
|
TotalCount: totalCount,
|
||||||
@@ -288,7 +290,7 @@ func GetUser(ctx *jxcontext.Context, userID string) (user *model.GetUserResult,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func checkUserType(userID string, userType int8) (err error) {
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -525,15 +527,21 @@ func RefreshUserMemberStatus(ctx *jxcontext.Context) (err error) {
|
|||||||
return err
|
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 (
|
var (
|
||||||
db = dao.GetDB()
|
db = dao.GetDB()
|
||||||
memberCards []*model.MemberCard
|
memberCards []*model.MemberCard
|
||||||
memberCard *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, "")
|
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 {
|
if len(configList) <= 0 {
|
||||||
return "", fmt.Errorf("未找到会员卡配置!")
|
return "", fmt.Errorf("未找到会员卡配置!")
|
||||||
}
|
}
|
||||||
@@ -547,12 +555,14 @@ func InvestMember(ctx *jxcontext.Context, memberID int) (errCode string, err err
|
|||||||
memberCard = v
|
memberCard = v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//验证微信绑定
|
if !isFree {
|
||||||
if err = auth2.CheckWeixinminiAuthBind(ctx.GetUserID()); err != nil {
|
//验证微信绑定
|
||||||
return "", err
|
if err = auth2.CheckWeixinminiAuthBind(userIDReal); err != nil {
|
||||||
}
|
return "", err
|
||||||
if userBill.AccountBalance < memberCard.Price {
|
}
|
||||||
return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!")
|
if userBill.AccountBalance < memberCard.Price {
|
||||||
|
return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
dao.Begin(db)
|
dao.Begin(db)
|
||||||
defer func() {
|
defer func() {
|
||||||
@@ -575,7 +585,7 @@ func InvestMember(ctx *jxcontext.Context, memberID int) (errCode string, err err
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
userMember2 := &model.UserMember{
|
userMember2 := &model.UserMember{
|
||||||
UserID: ctx.GetUserID(),
|
UserID: userIDReal,
|
||||||
MemberType: model.MemberTypeNormal,
|
MemberType: model.MemberTypeNormal,
|
||||||
MemberTypeID: memberID,
|
MemberTypeID: memberID,
|
||||||
}
|
}
|
||||||
@@ -590,10 +600,12 @@ func InvestMember(ctx *jxcontext.Context, memberID int) (errCode string, err err
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//支出明细
|
if !isFree {
|
||||||
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeMember, memberCard.Price); err != nil {
|
//支出明细
|
||||||
dao.Rollback(db)
|
if err = financial.AddExpendUpdateAccount(db, userBill, model.BillTypeMember, memberCard.Price); err != nil {
|
||||||
return
|
dao.Rollback(db)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
dao.Commit(db)
|
dao.Commit(db)
|
||||||
return errCode, err
|
return errCode, err
|
||||||
@@ -650,5 +662,36 @@ func UpdateUser(ctx *jxcontext.Context, payload map[string]interface{}) (err err
|
|||||||
}
|
}
|
||||||
dao.Commit(db)
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -263,6 +263,7 @@ func AddMessageGroup(ctx *jxcontext.Context, groupID int, userID string) (err er
|
|||||||
messageGroupMembers, err := dao.GetMessageGroupMembers(db, groupID, 0, userID)
|
messageGroupMembers, err := dao.GetMessageGroupMembers(db, groupID, 0, userID)
|
||||||
messageGroupsResult, err := dao.GetMessageGroups(db, userID, groupID, model.GroupTypeMulit, false, "")
|
messageGroupsResult, err := dao.GetMessageGroups(db, userID, groupID, model.GroupTypeMulit, false, "")
|
||||||
messageGroupsResult2, err := dao.GetMessageGroups(db, "", 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, "")
|
messageGroupMembers2, err := dao.GetMessageGroupMembers(db, groupID, 0, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -278,6 +279,9 @@ func AddMessageGroup(ctx *jxcontext.Context, groupID int, userID string) (err er
|
|||||||
return fmt.Errorf("抱歉该群组已经满员了!")
|
return fmt.Errorf("抱歉该群组已经满员了!")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(messageGroupsResult3) > 0 {
|
||||||
|
return fmt.Errorf("您已经拥有[%v]群了,不能再加入其它群!", messageGroupsResult3[0].GroupID)
|
||||||
|
}
|
||||||
|
|
||||||
messageGroupMember := &model.MessageGroupMember{
|
messageGroupMember := &model.MessageGroupMember{
|
||||||
GroupID: groupID,
|
GroupID: groupID,
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ func GetUserByIDWithMembers(db *DaoDB, fieldName, fieldValue string) (getSelfInf
|
|||||||
return getSelfInfoResult, err
|
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)
|
offset = jxutils.FormalizePageOffset(offset)
|
||||||
pageSize = jxutils.FormalizePageSize(pageSize)
|
pageSize = jxutils.FormalizePageSize(pageSize)
|
||||||
if userType == 0 {
|
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)) + ")"
|
sql += " AND t1.mobile IN (" + GenQuestionMarks(len(mobiles)) + ")"
|
||||||
sqlParams = append(sqlParams, mobiles)
|
sqlParams = append(sqlParams, mobiles)
|
||||||
}
|
}
|
||||||
|
if popUser != "" {
|
||||||
|
sql += " AND t1.pop_user = ?"
|
||||||
|
sqlParams = append(sqlParams, popUser)
|
||||||
|
}
|
||||||
if keyword != "" {
|
if keyword != "" {
|
||||||
keywordLike := "%" + 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 ?)"
|
sql += " AND (t1.user_id LIKE ? OR t1.user_id2 LIKE ? OR t1.mobile LIKE ? OR t1.email LIKE ? OR t1.name LIKE ?)"
|
||||||
|
|||||||
@@ -56,8 +56,11 @@ type User struct {
|
|||||||
LastLoginAt *time.Time `orm:"null" json:"lastLoginAt"`
|
LastLoginAt *time.Time `orm:"null" json:"lastLoginAt"`
|
||||||
LastLoginIP string `orm:"size(64);column(last_login_ip)" json:"lastLoginIP"`
|
LastLoginIP string `orm:"size(64);column(last_login_ip)" json:"lastLoginIP"`
|
||||||
LastLoginType string `orm:"size(16)" json:"lastLoginType"`
|
LastLoginType string `orm:"size(16)" json:"lastLoginType"`
|
||||||
PopCode string `json:"popCode"` //推广码
|
PopCode string `json:"popCode"` //推广码
|
||||||
PopUser string `json:"popUser"` //推广人
|
PopUser string `json:"popUser"` //推广人
|
||||||
|
PopCount int `json:"popCount"` //推荐人数
|
||||||
|
PopFlag int `json:"popFlag"` //是否已通过推荐获得免费会员
|
||||||
|
PopedFlag int `json:"popedFlag"` //被邀请标志(弹框)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*User) TableUnique() [][]string {
|
func (*User) TableUnique() [][]string {
|
||||||
|
|||||||
@@ -336,7 +336,7 @@ func (c *User2Controller) GetUserByMiniInfo() {
|
|||||||
// @router /InvestMember [post]
|
// @router /InvestMember [post]
|
||||||
func (c *User2Controller) InvestMember() {
|
func (c *User2Controller) InvestMember() {
|
||||||
c.callInvestMember(func(params *tUser2InvestMemberParams) (retVal interface{}, errCode string, err error) {
|
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
|
return retVal, errCode, err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user