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:
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:
GOOS=linux GOARCH=amd64 go build -o app_server main.go

View File

@ -91,6 +91,7 @@ func AuthLogin(c *gin.Context) {
LastLoginAt: nowTime,
MemberLevel: model.MemberLevelUser, // 普通会员
Tel: phone.PhoneNumber,
CooperativeBusinessId: 1,
}
user.Uid = createUid() // 新建uid
err = user.Create(model.DB)
@ -215,6 +216,7 @@ func AuthLogin(c *gin.Context) {
//user.WxName = userInfo.Nickname
//user.WxAvatar = userInfo.Avatar
user.CreatedAt = nowTime
user.CooperativeBusinessId = 1
err = model.UserUpdate(&user)
if err != nil {
logger.Error("WxOpenIDEq:", err)

View File

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

View File

@ -425,8 +425,25 @@ func UpgradeMember(c *gin.Context) {
}
memberYare := 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 {
memberYare = 1
// 补会员费

View File

@ -9,8 +9,9 @@ import (
"time"
)
//go:generate goqueryset -in game_card.go
// gen:qs
//
//go:generate goqueryset -in game_card.go
type GameCard struct {
Model
@ -159,6 +160,13 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId
gameIds := make([]uint32, 0)
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 storeId != 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).
// OrderDescByRentStock().All(&cardStocks)
//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
if err != nil {
logger.Error("GetGameIdByType err:", err)
@ -198,7 +206,7 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId
cardStocks = []GameCardGoodsStock{}
//err = NewGameCardGoodsStockQuerySet(DB).StoreIdNe(uint64(storeId)).RentStockGt(0).
// 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
if err != nil {
logger.Error("GetGameIdByType err:", err)
@ -214,7 +222,7 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId
cardStocks = []GameCardGoodsStock{}
//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
if err != nil {
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 {
var cardStocks []GameCardGoodsStock
//err := NewGameCardGoodsStockQuerySet(DB).RentStockGt(0).
// 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
if err != nil {
logger.Error("GetGameIdByType err:", err)
@ -251,7 +260,7 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId
cardStocks = []GameCardGoodsStock{}
//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
if err != nil {
logger.Error("GetGameIdByType err:", err)
@ -264,9 +273,9 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId
gameIdMap[uint32(cardStocks[i].GameCardId)] = 3
}
}
if len(gameIds) > 0 {
qs = qs.IDIn(gameIds...)
}
//if len(gameIds) > 0 {
// qs = qs.IDIn(gameIds...)
//}
}
}
@ -286,7 +295,7 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId
return cards, 0, err
}
GameCardListSetStockState(cards, storeId)
GameCardListSetStockState(cards, storeId, effectiveStoreList)
} else {
err = qs.OrderDescByID().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)
for i, _ := range cards {
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 {
v, ok1 := cardMap[gameIds[i]]
@ -456,9 +472,16 @@ func GetGameCardInfo(id uint64, storeId uint32) (GameCard, error) {
return game, err
}
effectiveStoreList := GetAllEffectiveStoreMap()
if len(effectiveStoreList) == 0 {
logger.Error("effectiveStoreList is null")
return GameCard{}, errors.New("无有效门店")
}
var cardStock GameCardGoodsStock
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 {
logger.Error("err:", err)
return game, nil
@ -470,7 +493,8 @@ func GetGameCardInfo(id uint64, storeId uint32) (GameCard, error) {
cardStock = GameCardGoodsStock{}
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 {
logger.Error("err:", err)
return game, nil
@ -481,7 +505,8 @@ func GetGameCardInfo(id uint64, storeId uint32) (GameCard, error) {
}
} else {
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 {
logger.Error("err:", err)
return game, nil
@ -1749,7 +1774,15 @@ func (m *AssistantMemberPromotionReq) List() ([]InviteMemberReport, int, error)
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))
for i, _ := range list {
gameCardIds = append(gameCardIds, uint64(list[i].ID))
@ -1761,8 +1794,21 @@ func GameCardListSetStockState(list []GameCard, storeId uint32) {
gameIdMap := make(map[uint32]uint32)
if storeId != 0 {
var cardStocks []GameCardGoodsStock
err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).GameCardIdIn(gameCardIds...).
RentStockGt(0).All(&cardStocks)
err := NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(gameCardIds...).StoreIdIn(uint32ToUint64(storeList)...).
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 {
logger.Error("GetGameIdByType err:", err)
}
@ -1774,8 +1820,8 @@ func GameCardListSetStockState(list []GameCard, storeId uint32) {
}
}
err = NewGameCardGoodsStockQuerySet(DB).StoreIdNe(uint64(storeId)).GameCardIdIn(gameCardIds...).
RentStockGt(0).All(&cardStocks)
err = NewGameCardGoodsStockQuerySet(DB).StoreIdNe(uint64(storeId)).StoreIdIn(uint32ToUint64(storeList)...).
GameCardIdIn(gameCardIds...).RentStockGt(0).All(&cardStocks)
if err != nil {
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 {
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
}
}
} else {
var cardStocks []GameCardGoodsStock
err := NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(gameCardIds...).RentStockGt(0).
All(&cardStocks)
err = NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(gameCardIds...).StoreIdIn(uint32ToUint64(storeList)...).
RentStockGt(0).All(&cardStocks)
if err != nil {
logger.Error("GetGameIdByType err:", err)
}
@ -1812,18 +1858,6 @@ func GameCardListSetStockState(list []GameCard, storeId uint32) {
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 {
@ -1831,6 +1865,8 @@ func GameCardListSetStockState(list []GameCard, storeId uint32) {
if ok {
//gameIdMap[uint32(cardStocks[i].GameCardId)] = 3
list[i].StockState = v
} else {
list[i].StockState = 3 // 如果以上都没找到,则应该是没库存
}
//gameCardIds = append(gameCardIds, uint64(list[i].ID))
}

View File

@ -235,6 +235,21 @@ func GetAllStoreMap() map[uint32]Store {
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 {
if len(goodses) == 0 {
return goodses