1.优化会员邀请流程;
This commit is contained in:
parent
5794d4c69f
commit
7f8d1ba8e7
|
@ -79,12 +79,18 @@ func AuthLogin(c *gin.Context) {
|
|||
|
||||
fmt.Println("InviteUid:", req.InviteUid)
|
||||
nowTime := time.Now()
|
||||
// 不存在则创建 新用户
|
||||
if req.InviteUid != 0 && req.InviteUid != user.Uid { // 入参有邀请人id且非本人
|
||||
|
||||
if req.InviteUid != 0 && req.InviteUid != user.Uid && user.Uid != 0 { // 入参有邀请人id且非本人
|
||||
inviteUser := model.GetUserByUid(req.InviteUid)
|
||||
user.StoreId = inviteUser.StoreId
|
||||
if user.StoreId == 0 { // 用户所属门店id为空则更新
|
||||
_, err = model.NewUserQuerySet(model.DB).UidEq(user.Uid).GetUpdater().SetStoreId(inviteUser.StoreId).
|
||||
effectiveStoreInfo, err := model.GetUserEffectiveStore(req.InviteUid)
|
||||
if err != nil {
|
||||
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).
|
||||
UpdateNum()
|
||||
if err != nil {
|
||||
logger.Error("update err:", err)
|
||||
|
@ -104,6 +110,7 @@ func AuthLogin(c *gin.Context) {
|
|||
firstInviteRecord := &model.UserInviteRecord{
|
||||
ToUid: user.Uid,
|
||||
FromUid: req.InviteUid,
|
||||
StoreId: effectiveStoreInfo.StoreID,
|
||||
Action: 2, // 激活邀请
|
||||
SpendType: 1, // 未开通
|
||||
MemberLevel: 0, // 0,未开通会员
|
||||
|
@ -120,6 +127,7 @@ func AuthLogin(c *gin.Context) {
|
|||
inviteRecord := &model.UserInviteRecord{
|
||||
ToUid: user.Uid,
|
||||
FromUid: req.InviteUid,
|
||||
StoreId: effectiveStoreInfo.StoreID,
|
||||
Action: 1, // 未激活
|
||||
SpendType: 1, // 未开通
|
||||
MemberLevel: 0,
|
||||
|
@ -144,21 +152,21 @@ func AuthLogin(c *gin.Context) {
|
|||
if inviteErr == model.RecordNotFound { // 邀请表没记录
|
||||
memberLevel := user.MemberLevel
|
||||
if memberLevel == 0 {
|
||||
memberLevel = model.MemberTypeConsumer // 普通用户
|
||||
memberLevel = model.MemberLevelUser // 普通会员
|
||||
}
|
||||
invite := &model.UserInvite{
|
||||
FromUid: req.InviteUid, // 邀请人用户id
|
||||
UserType: inviteUser.UserType, // 邀请人用户类型
|
||||
StoreId: inviteUser.StoreId, // 邀请人门店ID
|
||||
MemberOpenTime: time.Time{}, // 开通会员时间
|
||||
MemberType: memberLevel, // 被邀请用户类型
|
||||
MemberStatus: 1, // 被邀请用户会员状态 1-未开通
|
||||
ToUid: user.Uid, // 被邀请用户id
|
||||
Action: 1, // 未激活
|
||||
SpendType: 1, // 未开通
|
||||
UserInviteRecordId: inviteRecord.ID, // 邀请记录id
|
||||
FirstInvite: 0, // TODO 首次邀请id
|
||||
Scan: 1, // 扫码次数
|
||||
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()
|
||||
|
@ -187,6 +195,8 @@ func AuthLogin(c *gin.Context) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 不存在则创建新用户
|
||||
if sqlErr == model.RecordNotFound {
|
||||
// 通过手机号判断之前是否有数据
|
||||
sqlErr = model.NewUserQuerySet(model.DB).TelEq(phone.PhoneNumber).One(&user)
|
||||
|
@ -201,7 +211,7 @@ func AuthLogin(c *gin.Context) {
|
|||
user.WxOpenID = resp.OpenID
|
||||
user.WxUnionID = resp.UnionID
|
||||
user.LastLoginAt = nowTime
|
||||
user.MemberLevel = 1 // 普通会员
|
||||
user.MemberLevel = model.MemberLevelUser // 普通会员
|
||||
//user.WxName = userInfo.Nickname
|
||||
//user.WxAvatar = userInfo.Avatar
|
||||
user.CreatedAt = nowTime
|
||||
|
@ -217,18 +227,24 @@ func AuthLogin(c *gin.Context) {
|
|||
WxOpenID: resp.OpenID,
|
||||
WxUnionID: resp.UnionID,
|
||||
LastLoginAt: nowTime,
|
||||
MemberLevel: 1,
|
||||
//Notify: common.Yes,
|
||||
MemberLevel: model.MemberLevelUser, // 普通会员
|
||||
Tel: phone.PhoneNumber,
|
||||
}
|
||||
user.Uid = createUid() // 新建uid
|
||||
|
||||
inviteUser := model.GetUserByUid(req.InviteUid)
|
||||
effectiveStoreInfo, err := model.GetUserEffectiveStore(req.InviteUid)
|
||||
if err != nil {
|
||||
RespJson(c, status.InviteUserFail, nil)
|
||||
return
|
||||
}
|
||||
|
||||
var eg errgroup.Group
|
||||
if req.InviteUid != 0 && inviteUser.UserType == 2 { // 如果入参有邀请人id,并且是店员,则新增2条邀请记录
|
||||
if req.InviteUid != 0 && inviteUser.UserType == model.UserTypeShopAssistant { // 如果入参有邀请人id,并且是店员,则新增2条邀请记录
|
||||
inviteRecordFirst := &model.UserInviteRecord{
|
||||
ToUid: user.Uid,
|
||||
FromUid: req.InviteUid,
|
||||
StoreId: effectiveStoreInfo.StoreID,
|
||||
Action: 2, // 激活邀请
|
||||
SpendType: 1, // 未开通
|
||||
MemberLevel: 0, // 未开通会员
|
||||
|
@ -244,6 +260,7 @@ func AuthLogin(c *gin.Context) {
|
|||
inviteRecord := &model.UserInviteRecord{
|
||||
ToUid: user.Uid,
|
||||
FromUid: req.InviteUid,
|
||||
StoreId: effectiveStoreInfo.StoreID,
|
||||
Action: 1, // 1-未激活
|
||||
SpendType: 1, // 未开通
|
||||
MemberLevel: 0, // 未开通会员
|
||||
|
@ -257,7 +274,7 @@ func AuthLogin(c *gin.Context) {
|
|||
}
|
||||
|
||||
inviteUser := model.GetUserByUid(req.InviteUid)
|
||||
user.StoreId = inviteUser.StoreId
|
||||
user.StoreId = effectiveStoreInfo.StoreID
|
||||
user.UserType = model.UserTypeConsumer
|
||||
user.CooperativeBusinessId = inviteUser.CooperativeBusinessId
|
||||
user.CooperativeName = inviteUser.CooperativeName
|
||||
|
@ -265,8 +282,8 @@ func AuthLogin(c *gin.Context) {
|
|||
invite := &model.UserInvite{
|
||||
FromUid: req.InviteUid,
|
||||
UserType: inviteUser.UserType,
|
||||
StoreId: inviteUser.StoreId,
|
||||
MemberType: model.MemberTypeConsumer,
|
||||
StoreId: effectiveStoreInfo.StoreID,
|
||||
MemberType: model.MemberLevelUser,
|
||||
ToUid: user.Uid,
|
||||
MemberStatus: 1, // 1-未开通
|
||||
Action: 1, // 1-未激活
|
||||
|
@ -293,7 +310,7 @@ func AuthLogin(c *gin.Context) {
|
|||
}
|
||||
return nil
|
||||
})
|
||||
err := eg.Wait()
|
||||
err = eg.Wait()
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
RespJson(c, status.InternalServerError, nil)
|
||||
|
|
|
@ -448,14 +448,14 @@ func PushWXPayNotice(c *gin.Context) {
|
|||
}
|
||||
|
||||
remark := ""
|
||||
if record.MemberLevel == 2 {
|
||||
if record.MemberGenre != 201 && record.MemberGenre != 202 {
|
||||
record.MemberGenre = 200 // 新增:如果是年费黄金会员则member_genre设置为200
|
||||
if record.MemberLevel == model.MemberLevelGold {
|
||||
if record.MemberGenre != model.MemberGenreQuarter && record.MemberGenre != model.MemberGenreHalfYear {
|
||||
record.MemberGenre = model.MemberGenreYear // 新增:如果是年费黄金会员则member_genre设置为200
|
||||
}
|
||||
remark = "黄金会员费"
|
||||
} else if record.MemberLevel == 4 {
|
||||
} else if record.MemberLevel == model.MemberLevelPlatinum {
|
||||
remark = "白金会员费"
|
||||
} else if record.MemberLevel == 5 {
|
||||
} else if record.MemberLevel == model.MemberLevelBlackGold {
|
||||
remark = "黑金会员费"
|
||||
}
|
||||
fundRecord.Uid = uint32(record.Uid)
|
||||
|
@ -480,9 +480,9 @@ func PushWXPayNotice(c *gin.Context) {
|
|||
isShopAssistantCode := false
|
||||
|
||||
var expireTime time.Time
|
||||
if record.MemberGenre == 201 { // 季度黄金
|
||||
if record.MemberGenre == model.MemberGenreQuarter { // 季度黄金
|
||||
expireTime = newTime.AddDate(0, 0, 90)
|
||||
} else if record.MemberGenre == 202 { // 半年黄金
|
||||
} else if record.MemberGenre == model.MemberGenreHalfYear { // 半年黄金
|
||||
expireTime = newTime.AddDate(0, 0, 180)
|
||||
} else {
|
||||
expireTime = newTime.AddDate(1, 0, 0)
|
||||
|
@ -490,14 +490,15 @@ func PushWXPayNotice(c *gin.Context) {
|
|||
|
||||
if user.MemberExpire.After(newTime) {
|
||||
//expireTime = user.MemberExpire.AddDate(1, 0, 0)
|
||||
if record.MemberGenre == 201 {
|
||||
if record.MemberGenre == model.MemberGenreQuarter {
|
||||
expireTime = user.MemberExpire.AddDate(0, 0, 90)
|
||||
} else if record.MemberGenre == 202 {
|
||||
} else if record.MemberGenre == model.MemberGenreHalfYear {
|
||||
expireTime = user.MemberExpire.AddDate(0, 0, 180)
|
||||
} else {
|
||||
expireTime = user.MemberExpire.AddDate(1, 0, 0)
|
||||
}
|
||||
}
|
||||
|
||||
memberRecord.BeforeMemberLevel = user.MemberLevel
|
||||
memberRecord.BeforeMemberExpire = user.MemberExpire
|
||||
memberRecord.Serial = uint32(user.MemberExpire.Unix())
|
||||
|
@ -520,9 +521,9 @@ func PushWXPayNotice(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 {
|
||||
|
@ -561,7 +562,7 @@ func PushWXPayNotice(c *gin.Context) {
|
|||
} else {
|
||||
if err == nil {
|
||||
//qs := model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).GetUpdater()
|
||||
if invite.Action != 2 {
|
||||
if invite.Action != 2 { // 2-激活邀请
|
||||
qs := model.NewUserInviteQuerySet(model.DB).IDEq(invite.ID).GetUpdater()
|
||||
// SpendType 类型
|
||||
//if user.MemberLevel != 2 {
|
||||
|
@ -699,7 +700,6 @@ func PushWXPayNotice(c *gin.Context) {
|
|||
}
|
||||
fmt.Println("notify.TotalFee:", notifyInfo.TotalFee)
|
||||
fmt.Println("notify.OutTradeNo:", notifyInfo.OutTradeNo)
|
||||
|
||||
}
|
||||
|
||||
if notifyInfo.Attach == wxpay.WxPayDeposit {
|
||||
|
@ -1386,14 +1386,14 @@ func HmPushWXPayNotice(c *gin.Context) {
|
|||
logger.Info("用户uid:", outOrderNo)
|
||||
|
||||
remark := ""
|
||||
if record.MemberLevel == 2 {
|
||||
if record.MemberGenre != 201 && record.MemberGenre != 202 {
|
||||
record.MemberGenre = 200 // 新增:如果是年费黄金会员则member_genre设置为200
|
||||
if record.MemberLevel == model.MemberLevelGold {
|
||||
if record.MemberGenre != model.MemberGenreQuarter && record.MemberGenre != model.MemberGenreHalfYear {
|
||||
record.MemberGenre = model.MemberGenreYear // 新增:如果是年费黄金会员则member_genre设置为200
|
||||
}
|
||||
remark = "黄金会员费"
|
||||
} else if record.MemberLevel == 4 {
|
||||
} else if record.MemberLevel == model.MemberLevelPlatinum {
|
||||
remark = "白金会员费"
|
||||
} else if record.MemberLevel == 5 {
|
||||
} else if record.MemberLevel == model.MemberLevelBlackGold {
|
||||
remark = "黑金会员费"
|
||||
}
|
||||
fundRecord.Uid = uint32(record.Uid)
|
||||
|
@ -1416,15 +1416,11 @@ func HmPushWXPayNotice(c *gin.Context) {
|
|||
spendType = 3
|
||||
}
|
||||
isShopAssistantCode := false
|
||||
//expireTime := newTime.AddDate(1, 0, 0)
|
||||
//if user.MemberExpire.After(newTime) {
|
||||
// expireTime = user.MemberExpire.AddDate(1, 0, 0)
|
||||
//}
|
||||
|
||||
var expireTime time.Time
|
||||
if record.MemberGenre == 201 {
|
||||
if record.MemberGenre == model.MemberGenreQuarter {
|
||||
expireTime = newTime.AddDate(0, 0, 90)
|
||||
} else if record.MemberGenre == 202 {
|
||||
} else if record.MemberGenre == model.MemberGenreHalfYear {
|
||||
expireTime = newTime.AddDate(0, 0, 180)
|
||||
} else {
|
||||
expireTime = newTime.AddDate(1, 0, 0)
|
||||
|
@ -1432,9 +1428,9 @@ func HmPushWXPayNotice(c *gin.Context) {
|
|||
|
||||
if user.MemberExpire.After(newTime) {
|
||||
//expireTime = user.MemberExpire.AddDate(1, 0, 0)
|
||||
if record.MemberGenre == 201 {
|
||||
if record.MemberGenre == model.MemberGenreQuarter {
|
||||
expireTime = user.MemberExpire.AddDate(0, 0, 90)
|
||||
} else if record.MemberGenre == 202 {
|
||||
} else if record.MemberGenre == model.MemberGenreHalfYear {
|
||||
expireTime = user.MemberExpire.AddDate(0, 0, 180)
|
||||
} else {
|
||||
expireTime = user.MemberExpire.AddDate(1, 0, 0)
|
||||
|
@ -1502,37 +1498,16 @@ func HmPushWXPayNotice(c *gin.Context) {
|
|||
if err != nil && err != model.RecordNotFound {
|
||||
logger.Error("err:", err)
|
||||
} else {
|
||||
//if err == model.RecordNotFound {
|
||||
// userInvite := &model.UserInvite{
|
||||
// FromUid: 0,
|
||||
// UserType: 0,
|
||||
// StoreId: 0,
|
||||
// MemberOpenTime: newTime,
|
||||
// MemberType: 2,
|
||||
// ToUid: record.Uid,
|
||||
// MemberStatus: 2,
|
||||
// MemberLevel: record.MemberLevel,
|
||||
// Action: 1,
|
||||
// SpendType: 1,
|
||||
// }
|
||||
// err := userInvite.Create(model.DB)
|
||||
// if err != nil {
|
||||
// logger.Error("err:", err)
|
||||
// }
|
||||
// err = model.SendUserVm(record.Uid, record.MemberLevel, 100)
|
||||
// if err != nil {
|
||||
// logger.Error("send user vm err:", err)
|
||||
// }
|
||||
//}
|
||||
|
||||
if err == nil {
|
||||
//qs := model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).GetUpdater()
|
||||
if invite.Action != 2 {
|
||||
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()
|
||||
// SpendType 类型
|
||||
//if user.MemberLevel != 2 {
|
||||
// qs = qs.SetMemberOpenTime(newTime).SetMemberLevel(record.MemberLevel)
|
||||
//}
|
||||
|
||||
if isShopAssistantCode {
|
||||
qs = qs.SetInviteForm(1)
|
||||
}
|
||||
|
@ -1552,10 +1527,11 @@ func HmPushWXPayNotice(c *gin.Context) {
|
|||
}
|
||||
}()
|
||||
}
|
||||
} else {
|
||||
} else { // 续费会员-用户直接续费
|
||||
inviteRecordNew := &model.UserInviteRecord{
|
||||
ToUid: invite.ToUid,
|
||||
FromUid: invite.FromUid,
|
||||
StoreId: effectiveStoreInfo.StoreID,
|
||||
Action: 2,
|
||||
SpendType: spendType,
|
||||
MemberLevel: record.MemberLevel,
|
||||
|
@ -1586,8 +1562,9 @@ func HmPushWXPayNotice(c *gin.Context) {
|
|||
FirstInvite: 0,
|
||||
MemberGenre: record.MemberGenre,
|
||||
}
|
||||
if isShopAssistantCode {
|
||||
if isShopAssistantCode { // 如果使用了优惠券,则是店员邀请续费;否则是用户自己发起续费
|
||||
userInviteNew.InviteForm = 1
|
||||
userInviteNew.StoreId = effectiveStoreInfo.StoreID
|
||||
}
|
||||
err = model.DB.Create(userInviteNew).Error
|
||||
if err != nil {
|
||||
|
@ -1598,20 +1575,6 @@ func HmPushWXPayNotice(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()
|
||||
|
||||
|
@ -1621,14 +1584,19 @@ func HmPushWXPayNotice(c *gin.Context) {
|
|||
userQs = userQs.SetCooperativeBusinessId(inviteUser.CooperativeBusinessId).
|
||||
SetCooperativeName(inviteUser.CooperativeName)
|
||||
|
||||
effectiveStoreId := invite.StoreId
|
||||
if isShopAssistantCode { // 如果使用了优惠券,则是店员邀请续费;否则是用户自己发起续费
|
||||
effectiveStoreId = effectiveStoreInfo.StoreID
|
||||
}
|
||||
|
||||
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))
|
||||
|
||||
} 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))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ const (
|
|||
)
|
||||
|
||||
type OpenMemberReq struct {
|
||||
MemberLevel uint32 `json:"member_level"` // 昵称
|
||||
MemberLevel uint32 `json:"member_level"` // 会员等级
|
||||
MemberGenre uint32 `json:"member_genre"` // 会员标记: 黄金会员:90天-201 180天-202
|
||||
UserCouponId uint32 `json:"user_coupon_id"` // 优惠券id
|
||||
}
|
||||
|
@ -260,7 +260,8 @@ func OpenMember(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
if req.UserCouponId != 0 && req.MemberGenre == 0 { //短期会员不可用优惠券
|
||||
//短期会员不可用优惠券
|
||||
if req.UserCouponId != 0 && req.MemberGenre != model.MemberGenreQuarter && req.MemberGenre != model.MemberGenreHalfYear {
|
||||
var coupon model.UserCoupon
|
||||
err = model.NewUserCouponQuerySet(model.DB).IDEq(req.UserCouponId).One(&coupon)
|
||||
if err != nil {
|
||||
|
|
|
@ -23,6 +23,8 @@ import (
|
|||
|
||||
const AppletCodeBaseUrl = "http://switch.deovo.com:8000/img/applet_code/"
|
||||
|
||||
//const AppletCodeBaseUrl = "http://dev.switch.deovo.com:8000/img/applet_code/"
|
||||
|
||||
func GetWxAccessToken(appId, secret string) string {
|
||||
//https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
|
||||
response := struct {
|
||||
|
@ -134,6 +136,7 @@ func GenDrawShareCode(Did string, appId, secret string, userID ...uint32) (strin
|
|||
"width": 430,
|
||||
"auto_color": false,
|
||||
"is_hyaline": false,
|
||||
//"env_version": "trial", // 跳转版本,默认不传为正式版
|
||||
}, requests.JSON)
|
||||
if err != nil {
|
||||
return "", err
|
||||
|
|
|
@ -6,8 +6,9 @@ import (
|
|||
"time"
|
||||
)
|
||||
|
||||
//go:generate goqueryset -in analyse.go
|
||||
// gen:qs
|
||||
//
|
||||
//go:generate goqueryset -in analyse.go
|
||||
type Statistic struct {
|
||||
Model
|
||||
|
||||
|
@ -80,30 +81,30 @@ type UserMemberRecord struct {
|
|||
}
|
||||
|
||||
func GetUserMemberRecordType(level uint32, memberType uint32) uint32 {
|
||||
if memberType == 1 {
|
||||
if memberType == 1 { // 开通会员
|
||||
switch level {
|
||||
case 2:
|
||||
return 1
|
||||
case 4:
|
||||
return 2
|
||||
case 5:
|
||||
return 3
|
||||
case 2: // 黄金
|
||||
return 1 //开通黄金
|
||||
case 4: // 白金
|
||||
return 2 // 开通白金
|
||||
case 5: // 黑金
|
||||
return 3 // 开通黑金
|
||||
}
|
||||
} else if memberType == 2 {
|
||||
} else if memberType == 2 { // 续费会员
|
||||
switch level {
|
||||
case 2:
|
||||
return 4
|
||||
case 4:
|
||||
return 5
|
||||
case 5:
|
||||
return 6
|
||||
case 2: // 黄金
|
||||
return 4 //续费黄金
|
||||
case 4: // 白金
|
||||
return 5 //续费白金
|
||||
case 5: // 黑金
|
||||
return 6 //续费黑金
|
||||
}
|
||||
} else if memberType == 3 {
|
||||
} else if memberType == 3 { // 升级会员
|
||||
switch level {
|
||||
case 4:
|
||||
return 7
|
||||
case 5:
|
||||
return 8
|
||||
case 4: // 白金
|
||||
return 7 // 升级白金
|
||||
case 5: // 黑金
|
||||
return 8 // 升级黑金
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -86,7 +86,7 @@ func GetMemberConfig(level uint32, genre uint32) (*MemberConfig, error) {
|
|||
if level == 3 {
|
||||
level = 2
|
||||
}
|
||||
if level == 2 && genre != 0 { // 判断是否为黄金短期会员
|
||||
if level == 2 && (genre == 201 || genre == 202) { // 判断是否为黄金短期会员
|
||||
v, ok := ShortMemberConfigMap[genre]
|
||||
if !ok {
|
||||
logger.Error("genre err")
|
||||
|
|
|
@ -24,6 +24,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-激活邀请
|
||||
SpendType uint32 `json:"spend_type"` // 1-未开通 2-开通会员 3-续费 4-升级
|
||||
MemberLevel uint32 `json:"member_level"` // 会员等级 0-未开通 1-普通 2-黄金 3-短期 4-白金 5-黑金
|
||||
|
|
|
@ -1973,7 +1973,7 @@ func TestNameScanInvite(t *testing.T) {
|
|||
if inviteErr == RecordNotFound {
|
||||
memberLevel := user.MemberLevel
|
||||
if memberLevel == 0 {
|
||||
memberLevel = MemberTypeConsumer
|
||||
memberLevel = MemberLevelUser
|
||||
}
|
||||
invite := &UserInvite{
|
||||
FromUid: InviteUid,
|
||||
|
@ -2070,7 +2070,7 @@ func TestNewUser(t *testing.T) {
|
|||
FromUid: InviteUid,
|
||||
UserType: inviteUser.UserType,
|
||||
StoreId: inviteUser.StoreId,
|
||||
MemberType: MemberTypeConsumer,
|
||||
MemberType: MemberLevelUser,
|
||||
ToUid: user.Uid,
|
||||
MemberStatus: 1,
|
||||
Action: 1,
|
||||
|
|
|
@ -43,7 +43,8 @@ func GetStoreList(cardInfos []CardInfo) ([]GameCardStock, error) {
|
|||
storesCh := make(chan *[]Store, 0)
|
||||
eg.Go(func() error {
|
||||
gameStore := make([]Store, 0)
|
||||
err := NewStoreQuerySet(DB).IsOnlineEq(1).IsMemberServiceEq(1).OrderDescByCreatedAt().All(&gameStore)
|
||||
err := NewStoreQuerySet(DB).IsMemberServiceEq(1).CooperativeBusinessIdEq(1).
|
||||
OrderDescByCreatedAt().All(&gameStore)
|
||||
if err != nil && err != RecordNotFound {
|
||||
logger.Errorf("err:%+v", err)
|
||||
return err
|
||||
|
|
|
@ -56,7 +56,7 @@ type SysUserB struct {
|
|||
}
|
||||
|
||||
type StoreInfo struct {
|
||||
StoreID int `json:"storeId"` //门店id
|
||||
StoreID uint64 `json:"storeId"` //门店id
|
||||
StoreName string `json:"storeName"` //门店名称
|
||||
ExpireTime string `json:"expireTime"` //有效期
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
"github.com/rs/zerolog/log"
|
||||
"mh-server/lib/utils"
|
||||
"mh-server/lib/wxpay"
|
||||
"sort"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
@ -86,16 +87,18 @@ func (o *User) TableName() string {
|
|||
}
|
||||
|
||||
const (
|
||||
MemberTypeConsumer = 1 // 普通用户
|
||||
MemberTypeMember = 2 // 黄金会员
|
||||
MemberGenreYear = 200 // 短期会员:黄金年费会员
|
||||
MemberGenreQuarter = 201 // 短期会员:黄金季度会员
|
||||
MemberGenreHalfYear = 202 // 短期会员:黄金半年会员
|
||||
)
|
||||
|
||||
const (
|
||||
MemberLevelConsumer = 1 // 普通用户
|
||||
MemberLevelGold = 2 // 黄金会员
|
||||
MemberLevelPeriod = 3 // 短期会员
|
||||
MemberLevelPlatinum = 4 // 白金会员
|
||||
MemberLevelBlackGold = 5 // 黑金会员
|
||||
MemberLevelConsumer = 10 // 普通用户:有开过零售单,留了手机号,但是小程序端未登陆过的,仍然是普通用户
|
||||
MemberLevelUser = 1 // 普通会员:仅进入了小程序且授权过手机号的为会员用户,未开通租卡会员的为“普通会员”
|
||||
MemberLevelGold = 2 // 黄金会员
|
||||
MemberLevelPeriod = 3 // 短期会员
|
||||
MemberLevelPlatinum = 4 // 白金会员
|
||||
MemberLevelBlackGold = 5 // 黑金会员
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -125,7 +128,7 @@ type UserInvite struct {
|
|||
MemberLevel uint32 `json:"member_level"` // 会员等级
|
||||
MemberGenre uint32 `json:"member_genre"` // 会员类型
|
||||
UserInviteRecordId uint32 `json:"user_invite_record_id"` // 邀请记录
|
||||
FirstInvite uint32 `json:"first_invite"` // 首次
|
||||
FirstInvite uint32 `json:"first_invite"` // 首次邀请标志:1 首次邀请 0 非首次
|
||||
Scan uint32 `json:"scan"` // 扫码
|
||||
InviteForm uint32 `json:"invite_form"` // 邀请方式: 1-店员邀请码续费
|
||||
RenewHide uint32 `json:"renew_hide"` // 自动续费
|
||||
|
@ -255,6 +258,32 @@ func GetUserByUid(uid uint32) *User {
|
|||
return user
|
||||
}
|
||||
|
||||
// GetUserEffectiveStore 获取店员当前的有效门店(邀请客户时使用)
|
||||
func GetUserEffectiveStore(uid uint32) (*StoreInfo, error) {
|
||||
user := new(SysUser)
|
||||
if err := NewSysUserQuerySet(DB).UidEq(uid).One(user); err != nil {
|
||||
logger.Error(err, uid)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(user.StoreList) == 0 {
|
||||
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)
|
||||
|
||||
if timeI.Equal(timeJ) {
|
||||
return user.StoreList[i].StoreID < user.StoreList[j].StoreID
|
||||
}
|
||||
return timeI.Before(timeJ)
|
||||
})
|
||||
|
||||
return &user.StoreList[0], nil
|
||||
}
|
||||
|
||||
func GetUserRentCard(uid uint32) *UserRentCard {
|
||||
userRent := new(UserRentCard)
|
||||
if err := NewUserRentCardQuerySet(DB).UidEq(uid).One(userRent); err != nil {
|
||||
|
@ -1200,6 +1229,11 @@ func StorePromotion(inviteUid, uid uint32, inviteUser, user *User) error {
|
|||
}
|
||||
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 ",
|
||||
|
@ -1212,6 +1246,7 @@ func StorePromotion(inviteUid, uid uint32, inviteUser, user *User) error {
|
|||
firstInviteRecord := &UserInviteRecord{
|
||||
ToUid: user.Uid,
|
||||
FromUid: inviteUid,
|
||||
StoreId: effectiveStoreInfo.StoreID,
|
||||
Action: 2, // 激活邀请
|
||||
SpendType: 1, // 未开通
|
||||
MemberLevel: 0, // 未开通会员
|
||||
|
@ -1228,6 +1263,7 @@ func StorePromotion(inviteUid, uid uint32, inviteUser, user *User) error {
|
|||
inviteRecord := &UserInviteRecord{
|
||||
ToUid: user.Uid,
|
||||
FromUid: inviteUid,
|
||||
StoreId: effectiveStoreInfo.StoreID,
|
||||
Action: 1, // 未激活
|
||||
SpendType: 1, // 未开通
|
||||
MemberLevel: 0,
|
||||
|
@ -1252,22 +1288,22 @@ func StorePromotion(inviteUid, uid uint32, inviteUser, user *User) error {
|
|||
if inviteErr == RecordNotFound {
|
||||
memberLevel := user.MemberLevel
|
||||
if memberLevel == 0 {
|
||||
memberLevel = MemberTypeConsumer
|
||||
memberLevel = MemberLevelUser
|
||||
}
|
||||
invite := &UserInvite{
|
||||
FromUid: inviteUid, // 邀请人用户id
|
||||
UserType: inviteUser.UserType, // 邀请人用户类型
|
||||
StoreId: inviteUser.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-店员邀请码续费
|
||||
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 {
|
||||
|
|
Loading…
Reference in New Issue
Block a user