فهرست منبع

代码表服务

WH01243 2 سال پیش
والد
کامیت
96f5a4f5f2
28فایلهای تغییر یافته به همراه3118 افزوده شده و 1340 حذف شده
  1. 7 10
      jyBXBase/rpc/init/db.go
  2. 20 19
      jyBXBase/rpc/init/init.go
  3. 3 3
      jyBXBase/rpc/model/newestBidding.go
  4. 6 1
      jyBXSubscribe/rpc/etc/bxsubscribe.yaml
  5. 45 33
      jyBXSubscribe/rpc/init/init.go
  6. 14 13
      jyBXSubscribe/rpc/internal/config/config.go
  7. 0 1
      jyBXSubscribe/rpc/internal/logic/getsublistlogic.go
  8. 142 128
      jyBXSubscribe/rpc/internal/logic/getsublistlogic_test.go
  9. 1033 1093
      jyBXSubscribe/rpc/model/push.go
  10. 15 0
      jyCodeService/entity/db.go
  11. 9 0
      jyCodeService/entity/logx.go
  12. 18 0
      jyCodeService/go.mod
  13. 976 0
      jyCodeService/go.sum
  14. 27 0
      jyCodeService/rpc/codeservice/codeService.proto
  15. 40 0
      jyCodeService/rpc/codeservice/codeservice.go
  16. 366 0
      jyCodeService/rpc/codeservice/codeservice/codeService.pb.go
  17. 105 0
      jyCodeService/rpc/codeservice/codeservice/codeService_grpc.pb.go
  18. 32 0
      jyCodeService/rpc/codeservice/codeservice/codeservice.go
  19. 6 0
      jyCodeService/rpc/codeservice/etc/codeservice.yaml
  20. 45 0
      jyCodeService/rpc/codeservice/etc/db.yaml
  21. 6 0
      jyCodeService/rpc/codeservice/etc/logs.yaml
  22. 13 0
      jyCodeService/rpc/codeservice/internal/config/config.go
  23. 37 0
      jyCodeService/rpc/codeservice/internal/init/db.go
  24. 47 0
      jyCodeService/rpc/codeservice/internal/init/init.go
  25. 28 39
      jyCodeService/rpc/codeservice/internal/init/pushmapping.go
  26. 37 0
      jyCodeService/rpc/codeservice/internal/logic/codetransformationlogic.go
  27. 28 0
      jyCodeService/rpc/codeservice/internal/server/codeserviceserver.go
  28. 13 0
      jyCodeService/rpc/codeservice/internal/svc/servicecontext.go

+ 7 - 10
jyBXBase/rpc/init/db.go

@@ -4,15 +4,13 @@
 package init
 
 import (
-      "github.com/zeromicro/go-zero/core/logx"
-      "strings"
-
-      "jyBXBase/entity"
-
-      "app.yhyue.com/moapp/jybase/esv1"
-      "app.yhyue.com/moapp/jybase/mongodb"
-      "app.yhyue.com/moapp/jybase/mysql"
-      "app.yhyue.com/moapp/jybase/redis"
+        "app.yhyue.com/moapp/jybase/esv1"
+        "app.yhyue.com/moapp/jybase/mongodb"
+        "app.yhyue.com/moapp/jybase/mysql"
+        "app.yhyue.com/moapp/jybase/redis"
+        "github.com/zeromicro/go-zero/core/logx"
+        "jyBXBase/entity"
+        "strings"
 )
 
 var (
@@ -47,7 +45,6 @@ func MongoDBInit(em *entity.Mongo) {
 	  }
 	  MgoBidding.InitPool()
       }
-      //
       if em.Ent.Address != "" {
 	  logx.Info("--初始化 mongodb ent--")
 	  MgoEnt = mongodb.MongodbSim{

+ 20 - 19
jyBXBase/rpc/init/init.go

@@ -1,12 +1,12 @@
 package init
 
 import (
-      "flag"
-      _ "github.com/go-sql-driver/mysql"
-      "github.com/zeromicro/go-zero/core/conf"
-      "github.com/zeromicro/go-zero/core/logx"
-      "jyBXBase/entity"
-      "jyBXBase/rpc/internal/config"
+        "flag"
+        _ "github.com/go-sql-driver/mysql"
+        "github.com/zeromicro/go-zero/core/conf"
+        "github.com/zeromicro/go-zero/core/logx"
+        "jyBXBase/entity"
+        "jyBXBase/rpc/internal/config"
 )
 
 var configFile = flag.String("cf", "etc/bxbase.yaml", "the config file")
@@ -22,6 +22,19 @@ var logFile = flag.String("lf", "etc/logs.yaml", "the logs file")
 var logc entity.Logc
 
 func init() {
+        //初始化日志信息
+        conf.MustLoad(*logFile, &logc)
+        if len(logc.Level) > 0 {
+	      for _, v := range logc.Level {
+		    logx.MustSetup(logx.LogConf{
+			  Mode:     logc.Mode,
+			  Path:     logc.Path,
+			  Level:    v,
+			  KeepDays: logc.KeepDays,
+		    })
+		    logx.Info(v, "--日志记录")
+	      }
+        }
 	//基本配置
 	conf.MustLoad(*configFile, &C)
 	//数据库配置
@@ -34,17 +47,5 @@ func init() {
 	RedisInit(&DB.Redis)
 	//初始es
 	EsInit(&DB.Es)
-	//初始化日志信息
-	conf.MustLoad(*logFile, &logc)
-	if len(logc.Level) > 0 {
-		for _, v := range logc.Level {
-			logx.MustSetup(logx.LogConf{
-				Mode:     logc.Mode,
-				Path:     logc.Path,
-				Level:    v,
-				KeepDays: logc.KeepDays,
-			})
-			logx.Info(v, "--日志记录")
-		}
-	}
+
 }

+ 3 - 3
jyBXBase/rpc/model/newestBidding.go

@@ -26,7 +26,7 @@ const (
         query_bool_must_and = `{"bool":{"must":[%s],"must_not":[%s]}}`
         search_field        = `"_id","area", "publishtime", "s_subscopeclass", "subtype", "title", "toptype", "type", "buyerclass","bidamount","budget","projectname","buyer","bidopentime","s_winner","filetext","isValidFile","spidercode","site"`
         query_city_hkeys    = `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match": 1}},"highlight": {"pre_tags": ["<a>"],"post_tags": ["</a>"],"fields": {"title": {"fragment_size": 0,"number_of_fragments": 1}}},"_source":[` + search_field + `],"sort":[{"publishtime":"desc"},{"budget":"desc"}],"from":0,"size":20}`
-        Pushbidding         = "pushbidding"
+        Pushbidding         = "bid_baseinfo"
         Province            = "province"
 )
 
@@ -54,8 +54,8 @@ func GetNewestInfo(userId, userType string, newUserId int64) *NewestInfo {
         return nt
 }
 func (n *NewestInfo) GetPushHistory() (res []*bxbase.NewestList) {
-        findSQL := "select b.infoid,a.matchkeys,b.attachment_count,b.budget,b.bidamount from %s a LEFT JOIN %s b ON a.infoid = b.infoid LEFT JOIN %s p on b.area=p.id or  b.city=p.id  where a.userid = '%s'  and a.date >= %d order by a.id desc limit 50"
-        findSQL = fmt.Sprintf(findSQL, n.TableName, Pushbidding, Province, MC.InterfaceToStr(n.NewUserId), time.Now().AddDate(0, 0, -7).Unix())
+        findSQL := "select b.infoid,a.matchkeys,b.isvalidfile as  attachment_count,b.budget,b.bidamount from %s a LEFT JOIN %s b ON a.infoid = b.infoid where a.userid = '%s'  and a.date >= %d order by a.id desc limit 50"
+        findSQL = fmt.Sprintf(findSQL, n.TableName, Pushbidding, MC.InterfaceToStr(n.NewUserId), time.Now().AddDate(0, 0, -7).Unix())
         log.Println(findSQL)
         list := n.MysqlDb.SelectBySql(findSQL)
         if len(*list) > 0 && list != nil {

+ 6 - 1
jyBXSubscribe/rpc/etc/bxsubscribe.yaml

@@ -9,4 +9,9 @@ Webrpcport: 8011
 DefaultDay: 7
 DefaulCount:
   Pay: 1000
-  Free: 50
+  Free: 50
+CodeServiceConf:
+  Etcd:
+    Hosts:
+      - 192.168.3.206:2379
+    Key: codeservice.rpc

+ 45 - 33
jyBXSubscribe/rpc/init/init.go

@@ -1,12 +1,15 @@
 package init
 
 import (
-	"flag"
-	_ "github.com/go-sql-driver/mysql"
-	"github.com/zeromicro/go-zero/core/conf"
-	"github.com/zeromicro/go-zero/core/logx"
-	"jyBXSubscribe/entity"
-	"jyBXSubscribe/rpc/internal/config"
+        "bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/usercenter"
+        "flag"
+        _ "github.com/go-sql-driver/mysql"
+        "github.com/zeromicro/go-zero/core/conf"
+        "github.com/zeromicro/go-zero/core/discov"
+        "github.com/zeromicro/go-zero/core/logx"
+        "github.com/zeromicro/go-zero/zrpc"
+        "jyBXSubscribe/entity"
+        "jyBXSubscribe/rpc/internal/config"
 )
 
 var configF = flag.String("cf", "etc/bxsubscribe.yaml", "the config file")
@@ -21,33 +24,42 @@ var DB config.Db
 //
 var logFile = flag.String("lf", "etc/logs.yaml", "the log file")
 var logc entity.Logc
+var codLib codeService.codeservice
 
 func init() {
-	//初始化基本配置
-	conf.MustLoad(*configF, &C)
-	//初始化数据库配置
-	conf.MustLoad(*dbFile, &DB)
-	//初始mongodb
-	MongoDBInit(&DB.Mongo)
-	//初始化msyql
-	MysqlInit(&DB.Mysql)
-	//初始redis
-	RedisInit(&DB.Redis)
-	//初始es
-	EsInit(&DB.Es)
-	//初始化日志信息
-	conf.MustLoad(*logFile, &logc)
-	if len(logc.Level) > 0 {
-		for _, v := range logc.Level {
-			logx.MustSetup(logx.LogConf{
-				Mode:     logc.Mode,
-				Path:     logc.Path,
-				Level:    v,
-				KeepDays: logc.KeepDays,
-			})
-			logx.Info(v, "--日志记录")
-		}
-	}
-	//
-	PushMapping.Init(GlobalCommonData)
+        //初始化基本配置
+        conf.MustLoad(*configF, &C)
+        //初始化数据库配置
+        conf.MustLoad(*dbFile, &DB)
+        //初始mongodb
+        MongoDBInit(&DB.Mongo)
+        //初始化msyql
+        MysqlInit(&DB.Mysql)
+        //初始redis
+        RedisInit(&DB.Redis)
+        //初始es
+        EsInit(&DB.Es)
+        //初始化日志信息
+        conf.MustLoad(*logFile, &logc)
+        if len(logc.Level) > 0 {
+	      for _, v := range logc.Level {
+		    logx.MustSetup(logx.LogConf{
+			  Mode:     logc.Mode,
+			  Path:     logc.Path,
+			  Level:    v,
+			  KeepDays: logc.KeepDays,
+		    })
+		    logx.Info(v, "--日志记录")
+	      }
+        }
+        //
+        PushMapping.Init(GlobalCommonData)
+        //代码表服务加载
+        codeClient := zrpc.MustNewClient(zrpc.RpcClientConf{
+	      Etcd: discov.EtcdConf{
+		    Hosts: C.UserCenterConf.Etcd.Hosts,
+		    Key:   C.UserCenterConf.Etcd.Key,
+	      },
+        })
+        entity.UserLib = usercenter.NewUserCenter(userClient)
 }

+ 14 - 13
jyBXSubscribe/rpc/internal/config/config.go

@@ -1,23 +1,24 @@
 package config
 
 import (
-	"github.com/zeromicro/go-zero/zrpc"
-	"jyBXSubscribe/entity"
+        "github.com/zeromicro/go-zero/zrpc"
+        "jyBXSubscribe/entity"
 )
 
 type Config struct {
-	zrpc.RpcServerConf
-	Webrpcport  int64
-	DefaultDay  int
-	DefaulCount struct {
-		Pay  int
-		Free int
-	}
+        zrpc.RpcServerConf
+        Webrpcport  int64
+        DefaultDay  int
+        DefaulCount struct {
+	      Pay  int
+	      Free int
+        }
+        CodeService zrpc.RpcClientConf
 }
 
 type Db struct {
-	Mysql entity.Mysql      `json:"mysql"`
-	Redis entity.RedisStuct `json:"redis"`
-	Es    entity.EsStruct   `json:"es"`
-	Mongo entity.Mongo      `json:"mongo"`
+        Mysql entity.Mysql      `json:"mysql"`
+        Redis entity.RedisStuct `json:"redis"`
+        Es    entity.EsStruct   `json:"es"`
+        Mongo entity.Mongo      `json:"mongo"`
 }

+ 0 - 1
jyBXSubscribe/rpc/internal/logic/getsublistlogic.go

@@ -61,7 +61,6 @@ func (l *GetSubListLogic) GetSubList(in *bxsubscribe.SubscribeInfosReq) (*bxsubs
 	          } else {
 	    	  spqp.BaseServiceMysql = IC.PushMysql
 	          }*/
-	//hasNextPage, total, list := false, int64(0), []*bxsubscribe.SubscribeInfo{}
 	hasNextPage, total, list := model.NewSubscribePush(in.UserType).Datas(spqp)
 	/*
 	 *无推送记录生成推送记录

+ 142 - 128
jyBXSubscribe/rpc/internal/logic/getsublistlogic_test.go

@@ -1,142 +1,156 @@
 package logic
 
 import (
-	elastic "app.yhyue.com/moapp/jybase/esv1"
-	"app.yhyue.com/moapp/jybase/mongodb"
-	"app.yhyue.com/moapp/jybase/mysql"
-	"app.yhyue.com/moapp/jybase/redis"
-	"context"
-	"github.com/zeromicro/go-zero/core/logx"
-	"jyBXSubscribe/entity"
-	IC "jyBXSubscribe/rpc/init"
-	"jyBXSubscribe/rpc/internal/config"
-	"jyBXSubscribe/rpc/internal/svc"
-	"jyBXSubscribe/rpc/type/bxsubscribe"
-	"log"
-	"reflect"
-	"strings"
-	"testing"
+        elastic "app.yhyue.com/moapp/jybase/esv1"
+        "app.yhyue.com/moapp/jybase/mongodb"
+        "app.yhyue.com/moapp/jybase/mysql"
+        "app.yhyue.com/moapp/jybase/redis"
+        "context"
+        "github.com/zeromicro/go-zero/core/logx"
+        "jyBXSubscribe/entity"
+        IC "jyBXSubscribe/rpc/init"
+        "jyBXSubscribe/rpc/internal/config"
+        "jyBXSubscribe/rpc/internal/svc"
+        "jyBXSubscribe/rpc/type/bxsubscribe"
+        "log"
+        "reflect"
+        "strings"
+        "testing"
 )
 
 func init() {
 
-	logx.Info("--初始化 mongodb--")
-	IC.Mgo = mongodb.MongodbSim{
-		MongodbAddr: "192.168.3.206:27080",
-		Size:        5,
-		DbName:      "qfw",
-	}
-	IC.Mgo.InitPool()
-	IC.DB = config.Db{Mongo: entity.Mongo{
-		Bidding: &entity.MongoStruct{
-			Collection:     "bidding",
-			CollectionBack: "bidding_back",
-		},
-	}}
-	IC.DB.Mongo.Bidding.Collection = "bidding_back"
-	//
-	logx.Info("--初始化 mongodb bidding--")
-	IC.MgoBidding = mongodb.MongodbSim{
-		MongodbAddr: "192.168.3.206:27001",
-		Size:        5,
-		DbName:      "qfw_data",
-		UserName:    "jyDevGroup",
-		Password:    "jy@DevGroup",
-	}
-	IC.MgoBidding.InitPool()
+        logx.Info("--初始化 mongodb--")
+        IC.Mgo = mongodb.MongodbSim{
+	      MongodbAddr: "192.168.3.206:27080",
+	      Size:        5,
+	      DbName:      "qfw",
+        }
+        IC.Mgo.InitPool()
+        IC.DB = config.Db{Mongo: entity.Mongo{
+	      Bidding: &entity.MongoStruct{
+		    Collection:     "bidding",
+		    CollectionBack: "bidding_back",
+	      },
+        }}
+        IC.DB.Mongo.Bidding.Collection = "bidding_back"
+        //
+        logx.Info("--初始化 mongodb bidding--")
+        IC.MgoBidding = mongodb.MongodbSim{
+	      MongodbAddr: "192.168.3.206:27001",
+	      Size:        5,
+	      DbName:      "qfw_data",
+	      UserName:    "jyDevGroup",
+	      Password:    "jy@DevGroup",
+        }
+        IC.MgoBidding.InitPool()
 
-	logx.Info("--初始化 mysql--")
-	IC.MainMysql = &mysql.Mysql{
-		Address:      "192.168.3.11:3366",
-		UserName:     "root",
-		PassWord:     "Topnet123",
-		DBName:       "jianyu",
-		MaxOpenConns: 5,
-		MaxIdleConns: 5,
-	}
-	IC.MainMysql.Init()
+        logx.Info("--初始化 mysql--")
+        IC.MainMysql = &mysql.Mysql{
+	      Address:      "192.168.3.11:3366",
+	      UserName:     "root",
+	      PassWord:     "Topnet123",
+	      DBName:       "jianyu",
+	      MaxOpenConns: 5,
+	      MaxIdleConns: 5,
+        }
+        IC.MainMysql.Init()
 
-	//初始化 mysql-EntnichePush
-	logx.Info("--初始化 商机管理推送 mysql--")
-	IC.BaseServiceMysql = &mysql.Mysql{
-		Address:      "192.168.3.217:4000",
-		UserName:     "root",
-		PassWord:     "=PDT49#80Z!RVv52_z",
-		DBName:       "base_service",
-		MaxOpenConns: 5,
-		MaxIdleConns: 5,
-	}
-	IC.BaseServiceMysql.Init()
+        //初始化 mysql-EntnichePush
+        logx.Info("--初始化 商机管理推送 mysql--")
+        IC.BaseServiceMysql = &mysql.Mysql{
+	      Address:      "192.168.3.217:4000",
+	      UserName:     "root",
+	      PassWord:     "=PDT49#80Z!RVv52_z",
+	      DBName:       "base_service",
+	      MaxOpenConns: 5,
+	      MaxIdleConns: 5,
+        }
+        IC.BaseServiceMysql.Init()
 
-	logx.Info("--初始化 redis--")
-	redis.InitRedisBySize(strings.Join([]string{"other=192.168.3.206:1712", "push=192.168.3.206:1712", "pushcache_1=192.168.3.206:5000", "pushcache_2_a=192.168.3.206:5001", "pushcache_2_b=192.168.3.206:5002"}, ","), 100, 30, 300)
-	//初始化 elasticsearch
-	logx.Info("--初始化 elasticsearch--")
-	elastic.InitElasticSize("http://192.168.3.206:9800", 5)
+        //初始化 mysql-GlobalCommonData
+
+        logx.Info("--初始化 推送 mysql--")
+        IC.GlobalCommonData = &mysql.Mysql{
+	      Address:      "192.168.3.217:4000",
+	      UserName:     "root",
+	      PassWord:     "=PDT49#80Z!RVv52_z",
+	      DBName:       "global_common_data",
+	      MaxOpenConns: 5,
+	      MaxIdleConns: 5,
+        }
+        IC.GlobalCommonData.Init()
+
+        logx.Info("--初始化 redis--")
+        redis.InitRedisBySize(strings.Join([]string{"other=192.168.3.206:1712", "push=192.168.3.206:1712", "pushcache_1=192.168.3.206:5000", "pushcache_2_a=192.168.3.206:5001", "pushcache_2_b=192.168.3.206:5002"}, ","), 100, 30, 300)
+        //初始化 elasticsearch
+        logx.Info("--初始化 elasticsearch--")
+        elastic.InitElasticSize("http://192.168.3.206:9800", 5)
+        IC.PushMapping.Init(IC.GlobalCommonData)
 }
 
 func TestGetSubListLogic_GetSubList(t *testing.T) {
-	type fields struct {
-		ctx    context.Context
-		svcCtx *svc.ServiceContext
-		Logger logx.Logger
-	}
-	type args struct {
-		in *bxsubscribe.SubscribeInfosReq
-	}
-	tests := []struct {
-		name    string
-		fields  fields
-		args    args
-		want    *bxsubscribe.SubscribeInfosResp
-		wantErr bool
-	}{
-		// TODO: Add test cases.
-		{
-			name:   "推送记录查看",
-			fields: fields{},
-			args: args{
-				in: &bxsubscribe.SubscribeInfosReq{
-					PageNum:    1,
-					PageSize:   20,
-					SelectTime: "",
-					Area:       "",
-					City:       "",
-					Industry:   "",
-					BuyerClass: "",
-					KeyWords:   "",
-					Subtype:    "",
-					UserType:   "mType",
-					UserId:     "5e8eb60ae138234b4f91aacf",
-					EntId:      "1111",
-					AppId:      "10000",
-					Price:      "",
-					FileExists: "",
-					EntUserId:  "",
-					DeptId:     "1111",
-					NewUserId:  11111,
-				},
-			},
-			want:    nil,
-			wantErr: true,
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			l := &GetSubListLogic{
-				ctx:    tt.fields.ctx,
-				svcCtx: tt.fields.svcCtx,
-				Logger: tt.fields.Logger,
-			}
-			got, err := l.GetSubList(tt.args.in)
-			log.Println(got)
-			if (err != nil) != tt.wantErr {
-				t.Errorf("GetSubList() error = %v, wantErr %v", err, tt.wantErr)
-				return
-			}
-			if !reflect.DeepEqual(got, tt.want) {
-				t.Errorf("GetSubList() got = %v, want %v", got, tt.want)
-			}
-		})
-	}
+        type fields struct {
+	      ctx    context.Context
+	      svcCtx *svc.ServiceContext
+	      Logger logx.Logger
+        }
+        type args struct {
+	      in *bxsubscribe.SubscribeInfosReq
+        }
+        tests := []struct {
+	      name    string
+	      fields  fields
+	      args    args
+	      want    *bxsubscribe.SubscribeInfosResp
+	      wantErr bool
+        }{
+	      // TODO: Add test cases.
+	      {
+		    name:   "推送记录查看",
+		    fields: fields{},
+		    args: args{
+			  in: &bxsubscribe.SubscribeInfosReq{
+				PageNum:    1,
+				PageSize:   20,
+				SelectTime: "",
+				Area:       "",
+				City:       "",
+				BuyerClass:   "人大,政协,党委办,组织,宣传,统战,纪委,政府办,发改委,财政,教育,科技,工信,民政,民宗,人社,公安,检察院,法院,司法,应急管理,军队,自然资源,生态环境,住建,市政,城管,交通,水利,农业,气象,文旅,卫健委,医疗,学校,档案,体育,政务中心,机关事务,国资委,海关,税务,市场监管,商务,人行,银保监,证监,审计,出版广电,统计,公共资源交易,社会团体",
+				Subtype: "",
+				KeyWords:   "",
+				Industry:    "",
+				UserType:   "mType",
+				UserId:     "5e8eb60ae138234b4f91aacf",
+				EntId:      "1111",
+				AppId:      "10000",
+				Price:      "",
+				FileExists: "",
+				EntUserId:  "",
+				DeptId:     "1111",
+				NewUserId:  72668,
+			  },
+		    },
+		    want:    nil,
+		    wantErr: true,
+	      },
+        }
+        for _, tt := range tests {
+	      t.Run(tt.name, func(t *testing.T) {
+		    l := &GetSubListLogic{
+			  ctx:    tt.fields.ctx,
+			  svcCtx: tt.fields.svcCtx,
+			  Logger: tt.fields.Logger,
+		    }
+		    got, err := l.GetSubList(tt.args.in)
+		    log.Println(got)
+		    if (err != nil) != tt.wantErr {
+			  t.Errorf("GetSubList() error = %v, wantErr %v", err, tt.wantErr)
+			  return
+		    }
+		    if !reflect.DeepEqual(got, tt.want) {
+			  t.Errorf("GetSubList() got = %v, want %v", got, tt.want)
+		    }
+	      })
+        }
 }

+ 1033 - 1093
jyBXSubscribe/rpc/model/push.go

@@ -1,1265 +1,1205 @@
 package model
 
 import (
-	"app.yhyue.com/moapp/jybase/common"
-	"app.yhyue.com/moapp/jybase/date"
-	"app.yhyue.com/moapp/jybase/encrypt"
-	"app.yhyue.com/moapp/jybase/esv1"
-	"app.yhyue.com/moapp/jybase/mongodb"
-	"app.yhyue.com/moapp/jybase/mysql"
-	"app.yhyue.com/moapp/jybase/redis"
-	"database/sql"
-	"encoding/json"
-	"fmt"
-	"github.com/zeromicro/go-zero/core/logx"
-	"go.mongodb.org/mongo-driver/bson/primitive"
-	IC "jyBXSubscribe/rpc/init"
-	ms "jyBXSubscribe/rpc/model/service"
-	"jyBXSubscribe/rpc/type/bxsubscribe"
-	"log"
-	"strconv"
-	"strings"
-	"sync"
-	"time"
+        "app.yhyue.com/moapp/jybase/common"
+        "app.yhyue.com/moapp/jybase/date"
+        "app.yhyue.com/moapp/jybase/encrypt"
+        "app.yhyue.com/moapp/jybase/esv1"
+        "app.yhyue.com/moapp/jybase/mongodb"
+        "app.yhyue.com/moapp/jybase/mysql"
+        "app.yhyue.com/moapp/jybase/redis"
+        "database/sql"
+        "encoding/json"
+        "fmt"
+        "github.com/zeromicro/go-zero/core/logx"
+        "go.mongodb.org/mongo-driver/bson/primitive"
+        IC "jyBXSubscribe/rpc/init"
+        ms "jyBXSubscribe/rpc/model/service"
+        "jyBXSubscribe/rpc/type/bxsubscribe"
+        "log"
+        "strconv"
+        "strings"
+        "sync"
+        "time"
 )
 
 //
 const (
-	pageSize            = 50
-	AllSubPushCacheSize = 250
-	query               = `{"query":{"terms":{"_id":["%s"]}},"_source":["_id","area", "publishtime", "s_subscopeclass", "subtype", "title", "toptype", "type", "buyerclass","bidamount","budget","projectname","buyer","bidopentime","s_winner","filetext"],"from":0,"size":%d}`
-	mongodb_fields      = `{"_id":1,"area":1,"publishtime":1,"s_subscopeclass":1,"subtype":1,"title":1,"toptype":1,"type":1, "buyerclass":1,"budget":1,"bidamount":1,"s_winner":1,"bidopentime":1,"buyer":1,"projectname":1}`
+        pageSize            = 100
+        AllSubPushCacheSize = 250
+        query               = `{"query":{"terms":{"_id":["%s"]}},"_source":["_id","area", "publishtime", "s_subscopeclass", "subtype", "title", "toptype", "type", "buyerclass","bidamount","budget","projectname","buyer","bidopentime","s_winner","filetext"],"from":0,"size":%d}`
+        mongodb_fields      = `{"_id":1,"area":1,"publishtime":1,"s_subscopeclass":1,"subtype":1,"title":1,"toptype":1,"type":1, "buyerclass":1,"budget":1,"bidamount":1,"s_winner":1,"bidopentime":1,"buyer":1,"projectname":1}`
 
-	SubFreeFlag  = "fType"
-	SubVipFlag   = "vType"
-	MemberFlag   = "mType"
-	EntnicheFlag = "eType"
-	oneDay       = 24 * 60 * 60
-	Pushbidding  = "pushbidding"
-	Province     = "province"
+        SubFreeFlag  = "fType"
+        SubVipFlag   = "vType"
+        MemberFlag   = "mType"
+        EntnicheFlag = "eType"
+        oneDay       = 24 * 60 * 60
+        Baseinfo     = "global_common_data.bid_baseinfo"
+        BidTags      = "global_common_data.bid_tags"
 )
 
 var (
-	buildingInsertCollKey  = []string{"infoid", "area", "city", "buyerclass", "toptype", "subtype", "subscopeclass", "budget", "bidamount", "attachment_count", "publishtime"}
-	ennicheInsertCollKey   = []string{"entid", "deptid", "userid", "infoid", "matchkeys", "date"}
-	subscribeInsertCollKey = []string{"userid", "infoid", "matchkeys", "date", "isvip"}
-	memberInsertCollKey    = []string{"userid", "infoid", "matchkeys", "date"}
+         ennicheInsertCollKey   = []string{"entid", "deptid", "userid", "infoid", "matchkeys", "date"}
+        subscribeInsertCollKey = []string{"userid", "infoid", "matchkeys", "date", "isvip"}
+        memberInsertCollKey    = []string{"userid", "infoid", "matchkeys", "date"}
 )
 
 var aboutDbMsg map[string]*AboutDbMsg = map[string]*AboutDbMsg{
-	SubFreeFlag:  &AboutDbMsg{"pushsubscribe", "subpush"},
-	SubVipFlag:   &AboutDbMsg{"pushsubscribe", "subpush"},
-	MemberFlag:   &AboutDbMsg{"pushmember", "memberpush"},
-	EntnicheFlag: &AboutDbMsg{"pushentniche", "entnichepush"},
+        SubFreeFlag:  &AboutDbMsg{"pushsubscribe", "subpush"},
+        SubVipFlag:   &AboutDbMsg{"pushsubscribe", "subpush"},
+        MemberFlag:   &AboutDbMsg{"pushmember", "memberpush"},
+        EntnicheFlag: &AboutDbMsg{"pushentniche", "entnichepush"},
 }
 
 type AboutDbMsg struct {
-	MysqlTable   string
-	RedisKeyFlag string
+        MysqlTable   string
+        RedisKeyFlag string
 }
 
 type SubPush struct {
-	Date  string
-	Datas []*bxsubscribe.SubscribeInfo
-	Count int64
+        Date  string
+        Datas []*bxsubscribe.SubscribeInfo
+        Count int64
 }
 
 type PushCa struct {
-	Date       int64
-	InfoId     string
-	Visit      int
-	Index      int64
-	Keys       []string
-	Type       int
-	Isvip      int
-	FileExists bool
+        Date       int64
+        InfoId     string
+        Visit      int
+        Index      int64
+        Keys       []string
+        Type       int
+        Isvip      int
+        FileExists bool
 }
 
 //查询参数
 type SubPushQueryParam struct {
-	Mgo_bidding      mongodb.MongodbSim //
-	Bidding          string             //
-	Bidding_back     string             //
-	UserId           string             //用户id
-	PageNum          int                //页面
-	PageSize         int                //每页数量
-	SelectTime       string             //时间
-	Area             string             //区域
-	City             string             //城市
-	Buyerclass       string             //采购单位行业
-	Subtype          string             //信息类型 二级分类
-	Subscopeclass    string             //信息行业
-	Key              string             //订阅词
-	Export           bool               //导出
-	EntId            string             //企业id
-	Price            string             //价格
-	FileExists       string             //是否有附件;默认全部;1:有附件;-1:无附件
-	EntUserId        string             //商机管理用户id
-	DeptId           string             //商机管理用户部门id
-	BaseServiceMysql *mysql.Mysql
-	NewUserId        int64
+        Mgo_bidding      mongodb.MongodbSim //
+        Bidding          string             //
+        Bidding_back     string             //
+        UserId           string             //用户id
+        PageNum          int                //页面
+        PageSize         int                //每页数量
+        SelectTime       string             //时间
+        Area             string             //区域
+        City             string             //城市
+        Buyerclass       string             //采购单位行业
+        Subtype          string             //信息类型 二级分类
+        Subscopeclass    string             //信息行业
+        Key              string             //订阅词
+        Export           bool               //导出
+        EntId            string             //企业id
+        Price            string             //价格
+        FileExists       string             //是否有附件;默认全部;1:有附件;-1:无附件
+        EntUserId        string             //商机管理用户id
+        DeptId           string             //商机管理用户部门id
+        BaseServiceMysql *mysql.Mysql
+        NewUserId        int64
 }
 
 func (spqp *SubPushQueryParam) IsEmpty() bool {
-	return spqp.SelectTime == "" && spqp.Area == "" && spqp.City == "" && spqp.Buyerclass == "" && spqp.Subscopeclass == "" && spqp.Subtype == "" && spqp.Key == "" && spqp.Price == "" && spqp.FileExists == ""
+        return spqp.SelectTime == "" && spqp.Area == "" && spqp.City == "" && spqp.Buyerclass == "" && spqp.Subscopeclass == "" && spqp.Subtype == "" && spqp.Key == "" && spqp.Price == "" && spqp.FileExists == ""
 }
 
 type subscribePush struct {
-	ModuleFlag string
+        ModuleFlag string
 }
 
 func NewSubscribePush(module ...string) *subscribePush {
-	m := ""
-	if len(module) > 0 {
-		m = module[0]
-	}
-	return &subscribePush{m}
+        m := ""
+        if len(module) > 0 {
+	      m = module[0]
+        }
+        return &subscribePush{m}
 }
 
 //从pushcache_2_a中取
 func (s *subscribePush) GetTodayCache(userId string) (*SubPush, error) {
-	pc_a, err := redis.GetNewBytes("pushcache_2_b", s.todayKey(userId))
-	if err != nil {
-		return nil, err
-	}
-	if pc_a == nil {
-		return nil, nil
-	}
-	var p *SubPush
-	if err := json.Unmarshal(*pc_a, &p); err != nil {
-		return nil, err
-	}
-	return p, nil
+        pc_a, err := redis.GetNewBytes("pushcache_2_b", s.todayKey(userId))
+        if err != nil {
+	      return nil, err
+        }
+        if pc_a == nil {
+	      return nil, nil
+        }
+        var p *SubPush
+        if err := json.Unmarshal(*pc_a, &p); err != nil {
+	      return nil, err
+        }
+        return p, nil
 }
 
 //往pushcache_2_a中放
 func (s *subscribePush) PutTodayCache(userId string, pc_a *SubPush) {
-	redis.Put("pushcache_2_b", s.todayKey(userId), pc_a, oneDay)
+        redis.Put("pushcache_2_b", s.todayKey(userId), pc_a, oneDay)
 }
 
 //获取redis key
 func (s *subscribePush) todayKey(userId string) string {
-	return fmt.Sprintf("%s_%s", aboutDbMsg[s.ModuleFlag].RedisKeyFlag, userId)
+        return fmt.Sprintf("%s_%s", aboutDbMsg[s.ModuleFlag].RedisKeyFlag, userId)
 }
 func (s *subscribePush) allKey(userId string) string {
-	return fmt.Sprintf("all_%s_%s", aboutDbMsg[s.ModuleFlag].RedisKeyFlag, userId)
+        return fmt.Sprintf("all_%s_%s", aboutDbMsg[s.ModuleFlag].RedisKeyFlag, userId)
 }
 
 //历史推送记录中单条信息格式化
 func (s *subscribePush) InfoFormat(p *PushCa, info *map[string]interface{}) *bxsubscribe.SubscribeInfo {
-	area := common.ObjToString((*info)["area"])
-	if area == "A" {
-		area = "全国"
-	}
-	industry := common.ObjToString((*info)["s_subscopeclass"])
-	scs := strings.Split(industry, ",")
-	if len(scs) > 0 {
-		industry = scs[0]
-		if industry != "" {
-			iss := strings.Split(industry, "_")
-			if len(iss) > 0 {
-				industry = iss[0]
-			}
-		}
-	}
-	infotype := common.ObjToString((*info)["subtype"])
-	if infotype == "" {
-		infotype = common.ObjToString((*info)["toptype"])
-	}
-	if infotype == "" {
-		infotype = common.ObjToString((*info)["type"])
-		if infotype == "tender" {
-			infotype = "招标"
-		} else if infotype == "bid" {
-			infotype = "中标"
-		}
-	}
-	_id := p.InfoId
-	if _id == "" {
-		_id = common.ObjToString((*info)["_id"])
-	}
-	return &bxsubscribe.SubscribeInfo{
-		XId:          encrypt.EncodeArticleId2ByCheck(_id),
-		Title:        common.ObjToString((*info)["title"]),
-		Area:         area,
-		BuyerClass:   common.ObjToString((*info)["buyerclass"]),
-		Subtype:      infotype,
-		Industry:     industry,
-		PublishTime:  common.Int64All((*info)["publishtime"]),
-		CaIndex:      p.Index,
-		CaDate:       p.Date,
-		CaIsvisit:    int64(p.Visit),
-		CaIsvip:      int64(p.Isvip),
-		CaType:       int64(p.Type),
-		MatchKeys:    p.Keys,
-		Budget:       common.ObjToString((*info)["budget"]),
-		BidAmount:    common.ObjToString((*info)["bidamount"]),
-		Buyer:        common.ObjToString((*info)["buyer"]),
-		ProjectName:  common.ObjToString((*info)["projectname"]),
-		Winner:       common.ObjToString((*info)["s_winner"]),
-		BidOpenTime:  common.ObjToString((*info)["bidopentime"]),
-		CaFileExists: p.FileExists,
-	}
+        area := common.ObjToString((*info)["area"])
+        if area == "A" {
+	      area = "全国"
+        }
+        industry := common.ObjToString((*info)["s_subscopeclass"])
+        scs := strings.Split(industry, ",")
+        if len(scs) > 0 {
+	      industry = scs[0]
+	      if industry != "" {
+		    iss := strings.Split(industry, "_")
+		    if len(iss) > 0 {
+			  industry = iss[0]
+		    }
+	      }
+        }
+        infotype := common.ObjToString((*info)["subtype"])
+        if infotype == "" {
+	      infotype = common.ObjToString((*info)["toptype"])
+        }
+        if infotype == "" {
+	      infotype = common.ObjToString((*info)["type"])
+	      if infotype == "tender" {
+		    infotype = "招标"
+	      } else if infotype == "bid" {
+		    infotype = "中标"
+	      }
+        }
+        _id := p.InfoId
+        if _id == "" {
+	      _id = common.ObjToString((*info)["_id"])
+        }
+        return &bxsubscribe.SubscribeInfo{
+	      XId:          encrypt.EncodeArticleId2ByCheck(_id),
+	      Title:        common.ObjToString((*info)["title"]),
+	      Area:         area,
+	      BuyerClass:   common.ObjToString((*info)["buyerclass"]),
+	      Subtype:      infotype,
+	      Industry:     industry,
+	      PublishTime:  common.Int64All((*info)["publishtime"]),
+	      CaIndex:      p.Index,
+	      CaDate:       p.Date,
+	      CaIsvisit:    int64(p.Visit),
+	      CaIsvip:      int64(p.Isvip),
+	      CaType:       int64(p.Type),
+	      MatchKeys:    p.Keys,
+	      Budget:       common.ObjToString((*info)["budget"]),
+	      BidAmount:    common.ObjToString((*info)["bidamount"]),
+	      Buyer:        common.ObjToString((*info)["buyer"]),
+	      ProjectName:  common.ObjToString((*info)["projectname"]),
+	      Winner:       common.ObjToString((*info)["s_winner"]),
+	      BidOpenTime:  common.ObjToString((*info)["bidopentime"]),
+	      CaFileExists: p.FileExists,
+        }
 }
 
 func (s *subscribePush) Datas(spqp *SubPushQueryParam) (hasNextPage bool, total int64, result []*bxsubscribe.SubscribeInfo) {
-	logx.Info(spqp.UserId, spqp.NewUserId, s.ModuleFlag, "subscribePush query param:", "SelectTime:", spqp.SelectTime, "Area:", spqp.Area, "City:", spqp.City, "Subtype:", spqp.Subtype, "Subscopeclass:", spqp.Subscopeclass, "Buyerclass:", spqp.Buyerclass, "Key:", spqp.Key, "PageNum:", spqp.PageNum, "Price:", spqp.Price, "FileExists:", spqp.FileExists)
-	if spqp.UserId == "" {
-		return
-	}
-	if spqp.PageNum < 1 {
-		spqp.PageNum = 1
-	}
-	if spqp.PageSize < 1 || spqp.PageSize > pageSize {
-		if !spqp.Export {
-			spqp.PageSize = pageSize
-		} else { //数据导出查询20000条限制
-			if spqp.PageSize < 1 || spqp.PageSize > 20000 {
-				spqp.PageSize = 20000
-			}
-		}
-	}
-	starttime, endtime := int64(0), int64(0)
-	logx.Info(4444)
-	if len(strings.Split(spqp.SelectTime, "_")) == 2 {
-		st := strings.Split(spqp.SelectTime, "_")[0]
-		et := strings.Split(spqp.SelectTime, "_")[1]
-		if st != "" && et != "" {
-			starttime, _ = strconv.ParseInt(st, 0, 64)
-			endtime, _ = strconv.ParseInt(et, 0, 64)
-			if endtime > 0 {
-				etTime := time.Unix(endtime, 0)
-				endtime = time.Date(etTime.Year(), etTime.Month(), etTime.Day(), 23, 59, 59, 0, time.Local).Unix()
-			}
-		}
-	}
-	nowFormat := date.NowFormat(date.Date_Short_Layout)
-	start := (spqp.PageNum - 1) * spqp.PageSize
-	end := start + spqp.PageSize
-	//时间是今天,没有别的过滤条件--首先读取当前推送缓存数据 其次查询数据库
-	if nowFormat == date.FormatDateByInt64(&starttime, date.Date_Short_Layout) && spqp.Area == "" && spqp.City == "" && spqp.Buyerclass == "" && spqp.Subscopeclass == "" && spqp.Subtype == "" && spqp.Key == "" && spqp.Price == "" && spqp.FileExists == "" {
-		logx.Info("a1:", s.todayKey(spqp.UserId))
-		subPush, err := s.GetTodayCache(spqp.UserId)
-		if err != nil {
-			logx.Info(spqp.UserId, "GetTodayCache Error", err)
-		}
-		if err != nil || subPush == nil || subPush.Date != nowFormat || len(subPush.Datas) == 0 {
-			list, countSearch := s.getDatasFromMysql(spqp, starttime, endtime, spqp.PageSize, false)
-			subPush = &SubPush{
-				Date:  nowFormat,
-				Datas: list,
-				Count: countSearch,
-			}
-			s.PutTodayCache(spqp.UserId, subPush)
-		}
-		length := len(subPush.Datas)
-		if end > length {
-			end = length
-		}
-		if start < length {
-			result = subPush.Datas[start:end]
-		}
-		total = int64(length)
-	} else if spqp.IsEmpty() && (spqp.PageNum-1)*spqp.PageSize <= 250 { //全部,没有过滤条件 之前缓存5页*50条=250
-		logx.Info("a2:", s.allKey(spqp.UserId))
-		allCache, err := s.GetAllCache(spqp.UserId)
-		if err != nil {
-			logx.Info(spqp.UserId, "GetAllCache Error", err)
-		}
-		if err != nil || allCache == nil || allCache.Date != nowFormat || len(allCache.Datas) == 0 {
-			spqp.PageNum = 1
-			logx.Info(1111)
-			list, countSearch := s.getDatasFromMysql(spqp, starttime, endtime, AllSubPushCacheSize, true)
-			allCache = &SubPush{
-				Date:  nowFormat,
-				Datas: list,
-				Count: countSearch,
-			}
-			s.PutAllCache(spqp.UserId, allCache)
-		}
-		length := len(allCache.Datas)
-		if end > length {
-			end = length
-		}
-		if start < length {
-			result = allCache.Datas[start:end]
-		}
-		total = allCache.Count
-	} else {
-		logx.Info("a4")
-		result, total = s.getDatasFromMysql(spqp, starttime, endtime, spqp.PageSize, true)
-	}
-	logx.Info("-------------------------------------------------", len(result))
-	log.Println(spqp.IsEmpty() && (spqp.PageNum-1)*spqp.PageSize <= 250)
-	if result == nil {
-		result = []*bxsubscribe.SubscribeInfo{}
-	}
-	hasNextPage = len(result) >= spqp.PageSize
-	return
+        logx.Info(spqp.UserId, spqp.NewUserId, s.ModuleFlag, "subscribePush query param:", "SelectTime:", spqp.SelectTime, "Area:", spqp.Area, "City:", spqp.City, "Subtype:", spqp.Subtype, "Subscopeclass:", spqp.Subscopeclass, "Buyerclass:", spqp.Buyerclass, "Key:", spqp.Key, "PageNum:", spqp.PageNum, "Price:", spqp.Price, "FileExists:", spqp.FileExists)
+        if spqp.UserId == "" {
+	      return
+        }
+        if spqp.PageNum < 1 {
+	      spqp.PageNum = 1
+        }
+        if spqp.PageSize < 1 || spqp.PageSize > pageSize {
+	      if !spqp.Export {
+		    spqp.PageSize = pageSize
+	      } else { //数据导出查询20000条限制
+		    if spqp.PageSize < 1 || spqp.PageSize > 20000 {
+			  spqp.PageSize = 20000
+		    }
+	      }
+        }
+        starttime, endtime := int64(0), int64(0)
+        if len(strings.Split(spqp.SelectTime, "_")) == 2 {
+	      st := strings.Split(spqp.SelectTime, "_")[0]
+	      et := strings.Split(spqp.SelectTime, "_")[1]
+	      if st != "" && et != "" {
+		    starttime, _ = strconv.ParseInt(st, 0, 64)
+		    endtime, _ = strconv.ParseInt(et, 0, 64)
+		    if endtime > 0 {
+			  etTime := time.Unix(endtime, 0)
+			  endtime = time.Date(etTime.Year(), etTime.Month(), etTime.Day(), 23, 59, 59, 0, time.Local).Unix()
+		    }
+	      }
+        }
+        nowFormat := date.NowFormat(date.Date_Short_Layout)
+        start := (spqp.PageNum - 1) * spqp.PageSize
+        end := start + spqp.PageSize
+        //时间是今天,没有别的过滤条件--首先读取当前推送缓存数据 其次查询数据库
+        if nowFormat == date.FormatDateByInt64(&starttime, date.Date_Short_Layout) && spqp.Area == "" && spqp.City == "" && spqp.Buyerclass == "" && spqp.Subscopeclass == "" && spqp.Subtype == "" && spqp.Key == "" && spqp.Price == "" && spqp.FileExists == "" {
+	      logx.Info("a1:", s.todayKey(spqp.UserId))
+	      subPush, err := s.GetTodayCache(spqp.UserId)
+	      if err != nil {
+		    logx.Info(spqp.UserId, "GetTodayCache Error", err)
+	      }
+	      if err != nil || subPush == nil || subPush.Date != nowFormat || len(subPush.Datas) == 0 {
+		    list, countSearch := s.getDatasFromMysql(spqp, starttime, endtime, spqp.PageSize, false)
+		    subPush = &SubPush{
+			  Date:  nowFormat,
+			  Datas: list,
+			  Count: countSearch,
+		    }
+		    s.PutTodayCache(spqp.UserId, subPush)
+	      }
+	      length := len(subPush.Datas)
+	      if end > length {
+		    end = length
+	      }
+	      if start < length {
+		    result = subPush.Datas[start:end]
+	      }
+	      total = int64(length)
+        } else if spqp.IsEmpty() && (spqp.PageNum-1)*spqp.PageSize <= 250 { //全部,没有过滤条件 之前缓存5页*50条=250
+	      logx.Info("a2:", s.allKey(spqp.UserId))
+	      allCache, err := s.GetAllCache(spqp.UserId)
+	      if err != nil {
+		    logx.Info(spqp.UserId, "GetAllCache Error", err)
+	      }
+	      if err != nil || allCache == nil || allCache.Date != nowFormat || len(allCache.Datas) == 0 {
+		    spqp.PageNum = 1
+		    logx.Info(1111)
+		    list, countSearch := s.getDatasFromMysql(spqp, starttime, endtime, AllSubPushCacheSize, true)
+		    allCache = &SubPush{
+			  Date:  nowFormat,
+			  Datas: list,
+			  Count: countSearch,
+		    }
+		    s.PutAllCache(spqp.UserId, allCache)
+	      }
+	      length := len(allCache.Datas)
+	      if end > length {
+		    end = length
+	      }
+	      if start < length {
+		    result = allCache.Datas[start:end]
+	      }
+	      total = allCache.Count
+        } else {
+	      logx.Info("a4")
+	      result, total = s.getDatasFromMysql(spqp, starttime, endtime, spqp.PageSize, true)
+        }
+        logx.Info("-------------------------------------------------", len(result))
+        log.Println(spqp.IsEmpty() && (spqp.PageNum-1)*spqp.PageSize <= 250)
+        if result == nil {
+	      result = []*bxsubscribe.SubscribeInfo{}
+        }
+        hasNextPage = len(result) >= spqp.PageSize
+        return
 }
 
 //
 func (s *subscribePush) getDatasFromMysql(spqp *SubPushQueryParam, starttime, endtime int64, size int, isLimit bool) (result []*bxsubscribe.SubscribeInfo, count int64) {
-	querys := []string{fmt.Sprintf("a.userid='%s'", common.If(s.ModuleFlag == "eType", spqp.EntUserId, common.InterfaceToStr(spqp.NewUserId)))}
-	//时间
-	if starttime > 0 && endtime > 0 {
-		querys = append(querys, fmt.Sprintf("a.date>=%d and date<=%d", starttime, endtime))
-	} else if starttime > 0 && endtime == 0 {
-		querys = append(querys, fmt.Sprintf("a.date>=%d", starttime))
-	} else if starttime == 0 && endtime > 0 {
-		querys = append(querys, fmt.Sprintf("a.date<=%d", endtime))
-	}
-	if spqp.Area != "" || spqp.City != "" {
-		var sqlAreaCity = ""
-		//城市
-		city := []string{}
-		for _, v := range strings.Split(spqp.City, ",") {
-			if IC.PushMapping.City[v] != "" {
-				city = append(city, fmt.Sprint(IC.PushMapping.City[v]))
-			} else {
-				city = append(city, "-1")
-			}
-		}
-		if len(city) == 1 {
-			city = append(city, "9999")
-		}
-		if len(city) > 0 {
-			sqlAreaCity = fmt.Sprintf("p.city in (%s)", strings.Join(city, ","))
-		}
-		//区域
-		var sqlArea = ""
-		area := []string{}
-		for _, v := range strings.Split(spqp.Area, ",") {
-			if IC.PushMapping.Area[v] != "" {
-				area = append(area, fmt.Sprint(IC.PushMapping.Area[v]))
-			} else {
-				area = append(area, "-1")
-			}
-		}
-		if len(area) == 1 {
-			area = append(area, "9999")
-		}
-		if len(area) > 0 {
-			sqlArea = fmt.Sprintf("p.area in (%s)", strings.Join(area, ","))
-		}
-		if sqlAreaCity != "" && sqlArea != "" {
-			sqlAreaCity = "( " + sqlAreaCity + " or " + sqlArea + " )"
-		} else if sqlAreaCity == "" && sqlArea != "" {
-			sqlAreaCity = sqlArea
-		}
-		if sqlAreaCity != "" {
-			querys = append(querys, sqlAreaCity)
-		}
-	}
-	//采购单位行业
-	if spqp.Buyerclass != "" {
-		buyerclass := []string{}
-		for _, v := range strings.Split(spqp.Buyerclass, ",") {
-			buyerclass = append(buyerclass, fmt.Sprint(IC.PushMapping.Buyerclass[v]))
-		}
-		if len(buyerclass) == 1 {
-			buyerclass = append(buyerclass, "9999")
-		}
-		if len(buyerclass) > 0 {
-			querys = append(querys, fmt.Sprintf("b.buyerclass in (%s)", strings.Join(buyerclass, ",")))
-		}
-	}
-	//信息类型
-	if spqp.Subtype != "" {
-		subtype := []string{}
-		for _, v := range strings.Split(spqp.Subtype, ",") {
-			subtype = append(subtype, fmt.Sprint(IC.PushMapping.Subtype[v]))
-		}
-		if len(subtype) == 1 {
-			subtype = append(subtype, "9999")
-		}
-		if len(subtype) > 0 {
-			querys = append(querys, fmt.Sprintf("b.subtype in (%s)", strings.Join(subtype, ",")))
-		}
-	}
-	//信息行业
-	if spqp.Subscopeclass != "" {
-		find_in_set := []string{}
-		for _, v := range strings.Split(spqp.Subscopeclass, ",") {
-			find_in_set = append(find_in_set, fmt.Sprintf("find_in_set('%d',b.subscopeclass)", IC.PushMapping.Subscopeclass[v]))
-		}
-		if len(find_in_set) == 1 {
-			querys = append(querys, find_in_set[0])
-		} else if len(find_in_set) > 1 {
-			querys = append(querys, fmt.Sprintf("(%s)", strings.Join(find_in_set, " or ")))
-		}
-	}
-	//关键词
-	if spqp.Key != "" {
-		find_in_set := []string{}
-		for _, v := range strings.Split(spqp.Key, ",") {
-			find_in_set = append(find_in_set, fmt.Sprintf("find_in_set('%s',replace(replace(a.matchkeys,'+',','),' ',','))", v))
-		}
-		if len(find_in_set) == 1 {
-			querys = append(querys, find_in_set[0])
-		} else if len(find_in_set) > 1 {
-			querys = append(querys, fmt.Sprintf("(%s)", strings.Join(find_in_set, " or ")))
-		}
-	}
-	//价格- 预算和中标金额
-	if spqp.Price != "" && strings.Contains(spqp.Price, "-") {
-		minPriceStr, maxPriceStr := strings.Split(spqp.Price, "-")[0], strings.Split(spqp.Price, "-")[1]
-		minPrice := common.Int64All(common.Float64All(minPriceStr) * 10000) //换成元
-		maxPrice := common.Int64All(common.Float64All(maxPriceStr) * 10000) //换成元
-		if minPriceStr != "" && maxPriceStr != "" {
-			querys = append(querys, fmt.Sprintf("((b.bidamount>=%d and b.bidamount<=%d) or (b.budget>=%d and b.budget<=%d and b.bidamount is null))", minPrice, maxPrice, minPrice, maxPrice))
-		} else if minPriceStr != "" {
-			querys = append(querys, fmt.Sprintf("(b.bidamount>=%d  or (b.budget>=%d and b.bidamount is null))", minPrice, minPrice))
-		} else if maxPriceStr != "" {
-			querys = append(querys, fmt.Sprintf("(b.bidamount<=%d or (b.budget<=%d and b.bidamount is null))", maxPrice, maxPrice))
-		}
-	}
-	//附件
-	if spqp.FileExists != "" {
-		if spqp.FileExists == "1" {
-			querys = append(querys, fmt.Sprintf("b.attachment_count is not null"))
-		} else if spqp.FileExists == "-1" {
-			querys = append(querys, fmt.Sprintf("b.attachment_count is null"))
-		}
-	}
-	searchSql := fmt.Sprintf(" from %s  a LEFT JOIN %s b ON a.infoid = b.infoid LEFT JOIN %s p on b.area=p.id or  b.city=p.id where %s"+
-		" order by a.id desc", aboutDbMsg[s.ModuleFlag].MysqlTable, Pushbidding, Province, strings.Join(querys, " and "))
-	fmt.Println("searchSql", searchSql)
-	//查询总数
-	count = spqp.BaseServiceMysql.CountBySql(fmt.Sprintf("select count(a.id)" + searchSql))
-	logx.Info("count:", count, "---", s.ModuleFlag)
-	findSql := "select a.id,a.date,a.infoid,a.isvisit,a.matchkeys,a.type,b.attachment_count"
-	if s.ModuleFlag != MemberFlag && s.ModuleFlag != EntnicheFlag {
-		findSql += ",isvip"
-	}
-	findSql += searchSql
-	if isLimit {
-		findSql += fmt.Sprintf(" limit %d,%d", (spqp.PageNum-1)*size, size)
-	}
-	logx.Info(spqp.NewUserId, "subscribePush query sql:", findSql)
-	list := spqp.BaseServiceMysql.SelectBySql(findSql)
-	if list != nil && len(*list) > 0 {
-		pushCas := s.GetJyPushs(*list)
-		result = s.GetInfoByIds(spqp.Mgo_bidding, spqp.Bidding, spqp.Bidding_back, pushCas)
-	} else {
-		result = []*bxsubscribe.SubscribeInfo{}
-	}
-	return
+        querys := []string{fmt.Sprintf("a.userid='%s'", common.If(s.ModuleFlag == "eType", spqp.EntUserId, common.InterfaceToStr(spqp.NewUserId)))}
+        //时间
+        if starttime > 0 && endtime > 0 {
+	      querys = append(querys, fmt.Sprintf("a.date>=%d and date<=%d", starttime, endtime))
+        } else if starttime > 0 && endtime == 0 {
+	      querys = append(querys, fmt.Sprintf("a.date>=%d", starttime))
+        } else if starttime == 0 && endtime > 0 {
+	      querys = append(querys, fmt.Sprintf("a.date<=%d", endtime))
+        }
+        if spqp.Area != "" || spqp.City != "" {
+	      var sqlAreaCity = ""
+	      //城市
+	      city := []string{}
+	      for _, v := range strings.Split(spqp.City, ",") {
+		    if IC.PushMapping.City[v] != "" {
+			  city = append(city, fmt.Sprint(IC.PushMapping.City[v]))
+		    } else {
+			  city = append(city, "-1")
+		    }
+	      }
+	      if len(city) == 1 {
+		    city = append(city, "9999")
+	      }
+	      if len(city) > 0 {
+		    sqlAreaCity = fmt.Sprintf("p.city in (%s)", strings.Join(city, ","))
+	      }
+	      //区域
+	      var sqlArea = ""
+	      area := []string{}
+	      for _, v := range strings.Split(spqp.Area, ",") {
+		    if IC.PushMapping.Area[v] != "" {
+			  area = append(area, fmt.Sprint(IC.PushMapping.Area[v]))
+		    } else {
+			  area = append(area, "-1")
+		    }
+	      }
+	      if len(area) == 1 {
+		    area = append(area, "9999")
+	      }
+	      if len(area) > 0 {
+		    sqlArea = fmt.Sprintf("p.area in (%s)", strings.Join(area, ","))
+	      }
+	      if sqlAreaCity != "" && sqlArea != "" {
+		    sqlAreaCity = "( " + sqlAreaCity + " or " + sqlArea + " )"
+	      } else if sqlAreaCity == "" && sqlArea != "" {
+		    sqlAreaCity = sqlArea
+	      }
+	      if sqlAreaCity != "" {
+		    querys = append(querys, sqlAreaCity)
+	      }
+        }
+        //采购单位行业
+        if spqp.Buyerclass != "" {
+	      buyerclass := []string{}
+	      for _, v := range strings.Split(spqp.Buyerclass, ",") {
+		    if IC.PushMapping.Buyerclass[v] != "" {
+			  buyerclass = append(buyerclass, fmt.Sprint(IC.PushMapping.Buyerclass[v]))
+		    }
+	      }
+	      if len(buyerclass) == 1 {
+		    buyerclass = append(buyerclass, "9999")
+	      }
+	      if len(buyerclass) > 0 {
+		    querys = append(querys, fmt.Sprintf("b.buyerclass_code in (%s)", strings.Join(buyerclass, ",")))
+	      }
+
+        }
+        //信息类型
+        if spqp.Subtype != "" {
+	      subtype := []string{}
+	      for _, v := range strings.Split(spqp.Subtype, ",") {
+		    if IC.PushMapping.Subtype[v] != "" {
+			  subtype = append(subtype, fmt.Sprint(IC.PushMapping.Subtype[v]))
+		    }
+
+	      }
+	      if len(subtype) == 1 {
+		    subtype = append(subtype, "9999")
+	      }
+	      if len(subtype) > 0 {
+		    querys = append(querys, fmt.Sprintf("b.subtype_code in (%s)", strings.Join(subtype, ",")))
+	      }
+
+        }
+        //信息行业
+        if spqp.Subscopeclass != "" {
+	      find_in_set := []string{}
+	      for _, v := range strings.Split(spqp.Subscopeclass, ",") {
+		    if IC.PushMapping.Subscopeclass[v] != "" {
+			  find_in_set = append(find_in_set, fmt.Sprintf("find_in_set('%s',t.subscopeclass) and t.labelcode=2 ", IC.PushMapping.Subscopeclass[v]))
+		    }
+
+	      }
+	      if len(find_in_set) == 1 {
+		    querys = append(querys, find_in_set[0])
+	      } else if len(find_in_set) > 1 {
+		    querys = append(querys, fmt.Sprintf("(%s)", strings.Join(find_in_set, " or ")))
+	      }
+        }
+        //关键词
+        if spqp.Key != "" {
+	      find_in_set := []string{}
+	      for _, v := range strings.Split(spqp.Key, ",") {
+		    find_in_set = append(find_in_set, fmt.Sprintf("find_in_set('%s',replace(replace(a.matchkeys,'+',','),' ',','))", v))
+	      }
+	      if len(find_in_set) == 1 {
+		    querys = append(querys, find_in_set[0])
+	      } else if len(find_in_set) > 1 {
+		    querys = append(querys, fmt.Sprintf("(%s)", strings.Join(find_in_set, " or ")))
+	      }
+        }
+        //价格- 预算和中标金额
+        if spqp.Price != "" && strings.Contains(spqp.Price, "-") {
+	      minPriceStr, maxPriceStr := strings.Split(spqp.Price, "-")[0], strings.Split(spqp.Price, "-")[1]
+	      minPrice := common.Int64All(common.Float64All(minPriceStr) * 10000) //换成元
+	      maxPrice := common.Int64All(common.Float64All(maxPriceStr) * 10000) //换成元
+	      if minPriceStr != "" && maxPriceStr != "" {
+		    querys = append(querys, fmt.Sprintf("((b.bidamount>=%d and b.bidamount<=%d) or (b.budget>=%d and b.budget<=%d and b.bidamount is null))", minPrice, maxPrice, minPrice, maxPrice))
+	      } else if minPriceStr != "" {
+		    querys = append(querys, fmt.Sprintf("(b.bidamount>=%d  or (b.budget>=%d and b.bidamount is null))", minPrice, minPrice))
+	      } else if maxPriceStr != "" {
+		    querys = append(querys, fmt.Sprintf("(b.bidamount<=%d or (b.budget<=%d and b.bidamount is null))", maxPrice, maxPrice))
+	      }
+        }
+        //附件
+        if spqp.FileExists != "" {
+	      if spqp.FileExists == "1" {
+		    querys = append(querys, fmt.Sprintf("b.isvalidfile =1 "))
+	      } else if spqp.FileExists == "-1" {
+		    querys = append(querys, fmt.Sprintf("b.isvalidfile =0 "))
+	      }
+        }
+        searchSql := fmt.Sprintf(" from %s  a LEFT JOIN %s b ON a.infoid = b.infoid LEFT JOIN %s t on t.infoid = b.infoid and t.labelcode=2  where %s"+
+	      " order by a.id desc", aboutDbMsg[s.ModuleFlag].MysqlTable, Baseinfo, BidTags, strings.Join(querys, " and "))
+        fmt.Println("searchSql", searchSql)
+        //查询总数
+        count = spqp.BaseServiceMysql.CountBySql(fmt.Sprintf("select count(a.id)" + searchSql))
+        logx.Info("count:", count, "---", s.ModuleFlag)
+        findSql := "select a.id,a.date,a.infoid,a.isvisit,a.matchkeys,a.type,b.isvalidfile as attachment_count"
+        if s.ModuleFlag != MemberFlag && s.ModuleFlag != EntnicheFlag {
+	      findSql += ",isvip"
+        }
+        findSql += searchSql
+        if isLimit {
+	      findSql += fmt.Sprintf(" limit %d,%d", (spqp.PageNum-1)*size, size)
+        }
+        logx.Info(spqp.NewUserId, "subscribePush query sql:", findSql)
+        list := spqp.BaseServiceMysql.SelectBySql(findSql)
+        if list != nil && len(*list) > 0 {
+	      pushCas := s.GetJyPushs(*list)
+	      result = s.GetInfoByIds(spqp.Mgo_bidding, spqp.Bidding, spqp.Bidding_back, pushCas)
+        } else {
+	      result = []*bxsubscribe.SubscribeInfo{}
+        }
+        return
 }
 
 //根据id取内容
 func (s *subscribePush) GetInfoByIds(Mgo_bidding mongodb.MongodbSim, bidding, bidding_back string, pushCas []*PushCa) []*bxsubscribe.SubscribeInfo {
-	array := make([]*bxsubscribe.SubscribeInfo, len(pushCas))
-	if len(pushCas) == 0 {
-		return array
-	}
-	m := map[string]bool{}
-	ids := []string{}
-	for _, v := range pushCas {
-		if m[v.InfoId] {
-			continue
-		}
-		m[v.InfoId] = true
-		ids = append(ids, v.InfoId)
-	}
-	infos := map[string]map[string]interface{}{}
-	//redis
-	es_ids := []string{}
-	for _, v := range ids {
-		//剑鱼程序未找到赋值 位置;猜测在推送程序中
-		info_i := redis.Get("pushcache_1", fmt.Sprintf("info_%s", v))
-		if info_i != nil {
-			info_m, _ := info_i.(map[string]interface{})
-			info_m["_id"] = v
-			infos[v] = info_m
-		} else {
-			es_ids = append(es_ids, v)
-		}
-	}
-	//elasticsearch
-	if len(es_ids) > 0 {
-		list := elastic.Get("bidding", "bidding", fmt.Sprintf(query, strings.Join(es_ids, `","`), len(es_ids)))
-		if list != nil {
-			for _, v := range *list {
-				_id := common.ObjToString(v["_id"])
-				infos[_id] = v
-			}
-		}
-	}
-	//mongodb bidding
-	mgo_ids := []primitive.ObjectID{}
-	for _, v := range es_ids {
-		if infos[v] == nil {
-			_id, _ := primitive.ObjectIDFromHex(v)
-			mgo_ids = append(mgo_ids, _id)
-		}
-	}
-	if len(mgo_ids) > 0 {
-		list, ok := Mgo_bidding.Find(bidding, map[string]interface{}{"_id": map[string]interface{}{"$in": mgo_ids}}, nil, mongodb_fields, false, -1, -1)
-		if ok && *list != nil {
-			for _, v := range *list {
-				_id := mongodb.BsonIdToSId(v["_id"])
-				v["_id"] = _id
-				infos[_id] = v
-			}
-		}
-	}
-	//mongodb bidding_back
-	mgo_back_ids := []primitive.ObjectID{}
-	for _, v := range mgo_ids {
-		if infos[mongodb.BsonIdToSId(v)] == nil {
-			mgo_back_ids = append(mgo_back_ids, v)
-		}
-	}
-	if len(mgo_back_ids) > 0 {
-		list, ok := Mgo_bidding.Find(bidding_back, map[string]interface{}{"_id": map[string]interface{}{"$in": mgo_back_ids}}, nil, mongodb_fields, false, -1, -1)
-		if ok && *list != nil {
-			for _, v := range *list {
-				_id := mongodb.BsonIdToSId(v["_id"])
-				v["_id"] = _id
-				infos[_id] = v
-			}
-		}
-	}
-	//
-	for k, v := range pushCas {
-		info := infos[v.InfoId]
-		if info == nil {
-			info = map[string]interface{}{}
-		}
-		array[k] = s.InfoFormat(v, &info)
-	}
-	return array
+        array := make([]*bxsubscribe.SubscribeInfo, len(pushCas))
+        if len(pushCas) == 0 {
+	      return array
+        }
+        m := map[string]bool{}
+        ids := []string{}
+        for _, v := range pushCas {
+	      if m[v.InfoId] {
+		    continue
+	      }
+	      m[v.InfoId] = true
+	      ids = append(ids, v.InfoId)
+        }
+        infos := map[string]map[string]interface{}{}
+        //redis
+        es_ids := []string{}
+        for _, v := range ids {
+	      //剑鱼程序未找到赋值 位置;猜测在推送程序中
+	      info_i := redis.Get("pushcache_1", fmt.Sprintf("info_%s", v))
+	      if info_i != nil {
+		    info_m, _ := info_i.(map[string]interface{})
+		    info_m["_id"] = v
+		    infos[v] = info_m
+	      } else {
+		    es_ids = append(es_ids, v)
+	      }
+        }
+        //elasticsearch
+        if len(es_ids) > 0 {
+	      list := elastic.Get("bidding", "bidding", fmt.Sprintf(query, strings.Join(es_ids, `","`), len(es_ids)))
+	      if list != nil {
+		    for _, v := range *list {
+			  _id := common.ObjToString(v["_id"])
+			  infos[_id] = v
+		    }
+	      }
+        }
+        //mongodb bidding
+        mgo_ids := []primitive.ObjectID{}
+        for _, v := range es_ids {
+	      if infos[v] == nil {
+		    _id, _ := primitive.ObjectIDFromHex(v)
+		    mgo_ids = append(mgo_ids, _id)
+	      }
+        }
+        if len(mgo_ids) > 0 {
+	      list, ok := Mgo_bidding.Find(bidding, map[string]interface{}{"_id": map[string]interface{}{"$in": mgo_ids}}, nil, mongodb_fields, false, -1, -1)
+	      if ok && *list != nil {
+		    for _, v := range *list {
+			  _id := mongodb.BsonIdToSId(v["_id"])
+			  v["_id"] = _id
+			  infos[_id] = v
+		    }
+	      }
+        }
+        //mongodb bidding_back
+        mgo_back_ids := []primitive.ObjectID{}
+        for _, v := range mgo_ids {
+	      if infos[mongodb.BsonIdToSId(v)] == nil {
+		    mgo_back_ids = append(mgo_back_ids, v)
+	      }
+        }
+        if len(mgo_back_ids) > 0 {
+	      list, ok := Mgo_bidding.Find(bidding_back, map[string]interface{}{"_id": map[string]interface{}{"$in": mgo_back_ids}}, nil, mongodb_fields, false, -1, -1)
+	      if ok && *list != nil {
+		    for _, v := range *list {
+			  _id := mongodb.BsonIdToSId(v["_id"])
+			  v["_id"] = _id
+			  infos[_id] = v
+		    }
+	      }
+        }
+        //
+        for k, v := range pushCas {
+	      info := infos[v.InfoId]
+	      if info == nil {
+		    info = map[string]interface{}{}
+	      }
+	      array[k] = s.InfoFormat(v, &info)
+        }
+        return array
 }
 
 //获取历史推送
 func (s *subscribePush) GetJyPushs(datas []map[string]interface{}) (pushCas []*PushCa) {
-	pushCas = []*PushCa{}
-	for _, v := range datas {
-		keys := []string{}
-		if matchkeys := common.ObjToString(v["matchkeys"]); matchkeys != "" {
-			keys = strings.Split(matchkeys, " ")
-		}
-		pushCas = append(pushCas, &PushCa{
-			Date:       common.Int64All(v["date"]),
-			InfoId:     common.ObjToString(v["infoid"]),
-			Visit:      common.IntAll(v["isvisit"]),
-			Index:      common.Int64All(v["id"]),
-			Keys:       keys,
-			Type:       common.IntAll(v["type"]),
-			Isvip:      common.IntAll(v["isvip"]),
-			FileExists: common.IntAll(v["attachment_count"]) > 0,
-		})
-	}
-	return
+        pushCas = []*PushCa{}
+        for _, v := range datas {
+	      keys := []string{}
+	      if matchkeys := common.ObjToString(v["matchkeys"]); matchkeys != "" {
+		    keys = strings.Split(matchkeys, " ")
+	      }
+	      pushCas = append(pushCas, &PushCa{
+		    Date:       common.Int64All(v["date"]),
+		    InfoId:     common.ObjToString(v["infoid"]),
+		    Visit:      common.IntAll(v["isvisit"]),
+		    Index:      common.Int64All(v["id"]),
+		    Keys:       keys,
+		    Type:       common.IntAll(v["type"]),
+		    Isvip:      common.IntAll(v["isvip"]),
+		    FileExists: common.IntAll(v["attachment_count"]) > 0,
+	      })
+        }
+        return
 }
 
 //查看全部列表缓存
 func (s *subscribePush) PutAllCache(userId string, datas *SubPush) {
-	log.Println(s.allKey(userId), datas, oneDay)
-	redis.Put("pushcache_2_a", s.allKey(userId), datas, oneDay)
+        log.Println(s.allKey(userId), datas, oneDay)
+        redis.Put("pushcache_2_a", s.allKey(userId), datas, oneDay)
 }
 
 func (s *subscribePush) GetAllCache(userId string) (*SubPush, error) {
-	return s.GetCache("pushcache_2_a", s.allKey(userId))
+        return s.GetCache("pushcache_2_a", s.allKey(userId))
 }
 
 func (s *subscribePush) GetCache(code, key string) (*SubPush, error) {
-	pc_a, err := redis.GetNewBytes(code, key)
-	if err != nil {
-		return nil, err
-	}
-	if pc_a == nil {
-		return nil, nil
-	}
-	var p *SubPush
-	if err := json.Unmarshal(*pc_a, &p); err != nil {
-		return nil, err
-	}
-	return p, nil
+        pc_a, err := redis.GetNewBytes(code, key)
+        if err != nil {
+	      return nil, err
+        }
+        if pc_a == nil {
+	      return nil, nil
+        }
+        var p *SubPush
+        if err := json.Unmarshal(*pc_a, &p); err != nil {
+	      return nil, err
+        }
+        return p, nil
 }
 
 //是否收藏
 func (s *subscribePush) MakeCollection(userId string, list []*bxsubscribe.SubscribeInfo) {
-	if list == nil || len(list) == 0 {
-		return
-	}
-	param := []interface{}{userId}
-	wh := []string{}
-	for _, v := range list {
-		array := encrypt.DecodeArticleId2ByCheck(v.XId)
-		if len(array) == 1 && array[0] != "" {
-			param = append(param, array[0])
-			wh = append(wh, "?")
-		}
-	}
-	if len(wh) > 0 {
-		result := IC.MainMysql.SelectBySql(`select bid from bdcollection where userid=? and bid in (`+strings.Join(wh, ",")+`)`, param...)
-		bid_map := map[string]bool{}
-		if result != nil {
-			for _, v := range *result {
-				bid_map[encrypt.EncodeArticleId2ByCheck(common.ObjToString(v["bid"]))] = true
-			}
-		}
-		for _, v := range list {
-			if bid_map[v.XId] {
-				v.Collection = 1
-			}
-		}
-	}
+        if list == nil || len(list) == 0 {
+	      return
+        }
+        param := []interface{}{userId}
+        wh := []string{}
+        for _, v := range list {
+	      array := encrypt.DecodeArticleId2ByCheck(v.XId)
+	      if len(array) == 1 && array[0] != "" {
+		    param = append(param, array[0])
+		    wh = append(wh, "?")
+	      }
+        }
+        if len(wh) > 0 {
+	      result := IC.MainMysql.SelectBySql(`select bid from bdcollection where userid=? and bid in (`+strings.Join(wh, ",")+`)`, param...)
+	      bid_map := map[string]bool{}
+	      if result != nil {
+		    for _, v := range *result {
+			  bid_map[encrypt.EncodeArticleId2ByCheck(common.ObjToString(v["bid"]))] = true
+		    }
+	      }
+	      for _, v := range list {
+		    if bid_map[v.XId] {
+			  v.Collection = 1
+		    }
+	      }
+        }
 }
 
 //仅移动端首页使用,历史推送7天信息
 func (s *subscribePush) sevenDayKey(userId string) string {
-	return fmt.Sprintf("7day_subpush_%s", userId)
+        return fmt.Sprintf("7day_subpush_%s", userId)
 }
 
 func (s *subscribePush) PutSevenDayCache(userId string, datas []*bxsubscribe.SubscribeInfo) {
-	redis.Put("pushcache_2_a", s.sevenDayKey(userId), SubPush{Datas: datas}, 7*24*60*60)
+        redis.Put("pushcache_2_a", s.sevenDayKey(userId), SubPush{Datas: datas}, 7*24*60*60)
 }
 
 //从pushcache_2_a中取
 func (s *subscribePush) GetSevenDayCache(userId string) ([]*bxsubscribe.SubscribeInfo, error) {
-	allPush, _ := s.GetCache("pushcache_2_a", s.sevenDayKey(userId))
-	if allPush != nil && allPush.Datas != nil && len(allPush.Datas) > 0 {
-		return allPush.Datas, nil
-	}
-	return nil, nil
+        allPush, _ := s.GetCache("pushcache_2_a", s.sevenDayKey(userId))
+        if allPush != nil && allPush.Datas != nil && len(allPush.Datas) > 0 {
+	      return allPush.Datas, nil
+        }
+        return nil, nil
 }
 
 //历史推送记录中单条信息格式化
 func InfoFormats(info map[string]interface{}, tmp map[string]interface{}) map[string]interface{} {
-	area := common.ObjToString(info["area"])
-	if area == "A" {
-		area = "全国"
-	}
-	industry := common.ObjToString(info["s_subscopeclass"])
-	scs := strings.Split(industry, ",")
-	if len(scs) > 0 {
-		industry = scs[0]
-		if industry != "" {
-			iss := strings.Split(industry, "_")
-			if len(iss) > 0 {
-				industry = iss[0]
-			}
-		}
-	}
-	infotype := common.ObjToString(info["subtype"])
-	if infotype == "" {
-		infotype = common.ObjToString(info["toptype"])
-	}
-	if infotype == "" {
-		infotype = common.ObjToString(info["type"])
-		if infotype == "tender" {
-			infotype = "招标"
-		} else if infotype == "bid" {
-			infotype = "中标"
-		}
-	}
-	info["type"] = infotype
-	return info
+        area := common.ObjToString(info["area"])
+        if area == "A" {
+	      area = "全国"
+        }
+        industry := common.ObjToString(info["s_subscopeclass"])
+        scs := strings.Split(industry, ",")
+        if len(scs) > 0 {
+	      industry = scs[0]
+	      if industry != "" {
+		    iss := strings.Split(industry, "_")
+		    if len(iss) > 0 {
+			  industry = iss[0]
+		    }
+	      }
+        }
+        infotype := common.ObjToString(info["subtype"])
+        if infotype == "" {
+	      infotype = common.ObjToString(info["toptype"])
+        }
+        if infotype == "" {
+	      infotype = common.ObjToString(info["type"])
+	      if infotype == "tender" {
+		    infotype = "招标"
+	      } else if infotype == "bid" {
+		    infotype = "中标"
+	      }
+        }
+        info["type"] = infotype
+        return info
 }
 
 //UpdateUserPushUnread 更新app未读标识为已读
 func UpdateUserPushUnread(userid string, vt string) {
-	if vt == MemberFlag {
-		IC.Mgo.UpdateById("user", userid, map[string]interface{}{"$set": map[string]interface{}{"i_member_apppushunread": 0}})
-	} else if vt == EntnicheFlag {
-		IC.Mgo.UpdateById("user", userid, map[string]interface{}{"$set": map[string]interface{}{"i_entniche_apppushunread": 0}})
-	} else {
-		IC.Mgo.UpdateById("user", userid, map[string]interface{}{"$set": map[string]interface{}{"i_apppushunread": 0}})
-
-	}
+        if vt == MemberFlag {
+	      IC.Mgo.UpdateById("user", userid, map[string]interface{}{"$set": map[string]interface{}{"i_member_apppushunread": 0}})
+        } else if vt == EntnicheFlag {
+	      IC.Mgo.UpdateById("user", userid, map[string]interface{}{"$set": map[string]interface{}{"i_entniche_apppushunread": 0}})
+        } else {
+	      IC.Mgo.UpdateById("user", userid, map[string]interface{}{"$set": map[string]interface{}{"i_apppushunread": 0}})
+        }
 }
 
 //
 
 //获取用户信息
 func (s *subscribePush) UserInfo(userId string) (*map[string]interface{}, int64) {
-	user, ok := IC.Mgo.FindById("user", userId, `{"s_m_openid":1,"a_m_openid":1,"s_phone":1,"a_mergeorder":1,"o_jy":1,"l_firstpushtime":1,"i_vip_status":1,"l_vip_endtime":1,"o_vipjy":1,"i_member_status":1,"o_member_jy":1}`)
-	if !ok || user == nil {
-		return nil, 0
-	}
-	return user, common.Int64All((*user)["l_firstpushtime"])
+        user, ok := IC.Mgo.FindById("user", userId, `{"s_m_openid":1,"a_m_openid":1,"s_phone":1,"a_mergeorder":1,"o_jy":1,"l_firstpushtime":1,"i_vip_status":1,"l_vip_endtime":1,"o_vipjy":1,"i_member_status":1,"o_member_jy":1}`)
+        if !ok || user == nil {
+	      return nil, 0
+        }
+        return user, common.Int64All((*user)["l_firstpushtime"])
 }
 
 //是否有订阅词
 func GetKeySet(t string, u *map[string]interface{}, data []string) (bool, []string) {
-	var industry_ = []string{}
-	if u != nil {
-		if t == SubFreeFlag {
-			o_jy, _ := (*u)["o_jy"].(map[string]interface{})
-			a_key, _ := o_jy["a_key"].([]interface{})
-			return len(a_key) > 0, industry_
-		} else {
-			var obj map[string]interface{}
-			if t == SubVipFlag {
-				obj, _ = (*u)["o_vipjy"].(map[string]interface{})
-			} else if t == MemberFlag {
-				obj, _ = (*u)["o_member_jy"].(map[string]interface{})
-			} else if t == EntnicheFlag {
-				if len(data) > 0 {
-					return true, data
-				} else {
-					return false, data
-				}
-			}
-			if obj != nil {
-				if buyerclassObj, ok := obj["a_buyerclass"].([]interface{}); ok {
-					industry_ = common.ObjArrToStringArr(buyerclassObj)
+        var industry_ = []string{}
+        if u != nil {
+	      if t == SubFreeFlag {
+		    o_jy, _ := (*u)["o_jy"].(map[string]interface{})
+		    a_key, _ := o_jy["a_key"].([]interface{})
+		    return len(a_key) > 0, industry_
+	      } else {
+		    var obj map[string]interface{}
+		    if t == SubVipFlag {
+			  obj, _ = (*u)["o_vipjy"].(map[string]interface{})
+		    } else if t == MemberFlag {
+			  obj, _ = (*u)["o_member_jy"].(map[string]interface{})
+		    } else if t == EntnicheFlag {
+			  if len(data) > 0 {
+				return true, data
+			  } else {
+				return false, data
+			  }
+		    }
+		    if obj != nil {
+			  if buyerclassObj, ok := obj["a_buyerclass"].([]interface{}); ok {
+				industry_ = common.ObjArrToStringArr(buyerclassObj)
+			  }
+			  itmes, _ := obj["a_items"].([]interface{})
+			  for _, v := range itmes {
+				item, _ := v.(map[string]interface{})
+				keys, _ := item["a_key"].([]interface{})
+				if len(keys) > 0 {
+				        return true, industry_
 				}
-				itmes, _ := obj["a_items"].([]interface{})
-				for _, v := range itmes {
-					item, _ := v.(map[string]interface{})
-					keys, _ := item["a_key"].([]interface{})
-					if len(keys) > 0 {
-						return true, industry_
-					}
-				}
-			}
-		}
-	}
-	return false, industry_
+			  }
+		    }
+	      }
+        }
+        return false, industry_
 }
 
 const (
-	INDEX      = "bidding"
-	TYPE       = "bidding"
-	bidField   = `"_id","title","publishtime","toptype","subtype","type","area","city","s_subscopeclass","buyerclass","budget","bidamount","filetext","spidercode","site"`
-	bidTime    = `{"range":{"publishtime":{"gt":%d}}}`
-	bidSort    = `{"publishtime":"desc"}`
-	findfields = `"title"`
+        INDEX      = "bidding"
+        TYPE       = "bidding"
+        bidField   = `"_id","title","publishtime","toptype","subtype","type","area","city","s_subscopeclass","buyerclass","budget","bidamount","filetext","spidercode","site"`
+        bidTime    = `{"":{"publishtime":{"gt":%d}}}`
+        bidSort    = `{"publishtime":"desc"}`
+        findfields = `"title"`
 )
 
 //首次访问推送页面 默认生成推送数据
 //默认匹配es 7天内数据
 func (s *subscribePush) DefaultDatas(spqp *SubPushQueryParam) (hasNextPage bool, total int64, result []*bxsubscribe.SubscribeInfo) {
-	if spqp.UserId == "" {
-		return false, 0, nil
-	}
-	t1 := time.Now()
-	log.Println("userId:", spqp.UserId)
-	log.Println("newUserId:", spqp.NewUserId)
-	//用户信息
-	bsp := s.getUserInfo(spqp)
-	logx.Info("获取用户信息耗时:", time.Since(t1))
-	t2 := time.Now()
-	if len(bsp.Keyword) > 0 {
-		logx.Info(time.Since(t1), "--bsp:", bsp)
-		//获取查询语句
-		qstr := s.getDefaultDatasSQL(bsp)
-		list := elastic.GetAllByNgram(INDEX, TYPE, qstr, findfields, bidSort, bidField, 0, bsp.Size, 0, false)
-		logx.Info(time.Since(t1), "count:", len(*list))
-		if list != nil && len(*list) > 0 {
-			total = int64(len(*list))
-			//超过50条先处理50条 返回前50条
-			listOne := *list
-			if len(*list) > pageSize {
-				listOne = (*list)[:pageSize]
-			}
-			result = s.listManager(spqp, listOne, bsp.Keyword, (len(listOne)+pageSize)/pageSize)
-			if len(*list) > pageSize {
-				hasNextPage = true
-				listOther := (*list)[pageSize:]
-				go s.listManager(spqp, listOther, bsp.Keyword, (len(listOther)+pageSize)/pageSize)
-			}
-		}
-	}
-	logx.Info("请求耗时:", time.Since(t2))
-	return
+        if spqp.UserId == "" {
+	      return false, 0, nil
+        }
+        t1 := time.Now()
+        log.Println("userId:", spqp.UserId)
+        log.Println("newUserId:", spqp.NewUserId)
+        //用户信息
+        bsp := s.getUserInfo(spqp)
+        logx.Info("获取用户信息耗时:", time.Since(t1))
+        t2 := time.Now()
+        if len(bsp.Keyword) > 0 {
+	      logx.Info(time.Since(t1), "--bsp:", bsp)
+	      //获取查询语句
+	      qstr := s.getDefaultDatasSQL(bsp)
+	      list := elastic.GetAllByNgram(INDEX, TYPE, qstr, findfields, bidSort, bidField, 0, bsp.Size, 0, false)
+	      logx.Info(time.Since(t1), "count:", len(*list))
+	      if list != nil && len(*list) > 0 {
+		    total = int64(len(*list))
+		    //超过50条先处理50条 返回前50条
+		    listOne := *list
+		    if len(*list) > pageSize {
+			  listOne = (*list)[:pageSize]
+		    }
+		    result = s.listManager(spqp, listOne, bsp.Keyword, (len(listOne)+pageSize)/pageSize)
+		    if len(*list) > pageSize {
+			  hasNextPage = true
+			  listOther := (*list)[pageSize:]
+			  go s.listManager(spqp, listOther, bsp.Keyword, (len(listOther)+pageSize)/pageSize)
+		    }
+	      }
+        }
+        logx.Info("请求耗时:", time.Since(t2))
+        return
 }
 
 //保存推送表
 func (s *subscribePush) listManager(spqp *SubPushQueryParam, list []map[string]interface{}, keyword []ViewKeyWord, ccount int) (resultList []*bxsubscribe.SubscribeInfo) {
-	t2 := time.Now()
-	now := time.Now().Unix()
-	var (
-		wg = &sync.WaitGroup{}
-		wc = make(chan bool, ccount)
-	)
-	for _, v := range list {
-		wg.Add(1)
-		wc <- true
-		go func(v map[string]interface{}) {
-			defer func() {
-				wg.Done()
-				<-wc
-			}()
-			redisKey := fmt.Sprintf("pushinfo_%s_%s", spqp.UserId, common.ObjToString(v["_id"]))
-			title := strings.Replace(common.ObjToString(v["title"]), "\n", "", -1)
-			var pushInsert = []interface{}{}
-			//招投标信息表
-			var buildingInsert = []interface{}{}
-			infoid := ""
-			area := ""
-			city := ""
-			subtype := ""
-			toptype := ""
-			buyerclass := ""
-			attachment_count := ""
-			bidamount := "0"
-			budget := "0"
-			subscopeClass := ""
-			infoid = common.InterfaceToStr(v["_id"])
-			if v["area"] != nil {
-				area = common.InterfaceToStr(common.If(common.ObjToString(v["area"]) == "A", 0, common.If(IC.PushMapping.Area[common.ObjToString(v["area"])] != "", IC.PushMapping.Area[common.ObjToString(v["area"])], 0)))
-			}
-
-			publishtime := ""
-			if v["publishtime"] != nil {
-				publishtime = time.Unix(common.Int64All(v["publishtime"]), 0).Format(date.Date_Full_Layout)
-			}
-			if v["city"] != nil {
-				city = common.InterfaceToStr(common.If(IC.PushMapping.City[common.ObjToString(v["city"])] != "", IC.PushMapping.City[common.ObjToString(v["city"])], 0))
-			}
-			if v["subtype"] != nil {
-				subtype = common.InterfaceToStr(common.If(IC.PushMapping.Subtype[common.ObjToString(v["subtype"])] != "", IC.PushMapping.Subtype[common.ObjToString(v["subtype"])], 0))
-			}
-			if v["toptype"] != nil {
-				toptype = common.InterfaceToStr(common.If(IC.PushMapping.Toptype[common.ObjToString(v["toptype"])] != "", IC.PushMapping.Toptype[common.ObjToString(v["toptype"])], 0))
-			}
-			if v["buyerclass"] != nil {
-				buyerclass = common.InterfaceToStr(common.If(IC.PushMapping.Buyerclass[common.ObjToString(v["buyerclass"])] != "", IC.PushMapping.Buyerclass[common.ObjToString(v["buyerclass"])], 0))
-			}
-			if v["isValidFile"] != nil {
-				isValidFile, _ := v["isValidFile"].(bool)
-				attachment_count = common.InterfaceToStr(common.If(isValidFile, 1, 0)) //附件 :检索库 只有附件字段,无法识别附件数量 暂定为1;为识别有附件
-			}
-			if v["bidamount"] != nil {
-				bidamount = common.InterfaceToStr(v["bidamount"])
-			}
-			if v["budget"] != nil {
-				budget = common.InterfaceToStr(v["budget"])
-			}
-			if s_subscopeclass := common.ObjToString(v["s_subscopeclass"]); s_subscopeclass != "" {
-				subscopeclass := []string{}
-				for _, v := range strings.Split(s_subscopeclass, ",") {
-					if subscopeclass_mapping, ok := IC.PushMapping.Subscopeclass[v]; ok {
-						subscopeclass = append(subscopeclass, fmt.Sprint(subscopeclass_mapping))
-					}
-				}
-				if len(subscopeclass) > 0 {
-					subscopeClass = strings.Join(subscopeclass, ",")
-				}
-			}
-			log.Println("infoid", infoid)
-			buildingInsert = append(buildingInsert, infoid, area, city, buyerclass, toptype, subtype, subscopeClass, budget, bidamount, attachment_count, publishtime)
-			spqp.BaseServiceMysql.ExecTx("推送记录保存", func(tx *sql.Tx) bool {
-				_, _ = spqp.BaseServiceMysql.InsertIgnoreBatchByTx(tx, Pushbidding, buildingInsertCollKey, buildingInsert)
-				/*log.Println(id1, id2)
-				  if id1 == 0 {
-				  	//有历史记录,需要查询信息id
-				  	data := spqp.BaseServiceMysql.FindOne(Pushbidding, map[string]interface{}{
-				  		"infoid": infoid,
-				  	}, "id", "")
-				  	if data != nil {
-				  		id2 = common.Int64All((*data)["id"])
-				  	} else {
-				  		return false
-				  	}
-				  }*/
-				//推送记录
-				matchkeys := getKeys(title, keyword)
-				matchkey := strings.Join(matchkeys, " ")
-				entid := spqp.EntId
-				entUserId := spqp.EntUserId
-				deptid := spqp.DeptId
-				id := int64(0)
-				switch s.ModuleFlag {
-				case "eType":
-					pushInsert = append(pushInsert, entid, deptid, entUserId, common.InterfaceToStr(infoid), matchkey, now)
-					id, _ = spqp.BaseServiceMysql.InsertIgnoreBatch(aboutDbMsg[s.ModuleFlag].MysqlTable, ennicheInsertCollKey, pushInsert)
-				case "mType":
-					pushInsert = append(pushInsert, common.InterfaceToStr(spqp.NewUserId), common.InterfaceToStr(infoid), matchkey, now)
-					id, _ = spqp.BaseServiceMysql.InsertIgnoreBatch(aboutDbMsg[s.ModuleFlag].MysqlTable, memberInsertCollKey, pushInsert)
-				case "vType":
-					pushInsert = append(pushInsert, common.InterfaceToStr(spqp.NewUserId), common.InterfaceToStr(infoid), matchkey, now, 1)
-					id, _ = spqp.BaseServiceMysql.InsertIgnoreBatch(aboutDbMsg[s.ModuleFlag].MysqlTable, subscribeInsertCollKey, pushInsert)
-				case "fType":
-					pushInsert = append(pushInsert, common.InterfaceToStr(spqp.NewUserId), common.InterfaceToStr(infoid), matchkey, now, 0)
-					id, _ = spqp.BaseServiceMysql.InsertIgnoreBatch(aboutDbMsg[s.ModuleFlag].MysqlTable, subscribeInsertCollKey, pushInsert)
+        t2 := time.Now()
+        now := time.Now().Unix()
+        var (
+	      wg = &sync.WaitGroup{}
+	      wc = make(chan bool, ccount)
+        )
+        for _, v := range list {
+	      wg.Add(1)
+	      wc <- true
+	      go func(v map[string]interface{}) {
+		    defer func() {
+			  wg.Done()
+			  <-wc
+		    }()
+		    redisKey := fmt.Sprintf("pushinfo_%s_%s", spqp.UserId, common.ObjToString(v["_id"]))
+		    title := strings.Replace(common.ObjToString(v["title"]), "\n", "", -1)
+		    var pushInsert = []interface{}{}
+		    infoid := common.InterfaceToStr(v["_id"])
+		    log.Println("infoid", infoid)
+		    spqp.BaseServiceMysql.ExecTx("推送记录保存", func(tx *sql.Tx) bool {
+			  //推送记录
+			  matchkeys := getKeys(title, keyword)
+			  matchkey := strings.Join(matchkeys, " ")
+			  entid := spqp.EntId
+			  entUserId := spqp.EntUserId
+			  deptid := spqp.DeptId
+			  id := int64(0)
+			  switch s.ModuleFlag {
+			  case "eType":
+				pushInsert = append(pushInsert, entid, deptid, entUserId, common.InterfaceToStr(infoid), matchkey, now)
+				id, _ = spqp.BaseServiceMysql.InsertIgnoreBatch(aboutDbMsg[s.ModuleFlag].MysqlTable, ennicheInsertCollKey, pushInsert)
+			  case "mType":
+				pushInsert = append(pushInsert, common.InterfaceToStr(spqp.NewUserId), common.InterfaceToStr(infoid), matchkey, now)
+				id, _ = spqp.BaseServiceMysql.InsertIgnoreBatch(aboutDbMsg[s.ModuleFlag].MysqlTable, memberInsertCollKey, pushInsert)
+			  case "vType":
+				pushInsert = append(pushInsert, common.InterfaceToStr(spqp.NewUserId), common.InterfaceToStr(infoid), matchkey, now, 1)
+				id, _ = spqp.BaseServiceMysql.InsertIgnoreBatch(aboutDbMsg[s.ModuleFlag].MysqlTable, subscribeInsertCollKey, pushInsert)
+			  case "fType":
+				pushInsert = append(pushInsert, common.InterfaceToStr(spqp.NewUserId), common.InterfaceToStr(infoid), matchkey, now, 0)
+				id, _ = spqp.BaseServiceMysql.InsertIgnoreBatch(aboutDbMsg[s.ModuleFlag].MysqlTable, subscribeInsertCollKey, pushInsert)
 
-				}
-				if id > 0 {
-					redis.Put("pushcache_2_a", redisKey, 1, 86400)
-					resultList = append(resultList, s.InfoFormat(&PushCa{
-						InfoId:     infoid,
-						Date:       time.Now().Unix(),
-						Index:      id,
-						Keys:       matchkeys,
-						FileExists: v["filetext"] != nil,
-					}, &v))
-					return true
-				}
-				return false
-			})
-		}(v)
-	}
-	wg.Wait()
-	log.Println("数据处理耗时:", time.Since(t2))
-	return
+			  }
+			  if id > 0 {
+				redis.Put("pushcache_2_a", redisKey, 1, 86400)
+				resultList = append(resultList, s.InfoFormat(&PushCa{
+				        InfoId:     infoid,
+				        Date:       time.Now().Unix(),
+				        Index:      id,
+				        Keys:       matchkeys,
+				        FileExists: v["filetext"] != nil,
+				}, &v))
+				return true
+			  }
+			  return false
+		    })
+	      }(v)
+        }
+        wg.Wait()
+        log.Println("数据处理耗时:", time.Since(t2))
+        return
 }
 
 //获取匹配得关键词
 func getKeys(title string, keywords []ViewKeyWord) (str []string) {
-	if len(keywords) > 0 {
-	L:
-		for _, v := range keywords {
-			for _, vk := range v.Keyword {
-				if strings.Contains(title, vk) {
-					str = append(str, v.Keyword...)
-					break L
-				}
-			}
-			for _, va := range v.Appended {
-				if strings.Contains(title, va) {
-					str = append(str, v.Appended...)
-					break L
-				}
-			}
-		}
-	}
-	return
+        if len(keywords) > 0 {
+        L:
+	      for _, v := range keywords {
+		    for _, vk := range v.Keyword {
+			  if strings.Contains(title, vk) {
+				str = append(str, v.Keyword...)
+				break L
+			  }
+		    }
+		    for _, va := range v.Appended {
+			  if strings.Contains(title, va) {
+				str = append(str, v.Appended...)
+				break L
+			  }
+		    }
+	      }
+        }
+        return
 }
 
 //获取查询语句
 func (s *subscribePush) getDefaultDatasSQL(bsp *ViewCondition) (str string) {
-	query := `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match": %d}}}`
-	query_bool_should := `{"bool":{"should":[%s],"minimum_should_match": 1}}`
-	multi_match := `{"multi_match": {"query": %s,"type": "phrase", "fields": [%s]}}`
-	query_bool_must_and := `{"bool":{"must":[%s]%s}}`
+        query := `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match": %d}}}`
+        query_bool_should := `{"bool":{"should":[%s],"minimum_should_match": 1}}`
+        multi_match := `{"multi_match": {"query": %s,"type": "phrase", "fields": [%s]}}`
+        query_bool_must_and := `{"bool":{"must":[%s]%s}}`
 
-	bools := []string{}
-	musts := []string{}
-	//发布时间最新7天
-	musts = append(musts, fmt.Sprintf(bidTime, time.Now().AddDate(0, 0, -365).Unix()))
-	//省份
-	areaCity := []string{}
-	if len(bsp.Area) > 0 {
-		areaquery := `{"terms":{"area":[`
-		for k, v := range bsp.Area {
-			if k > 0 {
-				areaquery += `,`
-			}
-			areaquery += `"` + v + `"`
-		}
-		areaquery += `]}}`
-		areaCity = append(areaCity, areaquery)
-	}
+        bools := []string{}
+        musts := []string{}
+        //发布时间最新7天
+        musts = append(musts, fmt.Sprintf(bidTime, time.Now().AddDate(0, 0, -365*4).Unix()))
+        //省份
+        areaCity := []string{}
+        if len(bsp.Area) > 0 {
+	      areaquery := `{"terms":{"area":[`
+	      for k, v := range bsp.Area {
+		    if k > 0 {
+			  areaquery += `,`
+		    }
+		    areaquery += `"` + v + `"`
+	      }
+	      areaquery += `]}}`
+	      areaCity = append(areaCity, areaquery)
+        }
 
-	//城市
-	if len(bsp.City) > 0 {
-		areaquery := `{"terms":{"city":[`
-		for k, v := range bsp.City {
-			if k > 0 {
-				areaquery += `,`
-			}
-			areaquery += `"` + v + `"`
-		}
-		areaquery += `]}}`
-		areaCity = append(areaCity, areaquery)
-	}
-	if len(areaCity) > 0 {
-		musts = append(musts, fmt.Sprintf(query_bool_should, strings.Join(areaCity, ",")))
-	}
-	if len(bsp.Subtype) > 0 {
-		subquery := `{"terms":{"subtype":[`
-		for k, v := range bsp.Subtype {
-			if k > 0 {
-				subquery += `,`
-			}
-			subquery += `"` + v + `"`
-		}
-		subquery += `]}}`
-		musts = append(musts, subquery)
-	}
-	if len(bsp.Buyerclass) > 0 {
-		Buyerclass := `{"terms":{"buyerclass":[`
-		for k, v := range bsp.Buyerclass {
-			if k > 0 {
-				Buyerclass += `,`
-			}
-			Buyerclass += `"` + v + `"`
-		}
-		Buyerclass += `]}}`
-		musts = append(musts, Buyerclass)
-	}
-	boolsNum := 0 //should
-	if len(bsp.Keyword) > 0 {
-		boolsNum = 1
-		if bsp.SelectType == "" || bsp.SelectType == "2" {
-			bsp.SelectType = "detail\", \"title"
-		} else {
-			bsp.SelectType = "title"
-		}
-		multi_match = fmt.Sprintf(multi_match, "%s", "\""+bsp.SelectType+"\"")
+        //城市
+        if len(bsp.City) > 0 {
+	      areaquery := `{"terms":{"city":[`
+	      for k, v := range bsp.City {
+		    if k > 0 {
+			  areaquery += `,`
+		    }
+		    areaquery += `"` + v + `"`
+	      }
+	      areaquery += `]}}`
+	      areaCity = append(areaCity, areaquery)
+        }
+        if len(areaCity) > 0 {
+	      musts = append(musts, fmt.Sprintf(query_bool_should, strings.Join(areaCity, ",")))
+        }
+        if len(bsp.Subtype) > 0 {
+	      subquery := `{"terms":{"subtype":[`
+	      for k, v := range bsp.Subtype {
+		    if k > 0 {
+			  subquery += `,`
+		    }
+		    subquery += `"` + v + `"`
+	      }
+	      subquery += `]}}`
+	      musts = append(musts, subquery)
+        }
+        if len(bsp.Buyerclass) > 0 {
+	      Buyerclass := `{"terms":{"buyerclass":[`
+	      for k, v := range bsp.Buyerclass {
+		    if k > 0 {
+			  Buyerclass += `,`
+		    }
+		    Buyerclass += `"` + v + `"`
+	      }
+	      Buyerclass += `]}}`
+	      musts = append(musts, Buyerclass)
+        }
+        boolsNum := 0 //should
+        if len(bsp.Keyword) > 0 {
+	      boolsNum = 1
+	      if bsp.SelectType == "" || bsp.SelectType == "2" {
+		    bsp.SelectType = "detail\", \"title"
+	      } else {
+		    bsp.SelectType = "title"
+	      }
+	      multi_match = fmt.Sprintf(multi_match, "%s", "\""+bsp.SelectType+"\"")
 
-		for _, v := range bsp.Keyword {
-			shoulds := []string{}
-			must_not := []string{}
-			//附加词
-			for _, vv := range v.Keyword {
-				vv = strings.TrimSpace(vv)
-				if vv == "" {
-					continue
-				}
-				shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+vv+"\""))
-			}
+	      for _, v := range bsp.Keyword {
+		    shoulds := []string{}
+		    must_not := []string{}
+		    //附加词
+		    for _, vv := range v.Keyword {
+			  vv = strings.TrimSpace(vv)
+			  if vv == "" {
+				continue
+			  }
+			  shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+vv+"\""))
+		    }
 
-			for _, vv := range v.Appended {
-				vv = strings.TrimSpace(vv)
-				if vv == "" {
-					continue
-				}
-				shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+vv+"\""))
-			}
+		    for _, vv := range v.Appended {
+			  vv = strings.TrimSpace(vv)
+			  if vv == "" {
+				continue
+			  }
+			  shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+vv+"\""))
+		    }
 
-			//排除词
-			for _, vv := range v.Exclude {
-				vv = strings.TrimSpace(vv)
-				if vv == "" {
-					continue
-				}
-				must_not = append(must_not, fmt.Sprintf(multi_match, "\""+vv+"\""))
-			}
+		    //排除词
+		    for _, vv := range v.Exclude {
+			  vv = strings.TrimSpace(vv)
+			  if vv == "" {
+				continue
+			  }
+			  must_not = append(must_not, fmt.Sprintf(multi_match, "\""+vv+"\""))
+		    }
 
-			//添加
-			if len(shoulds) > 0 {
-				notStr := ""
-				if len(must_not) > 0 {
-					notStr = fmt.Sprintf(`,"must_not":[%s]`, strings.Join(must_not, ","))
-				}
-				bools = append(bools, fmt.Sprintf(query_bool_must_and, strings.Join(shoulds, ","), notStr))
-			}
-		}
-	}
+		    //添加
+		    if len(shoulds) > 0 {
+			  notStr := ""
+			  if len(must_not) > 0 {
+				notStr = fmt.Sprintf(`,"must_not":[%s]`, strings.Join(must_not, ","))
+			  }
+			  bools = append(bools, fmt.Sprintf(query_bool_must_and, strings.Join(shoulds, ","), notStr))
+		    }
+	      }
+        }
 
-	qstr := fmt.Sprintf(query, strings.Join(musts, ","), strings.Join(bools, ","), boolsNum)
-	logx.Info("----", qstr)
-	return qstr
+        qstr := fmt.Sprintf(query, strings.Join(musts, ","), strings.Join(bools, ","), boolsNum)
+        logx.Info("----", qstr)
+        return qstr
 }
 
 /*已选条件--关键词*/
 type ViewKeyWord struct {
-	Keyword  []string `json:"key"`       //关键词
-	Appended []string `json:"appendkey"` //附加词
-	Exclude  []string `json:"notkey"`    //排除词
-	MatchWay int      `json:"matchway"`  //匹配模式
+        Keyword  []string `json:"key"`       //关键词
+        Appended []string `json:"appendkey"` //附加词
+        Exclude  []string `json:"notkey"`    //排除词
+        MatchWay int      `json:"matchway"`  //匹配模式
 }
 
 /*已选条件*/
 type ViewCondition struct {
-	Area       []string      //地区-省份
-	City       []string      //地区-城市
-	Buyerclass []string      //采购行业
-	Keyword    []ViewKeyWord //关键词
-	SelectType string        //筛选(正文 or 标题)
-	Subtype    []string      //信息类型
-	Size       int           //数量
+        Area       []string      //地区-省份
+        City       []string      //地区-城市
+        Buyerclass []string      //采购行业
+        Keyword    []ViewKeyWord //关键词
+        SelectType string        //筛选(正文 or 标题)
+        Subtype    []string      //信息类型
+        Size       int           //数量
 }
 
 //获取用户信息
 func (s *subscribePush) getUserInfo(spqp *SubPushQueryParam) (vc *ViewCondition) {
-	var isPayBool = false
-	var tmpInfo = struct {
-		Items      []interface{}
-		BuyerClass []interface{}
-		SubType    []interface{}
-		Area       map[string]interface{}
-		SelectType string
-	}{}
-	switch s.ModuleFlag {
-	case "mType":
-		userMap, ok := IC.Mgo.FindById("user", spqp.UserId, `{"o_member_jy":1,"i_member_status":1}`)
-		if !ok || userMap == nil || len(*userMap) == 0 {
-			return &ViewCondition{}
-		}
-		//大会员
-		if common.IntAll((*userMap)["i_member_status"]) > 0 {
-			isPayBool = true
-			o_member_jy, _ := (*userMap)["o_member_jy"].(map[string]interface{})
-			tmpInfo.Items, _ = o_member_jy["a_items"].([]interface{})
-			tmpInfo.BuyerClass, _ = o_member_jy["a_buyerclass"].([]interface{})
-			tmpInfo.SubType, _ = o_member_jy["a_infotype"].([]interface{})
-			tmpInfo.Area, _ = o_member_jy["o_area"].(map[string]interface{})
-		}
-	case "vType":
-		userMap, ok := IC.Mgo.FindById("user", spqp.UserId, `{"o_vipjy":1,"i_vip_status":1}`)
-		if !ok || userMap == nil || len(*userMap) == 0 {
-			return &ViewCondition{}
-		}
-		if common.IntAll((*userMap)["i_vip_status"]) > 0 {
-			isPayBool = true
-			o_vipjy, _ := (*userMap)["o_vipjy"].(map[string]interface{})
-			tmpInfo.Items, _ = o_vipjy["a_items"].([]interface{})
-			tmpInfo.BuyerClass, _ = o_vipjy["a_buyerclass"].([]interface{})
-			tmpInfo.SubType, _ = o_vipjy["a_infotype"].([]interface{})
-			tmpInfo.Area, _ = o_vipjy["o_area"].(map[string]interface{})
-		}
-	case "eType":
-		//商机管理
-		entUserId, _ := strconv.Atoi(spqp.EntUserId)
-		entId, _ := strconv.Atoi(spqp.EntId)
-		entInfo, deptId := (&ms.MatchJob{}).Start(entId, entUserId)
-		if entInfo != nil && len(entInfo) > 0 {
-			spqp.DeptId = strconv.Itoa(deptId)
-			isPayBool = true
-			tmpInfo.Items, _ = entInfo["a_items"].([]interface{})
-			tmpInfo.BuyerClass, _ = entInfo["a_buyerclass"].([]interface{})
-			tmpInfo.SubType, _ = entInfo["a_infotype"].([]interface{})
-			tmpInfo.Area, _ = entInfo["o_area"].(map[string]interface{})
-		}
-	default:
-		userMap, ok := IC.Mgo.FindById("user", spqp.UserId, `{"o_jy":1}`)
-		if !ok || userMap == nil || len(*userMap) == 0 {
-			return &ViewCondition{}
-		}
-		o_jy, _ := (*userMap)["o_jy"].(map[string]interface{})
-		if o_jy["a_key"] != nil {
-			tmpInfo.Items, _ = o_jy["a_key"].([]interface{})
-			//信息类型
-			tmpInfo.SubType, _ = o_jy["a_infotype"].([]interface{})
-			//省份
-			tmpInfo.Area, _ = o_jy["o_area"].(map[string]interface{})
-			if common.IntAllDef(o_jy["i_ppstatus"], 0) == 1 && o_jy["o_area_p"] != nil {
-				tmpInfo.Area, _ = o_jy["o_area_p"].(map[string]interface{})
-			}
-		}
-	}
-	vc = &ViewCondition{
-		Buyerclass: common.ObjArrToStringArr(tmpInfo.BuyerClass),
-		Subtype:    common.ObjArrToStringArr(tmpInfo.SubType),
-		Area:       getStringArrFromDbResult(tmpInfo.Area, 1),
-		City:       getStringArrFromDbResult(tmpInfo.Area, 2),
-		SelectType: "1",
-	}
-	//付费用户
-	if isPayBool {
-		vc.Size = IC.C.DefaulCount.Pay
-		vc.Keyword = getKeyWordArrFromDbResult(tmpInfo.Items, "", -1)
-	} else {
-		vc.Size = IC.C.DefaulCount.Free
-		vc.Keyword = getKeyWordArrFromDbResultByFree(tmpInfo.Items, "", -1)
-		//vc.Keyword = getKeyWordArrFromDbResult(tmpInfo.Items, "", -1)
-	}
-	vc.Size = 10
+        var isPayBool = false
+        var tmpInfo = struct {
+	      Items      []interface{}
+	      BuyerClass []interface{}
+	      SubType    []interface{}
+	      Area       map[string]interface{}
+	      SelectType string
+        }{}
+        switch s.ModuleFlag {
+        case "mType":
+	      userMap, ok := IC.Mgo.FindById("user", spqp.UserId, `{"o_member_jy":1,"i_member_status":1}`)
+	      if !ok || userMap == nil || len(*userMap) == 0 {
+		    return &ViewCondition{}
+	      }
+	      //大会员
+	      if common.IntAll((*userMap)["i_member_status"]) > 0 {
+		    isPayBool = true
+		    o_member_jy, _ := (*userMap)["o_member_jy"].(map[string]interface{})
+		    tmpInfo.Items, _ = o_member_jy["a_items"].([]interface{})
+		    tmpInfo.BuyerClass, _ = o_member_jy["a_buyerclass"].([]interface{})
+		    tmpInfo.SubType, _ = o_member_jy["a_infotype"].([]interface{})
+		    tmpInfo.Area, _ = o_member_jy["o_area"].(map[string]interface{})
+	      }
+        case "vType":
+	      userMap, ok := IC.Mgo.FindById("user", spqp.UserId, `{"o_vipjy":1,"i_vip_status":1}`)
+	      if !ok || userMap == nil || len(*userMap) == 0 {
+		    return &ViewCondition{}
+	      }
+	      if common.IntAll((*userMap)["i_vip_status"]) > 0 {
+		    isPayBool = true
+		    o_vipjy, _ := (*userMap)["o_vipjy"].(map[string]interface{})
+		    tmpInfo.Items, _ = o_vipjy["a_items"].([]interface{})
+		    tmpInfo.BuyerClass, _ = o_vipjy["a_buyerclass"].([]interface{})
+		    tmpInfo.SubType, _ = o_vipjy["a_infotype"].([]interface{})
+		    tmpInfo.Area, _ = o_vipjy["o_area"].(map[string]interface{})
+	      }
+        case "eType":
+	      //商机管理
+	      entUserId, _ := strconv.Atoi(spqp.EntUserId)
+	      entId, _ := strconv.Atoi(spqp.EntId)
+	      entInfo, deptId := (&ms.MatchJob{}).Start(entId, entUserId)
+	      if entInfo != nil && len(entInfo) > 0 {
+		    spqp.DeptId = strconv.Itoa(deptId)
+		    isPayBool = true
+		    tmpInfo.Items, _ = entInfo["a_items"].([]interface{})
+		    tmpInfo.BuyerClass, _ = entInfo["a_buyerclass"].([]interface{})
+		    tmpInfo.SubType, _ = entInfo["a_infotype"].([]interface{})
+		    tmpInfo.Area, _ = entInfo["o_area"].(map[string]interface{})
+	      }
+        default:
+	      userMap, ok := IC.Mgo.FindById("user", spqp.UserId, `{"o_jy":1}`)
+	      if !ok || userMap == nil || len(*userMap) == 0 {
+		    return &ViewCondition{}
+	      }
+	      o_jy, _ := (*userMap)["o_jy"].(map[string]interface{})
+	      if o_jy["a_key"] != nil {
+		    tmpInfo.Items, _ = o_jy["a_key"].([]interface{})
+		    //信息类型
+		    tmpInfo.SubType, _ = o_jy["a_infotype"].([]interface{})
+		    //省份
+		    tmpInfo.Area, _ = o_jy["o_area"].(map[string]interface{})
+		    if common.IntAllDef(o_jy["i_ppstatus"], 0) == 1 && o_jy["o_area_p"] != nil {
+			  tmpInfo.Area, _ = o_jy["o_area_p"].(map[string]interface{})
+		    }
+	      }
+        }
+        vc = &ViewCondition{
+	      Buyerclass: common.ObjArrToStringArr(tmpInfo.BuyerClass),
+	      Subtype:    common.ObjArrToStringArr(tmpInfo.SubType),
+	      Area:       getStringArrFromDbResult(tmpInfo.Area, 1),
+	      City:       getStringArrFromDbResult(tmpInfo.Area, 2),
+	      SelectType: "1",
+        }
+        //付费用户
+        if isPayBool {
+	      vc.Size = IC.C.DefaulCount.Pay
+	      vc.Keyword = getKeyWordArrFromDbResult(tmpInfo.Items, "", -1)
+        } else {
+	      vc.Size = IC.C.DefaulCount.Free
+	      vc.Keyword = getKeyWordArrFromDbResultByFree(tmpInfo.Items, "", -1)
+	      //vc.Keyword = getKeyWordArrFromDbResult(tmpInfo.Items, "", -1)
+        }
+        vc.Size = 10
 
-	return
+        return
 }
 
 //关键词 附加词 排除词
 func getKeyWordArrFromDbResult(a_items []interface{}, item string, index int) (arr []ViewKeyWord) {
-	if a_items == nil {
-		return
-	}
-	for _, v := range a_items {
-		vm, _ := v.(map[string]interface{})
-		if item != "" && index >= 0 && item != common.ObjToString(vm["s_item"]) {
-			continue
-		}
-		kwsArr := vm["a_key"]
-		for i, k := range kwsArr.([]interface{}) {
-			if item != "" && index >= 0 && i != index {
-				continue
-			}
-			kw := ViewKeyWord{}
-			b, e := json.Marshal(k)
-			if e != nil {
-				log.Println(e.Error())
-			}
-			json.Unmarshal(b, &kw)
-			if kw.MatchWay == 1 {
-				for _, kk := range kw.Keyword {
-					arr = append(arr, ViewKeyWord{
-						Keyword: []string{kk},
-						Exclude: kw.Exclude,
-					})
-				}
-				for _, kk := range kw.Appended {
-					arr = append(arr, ViewKeyWord{
-						Keyword: []string{kk},
-						Exclude: kw.Exclude,
-					})
-				}
-			} else {
-				arr = append(arr, kw)
-			}
-		}
-	}
-	return
-}
-
-// //关键词 附加词 排除词  省份订阅包 - 普通用户
-func getKeyWordArrFromDbResultByFree(a_items []interface{}, item string, index int) (arr []ViewKeyWord) {
-	if a_items == nil {
-		return
-	}
-	for _, v := range a_items {
-		kw := ViewKeyWord{}
-		b, e := json.Marshal(v)
-		if e != nil {
-			log.Println(e.Error())
-		}
-		json.Unmarshal(b, &kw)
-		if kw.MatchWay == 1 {
-			for _, kk := range kw.Keyword {
+        if a_items == nil {
+	      return
+        }
+        for _, v := range a_items {
+	      vm, _ := v.(map[string]interface{})
+	      if item != "" && index >= 0 && item != common.ObjToString(vm["s_item"]) {
+		    continue
+	      }
+	      kwsArr := vm["a_key"]
+	      for i, k := range kwsArr.([]interface{}) {
+		    if item != "" && index >= 0 && i != index {
+			  continue
+		    }
+		    kw := ViewKeyWord{}
+		    b, e := json.Marshal(k)
+		    if e != nil {
+			  log.Println(e.Error())
+		    }
+		    json.Unmarshal(b, &kw)
+		    if kw.MatchWay == 1 {
+			  for _, kk := range kw.Keyword {
 				arr = append(arr, ViewKeyWord{
-					Keyword: []string{kk},
-					Exclude: kw.Exclude,
+				        Keyword: []string{kk},
+				        Exclude: kw.Exclude,
 				})
-			}
-			for _, kk := range kw.Appended {
+			  }
+			  for _, kk := range kw.Appended {
 				arr = append(arr, ViewKeyWord{
-					Keyword: []string{kk},
-					Exclude: kw.Exclude,
+				        Keyword: []string{kk},
+				        Exclude: kw.Exclude,
 				})
-			}
-		} else {
-			arr = append(arr, kw)
-		}
-	}
+			  }
+		    } else {
+			  arr = append(arr, kw)
+		    }
+	      }
+        }
+        return
+}
+
+// //关键词 附加词 排除词  省份订阅包 - 普通用户
+func getKeyWordArrFromDbResultByFree(a_items []interface{}, item string, index int) (arr []ViewKeyWord) {
+        if a_items == nil {
+	      return
+        }
+        for _, v := range a_items {
+	      kw := ViewKeyWord{}
+	      b, e := json.Marshal(v)
+	      if e != nil {
+		    log.Println(e.Error())
+	      }
+	      json.Unmarshal(b, &kw)
+	      if kw.MatchWay == 1 {
+		    for _, kk := range kw.Keyword {
+			  arr = append(arr, ViewKeyWord{
+				Keyword: []string{kk},
+				Exclude: kw.Exclude,
+			  })
+		    }
+		    for _, kk := range kw.Appended {
+			  arr = append(arr, ViewKeyWord{
+				Keyword: []string{kk},
+				Exclude: kw.Exclude,
+			  })
+		    }
+	      } else {
+		    arr = append(arr, kw)
+	      }
+        }
 
-	return
+        return
 }
 
 //地区格式化
 func getStringArrFromDbResult(area map[string]interface{}, i int) (arr []string) {
-	if area == nil {
-		return
-	}
-	var eareArr []string
-	var cityArr []string
-	for k, v := range area {
-		if len(v.([]interface{})) > 0 {
-			cityArr = append(cityArr, common.ObjArrToStringArr(v.([]interface{}))...)
-		} else {
-			eareArr = append(eareArr, k)
-		}
-	}
-	if i == 1 {
-		arr = eareArr
-	} else {
-		arr = cityArr
-	}
-	return
+        if area == nil {
+	      return
+        }
+        var eareArr []string
+        var cityArr []string
+        for k, v := range area {
+	      if len(v.([]interface{})) > 0 {
+		    cityArr = append(cityArr, common.ObjArrToStringArr(v.([]interface{}))...)
+	      } else {
+		    eareArr = append(eareArr, k)
+	      }
+        }
+        if i == 1 {
+	      arr = eareArr
+        } else {
+	      arr = cityArr
+        }
+        return
 }
 
 //IsInTsGuide 是否进入向导
 func (s *subscribePush) IsInTsGuide(userid string) bool {
-	if userid == "" {
-		return false
-	}
-	data, ok := IC.Mgo.FindById("user", userid, `{"o_jy":1,"i_ts_guide":1,"":1,"i_member_status":1,"i_vip_status":1}`)
-	if ok {
-		//付费用户无免费订阅,不进入订阅向导页面
-		if common.IntAll((*data)["i_member_status"]) > 0 || common.IntAll((*data)["i_vip_status"]) > 0 {
-			return false
-		}
-		o_jy, _ := (*data)["o_jy"].(map[string]interface{})
-		i_ts_guide := common.IntAll((*data)["i_ts_guide"])
-		if i_ts_guide == 2 || (i_ts_guide == 0 && len(o_jy) == 0) {
-			return true
-		}
-	}
-	return false
+        if userid == "" {
+	      return false
+        }
+        data, ok := IC.Mgo.FindById("user", userid, `{"o_jy":1,"i_ts_guide":1,"":1,"i_member_status":1,"i_vip_status":1}`)
+        if ok {
+	      //付费用户无免费订阅,不进入订阅向导页面
+	      if common.IntAll((*data)["i_member_status"]) > 0 || common.IntAll((*data)["i_vip_status"]) > 0 {
+		    return false
+	      }
+	      o_jy, _ := (*data)["o_jy"].(map[string]interface{})
+	      i_ts_guide := common.IntAll((*data)["i_ts_guide"])
+	      if i_ts_guide == 2 || (i_ts_guide == 0 && len(o_jy) == 0) {
+		    return true
+	      }
+        }
+        return false
 }

+ 15 - 0
jyCodeService/entity/db.go

@@ -0,0 +1,15 @@
+package entity
+
+type Mysql struct {
+	GlobalCommonData *MysqlStruct `json:"globalCommonData,omitempty"`
+}
+
+//mysql
+type MysqlStruct struct {
+	DbName       string `json:"dbName"`
+	Address      string `json:"address"`
+	UserName     string `json:"userName"`
+	Password     string `json:"password"`
+	MaxOpenConns int    `json:"maxOpenConns"`
+	MaxIdleConns int    `json:"maxIdleConns"`
+}

+ 9 - 0
jyCodeService/entity/logx.go

@@ -0,0 +1,9 @@
+package entity
+
+//日志信息
+type Logc struct {
+	Mode     string
+	Path     string
+	Level    []string
+	KeepDays int
+}

+ 18 - 0
jyCodeService/go.mod

@@ -0,0 +1,18 @@
+module bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService
+
+go 1.16
+
+require (
+	app.yhyue.com/moapp/jybase v0.0.0-20220617085837-48c1bf245c2f
+	github.com/go-sql-driver/mysql v1.6.0
+	github.com/kr/pretty v0.3.0 // indirect
+	github.com/mattn/go-colorable v0.1.13 // indirect
+	github.com/zeromicro/go-zero v1.4.0
+	golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 // indirect
+	golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f // indirect
+	golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 // indirect
+	golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect
+	google.golang.org/appengine v1.6.7 // indirect
+	google.golang.org/grpc v1.48.0
+	google.golang.org/protobuf v1.28.1
+)

+ 976 - 0
jyCodeService/go.sum

@@ -0,0 +1,976 @@
+app.yhyue.com/moapp/esv1 v0.0.0-20220414031211-3da4123e648d/go.mod h1:91/lSD/hS+ckMVP3WdidRzDhC60lLMdyce9QHy0cSMA=
+app.yhyue.com/moapp/jybase v0.0.0-20220617085837-48c1bf245c2f h1:U8sVqWn/JH2gcsJqQcHFaCx/MtY1pGUwbUAc5dVkwto=
+app.yhyue.com/moapp/jybase v0.0.0-20220617085837-48c1bf245c2f/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
+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=
+cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
+cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
+cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
+cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
+cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
+cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
+cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
+cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
+cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
+cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
+cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
+cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
+cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
+cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
+cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
+cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
+cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
+cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
+cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
+cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
+cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
+cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
+cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
+cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
+cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
+cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
+cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
+cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
+cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
+github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA=
+github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M=
+github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
+github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
+github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
+github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
+github.com/ClickHouse/clickhouse-go/v2 v2.2.0/go.mod h1:8f2XZUi7XoeU+uPIytSi1cvx8fmJxi7vIgqpvYTF1+o=
+github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
+github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
+github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
+github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
+github.com/Shopify/sarama v1.30.0/go.mod h1:zujlQQx1kzHsh4jfV1USnptCQrHAEZ2Hk8fTKCulPVs=
+github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae/go.mod h1:/cvHQkZ1fst0EmZnA5dFtiQdWCNCFYzb+uE2vqVgvx0=
+github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
+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/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
+github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a h1:HbKu58rmZpUGpz5+4FfNmIU+FmZg2P3Xaj2v2bfNWmk=
+github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
+github.com/alicebob/miniredis/v2 v2.22.0 h1:lIHHiSkEyS1MkKHCHzN+0mWrA4YdbGdimE5iZ2sHSzo=
+github.com/alicebob/miniredis/v2 v2.22.0/go.mod h1:XNqvJdQJv5mSuVMc0ynneafpnL/zv52acZ6kqeS0t88=
+github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
+github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
+github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=
+github.com/aws/aws-sdk-go v1.35.20/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k=
+github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
+github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
+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 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4=
+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/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
+github.com/cespare/xxhash/v2 v2.1.2/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/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
+github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
+github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
+github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
+github.com/coscms/tagfast v0.0.0-20150925144250-2b69b2496250/go.mod h1:zX8vynptAghuV/KG8BOZlDeo4DsTKWfBQ154RWlkay0=
+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.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/dchest/captcha v0.0.0-20200903113550-03f5f0333e1f h1:q/DpyjJjZs94bziQ7YkBmIlpqbVP7yw179rnzoNVX1M=
+github.com/dchest/captcha v0.0.0-20200903113550-03f5f0333e1f/go.mod h1:QGrK8vMWWHQYQ3QU9bw9Y9OPNfxccGzfb41qjvVeXtY=
+github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
+github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
+github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
+github.com/donnie4w/go-logger v0.0.0-20170827050443-4740c51383f4/go.mod h1:L7S4x0R7vv3xoOhGuyAJyCO2MYzWOpccM4Isn8jIUgY=
+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/eapache/go-resiliency v1.2.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/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
+github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
+github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
+github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
+github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
+github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
+github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
+github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
+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/fullstorydev/grpcurl v1.8.6/go.mod h1:WhP7fRQdhxz2TkL97u+TCb505sxfH78W1usyoB3tepw=
+github.com/garyburd/redigo v1.6.2/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
+github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+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/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
+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-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
+github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
+github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
+github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
+github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
+github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
+github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
+github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
+github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
+github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
+github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
+github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
+github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
+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/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
+github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY=
+github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg=
+github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
+github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
+github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs=
+github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
+github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
+github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk=
+github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28=
+github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo=
+github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk=
+github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw=
+github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360=
+github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg=
+github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE=
+github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8=
+github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
+github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
+github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
+github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
+github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ=
+github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
+github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
+github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
+github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
+github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
+github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
+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.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
+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=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+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/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/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
+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.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4/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.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
+github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
+github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
+github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
+github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
+github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+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.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.1.2/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/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
+github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
+github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU=
+github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw=
+github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA=
+github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU=
+github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
+github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
+github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
+github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
+github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
+github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw=
+github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
+github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+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/howeyc/fsnotify v0.9.0/go.mod h1:41HzSPxBGeFRQKEEwgh49TRw/nKBsYZ2cF1OzPjSJsA=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
+github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs=
+github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM=
+github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o=
+github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg=
+github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc=
+github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
+github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI=
+github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI=
+github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ=
+github.com/jhump/protoreflect v1.10.3/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg=
+github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E=
+github.com/jhump/protoreflect v1.12.0/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI=
+github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
+github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
+github.com/jinzhu/now v1.1.1 h1:g39TucaRWyV3dwDO++eEc6qf8TVIQ/Da48WmqjZ3i7E=
+github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
+github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
+github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
+github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
+github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
+github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
+github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.11/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/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
+github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
+github.com/justinas/alice v1.2.0/go.mod h1:fN5HRH/reO/zrUflLfTN43t3vXvKzvZIENsNEe7i7qA=
+github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
+github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
+github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
+github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
+github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
+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/konsorten/go-windows-terminal-sequences v1.0.3/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.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
+github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+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.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
+github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
+github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
+github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
+github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
+github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
+github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
+github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
+github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
+github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
+github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
+github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
+github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
+github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
+github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
+github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mkevac/debugcharts v0.0.0-20191222103121-ae1c48aa8615/go.mod h1:Ad7oeElCZqA1Ufj0U9/liOF4BtVepxRcTvr2ey7zTvM=
+github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
+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/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
+github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
+github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
+github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
+github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso=
+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/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
+github.com/olivere/elastic v6.2.37+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8=
+github.com/olivere/elastic/v7 v7.0.22/go.mod h1:VDexNy9NjmtAkrjNoI7tImv7FR4tf5zUA3ickqu5Pc8=
+github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
+github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
+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.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
+github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
+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.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
+github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
+github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
+github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
+github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
+github.com/openzipkin/zipkin-go v0.4.0 h1:CtfRrOVZtbDj8rt1WXjklw0kqqJQwICrCKmlfUuBUUw=
+github.com/openzipkin/zipkin-go v0.4.0/go.mod h1:4c3sLeE8xjNqehmF5RpAFLPLJxXscc0R4l6Zg0P1tTQ=
+github.com/paulmach/orb v0.7.1/go.mod h1:FWRlTgl88VI1RBx/MkrwWDRhQ96ctqMCh8boXhmqB/A=
+github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY=
+github.com/pelletier/go-toml v1.7.0 h1:7utD74fnzVc/cpcyy8sjrlFr5vYpypUixARcHIMIGuI=
+github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
+github.com/pelletier/go-toml/v2 v2.0.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw=
+github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI=
+github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
+github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
+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/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+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/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
+github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
+github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
+github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
+github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34=
+github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/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.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
+github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
+github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
+github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4=
+github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
+github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
+github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
+github.com/rabbitmq/amqp091-go v1.1.0/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0VTJ0kHRghqbM=
+github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
+github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
+github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
+github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
+github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
+github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/shirou/gopsutil v2.19.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
+github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
+github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
+github.com/shopspring/decimal v1.3.1/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.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/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
+github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM=
+github.com/smartystreets/gunit v1.4.2/go.mod h1:ZjM1ozSIMJlAz/ay4SG8PeKF00ckUp+zMHZXV9/bvak=
+github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
+github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
+github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
+github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
+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.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+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.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
+github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
+github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
+github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk=
+github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ=
+github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
+github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
+github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
+github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs=
+github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E=
+github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
+github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM=
+github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs=
+github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
+github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
+github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
+github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA=
+github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
+github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
+github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9 h1:k/gmLsJDWwWqbLCur2yWnJzwQEKRcAHXo6seXGuSwWw=
+github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA=
+github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+github.com/zeromicro/go-zero v1.4.0 h1:gtJ6XY7AZUJvA9omWNAWqxCd4hRE5vo1ObS2q+dUJgo=
+github.com/zeromicro/go-zero v1.4.0/go.mod h1:1amLn98K7c6FLntb9f8hdmq26ajtolOg4DTFWnRt54o=
+go.etcd.io/etcd/api/v3 v3.5.4 h1:OHVyt3TopwtUQ2GKdd5wu3PmmipR4FTwCqoEjSyRdIc=
+go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A=
+go.etcd.io/etcd/client/pkg/v3 v3.5.4 h1:lrneYvz923dvC14R54XcA7FXoZ3mlGZAgmwhfm7HqOg=
+go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
+go.etcd.io/etcd/client/v3 v3.5.4 h1:p83BUL3tAYS0OT/r0qglgc3M1JjhM0diV8DSWAhVXv4=
+go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY=
+go.mongodb.org/mongo-driver v1.5.0/go.mod h1:boiGPFqyBs5R0R5qf2ErokGRekMfwn+MqKaUyHs7wy0=
+go.mongodb.org/mongo-driver v1.10.1 h1:NujsPveKwHaWuKUer/ceo9DzEe7HIj1SlJ6uvXZG0S4=
+go.mongodb.org/mongo-driver v1.10.1/go.mod h1:z4XpeoU6w+9Vht+jAFyLgVrD+jGSQQe0+CBWFHNiHt8=
+go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
+go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
+go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
+go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk=
+go.opentelemetry.io/otel v1.9.0 h1:8WZNQFIB2a71LnANS9JeyidJKKGOOremcUtb/OtHISw=
+go.opentelemetry.io/otel v1.9.0/go.mod h1:np4EoPGzoPs3O67xUVNoPPcmSvsfOxNlNA4F4AC+0Eo=
+go.opentelemetry.io/otel/exporters/jaeger v1.9.0 h1:gAEgEVGDWwFjcis9jJTOJqZNxDzoZfR12WNIxr7g9Ww=
+go.opentelemetry.io/otel/exporters/jaeger v1.9.0/go.mod h1:hquezOLVAybNW6vanIxkdLXTXvzlj2Vn3wevSP15RYs=
+go.opentelemetry.io/otel/exporters/zipkin v1.9.0 h1:06b/nt6xao6th00aue9WU3ZDTTe+InaMXA/vym6pLuA=
+go.opentelemetry.io/otel/exporters/zipkin v1.9.0/go.mod h1:HyIvYIu37wV4Wx5azd7e05x9k/dOz9KB4x0plw2QNvs=
+go.opentelemetry.io/otel/sdk v1.9.0 h1:LNXp1vrr83fNXTHgU8eO89mhzxb/bbWAsHG6fNf3qWo=
+go.opentelemetry.io/otel/sdk v1.9.0/go.mod h1:AEZc8nt5bd2F7BC24J5R0mrjYnpEgYHyTcM/vrSple4=
+go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU=
+go.opentelemetry.io/otel/trace v1.9.0 h1:oZaCNJUjWcg60VXWee8lJKlqhPbXAPB51URuR47pQYc=
+go.opentelemetry.io/otel/trace v1.9.0/go.mod h1:2737Q0MuG8q1uILYm2YYVkAyLtOofiTNGg6VODnOiPo=
+go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
+go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
+go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
+go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
+go.uber.org/automaxprocs v1.5.1 h1:e1YG66Lrk73dn4qhg8WFSvhF0JuFQF0ERIp4rpuV8Qk=
+go.uber.org/automaxprocs v1.5.1/go.mod h1:BF4eumQw0P9GtnuxxovUd06vwm1o18oMzFtK66vU6XU=
+go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
+go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA=
+go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
+go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
+go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8=
+go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=
+go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
+go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8=
+go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/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-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
+golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
+golang.org/x/crypto v0.0.0-20210920023735-84f357641f63/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM=
+golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
+golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
+golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
+golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
+golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/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-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
+golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
+golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
+golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/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-20181114220301-adae6a3d119a/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-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-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/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-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
+golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
+golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20220531201128-c960675eff93 h1:MYimHLfoXEpOhqd/zgoA/uoXzHB86AEky4LAx5ij9xA=
+golang.org/x/net v0.0.0-20220531201128-c960675eff93/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw=
+golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+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-20190412183630-56d357773e84/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-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+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-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+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-20190419153524-e8e3143a4f4a/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-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/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-20191220220014-0732a990476f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/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-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220429233432-b5fbb4746d32/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 h1:v6hYoSR9T5oet+pMXwUWkbiVqx/63mlHjefrHmxwfeY=
+golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/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-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc=
+golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.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.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20220411224347-583f2d630306 h1:+gHMid33q6pen7kv9xvT+JRinntgeXO2AeZVd0AWD3w=
+golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+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-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/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-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
+golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+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/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
+google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
+google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
+google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
+google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
+google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
+google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
+google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+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-20190418145605-e7d98fc518a7/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-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
+google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
+google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
+google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
+google.golang.org/genproto v0.0.0-20220602131408-e326c6e8e9c8 h1:qRu95HZ148xXw+XeZ3dvqe85PxH4X8+jIo0iRPKcEnM=
+google.golang.org/genproto v0.0.0-20220602131408-e326c6e8e9c8/go.mod h1:yKyY4AMRwFiC8yMMNaMi+RkCnjZJt9LoWuvhXjMs+To=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
+google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
+google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
+google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
+google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
+google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k=
+google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
+google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
+google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w=
+google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
+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=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
+google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/cheggaaa/pb.v1 v1.0.28/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/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw=
+gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY=
+gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0=
+gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
+gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+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/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/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=
+gorm.io/driver/mysql v1.0.5 h1:WAAmvLK2rG0tCOqrf5XcLi2QUwugd4rcVJ/W3aoon9o=
+gorm.io/driver/mysql v1.0.5/go.mod h1:N1OIhHAIhx5SunkMGqWbGFVeh4yTNWKmMo1GOAsohLI=
+gorm.io/gorm v1.21.3 h1:qDFi55ZOsjZTwk5eN+uhAmHi8GysJ/qCTichM/yO7ME=
+gorm.io/gorm v1.21.3/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+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=
+honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+k8s.io/api v0.22.9 h1:PidjRtgd0zDa6SvyooBLH/SP62uOhEBY0kx0UYRGr1o=
+k8s.io/api v0.22.9/go.mod h1:rcjO/FPOuvc3x7nQWx29UcDrFJMx82RxDob71ntNH4A=
+k8s.io/apimachinery v0.22.9 h1:5qjnpBk6eC9me0SAzokCUMI0KVF2PENK1PnykF8/Gjo=
+k8s.io/apimachinery v0.22.9/go.mod h1:ZvVLP5iLhwVFg2Yx9Gh5W0um0DUauExbRhe+2Z8I1EU=
+k8s.io/client-go v0.22.9 h1:5p2R2LsoBfaE6QnXfWFmyyvxrFXtfegUGRMZSpTI+Q8=
+k8s.io/client-go v0.22.9/go.mod h1:IoH7exYnoH/zgvHOuVxh2c4yJepcCBt72FzCTisOc4k=
+k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
+k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
+k8s.io/klog/v2 v2.40.1 h1:P4RRucWk/lFOlDdkAr3mc7iWFkgKrZY9qZMAgek06S4=
+k8s.io/klog/v2 v2.40.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
+k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
+k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
+k8s.io/utils v0.0.0-20220706174534-f6158b442e7c h1:hFZO68mv/0xe8+V0gRT9BAq3/31cKjjeVv4nScriuBk=
+k8s.io/utils v0.0.0-20220706174534-f6158b442e7c/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
+rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
+rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
+rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
+sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
+sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y=
+sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
+sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
+sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=

+ 27 - 0
jyCodeService/rpc/codeservice/codeService.proto

@@ -0,0 +1,27 @@
+syntax = "proto3";
+
+package codeservice;
+option go_package = "./codeservice";
+
+message Request {
+}
+
+message Response {
+  int64           ErrorCode = 1;  // 响应代码
+  string          ErrorMsg = 2;   // 响应信息
+  TypeStruct      Data = 3;//数据
+
+}
+//返回数据
+message  TypeStruct{
+  map<string,string> Area = 1;
+  map<string,string> City = 2;
+  map<string,string> Subtype = 3;
+  map<string,string> Buyerclass = 4;
+  map<string,string> Subscopeclass = 5;
+}
+
+
+service CodeService {
+  rpc CodeTransformation(Request) returns(Response);
+}

+ 40 - 0
jyCodeService/rpc/codeservice/codeservice.go

@@ -0,0 +1,40 @@
+package main
+
+import (
+	"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/rpc/codeservice/codeservice"
+	"flag"
+	"fmt"
+
+	"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/rpc/codeservice/internal/config"
+	"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/rpc/codeservice/internal/server"
+	"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/rpc/codeservice/internal/svc"
+
+	"github.com/zeromicro/go-zero/core/conf"
+	"github.com/zeromicro/go-zero/core/service"
+	"github.com/zeromicro/go-zero/zrpc"
+	"google.golang.org/grpc"
+	"google.golang.org/grpc/reflection"
+)
+
+var configFile = flag.String("f", "etc/codeservice.yaml", "the config file")
+
+func main() {
+	flag.Parse()
+
+	var c config.Config
+	conf.MustLoad(*configFile, &c)
+	ctx := svc.NewServiceContext(c)
+	svr := server.NewCodeServiceServer(ctx)
+
+	s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) {
+		codeservice.RegisterCodeServiceServer(grpcServer, svr)
+
+		if c.Mode == service.DevMode || c.Mode == service.TestMode {
+			reflection.Register(grpcServer)
+		}
+	})
+	defer s.Stop()
+
+	fmt.Printf("Starting rpc server at %s...\n", c.ListenOn)
+	s.Start()
+}

+ 366 - 0
jyCodeService/rpc/codeservice/codeservice/codeService.pb.go

@@ -0,0 +1,366 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.28.0
+// 	protoc        v3.15.1
+// source: codeService.proto
+
+package codeservice
+
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type Request struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *Request) Reset() {
+	*x = Request{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_codeService_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Request) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Request) ProtoMessage() {}
+
+func (x *Request) ProtoReflect() protoreflect.Message {
+	mi := &file_codeService_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Request.ProtoReflect.Descriptor instead.
+func (*Request) Descriptor() ([]byte, []int) {
+	return file_codeService_proto_rawDescGZIP(), []int{0}
+}
+
+type Response struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrorCode int64       `protobuf:"varint,1,opt,name=ErrorCode,proto3" json:"ErrorCode,omitempty"` // 响应代码
+	ErrorMsg  string      `protobuf:"bytes,2,opt,name=ErrorMsg,proto3" json:"ErrorMsg,omitempty"`    // 响应信息
+	Data      *TypeStruct `protobuf:"bytes,3,opt,name=Data,proto3" json:"Data,omitempty"`            //数据
+}
+
+func (x *Response) Reset() {
+	*x = Response{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_codeService_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Response) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Response) ProtoMessage() {}
+
+func (x *Response) ProtoReflect() protoreflect.Message {
+	mi := &file_codeService_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Response.ProtoReflect.Descriptor instead.
+func (*Response) Descriptor() ([]byte, []int) {
+	return file_codeService_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *Response) GetErrorCode() int64 {
+	if x != nil {
+		return x.ErrorCode
+	}
+	return 0
+}
+
+func (x *Response) GetErrorMsg() string {
+	if x != nil {
+		return x.ErrorMsg
+	}
+	return ""
+}
+
+func (x *Response) GetData() *TypeStruct {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+//返回数据
+type TypeStruct struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Area          map[string]string `protobuf:"bytes,1,rep,name=Area,proto3" json:"Area,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	City          map[string]string `protobuf:"bytes,2,rep,name=City,proto3" json:"City,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Subtype       map[string]string `protobuf:"bytes,3,rep,name=Subtype,proto3" json:"Subtype,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Buyerclass    map[string]string `protobuf:"bytes,4,rep,name=Buyerclass,proto3" json:"Buyerclass,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Subscopeclass map[string]string `protobuf:"bytes,5,rep,name=Subscopeclass,proto3" json:"Subscopeclass,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+}
+
+func (x *TypeStruct) Reset() {
+	*x = TypeStruct{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_codeService_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *TypeStruct) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TypeStruct) ProtoMessage() {}
+
+func (x *TypeStruct) ProtoReflect() protoreflect.Message {
+	mi := &file_codeService_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use TypeStruct.ProtoReflect.Descriptor instead.
+func (*TypeStruct) Descriptor() ([]byte, []int) {
+	return file_codeService_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *TypeStruct) GetArea() map[string]string {
+	if x != nil {
+		return x.Area
+	}
+	return nil
+}
+
+func (x *TypeStruct) GetCity() map[string]string {
+	if x != nil {
+		return x.City
+	}
+	return nil
+}
+
+func (x *TypeStruct) GetSubtype() map[string]string {
+	if x != nil {
+		return x.Subtype
+	}
+	return nil
+}
+
+func (x *TypeStruct) GetBuyerclass() map[string]string {
+	if x != nil {
+		return x.Buyerclass
+	}
+	return nil
+}
+
+func (x *TypeStruct) GetSubscopeclass() map[string]string {
+	if x != nil {
+		return x.Subscopeclass
+	}
+	return nil
+}
+
+var File_codeService_proto protoreflect.FileDescriptor
+
+var file_codeService_proto_rawDesc = []byte{
+	0x0a, 0x11, 0x63, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x22, 0x09, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x71, 0x0a, 0x08, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72,
+	0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x45, 0x72, 0x72, 0x6f,
+	0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73,
+	0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73,
+	0x67, 0x12, 0x2b, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x79,
+	0x70, 0x65, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x84,
+	0x05, 0x0a, 0x0a, 0x54, 0x79, 0x70, 0x65, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x35, 0x0a,
+	0x04, 0x41, 0x72, 0x65, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f,
+	0x64, 0x65, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x74,
+	0x72, 0x75, 0x63, 0x74, 0x2e, 0x41, 0x72, 0x65, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04,
+	0x41, 0x72, 0x65, 0x61, 0x12, 0x35, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+	0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x43, 0x69, 0x74, 0x79,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x43, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x07, 0x53,
+	0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63,
+	0x6f, 0x64, 0x65, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53,
+	0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x74,
+	0x72, 0x79, 0x52, 0x07, 0x53, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x42,
+	0x75, 0x79, 0x65, 0x72, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x79,
+	0x70, 0x65, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x42, 0x75, 0x79, 0x65, 0x72, 0x63, 0x6c,
+	0x61, 0x73, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x42, 0x75, 0x79, 0x65, 0x72, 0x63,
+	0x6c, 0x61, 0x73, 0x73, 0x12, 0x50, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x70, 0x65,
+	0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x6f,
+	0x64, 0x65, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x74,
+	0x72, 0x75, 0x63, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x63, 0x6c, 0x61,
+	0x73, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x70,
+	0x65, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x41, 0x72, 0x65, 0x61, 0x45, 0x6e,
+	0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
+	0x37, 0x0a, 0x09, 0x43, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
+	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
+	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x74,
+	0x79, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
+	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x42, 0x75, 0x79, 0x65, 0x72, 0x63, 0x6c, 0x61,
+	0x73, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
+	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
+	0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x63,
+	0x6c, 0x61, 0x73, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x3a, 0x02, 0x38, 0x01, 0x32, 0x50, 0x0a, 0x0b, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72,
+	0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x12, 0x43, 0x6f, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e,
+	0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x2e, 0x63, 0x6f, 0x64,
+	0x65, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0f, 0x5a, 0x0d, 0x2e, 0x2f, 0x63, 0x6f, 0x64,
+	0x65, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_codeService_proto_rawDescOnce sync.Once
+	file_codeService_proto_rawDescData = file_codeService_proto_rawDesc
+)
+
+func file_codeService_proto_rawDescGZIP() []byte {
+	file_codeService_proto_rawDescOnce.Do(func() {
+		file_codeService_proto_rawDescData = protoimpl.X.CompressGZIP(file_codeService_proto_rawDescData)
+	})
+	return file_codeService_proto_rawDescData
+}
+
+var file_codeService_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
+var file_codeService_proto_goTypes = []interface{}{
+	(*Request)(nil),    // 0: codeservice.Request
+	(*Response)(nil),   // 1: codeservice.Response
+	(*TypeStruct)(nil), // 2: codeservice.TypeStruct
+	nil,                // 3: codeservice.TypeStruct.AreaEntry
+	nil,                // 4: codeservice.TypeStruct.CityEntry
+	nil,                // 5: codeservice.TypeStruct.SubtypeEntry
+	nil,                // 6: codeservice.TypeStruct.BuyerclassEntry
+	nil,                // 7: codeservice.TypeStruct.SubscopeclassEntry
+}
+var file_codeService_proto_depIdxs = []int32{
+	2, // 0: codeservice.Response.Data:type_name -> codeservice.TypeStruct
+	3, // 1: codeservice.TypeStruct.Area:type_name -> codeservice.TypeStruct.AreaEntry
+	4, // 2: codeservice.TypeStruct.City:type_name -> codeservice.TypeStruct.CityEntry
+	5, // 3: codeservice.TypeStruct.Subtype:type_name -> codeservice.TypeStruct.SubtypeEntry
+	6, // 4: codeservice.TypeStruct.Buyerclass:type_name -> codeservice.TypeStruct.BuyerclassEntry
+	7, // 5: codeservice.TypeStruct.Subscopeclass:type_name -> codeservice.TypeStruct.SubscopeclassEntry
+	0, // 6: codeservice.CodeService.CodeTransformation:input_type -> codeservice.Request
+	1, // 7: codeservice.CodeService.CodeTransformation:output_type -> codeservice.Response
+	7, // [7:8] is the sub-list for method output_type
+	6, // [6:7] is the sub-list for method input_type
+	6, // [6:6] is the sub-list for extension type_name
+	6, // [6:6] is the sub-list for extension extendee
+	0, // [0:6] is the sub-list for field type_name
+}
+
+func init() { file_codeService_proto_init() }
+func file_codeService_proto_init() {
+	if File_codeService_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_codeService_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Request); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_codeService_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Response); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_codeService_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TypeStruct); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_codeService_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   8,
+			NumExtensions: 0,
+			NumServices:   1,
+		},
+		GoTypes:           file_codeService_proto_goTypes,
+		DependencyIndexes: file_codeService_proto_depIdxs,
+		MessageInfos:      file_codeService_proto_msgTypes,
+	}.Build()
+	File_codeService_proto = out.File
+	file_codeService_proto_rawDesc = nil
+	file_codeService_proto_goTypes = nil
+	file_codeService_proto_depIdxs = nil
+}

+ 105 - 0
jyCodeService/rpc/codeservice/codeservice/codeService_grpc.pb.go

@@ -0,0 +1,105 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.2.0
+// - protoc             v3.15.1
+// source: codeService.proto
+
+package codeservice
+
+import (
+	context "context"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+// CodeServiceClient is the client API for CodeService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type CodeServiceClient interface {
+	CodeTransformation(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error)
+}
+
+type codeServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCodeServiceClient(cc grpc.ClientConnInterface) CodeServiceClient {
+	return &codeServiceClient{cc}
+}
+
+func (c *codeServiceClient) CodeTransformation(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error) {
+	out := new(Response)
+	err := c.cc.Invoke(ctx, "/codeservice.CodeService/CodeTransformation", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CodeServiceServer is the server API for CodeService service.
+// All implementations must embed UnimplementedCodeServiceServer
+// for forward compatibility
+type CodeServiceServer interface {
+	CodeTransformation(context.Context, *Request) (*Response, error)
+	mustEmbedUnimplementedCodeServiceServer()
+}
+
+// UnimplementedCodeServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedCodeServiceServer struct {
+}
+
+func (UnimplementedCodeServiceServer) CodeTransformation(context.Context, *Request) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CodeTransformation not implemented")
+}
+func (UnimplementedCodeServiceServer) mustEmbedUnimplementedCodeServiceServer() {}
+
+// UnsafeCodeServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to CodeServiceServer will
+// result in compilation errors.
+type UnsafeCodeServiceServer interface {
+	mustEmbedUnimplementedCodeServiceServer()
+}
+
+func RegisterCodeServiceServer(s grpc.ServiceRegistrar, srv CodeServiceServer) {
+	s.RegisterService(&CodeService_ServiceDesc, srv)
+}
+
+func _CodeService_CodeTransformation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Request)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CodeServiceServer).CodeTransformation(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/codeservice.CodeService/CodeTransformation",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CodeServiceServer).CodeTransformation(ctx, req.(*Request))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+// CodeService_ServiceDesc is the grpc.ServiceDesc for CodeService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var CodeService_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "codeservice.CodeService",
+	HandlerType: (*CodeServiceServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "CodeTransformation",
+			Handler:    _CodeService_CodeTransformation_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "codeService.proto",
+}

+ 32 - 0
jyCodeService/rpc/codeservice/codeservice/codeservice.go

@@ -0,0 +1,32 @@
+// Code generated by goctl. DO NOT EDIT!
+// Source: codeService.proto
+
+package codeservice
+
+import (
+	"context"
+
+	"github.com/zeromicro/go-zero/zrpc"
+	"google.golang.org/grpc"
+)
+
+type (
+	CodeService interface {
+		CodeTransformation(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error)
+	}
+
+	defaultCodeService struct {
+		cli zrpc.Client
+	}
+)
+
+func NewCodeService(cli zrpc.Client) CodeService {
+	return &defaultCodeService{
+		cli: cli,
+	}
+}
+
+func (m *defaultCodeService) CodeTransformation(ctx context.Context, in *Request, opts ...grpc.CallOption) (*Response, error) {
+	client := NewCodeServiceClient(m.cli.Conn())
+	return client.CodeTransformation(ctx, in, opts...)
+}

+ 6 - 0
jyCodeService/rpc/codeservice/etc/codeservice.yaml

@@ -0,0 +1,6 @@
+Name: codeservice.rpc
+ListenOn: 127.0.0.1:8080
+Etcd:
+  Hosts:
+  - 127.0.0.1:2379
+  Key: codeservice.rpc

+ 45 - 0
jyCodeService/rpc/codeservice/etc/db.yaml

@@ -0,0 +1,45 @@
+mysql:
+    main:
+        dbName: jianyu
+        address: 192.168.3.11:3366
+        userName: root
+        password: Topnet123
+        maxOpenConns: 5
+        maxIdleConns: 5
+    baseService:
+        dbName: base_service
+        address: 192.168.3.217:4000
+        userName: root
+        password: '=PDT49#80Z!RVv52_z'
+        maxOpenConns: 5
+        maxIdleConns: 5
+    globalCommonData:
+        dbName: global_common_data
+        address: 192.168.3.217:4000
+        userName: root
+        password: '=PDT49#80Z!RVv52_z'
+        maxOpenConns: 5
+        maxIdleConns: 5
+redis:
+    addr:
+        - other=192.168.3.206:1712
+        - push=192.168.3.206:1712
+        - pushcache_1=127.0.0.1:6379
+        - pushcache_2_a=127.0.0.1:6379
+        - pushcache_2_b=127.0.0.1:6379
+es:
+    addr: http://192.168.3.206:9800
+    size: 30
+mongo:
+    main:
+        dbName: qfw
+        size: 5
+        address: 192.168.3.206:27080
+    bidding:
+        address: 192.168.3.206:27001
+        size: 5
+        dbName: qfw_data
+        collection: bidding
+        collectionChange: bidding_back
+        userName: jyDevGroup
+        password: jy@DevGroup

+ 6 - 0
jyCodeService/rpc/codeservice/etc/logs.yaml

@@ -0,0 +1,6 @@
+Mode: file
+Path: ./logs
+Level:
+  - info
+  - error
+KeepDays: 10

+ 13 - 0
jyCodeService/rpc/codeservice/internal/config/config.go

@@ -0,0 +1,13 @@
+package config
+
+import (
+	"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/entity"
+	"github.com/zeromicro/go-zero/zrpc"
+)
+
+type Config struct {
+	zrpc.RpcServerConf
+}
+type Db struct {
+	Mysql entity.Mysql `json:"mysql"`
+}

+ 37 - 0
jyCodeService/rpc/codeservice/internal/init/db.go

@@ -0,0 +1,37 @@
+/*
+初始数据库应用
+*/
+package init
+
+import (
+	"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/entity"
+	"github.com/zeromicro/go-zero/core/logx"
+
+	"app.yhyue.com/moapp/jybase/mongodb"
+	"app.yhyue.com/moapp/jybase/mysql"
+)
+
+var (
+	MainMysql        *mysql.Mysql
+	BaseServiceMysql *mysql.Mysql
+	Mgo              mongodb.MongodbSim
+	MgoBidding       mongodb.MongodbSim
+	GlobalCommonData *mysql.Mysql
+)
+
+//
+func MysqlInit(mm *entity.Mysql) {
+	//初始化 mysql-GlobalCommonData
+	if mm.GlobalCommonData.Address != "" {
+		logx.Info("--初始化 推送 mysql--")
+		GlobalCommonData = &mysql.Mysql{
+			Address:      mm.GlobalCommonData.Address,
+			UserName:     mm.GlobalCommonData.UserName,
+			PassWord:     mm.GlobalCommonData.Password,
+			DBName:       mm.GlobalCommonData.DbName,
+			MaxOpenConns: mm.GlobalCommonData.MaxOpenConns,
+			MaxIdleConns: mm.GlobalCommonData.MaxIdleConns,
+		}
+		GlobalCommonData.Init()
+	}
+}

+ 47 - 0
jyCodeService/rpc/codeservice/internal/init/init.go

@@ -0,0 +1,47 @@
+package init
+
+import (
+	"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/entity"
+	"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/rpc/codeservice/internal/config"
+	"flag"
+	_ "github.com/go-sql-driver/mysql"
+	"github.com/zeromicro/go-zero/core/conf"
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+var configF = flag.String("cf", "etc/codeservice.yaml", "the config file")
+
+var C config.Config
+var err error
+
+//
+var dbFile = flag.String("df", "etc/db.yaml", "the db file")
+var DB config.Db
+
+//
+var logFile = flag.String("lf", "etc/logs.yaml", "the log file")
+var logc entity.Logc
+
+func init() {
+	//初始化基本配置
+	conf.MustLoad(*configF, &C)
+	//初始化数据库配置
+	conf.MustLoad(*dbFile, &DB)
+	//初始化msyql
+	MysqlInit(&DB.Mysql)
+	//初始化日志信息
+	conf.MustLoad(*logFile, &logc)
+	if len(logc.Level) > 0 {
+		for _, v := range logc.Level {
+			logx.MustSetup(logx.LogConf{
+				Mode:     logc.Mode,
+				Path:     logc.Path,
+				Level:    v,
+				KeepDays: logc.KeepDays,
+			})
+			logx.Info(v, "--日志记录")
+		}
+	}
+	//代码表初始化
+	PushMapping.Init(GlobalCommonData)
+}

+ 28 - 39
jyBXSubscribe/rpc/init/pushmapping.go → jyCodeService/rpc/codeservice/internal/init/pushmapping.go

@@ -3,20 +3,12 @@ package init
 import (
 	util "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/mysql"
+	"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/rpc/codeservice/codeservice"
 	"fmt"
 	"log"
 )
 
-var PushMapping = &pushMapping{}
-
-type pushMapping struct {
-	Area          map[string]string
-	City          map[string]string
-	Toptype       map[string]string
-	Subtype       map[string]string
-	Buyerclass    map[string]string
-	Subscopeclass map[string]string
-}
+var PushMapping = &codeservice.TypeStruct{}
 
 const (
 	CODEAREA          = "code_area"
@@ -25,60 +17,55 @@ const (
 	CODEBUYERCLASS    = "code_buyerclass"
 )
 
-func (p *pushMapping) Init(Mysql *mysql.Mysql) {
-	//公告类型处理
-	infotype := Mysql.SelectBySql(fmt.Sprintf("select level,code,name from %s", CODEBIDTOPSUBTYPE))
-	p.Toptype = map[string]string{}
-	p.Subtype = map[string]string{}
+func Init(Mysql *mysql.Mysql) {
+	//信息类型
+	infotype := Mysql.SelectBySql(fmt.Sprintf("select level,code,name from %s where level=2", CODEBIDTOPSUBTYPE))
+	Subtype := map[string]string{}
 	if infotype != nil && len(*infotype) > 0 {
 		for _, v := range *infotype {
-			level := util.IntAll(v["level"])
 			code := util.ObjToString(v["code"])
 			name := util.ObjToString(v["name"])
-			if level == 1 {
-				p.Toptype[name] = code
-			} else if level == 2 {
-				p.Subtype[name] = code
-			}
+			Subtype[name] = code
 		}
-		if len(p.Toptype) == 0 {
-			log.Fatalln("PushMapping Toptype Init Error")
-		}
-		if len(p.Subtype) == 0 {
+		if len(Subtype) == 0 {
 			log.Fatalln("PushMapping Subtype Init Error")
 		}
+		PushMapping.Subtype = Subtype
 	}
 	//采购单位行业
-	p.Buyerclass = map[string]string{}
+	Buyerclass := map[string]string{}
 	buyerclass := Mysql.SelectBySql(fmt.Sprintf("select code,name from %s where level=1", CODEBUYERCLASS))
 	if buyerclass != nil && len(*buyerclass) > 0 {
 		for _, v := range *buyerclass {
 			code := util.ObjToString(v["code"])
 			name := util.ObjToString(v["name"])
-			p.Buyerclass[name] = code
+			Buyerclass[name] = code
 		}
 
-		if len(p.Buyerclass) == 0 {
+		if len(Buyerclass) == 0 {
 			log.Fatalln("PushMapping Buyerclass Init Error")
 		}
+		PushMapping.Buyerclass = Buyerclass
 	}
-	//信息行业
-	p.Subscopeclass = map[string]string{}
-	subscopeclass := Mysql.SelectBySql(fmt.Sprintf("select code,name from %s where level=2", CODEBIDSCOPE))
+
+	//公告类型处理
+	Subscopeclass := map[string]string{}
+	subscopeclass := Mysql.SelectBySql(fmt.Sprintf("select a.code, CONCAT(b.name,'_',a.name) as name  from %s a LEFT JOIN %s b on a.pcode=b.code where  a.level=2", CODEBIDSCOPE, CODEBIDSCOPE))
 	if subscopeclass != nil && len(*subscopeclass) > 0 {
 		for _, v := range *subscopeclass {
 			code := util.ObjToString(v["code"])
 			name := util.ObjToString(v["name"])
-			p.Subscopeclass[name] = code
+			Subscopeclass[name] = code
 		}
 
-		if len(p.Subscopeclass) == 0 {
+		if len(Subscopeclass) == 0 {
 			log.Fatalln("PushMapping subscopeclass Init Error")
 		}
+		PushMapping.Subtype = Subtype
 	}
 	//省份处理
-	p.Area = map[string]string{}
-	p.City = map[string]string{}
+	Area := map[string]string{}
+	City := map[string]string{}
 	province := Mysql.SelectBySql(fmt.Sprintf("select code,area,city from %s where (district is null or district='')", CODEAREA))
 	if province != nil && len(*province) > 0 {
 		for _, v := range *province {
@@ -86,17 +73,19 @@ func (p *pushMapping) Init(Mysql *mysql.Mysql) {
 			city := util.ObjToString(v["city"])
 			area := util.ObjToString(v["area"])
 			if city == "" {
-				p.Area[area] = code
+				Area[area] = code
 			} else {
-				p.City[city] = code
+				City[city] = code
 			}
 		}
-		if len(p.Area) == 0 {
+		if len(Area) == 0 {
 			log.Fatalln("PushMapping Area Init Error")
 		}
-		if len(p.City) == 0 {
+		if len(City) == 0 {
 			log.Fatalln("PushMapping City Init Error")
 		}
+		PushMapping.Area = Area
+		PushMapping.City = City
 	}
 
 }

+ 37 - 0
jyCodeService/rpc/codeservice/internal/logic/codetransformationlogic.go

@@ -0,0 +1,37 @@
+package logic
+
+import (
+	IC "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/rpc/codeservice/internal/init"
+	"context"
+
+	"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/rpc/codeservice/codeservice"
+	"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/rpc/codeservice/internal/svc"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type CodeTransformationLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewCodeTransformationLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CodeTransformationLogic {
+	return &CodeTransformationLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+func (l *CodeTransformationLogic) CodeTransformation(in *codeservice.Request) (*codeservice.Response, error) {
+	// todo: add your logic here and delete this line
+	logx.Info("代码表获取")
+	logx.Info(IC.CODEAREA)
+	logx.Info("Area", IC.PushMapping.Area)
+	logx.Info("City", IC.PushMapping.City)
+	logx.Info("Buyerclass", IC.PushMapping.Buyerclass)
+	logx.Info("Subscopeclass", IC.PushMapping.Subscopeclass)
+	logx.Info("Subtype", IC.PushMapping.Subtype)
+	return &codeservice.Response{}, nil
+}

+ 28 - 0
jyCodeService/rpc/codeservice/internal/server/codeserviceserver.go

@@ -0,0 +1,28 @@
+// Code generated by goctl. DO NOT EDIT!
+// Source: codeService.proto
+
+package server
+
+import (
+	"context"
+
+	"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/rpc/codeservice/codeservice"
+	"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/rpc/codeservice/internal/logic"
+	"bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/rpc/codeservice/internal/svc"
+)
+
+type CodeServiceServer struct {
+	svcCtx *svc.ServiceContext
+	codeservice.UnimplementedCodeServiceServer
+}
+
+func NewCodeServiceServer(svcCtx *svc.ServiceContext) *CodeServiceServer {
+	return &CodeServiceServer{
+		svcCtx: svcCtx,
+	}
+}
+
+func (s *CodeServiceServer) CodeTransformation(ctx context.Context, in *codeservice.Request) (*codeservice.Response, error) {
+	l := logic.NewCodeTransformationLogic(ctx, s.svcCtx)
+	return l.CodeTransformation(in)
+}

+ 13 - 0
jyCodeService/rpc/codeservice/internal/svc/servicecontext.go

@@ -0,0 +1,13 @@
+package svc
+
+import "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyCodeService/rpc/codeservice/internal/config"
+
+type ServiceContext struct {
+	Config config.Config
+}
+
+func NewServiceContext(c config.Config) *ServiceContext {
+	return &ServiceContext{
+		Config: c,
+	}
+}