This commit is contained in:
li 2022-07-25 12:02:53 +08:00
parent a07635bf14
commit 0a881f3b03
15 changed files with 3580 additions and 139 deletions

View File

@ -24,6 +24,7 @@ func runServer() {
logger.Error(err)
return
}
}
var serverCmd = &cobra.Command{
@ -130,3 +131,46 @@ func init() {
// }
// fmt.Println("DB init success")
//}
//func main() {
//
// router := gin.Default()
//
// // v1
// r1 := router.Group("/test/v1.0")
// {
// r1.GET("/testrestart", controller.Testshutdown)
// } //router.Run( utils.GlobalObject.ServiceHost + ":" + utils.GlobalObject.ServicePort)
// srv := &http.Server{
// Addr: utils.GlobalObject.ServiceHost + ":" + utils.GlobalObject.ServicePort,
// Handler: router,
// }
// go func() {
// // service connections
// if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
// log.Fatalf("listen: %s", err)
// }
// }()
//
// // Wait for interrupt signal to gracefully shutdown the server with
// // a timeout of 5 seconds.
// quit := make(chan os.Signal)
// // kill (no param) default send syscanll.SIGTERM
// // kill -2 is syscall.SIGINT
// // kill -9 is syscall. SIGKILL but can"t be catch, so don't need add it
// signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
// <-quit
// log.Println("Shutdown Server ...")
//
// ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
// defer cancel()
// if err := srv.Shutdown(ctx); err != nil {
// log.Fatal("Server Shutdown:", err)
// }
// // catching ctx.Done(). timeout of 5 seconds.
// select {
// case <-ctx.Done():
// log.Println("timeout of 10 seconds.")
// }
// log.Println("Server exiting")
//}

View File

@ -67,45 +67,45 @@ func AuthLogin(c *gin.Context) {
now := time.Now()
// 不存在则创建 新用户
//var invite *model.UserInvite
if req.InviteUid != 0 && req.InviteUid != user.Uid && user.StoreId == 0 {
//if req.InviteUid != 0 && req.InviteUid != user.Uid && user.StoreId == 0 {
if req.InviteUid != 0 && req.InviteUid != user.Uid {
inviteUser := model.GetUserByUid(req.InviteUid)
user.StoreId = inviteUser.StoreId
if inviteUser.UserType == 2 {
//user.UserType = model.UserTypeConsumer
num, err := model.NewUserQuerySet(model.DB).UidEq(user.Uid).GetUpdater().SetStoreId(inviteUser.StoreId).
_, err = model.NewUserQuerySet(model.DB).UidEq(user.Uid).GetUpdater().SetStoreId(inviteUser.StoreId).
UpdateNum()
if err != nil {
logger.Error(err)
}
if num == 0 {
logger.Error("update store id err")
memberLevel := user.MemberLevel
if memberLevel == 0 {
memberLevel = model.MemberTypeConsumer
}
invite := &model.UserInvite{
FromUid: req.InviteUid,
UserType: inviteUser.UserType,
StoreId: inviteUser.StoreId,
MemberOpenTime: time.Time{},
MemberType: model.MemberTypeConsumer,
MemberType: memberLevel,
MemberStatus: 1,
ToUid: user.Uid,
}
count, err := model.NewUserInviteQuerySet(model.DB).ToUidEq(user.Uid).Count()
if err != nil {
//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 count == 0 {
if err := invite.Create(model.DB); err != nil {
logger.Error(err)
RespJson(c, status.InternalServerError, nil)
return
}
}
}
}

View File

@ -81,7 +81,7 @@ func UserMemberRenewalState(c *gin.Context) {
if err == model.RecordNotFound || uint32(user.MemberExpire.Unix()) != activityMemberRenewal.MemberSerial {
//if user.MemberExpire.Before(utils.Now().AddDate(0, 1, 0)) &&
// user.MemberExpire.After(utils.Now()) {
if user.MemberExpire.Before(utils.Now().AddDate(0, 1, 0)) {
if user.MemberExpire.Before(utils.Now().AddDate(0, 0, model.GetActivityRenewalConfig().PopTrap)) {
activityMemberRenewal = model.ActivityMemberRenewal{
ActivityId: 1,
Uid: uc.Uid,
@ -114,7 +114,7 @@ func UserMemberRenewalState(c *gin.Context) {
isPop = false
}
}
if activityMemberRenewal.StartTime.AddDate(0, 0, model.MemberRenewalExpiration).Before(utils.Now()) {
if activityMemberRenewal.StartTime.AddDate(0, 0, model.GetActivityRenewalConfig().ActivityContinuity).Before(utils.Now()) {
activityMemberRenewal.State = 3
_, err = model.NewActivityMemberRenewalQuerySet(model.DB).IDEq(activityMemberRenewal.ID).GetUpdater().
SetState(3).UpdateNum()
@ -206,7 +206,7 @@ func UserMemberRenewalInfo(c *gin.Context) {
coupons[i].IsDraw = true
}
}
down := model.MemberRenewalExpiration*24*3600 - (utils.Now().Unix() - renewal.StartTime.Unix())
down := int64(model.GetActivityRenewalConfig().ActivityContinuity)*24*3600 - (utils.Now().Unix() - renewal.StartTime.Unix())
ret := map[string]interface{}{
"coupon_list": coupons,
"renewal": renewal,
@ -307,7 +307,7 @@ func UserMemberRenewalCouponDraw(c *gin.Context) {
Value: coupons[i].Value,
State: 1,
ActiveStart: time.Now(),
ActiveEnd: time.Now().AddDate(0, 0, model.MemberRenewalExpiration),
ActiveEnd: time.Now().AddDate(0, 0, model.GetActivityRenewalConfig().CouponValidity),
MemberLevel: coupons[i].MemberLevel,
}

View File

@ -435,32 +435,53 @@ func PushWXPayNotice(c *gin.Context) {
fundRecord.Uid = uint32(record.Uid)
fundRecord.FundType = model.FundTypeMemberFee
fundRecord.Remark = remark
memberRecord := &model.UserMemberRecord{
Uid: record.Uid,
AfterMemberLevel: record.MemberLevel,
}
newTime := time.Now()
var user model.User
err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).One(&user)
if err != nil {
logger.Error("err:", err)
} else {
expireTime := time.Now().AddDate(1, 0, 0)
if user.MemberExpire.After(time.Now()) {
expireTime := newTime.AddDate(1, 0, 0)
if user.MemberExpire.After(newTime) {
expireTime = user.MemberExpire.AddDate(1, 0, 0)
}
memberRecord.BeforeMemberLevel = user.MemberLevel
memberRecord.BeforeMemberExpire = user.MemberExpire
memberRecord.Serial = uint32(user.MemberExpire.Unix())
memberRecord.AfterMemberExpire = expireTime
if user.IsMember() {
memberRecord.OpenMemberLevel = user.OpenMemberLevel
memberRecord.OpenMemberTime = user.OpenMemberTime
} else {
memberRecord.OpenMemberLevel = record.MemberLevel
memberRecord.OpenMemberTime = newTime
}
memberConfig, err := model.GetMemberConfig(record.MemberLevel)
if err != nil {
logger.Error("GetMemberConfig err:", err)
return
}
openMemberTime := time.Now()
if !user.OpenMemberTime.IsZero() {
openMemberTime = user.OpenMemberTime
//openMemberTime := newTime
userUpdateQs := model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetMemberLevel(record.MemberLevel).
SetMemberExpire(expireTime).SetDeposit(memberConfig.MemberDeposit)
if user.OpenMemberTime.IsZero() {
//openMemberTime = user.OpenMemberTime
userUpdateQs = userUpdateQs.SetOpenMemberTime(newTime).SetOpenMemberLevel(record.MemberLevel)
memberRecord.Type = model.GetUserMemberRecordType(record.MemberLevel, 1)
} else {
memberRecord.Type = model.GetUserMemberRecordType(record.MemberLevel, 2)
}
_, err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetMemberLevel(record.MemberLevel).
SetMemberExpire(expireTime).SetDeposit(memberConfig.MemberDeposit).SetOpenMemberTime(openMemberTime).
UpdateNum()
_, err = userUpdateQs.UpdateNum()
if err != nil {
logger.Error("err:", err)
return
}
if record.UserCouponId > 0 {
err = model.NewUserCouponQuerySet(model.DB).IDEq(record.UserCouponId).GetUpdater().
SetState(2).SetUseTime(utils.Now()).Update()
@ -479,7 +500,7 @@ func PushWXPayNotice(c *gin.Context) {
FromUid: 0,
UserType: 0,
StoreId: 0,
MemberOpenTime: time.Now(),
MemberOpenTime: newTime,
MemberType: 2,
ToUid: record.Uid,
MemberStatus: 2,
@ -496,7 +517,7 @@ func PushWXPayNotice(c *gin.Context) {
} else {
qs := model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).GetUpdater()
if user.MemberLevel != 2 {
qs = qs.SetMemberOpenTime(time.Now()).SetMemberLevel(record.MemberLevel)
qs = qs.SetMemberOpenTime(newTime).SetMemberLevel(record.MemberLevel)
}
num, err := qs.SetMemberType(2).SetMemberStatus(2).UpdateNum()
if err != nil {
@ -526,8 +547,15 @@ func PushWXPayNotice(c *gin.Context) {
if inviteUser.UserType == 2 {
openMemberChannel = model.OpenMemberChannelStorePromotion
model.AddCooperativeMemberPromotion(inviteUser.CooperativeBusinessId,
uint32(inviteUser.StoreId), inviteUser.Uid, int(record.MemberLevel))
if !user.OpenMemberTime.IsZero() {
fmt.Println("用户续费---")
model.AddCooperativeMemberRenewal(inviteUser.CooperativeBusinessId,
uint32(inviteUser.StoreId), inviteUser.Uid, int(record.MemberLevel))
} else {
fmt.Println("用户开通------")
model.AddCooperativeMemberPromotion(inviteUser.CooperativeBusinessId,
uint32(inviteUser.StoreId), inviteUser.Uid, int(record.MemberLevel))
}
userQs = userQs.SetCooperativeBusinessId(inviteUser.CooperativeBusinessId).
SetCooperativeName(inviteUser.CooperativeName)
@ -544,7 +572,12 @@ func PushWXPayNotice(c *gin.Context) {
if user.MemberLevel != 2 {
}
go func() {
err = model.DB.Create(memberRecord).Error
if err != nil {
logger.Error("create member record err:", err)
}
}()
model.CreateUserRentCardByMemberLevel(record.Uid, record.MemberLevel, memberConfig.CardMax)
}
_, err = model.NewUserOpenMemberRecordQuerySet(model.DB).IDEq(record.ID).GetUpdater().SetState(2).UpdateNum()
@ -662,6 +695,24 @@ func PushWXPayNotice(c *gin.Context) {
logger.Error("user err:", err)
return
}
memberRecord := &model.UserMemberRecord{
Uid: record.Uid,
BeforeMemberLevel: user.MemberLevel,
AfterMemberLevel: record.MemberLevel,
BeforeMemberExpire: user.MemberExpire,
AfterMemberExpire: record.MemberExpire,
InviteUid: 0,
DeductionDays: record.DeductionDays,
DeductionFee: record.DeductionFee,
CouponId: record.UserCouponId,
Serial: uint32(user.MemberExpire.Unix()),
Type: model.GetUserMemberRecordType(record.MemberLevel, 3),
OpenMemberLevel: user.OpenMemberLevel,
OpenMemberTime: user.OpenMemberTime,
}
memberRecord.Add()
memberConfig, err := model.GetMemberConfig(record.MemberLevel)
if err != nil {
logger.Error("GetMemberConfig err:", err)
@ -717,6 +768,7 @@ func PushWXPayNotice(c *gin.Context) {
if err != nil {
logger.Error("update user open member record state:err", err)
}
fundRecord.Uid = uint32(record.Uid)
fundRecord.FundType = model.FundTypeUpgradeMember
fundRecord.Remark = "升级会员"

View File

@ -57,3 +57,61 @@ func GetActionUserRenewalLog(uid, action uint32) (UserRenewalLog, error) {
}
return userRenewalLog, nil
}
// gen:qs
type UserMemberRecord struct {
Model
Uid uint32 `json:"uid" gorm:"index"`
BeforeMemberLevel uint32 `json:"before_member_level"`
AfterMemberLevel uint32 `json:"after_member_level"`
BeforeMemberExpire time.Time `json:"before_member_expire"`
AfterMemberExpire time.Time `json:"after_member_expire"`
InviteUid uint32 `json:"invite_uid" gorm:"index"`
DeductionDays uint32 `json:"deduction_days"` // 抵扣天数
DeductionFee uint32 `json:"deduction_fee"` // 抵扣金额
CouponId uint32 `json:"coupon_id"` // 优惠券id
Serial uint32 `json:"serial" gorm:"index"` // 日志
Type uint32 `json:"type" gorm:"index"` // 1-开通黄金 2-开通白金 3-开通黑金 4-续费黄金 5-续费白金 6-续费黑金 7-升级白金 8-升级黑金
OpenMemberLevel uint32 `json:"open_member_level"`
OpenMemberTime time.Time `json:"open_member_time"`
}
func GetUserMemberRecordType(level uint32, memberType uint32) uint32 {
if memberType == 1 {
switch level {
case 2:
return 1
case 4:
return 2
case 5:
return 3
}
} else if memberType == 2 {
switch level {
case 2:
return 4
case 4:
return 5
case 5:
return 6
}
} else if memberType == 3 {
switch level {
case 4:
return 7
case 5:
return 8
}
}
return 0
}
func (m *UserMemberRecord) Add() {
go func() {
err := DB.Create(m).Error
if err != nil {
logger.Error("create user member record err:", err)
}
}()
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -27,10 +27,11 @@ type PayConfig struct {
}
const (
ConfigNamePay = "pay_config" // 支付配置
ConfigNameMember = "member_config" // 会员配置
ConfigNameMemberVm = "member_vm_config" // 会员积分配置
ConfigNameAttendanceVm = "attendance_vm_config" // 签到积分配置
ConfigNamePay = "pay_config" // 支付配置
ConfigNameMember = "member_config" // 会员配置
ConfigNameMemberVm = "member_vm_config" // 会员积分配置
ConfigNameAttendanceVm = "attendance_vm_config" // 签到积分配置
ConfigActivityRenewal = "activity_renewal_config" // 活动配置
)
func PayConfigInfo() (*PayConfig, error) {
@ -186,6 +187,39 @@ func (m *AttendanceVmConfig) Vm(days uint32) uint32 {
return vm
}
type ActivityRenewalConfig struct {
CouponValidity int `json:"coupon_validity"`
ActivityContinuity int `json:"activity_continuity"`
PopTrap int `json:"pop_trap"`
}
func ActivityRenewalConfigInfo() (ActivityRenewalConfig, error) {
activityRenewalConfig := ActivityRenewalConfig{}
var configAllocation Config
err := NewConfigQuerySet(DB).NameEq(ConfigActivityRenewal).One(&configAllocation)
if err != nil {
logger.Error("err:", err)
return activityRenewalConfig, err
}
err = json.Unmarshal([]byte(configAllocation.Value), &activityRenewalConfig)
if err != nil {
logger.Error("err:", err)
return activityRenewalConfig, err
}
return activityRenewalConfig, nil
}
func GetActivityRenewalConfig() ActivityRenewalConfig {
info, err := ActivityRenewalConfigInfo()
if err != nil {
logger.Error("info err:", err)
return info
}
return info
}
//type ConfigInterface interface {
// Encode() string
//}

View File

@ -39,21 +39,27 @@ type CooperativeBusiness struct {
// gen:qs
type CooperativeMemberDeduct struct {
Model
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"`
GoldDeduct uint32 `json:"gold_deduct"` // 黄金会员提成
PlatinumDeduct uint32 `json:"platinum_deduct"` // 白金会员提成
BlackGoldDeduct uint32 `json:"black_gold_deduct"` // 黑金金会员提成
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"`
GoldDeduct uint32 `json:"gold_deduct"` // 黄金会员提成
PlatinumDeduct uint32 `json:"platinum_deduct"` // 白金会员提成
BlackGoldDeduct uint32 `json:"black_gold_deduct"` // 黑金金会员提成
RenewalGoldDeduct uint32 `json:"renewal_gold_deduct"` // 续费黄金会员提成
RenewalPlatinumDeduct uint32 `json:"renewal_platinum_deduct"` // 续费白金会员提成
RenewalBlackGoldDeduct uint32 `json:"renewal_black_gold_deduct"` // 续费黑金金会员提成
// cooperative_member_deduct
}
// gen:qs
type CooperativeAssistantMemberDeduct struct {
Model
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"`
StoreId uint32 `json:"store_id" gorm:"index"` //
GoldDeduct uint32 `json:"gold_deduct"` // 黄金会员提成
PlatinumDeduct uint32 `json:"platinum_deduct"` // 白金会员提成
BlackGoldDeduct uint32 `json:"black_gold_deduct"` // 黑金金会员提成
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"`
StoreId uint32 `json:"store_id" gorm:"index"` //
GoldDeduct uint32 `json:"gold_deduct"` // 黄金会员提成
PlatinumDeduct uint32 `json:"platinum_deduct"` // 白金会员提成
BlackGoldDeduct uint32 `json:"black_gold_deduct"` // 黑金金会员提成
RenewalGoldDeduct uint32 `json:"renewal_gold_deduct"` // 续费黄金会员提成
RenewalPlatinumDeduct uint32 `json:"renewal_platinum_deduct"` // 续费白金会员提成
RenewalBlackGoldDeduct uint32 `json:"renewal_black_gold_deduct"` // 续费黑金金会员提成
// cooperative_assistant_member_deduct
}
@ -74,6 +80,11 @@ type CooperativeMemberPromotion struct {
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
Date string `json:"date" gorm:"index"` //
State string `json:"state"` // 待发起结算 待财务打款 已结算
RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费黄金会员数量
RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量
RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量
// cooperative_member_promotion
}
@ -82,12 +93,15 @@ type CooperativeMemberPromotion struct {
type CooperativeMemberPromotionStore struct {
Model
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"`
CooperativeName string `json:"cooperative_name"` // 合作商名称
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
Date string `json:"date" gorm:"index"` //
CooperativeName string `json:"cooperative_name"` // 合作商名称
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
Date string `json:"date" gorm:"index"` //
RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费黄金会员数量
RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量
RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量
// cooperative_member_promotion_store
}
@ -96,11 +110,14 @@ type CooperativeMemberPromotionStore struct {
type CooperativeMemberPromotionDay struct {
Model
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"`
CooperativeName string `json:"cooperative_name"` // 合作商名称
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
DayTime string `json:"day_time" gorm:"index"` //
CooperativeName string `json:"cooperative_name"` // 合作商名称
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
DayTime string `json:"day_time" gorm:"index"` //
RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费黄金会员数量
RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量
RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量
// cooperative_member_promotion_day
}
@ -109,13 +126,15 @@ type CooperativeMemberPromotionDay struct {
type CooperativeMemberPromotionStoreDay struct {
Model
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"`
CooperativeName string `json:"cooperative_name"` // 合作商名称
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
DayTime string `json:"day_time" gorm:"index"` //
CooperativeName string `json:"cooperative_name"` // 合作商名称
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
DayTime string `json:"day_time" gorm:"index"` //
RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费黄金会员数量
RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量
RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量
// cooperative_member_promotion_store_day
}
@ -131,9 +150,18 @@ type CooperativeDeductSettle struct {
GoldCount uint32 `json:"gold_count"` // 黄金会员数量
PlatinumCount uint32 `json:"platinum_count"` // 白金会员数量
BlackGoldCount uint32 `json:"black_gold_count"` // 黑金会员数量
GoldDeduct uint32 `json:"gold_deduct"` // 黄金会员提成配置
PlatinumDeduct uint32 `json:"platinum_deduct"` // 白金会员提成配置
BlackGoldDeduct uint32 `json:"black_gold_deduct"` // 黑金会员提成配置
GoldDeduct uint32 `json:"gold_deduct"` // 黄金会员提成配置
PlatinumDeduct uint32 `json:"platinum_deduct"` // 白金会员提成配置
BlackGoldDeduct uint32 `json:"black_gold_deduct"` // 黑金会员提成配置
RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费黄金会员数量
RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量
RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量
RenewalGoldDeduct uint32 `json:"renewal_gold_deduct"` // 续费黄金会员提成
RenewalPlatinumDeduct uint32 `json:"renewal_platinum_deduct"` // 续费白金会员提成
RenewalBlackGoldDeduct uint32 `json:"renewal_black_gold_deduct"` // 续费黑金金会员提成
}
func AddCooperativeMemberPromotion(cooperativeId, storeId, assistantUid uint32, memberLevel int) {
@ -462,3 +490,320 @@ func (m *CooperativeBusiness) SetAssistantMemberDeductConfig(storeId uint32) {
}
m.CooperativeAssistantMemberDeduct = &assistantDeductConfig
}
func AddCooperativeMemberRenewal(cooperativeId, storeId, assistantUid uint32, memberLevel int) {
defer func() {
if err := recover(); err != nil {
logger.Error("err:", err)
}
}()
var cooperativeBusiness CooperativeBusiness
err := NewCooperativeBusinessQuerySet(DB).IDEq(cooperativeId).One(&cooperativeBusiness)
if err != nil {
logger.Error("cooperative business err:", err)
return
}
//fmt.Println("cooperativeId:", cooperativeId)
//fmt.Println("storeId:", storeId)
//fmt.Println("assistantUid:", assistantUid)
//fmt.Println("memberLevel:", memberLevel)
go func() {
promotion := &CooperativeMemberPromotion{CooperativeBusinessId: cooperativeId, CooperativeName: cooperativeBusiness.Name}
promotionStore := &CooperativeMemberPromotionStore{CooperativeBusinessId: cooperativeId, CooperativeName: cooperativeBusiness.Name}
promotionDay := &CooperativeMemberPromotionDay{CooperativeBusinessId: cooperativeId, CooperativeName: cooperativeBusiness.Name}
promotionStoreDay := &CooperativeMemberPromotionStoreDay{CooperativeBusinessId: cooperativeId, CooperativeName: cooperativeBusiness.Name}
inviteReport := &InviteMemberReport{CooperativeBusinessId: cooperativeId, CooperativeName: cooperativeBusiness.Name,
Uid: assistantUid, StoreId: storeId,
}
begin := DB.Begin()
err = promotion.AddRenewal(begin, memberLevel)
if err != nil {
begin.Rollback()
logger.Error("promotion add promotion err:", err)
return
}
err = promotionStore.AddRenewal(begin, memberLevel, storeId)
if err != nil {
begin.Rollback()
logger.Error("promotion add promotion err:", err)
return
}
err = promotionDay.AddRenewal(begin, memberLevel)
if err != nil {
begin.Rollback()
logger.Error("promotion add promotion err:", err)
return
}
err = promotionStoreDay.AddRenewal(begin, memberLevel, storeId)
if err != nil {
begin.Rollback()
logger.Error("promotion add promotion err:", err)
return
}
err = inviteReport.AddRenewal(begin, memberLevel)
if err != nil {
begin.Rollback()
logger.Error("promotion add promotion err:", err)
return
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("commit err:", err)
return
}
}()
}
func (m *CooperativeMemberPromotion) AddRenewal(gdb *gorm.DB, memberLevel int) error {
dateString := utils.MonthDate()
if memberLevel < 0 {
return errors.New("member level err")
}
m.Date = dateString
sql := ""
switch memberLevel {
case 2:
sql = "UPDATE cooperative_member_promotion SET renewal_gold_count=renewal_gold_count+1 " +
fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d", dateString, m.CooperativeBusinessId)
m.RenewalGoldCount = 1
case 4:
sql = "UPDATE cooperative_member_promotion SET renewal_platinum_count=renewal_platinum_count+1 " +
fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d", dateString, m.CooperativeBusinessId)
m.RenewalPlatinumCount = 1
case 5:
sql = "UPDATE cooperative_member_promotion SET renewal_black_gold_count=renewal_black_gold_count+1 " +
fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d", dateString, m.CooperativeBusinessId)
m.RenewalBlackGoldCount = 1
}
fmt.Println("邀请会员sql:", sql)
exist, err := QueryRecordExist(fmt.Sprintf(
"SELECT * FROM cooperative_member_promotion WHERE cooperative_business_id=%d AND date='%s' ",
m.CooperativeBusinessId, dateString))
if err != nil {
logger.Error("cooperative member promotion record exist err:", err)
return err
}
//fmt.Println("是否存在数据:", fmt.Sprintf(
// "SELECT * FROM cooperative_member_promotion WHERE cooperative_business_id=%d AND date='%s'",
// m.CooperativeBusinessId, dateString))
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
}
func (m *CooperativeMemberPromotionStore) AddRenewal(gdb *gorm.DB, memberLevel int, storeId uint32) error {
dateString := utils.MonthDate()
if memberLevel < 0 {
return errors.New("member level err")
}
m.Date = dateString
m.StoreId = storeId
sql := ""
switch memberLevel {
case 2:
sql = "UPDATE cooperative_member_promotion_store SET renewal_gold_count=renewal_gold_count+1 " +
fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d",
dateString, m.CooperativeBusinessId, storeId)
m.RenewalGoldCount = 1
case 4:
sql = "UPDATE cooperative_member_promotion_store SET renewal_platinum_count=renewal_platinum_count+1 " +
fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d",
dateString, m.CooperativeBusinessId, storeId)
m.RenewalPlatinumCount = 1
case 5:
sql = "UPDATE cooperative_member_promotion_store SET renewal_black_gold_count=renewal_black_gold_count+1 " +
fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d",
dateString, m.CooperativeBusinessId, storeId)
m.RenewalBlackGoldCount = 1
}
exist, err := QueryRecordExist(fmt.Sprintf(
"SELECT * FROM cooperative_member_promotion_store WHERE cooperative_business_id=%d AND date='%s' AND store_id=%d",
m.CooperativeBusinessId, dateString, storeId))
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 {
err = gdb.Create(m).Error
if err != nil {
logger.Error("create cooperative member promotion err:", err)
return err
}
}
return nil
}
func (m *CooperativeMemberPromotionDay) AddRenewal(gdb *gorm.DB, memberLevel int) error {
dayString := utils.TodayZeroDateFormat()
if memberLevel < 0 {
return errors.New("member level err")
}
m.DayTime = dayString
sql := ""
switch memberLevel {
case 2:
sql = "UPDATE cooperative_member_promotion_day SET renewal_gold_count=renewal_gold_count+1 " +
fmt.Sprintf("WHERE day_time='%s' AND cooperative_business_id=%d", dayString, m.CooperativeBusinessId)
m.RenewalGoldCount = 1
case 4:
sql = "UPDATE cooperative_member_promotion_day SET renewal_platinum_count=renewal_platinum_count+1 " +
fmt.Sprintf("WHERE day_time='%s' AND cooperative_business_id=%d", dayString, m.CooperativeBusinessId)
m.RenewalPlatinumCount = 1
case 5:
sql = "UPDATE cooperative_member_promotion_day SET renewal_black_gold_count=renewal_black_gold_count+1 " +
fmt.Sprintf("WHERE day_time='%s' AND cooperative_business_id=%d", dayString, m.CooperativeBusinessId)
m.RenewalBlackGoldCount = 1
}
exist, err := QueryRecordExist(fmt.Sprintf(
"SELECT * FROM cooperative_member_promotion_day WHERE cooperative_business_id=%d AND day_time='%s'",
m.CooperativeBusinessId, dayString))
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 day err:", err)
return err
}
} else {
err = gdb.Create(m).Error
if err != nil {
logger.Error("create cooperative member promotion day err:", err)
return err
}
}
return nil
}
func (m *CooperativeMemberPromotionStoreDay) AddRenewal(gdb *gorm.DB, memberLevel int, storeId uint32) error {
dateString := utils.TodayZeroDateFormat()
if memberLevel < 0 {
return errors.New("member level err")
}
m.DayTime = dateString
m.StoreId = storeId
sql := ""
switch memberLevel {
case 2:
sql = "UPDATE cooperative_member_promotion_store_day SET renewal_gold_count=renewal_gold_count+1 " +
fmt.Sprintf("WHERE day_time='%s' AND cooperative_business_id=%d AND store_id=%d",
dateString, m.CooperativeBusinessId, storeId)
m.RenewalGoldCount = 1
case 4:
sql = "UPDATE cooperative_member_promotion_store_day SET renewal_platinum_count=renewal_platinum_count+1 " +
fmt.Sprintf("WHERE day_time='%s' AND cooperative_business_id=%d AND store_id=%d",
dateString, m.CooperativeBusinessId, storeId)
m.RenewalPlatinumCount = 1
case 5:
sql = "UPDATE cooperative_member_promotion_store_day SET renewal_black_gold_count=renewal_black_gold_count+1 " +
fmt.Sprintf("WHERE day_time='%s' AND cooperative_business_id=%d AND store_id=%d",
dateString, m.CooperativeBusinessId, storeId)
m.RenewalBlackGoldCount = 1
}
exist, err := QueryRecordExist("SELECT * FROM cooperative_member_promotion_store_day " +
fmt.Sprintf("WHERE cooperative_business_id=%d AND day_time='%s' AND store_id=%d",
m.CooperativeBusinessId, dateString, storeId))
if err != nil {
logger.Error("cooperative member promotion store day record exist err:", err)
return err
}
if exist {
err = gdb.Exec(sql).Error
if err != nil {
logger.Error("update cooperative member promotion store day err:", err)
return err
}
} else {
err = gdb.Create(m).Error
if err != nil {
logger.Error("create cooperative member promotion store day err:", err)
return err
}
}
return nil
}
func (m *InviteMemberReport) AddRenewal(gdb *gorm.DB, memberLevel 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 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)
m.RenewalGoldCount = 1
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)
m.RenewalPlatinumCount = 1
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)
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))
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
}

View File

@ -5,9 +5,17 @@ import "time"
const (
CouponTypeDeduction = "deduction" // 抵扣
)
const (
MemberRenewalExpiration = 7
)
//var MemberRenewalExpiration int
//var PopTrap int
//var CouponValidity int
//func MemberRenewalActivityInit() {
// renewalConfig := GetActivityRenewalConfig()
// MemberRenewalExpiration = renewalConfig.ActivityContinuity
// PopTrap = renewalConfig.PopTrap
// CouponValidity = renewalConfig.CouponValidity
//}
//go:generate goqueryset -in coupon.go
// gen:qs

View File

@ -36,6 +36,7 @@ type GameCard struct {
RealPrice uint32 `json:"real_price"` // 真实价格
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"` // 合作商id
CooperativeName string `json:"cooperative_name"` // 合作商名称
VideoLink string `json:"video_link"` // 链接
}
func (*GameCard) TableName() string {

View File

@ -116,16 +116,44 @@ func InitTestDB() {
//&OperationLog{},
//&DeliverTask{},
//&DeliverTaskSub{},
&User{},
// 优惠券
&GameCard{},
&ActivityMemberRenewal{},
&Activity{},
&UserCoupon{},
&Coupon{},
//&GameCard{},
//&ActivityMemberRenewal{},
//&Activity{},
//&UserCoupon{},
//&Coupon{},
//&UserOpenMemberRecord{},
//&HomeCarousel{},
//&UserRenewalLog{},
&User{},
&UserOpenMemberRecord{},
&HomeCarousel{},
&UserRenewalLog{},
&CooperativeMemberDeduct{},
&CooperativeAssistantMemberDeduct{},
&UserMemberRecord{},
&CooperativeDeductSettle{},
&CooperativeMemberPromotionStore{},
&CooperativeMemberPromotionDay{},
&InviteMemberReport{},
&MemberStatisticDaily{},
&CooperativeMemberPromotion{},
&GameCard{},
&CooperativeMemberPromotionStoreDay{},
//&CooperativeMemberDeduct{},
//&CooperativeAssistantMemberDeduct{},
//&CooperativeDeductSettle{},
//&CooperativeMemberPromotion{},
//&CooperativeMemberPromotion{},
//&CooperativeMemberPromotionDay{},
&CooperativeMemberDeduct{},
&CooperativeAssistantMemberDeduct{},
&CooperativeMemberPromotion{},
&CooperativeMemberPromotionStore{},
&CooperativeMemberPromotionDay{},
&CooperativeMemberPromotionStoreDay{},
&CooperativeDeductSettle{},
)
fmt.Println("DB init success")
@ -221,14 +249,15 @@ func InitDBProd() {
//&DeliverTaskSub{},
// 优惠券
//&GameCard{},
//&ActivityMemberRenewal{},
//&Activity{},
//&UserCoupon{},
//&Coupon{},
//&UserOpenMemberRecord{},
//&HomeCarousel{},
//&UserRenewalLog{},
&GameCard{},
&ActivityMemberRenewal{},
&Activity{},
&UserCoupon{},
&Coupon{},
&UserOpenMemberRecord{},
&HomeCarousel{},
&UserRenewalLog{},
)
if err := DBProd.DB().Ping(); err != nil {
@ -1485,4 +1514,79 @@ func UserUpgradeMemberRecord() {
func TestOrderUpdater_SetUserAddressId(t *testing.T) {
//var users []User
InitTestDB()
DB = DBDev
var games []GameCard
err := NewGameCardQuerySet(DBDev).All(&games)
if err != nil {
fmt.Println("err:", err)
}
for _, game := range games {
exist, err := QueryRecordExist(fmt.Sprintf("SELECT * FROM game_card_goods_stock WHERE game_card_id = %d", game.ID))
if err != nil {
fmt.Println("err:", err)
}
if exist {
continue
}
//if game.ID != 812 {
// continue
//}
goods := &GameCardGoods{
GameCardId: uint64(game.ID),
SerialNumber: fmt.Sprintf("%d", game.ID) + "01",
Status: 1,
StoreId: 32,
Provider: "",
StockTime: time.Now(),
CardType: "common",
FunctionState: 2,
ShareProfitType: 1,
CooperativeBusinessId: 12,
CooperativeName: "代理商01",
}
err = DBDev.Create(goods).Error
if err != nil {
fmt.Println("err:", err)
}
goodsStock := &GameCardGoodsStock{
StoreId: 32,
GameCardId: uint64(game.ID),
StoreStock: 1,
RentStock: 1,
UserHoldStock: 0,
OrderCount: 0,
TotalStock: 1,
CooperativeBusinessId: 12,
CooperativeName: "代理商01",
Name: game.Name,
CoverImg: game.CoverImg,
}
err = DBDev.Create(goodsStock).Error
if err != nil {
fmt.Println("err:", err)
}
err = NewGameCardQuerySet(DBDev).IDEq(game.ID).GetUpdater().SetStatus(1).Update()
if err != nil {
fmt.Println("err:", err)
}
}
}
func TestActivityRenewalConfig(t *testing.T) {
config := ActivityRenewalConfig{
CouponValidity: 7,
ActivityContinuity: 7,
PopTrap: 30,
}
marshal, err := json.Marshal(&config)
if err != nil {
logger.Error("err:", err)
}
fmt.Println("marshal:", string(marshal))
}

View File

@ -764,7 +764,9 @@ func IsCardGoodsStockEnough(cards []CardInfo, storeId uint32) (bool, error) {
func GameCardGoodsInventoryReduction(cards []CardInfo, storeId uint32, gdb *gorm.DB) error {
for i, _ := range cards {
sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-%d WHERE store_id=%d AND game_card_id=%d;", cards[i].Count, storeId, cards[i].GameCardId)
sql := fmt.Sprintf(
"UPDATE game_card_goods_stock SET rent_stock= rent_stock-%d WHERE store_id=%d AND game_card_id=%d;",
cards[i].Count, storeId, cards[i].GameCardId)
fmt.Println("sql:", sql)
err := gdb.Exec(sql).Error
if err != nil {

View File

@ -45,9 +45,13 @@ type User struct {
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"` // 合作商id
CooperativeName string `json:"cooperative_name"` // 合作商名称
ShopAssistantName string `json:"shop_assistant_name"` // 店员名称
Version uint32 `json:"-"` //
UserVm *UserVm `json:"user_vm" gorm:"-"` //
InviteTime time.Time `json:"invite_time"`
//RenewalTime time.Time `json:"renewal_time"`
//RenewalMemberLevel uint32 `json:"renewal_member_level"`
OpenMemberLevel uint32 `json:"open_member_level"`
Version uint32 `json:"-"` //
UserVm *UserVm `json:"user_vm" gorm:"-"` //
InviteTime time.Time `json:"invite_time"`
//RoleId uint32 `json:"role_id"` // 角色id
}
@ -257,14 +261,16 @@ func UserUpdate(user *User) error {
type UserOpenMemberRecord struct {
Model
Uid uint32 `json:"uid" gorm:"index"`
OpenNo string `json:"open_no" gorm:"index"`
OrderId uint32 `json:"order_id" gorm:"index"`
OrderType uint32 `json:"order_type"`
MemberLevel uint32 `json:"member_level"`
MemberExpire time.Time `json:"member_expire"` // 会员到期时间
UserCouponId uint32 `json:"user_coupon_id" gorm:"index"` // 优惠券id
State uint32 `json:"state"` // 1-未处理 2-已处理
Uid uint32 `json:"uid" gorm:"index"`
OpenNo string `json:"open_no" gorm:"index"`
OrderId uint32 `json:"order_id" gorm:"index"`
OrderType uint32 `json:"order_type"`
MemberLevel uint32 `json:"member_level"`
MemberExpire time.Time `json:"member_expire"` // 会员到期时间
UserCouponId uint32 `json:"user_coupon_id" gorm:"index"` // 优惠券id
State uint32 `json:"state"` // 1-未处理 2-已处理
DeductionDays uint32 `json:"deduction_days"`
DeductionFee uint32 `json:"deduction_fee"`
Order *Order `json:"order" gorm:"-"`
ShareCardRetrieve *ShareCardRetrieve `json:"share_card_retrieve" gorm:"-"`
@ -367,6 +373,9 @@ type InviteMemberReport struct {
GoldDeduct uint32 `json:"gold_deduct"` // 黄金会员提成
PlatinumDeduct uint32 `json:"platinum_deduct"` // 白金会员提成
BlackGoldDeduct uint32 `json:"black_gold_deduct"` // 黑金会员提成
RenewalGoldCount uint32 `json:"renewal_gold_count"` // 续费黄金会员数量
RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量
RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量
// invite_member_report
User *User `json:"user" gorm:"-"`
}
@ -1017,3 +1026,16 @@ func UserInviteListSetToUser(list []UserInvite) {
}
}
}
// gen:qs
type MemberStatisticDaily struct {
Model
MemberLevel uint32 `json:"member_level"`
Date string `json:"date"`
DateTime time.Time `json:"date_time"`
Increase uint32 `json:"increase"`
Expire uint32 `json:"expire"`
Net uint32 `json:"net"`
Accumulative uint32 `json:"accumulative"`
}

13
pack/examine.sh Normal file
View File

@ -0,0 +1,13 @@
#!/bin/bash
while : #循环,为了让脚本一直运行监控
do
COUNT=`ps -ef | grep ./hm_server |wc -l`
if [ "$COUNT" -gt 1 ];
then
echo "server service is ok"
else
echo "server servicie not exist"
nohup ./hm_server > server.log 2>&1 &
fi
sleep 60
done