1.新增零售尊享会员开通接口;

2.修改GameCardInfo接口,查看详情无需用户登录;
3.修改搜索相关接口,搜索无需登录;
This commit is contained in:
chenlin 2024-08-26 17:16:33 +08:00
parent d467e3b978
commit f5db898321
13 changed files with 579 additions and 146 deletions

View File

@ -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

View File

@ -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
}
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

View File

@ -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,7 +242,13 @@ func RentCardOrderCreate(c *gin.Context) {
cardCount += v.Count
}
rentCard := model.GetUserRentCard(uc.Uid)
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)
@ -249,11 +256,26 @@ func RentCardOrderCreate(c *gin.Context) {
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,

View File

@ -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
}

59
go.mod
View File

@ -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
)

80
go.sum
View File

@ -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=

View File

@ -50,6 +50,7 @@ const (
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" // 数据库配置 生产

View File

@ -73,7 +73,7 @@ type UserMemberRecord struct {
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-升级黑金
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"`

View File

@ -39,6 +39,7 @@ const (
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{

View File

@ -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 {

21
model/privilege_member.go Normal file
View File

@ -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"` // 审核时间
}

View File

@ -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:"-"` // 会员类型
@ -185,6 +186,7 @@ const (
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 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"` // 升级:白金->黑金数量(自动)

View File

@ -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")