From b21dc14bcf3d3c0ec3490cdfccfeb3586ee782b0 Mon Sep 17 00:00:00 2001 From: chenlin Date: Mon, 1 Jul 2024 10:02:12 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=B3=A8=E5=86=8C=E4=BC=9A=E5=91=98=E8=B4=A6?= =?UTF-8?q?=E6=88=B7=E6=97=B6=E5=90=88=E4=BD=9C=E5=95=86id=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E8=AE=BE=E7=BD=AE=E4=B8=BA1=EF=BC=9B=202.=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=94=A8=E6=88=B7=E9=82=80=E8=AF=B7=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=97=B6=E8=AE=B0=E5=BD=95=E7=94=A8=E6=88=B7id=EF=BC=9B=203.?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=A6=96=E9=A1=B5"=E6=8A=A2=E5=85=89?= =?UTF-8?q?=E4=BA=86"=E3=80=81"=E4=B8=8D=E5=9C=A8=E6=9C=AC=E5=BA=97"?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=87=86=E7=9A=84=E7=BC=BA=E9=99=B7?= =?UTF-8?q?=EF=BC=9B=204.=E7=94=A8=E6=88=B7=E5=8D=87=E7=BA=A7=E6=97=B6?= =?UTF-8?q?=E6=8A=B5=E6=89=A3=E9=87=91=E8=A7=84=E5=88=99=E8=B0=83=E6=95=B4?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E4=B9=8B=E5=89=8D=E7=9F=AD=E6=9C=9F?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=E7=99=BD=E9=87=91/=E9=BB=91=E9=87=91?= =?UTF-8?q?=E5=A4=9A=E6=94=B6=E8=B4=B9=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 3 ++ controller/account.go | 12 +++-- controller/game_card.go | 1 + controller/user.go | 19 ++++++- model/game_card.go | 114 ++++++++++++++++++++++++++-------------- model/store.go | 15 ++++++ 6 files changed, 119 insertions(+), 45 deletions(-) diff --git a/Makefile b/Makefile index 2db5658..2401401 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/controller/account.go b/controller/account.go index d963e7e..f705a9d 100644 --- a/controller/account.go +++ b/controller/account.go @@ -86,11 +86,12 @@ func AuthLogin(c *gin.Context) { _ = model.NewUserQuerySet(model.DB).UidEq(user.Uid).GetUpdater().SetTel(phone.PhoneNumber).Update() } else { // 通过openid也未查询到数据 user = model.User{ - WxOpenID: resp.OpenID, - WxUnionID: resp.UnionID, - LastLoginAt: nowTime, - MemberLevel: model.MemberLevelUser, // 普通会员 - Tel: phone.PhoneNumber, + WxOpenID: resp.OpenID, + WxUnionID: resp.UnionID, + 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) diff --git a/controller/game_card.go b/controller/game_card.go index d37ee17..0bcfa25 100644 --- a/controller/game_card.go +++ b/controller/game_card.go @@ -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, diff --git a/controller/user.go b/controller/user.go index 43c07a0..cc6de8b 100644 --- a/controller/user.go +++ b/controller/user.go @@ -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 // 补会员费 diff --git a/model/game_card.go b/model/game_card.go index d6813c4..ce090b4 100644 --- a/model/game_card.go +++ b/model/game_card.go @@ -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)) } diff --git a/model/store.go b/model/store.go index 6105456..1065d9e 100644 --- a/model/store.go +++ b/model/store.go @@ -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