1、config增加配置项test_user_Info,方便优惠券测试;

2、优惠券有效期优化;
3、添加优惠券类型:4-尊享会员 5-测试用户;
This commit is contained in:
chenlin 2024-12-10 18:04:41 +08:00
parent ced83a4b87
commit 38a4f33061
3 changed files with 119 additions and 19 deletions

View File

@ -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
}

View File

@ -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,

View File

@ -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
}