From f5db898321e6eec0bdf4ced79b94f6dcd35bb693 Mon Sep 17 00:00:00 2001 From: chenlin Date: Mon, 26 Aug 2024 17:16:33 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=96=B0=E5=A2=9E=E9=9B=B6=E5=94=AE=E5=B0=8A?= =?UTF-8?q?=E4=BA=AB=E4=BC=9A=E5=91=98=E5=BC=80=E9=80=9A=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=9B=202.=E4=BF=AE=E6=94=B9GameCardInfo=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E6=9F=A5=E7=9C=8B=E8=AF=A6=E6=83=85=E6=97=A0=E9=9C=80?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=99=BB=E5=BD=95=EF=BC=9B=203.=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=90=9C=E7=B4=A2=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E6=90=9C=E7=B4=A2=E6=97=A0=E9=9C=80=E7=99=BB=E5=BD=95?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/account.go | 8 ++ controller/game_card.go | 260 ++++++++++++++++++++++++++++++++-- controller/order.go | 48 +++++-- controller/user.go | 77 ++++++++-- go.mod | 59 +++++++- go.sum | 80 ++--------- lib/wxpay/wx_pay.go | 17 +-- model/analyse.go | 4 +- model/config.go | 37 +++-- model/cooperative_business.go | 61 +++++++- model/privilege_member.go | 21 +++ model/user.go | 47 +++--- router/router_app.go | 6 +- 13 files changed, 579 insertions(+), 146 deletions(-) create mode 100644 model/privilege_member.go diff --git a/controller/account.go b/controller/account.go index 2f3ded6..a3bc8a0 100644 --- a/controller/account.go +++ b/controller/account.go @@ -552,6 +552,14 @@ func UserData(c *gin.Context) { } m.LatestInviteRecord = inviteRecord + // 查询尊享会员信息 + var privilegeMember model.PrivilegeMember + err = model.NewPrivilegeMemberQuerySet(model.DB).UidEq(uc.Uid).One(&privilegeMember) + if err != nil && err != model.RecordNotFound { + logger.Error(err) + } + m.PrivilegeMemberInfo = privilegeMember + ret := m RespOK(c, ret) return diff --git a/controller/game_card.go b/controller/game_card.go index 0622d1e..fd16f36 100644 --- a/controller/game_card.go +++ b/controller/game_card.go @@ -80,8 +80,20 @@ func GameCardInfo(c *gin.Context) { return } uc := auth.GetCurrentUser(c) - if uc == nil { - RespJson(c, status.Unauthorized, nil) + if uc == nil { // 如果没有登录,则只查看详情 + //RespJson(c, status.Unauthorized, nil) + //return + info, err := model.GetGameCardInfo(req.GameId, req.StoreId) + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + ret := map[string]interface{}{ + "card_info": info, + "is_collection": false, + } + RespOK(c, ret) return } @@ -127,8 +139,8 @@ func GameCardSearch(c *gin.Context) { } uc := auth.GetCurrentUser(c) if uc == nil { - RespJson(c, status.Unauthorized, nil) - return + //RespJson(c, status.Unauthorized, nil) + //return } cardList, totalPage, err := model.GetGameCardSearch(req.Name, req.Page, req.PageSize, req.StoreId) @@ -137,12 +149,16 @@ func GameCardSearch(c *gin.Context) { RespJson(c, status.InternalServerError, nil) return } - err = model.SearchHistoryAdd(uc.Uid, req.Name) - if err != nil { - logger.Error("err:", err) - RespJson(c, status.InternalServerError, nil) - return + + if uc != nil { // 登录过的用户才记录搜索历史 + err = model.SearchHistoryAdd(uc.Uid, req.Name) + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } } + ret := map[string]interface{}{ "card_list": cardList, "cur_page": req.Page, @@ -154,7 +170,9 @@ func GameCardSearch(c *gin.Context) { func GameCardSearchHistory(c *gin.Context) { uc := auth.GetCurrentUser(c) if uc == nil { - RespJson(c, status.Unauthorized, nil) + //RespJson(c, status.Unauthorized, nil) + + RespOK(c, []model.SearchHistory{}) return } historyList, err := model.GetSearchHistoryList(uc.Uid) @@ -2320,6 +2338,228 @@ func HmPushWXPayNotice(c *gin.Context) { fundRecord.Remark = "购买运费包" } + if record.Attach == wxpay.WxPayPrivilegeMember { + logger.Info("开通尊享会员 支付成功:") + logger.Info("用户uid:", outOrderNo) + + fundRecord.Uid = record.Uid + fundRecord.FundType = model.FundTypePrivilegeMemberFee + fundRecord.Remark = "尊享会员费" + + memberRecord := &model.UserMemberRecord{ + Uid: record.Uid, + AfterMemberLevel: record.MemberLevel, + } + newTime := time.Now() + privilegeMemberNew := &model.PrivilegeMember{} + var spendType uint32 // 开通类型: 1-未开通 2-开通会员 3-续费 + var user model.User + err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).One(&user) + if err != nil { + logger.Error("err:", err) + RespJson(c, status.DBOperateError, nil) + return + } else { + var privilegeMember model.PrivilegeMember + err = model.NewPrivilegeMemberQuerySet(model.DB).UidEq(record.Uid).One(&privilegeMember) + if err != nil && err != model.RecordNotFound { + logger.Error("PrivilegeMember:", err) + RespJson(c, status.DBOperateError, nil) + return + } + + var expireTime time.Time + expireTime = newTime.AddDate(1, 0, 0) + if err == model.RecordNotFound { // 没有记录,用户新开通尊享会员 + spendType = 2 // 2-开通会员 + memberRecord.OpenMemberTime = newTime + memberRecord.Type = 9 // 开通会员类型 + + privilegeMemberNew.Uid = record.Uid + privilegeMemberNew.Tel = user.Tel + privilegeMemberNew.MemberLevel = 6 + privilegeMemberNew.MemberExpire = &expireTime + privilegeMemberNew.OpenMemberTime = &newTime + privilegeMemberNew.ExtendStatus = 2 + } else { // 有记录,用户续费尊享会员 + spendType = 3 // 3-续费 + memberRecord.OpenMemberTime = *privilegeMember.OpenMemberTime + memberRecord.BeforeMemberLevel = privilegeMember.MemberLevel + memberRecord.BeforeMemberExpire = *privilegeMember.MemberExpire + memberRecord.Serial = uint32(privilegeMember.MemberExpire.Unix()) + if privilegeMember.MemberExpire.After(newTime) { + expireTime = privilegeMember.MemberExpire.AddDate(1, 0, 0) + } + memberRecord.Type = 10 // 续费会员类型 + + userUpdateQs := model.NewPrivilegeMemberQuerySet(model.DB).UidEq(record.Uid).GetUpdater(). + SetMemberLevel(record.MemberLevel).SetMemberExpire(&expireTime).SetExtendStatus(2) + _, err = userUpdateQs.UpdateNum() + if err != nil { + logger.Error("err:", err) + return + } + } + memberRecord.AfterMemberExpire = expireTime + memberRecord.OpenMemberLevel = record.MemberLevel + + // 邀请记录 + var invite model.UserInvite + err = model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).OrderDescByCreatedAt().Limit(1).One(&invite) + if err != nil && err != model.RecordNotFound { + logger.Error("err:", err) + } else { + if err == nil { + effectiveStoreInfo, err := model.GetUserEffectiveStore(invite.FromUid) + if err != nil { + logger.Error("GetUserEffectiveStore err:", err) + effectiveStoreInfo.StoreID = 0 + } + privilegeMemberNew.StoreId = effectiveStoreInfo.StoreID + + if invite.Action == 1 { // 首次开通会员 + qs := model.NewUserInviteQuerySet(model.DB).IDEq(invite.ID).GetUpdater() + invite.RenewHide = 1 // 自动 + + qs = qs.SetMemberOpenTime(newTime).SetMemberLevel(record.MemberLevel) + _, err = qs.SetMemberType(2).SetMemberStatus(2). + SetAction(2).SetSpendType(spendType).SetMemberGenre(record.MemberGenre).UpdateNum() + if err != nil { + logger.Error("update user invite action spend type err:", err) + } + if invite.UserInviteRecordId != 0 { + go func() { + err = model.NewUserInviteRecordQuerySet(model.DB).IDEq(invite.UserInviteRecordId).GetUpdater(). + SetAction(2).SetSpendType(spendType).SetMemberLevel(record.MemberLevel). + SetActionTime(newTime).SetMemberGenre(record.MemberGenre).SetRenewHide(invite.RenewHide).Update() + if err != nil { + logger.Error("update user invite record err:", err) + } + }() + } + } else { // 续费会员-用户直接续费 + inviteRecordNew := &model.UserInviteRecord{ + ToUid: invite.ToUid, + FromUid: invite.FromUid, + StoreId: effectiveStoreInfo.StoreID, + Action: 2, + SpendType: spendType, + MemberLevel: record.MemberLevel, + First: 0, + Scan: 0, // 自动生成 + ActionTime: newTime, + MemberGenre: record.MemberGenre, + RenewHide: 1, + } + err = model.DB.Create(inviteRecordNew).Error + if err != nil { + logger.Error("create invite record err:", err) + } + + userInviteNew := &model.UserInvite{ + FromUid: invite.FromUid, + UserType: invite.UserType, + StoreId: effectiveStoreInfo.StoreID, + StoreType: invite.StoreType, + MemberOpenTime: time.Now(), + MemberType: 2, + MemberStatus: 2, + ToUid: invite.ToUid, + Action: 2, + SpendType: spendType, + MemberLevel: record.MemberLevel, + UserInviteRecordId: inviteRecordNew.ID, + FirstInvite: 0, + Scan: 0, + MemberGenre: record.MemberGenre, + RenewHide: 1, + //MemberOpenTime: invite.MemberOpenTime, + } + err = model.DB.Create(userInviteNew).Error + if err != nil { + logger.Error("create invite record err:", err) + } + } + + if invite.FromUid != 0 { + logger.Info("invite.FromUid != 0") + fmt.Println("invite.FromUid != 0") + inviteUser := model.GetUserByUid(invite.FromUid) + if inviteUser != nil && inviteUser.UserType == 2 { + // 记录对应的数量 + switch spendType { + case 2: // 开通 + fmt.Println("用户开通------") + model.AddCooperativeMemberPromotion(inviteUser.CooperativeBusinessId, + uint32(effectiveStoreInfo.StoreID), inviteUser.Uid, int(record.MemberLevel), + int(record.MemberGenre)) + case 3: // 续费 + fmt.Println("用户续费---") + model.AddCooperativeMemberRenewal(inviteUser.CooperativeBusinessId, + uint32(invite.StoreId), inviteUser.Uid, int(record.MemberLevel), + int(record.MemberGenre), true) + } + } + } + } else if err == model.RecordNotFound { // 没有邀请记录,完全是用户自己开通会员,自己续费;按产品要求也需要有记录 + inviteRecordNew := &model.UserInviteRecord{ + Action: 2, + SpendType: spendType, + MemberLevel: record.MemberLevel, + First: 0, + Scan: 0, // 自动生成 + ActionTime: newTime, + MemberGenre: record.MemberGenre, + RenewHide: 1, + } + err = model.DB.Create(inviteRecordNew).Error + if err != nil { + logger.Error("create invite record err:", err) + } + + // 记录对应的数量 + switch spendType { + case 2: // 开通 + fmt.Println("用户开通------") + model.AddCooperativeMemberPromotion(user.CooperativeBusinessId, 0, 0, + int(record.MemberLevel), int(record.MemberGenre)) + case 3: // 续费 + fmt.Println("用户续费---") + model.AddCooperativeMemberRenewal(user.CooperativeBusinessId, 0, 0, + int(record.MemberLevel), int(record.MemberGenre), true) + } + } + } + + if spendType == 2 { // 开通会员,新建尊享会员记录 + err = model.DB.Create(privilegeMemberNew).Error + if err != nil { + logger.Error("create invite record err:", err) + } + } + + // 赠送积分 + err = model.NewSendUserVm(user.Uid, uint32(payAmountFloat), spendType) + if err != nil { + logger.Error("send user vm err:", err) + } + + go func() { + err = model.DB.Create(memberRecord).Error + if err != nil { + logger.Error("create member record err:", err) + } + }() + } + _, err = model.NewUserOpenMemberRecordQuerySet(model.DB).IDEq(record.ID). + GetUpdater().SetState(2).UpdateNum() + if err != nil { + logger.Error("update user open member record state:err", err) + } + fmt.Println("notify.TotalFee:", fundRecord.Amount) + fmt.Println("notify.OutTradeNo:", outOrderNo) + } + fundRecord.TransactionId = bankOrderNo fundRecord.OutTradeNo = outOrderNo fundRecord.Status = 2 diff --git a/controller/order.go b/controller/order.go index 93f4473..dadcf60 100644 --- a/controller/order.go +++ b/controller/order.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/codinl/go-logger" "github.com/gin-gonic/gin" + "github.com/jinzhu/gorm" "golang.org/x/sync/errgroup" "io/ioutil" "mh-server/kuaidi" @@ -241,19 +242,40 @@ func RentCardOrderCreate(c *gin.Context) { cardCount += v.Count } - rentCard := model.GetUserRentCard(uc.Uid) - if rentCard == nil { - //logger.Error(errors.New("GetUserByUid err")) - //RespJson(c, status.InternalServerError, nil) - //return - rentCard = &model.UserRentCard{LevelRentCount: memberConfig.CardMax, CanRentCount: memberConfig.CardMax} + var rentCard *model.UserRentCard + var tx *gorm.DB + if req.Price == 0 { + fmt.Println("*********** req.Price == 0 ***********") + tx = model.TransactionBegin() + rentCard = model.GetUserRentCard(tx, uc.Uid) + fmt.Println("*********** rentCard is:", rentCard) + if rentCard == nil { + //logger.Error(errors.New("GetUserByUid err")) + //RespJson(c, status.InternalServerError, nil) + //return + rentCard = &model.UserRentCard{LevelRentCount: memberConfig.CardMax, CanRentCount: memberConfig.CardMax} + } + + } else { + fmt.Println("*********** req.Price != 0 ***********") + rentCard = model.GetUserRentCard(nil, uc.Uid) + fmt.Println("*********** rentCard is:", rentCard) + if rentCard == nil { + //logger.Error(errors.New("GetUserByUid err")) + //RespJson(c, status.InternalServerError, nil) + //return + rentCard = &model.UserRentCard{LevelRentCount: memberConfig.CardMax, CanRentCount: memberConfig.CardMax} + } } //if uc.Uid == 45935373 { // rentCard.CanRentCount -= 1 //} if cardCount > rentCard.CanRentCount { - logger.Error("GetMemberConfig err:", err) + if req.Price == 0 { + tx.Rollback() + } + logger.Error("err:", "会员超过可借卡数") RespJson(c, status.OrderOutRentCount, nil) return } @@ -376,7 +398,7 @@ func RentCardOrderCreate(c *gin.Context) { //fmt.Println("PayPrice:", order.PayPrice) if req.Price == 0 { - tx := model.TransactionBegin() + //tx := model.TransactionBegin() order.PayStatus = model.PayStatusPaid fmt.Println("orderId:", order.PayStatus) err = order.OrderCreate(tx) @@ -419,6 +441,15 @@ func RentCardOrderCreate(c *gin.Context) { return } } + + err = model.OrderCardUserRentCard(uc.Uid, cardCount, memberConfig, tx) + if err != nil { + tx.Rollback() + logger.Error("update user_rent_card err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + err = tx.Commit().Error if err != nil { tx.Rollback() @@ -426,7 +457,6 @@ func RentCardOrderCreate(c *gin.Context) { RespJson(c, status.InternalServerError, nil) return } - go model.OrderCardUserRentCard(uc.Uid, cardCount, memberConfig, nil) ret := map[string]interface{}{ "web_pay": "", "order_id": order.ID, diff --git a/controller/user.go b/controller/user.go index 639be9f..473dbb2 100644 --- a/controller/user.go +++ b/controller/user.go @@ -1262,15 +1262,70 @@ func InviteMemberReportList(c *gin.Context) { return } -// 升级 1-黄金会员 2-白金会员 3-黑金会员 -// 开通会员 -// 升级会员 -// 订单 -// 购物车 -// 押金 +type OpenPrivilegeMemberReq struct { + UserCouponId uint32 `json:"user_coupon_id"` // 优惠券id +} -// 会员列表 开通会员 下订单 借卡 还卡 -// 会员升级 -// 299会员 升级 -// 订单 会员导数据 -// 退押金记录 +// OpenPrivilegeMember 开通尊享会员 +// @Summary 开通尊享会员 +// @Tags 尊享会员, V1.4.2 +// @Produce json +// @Accept json +// @Param request body OpenPrivilegeMemberReq true "开通尊享会员模型" +// @Success 200 {object} RespRet +// @Router /api/v1/user/open_privilege_member [post] +func OpenPrivilegeMember(c *gin.Context) { + req := new(OpenPrivilegeMemberReq) + if c.ShouldBindJSON(&req) != nil { + logger.Error("parameter err") + RespJson(c, status.BadRequest, nil) + return + } + uc := auth.GetCurrentUser(c) + if uc == nil { + RespJson(c, status.Unauthorized, nil) + return + } + fmt.Println("req:", req) + user := model.GetUserByUid(uc.Uid) + + // 读取配置文件中尊享会员的价格 + totalFee, err := model.GetPrivilegeMemberFee() + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + if totalFee == 0 { + logger.Error(errors.New("totalFee is 0")) + RespJson(c, status.InternalServerError, nil) + return + } + + orderSn := model.GetOrderSn() + err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, MemberLevel: 6, + UserCouponId: req.UserCouponId, Attach: wxpay.WxPayPrivilegeMember}.Insert() + if err != nil { + logger.Error(errors.New("WebPay err")) + RespJson(c, status.InternalServerError, nil) + return + } + + configInfo, err := model.PayConfigInfo() + if err != nil { + logger.Error(err) + RespJson(c, status.InternalServerError, nil) + return + } + + // 支付走河马付,通过用户所属门店id选择不同的商户 + webPay, err := wxpay.HmJsPayUnifiedOrder(orderSn, totalFee, user.WxOpenID, configInfo.NotifyUrl) + if err != nil { + logger.Error(errors.New("WebPay err")) + RespJson(c, status.InternalServerError, nil) + return + } + RespOK(c, webPay) + + return +} diff --git a/go.mod b/go.mod index 931db51..f8d2608 100644 --- a/go.mod +++ b/go.mod @@ -1,30 +1,75 @@ module mh-server -go 1.16 +go 1.20 require ( github.com/aliyun/aliyun-sts-go-sdk v0.0.0-20171106034748-98d3903a2309 github.com/codinl/go-logger v1.0.0 github.com/dgrijalva/jwt-go v3.2.0+incompatible - github.com/flosch/pongo2 v0.0.0-20200913210552-0d938eb266f3 // indirect github.com/fsnotify/fsnotify v1.4.9 github.com/gin-gonic/gin v1.7.1 github.com/holdno/snowFlakeByGo v0.0.0-20180510033652-d23f8a8cadd7 github.com/jinzhu/gorm v1.9.16 - github.com/jinzhu/now v1.1.4 // indirect github.com/medivhzhan/weapp v1.5.1 github.com/pkg/errors v0.9.1 github.com/qiniu/api.v7 v7.2.5+incompatible - github.com/qiniu/x v7.0.8+incompatible // indirect github.com/rs/zerolog v1.23.0 - github.com/satori/go.uuid v1.2.0 // indirect github.com/spf13/cobra v1.1.3 github.com/spf13/viper v1.7.1 github.com/swaggo/swag v1.16.3 github.com/wechatpay-apiv3/wechatpay-go v0.2.6 github.com/xuri/excelize/v2 v2.6.0 - golang.org/x/sync v0.6.0 - golang.org/x/tools v0.19.0 // indirect + golang.org/x/sync v0.8.0 +) + +require ( + github.com/KyleBanks/depth v1.2.1 // indirect + github.com/PuerkitoBio/purell v1.1.1 // indirect + github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect + github.com/gin-contrib/sse v0.1.0 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.19.6 // indirect + github.com/go-openapi/spec v0.20.4 // indirect + github.com/go-openapi/swag v0.19.15 // indirect + github.com/go-playground/locales v0.13.0 // indirect + github.com/go-playground/universal-translator v0.17.0 // indirect + github.com/go-playground/validator/v10 v10.4.1 // indirect + github.com/go-sql-driver/mysql v1.5.0 // indirect + github.com/golang/protobuf v1.3.3 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.4 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.9 // indirect + github.com/leodido/go-urn v1.2.0 // indirect + github.com/magiconair/properties v1.8.1 // indirect + github.com/mailru/easyjson v0.7.6 // indirect + github.com/mattn/go-isatty v0.0.12 // indirect + github.com/mitchellh/mapstructure v1.1.2 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.1 // indirect + github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect + github.com/pelletier/go-toml v1.2.0 // indirect + github.com/qiniu/x v7.0.8+incompatible // indirect + github.com/richardlehane/mscfb v1.0.4 // indirect + github.com/richardlehane/msoleps v1.0.1 // indirect + github.com/satori/go.uuid v1.2.0 // indirect + github.com/spf13/afero v1.1.2 // indirect + github.com/spf13/cast v1.3.0 // indirect + github.com/spf13/jwalterweatherman v1.0.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/subosito/gotenv v1.2.0 // indirect + github.com/ugorji/go/codec v1.1.7 // indirect + github.com/xuri/efp v0.0.0-20220407160117-ad0f7a785be8 // indirect + github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 // indirect + golang.org/x/crypto v0.26.0 // indirect + golang.org/x/net v0.28.0 // indirect + golang.org/x/sys v0.23.0 // indirect + golang.org/x/text v0.17.0 // indirect + golang.org/x/tools v0.24.0 // indirect gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect + gopkg.in/ini.v1 v1.51.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect qiniupkg.com/x v7.0.8+incompatible // indirect ) diff --git a/go.sum b/go.sum index eed6b42..7e7ea1c 100644 --- a/go.sum +++ b/go.sum @@ -46,7 +46,6 @@ github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -60,8 +59,6 @@ github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8 github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y= github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/flosch/pongo2 v0.0.0-20200913210552-0d938eb266f3 h1:fmFk0Wt3bBxxwZnu48jqMdaOR/IZ4vdtJFuaFV8MpIE= -github.com/flosch/pongo2 v0.0.0-20200913210552-0d938eb266f3/go.mod h1:bJWSKrZyQvfTnb2OudyUjurSG4/edverV7n82+K3JiM= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -291,11 +288,9 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/swaggo/swag v1.16.3 h1:PnCYjPCah8FK4I26l2F/KQ4yz3sILcVUN3cTlBFA9Pg= github.com/swaggo/swag v1.16.3/go.mod h1:DImHIuOFXKpMFAQjcC7FG4m3Dg4+QuUgUzJmKjI/gRk= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/wechatpay-apiv3/wechatpay-go v0.2.6 h1:iWXgJ7nt8vTMU/MYYdZa6yklC8r4qdAJu+CKnRe0Bo0= github.com/wechatpay-apiv3/wechatpay-go v0.2.6/go.mod h1:W8ucVAOCKOii933cWROLaDLmRQ2cg/vHHVF4vGAVq9Q= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= @@ -306,7 +301,6 @@ github.com/xuri/excelize/v2 v2.6.0/go.mod h1:Q1YetlHesXEKwGFfeJn7PfEZz2IvHb6wdOe github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 h1:OAmKAfT06//esDdpi/DZ8Qsdt4+M5+ltca05dA5bG2M= github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -322,13 +316,9 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220408190544-5352b0902921/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -350,13 +340,7 @@ golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCc golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= -golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -375,19 +359,11 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220407224826-aac1ed45d8e3/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= -golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -397,11 +373,8 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -425,38 +398,18 @@ golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= +golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= +golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -478,12 +431,8 @@ golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= -golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= -golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -521,7 +470,6 @@ gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -529,7 +477,6 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -537,4 +484,3 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt qiniupkg.com/x v7.0.8+incompatible h1:Ek0ZVi5IyaWUAFkJbPRiqlh34xDM4uoKw7KqdpankvU= qiniupkg.com/x v7.0.8+incompatible/go.mod h1:6sLxR5IZ03vMaRAQAY/5MvzofeoBIjO4XE0Njv6V1ms= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/lib/wxpay/wx_pay.go b/lib/wxpay/wx_pay.go index b2c743e..4f650f5 100644 --- a/lib/wxpay/wx_pay.go +++ b/lib/wxpay/wx_pay.go @@ -42,14 +42,15 @@ const ( //wxPayNotifyUrl = "api/v1/wxpay/notice" wxPayNotifyUrl = "/api/v1/wxpay/notice" - WxPayMember = "member_pay" // 会员 - WxPayRentCard = "rent_card_pay" // 租卡 - WxPayDeposit = "deposit_pay" // 押金 - WxPayBuyGoods = "buy_goods" // 购买商品(线上小程序) - WxPayUpgradeMember = "upgrade_member" // 升级会员 - WxPayMemberExpireDelay = "member_expire_delay" // 会员过期滞纳金 - WxPayShareCardRetrieve = "share_card_retrieve" // 收回卡 - WxPayPostagePackage = "postage_package" // 运费包 + WxPayMember = "member_pay" // 会员 + WxPayRentCard = "rent_card_pay" // 租卡 + WxPayDeposit = "deposit_pay" // 押金 + WxPayBuyGoods = "buy_goods" // 购买商品(线上小程序) + WxPayUpgradeMember = "upgrade_member" // 升级会员 + WxPayMemberExpireDelay = "member_expire_delay" // 会员过期滞纳金 + WxPayShareCardRetrieve = "share_card_retrieve" // 收回卡 + WxPayPostagePackage = "postage_package" // 运费包 + WxPayPrivilegeMember = "privilege_member_pay" // 尊享会员 //WxPayExchangeGoods = "exchange_goods" // 兑换商品 //NotifyUrl = "https://switch.deovo.com:8001/api/v1/wxpay/notice" // 数据库配置 生产 diff --git a/model/analyse.go b/model/analyse.go index afe6276..8767b41 100644 --- a/model/analyse.go +++ b/model/analyse.go @@ -72,8 +72,8 @@ type UserMemberRecord struct { DeductionDays uint32 `json:"deduction_days"` // 抵扣天数 DeductionFee uint32 `json:"deduction_fee"` // 抵扣金额 CouponId uint32 `json:"coupon_id"` // 优惠券id - Serial uint32 `json:"serial" gorm:"index"` // 日志 - Type uint32 `json:"type" gorm:"index"` // 1-开通黄金 2-开通白金 3-开通黑金 4-续费黄金 5-续费白金 6-续费黑金 7-升级白金 8-升级黑金 + Serial uint32 `json:"serial" gorm:"index"` // 日志 + Type uint32 `json:"type" gorm:"index"` // 1-开通黄金 2-开通白金 3-开通黑金 4-续费黄金 5-续费白金 6-续费黑金 7-升级白金 8-升级黑金 9-开通尊享会员 10-续费尊享会员 OpenMemberLevel uint32 `json:"open_member_level"` OpenMemberTime time.Time `json:"open_member_time"` diff --git a/model/config.go b/model/config.go index 90043fa..a75b014 100644 --- a/model/config.go +++ b/model/config.go @@ -31,14 +31,15 @@ type PayConfig struct { } const ( - ConfigNamePay = "pay_config" // 支付配置 - ConfigNameMember = "member_config" // 会员配置 - ConfigNameMemberVm = "member_vm_config" // 会员积分配置 - ConfigNameAttendanceVm = "attendance_vm_config" // 签到积分配置 - ConfigActivityRenewal = "activity_renewal_config" // 活动配置 - ConfigRecycleCard = "recycle_card_config" // 回收卡配置 - ConfigPostagePackageFee = "postage_package_fee_config" // 运费包费 - ConfigPaymentGenre = "payment_genre_config" // 支付方式 + ConfigNamePay = "pay_config" // 支付配置 + ConfigNameMember = "member_config" // 会员配置 + ConfigNameMemberVm = "member_vm_config" // 会员积分配置 + ConfigNameAttendanceVm = "attendance_vm_config" // 签到积分配置 + ConfigActivityRenewal = "activity_renewal_config" // 活动配置 + ConfigRecycleCard = "recycle_card_config" // 回收卡配置 + ConfigPostagePackageFee = "postage_package_fee_config" // 运费包费 + ConfigPaymentGenre = "payment_genre_config" // 支付方式 + ConfigNamePrivilegeMember = "privilege_member_config" // 尊享会员配置 ) func PayConfigInfo() (*PayConfig, error) { @@ -120,6 +121,26 @@ func GetMemberConfig(level uint32, genre uint32) (*MemberConfig, error) { return nil, errors.New("level err") } +func GetPrivilegeMemberFee() (uint32, error) { + var memberConfig struct { + MemberFee uint32 `json:"member_fee"` // 会员费 + } + var configAllocation Config + err := NewConfigQuerySet(DB).NameEq(ConfigNamePrivilegeMember).One(&configAllocation) + if err != nil { + logger.Error("err:", err) + return 0, err + } + + err = json.Unmarshal([]byte(configAllocation.Value), &memberConfig) + if err != nil { + logger.Error("err:", err) + return 0, err + } + + return memberConfig.MemberFee, nil +} + // ShortMemberConfigMap_Dev 会员费配置 // 开发环境配置 var ShortMemberConfigMap_Dev = map[uint32]*MemberConfig{ diff --git a/model/cooperative_business.go b/model/cooperative_business.go index dde9d65..67cd790 100644 --- a/model/cooperative_business.go +++ b/model/cooperative_business.go @@ -79,12 +79,14 @@ type CooperativeMemberPromotion struct { GoldCount uint32 `json:"gold_count" gorm:"default:0"` // 黄金会员数量 PlatinumCount uint32 `json:"platinum_count" gorm:"default:0"` // 白金会员数量 BlackGoldCount uint32 `json:"black_gold_count" gorm:"default:0"` // 黑金会员数量 + PrivilegeCount uint32 `json:"privilege_count" gorm:"default:0"` // 尊享会员数量 Date string `json:"date" gorm:"index"` // State string `json:"state"` // 待发起结算 待财务打款 已结算 RenewalGoldCount uint32 `json:"renewal_gold_count" gorm:"default:0"` // 续费黄金会员数量 RenewalPlatinumCount uint32 `json:"renewal_platinum_count" gorm:"default:0"` // 续费白金会员数量 RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count" gorm:"default:0"` // 续费黑金会员数量 + RenewalPrivilegeCount uint32 `json:"renewal_privilege_count" gorm:"default:0"` // 续费尊享会员数量 UpgradeGoldToPlatinumCount uint32 `json:"upgrade_gold_to_platinum_count" gorm:"default:0"` // 升级:黄金->白金数量 UpgradeGoldToBlackCount uint32 `json:"upgrade_gold_to_black_count" gorm:"default:0"` // 升级:黄金->黑金数量 UpgradePlatinumToBlackCount uint32 `json:"upgrade_platinum_to_black_count" gorm:"default:0"` // 升级:白金->黑金数量 @@ -102,10 +104,12 @@ type CooperativeMemberPromotionStore struct { GoldCount uint32 `json:"gold_count" gorm:"default:0"` // 黄金会员数量 PlatinumCount uint32 `json:"platinum_count" gorm:"default:0"` // 白金会员数量 BlackGoldCount uint32 `json:"black_gold_count" gorm:"default:0"` // 黑金会员数量 + PrivilegeCount uint32 `json:"privilege_count" gorm:"default:0"` // 尊享会员数量 Date string `json:"date" gorm:"index"` // RenewalGoldCount uint32 `json:"renewal_gold_count" gorm:"default:0"` // 续费黄金会员数量 RenewalPlatinumCount uint32 `json:"renewal_platinum_count" gorm:"default:0"` // 续费白金会员数量 RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count" gorm:"default:0"` // 续费黑金会员数量 + RenewalPrivilegeCount uint32 `json:"renewal_privilege_count" gorm:"default:0"` // 续费尊享会员数量 UpgradeGoldToPlatinumCount uint32 `json:"upgrade_gold_to_platinum_count" gorm:"default:0"` // 升级:黄金->白金数量 UpgradeGoldToBlackCount uint32 `json:"upgrade_gold_to_black_count" gorm:"default:0"` // 升级:黄金->黑金数量 UpgradePlatinumToBlackCount uint32 `json:"upgrade_platinum_to_black_count" gorm:"default:0"` // 升级:白金->黑金数量 @@ -121,10 +125,12 @@ type CooperativeMemberPromotionDay struct { GoldCount uint32 `json:"gold_count" gorm:"default:0"` // 黄金会员数量 PlatinumCount uint32 `json:"platinum_count" gorm:"default:0"` // 白金会员数量 BlackGoldCount uint32 `json:"black_gold_count" gorm:"default:0"` // 黑金会员数量 + PrivilegeCount uint32 `json:"privilege_count" gorm:"default:0"` // 尊享会员数量 DayTime string `json:"day_time" gorm:"index"` // RenewalGoldCount uint32 `json:"renewal_gold_count" gorm:"default:0"` // 续费黄金会员数量 RenewalPlatinumCount uint32 `json:"renewal_platinum_count" gorm:"default:0"` // 续费白金会员数量 RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count" gorm:"default:0"` // 续费黑金会员数量 + RenewalPrivilegeCount uint32 `json:"renewal_privilege_count" gorm:"default:0"` // 续费尊享会员数量 UpgradeGoldToPlatinumCount uint32 `json:"upgrade_gold_to_platinum_count" gorm:"default:0"` // 升级:黄金->白金数量 UpgradeGoldToBlackCount uint32 `json:"upgrade_gold_to_black_count" gorm:"default:0"` // 升级:黄金->黑金数量 UpgradePlatinumToBlackCount uint32 `json:"upgrade_platinum_to_black_count" gorm:"default:0"` // 升级:白金->黑金数量 @@ -141,10 +147,12 @@ type CooperativeMemberPromotionStoreDay struct { GoldCount uint32 `json:"gold_count" gorm:"default:0"` // 黄金会员数量 PlatinumCount uint32 `json:"platinum_count" gorm:"default:0"` // 白金会员数量 BlackGoldCount uint32 `json:"black_gold_count" gorm:"default:0"` // 黑金会员数量 + PrivilegeCount uint32 `json:"privilege_count" gorm:"default:0"` // 尊享会员数量 DayTime string `json:"day_time" gorm:"index"` // RenewalGoldCount uint32 `json:"renewal_gold_count" gorm:"default:0"` // 续费黄金会员数量 RenewalPlatinumCount uint32 `json:"renewal_platinum_count" gorm:"default:0"` // 续费白金会员数量 RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count" gorm:"default:0"` // 续费黑金会员数量 + RenewalPrivilegeCount uint32 `json:"renewal_privilege_count" gorm:"default:0"` // 续费尊享会员数量 UpgradeGoldToPlatinumCount uint32 `json:"upgrade_gold_to_platinum_count" gorm:"default:0"` // 升级:黄金->白金数量 UpgradeGoldToBlackCount uint32 `json:"upgrade_gold_to_black_count" gorm:"default:0"` // 升级:黄金->黑金数量 UpgradePlatinumToBlackCount uint32 `json:"upgrade_platinum_to_black_count" gorm:"default:0"` // 升级:白金->黑金数量 @@ -163,6 +171,7 @@ type CooperativeDeductSettle struct { GoldCount uint32 `json:"gold_count" gorm:"default:0"` // 黄金会员数量 PlatinumCount uint32 `json:"platinum_count" gorm:"default:0"` // 白金会员数量 BlackGoldCount uint32 `json:"black_gold_count" gorm:"default:0"` // 黑金会员数量 + PrivilegeCount uint32 `json:"privilege_count" gorm:"default:0"` // 尊享会员数量 GoldDeduct uint32 `json:"gold_deduct"` // 黄金会员提成配置 PlatinumDeduct uint32 `json:"platinum_deduct"` // 白金会员提成配置 @@ -171,6 +180,7 @@ type CooperativeDeductSettle struct { RenewalGoldCount uint32 `json:"renewal_gold_count" gorm:"default:0"` // 续费黄金会员数量 RenewalPlatinumCount uint32 `json:"renewal_platinum_count" gorm:"default:0"` // 续费白金会员数量 RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count" gorm:"default:0"` // 续费黑金会员数量 + RenewalPrivilegeCount uint32 `json:"renewal_privilege_count" gorm:"default:0"` // 续费尊享会员数量 RenewalGoldDeduct uint32 `json:"renewal_gold_deduct"` // 续费黄金会员提成 RenewalPlatinumDeduct uint32 `json:"renewal_platinum_deduct"` // 续费白金会员提成 @@ -271,6 +281,10 @@ func (m *CooperativeMemberPromotion) AddPromotion(gdb *gorm.DB, memberLevel int) sql = "UPDATE cooperative_member_promotion SET black_gold_count=black_gold_count+1 " + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d", dateString, m.CooperativeBusinessId) m.BlackGoldCount = 1 + case 6: //尊享会员 + sql = "UPDATE cooperative_member_promotion SET privilege_count=privilege_count+1 " + + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d", dateString, m.CooperativeBusinessId) + m.PrivilegeCount = 1 } fmt.Println("邀请会员sql:", sql) exist, err := QueryRecordExist(fmt.Sprintf( @@ -324,6 +338,11 @@ func (m *CooperativeMemberPromotionStore) AddPromotion(gdb *gorm.DB, memberLevel fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d", dateString, m.CooperativeBusinessId, storeId) m.BlackGoldCount = 1 + case 6: //尊享会员 + sql = "UPDATE cooperative_member_promotion_store SET privilege_count=privilege_count+1 " + + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d", + dateString, m.CooperativeBusinessId, storeId) + m.PrivilegeCount = 1 } exist, err := QueryRecordExist(fmt.Sprintf( "SELECT * FROM cooperative_member_promotion_store WHERE cooperative_business_id=%d AND date='%s' AND store_id=%d", @@ -368,6 +387,10 @@ func (m *CooperativeMemberPromotionDay) AddPromotion(gdb *gorm.DB, memberLevel i sql = "UPDATE cooperative_member_promotion_day SET black_gold_count=black_gold_count+1 " + fmt.Sprintf("WHERE day_time='%s' AND cooperative_business_id=%d", dayString, m.CooperativeBusinessId) m.BlackGoldCount = 1 + case 6: //尊享会员 + sql = "UPDATE cooperative_member_promotion_day SET privilege_count=privilege_count+1 " + + fmt.Sprintf("WHERE day_time='%s' AND cooperative_business_id=%d", dayString, m.CooperativeBusinessId) + m.PrivilegeCount = 1 } exist, err := QueryRecordExist(fmt.Sprintf( "SELECT * FROM cooperative_member_promotion_day WHERE cooperative_business_id=%d AND day_time='%s'", @@ -416,6 +439,11 @@ func (m *CooperativeMemberPromotionStoreDay) AddPromotion(gdb *gorm.DB, memberLe fmt.Sprintf("WHERE day_time='%s' AND cooperative_business_id=%d AND store_id=%d", dateString, m.CooperativeBusinessId, storeId) m.BlackGoldCount = 1 + case 6: //尊享会员 + sql = "UPDATE cooperative_member_promotion_store_day SET privilege_count=privilege_count+1 " + + fmt.Sprintf("WHERE day_time='%s' AND cooperative_business_id=%d AND store_id=%d", + dateString, m.CooperativeBusinessId, storeId) + m.PrivilegeCount = 1 } exist, err := QueryRecordExist("SELECT * FROM cooperative_member_promotion_store_day " + fmt.Sprintf("WHERE cooperative_business_id=%d AND day_time='%s' AND store_id=%d", @@ -485,6 +513,11 @@ func (m *InviteMemberReport) AddPromotion(gdb *gorm.DB, memberLevel, memberGenre fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", dateString, m.CooperativeBusinessId, m.Uid) m.BlackGoldCount = 1 + case 6: // 尊享会员 + sql = "UPDATE invite_member_report SET privilege_count=privilege_count+1 " + + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) + m.PrivilegeCount = 1 } exist, err := QueryRecordExist(fmt.Sprintf( @@ -622,6 +655,10 @@ func (m *CooperativeMemberPromotion) AddRenewal(gdb *gorm.DB, memberLevel int) e sql = "UPDATE cooperative_member_promotion SET renewal_black_gold_count=renewal_black_gold_count+1 " + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d", dateString, m.CooperativeBusinessId) m.RenewalBlackGoldCount = 1 + case 6: // 尊享会员 + sql = "UPDATE cooperative_member_promotion SET renewal_privilege_count=renewal_privilege_count+1 " + + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d", dateString, m.CooperativeBusinessId) + m.RenewalPrivilegeCount = 1 } fmt.Println("邀请会员sql:", sql) exist, err := QueryRecordExist(fmt.Sprintf( @@ -641,7 +678,6 @@ func (m *CooperativeMemberPromotion) AddRenewal(gdb *gorm.DB, memberLevel int) e return err } } else { - m.State = PromotionStateUnSettlement err = gdb.Create(m).Error if err != nil { @@ -676,6 +712,11 @@ func (m *CooperativeMemberPromotionStore) AddRenewal(gdb *gorm.DB, memberLevel i fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d", dateString, m.CooperativeBusinessId, storeId) m.RenewalBlackGoldCount = 1 + case 6: // 尊享会员 + sql = "UPDATE cooperative_member_promotion_store SET renewal_privilege_count=renewal_privilege_count+1 " + + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND store_id=%d", + dateString, m.CooperativeBusinessId, storeId) + m.RenewalPrivilegeCount = 1 } exist, err := QueryRecordExist(fmt.Sprintf( "SELECT * FROM cooperative_member_promotion_store WHERE cooperative_business_id=%d AND date='%s' AND store_id=%d", @@ -691,7 +732,6 @@ func (m *CooperativeMemberPromotionStore) AddRenewal(gdb *gorm.DB, memberLevel i return err } } else { - err = gdb.Create(m).Error if err != nil { logger.Error("create cooperative member promotion err:", err) @@ -721,6 +761,10 @@ func (m *CooperativeMemberPromotionDay) AddRenewal(gdb *gorm.DB, memberLevel int sql = "UPDATE cooperative_member_promotion_day SET renewal_black_gold_count=renewal_black_gold_count+1 " + fmt.Sprintf("WHERE day_time='%s' AND cooperative_business_id=%d", dayString, m.CooperativeBusinessId) m.RenewalBlackGoldCount = 1 + case 6: // 尊享会员 + sql = "UPDATE cooperative_member_promotion_day SET renewal_privilege_count=renewal_privilege_count+1 " + + fmt.Sprintf("WHERE day_time='%s' AND cooperative_business_id=%d", dayString, m.CooperativeBusinessId) + m.RenewalPrivilegeCount = 1 } exist, err := QueryRecordExist(fmt.Sprintf( "SELECT * FROM cooperative_member_promotion_day WHERE cooperative_business_id=%d AND day_time='%s'", @@ -770,6 +814,11 @@ func (m *CooperativeMemberPromotionStoreDay) AddRenewal(gdb *gorm.DB, memberLeve fmt.Sprintf("WHERE day_time='%s' AND cooperative_business_id=%d AND store_id=%d", dateString, m.CooperativeBusinessId, storeId) m.RenewalBlackGoldCount = 1 + case 6: // 尊享会员 + sql = "UPDATE cooperative_member_promotion_store_day SET renewal_privilege_count=renewal_privilege_count+1 " + + fmt.Sprintf("WHERE day_time='%s' AND cooperative_business_id=%d AND store_id=%d", + dateString, m.CooperativeBusinessId, storeId) + m.RenewalPrivilegeCount = 1 } exist, err := QueryRecordExist("SELECT * FROM cooperative_member_promotion_store_day " + fmt.Sprintf("WHERE cooperative_business_id=%d AND day_time='%s' AND store_id=%d", @@ -785,7 +834,6 @@ func (m *CooperativeMemberPromotionStoreDay) AddRenewal(gdb *gorm.DB, memberLeve return err } } else { - err = gdb.Create(m).Error if err != nil { logger.Error("create cooperative member promotion store day err:", err) @@ -832,7 +880,6 @@ func (m *InviteMemberReport) AddRenewalAuto(gdb *gorm.DB, memberLevel, memberGen dateString, m.CooperativeBusinessId, m.Uid) m.RenewalGoldCountHalf = 1 } - case 4: // 白金 sql = "UPDATE invite_member_report SET renewal_platinum_count=renewal_platinum_count+1 " + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", @@ -843,6 +890,11 @@ func (m *InviteMemberReport) AddRenewalAuto(gdb *gorm.DB, memberLevel, memberGen fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", dateString, m.CooperativeBusinessId, m.Uid) m.RenewalBlackGoldCount = 1 + case 6: // 尊享会员 + sql = "UPDATE invite_member_report SET renewal_privilege_count=renewal_privilege_count+1 " + + fmt.Sprintf("WHERE date='%s' AND cooperative_business_id=%d AND uid=%d", + dateString, m.CooperativeBusinessId, m.Uid) + m.RenewalPrivilegeCount = 1 } exist, err := QueryRecordExist(fmt.Sprintf( @@ -859,7 +911,6 @@ func (m *InviteMemberReport) AddRenewalAuto(gdb *gorm.DB, memberLevel, memberGen return err } } else { - //m.State = PromotionStateUnSettlement err = gdb.Create(m).Error if err != nil { diff --git a/model/privilege_member.go b/model/privilege_member.go new file mode 100644 index 0000000..09a39f3 --- /dev/null +++ b/model/privilege_member.go @@ -0,0 +1,21 @@ +package model + +import "time" + +// gen:qs +// +//go:generate goqueryset -in privilege_member.go +type PrivilegeMember struct { + Model + Uid uint32 `json:"uid" gorm:"column:uid;unique_index"` // 用户id + Tel string `json:"tel"` // 电话 + StoreId uint64 `json:"store_id"` // 门店id + MemberLevel uint32 `json:"member_level"` // 当前会员等级:1-普通用户,6-尊享会员 + MemberExpire *time.Time `json:"member_expire"` // 会员到期时间 + OpenMemberTime *time.Time `json:"open_member_time"` // 开通会员时间 + ExtendStatus uint32 `json:"extend_status"` // 延保状态:0-非会员, 1-已过期,2-待激活、3-已激活 + HostCode string `json:"host_code"` // 主机编码 + Images string `json:"images"` // 图片凭证 + AuditorId uint32 `json:"auditor_id" gorm:"index"` // 审核人id + AuditTime *time.Time `json:"audit_time"` // 审核时间 +} diff --git a/model/user.go b/model/user.go index 272a1bf..d97db54 100644 --- a/model/user.go +++ b/model/user.go @@ -61,6 +61,7 @@ type User struct { RoleKey string `json:"role_key" gorm:"-"` // 角色代码 RoleName string `json:"role_name" gorm:"-"` // 角色名称 LatestInviteRecord UserInviteRecord `json:"latest_invite_record" gorm:"-"` // 最近的邀请记录 + PrivilegeMemberInfo PrivilegeMember `json:"privilege_member_info" gorm:"-"` // 尊享会员信息 //RenewalTime time.Time `json:"renewal_time"` //RenewalMemberLevel uint32 `json:"renewal_member_level"` //MemberLevelString string `json:"member_level_string" gorm:"-"` // 会员类型 @@ -172,19 +173,20 @@ type DepositRefundRecord struct { } const ( - FundTypeMemberFee = "member_fee" // 会员费 - FundTypeMemberDeposit = "member_deposit" // 押金 - FundTypeExpressFee = "express_fee" // 邮费 - FundTypeUpgradeMember = "upgrade_member" // 升级会员 - FundTypeMemberExpireDelay = "member_expire_delay" // 滞纳金 - FundTypeDepositRefund = "deposit_refund" // 退押金 - FundTypeExpressFeeRefund = "express_fee_refund" // 退邮费 - FundTypeBuyGoods = "buy_goods" // 购买商品 - FundTypeBuyGoodsCancel = "buy_goods_cancel" // 购买商品取消订单 - FundTypeBuyGoodsRefund = "buy_goods_refund" // 购买商品退货 - FundTypeRecycleCard = "recycle_card" // 回收卡带 - FundTypePostagePackageFee = "postage_package_fee" // 购买运费包 - FundTypeDowngradeRenewal = "downgrade_renewal" // 降级续费 + FundTypeMemberFee = "member_fee" // 会员费 + FundTypeMemberDeposit = "member_deposit" // 押金 + FundTypeExpressFee = "express_fee" // 邮费 + FundTypeUpgradeMember = "upgrade_member" // 升级会员 + FundTypeMemberExpireDelay = "member_expire_delay" // 滞纳金 + FundTypeDepositRefund = "deposit_refund" // 退押金 + FundTypeExpressFeeRefund = "express_fee_refund" // 退邮费 + FundTypeBuyGoods = "buy_goods" // 购买商品 + FundTypeBuyGoodsCancel = "buy_goods_cancel" // 购买商品取消订单 + FundTypeBuyGoodsRefund = "buy_goods_refund" // 购买商品退货 + FundTypeRecycleCard = "recycle_card" // 回收卡带 + FundTypePostagePackageFee = "postage_package_fee" // 购买运费包 + FundTypeDowngradeRenewal = "downgrade_renewal" // 降级续费 + FundTypePrivilegeMemberFee = "privilege_member_fee" // 尊享会员费 ) // gen:qs @@ -362,12 +364,21 @@ func GetUserEffectiveStore(uid uint32) (*StoreInfo, error) { return &validStores[0], nil } -func GetUserRentCard(uid uint32) *UserRentCard { +func GetUserRentCard(db *gorm.DB, uid uint32) *UserRentCard { userRent := new(UserRentCard) - if err := NewUserRentCardQuerySet(DB).UidEq(uid).One(userRent); err != nil { - logger.Error(err, uid) - return nil + if db == nil { + if err := NewUserRentCardQuerySet(DB).UidEq(uid).One(userRent); err != nil { + logger.Error(err, uid) + return nil + } + } else { + // 手动加锁查询 + if err := db.Raw(`SELECT * FROM user_rent_card WHERE uid = ? FOR UPDATE`, uid).Scan(userRent).Error; err != nil { + logger.Error(err, uid) + return nil + } } + return userRent } @@ -543,6 +554,7 @@ type InviteMemberReport struct { GoldCountQuarter uint32 `json:"gold_count_quarter"` // 季度黄金数量 PlatinumCount uint32 `json:"platinum_count"` // 白金数量 BlackGoldCount uint32 `json:"black_gold_count"` // 黑金数量 + PrivilegeCount uint32 `json:"privilege_count"` // 尊享会员数量 //ReportTime string `json:"report_time" gorm:"index"` // 业绩时间 Date string `json:"date" gorm:"index"` // 业绩时间 DeductAmount uint32 `json:"deduct_amount"` // 店员提成 @@ -556,6 +568,7 @@ type InviteMemberReport struct { RenewalGoldCountQuarter uint32 `json:"renewal_gold_count_quarter"` // 续费季度黄金会员数量(自动) RenewalPlatinumCount uint32 `json:"renewal_platinum_count"` // 续费白金会员数量(自动) RenewalBlackGoldCount uint32 `json:"renewal_black_gold_count"` // 续费黑金会员数量(自动) + RenewalPrivilegeCount uint32 `json:"renewal_privilege_count"` // 续费尊享会员数量 UpgradeGoldToPlatinumCount uint32 `json:"upgrade_gold_to_platinum_count" gorm:"default:0"` // 升级:黄金->白金数量(自动) UpgradeGoldToBlackCount uint32 `json:"upgrade_gold_to_black_count" gorm:"default:0"` // 升级:黄金->黑金数量(自动) UpgradePlatinumToBlackCount uint32 `json:"upgrade_platinum_to_black_count" gorm:"default:0"` // 升级:白金->黑金数量(自动) diff --git a/router/router_app.go b/router/router_app.go index db5e7ab..6be0e02 100644 --- a/router/router_app.go +++ b/router/router_app.go @@ -58,7 +58,7 @@ func ConfigAppRouter(r gin.IRouter) { gameCard.POST("game_type", controller.GameCardTypes) // 游戏标签 gameCard.POST("type/list", controller.GameCardTypeList) // 游戏类型列表 - gameCard.Use(auth.UserAccessAuth) + //gameCard.Use(auth.UserAccessAuth) gameCard.POST("info", controller.GameCardInfo) // 游戏卡详情 gameCard.POST("list", controller.GameCardList) // 游戏卡列表 gameCard.POST("banner", controller.HomeCarouselList) // 轮播图 @@ -69,7 +69,7 @@ func ConfigAppRouter(r gin.IRouter) { search.POST("list", controller.GameCardSearch) // 游戏卡搜索列表 search.POST("hot", controller.GameCardHotSearch) // 游戏卡搜索列表 - search.Use(auth.UserAccessAuth) + //search.Use(auth.UserAccessAuth) search.POST("history", controller.GameCardSearchHistory) // 游戏卡搜索历史 } @@ -99,6 +99,8 @@ func ConfigAppRouter(r gin.IRouter) { user.POST("invite_list", controller.UserInviteList) // 小程序推广记录 user.POST("new_invite_list", controller.NewUserInviteRecordList) // 小程序推广记录 user.POST("use_code_to_coupon", controller.UserCodeToCoupon) // 兑换码兑换优惠券 + + user.POST("open_privilege_member", controller.OpenPrivilegeMember) // 开通尊享会员 } store := api.Group("store")