fix:
This commit is contained in:
parent
9528744d1e
commit
724dab5200
|
@ -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("微信推动支付通知")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -28,6 +28,7 @@ type PayConfig struct {
|
|||
const (
|
||||
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
|
||||
//}
|
||||
|
|
|
@ -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(邀新)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user