1.修改登录流程,登录的时候直接获取手机号进行解析;

This commit is contained in:
chenlin 2024-04-03 14:29:19 +08:00
parent 341c5a08de
commit 4ddabff367
16 changed files with 450 additions and 192 deletions

View File

@ -1,6 +1,7 @@
package controller package controller
import ( import (
"encoding/json"
"fmt" "fmt"
"github.com/codinl/go-logger" "github.com/codinl/go-logger"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@ -47,12 +48,27 @@ func AuthLogin(c *gin.Context) {
RespJson(c, status.BadRequest, nil) RespJson(c, status.BadRequest, nil)
return return
} }
fmt.Println("用户信息 resp:", resp) fmt.Println("用户信息 resp:", resp)
logger.Infof("OpenID=%+v", resp.OpenID) logger.Infof("OpenID=%+v", resp.OpenID)
logger.Info("resp.UnionID=", resp.UnionID) logger.Info("resp.UnionID=", resp.UnionID)
// 解析手机号
phone, err := weapp.DecryptPhoneNumber(resp.SessionKey, req.EncryptedData, req.Iv)
if err != nil {
logger.Error(err)
RespJson(c, status.InternalServerError, nil)
return
}
//// 解析用户数据
//userInfo, err := weapp.DecryptUserInfo(req.RawData, req.EncryptedData, req.Signature, req.Iv, resp.SessionKey)
//if err != nil {
// logger.Error(err)
// RespJson(c, status.BadRequest, nil)
// return
//}
//fmt.Println("用户信息 userInfo:", userInfo)
var user = model.User{} var user = model.User{}
sqlErr := model.NewUserQuerySet(model.DB).WxOpenIDEq(resp.OpenID).One(&user) sqlErr := model.NewUserQuerySet(model.DB).WxOpenIDEq(resp.OpenID).One(&user)
if sqlErr != nil && sqlErr != model.RecordNotFound { if sqlErr != nil && sqlErr != model.RecordNotFound {
@ -172,91 +188,117 @@ func AuthLogin(c *gin.Context) {
} }
} }
if sqlErr == model.RecordNotFound { if sqlErr == model.RecordNotFound {
user = model.User{ // 通过手机号判断之前是否有数据
WxOpenID: resp.OpenID, sqlErr = model.NewUserQuerySet(model.DB).TelEq(phone.PhoneNumber).One(&user)
WxUnionID: resp.UnionID, if sqlErr != nil && sqlErr != model.RecordNotFound {
LastLoginAt: nowTime, logger.Error("WxOpenIDEq:", sqlErr)
MemberLevel: 1, RespJson(c, status.DBOperateError, nil)
//Notify: common.Yes, return
} }
user.Uid = createUid() // 新建uid
inviteUser := model.GetUserByUid(req.InviteUid) if sqlErr != model.RecordNotFound { // 手机号有记录
if user.WxOpenID == "" { // 微信openid为空只是线下购物时新建了用户则更新补充数据
var eg errgroup.Group user.WxOpenID = resp.OpenID
if req.InviteUid != 0 && inviteUser.UserType == 2 { // 如果入参有邀请人id并且是店员则新增2条邀请记录 user.WxUnionID = resp.UnionID
inviteRecordFirst := &model.UserInviteRecord{ user.LastLoginAt = nowTime
ToUid: user.Uid, user.MemberLevel = 1 // 普通会员
FromUid: req.InviteUid, //user.WxName = userInfo.Nickname
Action: 2, // 激活邀请 //user.WxAvatar = userInfo.Avatar
SpendType: 1, // 未开通 user.CreatedAt = nowTime
MemberLevel: 0, // 未开通会员 err = model.UserUpdate(&user)
First: 1, // 首次邀请 if err != nil {
Scan: 1, logger.Error("WxOpenIDEq:", err)
ActionTime: nowTime, RespJson(c, status.DBOperateError, nil)
return
}
} }
err = model.DB.Create(inviteRecordFirst).Error } else {
if err != nil { user = model.User{
logger.Error("create user invite record err:", err) WxOpenID: resp.OpenID,
} WxUnionID: resp.UnionID,
LastLoginAt: nowTime,
inviteRecord := &model.UserInviteRecord{ MemberLevel: 1,
ToUid: user.Uid, //Notify: common.Yes,
FromUid: req.InviteUid,
Action: 1, // 1-未激活
SpendType: 1, // 未开通
MemberLevel: 0, // 未开通会员
First: 0,
Scan: 1,
ActionTime: nowTime,
}
err = model.DB.Create(inviteRecord).Error
if err != nil {
logger.Error("create user invite record err:", err)
} }
user.Uid = createUid() // 新建uid
inviteUser := model.GetUserByUid(req.InviteUid) inviteUser := model.GetUserByUid(req.InviteUid)
user.StoreId = inviteUser.StoreId
user.UserType = model.UserTypeConsumer
user.CooperativeBusinessId = inviteUser.CooperativeBusinessId
user.CooperativeName = inviteUser.CooperativeName
invite := &model.UserInvite{ var eg errgroup.Group
FromUid: req.InviteUid, if req.InviteUid != 0 && inviteUser.UserType == 2 { // 如果入参有邀请人id并且是店员则新增2条邀请记录
UserType: inviteUser.UserType, inviteRecordFirst := &model.UserInviteRecord{
StoreId: inviteUser.StoreId, ToUid: user.Uid,
MemberType: model.MemberTypeConsumer, FromUid: req.InviteUid,
ToUid: user.Uid, Action: 2, // 激活邀请
MemberStatus: 1, // 1-未开通 SpendType: 1, // 未开通
Action: 1, // 1-未激活 MemberLevel: 0, // 未开通会员
SpendType: 1, // 未开通 First: 1, // 首次邀请
UserInviteRecordId: inviteRecord.ID, Scan: 1,
Scan: 1, ActionTime: nowTime,
}
err = model.DB.Create(inviteRecordFirst).Error
if err != nil {
logger.Error("create user invite record err:", err)
}
inviteRecord := &model.UserInviteRecord{
ToUid: user.Uid,
FromUid: req.InviteUid,
Action: 1, // 1-未激活
SpendType: 1, // 未开通
MemberLevel: 0, // 未开通会员
First: 0,
Scan: 1,
ActionTime: nowTime,
}
err = model.DB.Create(inviteRecord).Error
if err != nil {
logger.Error("create user invite record err:", err)
}
inviteUser := model.GetUserByUid(req.InviteUid)
user.StoreId = inviteUser.StoreId
user.UserType = model.UserTypeConsumer
user.CooperativeBusinessId = inviteUser.CooperativeBusinessId
user.CooperativeName = inviteUser.CooperativeName
invite := &model.UserInvite{
FromUid: req.InviteUid,
UserType: inviteUser.UserType,
StoreId: inviteUser.StoreId,
MemberType: model.MemberTypeConsumer,
ToUid: user.Uid,
MemberStatus: 1, // 1-未开通
Action: 1, // 1-未激活
SpendType: 1, // 未开通
UserInviteRecordId: inviteRecord.ID,
Scan: 1,
}
eg.Go(func() error {
if err := invite.Create(model.DB); err != nil {
logger.Error(err)
RespJson(c, status.InternalServerError, nil)
return err
}
return nil
})
} }
fmt.Println("新用户:", user.WxOpenID)
eg.Go(func() error { eg.Go(func() error {
if err := invite.Create(model.DB); err != nil { if err := user.Create(model.DB); err != nil {
logger.Error(err) logger.Error(err)
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)
return err return err
} }
return nil return nil
}) })
} err := eg.Wait()
if err != nil {
fmt.Println("新用户:", user.WxOpenID)
eg.Go(func() error {
if err := user.Create(model.DB); err != nil {
logger.Error(err) logger.Error(err)
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)
return err return
} }
return nil
})
err := eg.Wait()
if err != nil {
logger.Error(err)
RespJson(c, status.InternalServerError, nil)
return
} }
newAccessToken, err := auth.CreateAccessToken(user.Uid) newAccessToken, err := auth.CreateAccessToken(user.Uid)
@ -405,6 +447,13 @@ func UserInfoUpload(c *gin.Context) {
RespOK(c, nil) RespOK(c, nil)
} }
// UserData 获取用户数据
// @Summary 获取用户数据
// @Tags 用户信息
// @Produce json
// @Accept json
// @Success 200 {object} model.User
// @Router /api/v1/user/data [post]
func UserData(c *gin.Context) { func UserData(c *gin.Context) {
uc := auth.GetCurrentUser(c) uc := auth.GetCurrentUser(c)
if uc == nil { if uc == nil {
@ -418,6 +467,14 @@ func UserData(c *gin.Context) {
RespJson(c, status.Unauthorized, nil) RespJson(c, status.Unauthorized, nil)
return return
} }
var sysUser model.SysUser
if err := model.NewSysUserQuerySet(model.DB).UidEq(uc.Uid).One(&sysUser); err != nil && err != model.RecordNotFound {
logger.Error(err)
RespJson(c, status.Unauthorized, nil)
return
}
var userVm model.UserVm var userVm model.UserVm
err := model.NewUserVmQuerySet(model.DB).UidEq(uc.Uid).One(&userVm) err := model.NewUserVmQuerySet(model.DB).UidEq(uc.Uid).One(&userVm)
if err != nil && err != model.RecordNotFound { if err != nil && err != model.RecordNotFound {
@ -438,11 +495,26 @@ func UserData(c *gin.Context) {
} }
} }
m.UserVm = &userVm m.UserVm = &userVm
if sysUser.StoreData != "" {
sysUser.StoreList = deserializeStoreData(sysUser.StoreData)
}
m.StoreList = sysUser.StoreList
m.RoleId = uint32(sysUser.RoleId)
ret := m ret := m
RespOK(c, ret) RespOK(c, ret)
return return
} }
// 反序列化 StoreData
func deserializeStoreData(storeData string) []model.StoreInfo {
var StoreData []model.StoreInfo
if err := json.Unmarshal([]byte(storeData), &StoreData); err != nil {
// 可以根据实际情况处理反序列化失败的情况
logger.Println("反序列化 StoreData 失败:", err)
}
return StoreData
}
// 找一个可以用的Uid // 找一个可以用的Uid
func createUid() uint32 { func createUid() uint32 {
for { for {
@ -681,7 +753,7 @@ func UserCodeToCoupon(c *gin.Context) {
return return
} }
if !user.IsMember() { if !user.IsMember() { // 判断用户是否为会员
logger.Error("user is not member") logger.Error("user is not member")
RespJson(c, status.UserNotMember, nil) RespJson(c, status.UserNotMember, nil)
return return
@ -706,7 +778,6 @@ func UserCodeToCoupon(c *gin.Context) {
exist, err := model.QueryRecordExist(fmt.Sprintf( exist, err := model.QueryRecordExist(fmt.Sprintf(
"SELECT * FROM user_coupon WHERE uid=%d AND approach=1 AND activity_id=1 AND state=1 AND promotional_sales=%d ", "SELECT * FROM user_coupon WHERE uid=%d AND approach=1 AND activity_id=1 AND state=1 AND promotional_sales=%d ",
uc.Uid, shopperPromotionCode.Uid)) uc.Uid, shopperPromotionCode.Uid))
if err != nil { if err != nil {
logger.Error("exist err:", err) logger.Error("exist err:", err)
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)

View File

@ -1001,7 +1001,7 @@ func UserAttendance(c *gin.Context) {
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)
return return
} }
err = record.Add(model.VmEventAttendance, "签到获积分") err = record.Add(model.VmEventAttendance, "签到获积分")
if err != nil { if err != nil {
logger.Error("add user attendance record err:", err) logger.Error("add user attendance record err:", err)
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)
@ -1021,7 +1021,7 @@ func UserAttendance(c *gin.Context) {
} }
if attendanceRecord.AttendanceDate == "" || if attendanceRecord.AttendanceDate == "" ||
attendanceRecord.AttendanceDate != utils.TodayZeroAddDaysDateFormat(-1) { attendanceRecord.AttendanceDate != utils.TodayZeroAddDaysDateFormat(-1) {
err = record.Add(model.VmEventAttendance, "签到获积分") err = record.Add(model.VmEventAttendance, "签到获积分")
if err != nil { if err != nil {
logger.Error("add user attendance record err:", err) logger.Error("add user attendance record err:", err)
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)
@ -1047,7 +1047,7 @@ func UserAttendance(c *gin.Context) {
} }
record.Vm = configInfo.Vm(userAttendance.ConsecutiveDays) record.Vm = configInfo.Vm(userAttendance.ConsecutiveDays)
err = record.Add(model.VmEventAttendance, "签到获积分") err = record.Add(model.VmEventAttendance, "签到获积分")
if err != nil { if err != nil {
logger.Error("add user attendance record err:", err) logger.Error("add user attendance record err:", err)
RespJson(c, status.InternalServerError, nil) RespJson(c, status.InternalServerError, nil)

11
go.mod
View File

@ -6,14 +6,13 @@ require (
github.com/aliyun/aliyun-sts-go-sdk v0.0.0-20171106034748-98d3903a2309 github.com/aliyun/aliyun-sts-go-sdk v0.0.0-20171106034748-98d3903a2309
github.com/codinl/go-logger v1.0.0 github.com/codinl/go-logger v1.0.0
github.com/dgrijalva/jwt-go v3.2.0+incompatible 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/fsnotify/fsnotify v1.4.9
github.com/gin-gonic/gin v1.7.1 github.com/gin-gonic/gin v1.7.1
github.com/holdno/snowFlakeByGo v0.0.0-20180510033652-d23f8a8cadd7 github.com/holdno/snowFlakeByGo v0.0.0-20180510033652-d23f8a8cadd7
github.com/jinzhu/gorm v1.9.16 github.com/jinzhu/gorm v1.9.16
github.com/jinzhu/now v1.1.4 // indirect github.com/jinzhu/now v1.1.4 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/medivhzhan/weapp v1.5.1 github.com/medivhzhan/weapp v1.5.1
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
github.com/pkg/errors v0.9.1 github.com/pkg/errors v0.9.1
github.com/qiniu/api.v7 v7.2.5+incompatible github.com/qiniu/api.v7 v7.2.5+incompatible
github.com/qiniu/x v7.0.8+incompatible // indirect github.com/qiniu/x v7.0.8+incompatible // indirect
@ -21,11 +20,11 @@ require (
github.com/satori/go.uuid v1.2.0 // indirect github.com/satori/go.uuid v1.2.0 // indirect
github.com/spf13/cobra v1.1.3 github.com/spf13/cobra v1.1.3
github.com/spf13/viper v1.7.1 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/wechatpay-apiv3/wechatpay-go v0.2.6
github.com/xuri/excelize/v2 v2.6.0 github.com/xuri/excelize/v2 v2.6.0
golang.org/x/net v0.8.0 // indirect golang.org/x/sync v0.6.0
golang.org/x/sync v0.1.0 golang.org/x/tools v0.19.0 // indirect
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect
gopkg.in/yaml.v3 v3.0.0 // indirect
qiniupkg.com/x v7.0.8+incompatible // indirect qiniupkg.com/x v7.0.8+incompatible // indirect
) )

81
go.sum
View File

@ -14,8 +14,14 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/agiledragon/gomonkey v2.0.2+incompatible h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw= github.com/agiledragon/gomonkey v2.0.2+incompatible h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw=
github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw= github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
@ -40,6 +46,7 @@ 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 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/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/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/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/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= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@ -53,6 +60,8 @@ 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 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= 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/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.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 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
@ -65,6 +74,16 @@ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs=
github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns=
github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M=
github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM=
github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
@ -141,6 +160,8 @@ github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/
github.com/jinzhu/now v1.1.4 h1:tHnRBy1i5F2Dh8BAFxqFzxKqqvezXrL2OW1TnX+Mlas= github.com/jinzhu/now v1.1.4 h1:tHnRBy1i5F2Dh8BAFxqFzxKqqvezXrL2OW1TnX+Mlas=
github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
@ -163,6 +184,10 @@ github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA=
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
@ -258,15 +283,19 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
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/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 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= 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 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= 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 h1:iWXgJ7nt8vTMU/MYYdZa6yklC8r4qdAJu+CKnRe0Bo0=
github.com/wechatpay-apiv3/wechatpay-go v0.2.6/go.mod h1:W8ucVAOCKOii933cWROLaDLmRQ2cg/vHHVF4vGAVq9Q= 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= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
@ -294,8 +323,12 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 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-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-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 h1:iU7T1X1J6yxDr0rda54sWGkHgOp5XJrqm79gcNlC2VM=
golang.org/x/crypto v0.0.0-20220408190544-5352b0902921/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= 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/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 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-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@ -319,6 +352,11 @@ 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.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.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.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/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@ -338,12 +376,18 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 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-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-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-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-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.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.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= 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/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= 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-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@ -354,8 +398,10 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190423024810-112230192c58/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-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.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
golang.org/x/sync v0.1.0/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/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@ -375,18 +421,30 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-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-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-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.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.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
golang.org/x/sys v0.6.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/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 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.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.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= 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.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.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.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
@ -394,8 +452,11 @@ 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.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.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.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= 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/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 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/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= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@ -419,6 +480,10 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= 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.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.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/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@ -446,8 +511,9 @@ google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ij
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U=
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
@ -455,11 +521,13 @@ 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.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.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.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.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.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 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-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 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA=
gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 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-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@ -469,3 +537,4 @@ 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 h1:Ek0ZVi5IyaWUAFkJbPRiqlh34xDM4uoKw7KqdpankvU=
qiniupkg.com/x v7.0.8+incompatible/go.mod h1:6sLxR5IZ03vMaRAQAY/5MvzofeoBIjO4XE0Njv6V1ms= 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= 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

@ -63,74 +63,72 @@ import (
* } * }
*/ */
// 请求url --正式地址
//请求url --正式地址
const Url string = "https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx" const Url string = "https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx"
//用户ID快递鸟提供注意保管不要泄漏
const EBusinessID string = "1237100"//即用户ID登录快递鸟官网会员中心获取 https://www.kdniao.com/UserCenter/v4/UserHome.aspx
//API key快递鸟提供注意保管不要泄漏
const ApiKey string = "56da2cf8-c8a2-44b2-b6fa-476cd7d1ba17"//即API key登录快递鸟官网会员中心获取 https://www.kdniao.com/UserCenter/v4/UserHome.aspx
// 用户ID快递鸟提供注意保管不要泄漏
const EBusinessID string = "1237100" //即用户ID登录快递鸟官网会员中心获取 https://www.kdniao.com/UserCenter/v4/UserHome.aspx
// API key快递鸟提供注意保管不要泄漏
const ApiKey string = "56da2cf8-c8a2-44b2-b6fa-476cd7d1ba17" //即API key登录快递鸟官网会员中心获取 https://www.kdniao.com/UserCenter/v4/UserHome.aspx
func main(){ func main() {
getResult() getResult()
} }
func getResult(){ func getResult() {
//以form表单形式提交post请求post请求体中包含了应用级参数和系统级参数 //以form表单形式提交post请求post请求体中包含了应用级参数和系统级参数
result:=post(Url,getParams()) result := post(Url, getParams())
fmt.Println(result) fmt.Println(result)
}//输出结果 } //输出结果
func getParams()(v map[string]string) { func getParams() (v map[string]string) {
//请求接口指令 //请求接口指令
const RequestType string = "1002" //免费即时查询接口指令1002/在途监控即时查询接口指令8001/地图版即时查询接口指令8003 const RequestType string = "1002" //免费即时查询接口指令1002/在途监控即时查询接口指令8001/地图版即时查询接口指令8003
// 组装应用级参数 // 组装应用级参数
const RequestData string = "{"+ const RequestData string = "{" +
"'CustomerName': '',"+ "'CustomerName': ''," +
"'OrderCode': '',"+ "'OrderCode': ''," +
"'ShipperCode': 'YTO',"+ "'ShipperCode': 'YTO'," +
"'LogisticCode': 'YT00003618100',"+ "'LogisticCode': 'YT00003618100'," +
"}" "}"
var DataSign string = getSign(RequestData) var DataSign string = getSign(RequestData)
// 组装系统级参数 // 组装系统级参数
v = map[string]string{ v = map[string]string{
"RequestType": RequestType, "RequestType": RequestType,
"EBusinessID": EBusinessID, "EBusinessID": EBusinessID,
"DataType": "2", "DataType": "2",
"RequestData":RequestData, "RequestData": RequestData,
"DataSign":DataSign, "DataSign": DataSign,
} }
return v return v
} }
func base64Encode(src []byte) []byte { func base64Encode(src []byte) []byte {
return []byte(base64.StdEncoding.EncodeToString(src)) return []byte(base64.StdEncoding.EncodeToString(src))
} }
func getSign(n string)(data string){ func getSign(n string) (data string) {
str := n + ApiKey str := n + ApiKey
w := md5.New() w := md5.New()
io.WriteString(w, str) io.WriteString(w, str)
md5str := fmt.Sprintf("%x", w.Sum(nil)) md5str := fmt.Sprintf("%x", w.Sum(nil))
debyte := base64Encode([]byte(md5str)) debyte := base64Encode([]byte(md5str))
data = fmt.Sprintf("%s", debyte) data = fmt.Sprintf("%s", debyte)
return data return data
} //签名 } //签名
func post(url string, params map[string]string) string { func post(url string, params map[string]string) string {
var values []string var values []string
for k, v := range params { for k, v := range params {
values = append(values, fmt.Sprintf("%s=%s", k, v)) values = append(values, fmt.Sprintf("%s=%s", k, v))
} }
resp, err := http.Post(url, "application/x-www-form-urlencoded", strings.NewReader(strings.Join(values, "&"))) resp, err := http.Post(url, "application/x-www-form-urlencoded", strings.NewReader(strings.Join(values, "&")))
if err != nil || resp.StatusCode != 200 { if err != nil || resp.StatusCode != 200 {
fmt.Println(err.Error()) fmt.Println(err.Error())
} }
contentBytes, err := ioutil.ReadAll(resp.Body) contentBytes, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
fmt.Println(err.Error()) fmt.Println(err.Error())
} }
return string(contentBytes) return string(contentBytes)
} }

View File

@ -5,9 +5,4 @@ import "testing"
func TestKdApi(t *testing.T) { func TestKdApi(t *testing.T) {
//getResult() //getResult()
} }

View File

@ -20,5 +20,5 @@ func TestExpressInfo(t *testing.T) {
//fmt.Println("paramJson:", string(paramJson)) //fmt.Println("paramJson:", string(paramJson))
//ExpressInfo("zhongtong","73155364431352") //ExpressInfo("zhongtong","73155364431352")
ExpressInfo("emsbg","9868015085913") ExpressInfo("emsbg", "9868015085913")
} }

View File

@ -62,4 +62,4 @@ func TestHmJsPayUnifiedOrder(t *testing.T) {
func TestHmRefundTransaction(t *testing.T) { func TestHmRefundTransaction(t *testing.T) {
} }

View File

@ -2357,6 +2357,10 @@ func (qs StoreQuerySet) IsOnlineEq(isOnline uint32) StoreQuerySet {
return qs.w(qs.db.Where("is_online = ?", isOnline)) return qs.w(qs.db.Where("is_online = ?", isOnline))
} }
func (qs StoreQuerySet) IsMemberServiceEq(memberService uint32) StoreQuerySet {
return qs.w(qs.db.Where("member_service = ?", memberService))
}
// IsOnlineGt is an autogenerated method // IsOnlineGt is an autogenerated method
// nolint: dupl // nolint: dupl
func (qs StoreQuerySet) IsOnlineGt(isOnline uint32) StoreQuerySet { func (qs StoreQuerySet) IsOnlineGt(isOnline uint32) StoreQuerySet {

View File

@ -0,0 +1,35 @@
//go:generate gormgen -structs SysUser -input .
package model
import (
"github.com/jinzhu/gorm"
)
// SysUserQuerySet is an queryset type for SysUser
type SysUserQuerySet struct {
db *gorm.DB
}
// NewSysUserQuerySet constructs new UserQuerySet
func NewSysUserQuerySet(db *gorm.DB) SysUserQuerySet {
return SysUserQuerySet{
db: db.Model(&SysUser{}),
}
}
func (qs SysUserQuerySet) w(db *gorm.DB) SysUserQuerySet {
return NewSysUserQuerySet(db)
}
// UidEq is an autogenerated method
// nolint: dupl
func (qs SysUserQuerySet) UidEq(uid uint32) SysUserQuerySet {
return qs.w(qs.db.Where("uid = ?", uid))
}
// One is used to retrieve one result. It returns gorm.ErrRecordNotFound
// if nothing was fetched
func (qs SysUserQuerySet) One(ret *SysUser) error {
return qs.db.Where("deleted_at IS NULL").Order("user_id DESC").Limit(1).Find(ret).Error
}

View File

@ -88,7 +88,6 @@ func initCreateTable() {
} }
// 测试服务器 // 测试服务器
//func InitDBTest() { //func InitDBTest() {
// var err error // var err error
@ -134,4 +133,4 @@ func initCreateTable() {
// fmt.Println("DB init success") // fmt.Println("DB init success")
// DB = db // DB = db
// logger.Info("ok") // logger.Info("ok")
//} //}

View File

@ -19,6 +19,8 @@ const (
// gen:qs // gen:qs
// //
// 会员优惠券类型
//
//go:generate goqueryset -in coupon.go //go:generate goqueryset -in coupon.go
type Coupon struct { type Coupon struct {
Model Model
@ -38,24 +40,25 @@ type Coupon struct {
} }
// gen:qs // gen:qs
// 用户优惠券
type UserCoupon struct { type UserCoupon struct {
Model Model
Uid uint32 `json:"uid" gorm:"index"` Uid uint32 `json:"uid" gorm:"index"`
CouponId uint32 `json:"coupon_id" gorm:"index"` CouponId uint32 `json:"coupon_id" gorm:"index"` // 优惠券id1-50抵扣券续费黄金2-100抵扣券续费白金3-200抵扣券续费黑金4-5元5-运费抵扣券(包邮券)
CouponType string `json:"coupon_type"` CouponType string `json:"coupon_type"` //
ActivityType uint32 `json:"activity_type"` // 活动类型 1-会员续费 2-关注公众号 3-运费包 ActivityType uint32 `json:"activity_type"` // 活动类型 1-会员续费 2-关注公众号 3-运费包
ActivityId uint32 `json:"activity_id" gorm:"index"` ActivityId uint32 `json:"activity_id" gorm:"index"` //
Value uint32 `json:"value"` Value uint32 `json:"value"` //
State uint32 `json:"state"` // 1-未使用 2-已使用 3-已过期 State uint32 `json:"state"` // 1-未使用 2-已使用 3-已过期
ActiveStart time.Time `json:"active_start"` // 有效期开始 ActiveStart time.Time `json:"active_start"` // 有效期开始
ActiveEnd time.Time `json:"active_end"` // 有效期结束 零值永不结束 ActiveEnd time.Time `json:"active_end"` // 有效期结束 零值永不结束
UseTime time.Time `json:"use_time"` // UseTime time.Time `json:"use_time"` //
MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-会员 MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-会员
Approach uint32 `json:"approach"` // 获取途径:1-通过店员兑换码获取 Approach uint32 `json:"approach"` // 获取途径:1-通过店员兑换码获取
PromotionalSales uint32 `json:"promotional_sales"` // 推广人员用户id PromotionalSales uint32 `json:"promotional_sales"` // 推广人员用户id
RedeemCode string `json:"redeem_code"` RedeemCode string `json:"redeem_code"` //
Availability uint32 `json:"availability" gorm:"-"` // 1-不可用 2-可用 Availability uint32 `json:"availability" gorm:"-"` // 1-不可用 2-可用
Coupon *Coupon `json:"coupon" gorm:"-"` Coupon *Coupon `json:"coupon" gorm:"-"`
} }

View File

@ -6,8 +6,9 @@ import (
"time" "time"
) )
//go:generate goqueryset -in store.go
// gen:qs // gen:qs
//
//go:generate goqueryset -in store.go
type Store struct { type Store struct {
Model Model
@ -42,7 +43,7 @@ func GetStoreList(cardInfos []CardInfo) ([]GameCardStock, error) {
storesCh := make(chan *[]Store, 0) storesCh := make(chan *[]Store, 0)
eg.Go(func() error { eg.Go(func() error {
gameStore := make([]Store, 0) gameStore := make([]Store, 0)
err := NewStoreQuerySet(DB).IsOnlineEq(1).OrderDescByCreatedAt().All(&gameStore) err := NewStoreQuerySet(DB).IsOnlineEq(1).IsMemberServiceEq(1).OrderDescByCreatedAt().All(&gameStore)
if err != nil && err != RecordNotFound { if err != nil && err != RecordNotFound {
logger.Errorf("err:%+v", err) logger.Errorf("err:%+v", err)
return err return err

62
model/sys_user.go Normal file
View File

@ -0,0 +1,62 @@
package model
// gen:qs
//
//go:generate goqueryset -in sys_user.go
type SysUser struct {
SysUserId
LoginM
SysUserB
}
type SysUserId struct {
UserId int `gorm:"primary_key;AUTO_INCREMENT" json:"userId"` // 编码
}
type UserName struct {
Username string `gorm:"size:64" json:"username"` // 用户名
}
type PassWord struct {
Password string `gorm:"size:128" json:"password"` // 密码
}
type LoginM struct {
UserName
PassWord
}
type SysUserB struct {
NickName string `gorm:"size:128" json:"nickName"` // 昵称
Phone string `gorm:"size:11" json:"phone"` // 手机号
RoleId int `gorm:"" json:"roleId"` // 角色编码
Salt string `gorm:"size:255" json:"salt"` // 盐
Avatar string `gorm:"size:255" json:"avatar"` // 头像
Sex string `gorm:"size:255" json:"sex"` // 性别
Email string `gorm:"size:128" json:"email"` // 邮箱
DeptId int `gorm:"" json:"deptId"` // 部门编码
PostId int `gorm:"" json:"postId"` // 职位编码
CreateBy string `gorm:"size:128" json:"createBy"` //
UpdateBy string `gorm:"size:128" json:"updateBy"` //
Remark string `gorm:"size:255" json:"remark"` // 备注
Status string `gorm:"size:4;" json:"status"` // 状态
StoreId uint32 `json:"store_id"` // 门店id
StoreName string `json:"store_name"` // 门店名称
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"` // 合作商id
CooperativeName string `json:"cooperative_name"` // 合作商名称
AccountType uint32 `json:"account_type"` // 账号类型:1-管理端
StoreData string `gorm:"type:json" json:"store_data,omitempty"` // 有效门店
StoreList []StoreInfo `gorm:"-" json:"store_list"` // 有效门店列表
SalesCommRate float64 `json:"sales_comm_rate"` // 销售提成比例
Uid uint32 `json:"uid" gorm:"column:uid;unique_index"` // 用户uid todo 待添加
Model
DataScope string `gorm:"-" json:"dataScope"`
Params string `gorm:"-" json:"params"`
}
type StoreInfo struct {
StoreID int `json:"storeId"` //门店id
StoreName string `json:"storeName"` //门店名称
ExpireTime string `json:"expireTime"` //有效期
}

View File

@ -18,51 +18,58 @@ import (
type User struct { type User struct {
Model Model
Uid uint32 `json:"uid" gorm:"column:uid;unique_index"` Uid uint32 `json:"uid" gorm:"column:uid;unique_index"`
MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-黄金会员 4-白金会员 5-黑金会员 MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-黄金会员 4-白金会员 5-黑金会员
MemberGenre uint32 `json:"member_genre"` // 会员类型 MemberGenre uint32 `json:"member_genre"` // 会员类型
MemberExpire time.Time `json:"member_expire"` // 会员到期时间 MemberExpire time.Time `json:"member_expire"` // 会员到期时间
OpenMemberTime time.Time `json:"open_member_time"` // 开通会员 OpenMemberTime time.Time `json:"open_member_time"` // 开通会员
Bond uint32 `json:"bond"` // 保证金 Bond uint32 `json:"bond"` // 保证金
WxName string `json:"wx_name"` // 昵称 WxName string `json:"wx_name"` // 昵称
WxAvatar string `json:"wx_avatar"` // 头像 WxAvatar string `json:"wx_avatar"` // 头像
WxOpenID string `json:"wx_open_id"` // 微信openid WxOpenID string `json:"wx_open_id"` // 微信openid
AppOpenID string `json:"app_open_id"` // AppOpenID string `json:"app_open_id"` //
WxUnionID string `json:"wx_union_id"` // 微信uniodid WxUnionID string `json:"wx_union_id"` // 微信uniodid
Tel string `json:"tel"` // 电话 Tel string `json:"tel"` // 电话
Gender uint8 `json:"gender"` // 性别 Gender uint8 `json:"gender"` // 性别
City string `json:"city"` // 城市 City string `json:"city"` // 城市
Province string `json:"province"` // 省 Province string `json:"province"` // 省
Country string `json:"country"` // 市 Country string `json:"country"` // 市
Deposit uint32 `json:"deposit"` // 押金 Deposit uint32 `json:"deposit"` // 押金
UserType uint32 `json:"user_type"` // 用户类型: 1-普通用户 2-店员 UserType uint32 `json:"user_type"` // 用户类型: 1-普通用户 2-店员
XcxRoleId uint32 `json:"xcx_role_id"` // 角色id XcxRoleId uint32 `json:"xcx_role_id"` // 角色id
OpenMemberChannel string `json:"open_member_channel" ` // 开通会员渠道: -门店推广 -用户邀请 -兑换码 OpenMemberChannel string `json:"open_member_channel" ` // 开通会员渠道: -门店推广 -用户邀请 -兑换码
StoreId uint64 `json:"store_id"` // 门店id StoreId uint64 `json:"store_id"` // 门店id
InviteCodeUrl string `json:"invite_code_url"` // 分享二维码 InviteCodeUrl string `json:"invite_code_url"` // 分享二维码
LastLoginAt time.Time `json:"last_login_at"` // 最近登录时间 LastLoginAt time.Time `json:"last_login_at"` // 最近登录时间
IP string `json:"-" gorm:"type:varchar(60)"` // ip IP string `json:"-" gorm:"type:varchar(60)"` // ip
InBlack bool `json:"in_black"` // 是否在黑名单 InBlack bool `json:"in_black"` // 是否在黑名单
StoreType uint32 `json:"store_type"` // 1-订单门店 StoreType uint32 `json:"store_type"` // 1-订单门店
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"` // 合作商id CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"` // 合作商id
CooperativeName string `json:"cooperative_name"` // 合作商名称 CooperativeName string `json:"cooperative_name"` // 合作商名称
ShopAssistantName string `json:"shop_assistant_name"` // 店员名称 ShopAssistantName string `json:"shop_assistant_name"` // 店员名称
OpenMemberLevel uint32 `json:"open_member_level"` // 开通会员级别2-黄金会员 4-白金会员 5-黑金会员 OpenMemberLevel uint32 `json:"open_member_level"` // 开通会员级别2-黄金会员 4-白金会员 5-黑金会员
FirstRetailOrder time.Time `json:"first_retail_order"` // FirstRetailOrder time.Time `json:"first_retail_order"` //
Version uint32 `json:"-"` // Version uint32 `json:"-"` //
UserVm *UserVm `json:"user_vm" gorm:"-"` // UserVm *UserVm `json:"user_vm" gorm:"-"` //
InviteTime time.Time `json:"invite_time"` // InviteTime time.Time `json:"invite_time"` //
DepositType uint32 `json:"deposit_type"` // 押金类型: 3-未充值 DepositType uint32 `json:"deposit_type"` // 押金类型: 3-未充值
//RoleId uint32 `json:"role_id"` // 角色id StoreList []StoreInfo `gorm:"-" json:"store_list"` // 有效门店列表
RoleId uint32 `json:"role_id" gorm:"-"` // 角色id
//RenewalTime time.Time `json:"renewal_time"` //RenewalTime time.Time `json:"renewal_time"`
//RenewalMemberLevel uint32 `json:"renewal_member_level"` //RenewalMemberLevel uint32 `json:"renewal_member_level"`
//MemberLevelString string `json:"member_level_string" gorm:"-"` // 会员类型 //MemberLevelString string `json:"member_level_string" gorm:"-"` // 会员类型
} }
type AuthLoginReq struct { type AuthLoginReq struct {
Code string `json:"code" binding:"required"` // 小程序code码 Code string `json:"code" binding:"required"` // 小程序code码
InviteUid uint32 `json:"invite_uid"` // 邀请人用户ID InviteUid uint32 `json:"invite_uid"` // 邀请人用户ID
EncryptedData string `json:"encrypted_data" binding:"required"`
Iv string `json:"iv" binding:"required"`
//RawData string `json:"raw_data" binding:"required"`
//Signature string `json:"signature" binding:"required"`
//Tel string `json:"tel"` // 手机号
//WxName string `json:"wx_name"` // 昵称
//WxAvatar string `json:"wx_avatar"` // 头像
} }
type AuthLoginResp struct { type AuthLoginResp struct {
@ -228,6 +235,7 @@ type XcxRole struct {
} }
// gen:qs // gen:qs
// ShopperPromotionCode 店员优惠码
type ShopperPromotionCode struct { type ShopperPromotionCode struct {
Model Model
@ -272,11 +280,25 @@ func UserUpdate(user *User) error {
} }
if user.MemberLevel != 0 { if user.MemberLevel != 0 {
fields = append(fields, UserDBSchema.MemberLevel) fields = append(fields, UserDBSchema.MemberLevel)
}
if !user.MemberExpire.IsZero() {
fields = append(fields, UserDBSchema.MemberExpire) fields = append(fields, UserDBSchema.MemberExpire)
} }
if user.Deposit != 0 { if user.Deposit != 0 {
fields = append(fields, UserDBSchema.Deposit) fields = append(fields, UserDBSchema.Deposit)
} }
if user.WxOpenID != "" {
fields = append(fields, UserDBSchema.WxOpenID)
}
if user.WxUnionID != "" {
fields = append(fields, UserDBSchema.WxUnionID)
}
if !user.LastLoginAt.IsZero() {
fields = append(fields, UserDBSchema.LastLoginAt)
}
if !user.CreatedAt.IsZero() {
fields = append(fields, UserDBSchema.CreatedAt)
}
if len(fields) > 0 { if len(fields) > 0 {
err := user.Update(DB.Where(&User{Uid: user.Uid}), fields...) err := user.Update(DB.Where(&User{Uid: user.Uid}), fields...)

View File

@ -1,9 +1,9 @@
package router package router
import ( import (
"strings"
"mh-server/controller" "mh-server/controller"
"mh-server/lib/status" "mh-server/lib/status"
"strings"
"github.com/codinl/go-logger" "github.com/codinl/go-logger"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"