From 38a4f330618b8fb15baa2d865341742c585de278 Mon Sep 17 00:00:00 2001 From: chenlin Date: Tue, 10 Dec 2024 18:04:41 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81config=E5=A2=9E=E5=8A=A0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=A1=B9test=5Fuser=5FInfo=EF=BC=8C=E6=96=B9=E4=BE=BF?= =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E6=B5=8B=E8=AF=95=EF=BC=9B=202?= =?UTF-8?q?=E3=80=81=E4=BC=98=E6=83=A0=E5=88=B8=E6=9C=89=E6=95=88=E6=9C=9F?= =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9B=203=E3=80=81=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E7=B1=BB=E5=9E=8B=EF=BC=9A4-?= =?UTF-8?q?=E5=B0=8A=E4=BA=AB=E4=BC=9A=E5=91=98=205-=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=94=A8=E6=88=B7=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/models/dispose_config.go | 37 +++++++++++++ app/admin/models/marketing.go | 84 +++++++++++++++++++++++------- app/admin/models/user.go | 17 ++++++ 3 files changed, 119 insertions(+), 19 deletions(-) diff --git a/app/admin/models/dispose_config.go b/app/admin/models/dispose_config.go index a13afd2..2f1bf06 100644 --- a/app/admin/models/dispose_config.go +++ b/app/admin/models/dispose_config.go @@ -46,6 +46,7 @@ const ( ConfigCooperativePayInfo = "cooperative_pay_info" // 合作商支付设置 ConfigErpOrderShowInfo = "erp_order_show_config" // 零售订单显示设置 ConfigSystemSmsCount = "sms_config" // 获取系统每月短信限额 + ConfigTestUserInfo = "test_user_Info" // 获取测试用户uid ) func PayConfigInfo() (*PayConfig, error) { @@ -382,6 +383,10 @@ type SystemSmsConfig struct { MonthFreeCount uint32 `json:"month_free_count" ` // 每月短信免费额度 } +type TestUserInfoConfig struct { + Uid []uint32 `json:"uid" ` // 测试用户uid +} + // SetErpOrderShowConfig 设置零售订单展示配置信息 func SetErpOrderShowConfig(req *ErpOrderShowConfig) error { showInfo := ErpOrderShowConfig{ @@ -592,3 +597,35 @@ func GetSystemSmsConfig() (int, error) { return int(smsConfig.MonthFreeCount), nil } + +// GetTestUserConfig 获取测试用户信息 +func GetTestUserConfig() ([]UserInfo, error) { + testConfig := new(TestUserInfoConfig) + var configAllocation Config + err := orm.Eloquent.Table("config").Where("name=?", ConfigTestUserInfo).Find(&configAllocation).Error + if err != nil { + logger.Errorf("GetSystemSmsConfig err:", err) + return nil, err + } + + err = json.Unmarshal([]byte(configAllocation.Value), testConfig) + if err != nil { + logger.Errorf("GetSystemSmsConfig err:", err) + return nil, err + } + + var users []UserInfo + for i, item := range testConfig.Uid { + user, _ := GetUserInfoByUid(item) + if user.ID == 0 { // 没查到数据 + continue + } + + user.ID = uint32(i) + 1 + user.MemberLevel = MemberLevelTest + + users = append(users, user) + } + + return users, nil +} diff --git a/app/admin/models/marketing.go b/app/admin/models/marketing.go index 906c0b1..22c991d 100644 --- a/app/admin/models/marketing.go +++ b/app/admin/models/marketing.go @@ -275,6 +275,7 @@ func CreateErpMarketingCoupon(req *ErpMarketingCouponCreateReq) error { CategoryNumber: req.CategoryNumber, ActivityType: 666, ErpCouponId: erpCoupon.ID, + ActiveStart: Now(), ActiveEnd: Now().AddDate(0, 0, int(req.ActiveDate)), Limit: req.Limit, } @@ -337,6 +338,8 @@ func EditErpMarketingCoupon(req *ErpMarketingCouponEditReq) error { coupon.Describe = req.Describe coupon.Rule = req.Rule coupon.Value = req.Amount * 100 + coupon.ActiveStart = Now() + coupon.ActiveEnd = Now().AddDate(0, 0, int(req.ActiveDate)) err = begin.Model(&Coupon{}).Where("erp_coupon_id = ?", req.ErpCouponId). Omit("created_at").Save(coupon).Error @@ -530,17 +533,46 @@ func GetTaskProgress(erpCouponId []uint32) ([]CouponIssuanceTask, error) { func getUsersAfterID(lastUserID, userType uint32) ([]UserInfo, error) { var err error var users []UserInfo + // 获取尊享会员信息 + var privilegeUserList []PrivilegeMember switch userType { case 2: // 2-未付费用户:MemberLevel 不能是 (2, 3, 4, 5),不包含已过期的租卡用户 - err = orm.Eloquent.Model(&UserInfo{}).Where("id > ? and member_level not in ? and member_expire = ?", lastUserID, []uint32{ - MemberLevelGold, MemberLevelPeriod, MemberLevelPlatinum, MemberLevelBlackGold}, "0000-00-00 00:00:00"). - Order("id asc").Limit(100).Find(&users).Error - case 3: - // 3-已付费用户:MemberLevel 必须是 (2, 3, 4, 5) + err = orm.Eloquent.Model(&UserInfo{}).Where("id > ? and member_level not in ? and member_expire = ?", + lastUserID, []uint32{MemberLevelGold, MemberLevelPeriod, MemberLevelPlatinum, MemberLevelBlackGold}, + "0000-00-00 00:00:00").Order("id asc").Limit(100).Find(&users).Error + + case 3: // 3-已付费用户:MemberLevel 必须是 (2, 3, 4, 5) err = orm.Eloquent.Model(&UserInfo{}).Where("id > ? and member_level in ?", lastUserID, []uint32{ MemberLevelGold, MemberLevelPeriod, MemberLevelPlatinum, MemberLevelBlackGold}). Order("id asc").Limit(100).Find(&users).Error + + case 4: // 尊享会员 + err = orm.Eloquent.Model(&PrivilegeMember{}).Where("id > ? and member_level = ?", + lastUserID, MemberLevelPrivilege).Order("id asc").Limit(100).Find(&privilegeUserList).Error + if err != nil { + return nil, err + } + for _, privilegeUser := range privilegeUserList { + user, _ := GetUserInfoByUid(privilegeUser.Uid) + if user.ID == 0 { // 没查到数据 + user.Uid = privilegeUser.Uid + user.Tel = privilegeUser.Tel + } + + user.ID = privilegeUser.ID + user.MemberLevel = MemberLevelPrivilege + users = append(users, user) + } + + case 5: // 测试用户 + if lastUserID == 0 { + users, err = GetTestUserConfig() + if err != nil { + return nil, err + } + } + case 1: // 1-所有人:不限制会员等级,所有人均可领取 fallthrough default: @@ -551,6 +583,7 @@ func getUsersAfterID(lastUserID, userType uint32) ([]UserInfo, error) { if err != nil { return nil, err } + return users, nil } @@ -595,19 +628,6 @@ func markTaskAsCompleted(erpCouponId []uint32, nTotalCount int) error { // 校验用户是否符合领取优惠券的条件 func isEligibleForCoupon(user UserInfo, erpCoupon ErpCoupon) bool { - // 获取尊享会员信息 - var privilegeUserInfo PrivilegeMember - if err := orm.Eloquent.Table("privilege_member").Where("uid = ?", user.Uid).Find(&privilegeUserInfo).Error; err != nil { - logger.Errorf("获取尊享会员信息出错:", logger.Field("err", err)) - return false - } - - // 如果是尊享会员,将其视为付费会员 - if privilegeUserInfo.MemberLevel == MemberLevelPrivilege { - // 尊享会员归类为已付费用户 - user.MemberLevel = MemberLevelGold // 可以选择将尊享会员设为任意一个付费会员等级,通常设为黄金会员 - } - switch erpCoupon.UserType { case 1: // 1-所有人:不限制会员等级,所有人均可领取 @@ -620,6 +640,11 @@ func isEligibleForCoupon(user UserInfo, erpCoupon ErpCoupon) bool { user.MemberLevel == MemberLevelBlackGold { return false } + + if IsValidPrivilegeMember(user.Uid) { // 如果是尊享会员 + return false + } + return true case 3: // 3-已付费用户:MemberLevel 必须是 (2, 3, 4, 5) @@ -629,6 +654,26 @@ func isEligibleForCoupon(user UserInfo, erpCoupon ErpCoupon) bool { user.MemberLevel == MemberLevelBlackGold { return true } + + if IsValidPrivilegeMember(user.Uid) { // 如果是尊享会员 + return true + } + + return false + case 4: // 尊享会员 + if user.MemberLevel == MemberLevelPrivilege { + return true + } + + if IsValidPrivilegeMember(user.Uid) { // 如果是尊享会员 + return true + } + + return false + case 5: // 测试用户 + if user.MemberLevel == MemberLevelTest { + return true + } return false default: // 未知类型,不发放 @@ -657,6 +702,7 @@ func issueCouponsToUsers(users []UserInfo, erpCouponId []uint32) (int, error) { } for _, coupon := range coupons { + duration := coupon.ActiveEnd.Sub(coupon.ActiveStart).Hours() / 24 couponCode, _ := utils.GenerateRandomNumber19() userCoupon := &UserCoupon{ Uid: user.Uid, @@ -665,7 +711,7 @@ func issueCouponsToUsers(users []UserInfo, erpCouponId []uint32) (int, error) { Value: coupon.Value, State: 1, ActiveStart: time.Now(), - ActiveEnd: coupon.ActiveEnd, + ActiveEnd: time.Now().Add(time.Duration(duration) * 24 * time.Hour), RedeemCode: "", CategoryNumber: coupon.CategoryNumber, Code: couponCode, diff --git a/app/admin/models/user.go b/app/admin/models/user.go index 0b1c81d..f8f9258 100644 --- a/app/admin/models/user.go +++ b/app/admin/models/user.go @@ -59,6 +59,7 @@ const ( MemberLevelPlatinum = 4 // 白金会员 MemberLevelBlackGold = 5 // 黑金会员 MemberLevelPrivilege = 6 // 尊享会员 + MemberLevelTest = 99 // 测试用户 ) const ( @@ -4741,3 +4742,19 @@ func GetUserTypeString(userType int) string { return "普通会员" } } + +func IsValidPrivilegeMember(uid uint32) bool { + // 获取尊享会员信息 + var privilegeUserInfo PrivilegeMember + if err := orm.Eloquent.Table("privilege_member").Where("uid = ?", uid).Find(&privilegeUserInfo).Error; err != nil { + logger.Errorf("获取尊享会员信息出错:", logger.Field("err", err)) + return false + } + + // 如果是尊享会员 + if privilegeUserInfo.MemberLevel == MemberLevelPrivilege { + return true + } + + return false +}