This commit is contained in:
li 2022-03-14 14:57:34 +08:00
parent 9528744d1e
commit 724dab5200
7 changed files with 227 additions and 15 deletions

View File

@ -411,6 +411,10 @@ func PushWXPayNotice(c *gin.Context) {
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)
}
} else {
qs := model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).GetUpdater()
if user.MemberLevel != 2 {
@ -426,11 +430,20 @@ func PushWXPayNotice(c *gin.Context) {
if invite.FromUid != 0 {
inviteUser := model.GetUserByUid(invite.FromUid)
if inviteUser.UserType != 2 && user.MemberLevel != 2 { // 邀请 新用户推送一次
if inviteUser.UserType != 2 /*不是店员*/ && user.MemberLevel != 2 { // 邀请 新用户推送一次
err := model.CodeSendToUser(invite.FromUid, model.CodeTypeMemberCard30, model.RedeemCodeActivityTypeUserInvite)
if err != nil {
logger.Error("err:", err)
}
err = model.SendUserVm(inviteUser.Uid, record.MemberLevel, 1)
if err != nil {
logger.Error("send user vm err:", err)
}
}
err = model.SendUserVm(user.Uid, record.MemberLevel, 0)
if err != nil {
logger.Error("send user vm err:", err)
}
}
}
@ -439,11 +452,11 @@ func PushWXPayNotice(c *gin.Context) {
if user.MemberLevel != 2 {
err = model.CodeSendToUser(user.Uid, model.CodeTypeMemberCard30, model.RedeemCodeActivityTypeStore)
if err != nil {
logger.Error("err:", err)
logger.Error("code send to user err:", err)
}
}
model.CreateUserRentCardByMemberLevel(record.Uid,record.MemberLevel,memberConfig.CardMax)
model.CreateUserRentCardByMemberLevel(record.Uid, record.MemberLevel, memberConfig.CardMax)
}
@ -494,7 +507,16 @@ func PushWXPayNotice(c *gin.Context) {
if err != nil {
logger.Error("err:", err)
}
err = model.OrderUpdateGoodsStock(goodsOrder.GoodsId, goodsOrder.Quantity, model.DB)
if err != nil {
logger.Error("err:", err)
}
err = model.UserVmUpdate(goodsOrder.Uid, int(goodsOrder.Amount)*-1, model.VmEventExchangeGoods, "兑换奖品")
if err != nil {
logger.Error("err:", err)
}
} else if notify.Attach == wxpay.WxPayUpgradeMember {
record := &model.UserOpenMemberRecord{OpenNo: notify.OutTradeNo}
@ -537,8 +559,7 @@ func PushWXPayNotice(c *gin.Context) {
return
}
model.CreateUserRentCardByMemberLevel(record.Uid,record.MemberLevel,memberConfig.CardMax)
model.CreateUserRentCardByMemberLevel(record.Uid, record.MemberLevel, memberConfig.CardMax)
}
logger.Debug("微信推动支付通知")

View File

@ -156,13 +156,13 @@ func MallOrderCreate(c *gin.Context) {
RespJson(c, status.UserVmNotEnough, nil)
return
}
err := model.OrderDeductionUserVm(uc.Uid, int(userVm.Vm), int(amount)*-1, tx)
if err != nil {
tx.Rollback()
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
//err := model.OrderDeductionUserVm(uc.Uid, int(userVm.Vm), int(amount)*-1, tx)
//if err != nil {
// tx.Rollback()
// logger.Error("err:", err)
// RespJson(c, status.InternalServerError, nil)
// return
//}
}
err = tx.Commit().Error

View File

@ -26,8 +26,9 @@ type PayConfig struct {
}
const (
ConfigNamePay = "pay_config" // 支付配置
ConfigNameMember = "member_config" // 会员配置
ConfigNamePay = "pay_config" // 支付配置
ConfigNameMember = "member_config" // 会员配置
ConfigNameMemberVm = "member_vm_config" // 会员积分配置
)
func PayConfigInfo() (*PayConfig, error) {
@ -90,6 +91,49 @@ func GetMemberConfig(level uint32) (*MemberConfig, error) {
return nil, errors.New("level err")
}
type MemberVmConfig struct {
MemberLever uint32 `json:"member_lever"` // 会员等级
MemberVm uint32 `json:"member_vm"`
Invite1Vm uint32 `json:"invite_1_vm"`
Invite2Vm uint32 `json:"invite_2_vm"`
AutomationMemberVm uint32 `json:"automation_member_vm"`
}
func memberVmConfigInfo() ([]MemberVmConfig, error) {
var memberVmConfigs []MemberVmConfig
var configAllocation Config
err := NewConfigQuerySet(DB).NameEq(ConfigNameMemberVm).One(&configAllocation)
if err != nil {
logger.Error("err:", err)
return memberVmConfigs, err
}
err = json.Unmarshal([]byte(configAllocation.Value), &memberVmConfigs)
if err != nil {
logger.Error("err:", err)
return memberVmConfigs, err
}
return memberVmConfigs, nil
}
func GetMemberVmConfig(level uint32) (*MemberVmConfig, error) {
if level == 3 {
return nil, errors.New("level is 3")
}
info, err := memberVmConfigInfo()
if err != nil {
return nil, err
}
for _, config := range info {
if config.MemberLever == level {
return &config, nil
}
}
return nil, errors.New("level err")
}
//type ConfigInterface interface {
// Encode() string
//}

View File

@ -36,3 +36,40 @@ func TestMemberConfigInfo(t *testing.T) {
fmt.Println("list:", string(bytes))
}
func TestMemberVmConfig(t *testing.T) {
list := []MemberVmConfig{
{
MemberLever: 2,
MemberVm: 1500,
Invite1Vm: 3000,
Invite2Vm: 500,
AutomationMemberVm: 1500,
},
{
MemberLever: 4,
MemberVm: 2000,
Invite1Vm: 5000,
Invite2Vm: 1000,
AutomationMemberVm: 2000,
},
{
MemberLever: 5,
MemberVm: 3000,
Invite1Vm: 10000,
Invite2Vm: 2000,
AutomationMemberVm: 3000,
},
}
bytes, err := json.Marshal(&list)
if err != nil {
fmt.Println("err:", err.Error())
}
fmt.Println("list:", string(bytes))
}
//黄金会员 1500开通、3000邀新
//白金会员 2000开通、4000邀新
//黑金会员 3000开通、6000邀新

View File

@ -259,7 +259,7 @@ func (m *GoodsOrderDetailReq) OrderDetail(uid uint32) (*GoodsOrder, error) {
order.Goods = orders[0].Goods
}
var userAddress UserAddress
err = NewUserAddressQuerySet(DB).IDEq(order.AddressId).One(&userAddress)
err = NewUserAddressQuerySet(DB.Unscoped()).IDEq(order.AddressId).One(&userAddress)
if err != nil && err != RecordNotFound {
logger.Error("err:", err)
return nil, err

View File

@ -215,3 +215,42 @@ func CodeSendToUser(uid uint32, codeType string, activityType uint32) error {
}
return nil
}
func SendUserVm(uid, memberLevel, inviteLevel uint32) error {
if memberLevel == 3 {
return nil
}
config, err := GetMemberVmConfig(memberLevel)
if err != nil {
logger.Error("err:", err)
return err
}
amount := 0
describe := ""
event := ""
if inviteLevel == 0 {
amount = int(config.MemberVm)
describe = "开通会员奖励"
event = VmEventOpenMember
} else if inviteLevel == 1 {
amount = int(config.Invite1Vm)
describe = "邀请会员奖励"
event = VmEventInvite1Member
} else if inviteLevel == 2 {
amount = int(config.Invite2Vm)
describe = "邀请会员奖励"
event = VmEventInvite2Member
} else if inviteLevel == 100 {
amount = int(config.AutomationMemberVm)
describe = "开通会员奖励"
event = VmEventOpenMember
}
err = UserVmUpdate(uid, amount, event, describe)
if err != nil {
logger.Error("err:", err)
return err
}
return nil
}

View File

@ -1,5 +1,18 @@
package model
import (
"errors"
"fmt"
"github.com/codinl/go-logger"
)
const (
VmEventExchangeGoods = "exchange_goods"
VmEventOpenMember = "open_member"
VmEventInvite1Member = "invite_1_member"
VmEventInvite2Member = "invite_2_member"
)
// 用户积分
//go:generate goqueryset -in user_vm.go
// gen:qs
@ -23,3 +36,61 @@ type UserVmRecord struct {
Describe string `json:"describe" gorm:"type:text"` // 描述
}
func UserVmUpdate(uid uint32, amount int, event, describe string) error {
var userVm UserVm
err := NewUserVmQuerySet(DB).UidEq(uid).One(&userVm)
if err != nil && err != RecordNotFound {
logger.Error("err:", err)
return err
}
begin := DB.Begin()
if err == RecordNotFound {
if amount < 0 {
begin.Rollback()
logger.Error("amount lt 0")
return errors.New("amount lt 0")
}
userVm = UserVm{
Uid: uid,
Vm: uint32(amount),
}
err = begin.Create(&userVm).Error
if err != nil {
begin.Rollback()
logger.Error("err:", err)
return err
}
} else {
sql := fmt.Sprintf("UPDATE user_vm SET vm = vm+? WHERE uid=?;")
err = begin.Exec(sql, amount, uid).Error
if err != nil {
begin.Rollback()
logger.Error("err:", err)
return err
}
}
vmRecord := &UserVmRecord{
Uid: uid,
BeforeVm: uint32(userVm.Vm),
AfterVm: uint32(int(userVm.Vm) + amount),
Alter: amount,
Event: event,
Describe: describe,
}
err = begin.Create(vmRecord).Error
if err != nil {
begin.Rollback()
logger.Error("err:", err)
return err
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("err:", err)
return err
}
return nil
}