huangjiajun 2 月之前
父節點
當前提交
8d34873e3a
共有 45 個文件被更改,包括 1949 次插入4238 次删除
  1. +143
    -0
      app/agent/hdl/hdl_base.go
  2. +32
    -0
      app/agent/hdl/hdl_goods.go
  3. +20
    -0
      app/agent/hdl/hdl_login.go
  4. +1
    -0
      app/agent/hdl/hdl_order.go
  5. +45
    -0
      app/agent/hdl/hdl_service_file_upload.go
  6. +300
    -0
      app/agent/hdl/hdl_store.go
  7. +27
    -0
      app/agent/hdl/hdl_user.go
  8. +1
    -0
      app/agent/svc/svc_base.go
  9. +386
    -0
      app/agent/svc/svc_goods.go
  10. +43
    -0
      app/agent/svc/svc_login.go
  11. +1
    -0
      app/agent/svc/svc_order.go
  12. +1
    -0
      app/agent/svc/svc_store.go
  13. +51
    -0
      app/db/db_good.go
  14. +42
    -0
      app/db/db_good_cate.go
  15. +64
    -0
      app/db/db_order.go
  16. +32
    -0
      app/db/db_other_city_login_list.go
  17. +15
    -0
      app/db/db_sku.go
  18. +20
    -3
      app/db/db_store.go
  19. +25
    -0
      app/db/db_user.go
  20. +34
    -33
      app/db/model/community_team_order.go
  21. +23
    -16
      app/db/model/community_team_store.go
  22. +14
    -0
      app/db/model/other_city_login_list.go
  23. +9
    -0
      app/db/model/user_third_party.go
  24. +12
    -0
      app/hdl/hdl_store.go
  25. +1
    -0
      app/md/alipay.go
  26. +14
    -0
      app/md/amap.go
  27. +13
    -0
      app/md/login.go
  28. +23
    -0
      app/md/md_alipay.go
  29. +7
    -0
      app/md/md_api_response.go
  30. +35
    -0
      app/md/md_store.go
  31. +12
    -0
      app/md/md_wechat.go
  32. +35
    -0
      app/md/store_goods.go
  33. +40
    -0
      app/router/router.go
  34. +25
    -4
      app/svc/svc_alipay.go
  35. +69
    -0
      app/svc/svc_default_user.go
  36. +4
    -1
      app/svc/svc_goods.go
  37. +11
    -2
      app/svc/svc_order.go
  38. +11
    -0
      app/svc/svc_pay_community_team.go
  39. +51
    -0
      app/svc/svc_store.go
  40. +6
    -2
      app/svc/svc_store_order.go
  41. +86
    -1572
      docs/docs.go
  42. +79
    -1527
      docs/swagger.json
  43. +48
    -999
      docs/swagger.yaml
  44. +4
    -25
      go.mod
  45. +34
    -54
      go.sum

+ 143
- 0
app/agent/hdl/hdl_base.go 查看文件

@@ -0,0 +1,143 @@
package hdl

import (
"applet/app/cfg"
"applet/app/db"
"applet/app/db/model"
"applet/app/e"
"applet/app/md"
"applet/app/svc"
"applet/app/utils"
"github.com/gin-gonic/gin"
"github.com/jinzhu/copier"
"github.com/tidwall/gjson"
"io/ioutil"
)

// WechatBase 微信支付配置获取
// @Summary 基本配置-微信支付配置获取
// @Tags 基本配置
// @Description 基本配置-微信支付配置获取
// @Accept json
// @Produce json
// @Success 200 {object} md.WechatPay ""
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/communityTeam/agent/wechat/base [GET]
func WechatBase(c *gin.Context) {
user := svc.GetUser(c)
info, _ := db.UserThirdPartyFindByID(svc.MasterDb(c), user.Info.Uid)
var res = md.WechatPay{}
if info != nil {
res.PayWxApiKey = gjson.Get(info.WechatPayInfo, "pay_wx_api_key").String()
res.PayWxMchId = gjson.Get(info.WechatPayInfo, "pay_wx_mch_id").String()
}
e.OutSuc(c, res, nil)
return
}

// WechatBaseSet 微信支付配置保存
// @Summary 基本配置-微信支付配置保存
// @Tags 基本配置
// @Description 基本配置-微信支付配置保存
// @Accept json
// @Produce json
// @Param req body md.WechatPay true "请求参数"
// @Success 200 {string} ""
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/communityTeam/agent/wechat/base/set [POST]
func WechatBaseSet(c *gin.Context) {
var arg md.WechatPay
if err := c.ShouldBindJSON(&arg); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
user := svc.GetUser(c)
info, _ := db.UserThirdPartyFindByID(svc.MasterDb(c), user.Info.Uid)
if info == nil {
info = &model.UserThirdParty{
Uid: user.Info.Uid,
}
svc.MasterDb(c).Insert(info)
}
var data md.WechatPaySave
copier.Copy(&data, &arg)
data.WechatP12ApiclientCert = c.GetString("mid") + "_" + utils.IntToStr(user.Info.Uid) + "_wechat_apiclient_cert.p12"
info.WechatPayInfo = utils.SerializeStr(data)
svc.MasterDb(c).Where("uid=?", info.Uid).Cols("wechat_pay_info").Update(info)
e.OutSuc(c, "success", nil)
return
}

// AlipayBase 支付宝支付配置获取
// @Summary 基本配置-支付宝支付配置获取
// @Tags 基本配置
// @Description 基本配置-支付宝支付配置获取
// @Accept json
// @Produce json
// @Success 200 {object} md.AlipayPay ""
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/communityTeam/agent/alipay/base [GET]
func AlipayBase(c *gin.Context) {
user := svc.GetUser(c)
info, _ := db.UserThirdPartyFindByID(svc.MasterDb(c), user.Info.Uid)
var res = md.AlipayPay{}
if info != nil {
res.PayAliNewAppId = gjson.Get(info.WechatPayInfo, "pay_ali_new_app_id").String()
res.PayAliNewPrivateKey = gjson.Get(info.WechatPayInfo, "pay_ali_new_private_key").String()
}
e.OutSuc(c, res, nil)
return
}

// AlipayBaseSet 微信支付配置保存
// @Summary 基本配置-微信支付配置保存
// @Tags 基本配置
// @Description 基本配置-微信支付配置保存
// @Accept json
// @Produce json
// @Param req body md.AlipayPay true "请求参数"
// @Success 200 {string} ""
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/communityTeam/agent/alipay/base/set [POST]
func AlipayBaseSet(c *gin.Context) {
var arg md.AlipayPay
if err := c.ShouldBindJSON(&arg); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
user := svc.GetUser(c)
info, _ := db.UserThirdPartyFindByID(svc.MasterDb(c), user.Info.Uid)
if info == nil {
info = &model.UserThirdParty{
Uid: user.Info.Uid,
}
svc.MasterDb(c).Insert(info)
}
var data md.AlipayPaySet
copier.Copy(&data, &arg)
data.PayAliUseType = "1"
data.PayAppCertSn = c.GetString("mid") + "_" + utils.IntToStr(user.Info.Uid) + "_payAliNewAppCertSn.crt"
data.PayAlipayRootCertSn = c.GetString("mid") + "_" + utils.IntToStr(user.Info.Uid) + "_payAliNewAlipayRootCertSn.crt"
data.PayAlipayrsaPublicKey = c.GetString("mid") + "_" + utils.IntToStr(user.Info.Uid) + "_payAliNewAlipayrsaPublicKey.crt"

path := "./static/"
if cfg.Prd {
path = "/etc/zyos-admin/wx_check_file/"
}
PayAliNewAppCertSn, _ := ioutil.ReadFile(path + data.PayAppCertSn) // 读取文件内容
if string(PayAliNewAppCertSn) != "" {
data.PayAliNewAppCertSn = string(PayAliNewAppCertSn)
}
PayAlipayRootCertSn, _ := ioutil.ReadFile(path + data.PayAlipayRootCertSn) // 读取文件内容
if string(PayAlipayRootCertSn) != "" {
data.PayAliNewAlipayRootCertSn = string(PayAlipayRootCertSn)
}
PayAlipayrsaPublicKey, _ := ioutil.ReadFile(path + data.PayAlipayrsaPublicKey) // 读取文件内容
if string(PayAlipayrsaPublicKey) != "" {
data.PayAliNewAlipayrsaPublicKey = string(PayAlipayrsaPublicKey)
}
info.AlipayPayInfo = utils.SerializeStr(data)
svc.MasterDb(c).Where("uid=?", info.Uid).Cols("alipay_pay_info").Update(info)
e.OutSuc(c, "success", nil)
return
}

+ 32
- 0
app/agent/hdl/hdl_goods.go 查看文件

@@ -0,0 +1,32 @@
package hdl

import (
"applet/app/agent/svc"
"github.com/gin-gonic/gin"
)

func GoodsCate(c *gin.Context) {
svc.GoodsCate(c)
}
func GoodsCateSave(c *gin.Context) {
svc.GoodsCateSave(c)
}
func GoodsCateShow(c *gin.Context) {
svc.GoodsCateShow(c)
}
func GoodsCateDel(c *gin.Context) {
svc.GoodsCateDel(c)
}

func Goods(c *gin.Context) {
svc.Goods(c)
}
func GoodsSave(c *gin.Context) {
svc.GoodsSave(c)
}
func GoodsDel(c *gin.Context) {
svc.GoodsDel(c)
}
func GoodsDetail(c *gin.Context) {
svc.GoodsDetail(c)
}

+ 20
- 0
app/agent/hdl/hdl_login.go 查看文件

@@ -0,0 +1,20 @@
package hdl

import (
"applet/app/agent/svc"
"github.com/gin-gonic/gin"
)

// Login 登陆
// @Summary 登陆
// @Tags 登陆
// @Description 登入
// @Accept json
// @Produce json
// @Param req body md.FastLoginRequestBody true "请求参数"
// @Success 200 {object} md.LoginResponse ""
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/communityTeam/agent/login [post]
func Login(c *gin.Context) {
svc.Login(c)
}

+ 1
- 0
app/agent/hdl/hdl_order.go 查看文件

@@ -0,0 +1 @@
package hdl

+ 45
- 0
app/agent/hdl/hdl_service_file_upload.go 查看文件

@@ -0,0 +1,45 @@
package hdl

import (
"applet/app/cfg"
"applet/app/e"
"applet/app/svc"
"applet/app/utils"
"fmt"
"github.com/gin-gonic/gin"
"net/http"
"strings"
)

// ServiceFileUpload 上传文件
// @Summary 基本配置-上传文件
// @Tags 基本配置
// @Description 基本配置-上传文件
// @Accept json
// @Produce json
// @Param req body true "请求参数 表单提交 file文件流 type类型 微信p12文件-wechat_apiclient_cert 支付宝应用公钥证书 payAliNewAppCertSn 支付宝公钥证书 payAliNewAlipayrsaPublicKey 支付宝根证书 payAliNewAlipayRootCertSn"
// @Success 200 {string} ""
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/communityTeam/agent/service/file/upload [POST]

func ServiceFileUpload(c *gin.Context) {
// 单文件上传
file, err := c.FormFile("file")
if err != nil {
c.String(http.StatusBadRequest, fmt.Sprintf("upload error: %s", err.Error()))
return
}
user := svc.GetUser(c)
ext := strings.Split(file.Filename, ".")
newName := c.GetString("mid") + "_" + utils.IntToStr(user.Info.Uid) + "_" + c.PostForm("type") + "." + ext[1]
path := "./static/"
if cfg.Prd {
path = "/etc/zyos-admin/wx_check_file/"
}
if err := c.SaveUploadedFile(file, path+newName); err != nil {
e.OutErr(c, 400, err.Error())
return
}
e.OutSuc(c, "success", nil)
return
}

+ 300
- 0
app/agent/hdl/hdl_store.go 查看文件

@@ -0,0 +1,300 @@
package hdl

import (
"applet/app/db"
"applet/app/db/model"
"applet/app/e"
"applet/app/md"
"applet/app/svc"
"applet/app/utils"
"encoding/json"
"github.com/gin-gonic/gin"
"time"
)

// UserStoreList 门店列表
// @Summary 门店-列表
// @Tags 门店
// @Description 门店-列表
// @Accept json
// @Produce json
// @Param req body md.Store true "请求参数"
// @Success 200 {string} ""
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/communityTeam/agent/store/list [POST]
func UserStoreList(c *gin.Context) {
var arg md.Store
if err := c.ShouldBindJSON(&arg); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
user := svc.GetUser(c)
list, count := db.GetUserList(svc.MasterDb(c), arg, user.Info.Uid)
data := make([]map[string]interface{}, 0)
if list != nil {
currentMonth := utils.GetTimeRange("current_month")
for _, v := range *list {
store := v.CommunityTeamStore
tmp := map[string]interface{}{
"uid": utils.IntToStr(v.User.Uid),
"create_at": store.CreateAt.Format("2006-01-02 15:04:05"),
"name": "",
"address": "",
"logo": "",
"order_count": "0",
"order_amount": "0",
"agent_commission": "0",
"platform_commission": "0",
"base_commission": "0",
"work_state": "",
}
count1, _ := svc.MasterDb(c).Where("store_uid=? and parent_uid=?", v.User.Uid, user.Info.Uid).In("state", []string{"1", "2"}).Count(&model.CommunityTeamOrder{})
sum, _ := svc.MasterDb(c).Where("store_uid=? and parent_uid=? and create_at>=?", v.User.Uid, user.Info.Uid, time.Unix(currentMonth["start"], 0).Format("2006-01-02 15:04:05")).In("state", []string{"1", "2"}).Sum(&model.CommunityTeamOrder{}, "amount")
tmp["order_count"] = utils.Int64ToStr(count1)
tmp["order_amount"] = svc.GetCommissionPrec(c, utils.Float64ToStr(sum), "2", "")
tmp["name"] = store.Name
tmp["address"] = store.Address
tmp["logo"] = store.Logo
tmp["work_state"] = "营业中"
if store.WorkState == 1 {
tmp["work_state"] = "休息中"
}
tmp["agent_commission"] = store.AgentCommission
data = append(data, tmp)
}
}
res := map[string]interface{}{
"total": count,
"list": data,
}
e.OutSuc(c, res, nil)
}

// UserStoreSave 门店编辑
// @Summary 门店-门店编辑
// @Tags 门店
// @Description 门店-门店编辑
// @Accept json
// @Produce json
// @Param req body md.StoreSave true "请求参数"
// @Success 200 {string} ""
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/communityTeam/agent/store/save [POST]
func UserStoreSave(c *gin.Context) {
var arg md.StoreSave
if err := c.ShouldBindJSON(&arg); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
store := db.GetUserStore(svc.MasterDb(c), utils.StrToInt(arg.Uid))
if store == nil {
e.OutErr(c, 400, e.NewErr(400, "门店不存在"))
return
}
store.AgentCommission = arg.AgentCommission
svc.MasterDb(c).Where("id=?", store.Id).Cols("agent_commission").Update(store)
e.OutSuc(c, "success", nil)
return
}

// UserStoreOrder 门店订单-订单管理共用一个
// @Summary 门店-门店订单
// @Tags 门店
// @Description 门店-门店订单
// @Accept json
// @Produce json
// @Param req body md.StoreOrder true "请求参数"
// @Success 200 {string} ""
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/communityTeam/agent/store/order [POST]
func UserStoreOrder(c *gin.Context) {
var arg md.StoreOrder
if err := c.ShouldBindJSON(&arg); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
user := svc.GetUser(c)
data, total, _ := db.GetStoreOrderList(svc.MasterDb(c), arg, user.Info.Uid)
list := make([]map[string]string, 0)
if data != nil {
stateList := []string{"待付款", "已支付", "已提货", "已取消"}
for _, v := range *data {
tmp := map[string]string{
"oid": utils.Int64ToStr(v.Oid),
"uid": utils.IntToStr(v.Uid),
"phone": "",
"nickname": "",
"store_name": "",
"state_str": stateList[v.State],
"amount": v.Amount,
"agent_commission": v.AgentCommission,
"state": utils.IntToStr(v.State),
"create_at": v.CreateAt.Format("2006-01-02 15:04:05"),
"confirm_at": utils.Int64ToStr(v.Oid),
}
if v.ConfirmAt.IsZero() == false {
tmp["confirm_at"] = v.ConfirmAt.Format("2006-01-02 15:04:05")
}
user1, _ := db.UserFindByID(svc.MasterDb(c), v.Uid)
if user1 != nil {
tmp["phone"] = user1.Phone
tmp["nickname"] = user1.Nickname
}
store := db.GetUserStore(svc.MasterDb(c), v.StoreUid)
if store != nil {
tmp["store_name"] = store.Name
}
list = append(list, tmp)
}
}
res := map[string]interface{}{
"total": total,
"state": []map[string]string{
{"name": "待付款", "value": "0"},
{"name": "已支付", "value": "1"},
{"name": "已提货", "value": "2"},
{"name": "已取消", "value": "3"},
},
"list": list,
}
e.OutSuc(c, res, nil)
}

// UserStoreOrderDetail 门店订单详情-订单管理共用一个
// @Summary 门店-门店订单详情
// @Tags 门店
// @Description 门店-门店订单详情
// @Accept json
// @Produce json
// @Param req body md.StoreOrderDetail true "请求参数"
// @Success 200 {string} ""
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/communityTeam/agent/store/order/detail [POST]
func UserStoreOrderDetail(c *gin.Context) {
var arg md.StoreOrderDetail
if err := c.ShouldBindJSON(&arg); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
order := db.GetOrderByOid(svc.MasterDb(c), arg.Oid)
if order == nil {
e.OutErr(c, 400, e.NewErr(400, "订单不存在"))
return
}
stateList := []string{"待付款", "已支付", "已提货", "已取消"}
payMethodStr := []string{"余额支付", "支付宝支付", "微信支付"}
orderInfoMap := make([]map[string]string, 0)
res := map[string]interface{}{
"oid": utils.Int64ToStr(order.Oid),
"uid": utils.IntToStr(order.Uid),
"phone": order.Phone,
"nickname": "",
"store_name": "",
"memo": order.Memo,
"coupon": order.Coupon,
"code": order.Code,
"amount": order.Amount,
"all_amount": utils.Float64ToStr(utils.StrToFloat64(order.Amount) + utils.StrToFloat64(order.Coupon)),
"pay_method_str": payMethodStr[order.PayMethod],
"state_str": stateList[order.State],
"state": utils.IntToStr(order.State),
"create_at": order.CreateAt.Format("2006-01-02 15:04:05"),
"confirm_at": "",
"pay_at": "",
"order_info": orderInfoMap,
}
if order.ConfirmAt.IsZero() == false {
res["confirm_at"] = order.ConfirmAt.Format("2006-01-02 15:04:05")
} else {
res["confirm_at"] = order.Timer
if order.IsNow == 1 {
res["confirm_at"] = "立即提货"
}
}
if order.PayAt.IsZero() == false {
res["pay_at"] = order.PayAt.Format("2006-01-02 15:04:05")
}

user, _ := db.UserFindByID(svc.MasterDb(c), order.Uid)
if user != nil {
res["nickname"] = user.Nickname
if order.Phone == "" {
res["phone"] = user.Phone
}
}
store := db.GetUserStore(svc.MasterDb(c), order.StoreUid)
if store != nil {
res["store_name"] = store.Name
}
orderInfo := db.GetOrderInfoAllEg(svc.MasterDb(c), arg.Oid)
if orderInfo != nil {
for _, v := range *orderInfo {
skuData := make([]md.Sku, 0)
json.Unmarshal([]byte(v.SkuInfo), &skuData)
skuStr := ""
for _, v1 := range skuData {
if skuStr != "" {
skuStr += ";"
}
skuStr += v1.Value
}
tmp := map[string]string{
"sku_str": skuStr,
"goods_title": v.Title,
"goods_img": v.Img,
"num": utils.IntToStr(v.Num),
"amount": utils.Float64ToStr(float64(v.Num) * utils.StrToFloat64(v.Price)),
}
orderInfoMap = append(orderInfoMap, tmp)
}
res["order_info"] = orderInfoMap
}

e.OutSuc(c, res, nil)
return
}

// UserStoreTotal 销售额统计
// @Summary 门店-销售额统计
// @Tags 门店
// @Description 门店-销售额统计
// @Accept json
// @Produce json
// @Param req body md.StoreOrderTotal true "请求参数"
// @Success 200 {string} ""
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/communityTeam/agent/store/total [POST]
func UserStoreTotal(c *gin.Context) {
var arg md.StoreOrderTotal
if err := c.ShouldBindJSON(&arg); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
user := svc.GetUser(c)
currentMonth := utils.GetTimeRange("current_month")
today := utils.GetTimeRange("today")
withinSevenDays := utils.GetTimeRange("within_seven_days")

monthSum, _ := svc.MasterDb(c).Where("store_uid=? and parent_uid=? and create_at>=?", arg.StoreUid, user.Info.Uid, time.Unix(currentMonth["start"], 0).Format("2006-01-02 15:04:05")).In("state", []string{"1", "2"}).Sum(&model.CommunityTeamOrder{}, "amount")
daySum, _ := svc.MasterDb(c).Where("store_uid=? and parent_uid=? and create_at>=?", arg.StoreUid, user.Info.Uid, time.Unix(today["start"], 0).Format("2006-01-02 15:04:05")).In("state", []string{"1", "2"}).Sum(&model.CommunityTeamOrder{}, "amount")
withinSevenDaysSum, _ := svc.MasterDb(c).Where("store_uid=? and parent_uid=? and create_at>=?", arg.StoreUid, user.Info.Uid, time.Unix(withinSevenDays["start"], 0).Format("2006-01-02 15:04:05")).In("state", []string{"1", "2"}).Sum(&model.CommunityTeamOrder{}, "amount")
list := []map[string]string{
{"name": "本日销售额", "value": utils.Float64ToStr(daySum)},
{"name": "近七日销售额", "value": utils.Float64ToStr(withinSevenDaysSum)},
{"name": "本月销售额", "value": utils.Float64ToStr(monthSum)},
}
commission, _ := svc.MasterDb(c).Where("store_uid=? and parent_uid=? ", arg.StoreUid, user.Info.Uid).Sum(&model.CommunityTeamOrder{}, "agent_commission")

store := db.GetStoreIdEg(svc.MasterDb(c), arg.StoreUid)
res := map[string]interface{}{
"list": list,
"platform_bili": "-",
"platform_amount": "-",
"base_bili": "-",
"base_amount": "-",
"agent_bili": store.AgentCommission + "%",
"agent_amount": utils.Float64ToStr(commission),
}
e.OutSuc(c, res, nil)
return
}

+ 27
- 0
app/agent/hdl/hdl_user.go 查看文件

@@ -0,0 +1,27 @@
package hdl

import (
"applet/app/e"
"applet/app/svc"
"github.com/gin-gonic/gin"
)

// User 用户信息
// @Summary 用户信息
// @Tags 用户信息
// @Description 用户信息
// @Accept json
// @Produce json
// @Success 200 {string} ""
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/v1/communityTeam/agent/user [GET]
func User(c *gin.Context) {
user := svc.GetUser(c)
res := map[string]string{
"head_img": user.Profile.AvatarUrl,
"nickname": user.Info.Nickname,
"phone": user.Info.Phone,
}
e.OutSuc(c, res, nil)
return
}

+ 1
- 0
app/agent/svc/svc_base.go 查看文件

@@ -0,0 +1 @@
package svc

+ 386
- 0
app/agent/svc/svc_goods.go 查看文件

@@ -0,0 +1,386 @@
package svc

import (
"applet/app/db"
"applet/app/db/model"
"applet/app/e"
"applet/app/md"
"applet/app/svc"
"applet/app/utils"
"applet/app/utils/logx"
"encoding/json"
"github.com/gin-gonic/gin"
"github.com/jinzhu/copier"
"github.com/shopspring/decimal"
"strings"
"time"
)

func GoodsCate(c *gin.Context) {
var arg map[string]string
if err := c.ShouldBindJSON(&arg); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
user := svc.GetUser(c)
arg["uid"] = utils.IntToStr(user.Info.Uid)
arg["store_type"] = "2"
cate, total := db.GetGoodsCate(svc.MasterDb(c), arg)
list := make([]map[string]string, 0)
if cate != nil {
for _, v := range *cate {
tmp := map[string]string{
"id": utils.IntToStr(v.Id),
"sort": utils.IntToStr(v.Sort),
"is_show": utils.IntToStr(v.IsShow),
"title": v.Title,
}
list = append(list, tmp)
}
}
res := map[string]interface{}{
"list": list, "total": total,
}
e.OutSuc(c, res, nil)
return
}
func GoodsCateSave(c *gin.Context) {
var arg map[string]string
if err := c.ShouldBindJSON(&arg); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
user := svc.GetUser(c)
var data = &model.CommunityTeamCate{}

if utils.StrToInt(arg["id"]) > 0 {
cate := db.GetGoodsCateById(svc.MasterDb(c), arg["id"])
if cate == nil {
e.OutErr(c, 400, e.NewErr(400, "分类不存在"))
return
}
data = cate
} else {
data = &model.CommunityTeamCate{
IsShow: utils.StrToInt(arg["is_show"]),
}
svc.MasterDb(c).Insert(data)
}
data.StoreType = 2
data.Uid = user.Info.Uid
data.Sort = utils.StrToInt(arg["sort"])
data.IsShow = utils.StrToInt(arg["is_show"])
data.Title = arg["title"]
svc.MasterDb(c).Where("id=?", data.Id).Update(data)
e.OutSuc(c, "success", nil)
return

}
func GoodsCateShow(c *gin.Context) {
var arg map[string]string
if err := c.ShouldBindJSON(&arg); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
cate := db.GetGoodsCateById(svc.MasterDb(c), arg["id"])
if cate == nil {
e.OutErr(c, 400, e.NewErr(400, "分类不存在"))
return
}
cate.IsShow = utils.StrToInt(arg["is_show"])
svc.MasterDb(c).Where("id=?", cate.Id).Cols("is_show").Update(cate)
e.OutSuc(c, "success", nil)
return

}
func GoodsCateDel(c *gin.Context) {
var arg map[string]string
if err := c.ShouldBindJSON(&arg); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
svc.MasterDb(c).In("id", strings.Split(arg["ids"], ",")).Delete(&model.CommunityTeamCate{})
e.OutSuc(c, "success", nil)
return
}

func Goods(c *gin.Context) {
var arg map[string]string
if err := c.ShouldBindJSON(&arg); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
user := svc.GetUser(c)
arg["uid"] = utils.IntToStr(user.Info.Uid)
arg["store_type"] = "2"
cate, total := db.GetStoreGoods(svc.MasterDb(c), arg)
list := make([]map[string]string, 0)
cateData := db.GetGoodsCateAll(svc.MasterDb(c))
cateList := make([]map[string]string, 0)
cateMap := make(map[int]string)
if cateData != nil {
for _, v := range *cateData {
tmp := map[string]string{
"name": v.Title, "value": utils.IntToStr(v.Id),
}
cateList = append(cateList, tmp)
cateMap[v.Id] = v.Title
}
}
if cate != nil {
stateMap := []string{"上架", "下架"}
scheme, host := svc.ImageBucket(c)
for _, v := range *cate {
tmp := map[string]string{
"id": utils.IntToStr(v.Id),
"title": v.Title,
"price": v.Price,
"info": v.Info,
"img_url": svc.ImageFormatWithBucket(scheme, host, v.Img),
"create_at": v.CreateAt.Format("2006-01-02 15:04:05"),
"cate": cateMap[v.Cid],
"state": stateMap[v.State],
}
list = append(list, tmp)
}
}
res := map[string]interface{}{
"list": list, "total": total, "cate_list": cateList,
}
e.OutSuc(c, res, nil)
return
}
func GoodsSave(c *gin.Context) {
var args md.AddGoodsReq
if err := c.ShouldBindJSON(&args); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
saleCount := 0
eg := svc.MasterDb(c)
user := svc.GetUser(c)
if utils.StrToInt(args.Base.Id) != 0 {
oldGoods := db.GetGoodsById(eg, args.Base.Id)
if oldGoods == nil {
e.OutErr(c, 400, e.NewErr(400, "商品不存在"))
return
}
saleCount = oldGoods.SaleCount
}
sess := eg.NewSession()
defer func() {
_ = sess.Close()
}()
err := sess.Begin()
if err != nil {
e.OutErr(c, 400, e.NewErr(400, err.Error()))
return
}
// 商品基本信息保存
var goods model.CommunityTeamGoods
err = copier.Copy(&goods, args.Base)
goods.StoreType = 2
goods.Uid = user.Info.Uid
goods.Id = utils.StrToInt(args.Base.Id)
goods.Stock = utils.StrToInt(args.Base.Stock)
goods.State = utils.StrToInt(args.Base.State)
goods.Cid = utils.StrToInt(args.Base.Cid)
goods.IsSingleSku = utils.StrToInt(args.Base.IsSingleSku)
goods.Sort = utils.StrToInt(args.Base.Sort)
if err != nil {
_ = sess.Rollback()
e.OutErr(c, 400, e.NewErr(400, err.Error()))
return
}
goods.SaleCount = saleCount
goods.Img = args.Base.Img
goods.ImageList = utils.SerializeStr([]string{args.Base.Img})
goods.Spe = utils.SerializeStr(args.Base.Spe)
// 商品价格处理
if goods.IsSingleSku == 1 { // 单规格 计算折扣价
args.SkuList = []md.MallGoodsSku{
{
Price: args.Base.Price,
Stock: args.Base.Stock,
Indexes: "",
Sku: []map[string]string{},
},
}
} else { // 多规格
var totalStock = 0
minPriceD, err := decimal.NewFromString(args.SkuList[0].Price)
if err != nil {
_ = sess.Rollback()
e.OutErr(c, 400, e.NewErr(400, "规格价格格式有误"))
return
}
for _, item := range args.SkuList {
tempPrice, err := decimal.NewFromString(item.Price)
totalStock += utils.StrToInt(item.Stock)
if err != nil {
_ = sess.Rollback()
logx.Warn("", err)
e.OutErr(c, 400, e.NewErr(400, "规格价格格式有误"))
return
}
if tempPrice.LessThan(minPriceD) {
minPriceD = tempPrice
}
}
goods.Price = minPriceD.String()
goods.Stock = totalStock
}
goods.UpdateAt = time.Now()
if utils.StrToInt(args.Base.Id) == 0 { // 新增goods
goods.CreateAt = time.Now()
_, err = sess.Insert(&goods)
if err != nil {
logx.Warn(err)
_ = sess.Rollback()
e.OutErr(c, 400, e.NewErr(400, "插入商品数据失败"))
return
}
} else { // 更新数据
oldGoods := db.GetGoodsByIdSess(sess, args.Base.Id)
goods.CreateAt = oldGoods.CreateAt
_, err = sess.Where(" id = ?", args.Base.Id).
AllCols().Update(&goods)
if err != nil {
_ = sess.Rollback()
logx.Warn(err)
e.OutErr(c, 400, e.NewErr(400, "更新商品失败"))
return
}
}
skuModelList := make([]*model.CommunityTeamSku, 0, len(args.SkuList))
for _, item := range args.SkuList {
skuModelList = append(skuModelList, &model.CommunityTeamSku{
GoodsId: goods.Id,
Price: item.Price,
Stock: utils.StrToInt(item.Stock),
Indexes: GetIndexesStr(&args.Base, item),
Sku: utils.SerializeStr(&item.Sku),
Discount: "10",
})
}
// 插入sku信息
if len(skuModelList) != 0 {
insert, err := sess.Insert(skuModelList)
if err != nil || insert < 1 {
_ = sess.Rollback()
e.OutErr(c, 400, e.NewErr(400, "商品规格插入失败"))
return
}
}

sess.Commit()
e.OutSuc(c, "success", nil)
return

}
func GetIndexesStr(baseGoods *md.BaseGoods, goodsSku md.MallGoodsSku) string {
spe := baseGoods.Spe
sku := goodsSku.Sku
result := ""

for index, item := range sku {
for _, itm := range spe {
if item["name"] == itm.Name {
for i, v := range spe[index].Values {
if v == item["value"] {
result = result + utils.IntToStr(i) + "-"
}
}
}
}
}
return strings.Trim(result, "-")
}

func GoodsDel(c *gin.Context) {
var arg map[string]string
if err := c.ShouldBindJSON(&arg); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
svc.MasterDb(c).In("id", strings.Split(arg["ids"], ",")).Delete(&model.CommunityTeamGoods{})
svc.MasterDb(c).In("goods_id", strings.Split(arg["ids"], ",")).Delete(&model.CommunityTeamSku{})
e.OutSuc(c, "success", nil)
return
}
func GoodsDetail(c *gin.Context) {
var arg map[string]string
if err := c.ShouldBindJSON(&arg); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
goods := db.GetGoodsById(svc.MasterDb(c), arg["id"])
if goods == nil {
e.OutErr(c, 400, e.NewErr(400, "商品不存在"))
return
}
cateData := db.GetGoodsCateAll(svc.MasterDb(c))
cateList := make([]map[string]string, 0)
cateMap := make(map[int]string)
if cateData != nil {
for _, v := range *cateData {
tmp := map[string]string{
"name": v.Title, "value": utils.IntToStr(v.Id),
}
cateList = append(cateList, tmp)
cateMap[v.Id] = v.Title
}
}
stateMap := []string{"上架", "下架"}
scheme, host := svc.ImageBucket(c)
res := md.BaseGoods{
Id: utils.IntToStr(goods.Id),
Title: goods.Title,
Cid: utils.IntToStr(goods.Cid),
CategoryName: cateMap[goods.Cid],
IsSingleSku: utils.IntToStr(goods.IsSingleSku),
Price: goods.Price,
Stock: utils.IntToStr(goods.Stock),
Img: goods.Img,
ImgUrl: svc.ImageFormatWithBucket(scheme, host, goods.Img),
Spe: nil,
Sort: utils.IntToStr(goods.Sort),
Info: goods.Info,
State: utils.IntToStr(goods.State),
StateStr: stateMap[goods.State],
}
GoodsSpe := make([]md.GoodsSpe, 0)
json.Unmarshal([]byte(goods.Spe), &GoodsSpe)
for k, v := range GoodsSpe {
if len(v.Values) == 0 {
GoodsSpe[k].Values = make([]string, 0)
}
}
res.Spe = GoodsSpe
sku := db.GetGoodsSkuById(svc.MasterDb(c), goods.Id)
skuList := make([]md.MallGoodsSku, 0)
if sku != nil {
for _, v := range *sku {
skuMap := make([]map[string]string, 0)
json.Unmarshal([]byte(v.Sku), &skuMap)
tmp := md.MallGoodsSku{
SkuID: utils.Int64ToStr(v.SkuId),
GoodsID: utils.IntToStr(v.GoodsId),
Price: v.Price,
Stock: utils.IntToStr(v.Stock),
Indexes: v.Indexes,
Sku: skuMap,
}
skuList = append(skuList, tmp)
}
}
if goods.IsSingleSku == 1 {
skuList = nil
}
re := map[string]interface{}{
"base": res,
"sku_list": skuList,
}
e.OutSuc(c, re, nil)
return
}

+ 43
- 0
app/agent/svc/svc_login.go 查看文件

@@ -0,0 +1,43 @@
package svc

import (
"applet/app/db"
"applet/app/e"
"applet/app/md"
"applet/app/svc"
"applet/app/utils"
"github.com/gin-gonic/gin"
)

func Login(c *gin.Context) {
r := new(md.LoginResponse)
requestBody := new(md.FastLoginRequestBody)
if err := c.ShouldBindJSON(&requestBody); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
user, _ := db.UserFindByMobileAll(svc.MasterDb(c), requestBody.Mobile)
if user == nil {
e.OutErr(c, 400, e.NewErr(400, "账号不存在"))
return
}
if user.Password != utils.Md5(requestBody.Password) {
e.OutErr(c, 400, e.NewErr(400, "密码不正确"))
return
}
userParty, _ := db.UserThirdPartyFindByID(svc.MasterDb(c), user.Uid)
if userParty == nil || userParty.IsAgent == 0 {
e.OutErr(c, 400, e.NewErr(400, "请联系平台成为代理"))
return
}
if err := svc.FastLoginUserExist(c, r, requestBody); err != nil {
if e.ErrorIsAccountBan(err) {
e.OutErr(c, e.ERR_USER_IS_BAN, err)
return
}
e.OutErr(c, 400, err)
return
}
e.OutSuc(c, r, nil)
return
}

+ 1
- 0
app/agent/svc/svc_order.go 查看文件

@@ -0,0 +1 @@
package svc

+ 1
- 0
app/agent/svc/svc_store.go 查看文件

@@ -0,0 +1 @@
package svc

+ 51
- 0
app/db/db_good.go 查看文件

@@ -0,0 +1,51 @@
package db

import (
"applet/app/db/model"
"applet/app/utils"
"xorm.io/xorm"
)

func GetStoreGoods(eg *xorm.Engine, req map[string]string) (*[]model.CommunityTeamGoods, int64) {
var data []model.CommunityTeamGoods
limit := utils.StrToInt(req["size"])
start := (utils.StrToInt(req["p"]) - 1) * limit
sess := eg.Where("uid=?", req["uid"]).OrderBy("sort desc,id desc").Limit(limit, start)
if req["title"] != "" {
sess.And("title like ?", "%"+req["title"]+"%")
}
if req["cid"] != "" {
sess.And("cid=?", req["cid"])
}
if req["store_type"] != "" {
sess.And("store_type=?", req["store_type"])
}
if req["start_time"] != "" {
sess.And("create_at>=?", req["start_time"])
}
if req["end_time"] != "" {
sess.And("create_at<=?", req["end_time"])
}
count, err := sess.FindAndCount(&data)
if err != nil {
return nil, count
}
return &data, count
}

func GetGoodsById(eg *xorm.Engine, id string) *model.CommunityTeamGoods {
var data model.CommunityTeamGoods
get, err := eg.Where("id=?", id).Get(&data)
if get == false || err != nil {
return nil
}
return &data
}
func GetGoodsByIdSess(sess *xorm.Session, id string) *model.CommunityTeamGoods {
var data model.CommunityTeamGoods
get, err := sess.Where("id=?", id).Get(&data)
if get == false || err != nil {
return nil
}
return &data
}

+ 42
- 0
app/db/db_good_cate.go 查看文件

@@ -0,0 +1,42 @@
package db

import (
"applet/app/db/model"
"applet/app/utils"
"xorm.io/xorm"
)

func GetGoodsCateAll(eg *xorm.Engine) *[]model.CommunityTeamCate {
var data []model.CommunityTeamCate
err := eg.Where("uid=0").OrderBy("sort desc,id desc").Find(&data)
if err != nil {
return nil
}
return &data
}
func GetGoodsCate(eg *xorm.Engine, req map[string]string) (*[]model.CommunityTeamCate, int64) {
var data []model.CommunityTeamCate
limit := utils.StrToInt(req["size"])
start := (utils.StrToInt(req["p"]) - 1) * limit
sess := eg.Where("uid=?", req["uid"]).OrderBy("sort desc,id desc").Limit(limit, start)
if req["title"] != "" {
sess.And("title like ?", "%"+req["title"]+"%")
}
if req["store_type"] != "" {
sess.And("store_type=?", req["store_type"])
}
count, err := sess.FindAndCount(&data)
if err != nil {
return nil, count
}
return &data, count
}

func GetGoodsCateById(eg *xorm.Engine, id string) *model.CommunityTeamCate {
var data model.CommunityTeamCate
get, err := eg.Where("id=?", id).Get(&data)
if get == false || err != nil {
return nil
}
return &data
}

+ 64
- 0
app/db/db_order.go 查看文件

@@ -2,10 +2,19 @@ package db

import (
"applet/app/db/model"
"applet/app/md"
"applet/app/utils"
"xorm.io/xorm"
)

func GetOrderByOid(eg *xorm.Engine, oid string) *model.CommunityTeamOrder {
var data model.CommunityTeamOrder
get, err := eg.Where("oid=?", oid).Get(&data)
if get == false || err != nil {
return nil
}
return &data
}
func GetOrderEg(eg *xorm.Engine, oid string) *model.CommunityTeamOrder {
var data model.CommunityTeamOrder
get, err := eg.Where("oid=?", oid).Get(&data)
@@ -70,3 +79,58 @@ func GetOrderList(eg *xorm.Engine, arg map[string]string) *[]model.CommunityTeam
}
return &data
}
func GetStoreOrderList(eg *xorm.Engine, req md.StoreOrder, parent_uid int) (*[]model.CommunityTeamOrder, int64, error) {
var data []model.CommunityTeamOrder
sess := eg.Where("1=1")
if req.Oid != "" {
sess.And("oid like ?", "%"+req.Oid+"%")
}

if req.StoreName != "" {
var store []model.CommunityTeamStore
eg.Where("name like ?", "%"+req.StoreName+"%").Find(&store)
ids := []int{-1}
for _, v := range store {
ids = append(ids, v.Id)
}
sess.In("store_uid", ids)
}
if req.Phone != "" {
var user []model.User
eg.Where("phone like ?", "%"+req.Phone+"%").Find(&user)
ids := []int{-1}
for _, v := range user {
ids = append(ids, v.Uid)
}
sess.In("uid", ids)
}
if req.Nickname != "" {
var user []model.User
eg.Where("nickname like ?", "%"+req.Nickname+"%").Find(&user)
ids := []int{-1}
for _, v := range user {
ids = append(ids, v.Uid)
}
sess.In("uid", ids)
}
if req.StoreUid != "" {
sess.And("store_uid=?", req.StoreUid)
}
if parent_uid > 0 {
sess.And("parent_uid=?", parent_uid)
}

if req.StartTime != "" {
sess.And("create_at>=?", req.StartTime)
}
if req.EndTime != "" {
sess.And("create_at<=?", req.EndTime)
}
size := utils.StrToInt(req.Size)
start := (utils.StrToInt(req.P) - 1) * size
count, err := sess.Limit(size, start).OrderBy("create_at desc,id desc").FindAndCount(&data)
if err != nil {
return nil, 0, err
}
return &data, count, nil
}

+ 32
- 0
app/db/db_other_city_login_list.go 查看文件

@@ -0,0 +1,32 @@
package db

import (
"applet/app/db/model"
"applet/app/utils/logx"
"xorm.io/xorm"
)

func OtherCityLoginByUid(Db *xorm.Engine, uid int) (*model.OtherCityLoginList, error) {
var o model.OtherCityLoginList
has, err := Db.Where("uid = ?", uid).Desc("time").Get(&o)
if err != nil || !has {
return nil, err
}
return &o, nil
}

// 插入
func OtherCityLoginByInsert(Db *xorm.Engine, list *model.OtherCityLoginList) {
row, err := Db.InsertOne(list)
if err != nil || row == 0 {
_ = logx.Warn(err)
}
}

// 更新
func OtherCityLoginByUpdate(Db *xorm.Engine, list *model.OtherCityLoginList) {
row, err := Db.ID(list.Id).Cols("is_notice").Update(list)
if err != nil || row == 0 {
_ = logx.Warn(err)
}
}

+ 15
- 0
app/db/db_sku.go 查看文件

@@ -0,0 +1,15 @@
package db

import (
"applet/app/db/model"
"xorm.io/xorm"
)

func GetGoodsSkuById(eg *xorm.Engine, id int) *[]model.CommunityTeamSku {
var data []model.CommunityTeamSku
err := eg.Where("goods_id=?", id).Find(&data)
if err != nil {
return nil
}
return &data
}

+ 20
- 3
app/db/db_store.go 查看文件

@@ -7,6 +7,15 @@ import (
"xorm.io/xorm"
)

func GetUserStore(eg *xorm.Engine, id int) *model.CommunityTeamStore {
var data model.CommunityTeamStore
get, err := eg.Where("uid=?", id).Get(&data)
if get == false || err != nil {
return nil
}
return &data
}

func GetStore(eg *xorm.Engine, arg map[string]string) []map[string]string {
lng := utils.StrToFloat64(arg["lng"])
lat := utils.StrToFloat64(arg["lat"])
@@ -19,10 +28,14 @@ func GetStore(eg *xorm.Engine, arg map[string]string) []map[string]string {
} else if arg["uid"] != "" {
where += " and store_type=1 and uid=" + arg["parent_uid"]
} else {
where += " and store_type=" + arg["store_type"]
if arg["store_type"] == "3" {
where += " and store_type in(1,2)"
} else {
where += " and store_type=" + arg["store_type"]
}
}
if arg["city"] != "" {
where += " and address like '%" + arg["city"] + "%'"
where += " and city like '%" + arg["city"] + "%'"
}
if arg["province_id"] != "" {
where += " and province_id = '" + arg["province_id"] + "'"
@@ -62,7 +75,11 @@ where %s %s`
} else if arg["uid"] != "" {
where += " and cts.store_type=1 and cts.uid=" + arg["parent_uid"]
} else {
where += " and cts.store_type=" + arg["store_type"]
if arg["store_type"] == "3" {
where += " and cts.store_type in(1,2)"
} else {
where += " and cts.store_type=" + arg["store_type"]
}
}
if arg["city"] != "" {
where += " and cts.city='" + arg["city"] + "'"


+ 25
- 0
app/db/db_user.go 查看文件

@@ -2,6 +2,8 @@ package db

import (
"applet/app/db/model"
"applet/app/md"
"applet/app/utils"
"applet/app/utils/logx"
"fmt"
"strings"
@@ -21,6 +23,13 @@ func UserisExistByUsernameAndPassword(Db *xorm.Engine, username, password, zone
}
return &user, nil
}
func UserThirdPartyFindByID(Db *xorm.Engine, id interface{}) (*model.UserThirdParty, error) {
var m model.UserThirdParty
if has, err := Db.Where("uid = ?", id).Get(&m); err != nil || has == false {
return nil, logx.Warn(err)
}
return &m, nil
}

// UserisExistByMobile is exist
func UserisExistByMobile(Db *xorm.Engine, n string) (bool, error) {
@@ -393,3 +402,19 @@ func UserProfileCheckInviteCode(eg *xorm.Engine, uid int, inviteCode string) boo
}
return true
}

func GetUserList(eg *xorm.Engine, arg md.Store, uid int) (*[]md.StoreGroup, int64) {
var data []md.StoreGroup
sess := eg.Table("user").Where("user.is_marketer=? and community_team_store.parent_uid=?", 1, uid)
size := utils.StrToInt(arg.Size)
start := (utils.StrToInt(arg.P) - 1) * size
if arg.Name != "" {
sess.And("community_team_store.name like ?", "%"+arg.Name+"%")
}
sess.Join("LEFT", "community_team_store", "user.uid = community_team_store.uid")
count, err := sess.Limit(size, start).Desc("user.create_at").FindAndCount(&data)
if err != nil {
return nil, count
}
return &data, count
}

+ 34
- 33
app/db/model/community_team_order.go 查看文件

@@ -5,37 +5,38 @@ import (
)

type CommunityTeamOrder struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
Uid int `json:"uid" xorm:"default 0 INT(11)"`
StoreType int `json:"store_type" xorm:"default 0 comment('0官方自营店 1加盟店 2连锁店') INT(11)"`
StoreUid int `json:"store_uid" xorm:"default 0 comment('门店用户id') INT(11)"`
ParentUid int `json:"parent_uid" xorm:"default 0 comment('上级代理') INT(11)"`
Num int `json:"num" xorm:"default 0 comment('') INT(11)"`
CouponId int `json:"coupon_id" xorm:"default 0 comment('') INT(11)"`
Address string `json:"address" xorm:"comment('详细地址') VARCHAR(255)"`
Commission string `json:"commission" xorm:"default 0.00 comment('分佣(元)') DECIMAL(20,2)"`
CreateAt time.Time `json:"create_at" xorm:"DATETIME"`
UpdateAt time.Time `json:"update_at" xorm:"DATETIME"`
CancelAt time.Time `json:"cancel_at" xorm:"DATETIME"`
BuyPhone string `json:"buy_phone" xorm:"VARCHAR(255)"`
Phone string `json:"phone" xorm:"VARCHAR(255)"`
BuyName string `json:"buy_name" xorm:"VARCHAR(255)"`
State int `json:"state" xorm:"default 0 comment('0待付款 1已支付 2已提货') INT(11)"`
PayAt time.Time `json:"pay_at" xorm:"comment('付款时间') DATETIME"`
ConfirmAt time.Time `json:"confirm_at" xorm:"comment('提货时间') DATETIME"`
Oid int64 `json:"oid" xorm:"default 0 comment('主单号') BIGINT(20)"`
Code string `json:"code" xorm:"comment('提货码') VARCHAR(255)"`
Type int `json:"type" xorm:"default 0 comment('0自提 1外卖') INT(1)"`
PayMethod int `json:"pay_method" xorm:"default 0 comment('1余额 2支付宝 3微信') INT(11)"`
PayId string `json:"pay_id" xorm:"comment('第三方的支付id') VARCHAR(255)"`
Amount string `json:"amount" xorm:"default 0.00 comment('总金额') DECIMAL(20,2)"`
Memo string `json:"memo" xorm:"comment('备注') VARCHAR(255)"`
TakeTime time.Time `json:"take_time" xorm:"comment('预计提货时间') DATETIME"`
MealNum int `json:"meal_num" xorm:"default 0 comment('餐具数量') INT(11)"`
Coupon string `json:"coupon" xorm:"default 0.00 DECIMAL(10,2)"`
Timer string `json:"timer" xorm:"comment('预计提货时间') VARCHAR(255)"`
IsNow int `json:"is_now" xorm:"default 0 comment('是否立即提货') INT(1)"`
StoreSettleAt int `json:"store_settle_at" xorm:"default 0 comment('') INT(11)"`
SettleAt int `json:"settle_at" xorm:"default 0 comment('') INT(11)"`
CommissionAt int `json:"commission_at" xorm:"default 0 comment('') INT(11)"`
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
Uid int `json:"uid" xorm:"default 0 INT(11)"`
StoreType int `json:"store_type" xorm:"default 0 comment('0官方自营店 1加盟店 2连锁店') INT(11)"`
StoreUid int `json:"store_uid" xorm:"default 0 comment('门店用户id') INT(11)"`
ParentUid int `json:"parent_uid" xorm:"default 0 comment('上级代理') INT(11)"`
Num int `json:"num" xorm:"default 0 comment('') INT(11)"`
CouponId int `json:"coupon_id" xorm:"default 0 comment('') INT(11)"`
Address string `json:"address" xorm:"comment('详细地址') VARCHAR(255)"`
Commission string `json:"commission" xorm:"default 0.00 comment('分佣(元)') DECIMAL(20,2)"`
AgentCommission string `json:"agent_commission" xorm:"default 0.00 comment('分佣(元)') DECIMAL(20,2)"`
CreateAt time.Time `json:"create_at" xorm:"DATETIME"`
UpdateAt time.Time `json:"update_at" xorm:"DATETIME"`
CancelAt time.Time `json:"cancel_at" xorm:"DATETIME"`
BuyPhone string `json:"buy_phone" xorm:"VARCHAR(255)"`
Phone string `json:"phone" xorm:"VARCHAR(255)"`
BuyName string `json:"buy_name" xorm:"VARCHAR(255)"`
State int `json:"state" xorm:"default 0 comment('0待付款 1已支付 2已提货') INT(11)"`
PayAt time.Time `json:"pay_at" xorm:"comment('付款时间') DATETIME"`
ConfirmAt time.Time `json:"confirm_at" xorm:"comment('提货时间') DATETIME"`
Oid int64 `json:"oid" xorm:"default 0 comment('主单号') BIGINT(20)"`
Code string `json:"code" xorm:"comment('提货码') VARCHAR(255)"`
Type int `json:"type" xorm:"default 0 comment('0自提 1外卖') INT(1)"`
PayMethod int `json:"pay_method" xorm:"default 0 comment('1余额 2支付宝 3微信') INT(11)"`
PayId string `json:"pay_id" xorm:"comment('第三方的支付id') VARCHAR(255)"`
Amount string `json:"amount" xorm:"default 0.00 comment('总金额') DECIMAL(20,2)"`
Memo string `json:"memo" xorm:"comment('备注') VARCHAR(255)"`
TakeTime time.Time `json:"take_time" xorm:"comment('预计提货时间') DATETIME"`
MealNum int `json:"meal_num" xorm:"default 0 comment('餐具数量') INT(11)"`
Coupon string `json:"coupon" xorm:"default 0.00 DECIMAL(10,2)"`
Timer string `json:"timer" xorm:"comment('预计提货时间') VARCHAR(255)"`
IsNow int `json:"is_now" xorm:"default 0 comment('是否立即提货') INT(1)"`
StoreSettleAt int `json:"store_settle_at" xorm:"default 0 comment('') INT(11)"`
SettleAt int `json:"settle_at" xorm:"default 0 comment('') INT(11)"`
CommissionAt int `json:"commission_at" xorm:"default 0 comment('') INT(11)"`
}

+ 23
- 16
app/db/model/community_team_store.go 查看文件

@@ -5,20 +5,27 @@ import (
)

type CommunityTeamStore struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
Uid int `json:"uid" xorm:"default 0 INT(11)"`
StoreType int `json:"store_type" xorm:"default 0 comment('0官方自营店 1加盟店 2连锁店') INT(11)"`
ParentUid int `json:"parent_uid" xorm:"default 0 comment('上级代理') INT(11)"`
Lat string `json:"lat" xorm:"default 0.000000 comment('纬度') DECIMAL(30,6)"`
Lng string `json:"lng" xorm:"default 0.000000 comment('经度') DECIMAL(30,6)"`
Address string `json:"address" xorm:"comment('详细地址') VARCHAR(255)"`
Commission string `json:"commission" xorm:"default 0.00 comment('分佣比例%') DECIMAL(20,2)"`
CreateAt time.Time `json:"create_at" xorm:"DATETIME"`
UpdateAt time.Time `json:"update_at" xorm:"DATETIME"`
State int `json:"state" xorm:"default 0 comment('0非店长 1店长') INT(1)"`
WorkState int `json:"work_state" xorm:"default 0 comment('0营业中 1休息中') INT(1)"`
Name string `json:"name" xorm:"VARCHAR(255)"`
Province string `json:"province" xorm:"comment('省级的名称') VARCHAR(255)"`
City string `json:"city" xorm:"comment('市级的名称') VARCHAR(255)"`
District string `json:"district" xorm:"comment('县,区名称') VARCHAR(255)"`
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
Uid int `json:"uid" xorm:"default 0 INT(11)"`
StoreType int `json:"store_type" xorm:"default 0 comment('0官方自营店 1加盟店 2连锁店') INT(11)"`
ParentUid int `json:"parent_uid" xorm:"default 0 comment('上级代理') INT(11)"`
Lat string `json:"lat" xorm:"default 0.000000 comment('纬度') DECIMAL(30,6)"`
Lng string `json:"lng" xorm:"default 0.000000 comment('经度') DECIMAL(30,6)"`
Address string `json:"address" xorm:"comment('详细地址') VARCHAR(255)"`
Commission string `json:"commission" xorm:"default 0.00 comment('分佣比例%') DECIMAL(20,2)"`
AgentCommission string `json:"agent_commission" xorm:"default 0.00 comment('分佣比例%') DECIMAL(20,2)"`
CreateAt time.Time `json:"create_at" xorm:"DATETIME"`
UpdateAt time.Time `json:"update_at" xorm:"DATETIME"`
State int `json:"state" xorm:"default 0 comment('0非店长 1店长') INT(1)"`
WorkState int `json:"work_state" xorm:"default 0 comment('0营业中 1休息中') INT(1)"`
Name string `json:"name" xorm:"VARCHAR(255)"`
Province string `json:"province" xorm:"comment('省级的名称') VARCHAR(255)"`
City string `json:"city" xorm:"comment('市级的名称') VARCHAR(255)"`
District string `json:"district" xorm:"comment('县,区名称') VARCHAR(255)"`
Timer string `json:"timer" xorm:"comment('') VARCHAR(255)"`
Phone string `json:"phone" xorm:"comment('') VARCHAR(255)"`
Logo string `json:"logo" xorm:"comment('') VARCHAR(255)"`
ProvinceId int `json:"province_id" xorm:"comment('省级的名称') INT(11)"`
CityId int `json:"city_id" xorm:"comment('市级的名称') INT(11)"`
DistrictId int `json:"district_id" xorm:"comment('县,区名称') INT(11)"`
}

+ 14
- 0
app/db/model/other_city_login_list.go 查看文件

@@ -0,0 +1,14 @@
package model

type OtherCityLoginList struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
Uid int `json:"uid" xorm:"default 0 comment('用户id') INT(11)"`
NowIp string `json:"now_ip" xorm:"default '' comment('当前登录ip') VARCHAR(20)"`
NowCity string `json:"now_city" xorm:"default '' comment('当前登录城市') VARCHAR(20)"`
LastIp string `json:"last_ip" xorm:"default '' comment('上次登录ip') VARCHAR(20)"`
LastCity string `json:"last_city" xorm:"default '' comment('上次登录城市') VARCHAR(20)"`
Time int64 `json:"time" xorm:"default 0 comment('时间') INT(11)"`
IsNotice int `json:"is_notice" xorm:"default 0 comment('是否通知过') INT(11)"`
Lat float64 `json:"lat" xorm:"default 0.000000 comment('纬度') INT(11)"`
Lng float64 `json:"lng" xorm:"default 0.000000 comment('经度') INT(11)"`
}

+ 9
- 0
app/db/model/user_third_party.go 查看文件

@@ -0,0 +1,9 @@
package model

type UserThirdParty struct {
Uid int `json:"uid" xorm:"not null pk autoincr comment('主键ID') INT(10)"`
ThirdPartyJdMiniOpenid string `json:"third_party_jd_mini_openid" xorm:"not null default '' VARCHAR(255)"`
IsAgent int `json:"is_agent" xorm:"default 0 comment('小店代理') INT(1)"`
WechatPayInfo string `json:"wechat_pay_info" xorm:"comment('微信支付配置') VARCHAR(1000)"`
AlipayPayInfo string `json:"alipay_pay_info" xorm:"comment('支付宝') VARCHAR(1000)"`
}

+ 12
- 0
app/hdl/hdl_store.go 查看文件

@@ -47,6 +47,18 @@ func BankStoreCate(c *gin.Context) {
func BankStore(c *gin.Context) {
svc.BankStore(c)
}
func NewStoreCate(c *gin.Context) {
var res = []map[string]string{
{"name": "全部店铺", "value": ""},
{"name": "附近店铺", "value": "1"},
{"name": "关注店铺", "value": "2"},
}
e.OutSuc(c, res, nil)
return
}
func NewStore(c *gin.Context) {
svc.NewStore(c)
}
func Store(c *gin.Context) {
svc.Store(c)
}


+ 1
- 0
app/md/alipay.go 查看文件

@@ -40,6 +40,7 @@ type AliPayPayParams struct {
OrdId string `json:"ord_id"`
Uid string `json:"uid"`
Phone string `json:"phone"`
AgentId int `json:"agent_id"`
}
type PayData struct {
PayAppCertSn string `json:"pay_app_cert_sn"`


+ 14
- 0
app/md/amap.go 查看文件

@@ -0,0 +1,14 @@
package md

type IpInfo struct {
City string `json:"city"`
Country string `json:"country"`
District string `json:"district"`
Info string `json:"info"`
Infocode string `json:"infocode"`
IP string `json:"ip"`
Isp string `json:"isp"`
Location string `json:"location"`
Province string `json:"province"`
Status string `json:"status"`
}

+ 13
- 0
app/md/login.go 查看文件

@@ -0,0 +1,13 @@
package md

type FastLoginRequestBody struct {
Mobile string `json:"mobile"`
Password string `json:"password"`
}

type LoginResponse struct {
Token string `json:"token"`
UserID string `json:"user_id"`
Phone string `json:"phone"`
UserName string `json:"username"`
}

+ 23
- 0
app/md/md_alipay.go 查看文件

@@ -0,0 +1,23 @@
package md

type AlipayPay struct {
PayAliNewAppId string `json:"pay_ali_new_app_id"`
PayAliNewPrivateKey string `json:"pay_ali_new_private_key"`
}
type AlipayPaySet struct {
PayAliAppId string `json:"pay_ali_app_id"`
PayAliKeyFormatType string `json:"pay_ali_key_format_type"`
PayAliKeyLenType string `json:"pay_ali_key_len_type"`
PayAliKeyType string `json:"pay_ali_key_type"`
PayAliNewAlipayrsaPublicKey string `json:"pay_ali_new_alipayrsa_public_key"`
PayAliNewAlipayRootCertSn string `json:"pay_ali_new_alipay_root_cert_sn"`
PayAliNewAppCertSn string `json:"pay_ali_new_app_cert_sn"`
PayAliNewAppId string `json:"pay_ali_new_app_id"`
PayAliNewPrivateKey string `json:"pay_ali_new_private_key"`
PayAliPrivateKey string `json:"pay_ali_private_key"`
PayAliPublicKey string `json:"pay_ali_public_key"`
PayAliUseType string `json:"pay_ali_use_type"`
PayAppCertSn string `json:"pay_app_cert_sn"`
PayAlipayRootCertSn string `json:"pay_alipay_root_cert_sn"`
PayAlipayrsaPublicKey string `json:"pay_alipayrsa_public_key"`
}

+ 7
- 0
app/md/md_api_response.go 查看文件

@@ -0,0 +1,7 @@
package md

type Response struct {
Code string `json:"code" example:"响应码"`
Data interface{} `json:"data" ` //内容
Msg string `json:"msg" example:"具体错误原因"`
}

+ 35
- 0
app/md/md_store.go 查看文件

@@ -0,0 +1,35 @@
package md

import "applet/app/db/model"

type Store struct {
P string `json:"p"`
Size string `json:"size"`
Name string `json:"name"`
}
type StoreGroup struct {
model.User `xorm:"extends"`
model.CommunityTeamStore `xorm:"extends"`
}
type StoreSave struct {
Uid string `json:"uid"`
AgentCommission string `json:"agent_commission"`
}

type StoreOrder struct {
P string `json:"p"`
Size string `json:"size"`
Nickname string `json:"nickname"`
Phone string `json:"phone"`
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
Oid string `json:"oid"`
StoreUid string `json:"store_uid"`
StoreName string `json:"store_name"`
}
type StoreOrderTotal struct {
StoreUid string `json:"store_uid"`
}
type StoreOrderDetail struct {
Oid string `json:"oid"`
}

+ 12
- 0
app/md/md_wechat.go 查看文件

@@ -0,0 +1,12 @@
package md

type WechatPay struct {
PayWxApiKey string `json:"pay_wx_api_key" example:"微信支付api密钥"`
PayWxMchId string `json:"pay_wx_mch_id" example:"微信支付商户mch_id"`
}

type WechatPaySave struct {
PayWxApiKey string `json:"pay_wx_api_key" example:"微信支付api密钥"`
PayWxMchId string `json:"pay_wx_mch_id" example:"微信支付商户mch_id"`
WechatP12ApiclientCert string `json:"wechat_p12_apiclient_cert"`
}

+ 35
- 0
app/md/store_goods.go 查看文件

@@ -0,0 +1,35 @@
package md

type BaseGoods struct {
Id string `json:"id,omitempty" label:"商品ID"` // 商品id,0或不传为新建
Title string `json:"title" label:"标题"` // 商品标题
Cid string `json:"cid" label:"商品类目"` // 商品类目id
CategoryName string `json:"category_name" label:"商品类目名称"` // 商品类目
IsSingleSku string `json:"is_single_sku" default:"1" label:"是否单规格"` //是否单规格,0:否,1:是
Price string `json:"price" default:"0.00" label:"商品价格"` // 商品价格
Stock string `json:"stock,omitempty" default:"0" label:"库存"` // 库存
Img string `json:"img"`
ImgUrl string `json:"img_url"`
Spe []GoodsSpe `json:"spe" label:"商品规格"` // 规格
Sort string `json:"sort" label:"排序"`
Info string `json:"info" label:""`
State string `json:"state" label:""`
StateStr string `json:"state_str" label:""`
}
type GoodsSpe struct {
SpeId string `json:"spe_id"`
Name string `json:"name" label:"规格名"` // 规格名
Values []string `json:"values" label:"规格值"` // 规格值
}
type AddGoodsReq struct {
Base BaseGoods `json:"base" binding:"required" label:"商品基本信息"` // 基本信息
SkuList []MallGoodsSku `json:"sku_list" label:"商品规格"` // sku列表
}
type MallGoodsSku struct {
SkuID string `json:"sku_id,omitempty" label:"skuID" copier:"-"` // sku_id 0或不传为新建
GoodsID string `json:"goods_id,omitempty" label:"商品ID"` // 0或不传为新建
Price string `json:"price" binding:"required" label:"价格"` // 价格
Stock string `json:"stock" default:"0" label:"库存"` // 库存
Indexes string `json:"indexes"`
Sku []map[string]string `json:"sku" label:"规格组合"` // 规格组合
}

+ 40
- 0
app/router/router.go 查看文件

@@ -1,11 +1,14 @@
package router

import (
agentHdl "applet/app/agent/hdl"
"applet/app/cfg"
"applet/app/hdl"
"applet/app/mw"
_ "applet/docs"
"github.com/gin-gonic/gin"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
)

// 初始化路由
@@ -19,6 +22,10 @@ func Init() *gin.Engine {
gin.SetMode(mode)
//创建一个新的启动器
r := gin.New()
r.GET("/api/swagger/*any", func(c *gin.Context) {
//r.Use(mw.SwagAuth())
ginSwagger.DisablingWrapHandler(swaggerFiles.Handler, "SWAGGER")(c)
})
r.Use(mw.ChangeHeader)

// 是否打印访问日志, 在非正式环境都打印
@@ -37,8 +44,39 @@ func Init() *gin.Engine {
c.JSON(405, gin.H{"code": 405, "msg": "method not allowed", "data": []struct{}{}})
})
r.Use(mw.Cors)
routeCommunityTeamAgent(r.Group("/api/v1/communityTeam/agent"))
routeCommunityTeamOwnStore(r.Group("/api/v1/communityTeam/ownStore"))
routeCommunityTeam(r.Group("/api/v1/communityTeam"))
return r
}
func routeCommunityTeamAgent(r *gin.RouterGroup) {
r.Use(mw.DB) // 下面接口再根据mid 获取数据库名
r.POST("/login", agentHdl.Login)
r.Use(mw.AuthJWT)
r.GET("/user", agentHdl.User)
r.POST("/service/file/upload", agentHdl.ServiceFileUpload)
r.GET("/wechat/base", agentHdl.WechatBase)
r.POST("/wechat/base/set", agentHdl.WechatBaseSet)
r.GET("/alipay/base", agentHdl.AlipayBase)
r.POST("/alipay/base/set", agentHdl.AlipayBaseSet)
r.POST("/store/list", agentHdl.UserStoreList)
r.POST("/store/save", agentHdl.UserStoreSave)
r.POST("/store/order", agentHdl.UserStoreOrder)
r.POST("/store/order/detail", agentHdl.UserStoreOrderDetail)
r.POST("/store/total", agentHdl.UserStoreTotal)

r.POST("/goods/list", agentHdl.Goods)
r.POST("/goods/save", agentHdl.GoodsSave)
r.POST("/goods/detail", agentHdl.GoodsDetail)
r.POST("/goods/del", agentHdl.GoodsDel)
r.POST("/goods/cate/list", agentHdl.GoodsCate)
r.POST("/goods/cate/save", agentHdl.GoodsCateSave)
r.POST("/goods/cate/show", agentHdl.GoodsCateShow)
r.POST("/goods/cate/del", agentHdl.GoodsCateDel)

}
func routeCommunityTeamOwnStore(r *gin.RouterGroup) {

}
func routeCommunityTeam(r *gin.RouterGroup) {
r.Use(mw.DB) // 下面接口再根据mid 获取数据库名
@@ -48,6 +86,8 @@ func routeCommunityTeam(r *gin.RouterGroup) {
r.POST("/city", hdl.City)
r.GET("/bank/store/cate", hdl.BankStoreCate)
r.POST("/bank/store/list", hdl.BankStore)
r.GET("/new/store/cate", hdl.NewStoreCate)
r.POST("/new/store/list", hdl.NewStore)
r.POST("/store", hdl.Store)
r.POST("/store/like/list", hdl.StoreLike)
r.GET("/goods/cate", hdl.Cate)


+ 25
- 4
app/svc/svc_alipay.go 查看文件

@@ -8,9 +8,11 @@ import (
"applet/app/utils"
"applet/app/utils/logx"
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/pay"
"errors"
"fmt"
"github.com/gin-gonic/gin"
"github.com/iGoogle-ink/gopay/alipay"
"github.com/tidwall/gjson"
)

// 支付宝回调处理
@@ -67,10 +69,29 @@ func CommAlipayConfig(c *gin.Context, p *md.AliPayPayParams) (map[string]string,
"rsa": SysCfgGet(c, "pay_ali_key_len_type"),
"pkcs": SysCfgGet(c, "pay_ali_key_format_type"),
}
payAliNewPrivateKey := SysCfgGet(c, "pay_ali_new_private_key")
payAliNewAppId := SysCfgGet(c, "pay_ali_new_app_id")
payAppCertSn := SysCfgGet(c, "pay_app_cert_sn")
payAlipayrsaPublicKey := SysCfgGet(c, "pay_alipayrsa_public_key")
if p.AgentId > 0 {
user, _ := db.UserThirdPartyFindByID(MasterDb(c), p.AgentId)
if user.AlipayPayInfo == "" {
return nil, errors.New("支付失败")
}
req["pay_ali_use_type"] = gjson.Get(user.AlipayPayInfo, "pay_ali_use_type").String()
req["private_key"] = gjson.Get(user.AlipayPayInfo, "pay_ali_private_key").String()
req["app_id"] = gjson.Get(user.AlipayPayInfo, "pay_ali_app_id").String()
req["rsa"] = gjson.Get(user.AlipayPayInfo, "pay_ali_key_len_type").String()
req["pkcs"] = gjson.Get(user.AlipayPayInfo, "pay_ali_key_format_type").String()
payAliNewPrivateKey = gjson.Get(user.AlipayPayInfo, "pay_ali_new_private_key").String()
payAliNewAppId = gjson.Get(user.AlipayPayInfo, "pay_ali_new_app_id").String()
payAppCertSn = gjson.Get(user.AlipayPayInfo, "pay_app_cert_sn").String()
payAlipayrsaPublicKey = gjson.Get(user.AlipayPayInfo, "pay_alipayrsa_public_key").String()
}
if req["pay_ali_use_type"] == "1" {
req["private_key"] = SysCfgGet(c, "pay_ali_new_private_key")
req["app_id"] = SysCfgGet(c, "pay_ali_new_app_id")
appCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + SysCfgGet(c, "pay_app_cert_sn"))
req["private_key"] = payAliNewPrivateKey
req["app_id"] = payAliNewAppId
appCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + payAppCertSn)
if err != nil {
fmt.Println(err)
return nil, err
@@ -80,7 +101,7 @@ func CommAlipayConfig(c *gin.Context, p *md.AliPayPayParams) (map[string]string,
return nil, err
}
req["pay_app_cert_sn"] = appCertSN
aliPayPublicCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + SysCfgGet(c, "pay_alipayrsa_public_key"))
aliPayPublicCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + payAlipayrsaPublicKey)
if err != nil {
fmt.Println(err)
return nil, err


+ 69
- 0
app/svc/svc_default_user.go 查看文件

@@ -2,8 +2,14 @@ package svc

import (
"applet/app/db"
"applet/app/db/model"
"applet/app/e"
"applet/app/md"
"applet/app/utils"
"applet/app/utils/cache"
"applet/app/utils/logx"
"errors"
"fmt"
"github.com/gin-gonic/gin"
"strings"
)
@@ -48,3 +54,66 @@ DEFALUT:
user.Level = ul
return user, nil
}

func FastLoginUserExist(c *gin.Context, r *md.LoginResponse, requestBody *md.FastLoginRequestBody) error {
// 每次登录都会刷新token
var user = &model.User{}
var err error
if requestBody.Mobile != "" {
user, err = db.UserFindByMobileAll(db.DBs[c.GetString("mid")], requestBody.Mobile)
}
if user == nil || user.Uid == 0 {
return e.NewErr(400, "用户不存在")
}
if err != nil {
return err
}
if user.DeleteAt == 1 {
return e.NewErr(403053, "账号被删除,如有疑问请联系客服")
}
//判断用户是否虚拟账号 虚拟账号不能用手机号登陆
if user.IsFake == 1 {
return e.NewErr(400000, "该手机号无法登陆,请联系客服!")
}
//0未激活,1正常,2冻结
switch user.State {
case 0:
return e.NewErr(403028, "no active")
case 2:
return e.NewErr(403029, "您的账号已被冻结")
}
// 生成jwt
appName := db.SysCfgGet(c, "app_name")
profile, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], user.Uid)
if err != nil || profile == nil {
_ = logx.Warn(err)
return e.NewErr(400000, "数据不完整")
}
token := CheckUserToken(c, user.Uid, user.Username, user.Phone, appName)
r.Token = token
r.UserID = utils.IntToStr(user.Uid)
r.UserName = requestBody.Mobile
r.Phone = requestBody.Mobile
// 更新
profile.ArkidToken = token
_, err = db.UserProfileUpdate(db.DBs[c.GetString("mid")], user.Uid, profile)
if err != nil {
return logx.Warn(err)
}
// 写入缓存
key := fmt.Sprintf("%s:token:%s", c.GetString("mid"), user.Username)
_, err = cache.SetEx(key, token, 39528000) // 半年
if err != nil {
return logx.Warn(err)
}
return nil
}
func CheckUserToken(c *gin.Context, uid int, username, phone, appName string) string {
profile, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], uid)
if err != nil {
e.OutErr(c, e.ERR_DB_ORM, err)
return ""
}
token := profile.ArkidToken
return token
}

+ 4
- 1
app/svc/svc_goods.go 查看文件

@@ -16,7 +16,10 @@ func Goods(c *gin.Context) {
}
goods := db.GetGoods(MasterDb(c), arg)
goodsList := make([]map[string]interface{}, 0)

if goods != nil {
scheme, host := ImageBucket(c)

for _, v := range *goods {
speImageList := make([]string, 0)
if v.IsSpeImageOn == 1 {
@@ -25,7 +28,7 @@ func Goods(c *gin.Context) {
tmp := map[string]interface{}{
"id": utils.IntToStr(v.Id),
"title": v.Title,
"img": v.Img,
"img": ImageFormatWithBucket(scheme, host, v.Img),
"info": v.Info,
"price": v.Price,
"stock": utils.IntToStr(v.Stock),


+ 11
- 2
app/svc/svc_order.go 查看文件

@@ -39,6 +39,8 @@ func OrderList(c *gin.Context) {
data := db.GetOrderList(MasterDb(c), arg)
var state = []string{"待付款", "待提货", "已完成", "已取消"}
list := make([]map[string]interface{}, 0)
scheme, host := ImageBucket(c)

if data != nil {
now := time.Now().Unix()
for _, v := range *data {
@@ -48,7 +50,7 @@ func OrderList(c *gin.Context) {
if info != nil {
for _, v1 := range *info {
tmp := map[string]string{
"img": v1.Img,
"img": ImageFormatWithBucket(scheme, host, v1.Img),
"title": v1.Title,
"sku_str": "",
}
@@ -165,9 +167,11 @@ func OrderDetail(c *gin.Context) {
goodsInfo := make([]map[string]string, 0)
info := db.GetOrderInfoAllEg(MasterDb(c), utils.Int64ToStr(data.Oid))
if info != nil {
scheme, host := ImageBucket(c)

for _, v := range *info {
tmp := map[string]string{
"img": v.Img,
"img": ImageFormatWithBucket(scheme, host, v.Img),
"title": v.Title,
"price": v.Price,
"num": utils.IntToStr(v.Num),
@@ -497,6 +501,11 @@ func OrderCreate(c *gin.Context) {
Amount: totalPrice,
MealNum: utils.StrToInt(arg.MealNum),
}
if store.ParentUid > 0 { //代理下门店
order.StoreType = 2
order.ParentUid = store.ParentUid
order.AgentCommission = utils.Float64ToStr(utils.FloatFormat(utils.AnyToFloat64(totalPrice)*(utils.AnyToFloat64(store.AgentCommission)/100), 2))
}
if utils.StrToFloat64(coupon) > 0 {
order.CouponId = utils.StrToInt(arg.CouponId)
}


+ 11
- 0
app/svc/svc_pay_community_team.go 查看文件

@@ -6,9 +6,11 @@ import (
"applet/app/e"
"applet/app/md"
"applet/app/utils"
"errors"
"fmt"
"github.com/gin-gonic/gin"
"github.com/shopspring/decimal"
"github.com/tidwall/gjson"
"math"
"math/rand"
"time"
@@ -39,6 +41,7 @@ func AlipayCommunityTeam(c *gin.Context) (interface{}, error) {
OrdId: utils.AnyToString(ord.Oid),
OrderType: md.CommunityTeam,
Uid: utils.IntToStr(ord.Uid),
AgentId: ord.ParentUid,
}
r, err := PrepareAlipayCode(c, payParams)
if err != nil {
@@ -62,6 +65,14 @@ func WxPayCommunityTeam(c *gin.Context) (interface{}, error) {
"pay_wx_api_key": SysCfgGet(c, "pay_wx_api_key"),
"uid": utils.IntToStr(ord.Uid),
}
if ord.ParentUid > 0 {
user, _ := db.UserThirdPartyFindByID(MasterDb(c), ord.ParentUid)
if user.WechatPayInfo == "" {
return nil, errors.New("支付失败")
}
params["pay_wx_mch_id"] = gjson.Get(user.WechatPayInfo, "pay_wx_mch_id").String()
params["pay_wx_api_key"] = gjson.Get(user.WechatPayInfo, "pay_wx_api_key").String()
}
params["notify_url"] = fmt.Sprintf(md.CALLBACK_URL, c.Request.Host, c.GetString("mid"), params["order_type"], md.WX_PAY)
r, err = CommPayData(c, params)
if err != nil {


+ 51
- 0
app/svc/svc_store.go 查看文件

@@ -60,6 +60,57 @@ func BankStore(c *gin.Context) {
e.OutSuc(c, storeList, nil)
return
}
func NewStore(c *gin.Context) {
var arg map[string]string
if err := c.ShouldBindJSON(&arg); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err)
return
}
arg["store_type"] = "3"
user, _ := GetDefaultUser(c, c.GetHeader("Authorization"))
var store = make([]map[string]string, 0)
if arg["cid"] == "2" {
store = db.GetStoreLike(MasterDb(c), arg)
} else {
store = db.GetStore(MasterDb(c), arg)
}
storeList := make([]map[string]interface{}, 0)
for _, v := range store {
km := v["km"]
if utils.StrToFloat64(v["km"]) < 1 {
v["km"] = utils.IntToStr(int(utils.StrToFloat64(v["km"])*1000)) + "m"
} else {
v["km"] = GetCommissionPrec(c, v["km"], "2", "1")
v["km"] += "km"
}
if utils.StrToFloat64(km) <= 0 || utils.StrToFloat64(v["lat"]) == 0 || utils.StrToFloat64(v["lng"]) == 0 {
v["km"] = "-"
}
tmp := map[string]interface{}{
"lat": v["lat"],
"lng": v["lng"],
"address": v["address"],
"name": v["name"],
"id": v["id"],
"km": v["km"],
"time_str": v["timer"],
"uid": v["uid"],
"phone": v["phone"],
"logo": v["logo"],
"is_like": "0",
"fan": "",
}
if user != nil {
count, _ := MasterDb(c).Where("uid=? and store_id=?", user.Info.Uid, v["id"]).Count(&model.CommunityTeamStoreLike{})
if count > 0 {
tmp["is_like"] = "1"
}
}
storeList = append(storeList, tmp)
}
e.OutSuc(c, storeList, nil)
return
}
func StoreLike(c *gin.Context) {
var arg map[string]string
if err := c.ShouldBindJSON(&arg); err != nil {


+ 6
- 2
app/svc/svc_store_order.go 查看文件

@@ -35,6 +35,8 @@ func StoreOrderList(c *gin.Context) {
var state = []string{"待付款", "待提货", "已完成", "已取消"}
list := make([]map[string]interface{}, 0)
if data != nil {
scheme, host := ImageBucket(c)

now := time.Now().Unix()
for _, v := range *data {
store := db.GetStoreIdEg(MasterDb(c), utils.IntToStr(v.StoreUid))
@@ -71,7 +73,7 @@ func StoreOrderList(c *gin.Context) {
tmp := map[string]string{
"title": v1.Title + skuStr,
"num": utils.IntToStr(v1.Num),
"img": v1.Img,
"img": ImageFormatWithBucket(scheme, host, v1.Img),
}
goodsInfo = append(goodsInfo, tmp)
}
@@ -174,9 +176,11 @@ func StoreOrderDetail(c *gin.Context) {
goodsInfo := make([]map[string]string, 0)
info := db.GetOrderInfoAllEg(MasterDb(c), utils.Int64ToStr(data.Oid))
if info != nil {
scheme, host := ImageBucket(c)

for _, v := range *info {
tmp := map[string]string{
"img": v.Img,
"img": ImageFormatWithBucket(scheme, host, v.Img),
"title": v.Title,
"price": v.Price,
"num": utils.IntToStr(v.Num),


+ 86
- 1572
docs/docs.go
文件差異過大導致無法顯示
查看文件


+ 79
- 1527
docs/swagger.json
文件差異過大導致無法顯示
查看文件


+ 48
- 999
docs/swagger.yaml
文件差異過大導致無法顯示
查看文件


+ 4
- 25
go.mod 查看文件

@@ -3,14 +3,11 @@ module applet
go 1.15

require (
code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git v1.1.2-0.20240702071747-c6b3b336ad1c
code.fnuoos.com/go_rely_warehouse/zyos_go_coupon.git v1.1.2
code.fnuoos.com/go_rely_warehouse/zyos_go_jg_push.git v1.0.2
code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git v1.9.10-0.20240823083437-5a9b1907d83c
code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git v1.6.2-0.20240105031805-d6d481cf00c0
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
github.com/bitly/go-simplejson v0.5.0
github.com/boombuler/barcode v1.0.1
github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5
github.com/dgrijalva/jwt-go v3.2.0+incompatible
@@ -25,53 +22,35 @@ require (
github.com/iGoogle-ink/gopay v1.5.36
github.com/jinzhu/copier v0.4.0
github.com/makiuchi-d/gozxing v0.1.1
github.com/mvdan/xurls v1.1.0
github.com/nilorg/sdk v0.0.0-20221104025912-4b6ccb7004d8
github.com/opesun/goquery v0.0.0-20160908163916-0d77e43213cd
github.com/pkg/errors v0.9.1
github.com/qiniu/api.v7/v7 v7.8.2
github.com/robfig/cron/v3 v3.0.1
github.com/shopspring/decimal v1.3.1
github.com/swaggo/swag v1.7.0
github.com/swaggo/swag v1.8.12
github.com/syyongx/php2go v0.9.8
github.com/tidwall/gjson v1.17.0
github.com/xluohome/phonedata v0.0.0-20220123041135-c005bb2f5d35
go.uber.org/zap v1.23.0
golang.org/x/sync v0.2.0
golang.org/x/sync v0.2.0 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1
gopkg.in/yaml.v2 v2.4.0
xorm.io/xorm v1.3.2
)

require (
code.fnuoos.com/go_rely_warehouse/zyos_go_day_luck_draw.git v1.2.0
code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20230113125201-a16543b7da1d
code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5
code.fnuoos.com/go_rely_warehouse/zyos_go_o2o_business.git v1.0.10-0.20240710030252-6d4151ab994b
code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240830072333-a1980ffb256e
code.fnuoos.com/go_rely_warehouse/zyos_model.git v0.0.4-0.20240816014008-a236ebf42395
github.com/andybalholm/cascadia v1.2.0 // indirect
github.com/antchfx/htmlquery v1.2.3 // indirect
github.com/antchfx/xmlquery v1.3.5 // indirect
github.com/antchfx/xpath v1.1.11 // indirect
github.com/cc14514/go-geoip2 v0.0.0-20190105051856-0a1854480a11
github.com/cc14514/go-geoip2-db v0.0.0-20190106063142-7b6408a9812a
github.com/dchest/captcha v1.0.0
github.com/fogleman/gg v1.3.0
github.com/go-openapi/spec v0.20.3 // indirect
github.com/go-openapi/swag v0.19.15 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
github.com/gookit/color v1.3.8 // indirect
github.com/gorilla/sessions v1.2.1 // indirect
github.com/json-iterator/go v1.1.12
github.com/kennygrant/sanitize v1.2.4 // indirect
github.com/olivere/elastic/v7 v7.0.32
github.com/rakyll/statik v0.1.7 // indirect
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca // indirect
github.com/swaggo/files v1.0.1
github.com/swaggo/gin-swagger v1.6.0
github.com/temoto/robotstxt v1.1.2 // indirect
github.com/wenlng/go-captcha v1.2.5
golang.org/x/image v0.0.0-20220902085622-e7cb96979f69
golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/grpc v1.33.2


+ 34
- 54
go.sum 查看文件

@@ -13,30 +13,18 @@ cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git v1.1.2-0.20240702071747-c6b3b336ad1c h1:7oW6off5WIplX2hd+BDO/bS/iU/WIQPHBh6uUHjJspU=
code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git v1.1.2-0.20240702071747-c6b3b336ad1c/go.mod h1:3dgECgbJufgRYy8O714HGkrkYshaIAv30ShFBsSaCfs=
code.fnuoos.com/go_rely_warehouse/zyos_go_coupon.git v1.1.2 h1:DHsLo+xOvr72LwJOKEV0fT19zEKqbJtAGYv5kDLUZrc=
code.fnuoos.com/go_rely_warehouse/zyos_go_coupon.git v1.1.2/go.mod h1:yr9zroGixMbJ5gm+lVLVcUAZ4mRIaFlWHtBBTLJm5z0=
code.fnuoos.com/go_rely_warehouse/zyos_go_day_luck_draw.git v1.2.0 h1:OYaoKdrpK0obnK/OMJ0Bg8DyU1Uliq35xPljaRGvDAY=
code.fnuoos.com/go_rely_warehouse/zyos_go_day_luck_draw.git v1.2.0/go.mod h1:Yc/SFCnyo6Ninzr+BrcXdkwoEEthMGSgWG+J0Oo8HtE=
code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20230113125201-a16543b7da1d h1:w87z133GUwiw6l3eSvoYt52pPR3lLiX9E08flRVcecE=
code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20230113125201-a16543b7da1d/go.mod h1:aHatysIWFJ4DzLRSDljlbMObA61wYivI9ab9sygiA8s=
code.fnuoos.com/go_rely_warehouse/zyos_go_jg_push.git v1.0.2 h1:LUWlvBgmzZfGqvH4VGEWk+JhXHlI+MFmLNl9uX7eh28=
code.fnuoos.com/go_rely_warehouse/zyos_go_jg_push.git v1.0.2/go.mod h1:IEw6A61Kp2ctoeKIQMFVM/cFq9PUDAzJMb5lVXiEY2Y=
code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5 h1:dqvWJqlJi0WXCwTxbWPLvSOsKPjP+iEDBVgLcAl9nOE=
code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5/go.mod h1:TTcCnFn/LhBGapnutpezlW+GXkLRNPMWkziOoCsXQqY=
code.fnuoos.com/go_rely_warehouse/zyos_go_o2o_business.git v1.0.10-0.20240710030252-6d4151ab994b h1:qJ3n/N84ByxpbHXsMB3319cvffLwa3Gcnx7WMqNvpX0=
code.fnuoos.com/go_rely_warehouse/zyos_go_o2o_business.git v1.0.10-0.20240710030252-6d4151ab994b/go.mod h1:8lqoRm7PkDuPV9shACAu3B+LPplV99cgOxM91Z+pa5k=
code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git v1.9.10-0.20240118152737-08e0d2709655/go.mod h1:Q/C2vLPgAWDPyKyll2sFRWdJsw26nZknL+mjGGB1uuw=
code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git v1.9.10-0.20240823083437-5a9b1907d83c h1:wKd5mCUszsNwe+qpUyxPfjsZ+CquyKaHad9Ci3pfeMo=
code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git v1.9.10-0.20240823083437-5a9b1907d83c/go.mod h1:LXKefjdbY6D+P1jALLM87wDej8N5D+sLub4YfrnU7TA=
code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git v1.6.2-0.20240105031805-d6d481cf00c0 h1:Y2PHy4RxhpPPy6hrSsDnzK+mEbY76If3UJGZIk6cmg4=
code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git v1.6.2-0.20240105031805-d6d481cf00c0/go.mod h1:0eObND+Vum1rxf8Ro5ai16phWdWGZ3lkKDXqO/v082s=
code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240826023213-74e7e23bee7c h1:yfSb2PgHMmNlvdQCkdFFZF9i5yrQNMGgFARs9VzPrf0=
code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240826023213-74e7e23bee7c/go.mod h1:WEwF5BOzArem2a/EMJqoZ6gxb0DIEADruUROS4s5bNA=
code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240830072333-a1980ffb256e h1:9uiwLba7UGSyox/83pJkho1akyDKJf9bRb/fTcPmAaE=
code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240830072333-a1980ffb256e/go.mod h1:WEwF5BOzArem2a/EMJqoZ6gxb0DIEADruUROS4s5bNA=
code.fnuoos.com/go_rely_warehouse/zyos_model.git v0.0.4-0.20240816014008-a236ebf42395 h1:xM3v+GLMYQMYeyp48SzJOXvylsbNRbdlvWRMXViWwFI=
code.fnuoos.com/go_rely_warehouse/zyos_model.git v0.0.4-0.20240816014008-a236ebf42395/go.mod h1:nT2x13YFgrS3tS1fDyUR6q/GNIK+hPw7bdzZXz99SM0=
contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA=
dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU=
@@ -130,11 +118,9 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y=
github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw=
github.com/boombuler/barcode v1.0.1 h1:NDBbPmhS+EqABEs5Kg3n/5ZNjy73Pz7SIV+KCeqyXcs=
@@ -144,13 +130,10 @@ github.com/bradfitz/gomemcache v0.0.0-20190329173943-551aad21a668/go.mod h1:H0wQ
github.com/bradleypeabody/gorilla-sessions-memcache v0.0.0-20181103040241-659414f458e1/go.mod h1:dkChI7Tbtx7H1Tj7TqGSZMOeGpMP5gLHtjroHd4agiI=
github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
github.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
github.com/cc14514/go-geoip2 v0.0.0-20190105051856-0a1854480a11 h1:smFM+R9NconJ5FHiMyQsq/fIjtYE0jxVJwX8ZxAmWF0=
github.com/cc14514/go-geoip2 v0.0.0-20190105051856-0a1854480a11/go.mod h1:gC4wJD6T+unJtW078G4ugNE2UNbk4/oYwQKteOaybQE=
github.com/cc14514/go-geoip2-db v0.0.0-20190106063142-7b6408a9812a h1:tc57+CsbpTjJLvcp2AyVAvaYmS0FFxSaRCQeUa4jcHg=
github.com/cc14514/go-geoip2-db v0.0.0-20190106063142-7b6408a9812a/go.mod h1:MBxCt6+ltWZRodx2FgXuQm7LQweWyPofmXsuhX3D6Zo=
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/cenkalti/backoff/v4 v4.0.0/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg=
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -199,8 +182,6 @@ github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dchest/captcha v1.0.0 h1:vw+bm/qMFvTgcjQlYVTuQBJkarm5R0YSsDKhm1HZI2o=
github.com/dchest/captcha v1.0.0/go.mod h1:7zoElIawLp7GUMLcj54K9kbw+jEyvz2K0FDdRRYhvWo=
github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5 h1:RAV05c0xOkJ3dZGS0JFybxFKZ2WMLabgx3uXnd7rpGs=
github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5/go.mod h1:GgB8SF9nRG+GqaDtLcwJZsQFhcogVCJ79j4EdT0c2V4=
github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
@@ -237,8 +218,6 @@ github.com/exoscale/egoscale v0.18.1/go.mod h1:Z7OOdzzTOz1Q1PjQXumlz9Wn/CddH0zSY
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/forgoer/openssl v1.2.1 h1:Qvgk8K+pKayd3QG/f7fB2LJm1ObYNA2iqYraipxm8jQ=
github.com/forgoer/openssl v1.2.1/go.mod h1:NMVFOzYeLVR7UiGTxsa+A21nrERTZ3Rv2JHDPcJpDyI=
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
@@ -253,6 +232,8 @@ github.com/fsouza/go-dockerclient v1.6.0/go.mod h1:YWwtNPuL4XTX1SKJQk86cWPmmqwx+
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4=
github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk=
github.com/gin-contrib/sessions v0.0.3 h1:PoBXki+44XdJdlgDqDrY5nDVe3Wk7wDV/UCOuLP6fBI=
github.com/gin-contrib/sessions v0.0.3/go.mod h1:8C/J6cad3Il1mWYYgtw0w+hqasmpvy25mPkXdOgeB9I=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
@@ -260,6 +241,8 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/gin-gonic/gin v1.8.0/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk=
github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk=
github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k=
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
@@ -288,15 +271,11 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre
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.4/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg=
github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM=
github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg=
github.com/go-openapi/spec v0.19.14/go.mod h1:gwrgJS15eCUgjLpMjBJmbZezCsw88LmgeEip0M63doA=
github.com/go-openapi/spec v0.20.3 h1:uH9RQ6vdyPSs2pSy9fL8QPspDF2AMIMPtmK5coSSjtQ=
github.com/go-openapi/spec v0.20.3/go.mod h1:gG4F8wdEDN+YPBMVnzE85Rbhf+Th2DTvA9nFPQ5AYEg=
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.11/go.mod h1:Uc0gKkdR+ojzsEpjh39QChyu92vPgIr72POcgHMAgSY=
github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
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/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
@@ -314,6 +293,7 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s=
github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js=
github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg=
@@ -333,6 +313,7 @@ github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6Wezm
github.com/gobwas/ws v1.0.3/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
github.com/goccy/go-json v0.8.1/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/gocolly/colly v1.2.0 h1:qRz9YAn8FIH0qzgNUw+HT9UN7wm1oF9OBAilwEWpyrI=
@@ -348,8 +329,6 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A=
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -635,6 +614,7 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
@@ -668,7 +648,6 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/mvdan/xurls v1.1.0 h1:OpuDelGQ1R1ueQ6sSryzi6P+1RtBpfQHM8fJwlE45ww=
github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04/go.mod h1:5sN+Lt1CaY4wsPvgQH/jsuJi4XO2ssZbdsIizr4CVC8=
@@ -683,7 +662,6 @@ github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uY
github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo=
github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/nilorg/sdk v0.0.0-20221104025912-4b6ccb7004d8 h1:9hvJ/9GQssABrUYNOW1Q6X9/7uY6+Srj9YYYQZVC0AE=
github.com/nilorg/sdk v0.0.0-20221104025912-4b6ccb7004d8/go.mod h1:X1swpPdqguAZaBDoEPyEWHSsJii0YQ1o+3piMv6W3JU=
github.com/nrdcg/auroradns v1.0.0/go.mod h1:6JPXKzIRzZzMqtTDgueIhTi6rFf1QvYE/HzqidhOhjw=
github.com/nrdcg/dnspod-go v0.4.0/go.mod h1:vZSoFSFeQVm2gWLMkyX61LZ8HI3BaqtHZWgPTGKr6KQ=
@@ -734,8 +712,6 @@ github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTm
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
github.com/opesun/goquery v0.0.0-20160908163916-0d77e43213cd h1:taV1toAfzAdRwNWpIB7JMdgX2xL+JT3Rq8GXzyPK1Is=
github.com/opesun/goquery v0.0.0-20160908163916-0d77e43213cd/go.mod h1:XIY7IuxoZH2deZdjIgzLqXlYkOHiwNC+hL1m3vS2A8g=
github.com/oracle/oci-go-sdk v7.0.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888=
github.com/ovh/go-ovh v0.0.0-20181109152953-ba5adb4cf014/go.mod h1:joRatxRJaZBsY3JAOEMcoOp05CnZzsx4scTxi95DHyQ=
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
@@ -746,6 +722,7 @@ github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtP
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek=
github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
@@ -795,8 +772,6 @@ github.com/qiniu/api.v7/v7 v7.8.2 h1:f08kI0MmsJNzK4sUS8bG3HDH67ktwd/ji23Gkiy2ra4
github.com/qiniu/api.v7/v7 v7.8.2/go.mod h1:FPsIqxh1Ym3X01sANE5ZwXfLZSWoCUp5+jNI8cLo3l0=
github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg=
github.com/rainycape/memcache v0.0.0-20150622160815-1031fa0ce2f2/go.mod h1:7tZKcyumwBO6qip7RNQ5r77yrssm9bfCowcLEBcU5IA=
github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ=
github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
@@ -900,8 +875,12 @@ github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/swaggo/swag v1.7.0 h1:5bCA/MTLQoIqDXXyHfOpMeDvL9j68OY/udlK4pQoo4E=
github.com/swaggo/swag v1.7.0/go.mod h1:BdPIL73gvS9NBsdi7M1JOxLvlbfvNRaBP8m6WT6Aajo=
github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE=
github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg=
github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M=
github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo=
github.com/swaggo/swag v1.8.12 h1:pctzkNPu0AlQP2royqX3apjKCQonAnf7KGoxeO4y64w=
github.com/swaggo/swag v1.8.12/go.mod h1:lNfm6Gg+oAq3zRJQNEMBE66LIJKM44mxFqhEEgy2its=
github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
@@ -934,6 +913,7 @@ github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo=
github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
github.com/ugorji/go/codec v1.2.9/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
@@ -946,16 +926,12 @@ github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+
github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU=
github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM=
github.com/vultr/govultr v0.1.4/go.mod h1:9H008Uxr/C4vFNGLqKx232C206GL0PBHzOP0809bGNA=
github.com/wenlng/go-captcha v1.2.5 h1:zA0/fovEl9oAhSg+KwHBwmq99GeeAXknWx6wYKjhjTg=
github.com/wenlng/go-captcha v1.2.5/go.mod h1:QgPgpEURSa37gF3GtojNoNRwbMwuatSBx5NXrzASOb0=
github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
github.com/xeipuuv/gojsonschema v1.1.0/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xluohome/phonedata v0.0.0-20220123041135-c005bb2f5d35 h1:CzJpvB76GmmRNs4AVpGEuhO+gien7G5CcC+8vaIIWPI=
github.com/xluohome/phonedata v0.0.0-20220123041135-c005bb2f5d35/go.mod h1:xLEBvbUFvuBHRWeV/SNefGARR5QedFRkThwnodnmCKw=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
@@ -1038,6 +1014,7 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/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.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
@@ -1049,9 +1026,6 @@ golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
golang.org/x/image v0.0.0-20220902085622-e7cb96979f69 h1:Lj6HJGCSn5AjxRAH2+r35Mir4icalbqku+CLUtjnvXY=
golang.org/x/image v0.0.0-20220902085622-e7cb96979f69/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY=
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -1071,8 +1045,9 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/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 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs=
golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180611182652-db08ff08e862/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1097,7 +1072,6 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190930134127-c5a3c61f89f3/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -1113,15 +1087,17 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM=
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/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-20221004154528-8021a29435af/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.7.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 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
@@ -1141,7 +1117,6 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
@@ -1195,6 +1170,7 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/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-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -1207,6 +1183,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/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-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.4.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/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
@@ -1214,6 +1192,7 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
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.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
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 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=
@@ -1224,10 +1203,10 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3
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.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/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.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.6.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/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
@@ -1269,13 +1248,13 @@ golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapK
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20201120155355-20be4ac4bd6e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4=
golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -1351,6 +1330,7 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=


Loading…
取消
儲存