huangjiajun vor 1 Jahr
Ursprung
Commit
c21b288767
27 geänderte Dateien mit 2606 neuen und 34 gelöschten Zeilen
  1. +64
    -29
      dataoke/dataoke.go
  2. +18
    -0
      db/db.go
  3. +24
    -0
      db/db_sys_cfg.go
  4. +125
    -0
      db/db_sys_union.go
  5. +7
    -0
      db/model/sys_cfg.go
  6. +27
    -0
      db/model/sys_union_set.go
  7. +2
    -0
      go.mod
  8. +583
    -5
      go.sum
  9. +62
    -0
      haodanku/haodanku.go
  10. +56
    -0
      md/dataoke.go
  11. +88
    -0
      md/haodanku.go
  12. +40
    -0
      md/platform.go
  13. +71
    -0
      md/taobao.go
  14. +29
    -0
      md/tik_tok.go
  15. +80
    -0
      md/zhimeng.go
  16. +214
    -0
      taobao/api.go
  17. +136
    -0
      taobao/base.go
  18. +249
    -0
      taobao/search_list.go
  19. +61
    -0
      taobao/taobao.go
  20. +122
    -0
      tik_tok/base.go
  21. +81
    -0
      tik_tok/tik_tok_goods.go
  22. +65
    -0
      zhimeng/api.go
  23. +38
    -0
      zhimeng/jd.go
  24. +58
    -0
      zhimeng/kuaishou_goods.go
  25. +38
    -0
      zhimeng/pdd.go
  26. +230
    -0
      zhimeng/tik_tok_goods.go
  27. +38
    -0
      zhimeng/wph.go

+ 64
- 29
dataoke/dataoke.go Datei anzeigen

@@ -45,32 +45,67 @@ func DataokeFriendsCircleList(params map[string]string) []map[string]string {
return goods
}

//func DataokeFriendsCircleList(params map[string]string) []map[string]string {
// var goods = make([]map[string]string, 0)
// resp, err := SendReq("https://openapi.dataoke.com/api/goods/friends-circle-list", params)
// if err != nil {
// return goods
// }
// data := gjson.Get(string(resp), "data").String()
// if data == "" {
// return goods
// }
// var oldGoods []md.HaodankuSelectedItem
// json.Unmarshal([]byte(data), &oldGoods)
// for _, v := range oldGoods {
//var tmp = map[string]string{
// "gid": v.Itemid,
// "title": v.Title,
// "img": img,
// "sales": "",
// "price": v.Itemendprice,
// "cost_price": v.Itemprice,
// "coupon": v.Couponmoney,
// "commission_rate": v.Tkrates,
// "commission": zhios_third_party_utils.Float64ToStr(zhios_third_party_utils.StrToFloat64(v.Itemendprice) * (zhios_third_party_utils.StrToFloat64(v.Tkrates) / 100)),
// "pvd": "taobao",
// "share_content": content,
//}
//goods = append(goods, tmp)
//}
//}
func DataokeTaobaoRankList(params map[string]string) []map[string]string {
var goods = make([]map[string]string, 0)
resp, err := SendReq("https://openapi.dataoke.com/api/goods/get-ranking-list", params)
if err != nil {
return goods
}
data := gjson.Get(string(resp), "data").String()
if data == "" {
return goods
}
var oldGoods []md.DataokeTaobaoRankList
json.Unmarshal([]byte(data), &oldGoods)
for _, v := range oldGoods {
pvd := md.PVD_TB
var tmp = map[string]string{
"gid": v.Goodsid,
"title": v.Dtitle,
"img": v.Mainpic,
"sales": zhios_third_party_utils.IntToStr(v.Monthsales),
"day_sales": zhios_third_party_utils.IntToStr(v.Dailysales),
"price": zhios_third_party_utils.AnyToString(v.Originalprice),
"cost_price": zhios_third_party_utils.AnyToString(v.Actualprice),
"coupon": zhios_third_party_utils.AnyToString(v.Couponprice),
"commission_rate": zhios_third_party_utils.AnyToString(v.Commissionrate),
"commission": zhios_third_party_utils.Float64ToStr(zhios_third_party_utils.AnyToFloat64(v.Actualprice) * (zhios_third_party_utils.AnyToFloat64(v.Commissionrate) / 100)),
"pvd": pvd,
"share_content": v.Desc,
}
goods = append(goods, tmp)
}
return goods
}
func DataokeTikTokRankList(params map[string]string) []map[string]string {
var goods = make([]map[string]string, 0)
resp, err := SendReq("https://openapi.dataoke.com/api/tiktok/tiktok-sx-goods-rank", params)
if err != nil {
return goods
}
data := gjson.Get(string(resp), "data").String()
if data == "" {
return goods
}
var oldGoods []md.DataokeTikTokRankList
json.Unmarshal([]byte(data), &oldGoods)
for _, v := range oldGoods {
pvd := md.PVD_TIKTOK
var tmp = map[string]string{
"gid": v.ID,
"title": v.Title,
"img": v.ItemImg,
"sales": zhios_third_party_utils.Int64ToStr(v.Sales),
"day_sales": "",
"price": zhios_third_party_utils.AnyToString(v.Price - v.Coupon),
"cost_price": zhios_third_party_utils.AnyToString(v.Price),
"coupon": zhios_third_party_utils.AnyToString(v.Coupon),
"commission_rate": zhios_third_party_utils.AnyToString(v.CosRatio),
"commission": zhios_third_party_utils.Float64ToStr((v.Price - v.Coupon) * (zhios_third_party_utils.AnyToFloat64(v.CosRatio) / 100)),
"pvd": pvd,
"share_content": "",
}
goods = append(goods, tmp)
}
return goods
}

+ 18
- 0
db/db.go Datei anzeigen

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

import "xorm.io/xorm"

func QueryNativeString(Db *xorm.Engine, sql string, args ...interface{}) ([]map[string]string, error) {
results, err := Db.SQL(sql, args...).QueryString()
return results, err
}
func QueryNativeStringSess(sess *xorm.Session, sql string, args ...interface{}) ([]map[string]string, error) {
results, err := sess.SQL(sql, args...).QueryString()
return results, err
}

// InsertCommWithSession common insert
func InsertCommWithSession(session *xorm.Session, model interface{}) (int64, error) {
row, err := session.InsertOne(model)
return row, err
}

+ 24
- 0
db/db_sys_cfg.go Datei anzeigen

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

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/db/model"
"xorm.io/xorm"
)

func SysCfgGetWithDb(eg *xorm.Engine, masterId string, HKey string) string {
cfg, err := SysCfgGetOne(eg, HKey)
if err != nil || cfg == nil {
return ""
}

return cfg.Val
}

// 获取一条记录
func SysCfgGetOne(Db *xorm.Engine, key string) (*model.SysCfg, error) {
var cfgList model.SysCfg
if has, err := Db.Where("`key`=?", key).Get(&cfgList); err != nil || has == false {
return nil, err
}
return &cfgList, nil
}

+ 125
- 0
db/db_sys_union.go Datei anzeigen

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

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/db/model"
"errors"
"xorm.io/xorm"
)

// SysUnionByTaobaoByUseByAuth is 正在使用Taobao且已授权的设置
func SysUnionByTaobaoByUseByAuth(Db *xorm.Engine, masterId string) (*model.SysUnionSet, error) {
var (
m model.SysUnionSet
)
has, err := Db.Where("provider = 'taobao' AND is_use = 1 AND auth_status = 1").Get(&m)
if err != nil {
return nil, err
}
if !has {
return nil, errors.New("找不到联盟设置")
}

return &m, nil
}
func SysUnionByMeituanByUseByAuth(Db *xorm.Engine, masterId string) (*model.SysUnionSet, error) {
var (
m model.SysUnionSet
)
has, err := Db.Where("provider = 'meituan' AND is_use = 1 ").Get(&m)
if err != nil {
return nil, err
}
if !has {
return nil, errors.New("找不到联盟设置")
}

return &m, nil
}
func SysUnionByTikTokByUseByAuth(Db *xorm.Engine, masterId string) (*model.SysUnionSet, error) {
var (
m model.SysUnionSet
)
has, err := Db.Where("provider = 'tikTok' AND is_use = 1 ").Get(&m)
if err != nil {
return nil, err
}
if !has {
return nil, errors.New("找不到联盟设置")
}

return &m, nil
}
func SysUnionByElmByUseByAuth(Db *xorm.Engine, masterId string) (*model.SysUnionSet, error) {
var (
m model.SysUnionSet
)
has, err := Db.Where("provider = 'elm' AND is_use = 1 ").Get(&m)
if err != nil {
return nil, err
}
if !has {
return nil, errors.New("找不到联盟设置")
}

return &m, nil
}
func SysUnionByTikTokByUseByAuthId(Db *xorm.Engine, id string) (*model.SysUnionSet, error) {
var (
m model.SysUnionSet
)
has, err := Db.Where("provider = 'tikTok' AND id=? ", id).Get(&m)
if err != nil {
return nil, err
}
if !has {
return nil, errors.New("找不到联盟设置")
}

return &m, nil
}
func SysUnionByTikTokByUseByAuthNoCache(Db *xorm.Engine, masterId string) (*model.SysUnionSet, error) {
var (
m model.SysUnionSet
)

has, err := Db.Where("provider = 'tikTok' AND is_use = 1 ").Get(&m)
if err != nil {
return nil, err
}
if !has {
return nil, errors.New("找不到联盟设置")
}
return &m, nil
}

// SysUnionByPVDByUse is 正在使用的设置
func SysUnionByPVDByUse(Db *xorm.Engine, masterId, pvd string) (*model.SysUnionSet, error) {
var (
m model.SysUnionSet
)
has, err := Db.Where("provider = ? AND is_use = 1", pvd).Get(&m)
if err != nil {
return nil, err
}
if !has {
return nil, errors.New("找不到联盟设置")
}

return &m, nil
}

// 更新记录
func SysUnionUpdate(Db *xorm.Engine, data *model.SysUnionSet) {
row, err := Db.ID(data.Id).AllCols().Update(data)
if err != nil || row == 0 {

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

+ 7
- 0
db/model/sys_cfg.go Datei anzeigen

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

type SysCfg struct {
Key string `json:"key" xorm:"not null pk comment('键') VARCHAR(127)"`
Val string `json:"val" xorm:"comment('值') TEXT"`
Memo string `json:"memo" xorm:"not null default '' comment('备注') VARCHAR(255)"`
}

+ 27
- 0
db/model/sys_union_set.go Datei anzeigen

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

import (
"time"
)

type SysUnionSet struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
Provider string `json:"provider" xorm:"not null default '' comment('联盟类型;taobao:淘宝;jd:京东;pdd:多多(拼多多);vip:唯品会;suning:苏宁;kaola:考拉;duomai:多麦') VARCHAR(32)"`
Name string `json:"name" xorm:"not null default '' comment('备注名') VARCHAR(32)"`
ChannelList string `json:"channel_list" xorm:"not null default '["share","weixin","android","ios"]' comment('渠道开关;share:分享;weixin:微信;android:安卓;ios:ios') VARCHAR(64)"`
AuthType int `json:"auth_type" xorm:"not null default 1 comment('授权模式;1:跟随官方;2:自有联盟账号') TINYINT(1)"`
LiveAuthType int `json:"live_auth_type" xorm:"not null default 1 comment('授权模式;1:跟随官方;2:自有联盟账号') TINYINT(1)"`
PromoteShare string `json:"promote_share" xorm:"not null default '' comment('分享推广位') VARCHAR(128)"`
SelfShare string `json:"self_share" xorm:"not null default '' comment('自购推广位') VARCHAR(128)"`
KeyData string `json:"key_data" xorm:"comment('联盟key的值') TEXT"`
IsUse int `json:"is_use" xorm:"default 0 comment('是否启用;0否;1是') TINYINT(3)"`
AuthStatus int `json:"auth_status" xorm:"default 0 comment('授权状态;0:未授权;1:已授权') TINYINT(1)"`
AuthTime time.Time `json:"auth_time" xorm:"comment('授权时间') TIMESTAMP"`
SyncTime time.Time `json:"sync_time" xorm:"comment('订单同步时间') TIMESTAMP"`
ExpireTime time.Time `json:"expire_time" xorm:"TIMESTAMP"`
CreateAt time.Time `json:"create_at" xorm:"not null default CURRENT_TIMESTAMP TIMESTAMP"`
UpdateAt time.Time `json:"update_at" xorm:"not null default CURRENT_TIMESTAMP TIMESTAMP"`
IsDelete int `json:"is_delete" xorm:"not null default 0 TINYINT(1)"`
AppletIsAuth int `json:"applet_is_auth" xorm:"not null default 0 TINYINT(1)"`
AppletPid string `json:"applet_pid" xorm:"not null comment('') TEXT"`
}

+ 2
- 0
go.mod Datei anzeigen

@@ -9,6 +9,7 @@ require (
github.com/golang/protobuf v1.5.3 // indirect
github.com/gomodule/redigo v1.8.9
github.com/google/go-cmp v0.5.9 // indirect
github.com/jinzhu/copier v0.3.5
github.com/kr/pretty v0.3.1 // indirect
github.com/nilorg/sdk v0.0.0-20221104025912-4b6ccb7004d8
github.com/onsi/ginkgo v1.16.5 // indirect
@@ -18,4 +19,5 @@ require (
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97
google.golang.org/protobuf v1.28.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
xorm.io/xorm v1.3.2
)

+ 583
- 5
go.sum Datei anzeigen

@@ -1,21 +1,107 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s=
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU=
gitee.com/travelliu/dm v1.8.11192/go.mod h1:DHTzyhCrM843x9VdKVbZ+GKXGRbKM2sJ4LxihRxShkE=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
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/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/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/denisenkom/go-mssqldb v0.10.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg=
github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
github.com/goccy/go-json v0.8.1 h1:4/Wjm0JIJaTDm8K1KcGrLHJoa8EsJ13YWeX+6Kfq6uI=
github.com/goccy/go-json v0.8.1/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
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-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
@@ -26,47 +112,283 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/gomodule/redigo v1.8.9 h1:Sl3u+2BI/kk+VEatbj0scLdrFhjPmbxOc1myhDP41ws=
github.com/gomodule/redigo v1.8.9/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo=
github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA=
github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE=
github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s=
github.com/jackc/pgconn v1.4.0/go.mod h1:Y2O3ZDF0q4mMacyWV3AstPJpeHXWGEetiFttmq5lahk=
github.com/jackc/pgconn v1.5.0/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI=
github.com/jackc/pgconn v1.5.1-0.20200601181101-fa742c524853/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI=
github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o=
github.com/jackc/pgconn v1.8.1/go.mod h1:JV6m6b6jhjdmzchES0drzCcYcAHS1OPD5xu3OZ/lE2g=
github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY=
github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8=
github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE=
github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c=
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78=
github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA=
github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg=
github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM=
github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM=
github.com/jackc/pgproto3/v2 v2.0.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
github.com/jackc/pgservicefile v0.0.0-20200307190119-3430c5407db8/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E=
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E=
github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg=
github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc=
github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw=
github.com/jackc/pgtype v1.2.0/go.mod h1:5m2OfMh1wTK7x+Fk952IDmI4nw3nPrvtQdM0ZT4WpC0=
github.com/jackc/pgtype v1.3.1-0.20200510190516-8cd94a14c75a/go.mod h1:vaogEUkALtxZMCH411K+tKzNpwzCKU+AnPzBKZ+I+Po=
github.com/jackc/pgtype v1.3.1-0.20200606141011-f6355165a91c/go.mod h1:cvk9Bgu/VzJ9/lxTO5R5sf80p0DiucVtN7ZxvaC4GmQ=
github.com/jackc/pgtype v1.7.0/go.mod h1:ZnHF+rMePVqDKaOfJVI4Q8IVvAQMryDlDkZnKOI75BE=
github.com/jackc/pgtype v1.8.0/go.mod h1:PqDKcEBtllAtk/2p6z6SHdXW5UB+MhE75tUol2OKexE=
github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y=
github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM=
github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc=
github.com/jackc/pgx/v4 v4.5.0/go.mod h1:EpAKPLdnTorwmPUUsqrPxy5fphV18j9q3wrfRXgo+kA=
github.com/jackc/pgx/v4 v4.6.1-0.20200510190926-94ba730bb1e9/go.mod h1:t3/cdRQl6fOLDxqtlyhe9UWgfIi9R8+8v8GKV5TRA/o=
github.com/jackc/pgx/v4 v4.6.1-0.20200606145419-4e5062306904/go.mod h1:ZDaNWkt9sW1JMiNn0kdYBaLelIhw7Pg4qd+Vk6tw7Hg=
github.com/jackc/pgx/v4 v4.11.0/go.mod h1:i62xJgdrtVDsnL3U8ekyrQXEwGNTRoG7/8r+CIdYfcc=
github.com/jackc/pgx/v4 v4.12.0/go.mod h1:fE547h6VulLPA3kySjfnSG/e2D861g/50JlVUa/ub60=
github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg=
github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-sqlite3 v1.14.9 h1:10HX2Td0ocZpYEjhilsuo6WWtUqttj2Kb0KtD86/KYA=
github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
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/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=
github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
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/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc=
github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw=
github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro=
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA=
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/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
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=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
github.com/syyongx/php2go v0.9.7 h1:boZtLbm2xYbW49mX9M7Vq2zkVhBhv3fCqs2T16d2bGA=
github.com/syyongx/php2go v0.9.7/go.mod h1:meN2eIhhUoxOd2nMxbpe8g6cFPXI5O9/UAAuz7oDdzw=
github.com/tidwall/gjson v1.14.1 h1:iymTbGkQBhveq21bEvAQ81I0LEBork8BFe1CUZXdyuo=
@@ -75,57 +397,180 @@ github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
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=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/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-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc=
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-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-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
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 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e h1:4nW4NLDYnU28ojHaHO8OVxFHk/aQ33U01a9cjED+pzE=
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
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=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -136,11 +581,21 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -149,3 +604,126 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU=
lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.33.9/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.33.11/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.34.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.4/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.5/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.7/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.8/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.10/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.15/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.16/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.17/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/cc/v3 v3.35.18 h1:rMZhRcWrba0y3nVmdiQ7kxAgOOSq2m2f2VzjHLgEs6U=
modernc.org/cc/v3 v3.35.18/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60=
modernc.org/ccgo/v3 v3.10.0/go.mod h1:c0yBmkRFi7uW4J7fwx/JiijwOjeAeR2NoSaRVFPmjMw=
modernc.org/ccgo/v3 v3.11.0/go.mod h1:dGNposbDp9TOZ/1KBxghxtUp/bzErD0/0QW4hhSaBMI=
modernc.org/ccgo/v3 v3.11.1/go.mod h1:lWHxfsn13L3f7hgGsGlU28D9eUOf6y3ZYHKoPaKU0ag=
modernc.org/ccgo/v3 v3.11.3/go.mod h1:0oHunRBMBiXOKdaglfMlRPBALQqsfrCKXgw9okQ3GEw=
modernc.org/ccgo/v3 v3.12.4/go.mod h1:Bk+m6m2tsooJchP/Yk5ji56cClmN6R1cqc9o/YtbgBQ=
modernc.org/ccgo/v3 v3.12.6/go.mod h1:0Ji3ruvpFPpz+yu+1m0wk68pdr/LENABhTrDkMDWH6c=
modernc.org/ccgo/v3 v3.12.8/go.mod h1:Hq9keM4ZfjCDuDXxaHptpv9N24JhgBZmUG5q60iLgUo=
modernc.org/ccgo/v3 v3.12.11/go.mod h1:0jVcmyDwDKDGWbcrzQ+xwJjbhZruHtouiBEvDfoIsdg=
modernc.org/ccgo/v3 v3.12.14/go.mod h1:GhTu1k0YCpJSuWwtRAEHAol5W7g1/RRfS4/9hc9vF5I=
modernc.org/ccgo/v3 v3.12.18/go.mod h1:jvg/xVdWWmZACSgOiAhpWpwHWylbJaSzayCqNOJKIhs=
modernc.org/ccgo/v3 v3.12.20/go.mod h1:aKEdssiu7gVgSy/jjMastnv/q6wWGRbszbheXgWRHc8=
modernc.org/ccgo/v3 v3.12.21/go.mod h1:ydgg2tEprnyMn159ZO/N4pLBqpL7NOkJ88GT5zNU2dE=
modernc.org/ccgo/v3 v3.12.22/go.mod h1:nyDVFMmMWhMsgQw+5JH6B6o4MnZ+UQNw1pp52XYFPRk=
modernc.org/ccgo/v3 v3.12.25/go.mod h1:UaLyWI26TwyIT4+ZFNjkyTbsPsY3plAEB6E7L/vZV3w=
modernc.org/ccgo/v3 v3.12.29/go.mod h1:FXVjG7YLf9FetsS2OOYcwNhcdOLGt8S9bQ48+OP75cE=
modernc.org/ccgo/v3 v3.12.36/go.mod h1:uP3/Fiezp/Ga8onfvMLpREq+KUjUmYMxXPO8tETHtA8=
modernc.org/ccgo/v3 v3.12.38/go.mod h1:93O0G7baRST1vNj4wnZ49b1kLxt0xCW5Hsa2qRaZPqc=
modernc.org/ccgo/v3 v3.12.43/go.mod h1:k+DqGXd3o7W+inNujK15S5ZYuPoWYLpF5PYougCmthU=
modernc.org/ccgo/v3 v3.12.46/go.mod h1:UZe6EvMSqOxaJ4sznY7b23/k13R8XNlyWsO5bAmSgOE=
modernc.org/ccgo/v3 v3.12.47/go.mod h1:m8d6p0zNps187fhBwzY/ii6gxfjob1VxWb919Nk1HUk=
modernc.org/ccgo/v3 v3.12.50/go.mod h1:bu9YIwtg+HXQxBhsRDE+cJjQRuINuT9PUK4orOco/JI=
modernc.org/ccgo/v3 v3.12.51/go.mod h1:gaIIlx4YpmGO2bLye04/yeblmvWEmE4BBBls4aJXFiE=
modernc.org/ccgo/v3 v3.12.53/go.mod h1:8xWGGTFkdFEWBEsUmi+DBjwu/WLy3SSOrqEmKUjMeEg=
modernc.org/ccgo/v3 v3.12.54/go.mod h1:yANKFTm9llTFVX1FqNKHE0aMcQb1fuPJx6p8AcUx+74=
modernc.org/ccgo/v3 v3.12.55/go.mod h1:rsXiIyJi9psOwiBkplOaHye5L4MOOaCjHg1Fxkj7IeU=
modernc.org/ccgo/v3 v3.12.56/go.mod h1:ljeFks3faDseCkr60JMpeDb2GSO3TKAmrzm7q9YOcMU=
modernc.org/ccgo/v3 v3.12.57/go.mod h1:hNSF4DNVgBl8wYHpMvPqQWDQx8luqxDnNGCMM4NFNMc=
modernc.org/ccgo/v3 v3.12.60/go.mod h1:k/Nn0zdO1xHVWjPYVshDeWKqbRWIfif5dtsIOCUVMqM=
modernc.org/ccgo/v3 v3.12.65/go.mod h1:D6hQtKxPNZiY6wDBtehSGKFKmyXn53F8nGTpH+POmS4=
modernc.org/ccgo/v3 v3.12.66/go.mod h1:jUuxlCFZTUZLMV08s7B1ekHX5+LIAurKTTaugUr/EhQ=
modernc.org/ccgo/v3 v3.12.67/go.mod h1:Bll3KwKvGROizP2Xj17GEGOTrlvB1XcVaBrC90ORO84=
modernc.org/ccgo/v3 v3.12.73/go.mod h1:hngkB+nUUqzOf3iqsM48Gf1FZhY599qzVg1iX+BT3cQ=
modernc.org/ccgo/v3 v3.12.81/go.mod h1:p2A1duHoBBg1mFtYvnhAnQyI6vL0uw5PGYLSIgF6rYY=
modernc.org/ccgo/v3 v3.12.82 h1:wudcnJyjLj1aQQCXF3IM9Gz2X6UNjw+afIghzdtn0v8=
modernc.org/ccgo/v3 v3.12.82/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w=
modernc.org/ccorpus v1.11.1 h1:K0qPfpVG1MJh5BYazccnmhywH4zHuOgJXgbjzyp6dWA=
modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM=
modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w=
modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q=
modernc.org/libc v1.11.0/go.mod h1:2lOfPmj7cz+g1MrPNmX65QCzVxgNq2C5o0jdLY2gAYg=
modernc.org/libc v1.11.2/go.mod h1:ioIyrl3ETkugDO3SGZ+6EOKvlP3zSOycUETe4XM4n8M=
modernc.org/libc v1.11.5/go.mod h1:k3HDCP95A6U111Q5TmG3nAyUcp3kR5YFZTeDS9v8vSU=
modernc.org/libc v1.11.6/go.mod h1:ddqmzR6p5i4jIGK1d/EiSw97LBcE3dK24QEwCFvgNgE=
modernc.org/libc v1.11.11/go.mod h1:lXEp9QOOk4qAYOtL3BmMve99S5Owz7Qyowzvg6LiZso=
modernc.org/libc v1.11.13/go.mod h1:ZYawJWlXIzXy2Pzghaf7YfM8OKacP3eZQI81PDLFdY8=
modernc.org/libc v1.11.16/go.mod h1:+DJquzYi+DMRUtWI1YNxrlQO6TcA5+dRRiq8HWBWRC8=
modernc.org/libc v1.11.19/go.mod h1:e0dgEame6mkydy19KKaVPBeEnyJB4LGNb0bBH1EtQ3I=
modernc.org/libc v1.11.24/go.mod h1:FOSzE0UwookyT1TtCJrRkvsOrX2k38HoInhw+cSCUGk=
modernc.org/libc v1.11.26/go.mod h1:SFjnYi9OSd2W7f4ct622o/PAYqk7KHv6GS8NZULIjKY=
modernc.org/libc v1.11.27/go.mod h1:zmWm6kcFXt/jpzeCgfvUNswM0qke8qVwxqZrnddlDiE=
modernc.org/libc v1.11.28/go.mod h1:Ii4V0fTFcbq3qrv3CNn+OGHAvzqMBvC7dBNyC4vHZlg=
modernc.org/libc v1.11.31/go.mod h1:FpBncUkEAtopRNJj8aRo29qUiyx5AvAlAxzlx9GNaVM=
modernc.org/libc v1.11.34/go.mod h1:+Tzc4hnb1iaX/SKAutJmfzES6awxfU1BPvrrJO0pYLg=
modernc.org/libc v1.11.37/go.mod h1:dCQebOwoO1046yTrfUE5nX1f3YpGZQKNcITUYWlrAWo=
modernc.org/libc v1.11.39/go.mod h1:mV8lJMo2S5A31uD0k1cMu7vrJbSA3J3waQJxpV4iqx8=
modernc.org/libc v1.11.42/go.mod h1:yzrLDU+sSjLE+D4bIhS7q1L5UwXDOw99PLSX0BlZvSQ=
modernc.org/libc v1.11.44/go.mod h1:KFq33jsma7F5WXiYelU8quMJasCCTnHK0mkri4yPHgA=
modernc.org/libc v1.11.45/go.mod h1:Y192orvfVQQYFzCNsn+Xt0Hxt4DiO4USpLNXBlXg/tM=
modernc.org/libc v1.11.47/go.mod h1:tPkE4PzCTW27E6AIKIR5IwHAQKCAtudEIeAV1/SiyBg=
modernc.org/libc v1.11.49/go.mod h1:9JrJuK5WTtoTWIFQ7QjX2Mb/bagYdZdscI3xrvHbXjE=
modernc.org/libc v1.11.51/go.mod h1:R9I8u9TS+meaWLdbfQhq2kFknTW0O3aw3kEMqDDxMaM=
modernc.org/libc v1.11.53/go.mod h1:5ip5vWYPAoMulkQ5XlSJTy12Sz5U6blOQiYasilVPsU=
modernc.org/libc v1.11.54/go.mod h1:S/FVnskbzVUrjfBqlGFIPA5m7UwB3n9fojHhCNfSsnw=
modernc.org/libc v1.11.55/go.mod h1:j2A5YBRm6HjNkoSs/fzZrSxCuwWqcMYTDPLNx0URn3M=
modernc.org/libc v1.11.56/go.mod h1:pakHkg5JdMLt2OgRadpPOTnyRXm/uzu+Yyg/LSLdi18=
modernc.org/libc v1.11.58/go.mod h1:ns94Rxv0OWyoQrDqMFfWwka2BcaF6/61CqJRK9LP7S8=
modernc.org/libc v1.11.70/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw=
modernc.org/libc v1.11.71/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw=
modernc.org/libc v1.11.75/go.mod h1:dGRVugT6edz361wmD9gk6ax1AbDSe0x5vji0dGJiPT0=
modernc.org/libc v1.11.82/go.mod h1:NF+Ek1BOl2jeC7lw3a7Jj5PWyHPwWD4aq3wVKxqV1fI=
modernc.org/libc v1.11.86/go.mod h1:ePuYgoQLmvxdNT06RpGnaDKJmDNEkV7ZPKI2jnsvZoE=
modernc.org/libc v1.11.87 h1:PzIzOqtlzMDDcCzJ5cUP6h/Ku6Fa9iyflP2ccTY64aE=
modernc.org/libc v1.11.87/go.mod h1:Qvd5iXTeLhI5PS0XSyqMY99282y+3euapQFxM7jYnpY=
modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8=
modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc=
modernc.org/memory v1.0.5 h1:XRch8trV7GgvTec2i7jc33YlUI0RKVDBvZ5eZ5m8y14=
modernc.org/memory v1.0.5/go.mod h1:B7OYswTRnfGg+4tDH1t1OeUNnsy2viGTdME4tzd+IjM=
modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A=
modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
modernc.org/sqlite v1.14.2 h1:ohsW2+e+Qe2To1W6GNezzKGwjXwSax6R+CrhRxVaFbE=
modernc.org/sqlite v1.14.2/go.mod h1:yqfn85u8wVOE6ub5UT8VI9JjhrwBUUCNyTACN0h6Sx8=
modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs=
modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw=
modernc.org/tcl v1.8.13 h1:V0sTNBw0Re86PvXZxuCub3oO9WrSTqALgrwNZNvLFGw=
modernc.org/tcl v1.8.13/go.mod h1:V+q/Ef0IJaNUSECieLU4o+8IScapxnMyFV6i/7uQlAY=
modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk=
modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
modernc.org/z v1.2.19 h1:BGyRFWhDVn5LFS5OcX4Yd/MlpRTOc7hOPTdcIpCiUao=
modernc.org/z v1.2.19/go.mod h1:+ZpP0pc4zz97eukOzW3xagV/lS82IpPN9NGG5pNF9vY=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 h1:bvLlAPW1ZMTWA32LuZMBEGHAUOcATZjzHcotf3SWweM=
xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE=
xorm.io/xorm v1.3.2 h1:uTRRKF2jYzbZ5nsofXVUx6ncMaek+SHjWYtCXyZo1oM=
xorm.io/xorm v1.3.2/go.mod h1:9NbjqdnjX6eyjRRhh01GHm64r6N9shTb/8Ak3YRt8Nw=

+ 62
- 0
haodanku/haodanku.go Datei anzeigen

@@ -75,3 +75,65 @@ func HaodankuSelectedItem(params map[string]string) []map[string]string {
}
return goods
}
func HaodankuTikTok(params map[string]string) []map[string]string {
var goods = make([]map[string]string, 0)
reqNew, err := SendReqNew("https://v3.api.haodanku.com/dy_rankitem_list", params)
if err != nil {
return goods
}
data := gjson.Get(string(reqNew), "data").String()
if data == "" {
return goods
}
var oldGoods []md.HaodankuTikTok
json.Unmarshal([]byte(data), &oldGoods)
for _, v := range oldGoods {

var tmp = map[string]string{
"gid": v.ProductID,
"title": v.Itemshorttitle,
"img": v.Itempic,
"sales": "",
"price": v.Itemendprice,
"cost_price": v.Itemprice,
"coupon": "",
"commission_rate": zhios_third_party_utils.AnyToString(v.Dyrates),
"commission": zhios_third_party_utils.Float64ToStr(zhios_third_party_utils.StrToFloat64(v.Itemendprice) * (zhios_third_party_utils.AnyToFloat64(v.Dyrates) / 100)),
"pvd": md.PVD_TIKTOK,
"share_content": "",
}
goods = append(goods, tmp)
}
return goods
}

func HaodankuTaobaoRankList(params map[string]string) []map[string]string {
var goods = make([]map[string]string, 0)
reqNew, err := SendReqNew("http://v2.api.haodanku.com/sales_list", params)
if err != nil {
return goods
}
data := gjson.Get(string(reqNew), "data").String()
if data == "" {
return goods
}
var oldGoods []md.HDKGoodsTaobaoRankList
json.Unmarshal([]byte(data), &oldGoods)
for _, v := range oldGoods {
var tmp = map[string]string{
"gid": v.Itemid,
"title": v.Itemtitle,
"img": v.Itempic,
"sales": "",
"price": v.Itemendprice,
"cost_price": v.Itemprice,
"coupon": v.Couponmoney,
"commission_rate": zhios_third_party_utils.AnyToString(v.Tkrates),
"commission": zhios_third_party_utils.Float64ToStr(zhios_third_party_utils.StrToFloat64(v.Itemendprice) * (zhios_third_party_utils.AnyToFloat64(v.Tkrates) / 100)),
"pvd": "taobao",
"share_content": "",
}
goods = append(goods, tmp)
}
return goods
}

+ 56
- 0
md/dataoke.go Datei anzeigen

@@ -41,3 +41,59 @@ type DataokeFriendCircleList struct {
ShangchaoPic string `json:"shangchaoPic"`
Tbcid int `json:"tbcid"`
}

type DataokeTaobaoRankList struct {
ID int `json:"id"`
Goodsid string `json:"goodsId"`
Ranking int `json:"ranking"`
Dtitle string `json:"dtitle"`
Actualprice interface{} `json:"actualPrice"`
Commissionrate interface{} `json:"commissionRate"`
Couponprice interface{} `json:"couponPrice"`
Couponreceivenum interface{} `json:"couponReceiveNum"`
Coupontotalnum interface{} `json:"couponTotalNum"`
Monthsales int `json:"monthSales"`
Twohourssales int `json:"twoHoursSales"`
Dailysales int `json:"dailySales"`
Hotpush int `json:"hotPush"`
Mainpic string `json:"mainPic"`
Title string `json:"title"`
Desc string `json:"desc"`
Originalprice interface{} `json:"originalPrice"`
Couponlink string `json:"couponLink"`
Couponstarttime string `json:"couponStartTime"`
Couponendtime string `json:"couponEndTime"`
Commissiontype int `json:"commissionType"`
Createtime string `json:"createTime"`
Activitytype int `json:"activityType"`
Imgs string `json:"imgs"`
Guidename string `json:"guideName"`
Shoptype int `json:"shopType"`
Couponconditions string `json:"couponConditions"`
Newrankinggoods int `json:"newRankingGoods"`
Sellerid string `json:"sellerId"`
Quanmlink int `json:"quanMLink"`
Hzquanover int `json:"hzQuanOver"`
Yunfeixian int `json:"yunfeixian"`
Estimateamount int `json:"estimateAmount"`
Freeshipremotedistrict int `json:"freeshipRemoteDistrict"`
ShopName string `json:"shopName"`
}

type DataokeTikTokRankList struct {
CosFee float64 `json:"cosFee"`
CosRatio float64 `json:"cosRatio"`
Coupon float64 `json:"coupon"`
CouponPrice float64 `json:"couponPrice"`
ID string `json:"id"`
Imgs []string `json:"imgs"`
Price float64 `json:"price"`
ProductID string `json:"productId"`
Sales int64 `json:"sales"`
ShopName string `json:"shopName"`
Title string `json:"title"`
ItemImg string `json:"item_img"`
DetailURL string `json:"detailUrl"`
ShopId string `json:"shopId"`
Cover string `json:"cover"`
}

+ 88
- 0
md/haodanku.go Datei anzeigen

@@ -50,3 +50,91 @@ type HaodankuSelectedItem struct {
Itemtitle string `json:"itemtitle"`
AdviseTime string `json:"advise_time"`
}

type HaodankuTikTok struct {
ItemScore string `json:"item_score"`
Itemendprice string `json:"itemendprice"`
Itempic string `json:"itempic"`
Itemprice string `json:"itemprice"`
Itemshorttitle string `json:"itemshorttitle"`
Itemtitle string `json:"itemtitle"`
LogisticsScore string `json:"logistics_score"`
ProductCategoryID string `json:"product_category_id"`
ProductID string `json:"product_id"`
Sales string `json:"sales"`
ShopID string `json:"shop_id"`
ShopItemsale string `json:"shop_itemsale"`
ShopName string `json:"shop_name"`
ShopScore string `json:"shop_score"`
Tkmoney string `json:"tkmoney"`
Dyrates interface{} `json:"tkrates"`
}

type HDKGoodsTaobaoRankList struct {
ProductID string `json:"product_id"`
Itemid string `json:"itemid"`
Xid string `json:"xid"`
SellerID string `json:"seller_id"`
Itemtitle string `json:"itemtitle"`
Itemshorttitle string `json:"itemshorttitle"`
Itemdesc string `json:"itemdesc"`
Itemprice string `json:"itemprice"`
Itemsale string `json:"itemsale"`
Itemsale2 string `json:"itemsale2"`
Todaysale string `json:"todaysale"`
Itempic string `json:"itempic"`
ItempicCopy string `json:"itempic_copy"`
Fqcat string `json:"fqcat"`
Itemendprice string `json:"itemendprice"`
Shoptype string `json:"shoptype"`
Tktype string `json:"tktype"`
Tkrates interface{} `json:"tkrates"`
Cuntao string `json:"cuntao"`
Tkmoney string `json:"tkmoney"`
Couponurl string `json:"couponurl"`
Couponmoney string `json:"couponmoney"`
Couponsurplus string `json:"couponsurplus"`
Couponreceive string `json:"couponreceive"`
Couponreceive2 string `json:"couponreceive2"`
Todaycouponreceive string `json:"todaycouponreceive"`
Couponnum string `json:"couponnum"`
Couponexplain string `json:"couponexplain"`
Couponstarttime string `json:"couponstarttime"`
Couponendtime string `json:"couponendtime"`
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
Starttime string `json:"starttime"`
Isquality interface{} `json:"isquality"`
ReportStatus string `json:"report_status"`
IsBrand string `json:"is_brand"`
IsLive string `json:"is_live"`
GuideArticle string `json:"guide_article"`
Videoid string `json:"videoid"`
ActivityType string `json:"activity_type"`
GeneralIndex string `json:"general_index"`
Planlink interface{} `json:"planlink"`
SellerName string `json:"seller_name"`
Userid string `json:"userid"`
Sellernick string `json:"sellernick"`
Shopname string `json:"shopname"`
OnlineUsers string `json:"online_users"`
OriginalImg string `json:"original_img"`
OriginalArticle string `json:"original_article"`
Discount string `json:"discount"`
IsExplosion string `json:"is_explosion"`
Me interface{} `json:"me"`
Activityid string `json:"activityid"`
CouponCondition string `json:"coupon_condition"`
TaobaoImage string `json:"taobao_image"`
Shopid string `json:"shopid"`
SonCategory string `json:"son_category"`
DownType string `json:"down_type"`
Deposit string `json:"deposit"`
DepositDeduct string `json:"deposit_deduct"`
IsShipping string `json:"is_shipping"`
PresaleStartTime int `json:"presale_start_time"`
PresaleEndTime int `json:"presale_end_time"`
PresaleTailStartTime int `json:"presale_tail_start_time"`
PresaleTailEndTime int `json:"presale_tail_end_time"`
PresaleDiscountFeeText string `json:"presale_discount_fee_text"`
}

+ 40
- 0
md/platform.go Datei anzeigen

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

const (
/*********** DEVICE ***********/
PLATFORM_WX_APPLET = "wx_applet" // 小程序
PLATFORM_TOUTIAO_APPLET = "toutiao_applet"
PLATFORM_TIKTOK_APPLET = "tiktok_applet"
PLATFORM_BAIDU_APPLET = "baidu_applet"
PLATFORM_ALIPAY_APPLET = "alipay_applet"
PLATFORM_WAP = "wap" //h5
PLATFORM_ANDROID = "android"
PLATFORM_IOS = "ios"
PLATFORM_PC = "pc"
PLATFORM_JSAPI = "jsapi" // 公众号
)

const WX_PAY_BROWSER = "wx_pay_browser" // 用于判断显示支付方式

var PlatformList = map[string]struct{}{
PLATFORM_WX_APPLET: {},
PLATFORM_TOUTIAO_APPLET: {},
PLATFORM_TIKTOK_APPLET: {},
PLATFORM_BAIDU_APPLET: {},
PLATFORM_ALIPAY_APPLET: {},
PLATFORM_WAP: {},
PLATFORM_ANDROID: {},
PLATFORM_IOS: {},
PLATFORM_PC: {},
}

var PlatformMap = map[string]string{
"android": "2",
"ios": "2",
"wap": "4", // 和小程序公用模板
"wx_applet": "4", //微信小程序
"tiktok_applet": "4",
"baidu_applet": "4",
"alipay_applet": "4",
"toutiao_applet": "4",
}

+ 71
- 0
md/taobao.go Datei anzeigen

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

type TBFeatureStruct struct {
CategoryID int `json:"category_id"`
CategoryName string `json:"category_name"`
ClickURL string `json:"click_url"`
CommissionRate string `json:"commission_rate"`
CouponAmount int `json:"coupon_amount"`
CouponClickURL string `json:"coupon_click_url"`
CouponEndTime string `json:"coupon_end_time"`
CouponRemainCount int `json:"coupon_remain_count"`
CouponShareURL string `json:"coupon_share_url"`
CouponStartFee string `json:"coupon_start_fee"`
CouponStartTime string `json:"coupon_start_time"`
CouponTotalCount int `json:"coupon_total_count"`
ItemDescription string `json:"item_description"`
ItemID interface{} `json:"item_id"`
JhsPriceUspList string `json:"jhs_price_usp_list"`
LevelOneCategoryID int `json:"level_one_category_id"`
LevelOneCategoryName string `json:"level_one_category_name"`
Nick string `json:"nick"`
PictURL string `json:"pict_url"`
ReservePrice string `json:"reserve_price"`
SellerID int64 `json:"seller_id"`
ShopTitle string `json:"shop_title"`
ShortTitle string `json:"short_title"`
SmallImages struct {
String []string `json:"string"`
} `json:"small_images"`
SubTitle string `json:"sub_title"`
Title string `json:"title"`
UserType int `json:"user_type"`
Volume int `json:"volume"`
WhiteImage string `json:"white_image"`
ZkFinalPrice string `json:"zk_final_price"`
}

type TBSearchFeatureStruct struct {
CategoryID int `json:"category_id"`
CategoryName string `json:"category_name"`
ClickURL string `json:"click_url"`
CommissionRate string `json:"commission_rate"`
CouponAmount string `json:"coupon_amount"`
CouponClickURL string `json:"coupon_click_url"`
CouponEndTime string `json:"coupon_end_time"`
CouponRemainCount int `json:"coupon_remain_count"`
CouponShareURL string `json:"coupon_share_url"`
CouponStartFee string `json:"coupon_start_fee"`
CouponStartTime string `json:"coupon_start_time"`
CouponTotalCount int `json:"coupon_total_count"`
ItemDescription string `json:"item_description"`
ItemID interface{} `json:"item_id"`
JhsPriceUspList string `json:"jhs_price_usp_list"`
LevelOneCategoryID int `json:"level_one_category_id"`
LevelOneCategoryName string `json:"level_one_category_name"`
Nick string `json:"nick"`
PictURL string `json:"pict_url"`
ReservePrice string `json:"reserve_price"`
SellerID int64 `json:"seller_id"`
ShopTitle string `json:"shop_title"`
ShortTitle string `json:"short_title"`
SmallImages struct {
String []string `json:"string"`
} `json:"small_images"`
SubTitle string `json:"sub_title"`
Title string `json:"title"`
UserType int `json:"user_type"`
Volume int `json:"volume"`
WhiteImage string `json:"white_image"`
ZkFinalPrice string `json:"zk_final_price"`
}

+ 29
- 0
md/tik_tok.go Datei anzeigen

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

type TikTokBase struct {
AuthType string `json:"auth_type"`
LiveAuthType string `json:"live_auth_type"`
ApiGoodsAppKey string `json:"api_goods_app_key"`
ApiGoodsAppSecret string `json:"api_goods_app_secret"`
ApiTeamAppKey string `json:"api_team_app_key"`
ApiTeamAppSecret string `json:"api_team_app_secret"`
ApiLiveAppKey string `json:"api_live_app_key"`
ApiLiveAppSecret string `json:"api_live_app_secret"`
GoodsAccessToken string `json:"goods_access_token"`
LiveAccessToken string `json:"live_access_token"`
TeamAccessToken string `json:"team_access_token"`
GoodsPid string `json:"goods_pid"`
LivePid string `json:"live_pid"`
SysApiGoodsAppKey string `json:"sys_api_goods_app_key"`
SysApiGoodsAppSecret string `json:"sys_api_goods_app_secret"`
SysApiTeamAppKey string `json:"sys_api_team_app_key"`
SysApiTeamAppSecret string `json:"sys_api_team_app_secret"`
SysApiLiveAppKey string `json:"sys_api_live_app_key"`
SysApiLiveAppSecret string `json:"sys_api_live_app_secret"`
SysGoodsAccessToken string `json:"sys_goods_access_token"`
SysLiveAccessToken string `json:"sys_live_access_token"`
SysGoodsPid string `json:"sys_goods_pid"`
SysLivePid string `json:"sys_live_pid"`
AuthSubjectType string `json:"auth_subject_type"`
LiveAuthSubjectType string `json:"live_auth_subject_type"`
}

+ 80
- 0
md/zhimeng.go Datei anzeigen

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

type JDZhimengItem struct {
Cid1 int `json:"cid1"`
Cid1Name string `json:"cid1_name"`
Cid2 int `json:"cid2"`
Cid2Name string `json:"cid2_name"`
Cid3 int `json:"cid3"`
Cid3Name string `json:"cid3_name"`
CommissionRate float64 `json:"commission_rate"`
CouponURL string `json:"coupon_url"`
CouponPrice int `json:"coupon_price"`
EndTime int `json:"end_time"`
Gid string `json:"gid"`
GoodsImg string `json:"goods_img"`
GoodsTitle string `json:"goods_title"`
ImgList []string `json:"img_list"`
InOrderCount int `json:"inOrderCount"`
IsFreeFreightRisk int `json:"isFreeFreightRisk"`
IsFreeShipping int `json:"isFreeShipping"`
IsJdSale int `json:"isJdSale"`
LowerPrice float64 `json:"lower_price"`
LowerPriceType int `json:"lower_price_type"`
LowestCouponPrice interface{} `json:"lowestCouponPrice"`
PcGoodsPrice float64 `json:"pc_goods_price"`
ShopID int `json:"shopId"`
ShopName string `json:"shop_name"`
StartTime int `json:"start_time"`
StoreID string `json:"store_id"`
VideoList interface{} `json:"video_list"`
WlGoodsPrice float64 `json:"wl_goods_price"`
}

type PDDZhimengItem struct {
AvgDesc interface{} `json:"avg_desc"`
AvgLgst interface{} `json:"avg_lgst"`
AvgServ interface{} `json:"avg_serv"`
CateName string `json:"cate_name"`
Cid int `json:"cid"`
Cid1 int `json:"cid1"`
Cid2 int `json:"cid2"`
Cid3 int `json:"cid3"`
Commission float64 `json:"commission"`
ConponRemain int `json:"conpon_remain"`
CouponEndTime int `json:"coupon_end_time"`
CouponPrice int `json:"coupon_price"`
CouponStartTime int `json:"coupon_start_time"`
CouponTotal int `json:"coupon_total"`
DescPct interface{} `json:"desc_pct"`
EvalCount interface{} `json:"eval_count"`
Gid string `json:"gid"`
GoodsDesc string `json:"goods_desc"`
GoodsImg string `json:"goods_img"`
GoodsSign string `json:"goods_sign"`
GoodsMinImg string `json:"goods_min_img"`
GoodsSales interface{} `json:"goods_sales"`
GoodsTitle string `json:"goods_title"`
LgstPct interface{} `json:"lgst_pct"`
MallID int `json:"mall_id"`
MinGroupPrice float64 `json:"min_group_price"`
MinNormalPrice float64 `json:"min_normal_price"`
Score interface{} `json:"score"`
ServPct interface{} `json:"serv_pct"`
ShopName string `json:"shop_name"`
}

type VIPZhimengItem struct {
Commission string `json:"commission"`
CommissionRate string `json:"commission_rate"`
Discount string `json:"discount"`
Gid string `json:"gid"`
GoodsCostPrice string `json:"goods_cost_price"`
GoodsDesc string `json:"goods_desc"`
GoodsImg string `json:"goods_img"`
GoodsPrice string `json:"goods_price"`
GoodsTitle string `json:"goods_title"`
SourceType string `json:"sourceType"`
YhqPrice string `json:"yhq_price"`
CouponPrice string `json:"coupon_price"`
}

+ 214
- 0
taobao/api.go Datei anzeigen

@@ -0,0 +1,214 @@
package taobao

import (
zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils"
"fmt"
"net/url"
"sort"
"strings"
"time"
)

/*
sc 代表服务商, 工具商
dg 代表推广者, 站长

工具商: 为站长服务, 当站长有些权限不足登陆时候, 例如:授权登陆等,可以使用工具商的服务, 工具商每次调用淘宝必须传入站长的session,以便于区分不同站长
站 长: 在一般情况下可以使用自己的自己的key, 包括物料搜索等

邀请码: 用于区分不同的渠道, 淘宝不同渠道有不同的邀请链接, 例如:渠道管理, 会员运营管理 这两种
推广位: 用于区分不同的位置, 不同推广位区分如IOS,android,web,applet不同
*/

const (
// 淘宝基础host
TB_HOST_HTTP = "http://gw.api.taobao.com/router/rest?"
TB_HOST_HTTPS = "https://eco.taobao.com/router/rest?"

// TODO 物料id查找 https://market.m.taobao.com/app/qn/toutiao-new/index-pc.html#/detail/10628875?_k=gpov9a
// 淘宝业务, op for operation 操作, tbk for taobaoke,
TBK_SC_MTL_OPT = "taobao.tbk.sc.material.optional" // 淘宝客-服务商-物料搜索
TBK_DG_MTL_OPT = "taobao.tbk.dg.material.optional" // 淘宝客-推广者-物料搜索
TB_SVC_AK = "33970476"
TB_SVC_SK = "2d46abef05a0d05d7ddcd3af2d540d2b"
TB_SVC_TIME = "2022-08-09 10:58:00"
)

type TB struct {
// 站长web key, 用于查询订单,搜索等
SID string
UserSID string //用户的session
Web_AK string
Web_SK string
User_Web_AK string
User_Web_SK string

// 服务商 service key, 如智盟, SVC = service 授权服务
Svc_AK string
Svc_SK string
Svc_SID string

// 渠道 - 分享(会员外)
ShareInviteCode string // 邀请码,用户获取relationId,用于分享
SharePromoIdIOS string // 分享推广位, IOS , APP Key时可用
SharePromoIdAndroid string // 分享推广位, ANDROID , APP Key时可用
SharePromoIdWeb string // 分享推广位, web , Web Key时可用
// 渠道 - 自购(会员)
SelfInviteCode string // 邀请码,用户获取specialId,用于自购
SelfPromoIdIOS string // 自购推广位, IOS , APP Key时可用
SelfPromoIdAndroid string // 自购推广位, ANDROID , APP Key时可用
SelfPromoIdWeb string // 自购推广位, web , Web Key时可用
// 新人免单等推广位

SelfPromoIdFree string // 免单推广位
SelfPromoIdTljFree string // 免单淘礼金推广位
SelfPromoIdTljRelationFree string // 免单淘礼金渠道推广位
ActivitySelfPromoIdWeb string //活动的自购推广位
ActivitySharePromoIdWeb string //活动的分享推广位
WechatActivitySelfPromoIdWeb string //小程序活动的自购推广位
WechatActivitySharePromoIdWeb string //小程序活动的分享推广位
WebRelationSelfKey string //渠道网站自购
AndroidRelationSelfKey string //渠道安卓自购
IosRelationSelfKey string //渠道ios自购
wechatSelfKey string //小程序自购
AuthType int //返回授权类型用来判断
AuthBuyType string //判断用哪种授权模式 纯渠道 或 会员+渠道 主要是转链不同
ChannelUrl string //渠道邀请码
ShareChannelUrl string //渠道邀请码
AppletIsAuth string
AppletPid string
}

// 旧
// TB_AUTH_AK = "26302019" // 授权ak
// TB_AUTH_SK = "ba877cfcdc64d3fbc1105d61d66dd1d7" // 授权sk
// TB_AUTH_SID = "6202812d3c107786820ace47c9200f0cf7093e213f8ed45199979191" // 可以通过智盟获得
// TB_AUTH_INVITER_CODE = "CAGGTZ"

// TB_AK = "23430885" //业务ak
// TB_SK = "8c90c716181852cabaabc8dc1bf59a23" //业务sk
// TB_SID = "6201603b382ZZd3bc3f1737478521e8ae243a3245cbe6bd199979191" // 业务sid
// TB_PID = "mm_13406079_15484476_59718997" // 业务PID
// TB_ACC_ID = "13406079"
// TB_SITE_ID = "15484476"
// TB_ADZONE_ID = "59718997"

func New(tb *TB) *TB {
if tb != nil {
return tb
}
return &TB{
Web_AK: "23430885", // third_taobao_web_ak
Web_SK: "8c90c716181852cabaabc8dc1bf59a23", // third_taobao_web_sk
SID: "6200d02d5aceeec70abb05983156d4b8b4bf78cd6d8df69199979191", // third_taobao_sid

Svc_AK: "26302019", // third_taobao_svc_ak
Svc_SK: "ba877cfcdc64d3fbc1105d61d66dd1d7", // third_taobao_svc_sk
Svc_SID: "6200f110dca5586962fhjf512d05f0cb731d43045fdd460199979191", // third_taobao_svc_sid

ShareInviteCode: "CAGGTZ", //third_taobao_share_invite_code
SharePromoIdIOS: "mm_13406079_36674309_97353600076", // third_taobao_share_pid_ios
SharePromoIdAndroid: "mm_13406079_36776943_97352850438", //third_taobao_share_pid_android
SharePromoIdWeb: "mm_13406079_15484476_97352900127", //third_taobao_share_pid_web

SelfInviteCode: "JV4R57",
SelfPromoIdIOS: "mm_13406079_36674309_110739250114", //third_taobao_self_invite_code
SelfPromoIdAndroid: "mm_13406079_36776943_110740650068", // third_taobao_self_pid_ios
SelfPromoIdWeb: "mm_13406079_15484476_110741150064", //third_taobao_self_pid_android

SelfPromoIdFree: "mm_13406079_36776943_49998050236", //third_taobao_free_pid
}
// return &TB{
// Web_AK: "32271226", // third_taobao_web_ak
// Web_SK: "ad3e1f3ffc70578dac6d4f4b97e4caad", // third_taobao_web_sk
// SID: "6200517d93f0e8396063188b6ZZb0c31d45b3c2311c4310670639499", //third_taobao_sid

// Svc_AK: "26302019", // third_taobao_svc_ak
// Svc_SK: "ba877cfcdc64d3fbc1105d61d66dd1d7", // third_taobao_svc_sk
// Svc_SID: "6202812d3c107786820ace47c9200f0cf7093e213f8ed45199979191", // third_taobao_svc_sid

// ShareInviteCode: "FtWw5E", //third_taobao_share_invite_code
// // SharePromoIdIOS: "mm_13406079_36674309_97353600076", // third_taobao_share_pid_ios
// // SharePromoIdAndroid: "mm_13406079_36776943_97352850438", //third_taobao_share_pid_android
// SharePromoIdWeb: "mm_25640383_2182750388_111085150224", //third_taobao_share_pid_web

// SelfInviteCode: "9N8LJE",
// // SelfPromoIdIOS: "mm_13406079_36674309_110739250114", //third_taobao_self_invite_code
// // SelfPromoIdAndroid: "mm_13406079_36776943_110740650068", // third_taobao_self_pid_ios
// SelfPromoIdWeb: "mm_25640383_2182750388_111086100270", //third_taobao_self_pid_android
// }
}

///
// {"SID":"6200d02d5aceeec70abb05983156d4b8b4bf78cd6d8df69199979191",
// "Web_AK":"23430885",
// "Web_SK":"8c90c716181852cabaabc8dc1bf59a23",
// "Svc_AK":"26302019",
// "Svc_SK":"ba877cfcdc64d3fbc1105d61d66dd1d7",
// "Svc_SID":"6202812d3c107786820ace47c9200f0cf7093e213f8ed45199979191",
// "ShareInviteCode":"CAGGTZ",
// "SharePromoIdIOS":"mm_13406079_36674309_97353600076",
// "SharePromoIdAndroid":"mm_13406079_36776943_97352850438",
// "SharePromoIdWeb":"mm_13406079_15484476_97352900127",
// "SelfInviteCode":"JV4R57",
// "SelfPromoIdIOS":"mm_13406079_36674309_110739250114",
// "SelfPromoIdAndroid":"mm_13406079_36776943_110740650068",
// "SelfPromoIdWeb":"mm_13406079_15484476_110741150064"}
///
// 拆分推广位, 分别返回 账户ID,网站ID,推广位ID
func SplitPid(pid string) (AccID, SiteId, AdZoneId string) {
s := strings.Split(pid, "_")
if len(s) != 4 {
return "", "", ""
}
return s[1], s[2], s[3]
}

func AccId(pid string) string {
accId, _, _ := SplitPid(pid)
return accId
}
func SiteId(pid string) string {
_, siteId, _ := SplitPid(pid)
return siteId
}

func AdZoneId(pid string) string {
_, _, adZoneId := SplitPid(pid)
return adZoneId
}

// 发送淘宝请求
func send(args map[string]string, method, ak, sk string) ([]byte, error) {
args["v"] = "2.0"
args["method"] = method
args["format"] = "json"
args["app_key"] = ak
args["sign_method"] = "md5"
args["timestamp"] = time.Now().Format("2006-01-02 15:04:05")
args["sign"] = sign(args, sk)
urls := TB_HOST_HTTPS
fmt.Println(args, "args")
fmt.Println(urls)
for k, v := range args {
urls += k + "=" + url.QueryEscape(v) + "&"
}
urls = urls[:len(urls)-1]
return zhios_third_party_utils.CurlGet(urls, nil)
}

func sign(m map[string]string, sk string) string {
// key sort
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
str := ""
for _, k := range keys {
str += k + m[k]
}
// merge string
str = sk + str + sk
return strings.ToUpper(zhios_third_party_utils.Md5(str))
}

+ 136
- 0
taobao/base.go Datei anzeigen

@@ -0,0 +1,136 @@
package taobao

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/db"
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/md"
zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils"
"errors"
"github.com/tidwall/gjson"
"xorm.io/xorm"
)

func NewTaobaoSDK(eg *xorm.Engine, dbName, Platform string, AccTaobaoShareId int) (*TB, error) {
// 从联盟设置中获取淘宝配置

taobaoCfg, err := db.SysUnionByTaobaoByUseByAuth(eg, dbName)
if err != nil {
return nil, err
}

var cfg *TB
freeCfg := db.SysCfgGetWithDb(eg, dbName, "newcomers_free_cfg")
/*if freeCfg == "" {
return nil, errors.New("no free cfg found")
}*/
Svc_AK := "26302019"
Svc_SK := "ba877cfcdc64d3fbc1105d61d66dd1d7"
if taobaoCfg.AuthTime.Unix() >= zhios_third_party_utils.TimeStdParseUnix(TB_SVC_TIME) {
Svc_AK = TB_SVC_AK
Svc_SK = TB_SVC_SK
}
// 跟随官方
if taobaoCfg.AuthType == 1 {
cfg = &TB{
Web_AK: Svc_AK,
Web_SK: Svc_SK,
UserSID: gjson.Get(taobaoCfg.KeyData, "accessToken").String(),
SID: "6200f110dca5586962fhjf512d05f0cb731d43045fdd460199979191",
Svc_AK: Svc_AK,
Svc_SK: Svc_SK,
Svc_SID: "6200f110dca5586962fhjf512d05f0cb731d43045fdd460199979191",
User_Web_AK: gjson.Get(taobaoCfg.KeyData, "apiAppKey").String(),
User_Web_SK: gjson.Get(taobaoCfg.KeyData, "apiAppSecret").String(),
ShareInviteCode: gjson.Get(taobaoCfg.KeyData, "channelUrl").String(),
SharePromoIdIOS: gjson.Get(taobaoCfg.KeyData, "ios.shareKey").String(),
SharePromoIdAndroid: gjson.Get(taobaoCfg.KeyData, "android.shareKey").String(),
SharePromoIdWeb: gjson.Get(taobaoCfg.KeyData, "webShareKey").String(),
SelfInviteCode: gjson.Get(taobaoCfg.KeyData, "memberUrl").String(),
SelfPromoIdIOS: gjson.Get(taobaoCfg.KeyData, "ios.selfKey").String(),
SelfPromoIdAndroid: gjson.Get(taobaoCfg.KeyData, "android.selfKey").String(),
SelfPromoIdWeb: gjson.Get(taobaoCfg.KeyData, "webSelfKey").String(),
SelfPromoIdFree: gjson.Get(freeCfg, "taobao_pid").String(),
ActivitySelfPromoIdWeb: gjson.Get(taobaoCfg.KeyData, "activitySelfKey").String(),
ActivitySharePromoIdWeb: gjson.Get(taobaoCfg.KeyData, "activityShareKey").String(),
WechatActivitySelfPromoIdWeb: gjson.Get(taobaoCfg.KeyData, "wechatActivitySelfKey").String(),
WechatActivitySharePromoIdWeb: gjson.Get(taobaoCfg.KeyData, "wechatActivityShareKey").String(),
ChannelUrl: gjson.Get(taobaoCfg.KeyData, "channelUrl").String(),
ShareChannelUrl: gjson.Get(taobaoCfg.KeyData, "channelUrl").String(),
AuthType: 1,
AppletIsAuth: zhios_third_party_utils.IntToStr(taobaoCfg.AppletIsAuth),
}
var authBuyType = gjson.Get(taobaoCfg.KeyData, "authBuyType").String()
cfg.AuthBuyType = authBuyType
if authBuyType == "1" && Platform != md.PLATFORM_WX_APPLET {
//如果是1 就是纯渠道模式 要更换渠道推广位
cfg.SelfPromoIdWeb = gjson.Get(taobaoCfg.KeyData, "webRelationSelfKey").String()
cfg.SelfPromoIdAndroid = gjson.Get(taobaoCfg.KeyData, "androidRelationSelfKey").String()
cfg.SelfPromoIdIOS = gjson.Get(taobaoCfg.KeyData, "iosRelationSelfKey").String()
}
if Platform == md.PLATFORM_WX_APPLET {
if authBuyType == "1" && AccTaobaoShareId > 0 {
//如果是1 就是纯渠道模式 要更换渠道推广位
cfg.SelfPromoIdWeb = gjson.Get(taobaoCfg.KeyData, "webRelationSelfKey").String()
cfg.SelfPromoIdAndroid = gjson.Get(taobaoCfg.KeyData, "androidRelationSelfKey").String()
cfg.SelfPromoIdIOS = gjson.Get(taobaoCfg.KeyData, "iosRelationSelfKey").String()
} else if gjson.Get(taobaoCfg.KeyData, "wechatSelfKey").String() != "" {
cfg.SelfPromoIdWeb = gjson.Get(taobaoCfg.KeyData, "wechatSelfKey").String()
}
}
} else {
if gjson.Get(taobaoCfg.KeyData, "apiAppKey").String() == "" ||
gjson.Get(taobaoCfg.KeyData, "apiAppSecret").String() == "" ||
gjson.Get(taobaoCfg.KeyData, "accessToken").String() == "" {
return nil, errors.New("联盟配置错误")
}
// 自由联盟账号
cfg = &TB{
Web_AK: gjson.Get(taobaoCfg.KeyData, "apiAppKey").String(),
Web_SK: gjson.Get(taobaoCfg.KeyData, "apiAppSecret").String(),
SID: gjson.Get(taobaoCfg.KeyData, "accessToken").String(),
UserSID: gjson.Get(taobaoCfg.KeyData, "accessToken").String(),
Svc_AK: Svc_AK,
Svc_SK: Svc_SK,
Svc_SID: "6200f110dca5586962fhjf512d05f0cb731d43045fdd460199979191",
User_Web_AK: gjson.Get(taobaoCfg.KeyData, "apiAppKey").String(),
User_Web_SK: gjson.Get(taobaoCfg.KeyData, "apiAppSecret").String(),
ShareInviteCode: gjson.Get(taobaoCfg.KeyData, "channelUrl").String(),
SharePromoIdIOS: gjson.Get(taobaoCfg.KeyData, "ios.shareKey").String(),
SharePromoIdAndroid: gjson.Get(taobaoCfg.KeyData, "android.shareKey").String(),
SharePromoIdWeb: gjson.Get(taobaoCfg.KeyData, "webShareKey").String(),
SelfInviteCode: gjson.Get(taobaoCfg.KeyData, "memberUrl").String(),
SelfPromoIdIOS: gjson.Get(taobaoCfg.KeyData, "ios.selfKey").String(),
SelfPromoIdAndroid: gjson.Get(taobaoCfg.KeyData, "android.selfKey").String(),
SelfPromoIdWeb: gjson.Get(taobaoCfg.KeyData, "webSelfKey").String(),
SelfPromoIdFree: gjson.Get(freeCfg, "taobao_pid").String(),
ActivitySelfPromoIdWeb: gjson.Get(taobaoCfg.KeyData, "activitySelfKey").String(),
ActivitySharePromoIdWeb: gjson.Get(taobaoCfg.KeyData, "activityShareKey").String(),
WechatActivitySelfPromoIdWeb: gjson.Get(taobaoCfg.KeyData, "wechatActivitySelfKey").String(),
WechatActivitySharePromoIdWeb: gjson.Get(taobaoCfg.KeyData, "wechatActivityShareKey").String(),
ChannelUrl: gjson.Get(taobaoCfg.KeyData, "channelUrl").String(),
ShareChannelUrl: gjson.Get(taobaoCfg.KeyData, "channelUrl").String(),
AuthType: 0,
AppletIsAuth: zhios_third_party_utils.IntToStr(taobaoCfg.AppletIsAuth),
}
var authBuyType = gjson.Get(taobaoCfg.KeyData, "authBuyType").String()
cfg.AuthBuyType = authBuyType
if authBuyType == "1" && Platform != md.PLATFORM_WX_APPLET {
//如果是1 就是纯渠道模式 要更换渠道推广位
cfg.SelfPromoIdWeb = gjson.Get(taobaoCfg.KeyData, "webRelationSelfKey").String()
cfg.SelfPromoIdAndroid = gjson.Get(taobaoCfg.KeyData, "androidRelationSelfKey").String()
cfg.SelfPromoIdIOS = gjson.Get(taobaoCfg.KeyData, "iosRelationSelfKey").String()
}

if Platform == md.PLATFORM_WX_APPLET {
if authBuyType == "1" && AccTaobaoShareId > 0 {
//如果是1 就是纯渠道模式 要更换渠道推广位
cfg.SelfPromoIdWeb = gjson.Get(taobaoCfg.KeyData, "webRelationSelfKey").String()
cfg.SelfPromoIdAndroid = gjson.Get(taobaoCfg.KeyData, "androidRelationSelfKey").String()
cfg.SelfPromoIdIOS = gjson.Get(taobaoCfg.KeyData, "iosRelationSelfKey").String()
} else if gjson.Get(taobaoCfg.KeyData, "wechatSelfKey").String() != "" {
cfg.SelfPromoIdWeb = gjson.Get(taobaoCfg.KeyData, "wechatSelfKey").String()
}
}
}
return cfg, nil

}

+ 249
- 0
taobao/search_list.go Datei anzeigen

@@ -0,0 +1,249 @@
package taobao

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/md"
zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils"
"encoding/json"
"fmt"
"github.com/jinzhu/copier"
)

// 淘宝物料
type Material struct {
CategoryID int `json:"category_id"`
CategoryName string `json:"category_name"`
CommissionRate string `json:"commission_rate"`
CommissionType string `json:"commission_type"`
CouponID string `json:"coupon_id"`
CouponInfo string `json:"coupon_info"`
CouponRemainCount int `json:"coupon_remain_count"`
CouponTotalCount int `json:"coupon_total_count"`
IncludeDxjh string `json:"include_dxjh"`
IncludeMkt string `json:"include_mkt"`
InfoDxjh string `json:"info_dxjh"`
ItemDescription string `json:"item_description"`
ItemID interface{} `json:"item_id"`
ItemURL string `json:"item_url"`
LevelOneCategoryID int `json:"level_one_category_id"`
LevelOneCategoryName string `json:"level_one_category_name"`
Nick string `json:"nick"`
PictURL string `json:"pict_url"`
Provcity string `json:"provcity"`
RealPostFee string `json:"real_post_fee"`
ReservePrice string `json:"reserve_price"`
SellerID int `json:"seller_id"`
ShopDsr int `json:"shop_dsr"`
ShopTitle string `json:"shop_title"`
ShortTitle string `json:"short_title"`
ActivityId string `json:"activity_id"`
SmallImages struct {
String []string `json:"string"`
} `json:"small_images"`
Title string `json:"title"`
TkTotalCommi string `json:"tk_total_commi"`
TkTotalSales string `json:"tk_total_sales"`
URL string `json:"url"`
UserType int `json:"user_type"`
Volume int `json:"volume"`
WhiteImage string `json:"white_image"`
XID string `json:"x_id"`
ZkFinalPrice string `json:"zk_final_price"`
CouponAmount string `json:"coupon_amount,omitempty"`
OldCouponAmount string `json:"old_coupon_amount"`
CouponEndTime string `json:"coupon_end_time,omitempty"`
CouponShareURL string `json:"coupon_share_url,omitempty"`
CouponStartFee string `json:"coupon_start_fee,omitempty"`
CouponStartTime string `json:"coupon_start_time,omitempty"`
InputNumIid interface{} `json:"input_num_iid"`
}

type wrapperStruct struct {
TbkDgMaterialOptionalResponse struct {
ResultList struct {
MapData []Material `json:"map_data"`
} `json:"result_list"`
} `json:"tbk_dg_material_optional_response"`
}
type tbDetailStruct struct {
TbkItemInfoGetResponse struct {
Results struct {
NBbkItem []Material `json:"n_tbk_item"`
} `json:"results"`
} `json:"tbk_item_info_get_response"`
}
type scMaterialOptionalStruct struct {
TbkScMaterialOptionalResponse struct {
ResultList struct {
MapData []Material `json:"map_data"`
} `json:"result_list"`
} `json:"tbk_sc_material_optional_response"`
}

type featuredWrapperStruct struct {
TbkDgMaterialOptionalResponse struct {
ResultList struct {
MapData []md.TBSearchFeatureStruct `json:"map_data"`
} `json:"result_list"`
} `json:"tbk_dg_material_optional_response"`
}
type featuredScMaterialOptionalStruct struct {
TbkScMaterialOptionalResponse struct {
ResultList struct {
MapData []md.TBSearchFeatureStruct `json:"map_data"`
} `json:"result_list"`
} `json:"tbk_sc_material_optional_response"`
}

var sortList = map[string]struct{}{
"total_sales_asc": {}, //销量从低到高
"total_sales_des": {}, //销量从高到低
"price_asc": {}, //价格从低到高
"price_des": {}, //价格从高到低
"tk_rate_des": {}, //佣金比率从高到低
"tk_rate_asc": {}, //佣金比率从低到高
"tk_total_sales_asc": {}, //累计推广量从低到高
"tk_total_sales_des": {}, //累计推广量成高到低
"tk_total_commi_asc": {}, //总支出佣金从低到高
"tk_total_commi_des": {}, //总支出佣金高到低
}

func (t *TB) GetList(tbArgs map[string]string, bizSceneId string) ([]byte, error) {
args := map[string]string{
"q": tbArgs["keyword"],
"adzone_id": AdZoneId(t.SelfPromoIdWeb),
"page_size": zhios_third_party_utils.IntToStr(zhios_third_party_utils.StrToInt(tbArgs["pageSize"])),
"page_no": zhios_third_party_utils.IntToStr(zhios_third_party_utils.StrToInt(tbArgs["pageIndex"])),
"platform": "2", // 链接形式-1:PC,2:无线,默认为1
"sort": tbArgs["sort"], // 排序_des(降序),排序_asc(升序),销量(total_sales)淘客佣金比率(tk_rate)累计推广量(tk_total_sales),总支出佣金(tk_total_commi),价格(price)

//"site_id" : "",
}
if bizSceneId != "" {
args["biz_scene_id"] = "2"
}
method := TBK_DG_MTL_OPT
//判断是否跟随官方 需要换接口
if t.AuthType == 1 {
method = TBK_SC_MTL_OPT
Sid := t.UserSID
args["session"] = Sid
_, args["site_id"], args["adzone_id"] = SplitPid(t.SelfPromoIdWeb)
}
// TODO: args[sort] 修复为 args["sort"]
if _, ok := args["sort"]; !ok {
// TODO 按销量高到低排序 而不是 推广量高到低排序
// args["sort"] = "tk_total_sales_des"
// TODO 现修改为:按销量高到低排序
args["sort"] = "total_sales_des"
}
if args["sort"] == "" {
args["sort"] = "total_sales_des"
}
if zhios_third_party_utils.StrToFloat64(tbArgs["startPrice"]) > 0 {
// TODO 数据库中存储的类型为decimal(11,2)(decimal表现形式类似浮点型,但底层结构不一样),无法正常将数据库中的decimal字符串转换int
// args["start_price"] = utils.IntToStr(utils.StrToInt(startPrice))
// TODO 修复为:
args["start_price"] = fmt.Sprintf("%.0f", zhios_third_party_utils.StrToFloat64(tbArgs["startPrice"])) //utils.IntToStr(utils.StrToInt(startPrice))
}
if zhios_third_party_utils.StrToFloat64(tbArgs["startCommissionRate"]) > 0 {
args["start_tk_rate"] = tbArgs["startCommissionRate"]
}
if zhios_third_party_utils.StrToFloat64(tbArgs["endCommissionRate"]) > 0 {
args["end_tk_rate"] = tbArgs["endCommissionRate"]
}
if zhios_third_party_utils.StrToFloat64(tbArgs["endPrice"]) > 0 {
args["end_price"] = zhios_third_party_utils.IntToStr(zhios_third_party_utils.StrToInt(tbArgs["endPrice"]))
}
if tbArgs["isTmall"] == "true" {
args["is_tmall"] = "true"
}
if tbArgs["isCoupon"] == "true" {
args["has_coupon"] = tbArgs["isCoupon"]
}
resp, err := send(args, method, t.Web_AK, t.Web_SK)
if err != nil {
return []byte(""), err
}
return resp, nil
}
func (t *TB) SearchList(args map[string]string) (*[]Material, error) {
resp, err := t.GetList(args, "2")
//如果是跟随官方 结构不一样
if t.AuthType == 1 {
var tmp scMaterialOptionalStruct
if err = json.Unmarshal(resp, &tmp); err != nil {
return nil, err
}
if len(tmp.TbkScMaterialOptionalResponse.ResultList.MapData) == 0 {
return nil, err
}
data := tmp.TbkScMaterialOptionalResponse.ResultList.MapData
for k, v := range data {
itemID, ok := v.ItemID.(float64)
if ok {
data[k].ItemID = int64(itemID)
}
}
return &data, nil
} else {
var tmp wrapperStruct
if err = json.Unmarshal(resp, &tmp); err != nil {
return nil, err
}
if len(tmp.TbkDgMaterialOptionalResponse.ResultList.MapData) == 0 {
return nil, err
}
data := tmp.TbkDgMaterialOptionalResponse.ResultList.MapData
for k, v := range data {
itemID, ok := v.ItemID.(float64)
if ok {
data[k].ItemID = int64(itemID)
}
}
return &data, nil
}

}

func (t *TB) FeaturedList(args map[string]string) (*[]md.TBFeatureStruct, error) {
resp, err := t.GetList(args, "")
//如果是跟随官方 结构不一样
if t.AuthType == 1 {
var tmp featuredScMaterialOptionalStruct
if err = json.Unmarshal(resp, &tmp); err != nil {
return nil, err
}
if len(tmp.TbkScMaterialOptionalResponse.ResultList.MapData) == 0 {
return nil, err
}
var data = tmp.TbkScMaterialOptionalResponse.ResultList.MapData
var res []md.TBFeatureStruct
for _, v := range data {
var tmp md.TBFeatureStruct
copier.Copy(&tmp, v)
tmp.ItemID = zhios_third_party_utils.AnyToString(v.ItemID)
tmp.CouponAmount = zhios_third_party_utils.StrToInt(v.CouponAmount)
res = append(res, tmp)
}
return &res, nil
} else {
var tmp featuredWrapperStruct
if err = json.Unmarshal(resp, &tmp); err != nil {
return nil, err
}
if len(tmp.TbkDgMaterialOptionalResponse.ResultList.MapData) == 0 {
return nil, err
}
var data = tmp.TbkDgMaterialOptionalResponse.ResultList.MapData
var res []md.TBFeatureStruct
for _, v := range data {
var tmp md.TBFeatureStruct
copier.Copy(&tmp, v)
tmp.ItemID = zhios_third_party_utils.AnyToString(v.ItemID)
tmp.CouponAmount = zhios_third_party_utils.StrToInt(v.CouponAmount)
res = append(res, tmp)
}
return &res, nil
}

}

+ 61
- 0
taobao/taobao.go Datei anzeigen

@@ -0,0 +1,61 @@
package taobao

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/md"
zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils"
"xorm.io/xorm"
)

//TaoBaoArgs is args
type TaoBaoArgs struct {
Keyword string
PageIndex string
PageSize string
Sort string
StartPrice string
EndPrice string
IsTmall string
IsCoupon string
StartCommissionRate string
EndCommissionRate string
}

func TaoBaoFeaturedList(eg *xorm.Engine, dbName, Platform string, AccTaobaoShareId int, postData map[string]string) []map[string]string {
var goods = make([]map[string]string, 0)
sdk, err := NewTaobaoSDK(eg, dbName, Platform, AccTaobaoShareId)
if err != nil {
return goods
}
list, err := sdk.TaoBaoFeaturedList(postData)
if list != nil {
for _, v := range *list {
var tmp = map[string]string{
"gid": zhios_third_party_utils.AnyToString(v.ItemID),
"title": v.Title,
"img": v.PictURL,
"sales": zhios_third_party_utils.IntToStr(v.Volume),
"price": zhios_third_party_utils.Float64ToStr(zhios_third_party_utils.StrToFloat64(v.ZkFinalPrice) - float64(v.CouponAmount)),
"cost_price": v.ZkFinalPrice,
"coupon": zhios_third_party_utils.IntToStr(v.CouponAmount),
"commission_rate": zhios_third_party_utils.AnyToString(zhios_third_party_utils.StrToFloat64(v.CommissionRate) / 100),
"commission": zhios_third_party_utils.Float64ToStr((zhios_third_party_utils.StrToFloat64(v.ZkFinalPrice) - float64(v.CouponAmount)) * (zhios_third_party_utils.StrToFloat64(v.CommissionRate) / 100 / 100)),
"pvd": md.PVD_TB,
"share_content": "",
}
goods = append(goods, tmp)
}
}
return goods

}

// TaoBaoSearchList is return taobao search list
func (t *TB) TaoBaoFeaturedList(args map[string]string) (*[]md.TBFeatureStruct, error) {
list, err := t.FeaturedList(
args,
)
if err != nil {
return nil, err
}
return list, nil
}

+ 122
- 0
tik_tok/base.go Datei anzeigen

@@ -0,0 +1,122 @@
package tik_tok

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/db"
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/db/model"
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/md"
zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils"
"errors"
"github.com/tidwall/gjson"
"xorm.io/xorm"
)

func Base(eg *xorm.Engine, dbName, unionId string) (*md.TikTokBase, error) {
var cfg *model.SysUnionSet
var err error
if zhios_third_party_utils.StrToInt(unionId) == 0 {
cfg, err = db.SysUnionByTikTokByUseByAuth(eg, dbName)
} else {
cfg = db.SysUnionById(eg, unionId)
}
if cfg == nil {
return &md.TikTokBase{}, errors.New("没配置")
}
if err != nil {
return &md.TikTokBase{}, err
}
var tmp = &md.TikTokBase{
AuthSubjectType: gjson.Get(cfg.KeyData, "authSubjectType").String(),
LiveAuthSubjectType: gjson.Get(cfg.KeyData, "liveAuthSubjectType").String(),
AuthType: zhios_third_party_utils.IntToStr(cfg.AuthType),
LiveAuthType: zhios_third_party_utils.IntToStr(cfg.LiveAuthType),
ApiGoodsAppKey: gjson.Get(cfg.KeyData, "apiGoodsAppKey").String(),
ApiGoodsAppSecret: gjson.Get(cfg.KeyData, "apiGoodsAppSecret").String(),
GoodsAccessToken: gjson.Get(cfg.KeyData, "goodsAccessToken").String(),
GoodsPid: gjson.Get(cfg.KeyData, "goodsPid").String(),
ApiLiveAppKey: gjson.Get(cfg.KeyData, "apiLiveAppKey").String(),
ApiLiveAppSecret: gjson.Get(cfg.KeyData, "apiLiveAppSecret").String(),
LiveAccessToken: gjson.Get(cfg.KeyData, "liveAccessToken").String(),
LivePid: gjson.Get(cfg.KeyData, "livePid").String(),
TeamAccessToken: gjson.Get(cfg.KeyData, "teamAccessToken").String(),
ApiTeamAppKey: "7136155008692651560",
ApiTeamAppSecret: "b132549f-f62c-491e-86f1-89af3658896a",
SysApiGoodsAppKey: "7076371480799348261",
SysApiGoodsAppSecret: "9e58409e-5729-441e-a9f3-c077ec939fbb",
SysApiLiveAppKey: "7075886119509853704",
SysApiLiveAppSecret: "77b4a105-ecc3-4389-a6a9-07b26e9d38b2",
SysGoodsAccessToken: gjson.Get(cfg.KeyData, "sysGoodsAccessToken").String(),
SysLiveAccessToken: gjson.Get(cfg.KeyData, "sysLiveAccessToken").String(),
SysGoodsPid: gjson.Get(cfg.KeyData, "sysGoodsPid").String(),
SysLivePid: gjson.Get(cfg.KeyData, "sysLivePid").String(),
}
if tmp.AuthType == "3" {
tmp.ApiGoodsAppKey = tmp.SysApiGoodsAppKey
tmp.ApiGoodsAppSecret = tmp.SysApiGoodsAppSecret
tmp.GoodsAccessToken = tmp.SysGoodsAccessToken
tmp.GoodsPid = tmp.SysGoodsPid
}
if tmp.LiveAuthType == "3" {
tmp.ApiLiveAppKey = tmp.SysApiLiveAppKey
tmp.ApiLiveAppSecret = tmp.SysApiLiveAppSecret
tmp.LiveAccessToken = tmp.SysLiveAccessToken
tmp.LivePid = tmp.SysLivePid
}
if tmp.AuthSubjectType == "DouKe" {
tmp.ApiLiveAppKey = tmp.ApiGoodsAppKey
tmp.ApiLiveAppSecret = tmp.ApiGoodsAppSecret
tmp.LiveAccessToken = tmp.GoodsAccessToken
tmp.LivePid = tmp.GoodsPid
}
return tmp, nil
}

func Base1(eg *xorm.Engine, id string) (*md.TikTokBase, error) {
cfg, err := db.SysUnionByTikTokByUseByAuthId(eg, id)
if err != nil || cfg == nil {
return &md.TikTokBase{}, err
}
var tmp = &md.TikTokBase{
AuthSubjectType: gjson.Get(cfg.KeyData, "authSubjectType").String(),
LiveAuthSubjectType: gjson.Get(cfg.KeyData, "liveAuthSubjectType").String(),
AuthType: zhios_third_party_utils.IntToStr(cfg.AuthType),
LiveAuthType: zhios_third_party_utils.IntToStr(cfg.LiveAuthType),
ApiGoodsAppKey: gjson.Get(cfg.KeyData, "apiGoodsAppKey").String(),
ApiGoodsAppSecret: gjson.Get(cfg.KeyData, "apiGoodsAppSecret").String(),
GoodsAccessToken: gjson.Get(cfg.KeyData, "goodsAccessToken").String(),
GoodsPid: gjson.Get(cfg.KeyData, "goodsPid").String(),
ApiLiveAppKey: gjson.Get(cfg.KeyData, "apiLiveAppKey").String(),
ApiLiveAppSecret: gjson.Get(cfg.KeyData, "apiLiveAppSecret").String(),
LiveAccessToken: gjson.Get(cfg.KeyData, "liveAccessToken").String(),
LivePid: gjson.Get(cfg.KeyData, "livePid").String(),
TeamAccessToken: gjson.Get(cfg.KeyData, "teamAccessToken").String(),
ApiTeamAppKey: "7136155008692651560",
ApiTeamAppSecret: "b132549f-f62c-491e-86f1-89af3658896a",
SysApiGoodsAppKey: "7076371480799348261",
SysApiGoodsAppSecret: "9e58409e-5729-441e-a9f3-c077ec939fbb",
SysApiLiveAppKey: "7075886119509853704",
SysApiLiveAppSecret: "77b4a105-ecc3-4389-a6a9-07b26e9d38b2",
SysGoodsAccessToken: gjson.Get(cfg.KeyData, "sysGoodsAccessToken").String(),
SysLiveAccessToken: gjson.Get(cfg.KeyData, "sysLiveAccessToken").String(),
SysGoodsPid: gjson.Get(cfg.KeyData, "sysGoodsPid").String(),
SysLivePid: gjson.Get(cfg.KeyData, "sysLivePid").String(),
}
if tmp.AuthType == "3" {
tmp.ApiGoodsAppKey = tmp.SysApiGoodsAppKey
tmp.ApiGoodsAppSecret = tmp.SysApiGoodsAppSecret
tmp.GoodsAccessToken = tmp.SysGoodsAccessToken
tmp.GoodsPid = tmp.SysGoodsPid
}
if tmp.LiveAuthType == "3" {
tmp.ApiLiveAppKey = tmp.SysApiLiveAppKey
tmp.ApiLiveAppSecret = tmp.SysApiLiveAppSecret
tmp.LiveAccessToken = tmp.SysLiveAccessToken
tmp.LivePid = tmp.SysLivePid
}
if tmp.AuthSubjectType == "DouKe" {
tmp.ApiLiveAppKey = tmp.ApiGoodsAppKey
tmp.ApiLiveAppSecret = tmp.ApiGoodsAppSecret
tmp.LiveAccessToken = tmp.GoodsAccessToken
tmp.LivePid = tmp.GoodsPid
}
return tmp, nil
}

+ 81
- 0
tik_tok/tik_tok_goods.go Datei anzeigen

@@ -0,0 +1,81 @@
package tik_tok

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/md"
zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils"
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/zhimeng"
"fmt"
"github.com/jinzhu/copier"
"xorm.io/xorm"
)

func TikTokSearchGoods(eg *xorm.Engine, dbName string, params map[string]interface{}) []map[string]string {
var goods = make([]map[string]string, 0)
tikTokBase, _ := Base(eg, dbName, "")
var list *[]zhimeng.TikTokData
var err error
if zhios_third_party_utils.InArr(tikTokBase.AuthType, []string{"2", "3"}) {
list, err = OwnTikTokGoods(tikTokBase, params)
} else {
list, err = zhimeng.TikTokGoods(params)
}
fmt.Println(err)
if list != nil {
for _, v := range *list {
var tmp = map[string]string{
"gid": v.GoodsID,
"title": v.GoodsTitle,
"img": v.GoodsImg,
"sales": v.GoodsSales,
"price": v.Price,
"cost_price": v.CostPrice,
"coupon": v.YhqPrice,
"commission_rate": zhios_third_party_utils.AnyToString(v.Commission),
"commission": zhios_third_party_utils.Float64ToStr(zhios_third_party_utils.StrToFloat64(v.Price) * (zhios_third_party_utils.AnyToFloat64(v.Commission) / 100)),
"pvd": md.PVD_TIKTOK,
"share_content": "",
}
goods = append(goods, tmp)
}
}
return goods
}
func OwnTikTokGoods(tikTokBase *md.TikTokBase, tikTokArgs map[string]interface{}) (*[]zhimeng.TikTokData, error) {
args := map[string]string{
"appkey": tikTokBase.ApiGoodsAppKey,
"appSecret": tikTokBase.ApiGoodsAppSecret,
"title": zhios_third_party_utils.AnyToString(tikTokArgs["keyword"]),
"first_cids": zhios_third_party_utils.AnyToString(tikTokArgs["category_id"]),
"price_min": zhios_third_party_utils.AnyToString(tikTokArgs["start_price"]),
"price_max": zhios_third_party_utils.AnyToString(tikTokArgs["end_price"]),
"sell_num_min": zhios_third_party_utils.AnyToString(tikTokArgs["start_sales"]),
"sell_num_max": zhios_third_party_utils.AnyToString(tikTokArgs["end_sales"]),
"sort": zhios_third_party_utils.AnyToString(tikTokArgs["sort"]),
"cos_ratio_min": zhios_third_party_utils.AnyToString(tikTokArgs["start_commission"]),
"cos_ratio_max": zhios_third_party_utils.AnyToString(tikTokArgs["end_commission"]),
"page": zhios_third_party_utils.AnyToString(tikTokArgs["p"]),
"page_size": zhios_third_party_utils.AnyToString(tikTokArgs["size"]),
"acctoken": tikTokBase.SysGoodsAccessToken,
}
for k, v := range args {
if v == "<nil>" {
args[k] = ""
}
}
if args["sort"] == "" {
args["sort"] = "default"
}
if zhios_third_party_utils.StrToInt(args["first_cids"]) == 0 {
args["first_cids"] = ""
}
var data = make([]zhimeng.TikTokData, 0)
list := GoodsList(args)
if list == nil {
return &data, nil
}
err := copier.Copy(&data, list)
if err != nil {
return &data, nil
}
return &data, nil
}

+ 65
- 0
zhimeng/api.go Datei anzeigen

@@ -0,0 +1,65 @@
package zhimeng

import (
zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils"
"fmt"
"sort"
"strconv"
"time"
)

var StatusSuc int = 1

type ZM struct {
AK string
SK string
SMS_AK string
SMS_SK string
}

// 智盟接口, 可以调取京东, 拼多多等
const ZM_HOST = "http://www.izhim.com/"

var (
ZM_BASE_URL = ZM_HOST + "?mod=api&act=%s&ctrl=%s"
APP_KEY = "300000001"
SECRET_KEY = "95c347002b2750dbd4b6a03bd4196c18"
SMS_APP_KEY = "300000175"
SMS_SECRET_KEY = "6cf1dcd1820a576ff2cbecbe00d31df2"
)

func Send(act, op string, args map[string]interface{}) ([]byte, error) {
router := fmt.Sprintf(ZM_BASE_URL, act, op)
// args["appkey"] = APP_KEY
args["time"] = strconv.Itoa(int(time.Now().Unix()))
args["sign"] = sign(args, args["secret_key"].(string))
// b, _ := json.Marshal(args)
// fmt.Println(string(b))
return zhios_third_party_utils.CurlPost(router, args, nil)
}

// SMSend is 发送短信用的key 和签名
func SMSend(act, op, key, secret string, args map[string]interface{}) ([]byte, error) {
router := fmt.Sprintf(ZM_BASE_URL, act, op)
args["appkey"] = key
args["time"] = strconv.Itoa(int(time.Now().Unix()))
args["sign"] = sign(args, secret)
fmt.Println("====短信==", router, args)
return zhios_third_party_utils.CurlPost(router, args, nil)
}

func sign(m map[string]interface{}, SK string) string {
// key sort
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
str := ""
for _, k := range keys {
str += k + zhios_third_party_utils.AnyToString(m[k])
}
// merge string
str = SK + str + SK + "方诺科技"
return zhios_third_party_utils.Md5(str)
}

+ 38
- 0
zhimeng/jd.go Datei anzeigen

@@ -0,0 +1,38 @@
package zhimeng

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/md"
zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils"
"encoding/json"
)

func JdGoods(param map[string]interface{}) []map[string]string {
var goods = make([]map[string]string, 0)
resp, err := Send("jd", "new_getgoods", param)
if err != nil {
return goods
}
var tmp struct {
Data []md.JDZhimengItem `json:"data"`
}
if err = json.Unmarshal(resp, &tmp); err != nil {
return goods
}
for _, v := range tmp.Data {
var tmp = map[string]string{
"gid": v.Gid,
"title": v.GoodsTitle,
"img": v.GoodsImg,
"sales": zhios_third_party_utils.IntToStr(v.InOrderCount),
"price": zhios_third_party_utils.Float64ToStr(v.WlGoodsPrice - float64(v.CouponPrice)),
"cost_price": zhios_third_party_utils.Float64ToStr(v.PcGoodsPrice),
"coupon": zhios_third_party_utils.IntToStr(v.CouponPrice),
"commission_rate": zhios_third_party_utils.AnyToString(v.CommissionRate),
"commission": zhios_third_party_utils.Float64ToStr((v.WlGoodsPrice - float64(v.CouponPrice)) * (zhios_third_party_utils.AnyToFloat64(v.CommissionRate) / 100)),
"pvd": md.PVD_JD,
"share_content": "",
}
goods = append(goods, tmp)
}
return goods
}

+ 58
- 0
zhimeng/kuaishou_goods.go Datei anzeigen

@@ -0,0 +1,58 @@
package zhimeng

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/md"
zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils"
"encoding/json"
)

func KuaiShouGoods(tikTokArgs map[string]interface{}) []map[string]string {
var goods = make([]map[string]string, 0)
args := map[string]interface{}{
"appkey": tikTokArgs["appkey"],
"secret_key": tikTokArgs["secret_key"],
"title": tikTokArgs["keyword"],
"first_cids": tikTokArgs["category_id"],
"price_min": zhios_third_party_utils.AnyToString(tikTokArgs["start_price"]),
"price_max": zhios_third_party_utils.AnyToString(tikTokArgs["end_price"]),
"sell_num_min": zhios_third_party_utils.AnyToString(tikTokArgs["start_sales"]),
"sell_num_max": zhios_third_party_utils.AnyToString(tikTokArgs["end_sales"]),
"sort": tikTokArgs["sort"],
"cos_ratio_min": zhios_third_party_utils.AnyToString(tikTokArgs["start_commission"]),
"cos_ratio_max": zhios_third_party_utils.AnyToString(tikTokArgs["end_commission"]),
"page": tikTokArgs["p"],
"page_size": tikTokArgs["size"],
}
for k, v := range args {
if v == nil || v == "<nil>" {
args[k] = ""
}
}
resp, err := Send("kuaishou", "getGoods", args)
if err != nil {
return goods
}
var tmp struct {
Data []TikTokData `json:"data"`
}
if err = json.Unmarshal(resp, &tmp); err != nil {
return goods
}
for _, v := range tmp.Data {
var tmp = map[string]string{
"gid": v.GoodsID,
"title": v.GoodsTitle,
"img": v.GoodsImg,
"sales": v.GoodsSales,
"price": v.Price,
"cost_price": v.CostPrice,
"coupon": v.YhqPrice,
"commission_rate": zhios_third_party_utils.AnyToString(v.Commission),
"commission": zhios_third_party_utils.Float64ToStr(zhios_third_party_utils.StrToFloat64(v.Price) * (zhios_third_party_utils.AnyToFloat64(v.Commission) / 100)),
"pvd": md.PVD_KUAISHOU,
"share_content": "",
}
goods = append(goods, tmp)
}
return goods
}

+ 38
- 0
zhimeng/pdd.go Datei anzeigen

@@ -0,0 +1,38 @@
package zhimeng

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/md"
zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils"
"encoding/json"
)

func PddGoods(param map[string]interface{}) []map[string]string {
var goods = make([]map[string]string, 0)
resp, err := Send("pdd", "getgoods", param)
if err != nil {
return goods
}
var tmp struct {
Data []md.PDDZhimengItem `json:"data"`
}
if err = json.Unmarshal(resp, &tmp); err != nil {
return goods
}
for _, v := range tmp.Data {
var tmp = map[string]string{
"gid": v.Gid,
"title": v.GoodsTitle,
"img": v.GoodsImg,
"sales": zhios_third_party_utils.AnyToString(v.GoodsSales),
"price": zhios_third_party_utils.Float64ToStr(v.MinGroupPrice - float64(v.CouponPrice)),
"cost_price": zhios_third_party_utils.Float64ToStr(v.MinNormalPrice),
"coupon": zhios_third_party_utils.IntToStr(v.CouponPrice),
"commission_rate": zhios_third_party_utils.AnyToString(v.Commission),
"commission": zhios_third_party_utils.Float64ToStr((v.MinGroupPrice - float64(v.CouponPrice)) * (zhios_third_party_utils.AnyToFloat64(v.Commission) / 100)),
"pvd": md.PVD_PDD,
"share_content": "",
}
goods = append(goods, tmp)
}
return goods
}

+ 230
- 0
zhimeng/tik_tok_goods.go Datei anzeigen

@@ -0,0 +1,230 @@
package zhimeng

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/md"
zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils"
"encoding/json"
"github.com/syyongx/php2go"
"strings"
)

type TikTokArgs struct {
Keyword string
PageSize string
Sort string
StartPrice string
EndPrice string
StartCommissionRate string
EndCommissionRate string
Page string
CategoryId string
StartSales string
EndSales string
}
type TikTokData struct {
Commission string `json:"commission"`
PublicCommission string `json:"public_commission"`
ServiceRatio string `json:"service_ratio"`
CostPrice string `json:"cost_price"`
GoodsID string `json:"goods_id"`
GoodsImg string `json:"goods_img"`
GoodsSales string `json:"goods_sales"`
GoodsTitle string `json:"goods_title"`
InStock string `json:"in_stock"`
Price string `json:"price"`
Sharable string `json:"sharable"`
ShopID string `json:"shop_id"`
ShopName string `json:"shop_name"`
DetailURL string `json:"detail_url"`
YhqPrice string `json:"yhq_price"`
Cid string `json:"cid"`
ActivityStartTime string `json:"activity_start_time"`
ActivityEndTime string `json:"activity_end_time"`
Imgs []string `json:"imgs"`
UpdateTime string `json:"update_time"`
}

type TikTokDetailData struct {
Commission string `json:"commission"`
PublicCommission string `json:"public_commission"`
CostPrice string `json:"cost_price"`
GoodsID string `json:"goods_id"`
GoodsImg string `json:"goods_img"`
GoodsSales string `json:"goods_sales"`
GoodsTitle string `json:"goods_title"`
InStock string `json:"in_stock"`
Price string `json:"price"`
Sharable string `json:"sharable"`
ShopID string `json:"shop_id"`
ShopName string `json:"shop_name"`
DetailUrl string `json:"detail_url"`
YhqPrice string `json:"yhq_price"`
Imgs []string `json:"imgs"`
DetailImgs []string `json:"detail_imgs"`
ShopTotalScore interface{} `json:"shop_total_score"`
}
type ShopTotalScore struct {
LogisticsScore struct {
Level string `json:"level"`
Score string `json:"score"`
Text string `json:"text"`
} `json:"logistics_score"`
ProductScore struct {
Level string `json:"level"`
Score string `json:"score"`
Text string `json:"text"`
} `json:"product_score"`
ServiceScore struct {
Level string `json:"level"`
Score string `json:"score"`
Text string `json:"text"`
} `json:"service_score"`
ShopScore struct {
Level string `json:"level"`
Score string `json:"score"`
Text string `json:"text"`
} `json:"shop_score"`
}

func TikTokDetail(tikTokArgs map[string]interface{}) (*TikTokDetailData, error) {
args := map[string]interface{}{
"appkey": tikTokArgs["appkey"],
"secret_key": tikTokArgs["secret_key"],
"id": tikTokArgs["gid"],
}
resp, err := Send("tik_tok", "getGoodsDetail", args)
if err != nil {
return nil, err
}
var tmp struct {
Data TikTokDetailData `json:"data"`
}
if err = json.Unmarshal(resp, &tmp); err != nil {
return nil, err
}
return &tmp.Data, nil
}
func TikTokDetailSku(tikTokArgs map[string]interface{}) (*md.SkuData, error) {
args := map[string]interface{}{
"appkey": tikTokArgs["appkey"],
"secret_key": tikTokArgs["secret_key"],
"id": tikTokArgs["gid"],
}
resp, err := Send("tik_tok", "getGoodsDetailSku", args)
if err != nil {
return nil, err
}
respstr := strings.ReplaceAll(string(resp), "\"pictures\":[]", "\"pictures\":{}")
var tmp struct {
Data md.SkuData `json:"data"`
}
resp = []byte(respstr)
if err = json.Unmarshal(resp, &tmp); err != nil {
return nil, err
}
return &tmp.Data, nil
}
func TikTokGoods(tikTokArgs map[string]interface{}) (*[]TikTokData, error) {
args := map[string]interface{}{
"appkey": tikTokArgs["appkey"],
"secret_key": tikTokArgs["secret_key"],
"title": tikTokArgs["keyword"],
"first_cids": tikTokArgs["category_id"],
"price_min": zhios_third_party_utils.AnyToString(tikTokArgs["start_price"]),
"price_max": zhios_third_party_utils.AnyToString(tikTokArgs["end_price"]),
"sell_num_min": zhios_third_party_utils.AnyToString(tikTokArgs["start_sales"]),
"sell_num_max": zhios_third_party_utils.AnyToString(tikTokArgs["end_sales"]),
"sort": tikTokArgs["sort"],
"cos_ratio_min": zhios_third_party_utils.AnyToString(tikTokArgs["start_commission"]),
"cos_ratio_max": zhios_third_party_utils.AnyToString(tikTokArgs["end_commission"]),
"page": tikTokArgs["p"],
"page_size": tikTokArgs["size"],
}
for k, v := range args {
if v == nil || v == "<nil>" {
args[k] = ""
}
}
resp, err := Send("tik_tok", "getGoods", args)
if err != nil {
return nil, err
}
var tmp struct {
Data []TikTokData `json:"data"`
}
if err = json.Unmarshal(resp, &tmp); err != nil {
return nil, err
}
return &tmp.Data, nil
}
func TikTokDetailMore(tikTokArgs map[string]interface{}) (*[]TikTokDetailData, error) {
args := map[string]interface{}{
"appkey": tikTokArgs["appkey"],
"secret_key": tikTokArgs["secret_key"],
"id": tikTokArgs["gid"],
}
resp, err := Send("tik_tok", "getGoodsDetailMore", args)
if err != nil {
return nil, err
}
var tmp struct {
Data map[string]TikTokDetailData `json:"data"`
}
data := make([]TikTokDetailData, 0)
if err = json.Unmarshal(resp, &tmp); err != nil {
return nil, err
}
for _, v := range tmp.Data {
data = append(data, v)
}
return &data, nil
}
func TikTokGoodsKl(tikTokArgs map[string]interface{}) (*TikTokDetailData, error) {
args := map[string]interface{}{
"appkey": tikTokArgs["appkey"],
"secret_key": tikTokArgs["secret_key"],
"content": php2go.Base64Encode(tikTokArgs["content"].(string)),
}
for k, v := range args {
if v == nil || v == "<nil>" {
args[k] = ""
}
}
resp, err := Send("tik_tok", "getKlGoods", args)
if err != nil {
return nil, err
}
var tmp struct {
Data TikTokDetailData `json:"data"`
}
if err = json.Unmarshal(resp, &tmp); err != nil {
return nil, err
}
return &tmp.Data, nil
}
func TikTokGoodsKlNew(tikTokArgs map[string]interface{}) (*TikTokDetailData, error) {
args := map[string]interface{}{
"appkey": tikTokArgs["appkey"],
"secret_key": tikTokArgs["secret_key"],
"content": php2go.Base64Encode(tikTokArgs["content"].(string)),
}
for k, v := range args {
if v == nil || v == "<nil>" {
args[k] = ""
}
}
resp, err := Send("tik_tok", "getKlGoodsId", args)
if err != nil {
return nil, err
}
var tmp struct {
Data TikTokDetailData `json:"data"`
}
if err = json.Unmarshal(resp, &tmp); err != nil {
return nil, err
}
if zhios_third_party_utils.StrToFloat64(tmp.Data.YhqPrice) > 0 {
tmp.Data.Price = tmp.Data.CostPrice
}
return &tmp.Data, nil
}

+ 38
- 0
zhimeng/wph.go Datei anzeigen

@@ -0,0 +1,38 @@
package zhimeng

import (
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/md"
zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils"
"encoding/json"
)

func WphGoods(param map[string]interface{}) []map[string]string {
var goods = make([]map[string]string, 0)
resp, err := Send("wph", "seach_goods", param)
if err != nil {
return goods
}
var tmp struct {
Data []md.VIPZhimengItem `json:"data"`
}
if err = json.Unmarshal(resp, &tmp); err != nil {
return goods
}
for _, v := range tmp.Data {
var tmp = map[string]string{
"gid": v.Gid,
"title": v.GoodsTitle,
"img": v.GoodsImg,
"sales": "",
"price": zhios_third_party_utils.Float64ToStr(zhios_third_party_utils.StrToFloat64(v.GoodsPrice) - zhios_third_party_utils.StrToFloat64(v.YhqPrice)),
"cost_price": v.GoodsCostPrice,
"coupon": v.YhqPrice,
"commission_rate": zhios_third_party_utils.AnyToString(v.CommissionRate),
"commission": zhios_third_party_utils.Float64ToStr((zhios_third_party_utils.StrToFloat64(v.GoodsPrice) - zhios_third_party_utils.StrToFloat64(v.YhqPrice)) * (zhios_third_party_utils.AnyToFloat64(v.CommissionRate) / 100)),
"pvd": md.PVD_VIP,
"share_content": "",
}
goods = append(goods, tmp)
}
return goods
}

Laden…
Abbrechen
Speichern