1.注册会员账户时合作商id默认设置为1;

2.生成用户邀请记录时记录用户id;
3.修复首页"抢光了"、"不在本店"显示不准的缺陷;
4.用户升级时抵扣金规则调整,修复之前短期升级白金/黑金多收费问题。
This commit is contained in:
chenlin 2024-07-01 10:02:12 +08:00
parent fdc30f76d8
commit b21dc14bcf
6 changed files with 119 additions and 45 deletions

View File

@ -16,6 +16,9 @@ build-sqlite:
dev: dev:
GOOS=linux GOARCH=amd64 go build -o dev_app_server main.go GOOS=linux GOARCH=amd64 go build -o dev_app_server main.go
beta:
GOOS=linux GOARCH=amd64 go build -o test_app_server main.go
pro: pro:
GOOS=linux GOARCH=amd64 go build -o app_server main.go GOOS=linux GOARCH=amd64 go build -o app_server main.go

View File

@ -86,11 +86,12 @@ func AuthLogin(c *gin.Context) {
_ = model.NewUserQuerySet(model.DB).UidEq(user.Uid).GetUpdater().SetTel(phone.PhoneNumber).Update() _ = model.NewUserQuerySet(model.DB).UidEq(user.Uid).GetUpdater().SetTel(phone.PhoneNumber).Update()
} else { // 通过openid也未查询到数据 } else { // 通过openid也未查询到数据
user = model.User{ user = model.User{
WxOpenID: resp.OpenID, WxOpenID: resp.OpenID,
WxUnionID: resp.UnionID, WxUnionID: resp.UnionID,
LastLoginAt: nowTime, LastLoginAt: nowTime,
MemberLevel: model.MemberLevelUser, // 普通会员 MemberLevel: model.MemberLevelUser, // 普通会员
Tel: phone.PhoneNumber, Tel: phone.PhoneNumber,
CooperativeBusinessId: 1,
} }
user.Uid = createUid() // 新建uid user.Uid = createUid() // 新建uid
err = user.Create(model.DB) err = user.Create(model.DB)
@ -215,6 +216,7 @@ func AuthLogin(c *gin.Context) {
//user.WxName = userInfo.Nickname //user.WxName = userInfo.Nickname
//user.WxAvatar = userInfo.Avatar //user.WxAvatar = userInfo.Avatar
user.CreatedAt = nowTime user.CreatedAt = nowTime
user.CooperativeBusinessId = 1
err = model.UserUpdate(&user) err = model.UserUpdate(&user)
if err != nil { if err != nil {
logger.Error("WxOpenIDEq:", err) logger.Error("WxOpenIDEq:", err)

View File

@ -686,6 +686,7 @@ func PushWXPayNotice(c *gin.Context) {
} }
} else if err == model.RecordNotFound { // 没有邀请记录,完全是用户自己开通会员,自己续费;按产品要求也需要有记录 } else if err == model.RecordNotFound { // 没有邀请记录,完全是用户自己开通会员,自己续费;按产品要求也需要有记录
inviteRecordNew := &model.UserInviteRecord{ inviteRecordNew := &model.UserInviteRecord{
ToUid: user.Uid,
Action: 2, Action: 2,
SpendType: spendType, SpendType: spendType,
MemberLevel: record.MemberLevel, MemberLevel: record.MemberLevel,

View File

@ -425,8 +425,25 @@ func UpgradeMember(c *gin.Context) {
} }
memberYare := 0 memberYare := 0
memberMendFee := int64(0) memberMendFee := int64(0)
//// 抵扣金
//deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100
// 2024-06-07修改解决短期升级白金/黑金多收费问题
memberDays := int64(0)
switch req.MemberGenre {
case 201:
memberDays = 90
case 202:
memberDays = 180
default:
memberDays = 365
}
logger.Info("req.MemberGenre is:", req.MemberGenre)
logger.Info("memberDays is:", memberDays)
// 抵扣金 // 抵扣金
deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100 deductionFee := (((int64(memberFee) * deductionDays) / memberDays) / 100) * 100
if deductionDays < 365 { if deductionDays < 365 {
memberYare = 1 memberYare = 1
// 补会员费 // 补会员费

View File

@ -9,8 +9,9 @@ import (
"time" "time"
) )
//go:generate goqueryset -in game_card.go
// gen:qs // gen:qs
//
//go:generate goqueryset -in game_card.go
type GameCard struct { type GameCard struct {
Model Model
@ -159,6 +160,13 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId
gameIds := make([]uint32, 0) gameIds := make([]uint32, 0)
gameIdMap := make(map[uint32]uint32) gameIdMap := make(map[uint32]uint32)
effectiveStoreList := GetAllEffectiveStoreMap()
if len(effectiveStoreList) == 0 {
logger.Error("effectiveStoreList is null")
return nil, 0, errors.New("无有效门店")
}
effectiveStoreListStr := fmt.Sprintf("(%s)", strings.Trim(strings.Join(strings.Fields(fmt.Sprint(effectiveStoreList)), ","), "[]"))
if sortType == 1 { if sortType == 1 {
if storeId != 0 { if storeId != 0 {
//gameIds := make([]uint32, 0) //gameIds := make([]uint32, 0)
@ -181,7 +189,7 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId
//err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).RentStockGt(0). //err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).RentStockGt(0).
// OrderDescByRentStock().All(&cardStocks) // OrderDescByRentStock().All(&cardStocks)
//DB.Table("game_card_goods_stock").Joins("") //DB.Table("game_card_goods_stock").Joins("")
cardStockSql1 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.store_id=%d AND a.rent_stock>0 ORDER BY b.id ASC;", storeId) cardStockSql1 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.store_id=%d AND a.store_id IN %s AND a.rent_stock>0 ORDER BY b.id ASC;", storeId, effectiveStoreListStr)
err = DB.Raw(cardStockSql1).Scan(&cardStocks).Error err = DB.Raw(cardStockSql1).Scan(&cardStocks).Error
if err != nil { if err != nil {
logger.Error("GetGameIdByType err:", err) logger.Error("GetGameIdByType err:", err)
@ -198,7 +206,7 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId
cardStocks = []GameCardGoodsStock{} cardStocks = []GameCardGoodsStock{}
//err = NewGameCardGoodsStockQuerySet(DB).StoreIdNe(uint64(storeId)).RentStockGt(0). //err = NewGameCardGoodsStockQuerySet(DB).StoreIdNe(uint64(storeId)).RentStockGt(0).
// OrderDescByRentStock().All(&cardStocks) // OrderDescByRentStock().All(&cardStocks)
cardStockSql2 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.store_id!=%d AND a.rent_stock>0 ORDER BY b.id ASC;", storeId) cardStockSql2 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.store_id!=%d AND a.store_id IN %s AND a.rent_stock>0 ORDER BY b.id ASC;", storeId, effectiveStoreListStr)
err = DB.Raw(cardStockSql2).Scan(&cardStocks).Error err = DB.Raw(cardStockSql2).Scan(&cardStocks).Error
if err != nil { if err != nil {
logger.Error("GetGameIdByType err:", err) logger.Error("GetGameIdByType err:", err)
@ -214,7 +222,7 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId
cardStocks = []GameCardGoodsStock{} cardStocks = []GameCardGoodsStock{}
//err = NewGameCardGoodsStockQuerySet(DB).RentStockEq(0).All(&cardStocks) //err = NewGameCardGoodsStockQuerySet(DB).RentStockEq(0).All(&cardStocks)
cardStockSql3 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.rent_stock=0 ORDER BY b.id ASC;") cardStockSql3 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.rent_stock=0 AND a.store_id IN %s ORDER BY b.id ASC;", effectiveStoreListStr)
err = DB.Raw(cardStockSql3).Scan(&cardStocks).Error err = DB.Raw(cardStockSql3).Scan(&cardStocks).Error
if err != nil { if err != nil {
logger.Error("GetGameIdByType err:", err) logger.Error("GetGameIdByType err:", err)
@ -228,14 +236,15 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId
} }
} }
if len(gameIds) > 0 { // 有可能添加了游戏但没添加库存,添加这段代码后不会展示
qs = qs.IDIn(gameIds...) //if len(gameIds) > 0 {
} // qs = qs.IDIn(gameIds...)
//}
} else { } else {
var cardStocks []GameCardGoodsStock var cardStocks []GameCardGoodsStock
//err := NewGameCardGoodsStockQuerySet(DB).RentStockGt(0). //err := NewGameCardGoodsStockQuerySet(DB).RentStockGt(0).
// OrderDescByRentStock().All(&cardStocks) // OrderDescByRentStock().All(&cardStocks)
cardStockSql1 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.rent_stock>0 ORDER BY b.id ASC;") cardStockSql1 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.rent_stock>0 AND a.store_id IN %s ORDER BY b.id ASC;", effectiveStoreListStr)
err = DB.Raw(cardStockSql1).Scan(&cardStocks).Error err = DB.Raw(cardStockSql1).Scan(&cardStocks).Error
if err != nil { if err != nil {
logger.Error("GetGameIdByType err:", err) logger.Error("GetGameIdByType err:", err)
@ -251,7 +260,7 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId
cardStocks = []GameCardGoodsStock{} cardStocks = []GameCardGoodsStock{}
//err = NewGameCardGoodsStockQuerySet(DB).RentStockEq(0).All(&cardStocks) //err = NewGameCardGoodsStockQuerySet(DB).RentStockEq(0).All(&cardStocks)
cardStockSql2 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.rent_stock=0 ORDER BY b.id ASC;") cardStockSql2 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.rent_stock=0 AND a.store_id IN %s ORDER BY b.id ASC;", effectiveStoreListStr)
err = DB.Raw(cardStockSql2).Scan(&cardStocks).Error err = DB.Raw(cardStockSql2).Scan(&cardStocks).Error
if err != nil { if err != nil {
logger.Error("GetGameIdByType err:", err) logger.Error("GetGameIdByType err:", err)
@ -264,9 +273,9 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId
gameIdMap[uint32(cardStocks[i].GameCardId)] = 3 gameIdMap[uint32(cardStocks[i].GameCardId)] = 3
} }
} }
if len(gameIds) > 0 { //if len(gameIds) > 0 {
qs = qs.IDIn(gameIds...) // qs = qs.IDIn(gameIds...)
} //}
} }
} }
@ -286,7 +295,7 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId
return cards, 0, err return cards, 0, err
} }
GameCardListSetStockState(cards, storeId) GameCardListSetStockState(cards, storeId, effectiveStoreList)
} else { } else {
err = qs.OrderDescByID().All(&cards) err = qs.OrderDescByID().All(&cards)
//err = qs.OrderAscByID().All(&cards) //err = qs.OrderAscByID().All(&cards)
@ -299,6 +308,13 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId
cardMap := make(map[uint32]GameCard, 0) cardMap := make(map[uint32]GameCard, 0)
for i, _ := range cards { for i, _ := range cards {
cardMap[cards[i].ID] = cards[i] cardMap[cards[i].ID] = cards[i]
// 如果游戏列表有记录但游戏库存列表无记录则也添加到gameIds库存记录为3无库存
_, ok := gameIdMap[cards[i].ID]
if !ok {
gameIds = append(gameIds, uint32(cards[i].ID))
gameIdMap[cards[i].ID] = 3
}
} }
for i, _ := range gameIds { for i, _ := range gameIds {
v, ok1 := cardMap[gameIds[i]] v, ok1 := cardMap[gameIds[i]]
@ -456,9 +472,16 @@ func GetGameCardInfo(id uint64, storeId uint32) (GameCard, error) {
return game, err return game, err
} }
effectiveStoreList := GetAllEffectiveStoreMap()
if len(effectiveStoreList) == 0 {
logger.Error("effectiveStoreList is null")
return GameCard{}, errors.New("无有效门店")
}
var cardStock GameCardGoodsStock var cardStock GameCardGoodsStock
if storeId != 0 { if storeId != 0 {
err = NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(uint64(game.ID)).StoreIdEq(uint64(storeId)).One(&cardStock) err = NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(uint64(game.ID)).StoreIdEq(uint64(storeId)).
StoreIdIn(uint32ToUint64(effectiveStoreList)...).One(&cardStock)
if err != nil && err != RecordNotFound { if err != nil && err != RecordNotFound {
logger.Error("err:", err) logger.Error("err:", err)
return game, nil return game, nil
@ -470,7 +493,8 @@ func GetGameCardInfo(id uint64, storeId uint32) (GameCard, error) {
cardStock = GameCardGoodsStock{} cardStock = GameCardGoodsStock{}
err = NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(uint64(game.ID)). err = NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(uint64(game.ID)).
StoreIdNe(uint64(storeId)).RentStockGt(0).One(&cardStock) StoreIdNe(uint64(storeId)).StoreIdIn(uint32ToUint64(effectiveStoreList)...).
RentStockGt(0).One(&cardStock)
if err != nil && err != RecordNotFound { if err != nil && err != RecordNotFound {
logger.Error("err:", err) logger.Error("err:", err)
return game, nil return game, nil
@ -481,7 +505,8 @@ func GetGameCardInfo(id uint64, storeId uint32) (GameCard, error) {
} }
} else { } else {
cardStock = GameCardGoodsStock{} cardStock = GameCardGoodsStock{}
err = NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(uint64(game.ID)).RentStockGt(0).One(&cardStock) err = NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(uint64(game.ID)).RentStockGt(0).
StoreIdIn(uint32ToUint64(effectiveStoreList)...).One(&cardStock)
if err != nil && err != RecordNotFound { if err != nil && err != RecordNotFound {
logger.Error("err:", err) logger.Error("err:", err)
return game, nil return game, nil
@ -1749,7 +1774,15 @@ func (m *AssistantMemberPromotionReq) List() ([]InviteMemberReport, int, error)
return reports, totalPage, nil return reports, totalPage, nil
} }
func GameCardListSetStockState(list []GameCard, storeId uint32) { func uint32ToUint64(slice []uint32) []uint64 {
result := make([]uint64, len(slice))
for i, v := range slice {
result[i] = uint64(v)
}
return result
}
func GameCardListSetStockState(list []GameCard, storeId uint32, storeList []uint32) {
gameCardIds := make([]uint64, 0, len(list)) gameCardIds := make([]uint64, 0, len(list))
for i, _ := range list { for i, _ := range list {
gameCardIds = append(gameCardIds, uint64(list[i].ID)) gameCardIds = append(gameCardIds, uint64(list[i].ID))
@ -1761,8 +1794,21 @@ func GameCardListSetStockState(list []GameCard, storeId uint32) {
gameIdMap := make(map[uint32]uint32) gameIdMap := make(map[uint32]uint32)
if storeId != 0 { if storeId != 0 {
var cardStocks []GameCardGoodsStock var cardStocks []GameCardGoodsStock
err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).GameCardIdIn(gameCardIds...). err := NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(gameCardIds...).StoreIdIn(uint32ToUint64(storeList)...).
RentStockGt(0).All(&cardStocks) RentStockEq(0).All(&cardStocks)
if err != nil {
logger.Error("GetGameIdByType err:", err)
}
for i, _ := range cardStocks {
_, ok := gameIdMap[uint32(cardStocks[i].GameCardId)]
if !ok {
//gameIds = append(gameIds, uint32(cardStocks[i].GameCardId))
gameIdMap[uint32(cardStocks[i].GameCardId)] = 3
}
}
err = NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).StoreIdIn(uint32ToUint64(storeList)...).
GameCardIdIn(gameCardIds...).RentStockGt(0).All(&cardStocks)
if err != nil { if err != nil {
logger.Error("GetGameIdByType err:", err) logger.Error("GetGameIdByType err:", err)
} }
@ -1774,8 +1820,8 @@ func GameCardListSetStockState(list []GameCard, storeId uint32) {
} }
} }
err = NewGameCardGoodsStockQuerySet(DB).StoreIdNe(uint64(storeId)).GameCardIdIn(gameCardIds...). err = NewGameCardGoodsStockQuerySet(DB).StoreIdNe(uint64(storeId)).StoreIdIn(uint32ToUint64(storeList)...).
RentStockGt(0).All(&cardStocks) GameCardIdIn(gameCardIds...).RentStockGt(0).All(&cardStocks)
if err != nil { if err != nil {
logger.Error("GetGameIdByType err:", err) logger.Error("GetGameIdByType err:", err)
} }
@ -1787,22 +1833,22 @@ func GameCardListSetStockState(list []GameCard, storeId uint32) {
} }
} }
err = NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(gameCardIds...).RentStockEq(0).All(&cardStocks) } else {
var cardStocks []GameCardGoodsStock
err := NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(gameCardIds...).StoreIdIn(uint32ToUint64(storeList)...).
RentStockEq(0).All(&cardStocks)
if err != nil { if err != nil {
logger.Error("GetGameIdByType err:", err) logger.Error("GetGameIdByType err:", err)
} }
for i, _ := range cardStocks { for i, _ := range cardStocks {
_, ok := gameIdMap[uint32(cardStocks[i].GameCardId)] _, ok := gameIdMap[uint32(cardStocks[i].GameCardId)]
if !ok { if !ok {
//gameIds = append(gameIds, uint32(cardStocks[i].GameCardId))
gameIdMap[uint32(cardStocks[i].GameCardId)] = 3 gameIdMap[uint32(cardStocks[i].GameCardId)] = 3
} }
} }
} else { err = NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(gameCardIds...).StoreIdIn(uint32ToUint64(storeList)...).
var cardStocks []GameCardGoodsStock RentStockGt(0).All(&cardStocks)
err := NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(gameCardIds...).RentStockGt(0).
All(&cardStocks)
if err != nil { if err != nil {
logger.Error("GetGameIdByType err:", err) logger.Error("GetGameIdByType err:", err)
} }
@ -1812,18 +1858,6 @@ func GameCardListSetStockState(list []GameCard, storeId uint32) {
gameIdMap[uint32(cardStocks[i].GameCardId)] = 1 gameIdMap[uint32(cardStocks[i].GameCardId)] = 1
} }
} }
err = NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(gameCardIds...).RentStockEq(0).All(&cardStocks)
if err != nil {
logger.Error("GetGameIdByType err:", err)
}
for i, _ := range cardStocks {
_, ok := gameIdMap[uint32(cardStocks[i].GameCardId)]
if !ok {
gameIdMap[uint32(cardStocks[i].GameCardId)] = 3
}
}
} }
for i, _ := range list { for i, _ := range list {
@ -1831,6 +1865,8 @@ func GameCardListSetStockState(list []GameCard, storeId uint32) {
if ok { if ok {
//gameIdMap[uint32(cardStocks[i].GameCardId)] = 3 //gameIdMap[uint32(cardStocks[i].GameCardId)] = 3
list[i].StockState = v list[i].StockState = v
} else {
list[i].StockState = 3 // 如果以上都没找到,则应该是没库存
} }
//gameCardIds = append(gameCardIds, uint64(list[i].ID)) //gameCardIds = append(gameCardIds, uint64(list[i].ID))
} }

View File

@ -235,6 +235,21 @@ func GetAllStoreMap() map[uint32]Store {
return storeMap return storeMap
} }
func GetAllEffectiveStoreMap() []uint32 {
var storeList []uint32
var stores []Store
err := DB.Table("store").Where("member_service = 1").Find(&stores).Error
if err != nil {
logger.Errorf("err:%s", err)
return storeList
}
for i, _ := range stores {
storeList = append(storeList, stores[i].ID)
}
return storeList
}
func CannibalizeGameCardGoodsSetInfo(goodses []CannibalizeGameCardGoods) []CannibalizeGameCardGoods { func CannibalizeGameCardGoodsSetInfo(goodses []CannibalizeGameCardGoods) []CannibalizeGameCardGoods {
if len(goodses) == 0 { if len(goodses) == 0 {
return goodses return goodses