diff --git a/controller/account.go b/controller/account.go index b748e99..8f697a2 100644 --- a/controller/account.go +++ b/controller/account.go @@ -70,7 +70,8 @@ func AuthLogin(c *gin.Context) { //fmt.Println("用户信息 userInfo:", userInfo) var user = model.User{} - sqlErr := model.NewUserQuerySet(model.DB).WxOpenIDEq(resp.OpenID).One(&user) + //sqlErr := model.NewUserQuerySet(model.DB).WxOpenIDEq(resp.OpenID).One(&user) + sqlErr := model.NewUserQuerySet(model.DB).TelEq(phone.PhoneNumber).One(&user) if sqlErr != nil && sqlErr != model.RecordNotFound { logger.Error("WxOpenIDEq:", sqlErr) RespJson(c, status.DBOperateError, nil) @@ -79,7 +80,6 @@ func AuthLogin(c *gin.Context) { fmt.Println("InviteUid:", req.InviteUid) nowTime := time.Now() - if req.InviteUid != 0 && req.InviteUid != user.Uid && user.Uid != 0 { // 入参有邀请人id且非本人 inviteUser := model.GetUserByUid(req.InviteUid) effectiveStoreInfo, err := model.GetUserEffectiveStore(req.InviteUid) @@ -87,7 +87,6 @@ func AuthLogin(c *gin.Context) { RespJson(c, status.InviteUserFail, nil) return } - //user.StoreId = uint64(effectiveStoreInfo.StoreID) if user.StoreId == 0 && user.Uid != 0 { // 用户所属门店id为空则更新 _, err = model.NewUserQuerySet(model.DB).UidEq(user.Uid).GetUpdater().SetStoreId(effectiveStoreInfo.StoreID). @@ -98,6 +97,11 @@ func AuthLogin(c *gin.Context) { } if inviteUser.UserType == 2 && user.Uid != 0 { // 店员邀请 + memberLevel := user.MemberLevel + if memberLevel == 0 { + memberLevel = model.MemberLevelUser // 普通会员 + } + exist, err := model.QueryRecordExist( fmt.Sprintf("SELECT * FROM user_invite_record WHERE to_uid = %d AND from_uid = %d ", user.Uid, req.InviteUid)) @@ -111,86 +115,112 @@ func AuthLogin(c *gin.Context) { ToUid: user.Uid, FromUid: req.InviteUid, StoreId: effectiveStoreInfo.StoreID, - Action: 2, // 激活邀请 - SpendType: 1, // 未开通 - MemberLevel: 0, // 0,未开通会员 - First: 1, // 首次 - Scan: 1, // 扫码次数 - ActionTime: nowTime, // 激活时间 + Action: 2, // 没邀请过,则生成1条记录且后台可显示 + SpendType: 1, // 未开通 + MemberLevel: memberLevel, // 会员等级 + First: 1, // 首次 + Scan: 1, // 扫码次数 + ActionTime: nowTime, // 激活时间 } + err = model.DB.Create(firstInviteRecord).Error if err != nil { logger.Error("create user invite record err:", err) } - } - // 已经邀请过,则更新扫码记录 - inviteRecord := &model.UserInviteRecord{ - ToUid: user.Uid, - FromUid: req.InviteUid, - StoreId: effectiveStoreInfo.StoreID, - Action: 1, // 未激活 - SpendType: 1, // 未开通 - MemberLevel: 0, - First: 0, - Scan: 1, - ActionTime: nowTime, - } - err = model.DB.Create(inviteRecord).Error - if err != nil { - logger.Error("create user invite record err:", err) - } - // UserInvite 邀请主要 - var inviteNew model.UserInvite - inviteErr := model.NewUserInviteQuerySet(model.DB).ToUidEq(user.Uid).FromUidEq(req.InviteUid).ActionEq(1). - SpendTypeEq(1).One(&inviteNew) // action:1-未激活 spend_type:1-未开通 - if inviteErr != nil && inviteErr != model.RecordNotFound { - // 是否存在未开通 - logger.Error("user invite err:", err) - } - fmt.Println("inviteErr:", inviteErr) - fmt.Printf("inviteNew:%#v \n", inviteNew) - if inviteErr == model.RecordNotFound { // 邀请表没记录 - memberLevel := user.MemberLevel - if memberLevel == 0 { - memberLevel = model.MemberLevelUser // 普通会员 - } - invite := &model.UserInvite{ - FromUid: req.InviteUid, // 邀请人用户id - UserType: inviteUser.UserType, // 邀请人用户类型 - StoreId: effectiveStoreInfo.StoreID, // 邀请人门店ID --- 邀请人如果有多家门店:优先取有效期短的门店,如果有效期相同则取门店id小的门店 - MemberOpenTime: time.Time{}, // 开通会员时间 - MemberType: memberLevel, // 被邀请用户类型 - MemberStatus: 1, // 被邀请用户会员状态 1-未开通 - ToUid: user.Uid, // 被邀请用户id - Action: 1, // 未激活 - SpendType: 1, // 未开通 - UserInviteRecordId: inviteRecord.ID, // 邀请记录id - FirstInvite: 1, // 首次邀请标志:1 首次邀请 0 非首次 - Scan: 1, // 扫码次数 - } - fmt.Println("创建邀请:", invite) - //count, err := model.NewUserInviteQuerySet(model.DB).FromUidEq(req.InviteUid).ToUidEq(user.Uid).Count() - //if err != nil { - // logger.Error(err) - // RespJson(c, status.InternalServerError, nil) - // return - //} - //if count == 0 { - //} - if err := invite.Create(model.DB); err != nil { - logger.Error(err) - RespJson(c, status.InternalServerError, nil) - return - } - } - if inviteErr == nil { // 邀请表有记录则更新邀请记录ID - //err = model.NewUserInviteQuerySet(model.DB).IDEq(inviteNew.ID).GetUpdater(). - // SetFromUid(req.InviteUid).SetStoreId(inviteUser.StoreId).SetUserInviteRecordId(inviteRecord.ID).Update() - err = model.NewUserInviteQuerySet(model.DB).IDEq(inviteNew.ID).GetUpdater().SetCreatedAt(nowTime). - SetUserInviteRecordId(inviteRecord.ID).Update() - if err != nil { - logger.Error("from uid update user invite err:", err, req.InviteUid) + // 如果用户还未开通会员,此时首次扫某个店员的码,需要再多生成1条记录 + if user.MemberLevel == model.MemberLevelConsumer || user.MemberLevel == model.MemberLevelUser { + // 已经邀请过,则更新扫码记录 + inviteRecord := &model.UserInviteRecord{ + ToUid: user.Uid, + FromUid: req.InviteUid, + StoreId: effectiveStoreInfo.StoreID, + Action: 1, // 未激活 + SpendType: 1, // 未开通 + MemberLevel: memberLevel, // 会员等级 + First: 0, + Scan: 1, + ActionTime: nowTime, + } + err = model.DB.Create(inviteRecord).Error + if err != nil { + logger.Error("create user invite record err:", err) + } + firstInviteRecord.ID = inviteRecord.ID + } + + // UserInvite 邀请主要 + var inviteNew model.UserInvite + //inviteErr := model.NewUserInviteQuerySet(model.DB).ToUidEq(user.Uid).FromUidEq(req.InviteUid).ActionEq(1). + // SpendTypeEq(1).One(&inviteNew) // action:1-未激活 spend_type:1-未开通 + + inviteErr := model.NewUserInviteQuerySet(model.DB).ToUidEq(user.Uid).FromUidEq(req.InviteUid). + OrderDescByCreatedAt().Limit(1).One(&inviteNew) + if inviteErr != nil && inviteErr != model.RecordNotFound { + // 是否存在未开通 + logger.Error("user invite err:", err) + } + fmt.Println("inviteErr:", inviteErr) + fmt.Printf("inviteNew:%#v \n", inviteNew) + if inviteErr == model.RecordNotFound { // 邀请表没记录 + invite := &model.UserInvite{ + FromUid: req.InviteUid, // 邀请人用户id + UserType: inviteUser.UserType, // 邀请人用户类型 + StoreId: effectiveStoreInfo.StoreID, // 邀请人门店ID --- 邀请人如果有多家门店:优先取有效期短的门店,如果有效期相同则取门店id小的门店 + MemberOpenTime: time.Time{}, // 开通会员时间 + MemberType: memberLevel, // 被邀请用户类型 + MemberStatus: 1, // 被邀请用户会员状态 1-未开通 + ToUid: user.Uid, // 被邀请用户id + Action: 1, // 开通会员 + SpendType: 1, // 未开通 + UserInviteRecordId: firstInviteRecord.ID, // 邀请记录id + FirstInvite: 1, // 首次邀请标志:1 首次邀请 0 非首次 + Scan: 1, // 扫码次数 + } + fmt.Println("创建邀请:", invite) + + if user.MemberLevel == model.MemberLevelGold || user.MemberLevel == model.MemberLevelPeriod || + user.MemberLevel == model.MemberLevelPlatinum || user.MemberLevel == model.MemberLevelBlackGold { + invite.RenewHide = 1 + invite.Action = 2 // 续费会员 + } + + if err := invite.Create(model.DB); err != nil { + logger.Error(err) + RespJson(c, status.InternalServerError, nil) + return + } + } + //// 已经邀请过,则更新扫码记录 + //inviteRecord := &model.UserInviteRecord{ + // ToUid: user.Uid, + // FromUid: req.InviteUid, + // StoreId: effectiveStoreInfo.StoreID, + // Action: 1, // 未激活 + // SpendType: 1, // 未开通 + // MemberLevel: memberLevel, // 会员等级 + // First: 0, + // Scan: 1, + // ActionTime: nowTime, + //} + //if user.MemberLevel == model.MemberLevelGold || user.MemberLevel == model.MemberLevelPeriod || + // user.MemberLevel == model.MemberLevelPlatinum || user.MemberLevel == model.MemberLevelBlackGold { + // inviteRecord.Action = 2 // 激活后邀请 + //} + //err = model.DB.Create(inviteRecord).Error + //if err != nil { + // logger.Error("create user invite record err:", err) + //} + + } else { // 邀请过,则更新邀请时间 + var inviteNew model.UserInvite + inviteErr := model.NewUserInviteQuerySet(model.DB).ToUidEq(user.Uid).FromUidEq(req.InviteUid). + OrderDescByCreatedAt().Limit(1).One(&inviteNew) + if inviteErr == nil { + err = model.NewUserInviteQuerySet(model.DB).IDEq(inviteNew.ID).GetUpdater().SetCreatedAt(nowTime).Update() + if err != nil { + logger.Error("NewUserInviteQuerySet err:", err, req.InviteUid) + } } } } @@ -245,10 +275,10 @@ func AuthLogin(c *gin.Context) { ToUid: user.Uid, FromUid: req.InviteUid, StoreId: effectiveStoreInfo.StoreID, - Action: 2, // 激活邀请 - SpendType: 1, // 未开通 - MemberLevel: 0, // 未开通会员 - First: 1, // 首次邀请 + Action: 2, // 激活邀请 + SpendType: 1, // 未开通 + MemberLevel: model.MemberLevelUser, // 普通会员 + First: 1, // 首次邀请 Scan: 1, ActionTime: nowTime, } @@ -261,9 +291,9 @@ func AuthLogin(c *gin.Context) { ToUid: user.Uid, FromUid: req.InviteUid, StoreId: effectiveStoreInfo.StoreID, - Action: 1, // 1-未激活 - SpendType: 1, // 未开通 - MemberLevel: 0, // 未开通会员 + Action: 1, // 1-未激活 + SpendType: 1, // 未开通 + MemberLevel: model.MemberLevelUser, // 普通会员 First: 0, Scan: 1, ActionTime: nowTime, @@ -762,6 +792,7 @@ func UserCodeToCoupon(c *gin.Context) { return } + var inviteUid, inviteStoreId, userMemberLevel uint32 if len(req.Code) == 6 { user := model.GetUserByUid(uc.Uid) if user == nil { @@ -776,6 +807,8 @@ func UserCodeToCoupon(c *gin.Context) { return } + userMemberLevel = user.MemberLevel + //if user.OpenMemberTime.IsZero() { // logger.Error("user is not member") // RespJson(c, status.UserNotMember, nil) @@ -789,6 +822,8 @@ func UserCodeToCoupon(c *gin.Context) { RespJson(c, status.InternalServerError, nil) return } + inviteUid = shopperPromotionCode.Uid + inviteStoreId = shopperPromotionCode.StoreId //model.UserCoupon{} @@ -869,6 +904,97 @@ func UserCodeToCoupon(c *gin.Context) { } } + // 使用店员兑换码才产生邀请记录 + logger.Info("666") + logger.Info("uc.Uid:", uc.Uid) + logger.Info("inviteUid:", inviteUid) + exist, err = model.QueryRecordExist( + fmt.Sprintf("SELECT * FROM user_invite_record WHERE to_uid = %d AND from_uid = %d ", + uc.Uid, inviteUid)) + if err != nil { + logger.Error("query err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + logger.Info("exist:", exist) + if !exist { // 未邀请过,则添加邀请记录:首次邀请记录 + firstInviteRecord := &model.UserInviteRecord{ + ToUid: uc.Uid, + FromUid: inviteUid, + StoreId: uint64(inviteStoreId), + Action: 2, // 激活邀请 + SpendType: 1, // 未开通 + MemberLevel: userMemberLevel, // 会员等级 + First: 1, // 首次 + Scan: 1, // 扫码次数 + ActionTime: time.Now(), // 激活时间 + } + + err = model.DB.Create(firstInviteRecord).Error + if err != nil { + logger.Error("create user invite record err:", err) + } + } + // 已经邀请过,则更新扫码记录 + inviteRecord := &model.UserInviteRecord{ + ToUid: uc.Uid, + FromUid: inviteUid, + StoreId: uint64(inviteStoreId), + Action: 1, // 未激活 + SpendType: 1, // 未开通 + MemberLevel: userMemberLevel, // 会员等级 + First: 0, + Scan: 1, + ActionTime: time.Now(), + } + err = model.DB.Create(inviteRecord).Error + if err != nil { + logger.Error("create user invite record err:", err) + } + // UserInvite 邀请主要 + var inviteNew model.UserInvite + inviteErr := model.NewUserInviteQuerySet(model.DB).ToUidEq(uc.Uid).FromUidEq(inviteUid).ActionEq(1). + SpendTypeEq(1).One(&inviteNew) // action:1-未激活 spend_type:1-未开通 + if inviteErr != nil && inviteErr != model.RecordNotFound { + // 是否存在未开通 + logger.Error("user invite err:", err) + } + logger.Info("inviteErr:", inviteErr) + fmt.Println("inviteErr:", inviteErr) + fmt.Printf("inviteNew:%#v \n", inviteNew) + if inviteErr == model.RecordNotFound { // 邀请表没记录 + logger.Info("inviteErr == model.RecordNotFound") + invite := &model.UserInvite{ + FromUid: inviteUid, // 邀请人用户id + UserType: 2, // 邀请人用户类型 + StoreId: uint64(inviteStoreId), // 邀请人门店ID --- 邀请人如果有多家门店:优先取有效期短的门店,如果有效期相同则取门店id小的门店 + MemberOpenTime: time.Time{}, // 开通会员时间 + MemberType: userMemberLevel, // 被邀请用户类型 + MemberStatus: 1, // 被邀请用户会员状态 1-未开通 + ToUid: uc.Uid, // 被邀请用户id + Action: 1, // 未激活 + SpendType: 1, // 未开通 + UserInviteRecordId: inviteRecord.ID, // 邀请记录id + FirstInvite: 1, // 首次邀请标志:1 首次邀请 0 非首次 + Scan: 1, // 扫码次数 + } + fmt.Println("创建邀请:", invite) + if err := invite.Create(model.DB); err != nil { + logger.Error(err) + RespJson(c, status.InternalServerError, nil) + return + } + } + + if inviteErr == nil { // 邀请表有记录则更新邀请记录ID + logger.Info("inviteErr == nil") + err = model.NewUserInviteQuerySet(model.DB).IDEq(inviteNew.ID).GetUpdater().SetCreatedAt(time.Now()). + SetUserInviteRecordId(inviteRecord.ID).Update() + if err != nil { + logger.Error("from uid update user invite err:", err, inviteStoreId) + } + } + RespOK(c, nil) return } diff --git a/controller/game_card.go b/controller/game_card.go index 9543147..c48803d 100644 --- a/controller/game_card.go +++ b/controller/game_card.go @@ -6,14 +6,6 @@ import ( "encoding/json" "encoding/xml" "fmt" - "github.com/codinl/go-logger" - "github.com/gin-gonic/gin" - "github.com/rs/zerolog/log" - "github.com/wechatpay-apiv3/wechatpay-go/core/auth/verifiers" - "github.com/wechatpay-apiv3/wechatpay-go/core/downloader" - "github.com/wechatpay-apiv3/wechatpay-go/core/notify" - "github.com/wechatpay-apiv3/wechatpay-go/services/payments" - wechatpayutils "github.com/wechatpay-apiv3/wechatpay-go/utils" "io/ioutil" "mh-server/config" aliyun "mh-server/lib/ali" @@ -26,6 +18,15 @@ import ( "strconv" "strings" "time" + + "github.com/codinl/go-logger" + "github.com/gin-gonic/gin" + "github.com/rs/zerolog/log" + "github.com/wechatpay-apiv3/wechatpay-go/core/auth/verifiers" + "github.com/wechatpay-apiv3/wechatpay-go/core/downloader" + "github.com/wechatpay-apiv3/wechatpay-go/core/notify" + "github.com/wechatpay-apiv3/wechatpay-go/services/payments" + wechatpayutils "github.com/wechatpay-apiv3/wechatpay-go/utils" ) func GameCardList(c *gin.Context) { @@ -267,22 +268,14 @@ type ( // // 微信推送支付通知 func PushWXPayNotice(c *gin.Context) { - fmt.Println("微信推送支付通知") + fmt.Println("微信推送支付通知-start") body, err := ioutil.ReadAll(c.Request.Body) if err != nil { logger.Error(err) } - logger.Error("xml Request.Body1:", string(body)) + logger.Info("xml Request.Body1:", string(body)) var notifyInfo wxpay.WechatNotifyInfo - //if err := c.ShouldBindXML(¬ify); err != nil { - // logger.Error(err) - // RespBodyXML(c, map[string]string{ - // "return_code": "FAIL", - // }) - // return - //} - err = xml.Unmarshal(body, ¬ifyInfo) if err != nil { logger.Error(err) @@ -555,21 +548,27 @@ func PushWXPayNotice(c *gin.Context) { // 邀请记录 var invite model.UserInvite - //err = model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).OrderDescByID().Limit(1).One(&invite) + logger.Info("record.Uid:", record.Uid) err = model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).OrderDescByCreatedAt().Limit(1).One(&invite) + logger.Info("invite:", invite) + logger.Info("invite ID:", invite.ID) if err != nil && err != model.RecordNotFound { logger.Error("err:", err) } else { if err == nil { - //qs := model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).GetUpdater() - if invite.Action != 2 { // 2-激活邀请 + logger.Info("111") + effectiveStoreInfo, err := model.GetUserEffectiveStore(invite.FromUid) + if err != nil { + logger.Error("GetUserEffectiveStore err:", err) + effectiveStoreInfo.StoreID = invite.StoreId + } + + if invite.Action == 1 { // 1-未激活 用户首次开通 + logger.Info("invite.Action == 1") qs := model.NewUserInviteQuerySet(model.DB).IDEq(invite.ID).GetUpdater() - // SpendType 类型 - //if user.MemberLevel != 2 { - // qs = qs.SetMemberOpenTime(newTime).SetMemberLevel(record.MemberLevel) - //} if isShopAssistantCode { qs = qs.SetInviteForm(1) + invite.RenewHide = 0 } qs = qs.SetMemberOpenTime(newTime).SetMemberLevel(record.MemberLevel) _, err = qs.SetMemberType(2).SetMemberStatus(2). @@ -581,16 +580,18 @@ func PushWXPayNotice(c *gin.Context) { go func() { err = model.NewUserInviteRecordQuerySet(model.DB).IDEq(invite.UserInviteRecordId).GetUpdater(). SetAction(2).SetSpendType(spendType).SetMemberLevel(record.MemberLevel). - SetActionTime(newTime).SetMemberGenre(record.MemberGenre).Update() + SetActionTime(newTime).SetMemberGenre(record.MemberGenre).SetRenewHide(invite.RenewHide).Update() if err != nil { logger.Error("update user invite record err:", err) } }() } - } else { + } else { // 续费会员-用户直接续费 + logger.Info("invite.Action == 2") inviteRecordNew := &model.UserInviteRecord{ - ToUid: invite.ToUid, - FromUid: invite.FromUid, + ToUid: invite.ToUid, + //FromUid: invite.FromUid, + //StoreId: effectiveStoreInfo.StoreID, Action: 2, SpendType: spendType, MemberLevel: record.MemberLevel, @@ -598,6 +599,13 @@ func PushWXPayNotice(c *gin.Context) { Scan: 0, // 自动生成 ActionTime: newTime, MemberGenre: record.MemberGenre, + RenewHide: 1, + } + if isShopAssistantCode { // 如果使用了优惠券,则是店员邀请续费;否则是用户自己发起续费 + inviteRecordNew.Scan = 1 + inviteRecordNew.RenewHide = 0 // 店员干预续费 + inviteRecordNew.FromUid = invite.FromUid + inviteRecordNew.StoreId = effectiveStoreInfo.StoreID } err = model.DB.Create(inviteRecordNew).Error if err != nil { @@ -605,15 +613,15 @@ func PushWXPayNotice(c *gin.Context) { } userInviteNew := &model.UserInvite{ - FromUid: invite.FromUid, - UserType: invite.UserType, - StoreId: invite.StoreId, + //FromUid: invite.FromUid, + //UserType: invite.UserType, + //StoreId: effectiveStoreInfo.StoreID, //MemberOpenTime: invite.MemberOpenTime, + //StoreType: invite.StoreType, MemberOpenTime: time.Now(), MemberType: 2, MemberStatus: 2, ToUid: invite.ToUid, - StoreType: invite.StoreType, Action: 2, SpendType: spendType, MemberLevel: record.MemberLevel, @@ -621,9 +629,16 @@ func PushWXPayNotice(c *gin.Context) { FirstInvite: 0, Scan: 0, MemberGenre: record.MemberGenre, + RenewHide: 1, } - if isShopAssistantCode { + if isShopAssistantCode { // 如果使用了优惠券,则是店员邀请续费;否则是用户自己发起续费 + userInviteNew.Scan = 1 + userInviteNew.RenewHide = 0 userInviteNew.InviteForm = 1 + userInviteNew.FromUid = invite.FromUid + userInviteNew.StoreId = effectiveStoreInfo.StoreID + userInviteNew.UserType = invite.UserType + userInviteNew.StoreType = invite.StoreType } err = model.DB.Create(userInviteNew).Error if err != nil { @@ -634,20 +649,6 @@ func PushWXPayNotice(c *gin.Context) { if invite.FromUid != 0 { inviteUser := model.GetUserByUid(invite.FromUid) if inviteUser != nil { - //if inviteUser.UserType != 2 /*不是店员*/ && user.MemberLevel != 2 { // 邀请 新用户推送一次 - // err = model.SendUserVm(inviteUser.Uid, record.MemberLevel, 1) - // if err != nil { - // logger.Error("send user vm err:", err) - // } - //} - - if spendType == 2 { // 开通会员 - //err = model.SendUserVm(user.Uid, record.MemberLevel, 0) - //if err != nil { - // logger.Error("send user vm err:", err) - //} - } - openMemberChannel := model.OpenMemberChannelUserInvite userQs := model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater() @@ -657,14 +658,24 @@ func PushWXPayNotice(c *gin.Context) { userQs = userQs.SetCooperativeBusinessId(inviteUser.CooperativeBusinessId). SetCooperativeName(inviteUser.CooperativeName) + effectiveStoreId := invite.StoreId + autoRenewFlag := true // 自动续费 + if isShopAssistantCode { // 如果使用了优惠券,则是店员邀请续费;否则是用户自己发起续费 + effectiveStoreId = effectiveStoreInfo.StoreID + userQs = userQs.SetStoreId(effectiveStoreId) // 更新用户门店:邀请人的有效门店 + autoRenewFlag = false // 店员干预续费 + } + fmt.Println("用户续费---") model.AddCooperativeMemberRenewal(inviteUser.CooperativeBusinessId, - uint32(inviteUser.StoreId), inviteUser.Uid, int(record.MemberLevel), int(record.MemberGenre)) - + uint32(effectiveStoreId), inviteUser.Uid, int(record.MemberLevel), + int(record.MemberGenre), autoRenewFlag) } else { fmt.Println("用户开通------") model.AddCooperativeMemberPromotion(inviteUser.CooperativeBusinessId, - uint32(inviteUser.StoreId), inviteUser.Uid, int(record.MemberLevel), int(record.MemberGenre)) + uint32(effectiveStoreInfo.StoreID), inviteUser.Uid, int(record.MemberLevel), + int(record.MemberGenre)) + userQs = userQs.SetStoreId(effectiveStoreInfo.StoreID) // 更新用户门店:邀请人的有效门店 } } @@ -683,8 +694,6 @@ func PushWXPayNotice(c *gin.Context) { logger.Error("send user vm err:", err) } - if user.MemberLevel != 2 { - } go func() { err = model.DB.Create(memberRecord).Error if err != nil { @@ -907,10 +916,17 @@ func PushWXPayNotice(c *gin.Context) { logger.Error("err:", err) } else { if err == nil { + effectiveStoreInfo, err := model.GetUserEffectiveStore(invite.FromUid) + if err != nil { + logger.Error("GetUserEffectiveStore err:", err) + effectiveStoreInfo.StoreID = invite.StoreId + } + if invite.Action != 2 { qs := model.NewUserInviteQuerySet(model.DB).IDEq(invite.ID).GetUpdater() if isShopAssistantCode { qs = qs.SetInviteForm(1) + invite.RenewHide = 0 } qs = qs.SetMemberOpenTime(newTime).SetMemberLevel(record.MemberLevel) _, err = qs.SetMemberType(record.MemberLevel).SetMemberStatus(2). @@ -922,7 +938,7 @@ func PushWXPayNotice(c *gin.Context) { go func() { err = model.NewUserInviteRecordQuerySet(model.DB).IDEq(invite.UserInviteRecordId).GetUpdater(). SetAction(2).SetSpendType(4).SetMemberLevel(record.MemberLevel). - SetActionTime(newTime).SetMemberGenre(record.MemberGenre).Update() + SetActionTime(newTime).SetMemberGenre(record.MemberGenre).SetRenewHide(invite.RenewHide).Update() if err != nil { logger.Error("update user invite record err:", err) } @@ -932,6 +948,7 @@ func PushWXPayNotice(c *gin.Context) { inviteRecordNew := &model.UserInviteRecord{ ToUid: invite.ToUid, FromUid: invite.FromUid, + StoreId: effectiveStoreInfo.StoreID, Action: 2, SpendType: 4, MemberLevel: record.MemberLevel, @@ -939,6 +956,10 @@ func PushWXPayNotice(c *gin.Context) { Scan: 0, // 自动生成 ActionTime: newTime, MemberGenre: record.MemberGenre, + RenewHide: 1, + } + if isShopAssistantCode { + inviteRecordNew.RenewHide = 0 } err = model.DB.Create(inviteRecordNew).Error if err != nil { @@ -948,7 +969,7 @@ func PushWXPayNotice(c *gin.Context) { userInviteNew := &model.UserInvite{ FromUid: invite.FromUid, UserType: invite.UserType, - StoreId: invite.StoreId, + StoreId: effectiveStoreInfo.StoreID, //MemberOpenTime: invite.MemberOpenTime, MemberOpenTime: time.Now(), MemberType: 2, @@ -962,9 +983,11 @@ func PushWXPayNotice(c *gin.Context) { FirstInvite: 0, Scan: 0, MemberGenre: record.MemberGenre, + RenewHide: 1, } if isShopAssistantCode { userInviteNew.InviteForm = 1 + userInviteNew.RenewHide = 0 } err = model.DB.Create(userInviteNew).Error if err != nil { @@ -981,15 +1004,20 @@ func PushWXPayNotice(c *gin.Context) { } fmt.Println("用户升级---") + effectiveStoreInfo, err := model.GetUserEffectiveStore(invite.FromUid) + if err != nil { + logger.Error("GetUserEffectiveStore err:", err) + effectiveStoreInfo.StoreID = invite.StoreId + } // 统计用户升级的数量,方便前端展示 // 分3种情况:1-店员干预(使用了店员兑换码兑换的优惠券)、2-自动续费(开通会员时有店员邀请,原价or优惠券续费) // 3-自动续费(自己开通会员,原价or优惠券续费) 目前只有1算店员提成,正常1和2都会算;3不算提成 if isShopAssistantCode { // 1-店员干预(使用了店员兑换码兑换的优惠券) model.AddCooperativeMemberUpgrade(user.CooperativeBusinessId, - uint32(invite.StoreId), invite.FromUid, user.MemberLevel, int(record.MemberLevel), false) + uint32(effectiveStoreInfo.StoreID), invite.FromUid, user.MemberLevel, int(record.MemberLevel), false) } else if !isShopAssistantCode && err != model.RecordNotFound { // 2-自动续费(开通会员时有店员邀请,原价or优惠券续费) model.AddCooperativeMemberUpgrade(user.CooperativeBusinessId, - uint32(invite.StoreId), invite.FromUid, user.MemberLevel, int(record.MemberLevel), true) + uint32(effectiveStoreInfo.StoreID), invite.FromUid, user.MemberLevel, int(record.MemberLevel), true) } _, err = model.NewUserOpenMemberRecordQuerySet(model.DB).IDEq(record.ID).GetUpdater().SetState(2).UpdateNum() @@ -1208,7 +1236,7 @@ func PushWXPayNotice(c *gin.Context) { if err != nil { logger.Error("create fund record err:", err) } - logger.Debug("微信推动支付通知") + logger.Debug("微信推送支付通知-end") ret.ReturnCode = "SUCCESS" RespBodyXML(c, ret) } @@ -1233,9 +1261,10 @@ type HmPushWXPayNoticeReq struct { SignType string `json:"sign_type" form:"sign_type"` } -// 微信推送支付通知 +// HmPushWXPayNotice 河马付推送支付通知 func HmPushWXPayNotice(c *gin.Context) { - fmt.Println("微信推送支付通知") + fmt.Println("河马付推送支付通知-start") + logger.Debug("河马付推送支付通知-start") bankOrderNo := c.Query("bank_order_no") outOrderNo := c.Query("out_order_no") @@ -1411,9 +1440,9 @@ func HmPushWXPayNotice(c *gin.Context) { logger.Error("err:", err) return } else { - spendType = uint32(2) - if !user.OpenMemberTime.IsZero() { - spendType = 3 + spendType = uint32(2) // 2-开通会员 + if !user.OpenMemberTime.IsZero() && user.MemberExpire.After(time.Now()) { + spendType = 3 // 3-续费 } isShopAssistantCode := false @@ -1459,9 +1488,9 @@ func HmPushWXPayNotice(c *gin.Context) { if user.OpenMemberTime.IsZero() { //openMemberTime = user.OpenMemberTime userUpdateQs = userUpdateQs.SetOpenMemberTime(newTime).SetOpenMemberLevel(record.MemberLevel) - memberRecord.Type = model.GetUserMemberRecordType(record.MemberLevel, 1) + memberRecord.Type = model.GetUserMemberRecordType(record.MemberLevel, 1) // 开通会员类型 } else { - memberRecord.Type = model.GetUserMemberRecordType(record.MemberLevel, 2) + memberRecord.Type = model.GetUserMemberRecordType(record.MemberLevel, 2) // 续费会员类型 } _, err = userUpdateQs.UpdateNum() if err != nil { @@ -1469,7 +1498,7 @@ func HmPushWXPayNotice(c *gin.Context) { return } - if record.UserCouponId > 0 { + if record.UserCouponId > 0 { // 如果使用了会员优惠券,更新优惠券状态为2-已使用 err = model.NewUserCouponQuerySet(model.DB).IDEq(record.UserCouponId).GetUpdater(). SetState(2).SetUseTime(utils.Now()).Update() if err != nil { @@ -1481,7 +1510,7 @@ func HmPushWXPayNotice(c *gin.Context) { if err != nil { logger.Error("user coupon err:", err) } else { - if userCoupon.Approach == 1 { + if userCoupon.Approach == 1 { // 当优惠券是通过店员兑换码获取,则创建邀请记录;此类用户是会员续费用户 isShopAssistantCode = true err = model.StorePromotion(userCoupon.PromotionalSales, userCoupon.Uid, nil, &user) if err != nil { @@ -1493,7 +1522,6 @@ func HmPushWXPayNotice(c *gin.Context) { // 邀请记录 var invite model.UserInvite - //err = model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).OrderDescByID().Limit(1).One(&invite) err = model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).OrderDescByCreatedAt().Limit(1).One(&invite) if err != nil && err != model.RecordNotFound { logger.Error("err:", err) @@ -1505,11 +1533,12 @@ func HmPushWXPayNotice(c *gin.Context) { effectiveStoreInfo.StoreID = invite.StoreId } - if invite.Action != 2 { // 首次开通会员 + if invite.Action == 1 { // 首次开通会员 qs := model.NewUserInviteQuerySet(model.DB).IDEq(invite.ID).GetUpdater() if isShopAssistantCode { qs = qs.SetInviteForm(1) + invite.RenewHide = 0 } qs = qs.SetMemberOpenTime(newTime).SetMemberLevel(record.MemberLevel) _, err = qs.SetMemberType(2).SetMemberStatus(2). @@ -1521,7 +1550,7 @@ func HmPushWXPayNotice(c *gin.Context) { go func() { err = model.NewUserInviteRecordQuerySet(model.DB).IDEq(invite.UserInviteRecordId).GetUpdater(). SetAction(2).SetSpendType(spendType).SetMemberLevel(record.MemberLevel). - SetActionTime(newTime).SetMemberGenre(record.MemberGenre).Update() + SetActionTime(newTime).SetMemberGenre(record.MemberGenre).SetRenewHide(invite.RenewHide).Update() if err != nil { logger.Error("update user invite record err:", err) } @@ -1529,9 +1558,9 @@ func HmPushWXPayNotice(c *gin.Context) { } } else { // 续费会员-用户直接续费 inviteRecordNew := &model.UserInviteRecord{ - ToUid: invite.ToUid, - FromUid: invite.FromUid, - StoreId: effectiveStoreInfo.StoreID, + ToUid: invite.ToUid, + //FromUid: invite.FromUid, + //StoreId: effectiveStoreInfo.StoreID, Action: 2, SpendType: spendType, MemberLevel: record.MemberLevel, @@ -1539,6 +1568,13 @@ func HmPushWXPayNotice(c *gin.Context) { Scan: 0, // 自动生成 ActionTime: newTime, MemberGenre: record.MemberGenre, + RenewHide: 1, + } + if isShopAssistantCode { // 如果使用了优惠券,则是店员邀请续费;否则是用户自己发起续费 + inviteRecordNew.Scan = 1 + inviteRecordNew.RenewHide = 0 // 店员干预续费 + inviteRecordNew.FromUid = invite.FromUid + inviteRecordNew.StoreId = effectiveStoreInfo.StoreID } err = model.DB.Create(inviteRecordNew).Error if err != nil { @@ -1546,25 +1582,32 @@ func HmPushWXPayNotice(c *gin.Context) { } userInviteNew := &model.UserInvite{ - FromUid: invite.FromUid, - UserType: invite.UserType, - StoreId: invite.StoreId, - //MemberOpenTime: invite.MemberOpenTime, + //FromUid: invite.FromUid, + //UserType: invite.UserType, + //StoreId: effectiveStoreInfo.StoreID, + //StoreType: invite.StoreType, MemberOpenTime: time.Now(), MemberType: 2, MemberStatus: 2, ToUid: invite.ToUid, - StoreType: invite.StoreType, Action: 2, SpendType: spendType, MemberLevel: record.MemberLevel, UserInviteRecordId: inviteRecordNew.ID, FirstInvite: 0, + Scan: 0, MemberGenre: record.MemberGenre, + RenewHide: 1, + //MemberOpenTime: invite.MemberOpenTime, } if isShopAssistantCode { // 如果使用了优惠券,则是店员邀请续费;否则是用户自己发起续费 + userInviteNew.Scan = 1 + userInviteNew.RenewHide = 0 userInviteNew.InviteForm = 1 + userInviteNew.FromUid = invite.FromUid userInviteNew.StoreId = effectiveStoreInfo.StoreID + userInviteNew.UserType = invite.UserType + userInviteNew.StoreType = invite.StoreType } err = model.DB.Create(userInviteNew).Error if err != nil { @@ -1573,37 +1616,49 @@ func HmPushWXPayNotice(c *gin.Context) { } if invite.FromUid != 0 { + logger.Info("invite.FromUid != 0") + fmt.Println("invite.FromUid != 0") inviteUser := model.GetUserByUid(invite.FromUid) if inviteUser != nil { openMemberChannel := model.OpenMemberChannelUserInvite userQs := model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater() + logger.Info("userQs:", userQs) + fmt.Println("userQs:", userQs) if inviteUser.UserType == 2 { openMemberChannel = model.OpenMemberChannelStorePromotion if !user.OpenMemberTime.IsZero() { userQs = userQs.SetCooperativeBusinessId(inviteUser.CooperativeBusinessId). SetCooperativeName(inviteUser.CooperativeName) + autoRenewFlag := true // 自动续费 effectiveStoreId := invite.StoreId if isShopAssistantCode { // 如果使用了优惠券,则是店员邀请续费;否则是用户自己发起续费 effectiveStoreId = effectiveStoreInfo.StoreID + userQs = userQs.SetStoreId(effectiveStoreId) // 更新用户门店:邀请人的有效门店 + autoRenewFlag = false // 店员干预续费 } fmt.Println("用户续费---") model.AddCooperativeMemberRenewal(inviteUser.CooperativeBusinessId, - uint32(effectiveStoreId), inviteUser.Uid, int(record.MemberLevel), int(record.MemberGenre)) - + uint32(effectiveStoreId), inviteUser.Uid, int(record.MemberLevel), + int(record.MemberGenre), autoRenewFlag) } else { fmt.Println("用户开通------") model.AddCooperativeMemberPromotion(inviteUser.CooperativeBusinessId, uint32(effectiveStoreInfo.StoreID), inviteUser.Uid, int(record.MemberLevel), int(record.MemberGenre)) + userQs = userQs.SetStoreId(effectiveStoreInfo.StoreID) // 更新用户门店:邀请人的有效门店 } } + logger.Info("userQs UpdateNum start") + fmt.Println("userQs UpdateNum start") _, err = userQs.SetOpenMemberChannel(openMemberChannel).UpdateNum() if err != nil { logger.Error("err:", err) } + logger.Info("userQs UpdateNum end") + fmt.Println("userQs UpdateNum end") } } } @@ -1615,8 +1670,6 @@ func HmPushWXPayNotice(c *gin.Context) { logger.Error("send user vm err:", err) } - if user.MemberLevel != 2 { - } go func() { err = model.DB.Create(memberRecord).Error if err != nil { @@ -1840,10 +1893,17 @@ func HmPushWXPayNotice(c *gin.Context) { logger.Error("err:", err) } else { if err == nil { + effectiveStoreInfo, err := model.GetUserEffectiveStore(invite.FromUid) + if err != nil { + logger.Error("GetUserEffectiveStore err:", err) + effectiveStoreInfo.StoreID = invite.StoreId + } + if invite.Action != 2 { qs := model.NewUserInviteQuerySet(model.DB).IDEq(invite.ID).GetUpdater() if isShopAssistantCode { qs = qs.SetInviteForm(1) + invite.RenewHide = 0 } qs = qs.SetMemberOpenTime(newTime).SetMemberLevel(record.MemberLevel) _, err = qs.SetMemberType(record.MemberLevel).SetMemberStatus(2). @@ -1855,7 +1915,7 @@ func HmPushWXPayNotice(c *gin.Context) { go func() { err = model.NewUserInviteRecordQuerySet(model.DB).IDEq(invite.UserInviteRecordId).GetUpdater(). SetAction(2).SetSpendType(4).SetMemberLevel(record.MemberLevel). - SetActionTime(newTime).SetMemberGenre(record.MemberGenre).Update() + SetActionTime(newTime).SetMemberGenre(record.MemberGenre).SetRenewHide(invite.RenewHide).Update() if err != nil { logger.Error("update user invite record err:", err) } @@ -1865,6 +1925,7 @@ func HmPushWXPayNotice(c *gin.Context) { inviteRecordNew := &model.UserInviteRecord{ ToUid: invite.ToUid, FromUid: invite.FromUid, + StoreId: effectiveStoreInfo.StoreID, Action: 2, SpendType: 4, MemberLevel: record.MemberLevel, @@ -1872,6 +1933,10 @@ func HmPushWXPayNotice(c *gin.Context) { Scan: 0, // 自动生成 ActionTime: newTime, MemberGenre: record.MemberGenre, + RenewHide: 1, + } + if isShopAssistantCode { + inviteRecordNew.RenewHide = 0 } err = model.DB.Create(inviteRecordNew).Error if err != nil { @@ -1881,7 +1946,7 @@ func HmPushWXPayNotice(c *gin.Context) { userInviteNew := &model.UserInvite{ FromUid: invite.FromUid, UserType: invite.UserType, - StoreId: invite.StoreId, + StoreId: effectiveStoreInfo.StoreID, //MemberOpenTime: invite.MemberOpenTime, MemberOpenTime: time.Now(), MemberType: 2, @@ -1895,9 +1960,11 @@ func HmPushWXPayNotice(c *gin.Context) { FirstInvite: 0, Scan: 0, MemberGenre: record.MemberGenre, + RenewHide: 1, } if isShopAssistantCode { userInviteNew.InviteForm = 1 + userInviteNew.RenewHide = 0 } err = model.DB.Create(userInviteNew).Error if err != nil { @@ -1914,15 +1981,21 @@ func HmPushWXPayNotice(c *gin.Context) { } fmt.Println("用户升级---") + effectiveStoreInfo, err := model.GetUserEffectiveStore(invite.FromUid) + if err != nil { + logger.Error("GetUserEffectiveStore err:", err) + effectiveStoreInfo.StoreID = invite.StoreId + } + // 统计用户升级的数量,方便前端展示 // 分3种情况:1-店员干预(使用了店员兑换码兑换的优惠券)、2-自动续费(开通会员时有店员邀请,原价or优惠券续费) // 3-自动续费(自己开通会员,原价or优惠券续费) 目前只有1算店员提成,正常1和2都会算;3不算提成 if isShopAssistantCode { // 1-店员干预(使用了店员兑换码兑换的优惠券) model.AddCooperativeMemberUpgrade(user.CooperativeBusinessId, - uint32(invite.StoreId), invite.FromUid, user.MemberLevel, int(record.MemberLevel), false) + uint32(effectiveStoreInfo.StoreID), invite.FromUid, user.MemberLevel, int(record.MemberLevel), false) } else if !isShopAssistantCode && err != model.RecordNotFound { // 2-自动续费(开通会员时有店员邀请,原价or优惠券续费) model.AddCooperativeMemberUpgrade(user.CooperativeBusinessId, - uint32(invite.StoreId), invite.FromUid, user.MemberLevel, int(record.MemberLevel), true) + uint32(effectiveStoreInfo.StoreID), invite.FromUid, user.MemberLevel, int(record.MemberLevel), true) } _, err = model.NewUserOpenMemberRecordQuerySet(model.DB).IDEq(record.ID).GetUpdater().SetState(2).UpdateNum() @@ -2136,7 +2209,7 @@ func HmPushWXPayNotice(c *gin.Context) { if err != nil { logger.Error("create fund record err:", err) } - logger.Debug("微信推动支付通知") + logger.Debug("河马付推送支付通知-end") RespOK(c, "SUCCESS") } @@ -2288,7 +2361,7 @@ func PayCallBackHandle(notify wxpay.WechatNotifyInfo, payKey string) (string, er return "", err } sign = strings.ToUpper(sign) - logger.Error("微信推送支付通知 sign : payKey", sign, payKey) + logger.Info("微信推送支付通知 sign : payKey", sign, payKey) return sign, err } diff --git a/model/autogenerated_invite.go b/model/autogenerated_invite.go index c28be57..d25d785 100644 --- a/model/autogenerated_invite.go +++ b/model/autogenerated_invite.go @@ -957,6 +957,10 @@ func (o *UserInviteRecord) Delete(db *gorm.DB) error { return db.Delete(o).Error } +func (qs UserInviteRecordQuerySet) Where(query string) UserInviteRecordQuerySet { + return qs.w(qs.db.Where(query)) +} + // ActionEq is an autogenerated method // nolint: dupl func (qs UserInviteRecordQuerySet) ActionEq(action uint32) UserInviteRecordQuerySet { diff --git a/model/config.go b/model/config.go index d6de01e..f9668ea 100644 --- a/model/config.go +++ b/model/config.go @@ -113,13 +113,13 @@ func GetMemberConfig(level uint32, genre uint32) (*MemberConfig, error) { // 201: { // MemberLever: 2, // MemberFee: 1, -// MemberDeposit: 3, +// MemberDeposit: 1, // CardMax: 1, // }, // 202: { // MemberLever: 2, // MemberFee: 2, -// MemberDeposit: 3, +// MemberDeposit: 1, // CardMax: 1, // }, //} diff --git a/model/cooperative_business.go b/model/cooperative_business.go index 2aaacd2..d7eb8c4 100644 --- a/model/cooperative_business.go +++ b/model/cooperative_business.go @@ -456,35 +456,35 @@ func (m *InviteMemberReport) AddPromotion(gdb *gorm.DB, memberLevel, memberGenre switch memberGenre { case 200: // 年度黄金 sql = "UPDATE invite_member_report SET gold_count=gold_count+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.GoldCount = 1 case 201: // 季度黄金 sql = "UPDATE invite_member_report SET gold_count_quarter=gold_count_quarter+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.GoldCountQuarter = 1 case 202: // 半年黄金 sql = "UPDATE invite_member_report SET gold_count_half=gold_count_half+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.GoldCountHalf = 1 } case 4: sql = "UPDATE invite_member_report SET platinum_count=platinum_count+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.PlatinumCount = 1 case 5: sql = "UPDATE invite_member_report SET black_gold_count=black_gold_count+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.BlackGoldCount = 1 } exist, err := QueryRecordExist(fmt.Sprintf( - "SELECT * FROM invite_member_report WHERE cooperative_business_id=%d AND date='%s' AND store_id=%d AND uid=%d", - m.CooperativeBusinessId, dateString, m.StoreId, m.Uid)) + "SELECT * FROM invite_member_report WHERE cooperative_business_id=%d AND date='%s' AND uid=%d", + m.CooperativeBusinessId, dateString, m.Uid)) if err != nil { logger.Error("cooperative member promotion record exist err:", err) return err @@ -517,7 +517,7 @@ func (m *CooperativeBusiness) SetAssistantMemberDeductConfig(storeId uint32) { m.CooperativeAssistantMemberDeduct = &assistantDeductConfig } -func AddCooperativeMemberRenewal(cooperativeId, storeId, assistantUid uint32, memberLevel, memberGenre int) { +func AddCooperativeMemberRenewal(cooperativeId, storeId, assistantUid uint32, memberLevel, memberGenre int, autoRenewFlag bool) { defer func() { if err := recover(); err != nil { logger.Error("err:", err) @@ -571,7 +571,11 @@ func AddCooperativeMemberRenewal(cooperativeId, storeId, assistantUid uint32, me return } - err = inviteReport.AddRenewal(begin, memberLevel, memberGenre) + if autoRenewFlag { // 自动续费 + err = inviteReport.AddRenewalAuto(begin, memberLevel, memberGenre) + } else { // 干预续费 + err = inviteReport.AddRenewalInvite(begin, memberLevel, memberGenre) + } if err != nil { begin.Rollback() logger.Error("promotion add promotion err:", err) @@ -780,7 +784,8 @@ func (m *CooperativeMemberPromotionStoreDay) AddRenewal(gdb *gorm.DB, memberLeve return nil } -func (m *InviteMemberReport) AddRenewal(gdb *gorm.DB, memberLevel, memberGenre int) error { +// AddRenewalAuto 用户自动续费后更新记录 +func (m *InviteMemberReport) AddRenewalAuto(gdb *gorm.DB, memberLevel, memberGenre int) error { dateString := utils.MonthDate() if memberLevel < 0 { return errors.New("member level err") @@ -802,36 +807,36 @@ func (m *InviteMemberReport) AddRenewal(gdb *gorm.DB, memberLevel, memberGenre i switch memberGenre { case 200: // 年度黄金 sql = "UPDATE invite_member_report SET renewal_gold_count=renewal_gold_count+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.RenewalGoldCount = 1 case 201: // 季度黄金 sql = "UPDATE invite_member_report SET renewal_gold_count_quarter=renewal_gold_count_quarter+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.RenewalGoldCountQuarter = 1 case 202: // 半年黄金 sql = "UPDATE invite_member_report SET renewal_gold_count_half=renewal_gold_count_half+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.RenewalGoldCountHalf = 1 } - case 4: + case 4: // 白金 sql = "UPDATE invite_member_report SET renewal_platinum_count=renewal_platinum_count+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.RenewalPlatinumCount = 1 - case 5: + case 5: // 黑金 sql = "UPDATE invite_member_report SET renewal_black_gold_count=renewal_black_gold_count+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.RenewalBlackGoldCount = 1 } exist, err := QueryRecordExist(fmt.Sprintf( - "SELECT * FROM invite_member_report WHERE cooperative_business_id=%d AND date='%s' AND store_id=%d AND uid=%d", - m.CooperativeBusinessId, dateString, m.StoreId, m.Uid)) + "SELECT * FROM invite_member_report WHERE cooperative_business_id=%d AND date='%s' AND uid=%d", + m.CooperativeBusinessId, dateString, m.Uid)) if err != nil { logger.Error("cooperative member promotion record exist err:", err) return err @@ -854,6 +859,66 @@ func (m *InviteMemberReport) AddRenewal(gdb *gorm.DB, memberLevel, memberGenre i return nil } +// AddRenewalInvite 邀请用户续费后更新记录 +func (m *InviteMemberReport) AddRenewalInvite(gdb *gorm.DB, memberLevel, memberGenre int) error { + dateString := utils.MonthDate() + if memberLevel < 0 { + return errors.New("member level err") + } + if gdb == nil { + gdb = DB + } + if m.StoreId == 0 { + return errors.New("store id is null") + } + if m.Uid == 0 { + return errors.New("uid is null") + } + m.Date = dateString + + sql := "" + switch memberLevel { + case 2: // 黄金 + sql = "UPDATE invite_member_report SET invite_renewal_gold_count=invite_renewal_gold_count+1 " + + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) + m.InviteRenewalGoldCount = 1 + case 4: // 白金 + sql = "UPDATE invite_member_report SET invite_renewal_platinum_count=invite_renewal_platinum_count+1 " + + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) + m.InviteRenewalPlatinumCount = 1 + case 5: // 黑金 + sql = "UPDATE invite_member_report SET invite_renewal_black_gold_count=invite_renewal_black_gold_count+1 " + + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) + m.InviteRenewalBlackGoldCount = 1 + } + + exist, err := QueryRecordExist(fmt.Sprintf( + "SELECT * FROM invite_member_report WHERE cooperative_business_id=%d AND date='%s' AND uid=%d", + m.CooperativeBusinessId, dateString, m.Uid)) + if err != nil { + logger.Error("cooperative member promotion record exist err:", err) + return err + } + if exist { + err = gdb.Exec(sql).Error + if err != nil { + logger.Error("update cooperative member promotion err:", err) + return err + } + } else { + //m.State = PromotionStateUnSettlement + err = gdb.Create(m).Error + if err != nil { + logger.Error("create cooperative member promotion err:", err) + return err + } + } + return nil +} + // AddCooperativeMemberUpgrade 同步记录会员升级数量 func AddCooperativeMemberUpgrade(cooperativeId, storeId, assistantUid, beforeMemberLevel uint32, memberLevel int, autoFlag bool) { defer func() { @@ -1140,19 +1205,19 @@ func (m *InviteMemberReport) AddUpgrade(gdb *gorm.DB, beforeMemberLevel uint32, switch memberLevel { case 4: // 白金:黄金->白金 sql = "UPDATE invite_member_report SET upgrade_gold_to_platinum_count=upgrade_gold_to_platinum_count+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.UpgradeGoldToPlatinumCount = 1 case 5: // 黑金 if beforeMemberLevel == 2 { // 黄金->黑金 sql = "UPDATE invite_member_report SET upgrade_gold_to_black_count=upgrade_gold_to_black_count+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.UpgradeGoldToBlackCount = 1 } else { // 白金->黑金 sql = "UPDATE invite_member_report SET upgrade_platinum_to_black_count=upgrade_platinum_to_black_count+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.UpgradePlatinumToBlackCount = 1 } } @@ -1160,27 +1225,27 @@ func (m *InviteMemberReport) AddUpgrade(gdb *gorm.DB, beforeMemberLevel uint32, switch memberLevel { case 4: // 白金:黄金->白金 sql = "UPDATE invite_member_report SET invite_upgrade_gold_to_platinum_count=invite_upgrade_gold_to_platinum_count+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.InviteUpgradeGoldToPlatinumCount = 1 case 5: // 黑金 if beforeMemberLevel == 2 { // 黄金->黑金 sql = "UPDATE invite_member_report SET invite_upgrade_gold_to_black_count=invite_upgrade_gold_to_black_count+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.InviteUpgradeGoldToBlackCount = 1 } else { // 白金->黑金 sql = "UPDATE invite_member_report SET invite_upgrade_platinum_to_black_count=invite_upgrade_platinum_to_black_count+1 " + - fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d AND uid=%d", - dateString, m.CooperativeBusinessId, m.StoreId, m.Uid) + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) m.InviteUpgradePlatinumToBlackCount = 1 } } } exist, err := QueryRecordExist(fmt.Sprintf( - "SELECT * FROM invite_member_report WHERE cooperative_business_id=%d AND date='%s' AND store_id=%d AND uid=%d", - m.CooperativeBusinessId, dateString, m.StoreId, m.Uid)) + "SELECT * FROM invite_member_report WHERE cooperative_business_id=%d AND date='%s' AND uid=%d", + m.CooperativeBusinessId, dateString, m.Uid)) if err != nil { logger.Error("cooperative member promotion record exist err:", err) return err diff --git a/model/invite.go b/model/invite.go index c2bd01b..1ed7869 100644 --- a/model/invite.go +++ b/model/invite.go @@ -25,7 +25,7 @@ type UserInviteRecord struct { ToUid uint32 `json:"to_uid"` // 用户ID FromUid uint32 `json:"from_uid"` // 邀请人ID StoreId uint64 `json:"store_id"` // 门店id 邀请用户门店 - Action uint32 `json:"action"` // 1-未激活 2-激活邀请 + Action uint32 `json:"action"` // 1-未激活 2-激活邀请 表示:该条邀请是否被执行 SpendType uint32 `json:"spend_type"` // 1-未开通 2-开通会员 3-续费 4-升级 MemberLevel uint32 `json:"member_level"` // 会员等级 0-未开通 1-普通 2-黄金 3-短期 4-白金 5-黑金 MemberGenre uint32 `json:"member_genre"` // 会员类型 201-黄金季度 202-黄金半年 diff --git a/model/user.go b/model/user.go index 47a84d3..14b56da 100644 --- a/model/user.go +++ b/model/user.go @@ -1,6 +1,7 @@ package model import ( + "encoding/json" "errors" "fmt" "github.com/codinl/go-logger" @@ -9,6 +10,7 @@ import ( "mh-server/lib/utils" "mh-server/lib/wxpay" "sort" + "strings" "sync" "time" ) @@ -20,7 +22,7 @@ type User struct { Model Uid uint32 `json:"uid" gorm:"column:uid;unique_index"` - MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-黄金会员 4-白金会员 5-黑金会员 + MemberLevel uint32 `json:"member_level"` // 当前会员等级:10-普通用户 1-普通会员 2-黄金会员 4-白金会员 5-黑金会员 MemberGenre uint32 `json:"member_genre"` // 会员类型 MemberExpire time.Time `json:"member_expire"` // 会员到期时间 OpenMemberTime time.Time `json:"open_member_time"` // 开通会员 @@ -123,7 +125,7 @@ type UserInvite struct { MemberStatus uint8 `json:"member_status"` // 被邀请用户 1-未开通 2-已开通 3-已取消会员 ToUid uint32 `json:"to_uid"` // 被邀请用户 StoreType uint32 `json:"store_type"` // 门店类型 1-自有 2-合作商 - Action uint32 `json:"action"` // 1-未激活 2-激活邀请 + Action uint32 `json:"action"` // 1-未激活 2-激活邀请 表示:该会员是开通还是续费 SpendType uint32 `json:"spend_type"` // 1-未开通 2-开通会员 3-续费 4-升级 5-店员推广续费 MemberLevel uint32 `json:"member_level"` // 会员等级 MemberGenre uint32 `json:"member_genre"` // 会员类型 @@ -131,7 +133,7 @@ type UserInvite struct { FirstInvite uint32 `json:"first_invite"` // 首次邀请标志:1 首次邀请 0 非首次 Scan uint32 `json:"scan"` // 扫码 InviteForm uint32 `json:"invite_form"` // 邀请方式: 1-店员邀请码续费 - RenewHide uint32 `json:"renew_hide"` // 自动续费 + RenewHide uint32 `json:"renew_hide"` // 自动续费 1-自动 0-干预 //InviteTime time.Time `json:"invite_time"` // 邀请时间 ToUser *User `json:"to_user" gorm:"-"` @@ -258,11 +260,18 @@ func GetUserByUid(uid uint32) *User { return user } +const StoreDateTimeFormat = "2006.01.02" + // GetUserEffectiveStore 获取店员当前的有效门店(邀请客户时使用) func GetUserEffectiveStore(uid uint32) (*StoreInfo, error) { user := new(SysUser) if err := NewSysUserQuerySet(DB).UidEq(uid).One(user); err != nil { - logger.Error(err, uid) + logger.Error("Error:", err, "UID:", uid) + return nil, err + } + + // 解析门店数据 + if err := json.Unmarshal([]byte(user.StoreData), &user.StoreList); err != nil { return nil, err } @@ -270,18 +279,41 @@ func GetUserEffectiveStore(uid uint32) (*StoreInfo, error) { return nil, errors.New("no stores found") } - // 解析 StoreList 并找到有效时间最短的门店 - sort.Slice(user.StoreList, func(i, j int) bool { - timeI, _ := time.Parse("2006.01.02", user.StoreList[i].ExpireTime) - timeJ, _ := time.Parse("2006.01.02", user.StoreList[j].ExpireTime) + // 当前时间 + now := time.Now() + + // 过滤掉过期的门店 + validStores := make([]StoreInfo, 0) + for _, store := range user.StoreList { + expireTime, err := time.Parse(StoreDateTimeFormat, store.ExpireTime) + if err != nil { + logger.Error("Error parsing time:", err, "ExpireTime:", store.ExpireTime) + continue + } + + // 包含当天有效时间 + expireTime = expireTime.Add(24*time.Hour - time.Second) + if expireTime.After(now) { + validStores = append(validStores, store) + } + } + + if len(validStores) == 0 { + return &StoreInfo{}, nil + } + + // 按有效时间和 store_id 排序 + sort.Slice(validStores, func(i, j int) bool { + timeI, _ := time.Parse(StoreDateTimeFormat, validStores[i].ExpireTime) + timeJ, _ := time.Parse(StoreDateTimeFormat, validStores[j].ExpireTime) if timeI.Equal(timeJ) { - return user.StoreList[i].StoreID < user.StoreList[j].StoreID + return validStores[i].StoreID < validStores[j].StoreID } return timeI.Before(timeJ) }) - return &user.StoreList[0], nil + return &validStores[0], nil } func GetUserRentCard(uid uint32) *UserRentCard { @@ -1227,99 +1259,100 @@ func StorePromotion(inviteUid, uid uint32, inviteUser, user *User) error { logger.Error("user inviteUser is nil") return errors.New("user inviteUser is nil") } - nowTime := time.Now() - effectiveStoreInfo, err := GetUserEffectiveStore(inviteUid) - if err != nil { - return err - } - - if inviteUser.UserType == 2 && user.Uid != 0 { // 是店员邀请并且用户id不为空 - exist, err := QueryRecordExist( - fmt.Sprintf("SELECT * FROM user_invite_record WHERE to_uid = %d AND from_uid = %d ", - user.Uid, inviteUid)) - if err != nil { - logger.Error("query err:", err) - return err - } - if !exist { - firstInviteRecord := &UserInviteRecord{ - ToUid: user.Uid, - FromUid: inviteUid, - StoreId: effectiveStoreInfo.StoreID, - Action: 2, // 激活邀请 - SpendType: 1, // 未开通 - MemberLevel: 0, // 未开通会员 - First: 1, // 首次邀请 - Scan: 1, - ActionTime: nowTime, - } - err = DB.Create(firstInviteRecord).Error - if err != nil { - logger.Error("create user invite record err:", err) - } - } - // 扫码记录 - inviteRecord := &UserInviteRecord{ - ToUid: user.Uid, - FromUid: inviteUid, - StoreId: effectiveStoreInfo.StoreID, - Action: 1, // 未激活 - SpendType: 1, // 未开通 - MemberLevel: 0, - First: 0, - Scan: 1, - ActionTime: nowTime, - } - err = DB.Create(inviteRecord).Error - if err != nil { - logger.Error("create user invite record err:", err) - } - // UserInvite 邀请主要 - var inviteNew UserInvite - inviteErr := NewUserInviteQuerySet(DB).ToUidEq(user.Uid).FromUidEq(inviteUid).ActionEq(1). - SpendTypeEq(1).One(&inviteNew) - if inviteErr != nil && inviteErr != RecordNotFound { - // 是否存在未开通 - logger.Error("user invite err:", err) - } - //fmt.Println("inviteErr:", inviteErr) - //fmt.Printf("inviteNew:%#v \n", inviteNew) - if inviteErr == RecordNotFound { - memberLevel := user.MemberLevel - if memberLevel == 0 { - memberLevel = MemberLevelUser - } - invite := &UserInvite{ - FromUid: inviteUid, // 邀请人用户id - UserType: inviteUser.UserType, // 邀请人用户类型 - StoreId: effectiveStoreInfo.StoreID, // 邀请人门店id - MemberOpenTime: nowTime, // 开通会员时间 - MemberType: memberLevel, // 被邀请用户类型 - MemberStatus: 1, // 被邀请用户会员状态 1-未开通 - ToUid: user.Uid, // 被邀请用户id - Action: 1, // 未激活 - SpendType: 1, // 未开通 - UserInviteRecordId: inviteRecord.ID, // 邀请记录id - FirstInvite: 0, // TODO 首次邀请id - Scan: 1, // 扫码次数 - InviteForm: 1, // 1-店员邀请码续费 - } - fmt.Println("创建邀请:", invite) - if err := invite.Create(DB); err != nil { - logger.Error(err) - return err - } - } - - if inviteErr == nil { - err = NewUserInviteQuerySet(DB).IDEq(inviteNew.ID).GetUpdater().SetCreatedAt(nowTime). - SetUserInviteRecordId(inviteRecord.ID).SetInviteForm(1).Update() - if err != nil { - logger.Error("from uid update user invite err:", err, inviteUid) - } - } - } + // 目前在领取优惠券的时候做了邀请记录,这里不再重复记录 + //if inviteUser.UserType == 2 && user.Uid != 0 { // 是店员邀请并且用户id不为空 + // nowTime := time.Now() + // effectiveStoreInfo, err := GetUserEffectiveStore(inviteUid) + // if err != nil { + // return err + // } + // + // exist, err := QueryRecordExist( + // fmt.Sprintf("SELECT * FROM user_invite_record WHERE to_uid = %d AND from_uid = %d ", + // user.Uid, inviteUid)) + // if err != nil { + // logger.Error("query err:", err) + // return err + // } + // if !exist { + // firstInviteRecord := &UserInviteRecord{ + // ToUid: user.Uid, + // FromUid: inviteUid, + // StoreId: effectiveStoreInfo.StoreID, + // Action: 2, // 激活邀请 + // SpendType: 1, // 未开通 + // MemberLevel: 0, // 未开通会员 + // First: 1, // 首次邀请 + // Scan: 1, + // ActionTime: nowTime, + // } + // err = DB.Create(firstInviteRecord).Error + // if err != nil { + // logger.Error("create user invite record err:", err) + // } + // } + // // 扫码记录 + // inviteRecord := &UserInviteRecord{ + // ToUid: user.Uid, + // FromUid: inviteUid, + // StoreId: effectiveStoreInfo.StoreID, + // Action: 1, // 未激活 + // SpendType: 1, // 未开通 + // MemberLevel: 0, + // First: 0, + // Scan: 1, + // ActionTime: nowTime, + // } + // err = DB.Create(inviteRecord).Error + // if err != nil { + // logger.Error("create user invite record err:", err) + // } + // // UserInvite 邀请主要 + // var inviteNew UserInvite + // inviteErr := NewUserInviteQuerySet(DB).ToUidEq(user.Uid).FromUidEq(inviteUid).ActionEq(1). + // SpendTypeEq(1).One(&inviteNew) + // if inviteErr != nil && inviteErr != RecordNotFound { + // // 是否存在未开通 + // logger.Error("user invite err:", err) + // } + // //fmt.Println("inviteErr:", inviteErr) + // //fmt.Printf("inviteNew:%#v \n", inviteNew) + // if inviteErr == RecordNotFound { + // memberLevel := user.MemberLevel + // if memberLevel == 0 { + // memberLevel = MemberLevelUser + // } + // invite := &UserInvite{ + // FromUid: inviteUid, // 邀请人用户id + // UserType: inviteUser.UserType, // 邀请人用户类型 + // StoreId: effectiveStoreInfo.StoreID, // 邀请人门店id + // MemberOpenTime: nowTime, // 开通会员时间 + // MemberType: memberLevel, // 被邀请用户类型 + // MemberStatus: 1, // 被邀请用户会员状态 1-未开通 + // ToUid: user.Uid, // 被邀请用户id + // Action: 1, // 未激活 + // SpendType: 1, // 未开通 + // UserInviteRecordId: inviteRecord.ID, // 邀请记录id + // FirstInvite: 0, // TODO 首次邀请id + // Scan: 1, // 扫码次数 + // InviteForm: 1, // 1-店员邀请码续费 + // } + // fmt.Println("创建邀请:", invite) + // if err := invite.Create(DB); err != nil { + // logger.Error(err) + // return err + // } + // } + // + // if inviteErr == nil { + // err = NewUserInviteQuerySet(DB).IDEq(inviteNew.ID).GetUpdater().SetCreatedAt(nowTime). + // SetUserInviteRecordId(inviteRecord.ID).SetInviteForm(1).Update() + // if err != nil { + // logger.Error("from uid update user invite err:", err, inviteUid) + // } + // } + //} return nil } @@ -1401,7 +1434,7 @@ type NewUserInviteRecordReq struct { PageSize int `json:"pageSize"` FromUid uint32 `json:"from_uid"` // 邀请人ID ToUid uint32 `json:"to_uid"` // 用户ID - RecordType uint32 `json:"record_type"` // 记录类型 1-首次邀请,2-开通年费黄金,3-开通季度黄金,4-开通半年黄金, 5-开通年费白金,6-开通年费黑金,7-续费年费黄金(干预),8-续费年费白金(干预),9-续费年费黑金(干预),10-续费年费黄金(自动), 11-续费季度黄金(自动),12-续费半年黄金(自动),13-续费年费白金(自动),14-续费年费黑金(自动),15-黄金→白金(干预), 16-黄金→黑金(干预),17-白金→黑金(干预),18-黄金→白金(自动),19-黄金→黑金(自动),20-白金→黑金(自动) + RecordType []uint32 `json:"record_type"` // 记录类型 1-首次邀请,2-开通年费黄金,3-开通季度黄金,4-开通半年黄金, 5-开通年费白金,6-开通年费黑金,7-续费年费黄金(干预),8-续费年费白金(干预),9-续费年费黑金(干预),10-续费年费黄金(自动), 11-续费季度黄金(自动),12-续费半年黄金(自动),13-续费年费白金(自动),14-续费年费黑金(自动),15-黄金→白金(干预), 16-黄金→黑金(干预),17-白金→黑金(干预),18-黄金→白金(自动),19-黄金→黑金(自动),20-白金→黑金(自动) RecordStartTime time.Time `json:"record_start_time"` // 记录时间-开始时间 RecordEndTime time.Time `json:"record_end_time"` // 记录时间-结束时间 } @@ -1457,60 +1490,118 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) { if m.ToUid != 0 { qs = qs.ToUidEq(m.ToUid) } - if m.RecordType != 0 { - switch m.RecordType { - case 1: // 首次邀请 - qs = qs.FirstEq(1).SpendTypeEq(1) - case 2: // 开通年费黄金 - qs = qs.MemberLevelEq(2).SpendTypeEq(2) - case 3: // 开通季度黄金 - qs = qs.MemberLevelEq(2).SpendTypeEq(2).MemberGenreEq(201) - case 4: // 开通半年黄金 - qs = qs.MemberLevelEq(2).SpendTypeEq(2).MemberGenreEq(202) - case 5: // 开通年费白金 - qs = qs.MemberLevelEq(4).SpendTypeEq(2) - case 6: // 开通年费黑金 - qs = qs.MemberLevelEq(5).SpendTypeEq(2) + //if m.RecordType != 0 { + // switch m.RecordType { + // case 1: // 首次邀请 + // qs = qs.FirstEq(1).SpendTypeEq(1) + // case 2: // 开通年费黄金 + // qs = qs.MemberLevelEq(2).SpendTypeEq(2) + // case 3: // 开通季度黄金 + // qs = qs.MemberLevelEq(2).SpendTypeEq(2).MemberGenreEq(201) + // case 4: // 开通半年黄金 + // qs = qs.MemberLevelEq(2).SpendTypeEq(2).MemberGenreEq(202) + // case 5: // 开通年费白金 + // qs = qs.MemberLevelEq(4).SpendTypeEq(2) + // case 6: // 开通年费黑金 + // qs = qs.MemberLevelEq(5).SpendTypeEq(2) + // + // case 7: // 续费年费黄金(干预) + // qs = qs.MemberLevelEq(2).SpendTypeEq(3).RenewHideEq(0) + // case 8: // 续费年费白金(干预) + // qs = qs.MemberLevelEq(4).SpendTypeEq(3).RenewHideEq(0) + // case 9: // 续费年费黑金(干预) + // qs = qs.MemberLevelEq(5).SpendTypeEq(3).RenewHideEq(0) + // + // case 10: // 续费年费黄金(自动) + // qs = qs.MemberLevelEq(2).SpendTypeEq(3).RenewHideEq(1) + // case 11: // 续费季度黄金(自动) + // qs = qs.MemberLevelEq(2).SpendTypeEq(3).RenewHideEq(1). + // MemberGenreEq(201) + // case 12: // 续费半年黄金(自动) + // qs = qs.MemberLevelEq(2).SpendTypeEq(3).RenewHideEq(1). + // MemberGenreEq(202) + // case 13: // 续费年费白金(自动) + // qs = qs.MemberLevelEq(4).SpendTypeEq(3).RenewHideEq(1) + // case 14: // 续费年费黑金(自动) + // qs = qs.MemberLevelEq(5).SpendTypeEq(3).RenewHideEq(1) + // + // case 15: //黄金→白金(干预) + // qs = qs.MemberLevelEq(4).SpendTypeEq(4).RenewHideEq(0) + // case 16: //黄金→黑金(干预) + // qs = qs.MemberLevelEq(5).SpendTypeEq(4).RenewHideEq(0). + // MemberGenreIn(200, 201, 202) + // case 17: //白金→黑金(干预) + // qs = qs.MemberLevelEq(5).SpendTypeEq(4).RenewHideEq(0). + // MemberGenreNotIn(200, 201, 202) + // + // case 18: //黄金→白金(自动) + // qs = qs.MemberLevelEq(4).SpendTypeEq(4).RenewHideEq(1) + // case 19: //黄金→黑金(自动) + // qs = qs.MemberLevelEq(5).SpendTypeEq(4).RenewHideEq(1). + // MemberGenreIn(200, 201, 202) + // case 20: //白金→黑金(自动) + // qs = qs.MemberLevelEq(5).SpendTypeEq(4).RenewHideEq(1). + // MemberGenreNotIn(200, 201, 202) + // } + //} + if len(m.RecordType) != 0 { + var recordTypeConditions []string + for _, t := range m.RecordType { + switch t { + case 1: + recordTypeConditions = append(recordTypeConditions, "(first=1 AND spend_type=1)") + case 2: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=2 AND spend_type=2)") + case 3: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=2 AND spend_type=2 AND user_invite_record.member_genre=201)") + case 4: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=2 AND spend_type=2 AND user_invite_record.member_genre=202)") + case 5: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=4 AND spend_type=2)") + case 6: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=5 AND spend_type=2)") - case 7: // 续费年费黄金(干预) - qs = qs.MemberLevelEq(2).SpendTypeEq(3).RenewHideEq(0) - case 8: // 续费年费白金(干预) - qs = qs.MemberLevelEq(4).SpendTypeEq(3).RenewHideEq(0) - case 9: // 续费年费黑金(干预) - qs = qs.MemberLevelEq(5).SpendTypeEq(3).RenewHideEq(0) + case 7: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=2 AND spend_type=3 AND renew_hide=0)") + case 8: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=4 AND spend_type=3 AND renew_hide=0)") + case 9: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=5 AND spend_type=3 AND renew_hide=0)") - case 10: // 续费年费黄金(自动) - qs = qs.MemberLevelEq(2).SpendTypeEq(3).RenewHideEq(1) - case 11: // 续费季度黄金(自动) - qs = qs.MemberLevelEq(2).SpendTypeEq(3).RenewHideEq(1). - MemberGenreEq(201) - case 12: // 续费半年黄金(自动) - qs = qs.MemberLevelEq(2).SpendTypeEq(3).RenewHideEq(1). - MemberGenreEq(202) - case 13: // 续费年费白金(自动) - qs = qs.MemberLevelEq(4).SpendTypeEq(3).RenewHideEq(1) - case 14: // 续费年费黑金(自动) - qs = qs.MemberLevelEq(5).SpendTypeEq(3).RenewHideEq(1) + case 10: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=2 AND spend_type=3 AND renew_hide=1)") + case 11: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=2 AND spend_type=3 AND renew_hide=1 AND user_invite_record.member_genre=201)") + case 12: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=2 AND spend_type=3 AND renew_hide=1 AND user_invite_record.member_genre=202)") + case 13: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=4 AND spend_type=3 AND renew_hide=1)") + case 14: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=5 AND spend_type=3 AND renew_hide=1)") - case 15: //黄金→白金(干预) - qs = qs.MemberLevelEq(4).SpendTypeEq(4).RenewHideEq(0) - case 16: //黄金→黑金(干预) - qs = qs.MemberLevelEq(5).SpendTypeEq(4).RenewHideEq(0). - MemberGenreIn(200, 201, 202) - case 17: //白金→黑金(干预) - qs = qs.MemberLevelEq(5).SpendTypeEq(4).RenewHideEq(0). - MemberGenreNotIn(200, 201, 202) + case 15: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=4 AND spend_type=4 AND renew_hide=0)") + case 16: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=5 AND spend_type=4 AND renew_hide=0 AND user_invite_record.member_genre in (200,201,202))") + case 17: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=5 AND spend_type=4 AND renew_hide=0 AND user_invite_record.member_genre not in (200,201,202))") - case 18: //黄金→白金(自动) - qs = qs.MemberLevelEq(4).SpendTypeEq(4).RenewHideEq(1) - case 19: //黄金→黑金(自动) - qs = qs.MemberLevelEq(5).SpendTypeEq(4).RenewHideEq(1). - MemberGenreIn(200, 201, 202) - case 20: //白金→黑金(自动) - qs = qs.MemberLevelEq(5).SpendTypeEq(4).RenewHideEq(1). - MemberGenreNotIn(200, 201, 202) + case 18: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=4 AND spend_type=4 AND renew_hide=1)") + case 19: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=5 AND spend_type=4 AND renew_hide=1 AND user_invite_record.member_genre in (200,201,202))") + case 20: + recordTypeConditions = append(recordTypeConditions, "(user_invite_record.member_level=5 AND spend_type=4 AND renew_hide=1 AND user_invite_record.member_genre not in (200,201,202))") + } + } + + // 拼接多选条件 + if len(recordTypeConditions) > 0 { + recordTypeQuery := strings.Join(recordTypeConditions, " OR ") + qs = qs.Where(recordTypeQuery) } } + if !m.RecordStartTime.IsZero() { qs = qs.ActionTimeGte(m.RecordStartTime) } diff --git a/router/router_app.go b/router/router_app.go index d1563a8..fd14e84 100644 --- a/router/router_app.go +++ b/router/router_app.go @@ -32,7 +32,7 @@ func ConfigAppRouter(r gin.IRouter) { // //api.POST("upload_user_info", controller.UploadUserInfo) // 上传用户信息 //api.POST("wxpay/notice", controller.PushWXPayNotice) // 微信推送支付通知 // TODO两边都改 - api.GET("wxpay/notice", controller.HmPushWXPayNotice) // 推送支付通知 + api.GET("wxpay/notice", controller.HmPushWXPayNotice) // 河马付推送支付通知 api.POST("wxpay/notice", controller.PushWXPayNotice) // 微信推送支付通知 api.POST("wxpay_refund/notice", controller.PushWXPayRefundNotice) // 微信推送支付退款通知 api.POST("aliyun/sts_token", controller.AliyunStsTokenGet) // 阿里云上传图片token