Explorar el Código

feat:初始化

wangchuanjin hace 3 años
padre
commit
d337a99c0d
Se han modificado 100 ficheros con 14035 adiciones y 0 borrados
  1. 20 0
      api/common/initconfig.go
  2. 24 0
      api/etc/info-api.yaml
  3. 54 0
      api/info.go
  4. 19 0
      api/internal/config/config.go
  5. 28 0
      api/internal/handler/assprojeccthandler.go
  6. 28 0
      api/internal/handler/delmypublishhandler.go
  7. 21 0
      api/internal/handler/getindustryhandler.go
  8. 21 0
      api/internal/handler/getprovincehandler.go
  9. 28 0
      api/internal/handler/infodetailhandler.go
  10. 28 0
      api/internal/handler/infoexaminehandler.go
  11. 28 0
      api/internal/handler/infolisthandler.go
  12. 28 0
      api/internal/handler/mypublishdetailhandler.go
  13. 28 0
      api/internal/handler/mypublishlisthandler.go
  14. 28 0
      api/internal/handler/organfrozenhandler.go
  15. 28 0
      api/internal/handler/pubinfocounthandler.go
  16. 28 0
      api/internal/handler/pubinfohandler.go
  17. 28 0
      api/internal/handler/pubsupplyinfohandler.go
  18. 28 0
      api/internal/handler/reviewstatushandler.go
  19. 102 0
      api/internal/handler/routes.go
  20. 28 0
      api/internal/handler/supplyinfodetailhandler.go
  21. 31 0
      api/internal/handler/supplysearchhandler.go
  22. 28 0
      api/internal/handler/uploadhandler.go
  23. 48 0
      api/internal/logic/assprojecctlogic.go
  24. 49 0
      api/internal/logic/delmypublishlogic.go
  25. 30 0
      api/internal/logic/getindustrylogic.go
  26. 38 0
      api/internal/logic/getprovincelogic.go
  27. 46 0
      api/internal/logic/infodetaillogic.go
  28. 49 0
      api/internal/logic/infoexaminelogic.go
  29. 54 0
      api/internal/logic/infolistlogic.go
  30. 49 0
      api/internal/logic/mypublishdetaillogic.go
  31. 51 0
      api/internal/logic/mypublishlistlogic.go
  32. 46 0
      api/internal/logic/organfrozenlogic.go
  33. 47 0
      api/internal/logic/pubinfocountlogic.go
  34. 106 0
      api/internal/logic/pubinfologic.go
  35. 104 0
      api/internal/logic/pubsupplyinfologic.go
  36. 46 0
      api/internal/logic/reviewstatuslogic.go
  37. 46 0
      api/internal/logic/supplyinfodetaillogic.go
  38. 52 0
      api/internal/logic/supplysearchlogic.go
  39. 52 0
      api/internal/logic/uploadlogic.go
  40. 25 0
      api/internal/svc/servicecontext.go
  41. 120 0
      api/internal/types/types.go
  42. 161 0
      api/jyinfo.api
  43. 49 0
      entity/db.go
  44. 42 0
      entity/jyInfo.sql
  45. 34 0
      entity/supply.sql
  46. 19 0
      go.mod
  47. 969 0
      go.sum
  48. 73 0
      rpc/common/common.go
  49. 81 0
      rpc/common/common.proto
  50. 72 0
      rpc/common/common/common.go
  51. 34 0
      rpc/common/etc/common.yaml
  52. 27 0
      rpc/common/internal/config/config.go
  53. 63 0
      rpc/common/internal/logic/areainfologic.go
  54. 31 0
      rpc/common/internal/logic/industryinfologic.go
  55. 133 0
      rpc/common/internal/logic/sensitivemethodlogic.go
  56. 60 0
      rpc/common/internal/logic/statemethodlogic.go
  57. 47 0
      rpc/common/internal/server/commonserver.go
  58. 18 0
      rpc/common/internal/svc/servicecontext.go
  59. 53 0
      rpc/common/test/es_test.go
  60. 37 0
      rpc/common/test/mysql_test.go
  61. 25 0
      rpc/common/test/oss_test.go
  62. 971 0
      rpc/common/type/common/common.pb.go
  63. 221 0
      rpc/common/type/common/common_grpc.pb.go
  64. 76 0
      rpc/consumer/consumer.go
  65. 315 0
      rpc/consumer/consumer.proto
  66. 135 0
      rpc/consumer/consumer/consumer.go
  67. 6 0
      rpc/consumer/etc/consumer.yaml
  68. 30 0
      rpc/consumer/etc/information.yaml
  69. 20 0
      rpc/consumer/internal/config/config.go
  70. 53 0
      rpc/consumer/internal/logic/infobyuseridlogic.go
  71. 159 0
      rpc/consumer/internal/logic/infochangelogic.go
  72. 55 0
      rpc/consumer/internal/logic/infofileuploadlogic.go
  73. 52 0
      rpc/consumer/internal/logic/inforelatedlogic.go
  74. 120 0
      rpc/consumer/internal/logic/mypublishlistlogic.go
  75. 109 0
      rpc/consumer/internal/logic/publishinfologic.go
  76. 62 0
      rpc/consumer/internal/logic/statusquerylogic.go
  77. 84 0
      rpc/consumer/internal/logic/supplyinfodetaillogic.go
  78. 63 0
      rpc/consumer/internal/logic/supplyinfosearchlogic.go
  79. 77 0
      rpc/consumer/internal/server/consumerserver.go
  80. 77 0
      rpc/consumer/internal/server/informationserver.go
  81. 13 0
      rpc/consumer/internal/svc/servicecontext.go
  82. 3677 0
      rpc/consumer/type/consumer/consumer.pb.go
  83. 411 0
      rpc/consumer/type/consumer/consumer_grpc.pb.go
  84. 66 0
      rpc/manager/common/infoModel.go
  85. 50 0
      rpc/manager/common/initMysql.go
  86. 25 0
      rpc/manager/etc/manager.yaml
  87. 18 0
      rpc/manager/internal/config/config.go
  88. 125 0
      rpc/manager/internal/logic/infodetaillogic.go
  89. 178 0
      rpc/manager/internal/logic/infoexaminelogic.go
  90. 135 0
      rpc/manager/internal/logic/infolistlogic.go
  91. 36 0
      rpc/manager/internal/logic/institutionsfreezelogic.go
  92. 47 0
      rpc/manager/internal/server/managerserver.go
  93. 13 0
      rpc/manager/internal/svc/servicecontext.go
  94. 55 0
      rpc/manager/manager.go
  95. 173 0
      rpc/manager/manager.proto
  96. 80 0
      rpc/manager/manager/manager.go
  97. 2024 0
      rpc/manager/types/manager/manager.pb.go
  98. 221 0
      rpc/manager/types/manager/manager_grpc.pb.go
  99. 92 0
      rpc/model/db.go
  100. 141 0
      rpc/model/es/es.go

+ 20 - 0
api/common/initconfig.go

@@ -0,0 +1,20 @@
+package common
+
+import (
+	"flag"
+	"github.com/zeromicro/go-zero/core/conf"
+	"jyInfo/api/internal/config"
+	"log"
+)
+
+var configFile = flag.String("fff", "etc/info-api.yaml", "the config file")
+var Sysconfig *map[string]interface{}
+
+func init() {
+	var c config.Config
+	conf.MustLoad(*configFile, &c)
+	conf := map[string]interface{}{}
+	conf["AppId"] = c.AppId
+	Sysconfig = &conf
+	log.Println("初始化配置")
+}

+ 24 - 0
api/etc/info-api.yaml

@@ -0,0 +1,24 @@
+Name: Info-api
+Host: 0.0.0.0
+Port: 8001
+Webrpcport: 8011
+Gateway:
+  ServerCode: jyinfo
+  Etcd:
+    - 127.0.0.1:2379
+Common:
+  Etcd:
+    Hosts:
+      - 127.0.0.1:2379
+    Key: common.rpc
+Manager:
+  Etcd:
+    Hosts:
+      - 127.0.0.1:2379
+    Key: manager.rpc
+Consumer:
+  Etcd:
+    Hosts:
+      - 127.0.0.1:2379
+    Key: consumer.rpc
+AppId: 10000

+ 54 - 0
api/info.go

@@ -0,0 +1,54 @@
+package main
+
+import (
+	mc "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/endless"
+	"bp.jydev.jianyu360.cn/BaseService/gateway/core/node"
+	"flag"
+	"fmt"
+	"github.com/zeromicro/go-zero/core/conf"
+	"github.com/zeromicro/go-zero/rest"
+	_ "jyInfo/api/common"
+	"jyInfo/api/internal/config"
+	"jyInfo/api/internal/handler"
+	"jyInfo/api/internal/svc"
+	"log"
+	"os"
+	"os/signal"
+	"syscall"
+)
+
+var configFile = flag.String("f", "etc/info-api.yaml", "the config file")
+
+func main() {
+
+	flag.Parse()
+
+	var c config.Config
+	conf.MustLoad(*configFile, &c)
+
+	closeNotify, err := node.NewNode(c.Gateway.Etcd...).Register(c.Gateway.ServerCode, mc.InterfaceToStr(c.Port))
+	if err != nil {
+		panic(err)
+	}
+	//
+	go func() {
+		err := endless.ListenAndServe(":"+mc.InterfaceToStr(c.Webrpcport), nil, func() {})
+		if err != nil {
+			log.Println("ListenAndServe: ", err)
+		}
+	}()
+	ctx := svc.NewServiceContext(c)
+	server := rest.MustNewServer(c.RestConf)
+	defer server.Stop()
+
+	handler.RegisterHandlers(server, ctx)
+
+	fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)
+	server.Start()
+
+	quit := make(chan os.Signal, 1)
+	signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
+	<-quit
+	closeNotify()
+}

+ 19 - 0
api/internal/config/config.go

@@ -0,0 +1,19 @@
+package config
+
+import (
+	"github.com/zeromicro/go-zero/rest"
+	"github.com/zeromicro/go-zero/zrpc"
+)
+
+type Config struct {
+	rest.RestConf
+	AppId      int64
+	Webrpcport int64
+	Gateway    struct {
+		ServerCode string
+		Etcd       []string
+	}
+	Common   zrpc.RpcClientConf
+	Manager  zrpc.RpcClientConf
+	Consumer zrpc.RpcClientConf
+}

+ 28 - 0
api/internal/handler/assprojeccthandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+)
+
+func assProjecctHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.AssProjecctReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewAssProjecctLogic(r.Context(), svcCtx)
+		resp, err := l.AssProjecct(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 28 - 0
api/internal/handler/delmypublishhandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+)
+
+func delMyPublishHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.MyPublishCommonReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewDelMyPublishLogic(r.Context(), svcCtx)
+		resp, err := l.DelMyPublish(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 21 - 0
api/internal/handler/getindustryhandler.go

@@ -0,0 +1,21 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+)
+
+func getIndustryHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		l := logic.NewGetIndustryLogic(r.Context(), svcCtx)
+		resp, err := l.GetIndustry()
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 21 - 0
api/internal/handler/getprovincehandler.go

@@ -0,0 +1,21 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+)
+
+func getProvinceHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		l := logic.NewGetProvinceLogic(r.Context(), svcCtx)
+		resp, err := l.GetProvince()
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 28 - 0
api/internal/handler/infodetailhandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+)
+
+func infoDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.ReviewCommonReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewInfoDetailLogic(r.Context(), svcCtx)
+		resp, err := l.InfoDetail(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 28 - 0
api/internal/handler/infoexaminehandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+)
+
+func infoExamineHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.InfoExamineReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewInfoExamineLogic(r.Context(), svcCtx)
+		resp, err := l.InfoExamine(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 28 - 0
api/internal/handler/infolisthandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+)
+
+func infoListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.InfoListReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewInfoListLogic(r.Context(), svcCtx)
+		resp, err := l.InfoList(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 28 - 0
api/internal/handler/mypublishdetailhandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+)
+
+func myPublishDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.MyPublishCommonReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewMyPublishDetailLogic(r.Context(), svcCtx)
+		resp, err := l.MyPublishDetail(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 28 - 0
api/internal/handler/mypublishlisthandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+)
+
+func myPublishListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.MyPublishListReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewMyPublishListLogic(r.Context(), svcCtx)
+		resp, err := l.MyPublishList(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 28 - 0
api/internal/handler/organfrozenhandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+)
+
+func organFrozenHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.CommonReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewOrganFrozenLogic(r.Context(), svcCtx)
+		resp, err := l.OrganFrozen(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 28 - 0
api/internal/handler/pubinfocounthandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+)
+
+func pubInfoCountHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.CommonReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewPubInfoCountLogic(r.Context(), svcCtx)
+		resp, err := l.PubInfoCount(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 28 - 0
api/internal/handler/pubinfohandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+)
+
+func pubInfoHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.PubInfoReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewPubInfoLogic(r.Context(), svcCtx, r)
+		resp, err := l.PubInfo(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 28 - 0
api/internal/handler/pubsupplyinfohandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+)
+
+func pubSupplyInfoHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.PubInfoReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewPubSupplyInfoLogic(r.Context(), svcCtx, r)
+		resp, err := l.PubSupplyInfo(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 28 - 0
api/internal/handler/reviewstatushandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+)
+
+func reviewStatusHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.ReviewCommonReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewReviewStatusLogic(r.Context(), svcCtx)
+		resp, err := l.ReviewStatus(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 102 - 0
api/internal/handler/routes.go

@@ -0,0 +1,102 @@
+// Code generated by goctl. DO NOT EDIT.
+package handler
+
+import (
+	"net/http"
+
+	"jyInfo/api/internal/svc"
+
+	"github.com/zeromicro/go-zero/rest"
+)
+
+func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
+	server.AddRoutes(
+		[]rest.Route{
+			{
+				Method:  http.MethodPost,
+				Path:    "/jyinfo/publish/biddingInfo",
+				Handler: pubInfoHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jyinfo/publish/supplyInfo",
+				Handler: pubSupplyInfoHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jyinfo/supplyInfoDetail",
+				Handler: supplyInfoDetailHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jyinfo/supplySearch",
+				Handler: supplySearchHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodGet,
+				Path:    "/jyinfo/publishStatus",
+				Handler: pubInfoCountHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jyinfo/pushedRelated",
+				Handler: assProjecctHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodGet,
+				Path:    "/jyinfo/getArea",
+				Handler: getProvinceHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodGet,
+				Path:    "/jyinfo/getIndustry",
+				Handler: getIndustryHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jyinfo/myPublishList",
+				Handler: myPublishListHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodGet,
+				Path:    "/jyinfo/myPublishDetail",
+				Handler: myPublishDetailHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jyinfo/delMyPublish",
+				Handler: delMyPublishHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodGet,
+				Path:    "/jyinfo/reviewStatus",
+				Handler: reviewStatusHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jyinfo/infoFile/upload",
+				Handler: uploadHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jyinfo/manage/infoList",
+				Handler: infoListHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodGet,
+				Path:    "/jyinfo/manage/infoDetail",
+				Handler: infoDetailHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jyinfo/manage/infoExamine",
+				Handler: infoExamineHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jyinfo/manage/organFrozen",
+				Handler: organFrozenHandler(serverCtx),
+			},
+		},
+	)
+}

+ 28 - 0
api/internal/handler/supplyinfodetailhandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+)
+
+func supplyInfoDetailHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.SupplyInfoDetailReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewSupplyInfoDetailLogic(r.Context(), svcCtx)
+		resp, err := l.SupplyInfoDetail(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 31 - 0
api/internal/handler/supplysearchhandler.go

@@ -0,0 +1,31 @@
+package handler
+
+import (
+	"log"
+	"net/http"
+
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+)
+
+func supplySearchHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.PubSupplyInfoReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewSupplySearchLogic(r.Context(), svcCtx)
+		resp, err := l.SupplySearch(&req)
+		log.Println("resp:", resp)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 28 - 0
api/internal/handler/uploadhandler.go

@@ -0,0 +1,28 @@
+package handler
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+	"jyInfo/api/internal/logic"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+)
+
+func uploadHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.UploadReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewUploadLogic(r.Context(), svcCtx, r)
+		resp, err := l.Upload(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 48 - 0
api/internal/logic/assprojecctlogic.go

@@ -0,0 +1,48 @@
+package logic
+
+import (
+	"context"
+	"jyInfo/rpc/consumer/consumer"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type AssProjecctLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewAssProjecctLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AssProjecctLogic {
+	return &AssProjecctLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *AssProjecctLogic) AssProjecct(req *types.AssProjecctReq) (resp *types.CommonRes, err error) {
+	assProject, err0 := l.svcCtx.Consumer.InfoRelated(l.ctx, &consumer.UserIdReq{
+		UserId:  req.UserId,
+		Match:   req.Match,
+		AppId:   req.AppId,
+		MsqType: common.Int64All(req.MsgType),
+	})
+	if err0 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(assProject.ErrCode),
+		Err_msg:  assProject.ErrMsg,
+		Data:     assProject.Data,
+	}, nil
+}

+ 49 - 0
api/internal/logic/delmypublishlogic.go

@@ -0,0 +1,49 @@
+package logic
+
+import (
+	"context"
+	"jyInfo/rpc/consumer/consumer"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type DelMyPublishLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewDelMyPublishLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DelMyPublishLogic {
+	return &DelMyPublishLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *DelMyPublishLogic) DelMyPublish(req *types.MyPublishCommonReq) (resp *types.CommonRes, err error) {
+	publishDetial, err0 := l.svcCtx.Consumer.InfoChange(l.ctx, &consumer.InfoDetailReq{
+		UserId:  req.UserId,
+		MsgId:   req.MsgId,
+		AppId:   req.AppId,
+		Type:    common.Int64All(req.Type),
+		MsgType: common.Int64All(req.MsgType),
+	})
+	if err0 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(publishDetial.ErrCode),
+		Err_msg:  publishDetial.ErrMsg,
+		Data:     publishDetial.Results,
+	}, nil
+}

+ 30 - 0
api/internal/logic/getindustrylogic.go

@@ -0,0 +1,30 @@
+package logic
+
+import (
+	"context"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type GetIndustryLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewGetIndustryLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetIndustryLogic {
+	return &GetIndustryLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *GetIndustryLogic) GetIndustry() (resp *types.CommonRes, err error) {
+	// todo: add your logic here and delete this line
+
+	return
+}

+ 38 - 0
api/internal/logic/getprovincelogic.go

@@ -0,0 +1,38 @@
+package logic
+
+import (
+	"context"
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+	"jyInfo/rpc/common/common"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type GetProvinceLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewGetProvinceLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetProvinceLogic {
+	return &GetProvinceLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *GetProvinceLogic) GetProvince() (resp *types.CommonRes, err error) {
+	r, err := l.svcCtx.Common.AreaInfo(l.ctx, &common.ProjectReq{
+		AppId: "10000",
+	})
+	if err == nil {
+		return &types.CommonRes{
+			Err_code: int(r.ErrCode),
+			Err_msg:  r.ErrMsg,
+			Data:     r.Data,
+		}, err
+	}
+	return nil, err
+}

+ 46 - 0
api/internal/logic/infodetaillogic.go

@@ -0,0 +1,46 @@
+package logic
+
+import (
+	"context"
+	"jyInfo/rpc/manager/types/manager"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type InfoDetailLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewInfoDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InfoDetailLogic {
+	return &InfoDetailLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *InfoDetailLogic) InfoDetail(req *types.ReviewCommonReq) (resp *types.CommonRes, err error) {
+	infoDetail, err0 := l.svcCtx.Manager.InfoDetail(l.ctx, &manager.InfoDetailReq{
+		MsgId: req.MsgId,
+		Type:  req.Type,
+	})
+	if err0 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(infoDetail.ErrCode),
+		Err_msg:  infoDetail.ErrMsg,
+		Data:     infoDetail.Data,
+	}, nil
+}

+ 49 - 0
api/internal/logic/infoexaminelogic.go

@@ -0,0 +1,49 @@
+package logic
+
+import (
+	"context"
+	"jyInfo/rpc/manager/types/manager"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type InfoExamineLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewInfoExamineLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InfoExamineLogic {
+	return &InfoExamineLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *InfoExamineLogic) InfoExamine(req *types.InfoExamineReq) (resp *types.CommonRes, err error) {
+	infoExam, err0 := l.svcCtx.Manager.InfoExamine(l.ctx, &manager.InfoExamineReq{
+		AppId:        req.AppId,
+		MsgId:        req.MsgId,
+		ReviewStatus: req.ReviewStatus,
+		ReviewDetail: req.ReviewDetail,
+		MsgType:      req.MsgType,
+	})
+	if err0 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(infoExam.ErrCode),
+		Err_msg:  infoExam.ErrMsg,
+		Data:     nil,
+	}, nil
+}

+ 54 - 0
api/internal/logic/infolistlogic.go

@@ -0,0 +1,54 @@
+package logic
+
+import (
+	"context"
+	"jyInfo/rpc/manager/types/manager"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type InfoListLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewInfoListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InfoListLogic {
+	return &InfoListLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *InfoListLogic) InfoList(req *types.InfoListReq) (resp *types.CommonRes, err error) {
+	infolist, err0 := l.svcCtx.Manager.InfoList(l.ctx, &manager.InfoListReq{
+		Phone:          req.Phone,
+		MsgType:        common.Int64All(req.MsgType),
+		PhoneType:      common.Int64All(req.PhoneType),
+		ReviewStatus:   common.Int64All(req.ReviewStatus),
+		ApplyStartTime: req.ApplyStartTime,
+		ApplyEndTime:   req.ApplyEndTime,
+		PageSize:       req.PageSize,
+		PageIndex:      req.PageIndex,
+		IsDel:          common.Int64All(req.IsDel),
+		Published:      common.Int64All(req.Published),
+	})
+	if err0 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(infolist.ErrCode),
+		Err_msg:  infolist.ErrMsg,
+		Data:     infolist.Data,
+	}, nil
+}

+ 49 - 0
api/internal/logic/mypublishdetaillogic.go

@@ -0,0 +1,49 @@
+package logic
+
+import (
+	"context"
+	"jyInfo/rpc/consumer/consumer"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type MyPublishDetailLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewMyPublishDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *MyPublishDetailLogic {
+	return &MyPublishDetailLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *MyPublishDetailLogic) MyPublishDetail(req *types.MyPublishCommonReq) (resp *types.CommonRes, err error) {
+	publishDetial, err0 := l.svcCtx.Consumer.InfoChange(l.ctx, &consumer.InfoDetailReq{
+		UserId:  req.UserId,
+		MsgId:   req.MsgId,
+		Type:    common.Int64All(req.Type),
+		MsgType: common.Int64All(req.MsgType),
+	})
+	if err0 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(publishDetial.ErrCode),
+		Err_msg:  publishDetial.ErrMsg,
+		Data:     publishDetial.Results,
+	}, nil
+
+}

+ 51 - 0
api/internal/logic/mypublishlistlogic.go

@@ -0,0 +1,51 @@
+package logic
+
+import (
+	"context"
+	"jyInfo/rpc/consumer/consumer"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type MyPublishListLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewMyPublishListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *MyPublishListLogic {
+	return &MyPublishListLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *MyPublishListLogic) MyPublishList(req *types.MyPublishListReq) (resp *types.CommonRes, err error) {
+	pubList, err0 := l.svcCtx.Consumer.MyPublishList(l.ctx, &consumer.MyPublishListReq{
+		UserId:       req.UserId,
+		AppId:        common.Int64All(req.AppId),
+		Match:        req.Match,
+		MsgType:      common.Int64All(req.MsgType),
+		ReviewStatus: common.Int64All(req.ReviewStatus),
+		PageSize:     common.Int64All(req.PageSize),
+		PageIndex:    common.Int64All(req.PageIndex),
+	})
+	if err0 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(pubList.ErrCode),
+		Err_msg:  pubList.ErrMsg,
+		Data:     pubList.Results,
+	}, nil
+}

+ 46 - 0
api/internal/logic/organfrozenlogic.go

@@ -0,0 +1,46 @@
+package logic
+
+import (
+	"context"
+	"jyInfo/rpc/manager/types/manager"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type OrganFrozenLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewOrganFrozenLogic(ctx context.Context, svcCtx *svc.ServiceContext) *OrganFrozenLogic {
+	return &OrganFrozenLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *OrganFrozenLogic) OrganFrozen(req *types.CommonReq) (resp *types.CommonRes, err error) {
+	organ, err0 := l.svcCtx.Manager.InstitutionsFreeze(l.ctx, &manager.InstitutionsFreezeReq{
+		AppId: req.AppId,
+		EntId: req.EntId,
+	})
+	if err0 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(organ.ErrCode),
+		Err_msg:  organ.ErrMsg,
+		Data:     nil,
+	}, nil
+}

+ 47 - 0
api/internal/logic/pubinfocountlogic.go

@@ -0,0 +1,47 @@
+package logic
+
+import (
+	"context"
+	"jyInfo/rpc/consumer/consumer"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type PubInfoCountLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewPubInfoCountLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PubInfoCountLogic {
+	return &PubInfoCountLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *PubInfoCountLogic) PubInfoCount(req *types.CommonReq) (resp *types.CommonRes, err error) {
+	pubCount, err0 := l.svcCtx.Consumer.InfoByUserId(l.ctx, &consumer.UserIdReq{
+		UserId: req.UserId,
+		AppId:  req.AppId,
+		Match:  req.Match,
+	})
+	if err0 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(pubCount.ErrCode),
+		Err_msg:  pubCount.ErrMsg,
+		Data:     pubCount.Results,
+	}, nil
+}

+ 106 - 0
api/internal/logic/pubinfologic.go

@@ -0,0 +1,106 @@
+package logic
+
+import (
+	"context"
+	"fmt"
+	"io/ioutil"
+	"jyInfo/rpc/consumer/consumer"
+	"net/http"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type PubInfoLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	r      *http.Request
+}
+
+func NewPubInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext, r *http.Request) *PubInfoLogic {
+	return &PubInfoLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		r:      r,
+	}
+}
+
+func (l *PubInfoLogic) PubInfo(req *types.PubInfoReq) (resp *types.CommonRes, err error) {
+	err2 := l.r.ParseMultipartForm(50 * 1024 * 1024 * 1024)
+	if err2 != nil {
+		fmt.Println(err2)
+	}
+	fhs := l.r.MultipartForm.File["file"]
+	var uploads []*consumer.InfoFileUploadResp
+	var upload *consumer.InfoFileUploadResp
+	attach := map[string]interface{}{}
+	var err0 error
+	if len(fhs) > 0 {
+		for _, fheader := range fhs {
+			file, err1 := fheader.Open()
+			if err1 != nil {
+				fmt.Println(err1)
+				continue
+			}
+			defer file.Close()
+			bt, _ := ioutil.ReadAll(file)
+			upload, err0 = l.svcCtx.Consumer.InfoFileUpload(l.ctx, &consumer.InfoFileUploadReq{
+				FileName: fheader.Filename,
+				File:     bt,
+				FileSize: fheader.Size,
+			})
+			if err0 != nil {
+				continue
+			}
+			uploads = append(uploads, upload)
+		}
+		for n, v := range uploads {
+			attach[common.InterfaceToStr(n+1)] = v.Data
+		}
+	}
+	var contact consumer.Contact
+	//contact.Person = req.Contact.Person
+	//contact.Phone = req.Contact.Phone
+	//contact.Overt = req.Contact.Overt
+	contact.Person = req.ContactPerson
+	contact.Phone = req.ContactPhone
+	contact.Overt = req.ContactOvert
+	pubinfo, err1 := l.svcCtx.Consumer.PublishInfo(l.ctx, &consumer.PublishInfoReq{
+		UserId:    req.UserId,
+		EntId:     req.EntId,
+		Title:     req.Title,
+		MsgType:   req.MsgType,
+		RelatedId: req.RelatedId,
+		Code:      req.Code,
+		Province:  req.Province,
+		City:      req.City,
+		Industry:  req.Industry,
+		Buyer:     req.Buyer,
+		Budget:    common.Float64All(req.Budget),
+		Winner:    req.Winner,
+		Amount:    common.Float64All(req.Amount),
+		Detail:    req.Detail,
+		Attach:    common.MapToJson(attach),
+		Contact:   &contact,
+		AppId:     common.Int64All(req.AppId),
+		Phone:     req.Phone,
+	})
+	if err1 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(pubinfo.ErrCode),
+		Err_msg:  pubinfo.ErrMsg,
+		Data:     pubinfo.PublishId,
+	}, nil
+}

+ 104 - 0
api/internal/logic/pubsupplyinfologic.go

@@ -0,0 +1,104 @@
+package logic
+
+import (
+	"context"
+	"fmt"
+	"io/ioutil"
+	"jyInfo/rpc/consumer/consumer"
+	"net/http"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type PubSupplyInfoLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	r      *http.Request
+}
+
+func NewPubSupplyInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext, r *http.Request) *PubSupplyInfoLogic {
+	return &PubSupplyInfoLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		r:      r,
+	}
+}
+
+func (l *PubSupplyInfoLogic) PubSupplyInfo(req *types.PubInfoReq) (resp *types.CommonRes, err error) {
+	err2 := l.r.ParseMultipartForm(50 * 1024 * 1024 * 1024)
+	if err2 != nil {
+		fmt.Println(err2)
+	}
+	fhs := l.r.MultipartForm.File["file"]
+	var uploads []*consumer.InfoFileUploadResp
+	var upload *consumer.InfoFileUploadResp
+	attach := map[string]interface{}{}
+	var err0 error
+	if len(fhs) > 0 {
+		for _, fheader := range fhs {
+			file, err1 := fheader.Open()
+			if err1 != nil {
+				fmt.Println(err1)
+				continue
+			}
+			defer file.Close()
+			bt, _ := ioutil.ReadAll(file)
+			upload, err0 = l.svcCtx.Consumer.InfoFileUpload(l.ctx, &consumer.InfoFileUploadReq{
+				FileName: fheader.Filename,
+				File:     bt,
+				FileSize: fheader.Size,
+			})
+			if err0 != nil {
+				continue
+			}
+			uploads = append(uploads, upload)
+		}
+		for n, v := range uploads {
+			attach[common.InterfaceToStr(n+1)] = v.Data
+		}
+	}
+	var contact consumer.Contact
+	contact.Person = req.ContactPerson
+	contact.Phone = req.ContactPhone
+	contact.Overt = req.ContactOvert
+	pubinfo, err1 := l.svcCtx.Consumer.PublishInfo(l.ctx, &consumer.PublishInfoReq{
+		UserId:    req.UserId,
+		EntId:     req.EntId,
+		Title:     req.Title,
+		MsgType:   req.MsgType,
+		RelatedId: req.RelatedId,
+		Code:      req.Code,
+		Province:  req.Province,
+		City:      req.City,
+		Industry:  req.Industry,
+		Buyer:     req.Buyer,
+		Budget:    common.Float64All(req.Budget),
+		Winner:    req.Winner,
+		Amount:    common.Float64All(req.Amount),
+		Detail:    req.Detail,
+		Attach:    common.MapToJson(req.Attach),
+		Contact:   &contact,
+		AppId:     common.Int64All(req.AppId),
+		Phone:     req.Phone,
+		Deadline:  req.ValidityTime,
+	})
+	if err1 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(pubinfo.ErrCode),
+		Err_msg:  pubinfo.ErrMsg,
+		Data:     pubinfo.PublishId,
+	}, nil
+}

+ 46 - 0
api/internal/logic/reviewstatuslogic.go

@@ -0,0 +1,46 @@
+package logic
+
+import (
+	"context"
+	"jyInfo/rpc/consumer/consumer"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type ReviewStatusLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewReviewStatusLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ReviewStatusLogic {
+	return &ReviewStatusLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *ReviewStatusLogic) ReviewStatus(req *types.ReviewCommonReq) (resp *types.CommonRes, err error) {
+	status, err0 := l.svcCtx.Consumer.StatusQuery(l.ctx, &consumer.StatusReq{
+		MsgId: req.MsgId,
+		Type:  req.Type,
+	})
+	if err0 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(status.ErrCode),
+		Err_msg:  status.ErrMsg,
+		Data:     status.Data,
+	}, nil
+}

+ 46 - 0
api/internal/logic/supplyinfodetaillogic.go

@@ -0,0 +1,46 @@
+package logic
+
+import (
+	"context"
+	"jyInfo/rpc/consumer/consumer"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type SupplyInfoDetailLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewSupplyInfoDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SupplyInfoDetailLogic {
+	return &SupplyInfoDetailLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *SupplyInfoDetailLogic) SupplyInfoDetail(req *types.SupplyInfoDetailReq) (resp *types.CommonRes, err error) {
+	supply, err0 := l.svcCtx.Consumer.SupplyInfoDetail(l.ctx, &consumer.StatusReq{
+		MsgId: req.MsgId,
+		Type:  req.MsgType,
+	})
+	if err0 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(supply.ErrCode),
+		Err_msg:  supply.ErrMsg,
+		Data:     supply.Data,
+	}, nil
+}

+ 52 - 0
api/internal/logic/supplysearchlogic.go

@@ -0,0 +1,52 @@
+package logic
+
+import (
+	"context"
+	"jyInfo/rpc/consumer/consumer"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type SupplySearchLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewSupplySearchLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SupplySearchLogic {
+	return &SupplySearchLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *SupplySearchLogic) SupplySearch(req *types.PubSupplyInfoReq) (resp *types.CommonRes, err error) {
+	supplySearch, err0 := l.svcCtx.Consumer.SupplyInfoSearch(l.ctx, &consumer.SupplyInfoSearchReq{
+		Keywords:   req.Keywords,
+		SearchType: req.SearchType,
+		Province:   req.Province,
+		City:       req.City,
+		Time:       req.Time,
+		Status:     req.Status,
+		PageSize:   req.PageSize,
+		PageIndex:  req.PageIndex,
+	})
+	if err0 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(supplySearch.ErrCode),
+		Err_msg:  supplySearch.ErrMsg,
+		Data:     supplySearch.Data,
+	}, nil
+}

+ 52 - 0
api/internal/logic/uploadlogic.go

@@ -0,0 +1,52 @@
+package logic
+
+import (
+	"context"
+	"io/ioutil"
+	"jyInfo/rpc/consumer/consumer"
+	"net/http"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/api/internal/svc"
+	"jyInfo/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type UploadLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	r      *http.Request
+}
+
+func NewUploadLogic(ctx context.Context, svcCtx *svc.ServiceContext, r *http.Request) *UploadLogic {
+	return &UploadLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		r:      r,
+	}
+}
+
+func (l *UploadLogic) Upload(req *types.UploadReq) (resp *types.CommonRes, err error) {
+	file, fileheader, _ := l.r.FormFile("file")
+	bt, _ := ioutil.ReadAll(file)
+	upload, err0 := l.svcCtx.Consumer.InfoFileUpload(l.ctx, &consumer.InfoFileUploadReq{
+		FileName: fileheader.Filename,
+		File:     bt,
+		FileSize: fileheader.Size,
+	})
+	if err0 != nil {
+		return &types.CommonRes{
+			Err_code: -1,
+			Err_msg:  "错误",
+		}, nil
+	}
+	return &types.CommonRes{
+		Err_code: common.IntAll(upload.ErrCode),
+		Err_msg:  upload.ErrMsg,
+		Data:     upload.Data,
+	}, nil
+}

+ 25 - 0
api/internal/svc/servicecontext.go

@@ -0,0 +1,25 @@
+package svc
+
+import (
+	"github.com/zeromicro/go-zero/zrpc"
+	"jyInfo/api/internal/config"
+	"jyInfo/rpc/common/common"
+	"jyInfo/rpc/consumer/consumer"
+	"jyInfo/rpc/manager/manager"
+)
+
+type ServiceContext struct {
+	Config   config.Config
+	Common   common.Common
+	Manager  manager.Manager
+	Consumer consumer.Consumer
+}
+
+func NewServiceContext(c config.Config) *ServiceContext {
+	return &ServiceContext{
+		Config:   c,
+		Common:   common.NewCommon(zrpc.MustNewClient(c.Common)),
+		Manager:  manager.NewManager(zrpc.MustNewClient(c.Manager)),
+		Consumer: consumer.NewConsumer(zrpc.MustNewClient(c.Consumer)),
+	}
+}

+ 120 - 0
api/internal/types/types.go

@@ -0,0 +1,120 @@
+// Code generated by goctl. DO NOT EDIT.
+package types
+
+type PubInfoReq struct {
+	Title         string                 `form:"title"`
+	MsgType       string                 `form:"msgType,options=1|2|3"`
+	RelatedId     string                 `form:"relatedId,optional"`
+	Code          string                 `form:"code,optional"`
+	Province      string                 `form:"province,optional"`
+	City          string                 `form:"city,optional"`
+	Industry      []string               `form:"industry,optional"`
+	Buyer         string                 `form:"buyer,optional"`
+	Budget        string                 `form:"budget,optional"`
+	Winner        string                 `form:"winner,optional"`
+	Amount        string                 `form:"amount,optional"`
+	Detail        string                 `form:"detail"`
+	Attach        map[string]interface{} `form:"attach,optional"`
+	ContactPerson string                 `form:"contactPerson"`
+	ContactPhone  string                 `form:"contactPhone"`
+	ContactOvert  int64                  `form:"contactOvert"`
+	AppId         int64                  `form:"appId"`
+	EntId         string                 `form:"entId"`
+	UserId        string                 `form:"userId"`
+	ValidityTime  string                 `form:"validityTime,optional"`
+	Phone         string                 `form:"phone"`
+	EntName       string                 `form:"entName,optional"`
+}
+
+type Contact struct {
+	Person string `json:"person"`
+	Phone  string `json:"phone"`
+	Overt  int64  `json:"overt"`
+}
+
+type MyPublishListReq struct {
+	UserId       string `form:"userId"`
+	AppId        int64  `form:"appId"`
+	Match        string `form:"match,optional"`
+	MsgType      string `form:"msgType,optional"`
+	ReviewStatus string `form:"reviewStatus,optional"`
+	PageSize     int    `form:"pageSize,optional,default=10"`
+	PageIndex    int    `form:"pageIndex,optional,default=1"`
+}
+
+type MyPublishCommonReq struct {
+	MsgId   string `form:"msgId"`
+	UserId  string `form:"userId"`
+	Type    string `form:"type"`
+	MsgType string `form:"msgType,optional"`
+	AppId   int64  `form:"appId"`
+}
+
+type ReviewCommonReq struct {
+	AppId int64  `form:"appId"`
+	MsgId string `form:"msgId"`
+	Type  int64  `form:"type"`
+}
+
+type InfoListReq struct {
+	AppId          int64  `form:"appId"`
+	MsgType        int    `form:"msgType,optional"`
+	PhoneType      int    `form:"phoneType,optional"`
+	Phone          string `form:"phone,optional"`
+	ReviewStatus   int    `form:"reviewStatus,optional"`
+	ApplyStartTime string `form:"applyStartTime,optional"`
+	ApplyEndTime   string `form:"applyEndTime,optional"`
+	PageSize       int64  `form:"pageSize"`
+	PageIndex      int64  `form:"pageIndex"`
+	IsDel          string `form:"isDel,optional"`
+	Published      string `form:"published,optional"`
+}
+
+type InfoExamineReq struct {
+	MsgId        string `form:"msgId"`
+	AppId        int64  `form:"appId"`
+	ReviewStatus int64  `form:"reviewStatus"`
+	ReviewDetail string `form:"reviewDetail,optional"`
+	MsgType      int64  `form:"msgType"`
+}
+
+type AssProjecctReq struct {
+	UserId  string `json:"userId"`
+	AppId   int64  `json:"appId"`
+	Match   string `json:"match"`
+	MsgType string `json:"msgType"`
+}
+
+type PubSupplyInfoReq struct {
+	Keywords   string `form:"keywords"`
+	SearchType string `form:"searchType"`
+	Province   string `form:"province,optional"`
+	City       string `form:"city,optional"`
+	Time       string `form:"time,optional"`
+	Status     string `form:"status,optional"`
+	PageSize   int64  `form:"pageSize,optional"`
+	PageIndex  int64  `form:"pageIndex,optional"`
+}
+
+type SupplyInfoDetailReq struct {
+	MsgId   string `form:"msgId"`
+	MsgType int64  `form:"msgType"`
+}
+
+type UploadReq struct {
+	FileName string `form:"fileName,optional"`
+}
+
+type CommonReq struct {
+	UserId  string `form:"userId,optional"`
+	EntId   string `form:"entId,optional"`
+	AppId   int64  `form:"appId"`
+	Match   string `form:"match,optional"`
+	MsgType string `form:"msgType,optional"`
+}
+
+type CommonRes struct {
+	Err_code int         `json:"err_code"`
+	Err_msg  string      `json:"err_msg"`
+	Data     interface{} `json:"data"`
+}

+ 161 - 0
api/jyinfo.api

@@ -0,0 +1,161 @@
+type (
+	//信息发布
+	pubInfoReq {
+		Title         string                 `form:"title"`
+		MsgType       string                 `form:"msgType,options=1|2|3"`
+		RelatedId     string                 `form:"relatedId,optional"`
+		Code          string                 `form:"code,optional"`
+		Province      string                 `form:"province,optional"`
+		City          string                 `form:"city,optional"`
+		Industry      []string               `form:"industry,optional"`
+		Buyer         string                 `form:"buyer,optional"`
+		Budget        string                 `form:"budget,optional"`
+		Winner        string                 `form:"winner,optional"`
+		Amount        string                 `form:"amount,optional"`
+		Detail        string                 `form:"detail"`
+		Attach        map[string]interface{} `form:"attach,optional"`
+		ContactPerson string                 `form:"contactPerson"`
+		ContactPhone  string                 `form:"contactPhone"`
+		ContactOvert  int64                  `form:"contactOvert"`
+		AppId         int64                  `form:"appId"`
+		EntId         string                 `form:"entId"`
+		UserId        string                 `form:"userId"`
+		ValidityTime  string                 `form:"validityTime,optional"`
+		Phone         string                 `form:"phone"`
+		EntName       string                 `form:"entName,optional"`
+	}
+	Contact {
+		Person string `json:"person"`
+		Phone  string `json:"phone"`
+		Overt  int64  `json:"overt"`
+	}
+	myPublishListReq {
+		UserId       string `form:"userId"`
+		AppId        int64  `form:"appId"`
+		Match        string `form:"match,optional"`
+		MsgType      string `form:"msgType,optional"`
+		ReviewStatus string `form:"reviewStatus,optional"`
+		PageSize     int    `form:"pageSize,optional,default=10"`
+		PageIndex    int    `form:"pageIndex,optional,default=1"`
+	}
+	myPublishCommonReq {
+		MsgId   string `form:"msgId"`
+		UserId  string `form:"userId"`
+		Type    string `form:"type"`
+		MsgType string `form:"msgType,optional"`
+		AppId   int64  `form:"appId"`
+	}
+	reviewCommonReq {
+		AppId int64  `form:"appId"`
+		MsgId string `form:"msgId"`
+		Type  int64  `form:"type"`
+	}
+	infoListReq {
+		AppId          int64  `form:"appId"`
+		MsgType        int    `form:"msgType,optional"`
+		PhoneType      int    `form:"phoneType,optional"`
+		Phone          string `form:"phone,optional"`
+		ReviewStatus   int    `form:"reviewStatus,optional"`
+		ApplyStartTime string `form:"applyStartTime,optional"`
+		ApplyEndTime   string `form:"applyEndTime,optional"`
+		PageSize       int64  `form:"pageSize"`
+		PageIndex      int64  `form:"pageIndex"`
+		IsDel          string `form:"isDel,optional"`
+		Published      string `form:"published,optional"`
+	}
+	infoExamineReq {
+		MsgId        string `form:"msgId"`
+		AppId        int64  `form:"appId"`
+		ReviewStatus int64  `form:"reviewStatus"`
+		ReviewDetail string `form:"reviewDetail,optional"`
+		MsgType      int64  `form:"msgType"`
+	}
+	assProjecctReq {
+		UserId  string `json:"userId"`
+		AppId   int64  `json:"appId"`
+		Match   string `json:"match"`
+		MsgType string `json:"msgType"`
+	}
+	pubSupplyInfoReq {
+		Keywords   string `form:"keywords"`
+		SearchType string `form:"searchType"`
+		Province   string `form:"province,optional"`
+		City       string `form:"city,optional"`
+		Time       string `form:"time,optional"`
+		Status     string `form:"status,optional"`
+		PageSize   int64  `form:"pageSize,optional"`
+		PageIndex  int64  `form:"pageIndex,optional"`
+	}
+	supplyInfoDetailReq {
+		MsgId   string `form:"msgId"`
+		MsgType int64  `form:"msgType"`
+	}
+	uploadReq {
+		FileName string `form:"fileName,optional"`
+	}
+	commonReq {
+		UserId  string `form:"userId,optional"`
+		EntId   string `form:"entId,optional"`
+		AppId   int64  `form:"appId"`
+		Match   string `form:"match,optional"`
+		MsgType string `form:"msgType,optional"`
+	}
+	commonRes {
+		Err_code int         `json:"err_code"`
+		Err_msg  string      `json:"err_msg"`
+		Data     interface{} `json:"data"`
+	}
+)
+service Info-api {
+	//信息发布(招标信息、采购信息)
+	@handler pubInfo
+	post /jyinfo/publish/biddingInfo (pubInfoReq) returns (commonRes)
+	//信息发布(供应信息)
+	@handler pubSupplyInfo
+	post /jyinfo/publish/supplyInfo (pubInfoReq) returns (commonRes)
+	//供应信息详情
+	@handler supplyInfoDetail
+	post /jyinfo/supplyInfoDetail (supplyInfoDetailReq) returns (commonRes)
+	//供应信息搜索
+	@handler supplySearch
+	post /jyinfo/supplySearch (pubSupplyInfoReq) returns (commonRes)
+	//已信息发布数量
+	@handler pubInfoCount
+	get /jyinfo/publishStatus (commonReq) returns (commonRes)
+	//关联项目联想
+	@handler assProjecct
+	post /jyinfo/pushedRelated (assProjecctReq) returns (commonRes)
+	//获取省市列表
+	@handler getProvince
+	get /jyinfo/getArea returns (commonRes)
+	//获取行业列表
+	@handler getIndustry
+	get /jyinfo/getIndustry returns (commonRes)
+	//我的发布列表
+	@handler myPublishList
+	post /jyinfo/myPublishList (myPublishListReq) returns (commonRes)
+	//我发布的信息详情
+	@handler myPublishDetail
+	get /jyinfo/myPublishDetail (myPublishCommonReq) returns (commonRes)
+	//删除我发布的信息
+	@handler delMyPublish
+	post /jyinfo/delMyPublish (myPublishCommonReq) returns (commonRes)
+	//信息审核状态查询
+	@handler reviewStatus
+	get /jyinfo/reviewStatus (reviewCommonReq) returns (commonRes)
+	//附件上传
+	@handler upload
+	post /jyinfo/infoFile/upload (uploadReq) returns (commonRes)
+	//管理后台获取信息列表
+	@handler infoList
+	post /jyinfo/manage/infoList (infoListReq) returns (commonRes)
+	//管理后台信息详情
+	@handler infoDetail
+	get /jyinfo/manage/infoDetail (reviewCommonReq) returns (commonRes)
+	//管理后台审核
+	@handler infoExamine
+	post /jyinfo/manage/infoExamine (infoExamineReq) returns (commonRes)
+	//管理后台审核
+	@handler organFrozen
+	post /jyinfo/manage/organFrozen (commonReq) returns (commonRes)
+}

+ 49 - 0
entity/db.go

@@ -0,0 +1,49 @@
+package entity
+
+//msyql
+type MysqlMainStruct 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"`
+}
+
+//msyql
+type NsqStruct struct {
+	Ip    string `json:"ip"`
+	Topic string `json:"topic"`
+}
+
+//redis
+type RedisStuct struct {
+	Addr    string `json:"addr"`
+	Modules string `json:"modules"`
+}
+
+//es
+type EsStruct struct {
+	Addr string `json:"addr"`
+	Size int    `json:"size"`
+}
+
+//oss
+type OssStruct struct {
+	OssEndpoint        string `json:"ossEndpoint"`
+	OssAccessKeyId     string `json:"ossAccessKeyId"`
+	OssAccessKeySecret string `json:"ossAccessKeySecret"`
+	OssBucketName      string `json:"ossBucketName"`
+}
+
+// Sensitive
+type Sensitive struct {
+	Information bool `json:"information"`
+	SupplyInfo  bool `json:"supplyInfo"`
+}
+
+// Sensitive
+type ResourceCenter struct {
+	Key   string `json:"key"`
+	Hosts string `json:"hosts"`
+}

+ 42 - 0
entity/jyInfo.sql

@@ -0,0 +1,42 @@
+CREATE TABLE `information` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '信息id',
+  `ent_id` int(20) NOT NULL COMMENT '企业id',
+  `app_id` int(11) NOT NULL COMMENT 'appid 剑鱼:10000',
+  `user_id` varchar(25) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '发布人用户ID',
+  `phone` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '手机号',
+  `published` int(1) NOT NULL DEFAULT '1' COMMENT '0:全部;1:未发布;2:已发布',
+  `is_del` int(1) NOT NULL DEFAULT '1' COMMENT '0:全部;1:未删除;-1:删除',
+  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '0:全部;1:待审核;2:待人工审核(敏感词审核不通过||敏感词审核通过);3:自动审核通过;4:人工审核通过;-1:自动审核不通过(机构冻结);-2:人工审核不通过;',
+  `type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '1:招标信息|2:采购信息',
+  `related_id` bigint(20) DEFAULT NULL COMMENT '关联公告id',
+  `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '信息标题',
+  `project_code` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '项目编号',
+  `province` varchar(4) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '项目省份',
+  `city` varchar(4) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '项目城市',
+  `industry` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '项目行业,多个逗号分隔',
+  `buyer` varchar(90) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '采购单位',
+  `budget` int(11) DEFAULT NULL COMMENT '预算单位元',
+  `winner` varchar(90) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '中标单位',
+  `amount` int(11) DEFAULT NULL COMMENT '中标金额',
+  `detail` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '正文信息',
+  `attach` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '附件(对象)',
+  `contact_person` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '联系人',
+  `contact_phone` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '联系电话',
+  `contact_overt` tinyint(4) DEFAULT '1' COMMENT '1:公开|2:隐藏',
+  `create_time` datetime NOT NULL COMMENT '创建时间',
+  `publish_time` datetime DEFAULT NULL COMMENT '发布时间',
+  `review_time` datetime DEFAULT NULL COMMENT '审核时间',
+  `review_desc` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核描述',
+  `sensitive_title` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '敏感词-标题',
+  `sensitive_detail` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '敏感词-详情',
+  `sensitive_attach` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '敏感词-附件',
+  `discern_attach` mediumtext CHARACTER SET utf8 COMMENT '分析后附件信息',
+  `publish_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '关联发布数据库id',
+  PRIMARY KEY (`id`),
+  KEY `userid_index` (`user_id`) USING BTREE,
+  KEY `title_index` (`title`) USING BTREE,
+  KEY `type_index` (`type`) USING BTREE,
+  KEY `status_index` (`status`) USING BTREE,
+  KEY `time_index` (`create_time`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=100079 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+

+ 34 - 0
entity/supply.sql

@@ -0,0 +1,34 @@
+CREATE TABLE `supply_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '信息id',
+  `ent_id` int(20) NOT NULL COMMENT '企业id',
+  `app_id` int(11) NOT NULL COMMENT 'appid 剑鱼:10000',
+  `user_id` varchar(25) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '发布人用户ID',
+  `phone` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '手机号',
+  `published` int(1) NOT NULL DEFAULT '1' COMMENT '0:全部;1:未发布;2:已发布',
+  `is_del` int(1) NOT NULL DEFAULT '1' COMMENT '0:全部;1:未删除;-1:删除',
+  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '0:全部;1:待审核;2:待人工审核(敏感词审核不通过||敏感词审核通过);3:自动审核通过;4:人工审核通过;-1:自动审核不通过(机构冻结);-2:人工审核不通过;',
+  `type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '1:供应信息',
+  `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '信息标题',
+  `detail` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '正文信息',
+  `province` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '省份(不带省)',
+  `city` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '城市',
+  `validity_time` datetime DEFAULT NULL COMMENT '有效期',
+  `attach` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '附件(对象)',
+  `contact_person` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '联系人',
+  `contact_phone` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '联系电话',
+  `contact_overt` tinyint(4) DEFAULT '1' COMMENT '1:公开|2:隐藏',
+  `create_time` datetime NOT NULL COMMENT '创建时间',
+  `publish_time` datetime DEFAULT NULL COMMENT '发布时间',
+  `review_time` datetime DEFAULT NULL COMMENT '审核时间',
+  `review_desc` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核不通过原因',
+  `sensitive_title` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '敏感词-标题',
+  `sensitive_detail` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '敏感词-详情',
+  `sensitive_attach` mediumtext COLLATE utf8mb4_unicode_ci COMMENT '敏感词-附件',
+  PRIMARY KEY (`id`),
+  KEY `userid_index` (`user_id`) USING BTREE,
+  KEY `title_index` (`title`) USING BTREE,
+  KEY `type_index` (`type`) USING BTREE,
+  KEY `status_index` (`status`) USING BTREE,
+  KEY `time_index` (`create_time`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=100004 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+

+ 19 - 0
go.mod

@@ -0,0 +1,19 @@
+module jyInfo
+
+go 1.16
+
+require (
+	app.yhyue.com/moapp/jybase v0.0.0-20220419023055-f406279ff7e3
+	bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220222052708-ebc43af90698
+	bp.jydev.jianyu360.cn/BaseService/gateway v0.0.0-20220419090715-88ddb32961be
+	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.0-20220419063004-233fc7ce006c
+	github.com/aliyun/aliyun-oss-go-sdk v2.2.2+incompatible
+	github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect
+	github.com/go-sql-driver/mysql v1.6.0
+	github.com/golang/protobuf v1.5.2
+	github.com/jinzhu/gorm v1.9.16
+	github.com/satori/go.uuid v1.2.0 // indirect
+	github.com/zeromicro/go-zero v1.3.2
+	google.golang.org/grpc v1.45.0
+	google.golang.org/protobuf v1.28.0
+)

+ 969 - 0
go.sum

@@ -0,0 +1,969 @@
+app.yhyue.com/moapp/esv1 v0.0.0-20220414031211-3da4123e648d h1:WPsYuuptAd3UEgN+jPzpnsDe/OvcshDUUtOTZPYGSJ8=
+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-20220415064050-37ce64b3e2d4/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
+app.yhyue.com/moapp/jybase v0.0.0-20220418104200-46c3fff161c7/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
+app.yhyue.com/moapp/jybase v0.0.0-20220419023055-f406279ff7e3 h1:VTcLmCQLSBr9SUDCsvxXiRENOgTAt9EN9CPwv+Lg8mA=
+app.yhyue.com/moapp/jybase v0.0.0-20220419023055-f406279ff7e3/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
+bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220222052708-ebc43af90698 h1:2xGDnrmbGt4VzAmDSsKH+C9Bq40z9eQ4NJfH/779o8g=
+bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220222052708-ebc43af90698/go.mod h1:ojo/AUH9Yr1wzarEjOaNMkj1Cet/9r8IgLyba64Z52E=
+bp.jydev.jianyu360.cn/BaseService/gateway v0.0.0-20220419090715-88ddb32961be h1:YCPWJEM8JHtV5ush0OEB85mKKsn2hpzKNmFhnbXyMRY=
+bp.jydev.jianyu360.cn/BaseService/gateway v0.0.0-20220419090715-88ddb32961be/go.mod h1:Yj4oabIGItuMoF0BXYLz2XAnF581kxgXBrvlUtIJrkI=
+bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.0-20220418005748-8ba5d936dd53/go.mod h1:E5lcDI3k4FESLxiAetCfWQTq8qfpy9cv0yN1oKoEO34=
+bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.0-20220419063004-233fc7ce006c h1:P0B4xYJOJUVWcuWZKFqKlMcrJ1s0/GhvTBEkrJT+KSY=
+bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.0-20220419063004-233fc7ce006c/go.mod h1:6KL5LMEku83uRbre0W/bj5kXG2I6pJGBFtktmtp51yM=
+bp.jydev.jianyu360.cn/BaseService/userCenter v0.0.0-20220418072311-2062bed1e700/go.mod h1:KjcrxTzM96tBc6G4B8tlLBn1lrVy5UJYF8+eTdP4xAE=
+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.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw=
+github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg=
+github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A=
+github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
+github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
+github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
+github.com/Azure/go-autorest/logger v0.2.0/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/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw=
+github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/ClickHouse/clickhouse-go v1.5.1/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
+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/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
+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/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.17.0 h1:EwLdrIS50uczw71Jc7iVSxZluTKj5nfSP8n7ARRnJy0=
+github.com/alicebob/miniredis/v2 v2.17.0/go.mod h1:gquAfGbzn92jvtrSC69+6zZnwSODVXVpYDRaGhWaL6I=
+github.com/aliyun/aliyun-oss-go-sdk v2.2.2+incompatible h1:9gWa46nstkJ9miBReJcN8Gq34cBFbzSpQZVVT9N09TM=
+github.com/aliyun/aliyun-oss-go-sdk v2.2.2+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
+github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
+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/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f h1:ZNv7On9kyUzm7fvRZumSyy/IUiSC7AzL0I1jKKtwooA=
+github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc=
+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/clbanning/mxj/v2 v2.5.5 h1:oT81vUeEiQQ/DcHbzSytRngP6Ky9O+L+0Bw0zSJag9E=
+github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
+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-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/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6ROGeiHFAP8WJdI2RoxALQYgdllERc3N5N2DM=
+github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+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/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
+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/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
+github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
+github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
+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/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/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
+github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
+github.com/garyburd/redigo v1.6.2 h1:yE/pwKCrbLpLpQICzYTeZ7JsTA/C53wFTJHaEtRqniM=
+github.com/garyburd/redigo v1.6.2/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
+github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+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.2.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.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.2.2 h1:ahHml/yUpnlb96Rp8HCvtYVPY8ZYpxq3g7UYchIYwbs=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI=
+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-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
+github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
+github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
+github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
+github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
+github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
+github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
+github.com/go-redis/redis/v8 v8.11.4 h1:kHoYkfZP6+pe04aFTnhDH6GDROa5yJdHJVNxV3F46Tg=
+github.com/go-redis/redis/v8 v8.11.4/go.mod h1:2Z2wHZXdQpCDXEGzqMockDpNyYvi2l4Pxt6RJr792+w=
+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/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8=
+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/gogf/gf/v2 v2.0.6 h1:2etb4FMpbQKWIJO+UjtIWrZUp01HUsFb6Po8pgizAWk=
+github.com/gogf/gf/v2 v2.0.6/go.mod h1:8uYzw7qNzuq8vrhVlWke1b1925FFqOJIgmyYW1sr/0M=
+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.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU=
+github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
+github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
+github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-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 h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/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/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 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
+github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
+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/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.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I=
+github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
+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.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
+github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
+github.com/grokify/html-strip-tags-go v0.0.1 h1:0fThFwLbW7P/kOiTBs03FsJSV9RM2M/Q/MOnCQxKMo0=
+github.com/grokify/html-strip-tags-go v0.0.1/go.mod h1:2Su6romC5/1VXOQMaWL2yb618ARB8iVo6/DR99A6d78=
+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 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
+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/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/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o=
+github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs=
+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.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
+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 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
+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 h1:+MHSA/vccVCF4Uq37S42jwlkvI2Xzl7zTPCN5BnZNVo=
+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/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 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk=
+github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
+github.com/longbridgeapp/sqlparser v0.3.1 h1:iWOZWGIFgQrJRgobLXUNJdvqGRpbVXkyKUKUA5CNJBE=
+github.com/longbridgeapp/sqlparser v0.3.1/go.mod h1:GIHaUq8zvYyHLCLMJJykx1CdM6LHtkUih/QaJXySSx4=
+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 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
+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.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
+github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U=
+github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
+github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
+github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
+github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
+github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
+github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
+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/mattn/go-sqlite3 v1.14.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/QA=
+github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus=
+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/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/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/nsqio/go-nsq v1.1.0 h1:PQg+xxiUjA7V+TLdXw7nVrJ5Jbl3sN86EhGCQj4+FYE=
+github.com/nsqio/go-nsq v1.1.0/go.mod h1:vKq36oyeVXgsS5Q8YEO7WghqidAVXQlcFxzQbQTuDEY=
+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 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
+github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
+github.com/olivere/elastic v6.2.37+incompatible h1:UfSGJem5czY+x/LqxgeCBgjDn6St+z8OnsCuxwD3L0U=
+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.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
+github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
+github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
+github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
+github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
+github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
+github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
+github.com/onsi/gomega v1.16.0 h1:6gjqkI8iiRHMvdccRJM8rVKjCWk6ZIm6FTm3ddIe4/c=
+github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
+github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
+github.com/openzipkin/zipkin-go v0.3.0/go.mod h1:4c3sLeE8xjNqehmF5RpAFLPLJxXscc0R4l6Zg0P1tTQ=
+github.com/openzipkin/zipkin-go v0.4.0 h1:CtfRrOVZtbDj8rt1WXjklw0kqqJQwICrCKmlfUuBUUw=
+github.com/openzipkin/zipkin-go v0.4.0/go.mod h1:4c3sLeE8xjNqehmF5RpAFLPLJxXscc0R4l6Zg0P1tTQ=
+github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
+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/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/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 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ=
+github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
+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.30.0 h1:JEkYlQnpzrzQFxi6gnukFPdQ+ac82oRhzMcIduJu/Ug=
+github.com/prometheus/common v0.30.0/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 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
+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/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
+github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
+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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
+github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
+github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
+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/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM=
+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/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/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
+github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da h1:NimzV1aGyq29m5ukMK0AMWEhFaL/lrEOaephfuoiARg=
+github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA=
+github.com/zeromicro/go-zero v1.3.2 h1:2HcmceZDEGwZWvofCG+0GXyh+Gtz/wKCW4Fq8Mb7KIg=
+github.com/zeromicro/go-zero v1.3.2/go.mod h1:DEj3Fwj1Ui1ltsgf6YqwTL9nD4+tYzIRX0c1pWtQo1E=
+go.etcd.io/etcd/api/v3 v3.5.2 h1:tXok5yLlKyuQ/SXSjtqHc4uzNaMqZi2XsoSPr/LlJXI=
+go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A=
+go.etcd.io/etcd/client/pkg/v3 v3.5.2 h1:4hzqQ6hIb3blLyQ8usCU4h3NghkqcsohEQ3o3VetYxE=
+go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
+go.etcd.io/etcd/client/v3 v3.5.2 h1:WdnejrUtQC4nCxK0/dLTMqKOB+U5TP/2Ya0BJL+1otA=
+go.etcd.io/etcd/client/v3 v3.5.2/go.mod h1:kOOaWFFgHygyT0WlSmL8TJiXmMysO/nNUlEsSsN6W4o=
+go.mongodb.org/mongo-driver v1.5.0/go.mod h1:boiGPFqyBs5R0R5qf2ErokGRekMfwn+MqKaUyHs7wy0=
+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.0.0/go.mod h1:AjRVh9A5/5DE7S+mZtTR6t8vpKKryam+0lREnfmS4cg=
+go.opentelemetry.io/otel v1.3.0 h1:APxLf0eiBwLl+SOXiJJCVYzA1OOJNyAoV8C5RNRyy7Y=
+go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs=
+go.opentelemetry.io/otel/exporters/jaeger v1.3.0 h1:HfydzioALdtcB26H5WHc4K47iTETJCdloL7VN579/L0=
+go.opentelemetry.io/otel/exporters/jaeger v1.3.0/go.mod h1:KoYHi1BtkUPncGSRtCe/eh1ijsnePhSkxwzz07vU0Fc=
+go.opentelemetry.io/otel/exporters/zipkin v1.3.0 h1:uOD28dZ7yIKITTcUS6MeAGNHYy3uhP7DTkhcJM6onlQ=
+go.opentelemetry.io/otel/exporters/zipkin v1.3.0/go.mod h1:LxGGfHIYbvsFnrJtBcazb0yG24xHdDGrT/H6RB9r3+8=
+go.opentelemetry.io/otel/sdk v1.0.0/go.mod h1:PCrDHlSy5x1kjezSdL37PhbFUMjrsLRshJ2zCzeXwbM=
+go.opentelemetry.io/otel/sdk v1.3.0 h1:3278edCoH89MEJ0Ky8WQXVmDQv3FX4ZJ3Pp+9fJreAI=
+go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs=
+go.opentelemetry.io/otel/trace v1.0.0/go.mod h1:PXTWqayeFUlJV1YDNhsJYB184+IvAH814St6o6ajzIs=
+go.opentelemetry.io/otel/trace v1.3.0 h1:doy8Hzb1RJ+I3yFhtDmwNc7tIyw1tNMOIsyPzp1NOGY=
+go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk=
+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.4.0 h1:CpDZl6aOlLhReez+8S3eEotD7Jx0Os++lemPlMULQP0=
+go.uber.org/automaxprocs v1.4.0/go.mod h1:/mTEdr7LvHhs0v7mjdxDreTz1OG5zdZGqgOnhWiR/+Q=
+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-20190325154230-a5d413f7728c/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-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-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-20210920023735-84f357641f63 h1:kETrAMYZq6WVGPa8IIixL0CaEcIUNi+1WX7grUoi3y8=
+golang.org/x/crypto v0.0.0-20210920023735-84f357641f63/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+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-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+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-20201110031124-69a78807bb2b/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-20210805182204-aaa1db679c0d/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-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc=
+golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/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/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-20190616124812-15dcb6c0061f/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-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-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-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-20201112073958-5cba982894dd/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-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-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/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-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1ii9sTLUeBQwQQfUHtrs=
+golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/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/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.3.8-0.20211105212822-18b340fc7af2 h1:GLw7MR8AfAG2GmGcmVgObFOHXYypgGjnGno25RDwn3Y=
+golang.org/x/text v0.3.8-0.20211105212822-18b340fc7af2/go.mod h1:EFNZuWvGYxIRUEX+K8UmCFwYmZjqcrnq15ZuVldZkZ0=
+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-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 h1:GZokNIeuVkl3aZHJchRrr13WCsols02MLUcz1U9is6M=
+golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/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-20190614205625-5aca471b1d59/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-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-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/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/api v0.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-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
+google.golang.org/genproto v0.0.0-20220228195345-15d65a4533f7 h1:ntPPoHzFW6Xp09ueznmahONZufyoSakK/piXnr2BU3I=
+google.golang.org/genproto v0.0.0-20220228195345-15d65a4533f7/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
+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.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M=
+google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
+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.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 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
+google.golang.org/protobuf v1.28.0/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-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-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/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.20.12 h1:LfRpmRkJLwPP8eaYehsVVmIIfg1yCBIIUHaSsdqCgHA=
+k8s.io/api v0.20.12/go.mod h1:A2brwyEkVLM3wQGNnzoAa5JsQRzHK0uoOQ+bsnv7V68=
+k8s.io/apimachinery v0.20.12 h1:2c0LIVNMvB8k2Ozstmhl2zGeCEcPazznuLYEwxFdNjM=
+k8s.io/apimachinery v0.20.12/go.mod h1:uM7hCI0NyBymUwgshMgZyte475lxhr+QH6h3cvdnzEc=
+k8s.io/client-go v0.20.12 h1:U75SxTC31BHT9i7CbX/hL4v+U1Wkzy/E1vt5ClDPp3I=
+k8s.io/client-go v0.20.12/go.mod h1:NBJj6Evp73Xy/4v/O/RDRaH0+3JoxNfjRxkyRgrdbsA=
+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.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
+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-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
+k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw=
+k8s.io/utils v0.0.0-20201110183641-67b214c5f920/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.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno=
+sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
+sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
+sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
+sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=

+ 73 - 0
rpc/common/common.go

@@ -0,0 +1,73 @@
+package main
+
+import (
+	mc "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/endless"
+	"flag"
+	"fmt"
+	"jyInfo/rpc/util"
+	"log"
+
+	cf "jyInfo/rpc/common/internal/config"
+	"jyInfo/rpc/common/internal/server"
+	"jyInfo/rpc/common/internal/svc"
+	"jyInfo/rpc/common/type/common"
+
+	"jyInfo/rpc/model"
+
+	"github.com/zeromicro/go-zero/core/conf"
+	"github.com/zeromicro/go-zero/zrpc"
+	"google.golang.org/grpc"
+)
+
+var configFile = flag.String("f", "etc/common.yaml", "the config file")
+
+//
+func init() {
+	conf.MustLoad(*configFile, &cf.CommonConfig)
+	//初始化msyql
+	mm := cf.CommonConfig.MysqlMain
+	model.InitMysql(&mm)
+	//初始redis
+	rm := cf.CommonConfig.Redis
+	model.InitRedis(&rm)
+	//初始es
+	es := cf.CommonConfig.Es
+	model.InitEs(&es)
+
+	//初始Sensitive
+	ss := cf.CommonConfig.Sensitive
+	model.InitSensitive(&ss)
+
+	//初始化nsq
+	nsq := cf.CommonConfig.Nsq
+	model.InitNsqConfig(&nsq)
+	//定时任务
+	tk := cf.CommonConfig.Task
+	//日志清除
+	go util.NewTaskInit(tk.IsRun, tk.TaskInfoLog.Flag, tk.TaskInfoLog.Cron, tk.TaskInfoLog.EffectiveTime).Crontab()
+}
+
+//
+func main() {
+	//热重启
+	go func() {
+		err := endless.ListenAndServe(":"+mc.InterfaceToStr(cf.CommonConfig.Webrpcport), nil, func() {})
+		if err != nil {
+			log.Println("ListenAndServe: ", err)
+		}
+	}()
+	flag.Parse()
+	ctx := svc.NewServiceContext(cf.CommonConfig)
+	srv := server.NewCommonServer(ctx)
+
+	s := zrpc.MustNewServer(cf.CommonConfig.RpcServerConf, func(grpcServer *grpc.Server) {
+		common.RegisterCommonServer(grpcServer, srv)
+	})
+	//日志记录
+	s.AddUnaryInterceptors(util.CustomInterceptors)
+	defer s.Stop()
+
+	fmt.Printf("Starting rpc server at %s...\n", cf.CommonConfig.ListenOn)
+	s.Start()
+}

+ 81 - 0
rpc/common/common.proto

@@ -0,0 +1,81 @@
+syntax = "proto3";
+
+package common;
+
+option  go_package = "./common";
+//
+message ProjectReq {
+  string appId = 1;//剑鱼标识 默认10000
+}
+
+//地区信息
+message AreaResp {
+  	int64 err_code = 1;
+	string err_msg = 2;
+	repeated Province data = 3;//城市信息
+}
+//
+message Province{
+	string code = 1;//省份编码
+	string name = 2;//省份名称
+	repeated City citys = 3;//城市信息
+}
+//
+message City{
+	string code = 1;//城市编码
+	string name = 2;//城市名称
+}
+
+//行业信息
+message IndustryResp{
+	int64 err_code = 1;
+	string err_msg = 2;
+	repeated Industry data = 3;
+}
+//
+message Industry{
+	string name = 1;
+	repeated IndustryChildsResp childs = 2;
+}
+//二级行业
+message IndustryChildsResp{
+	string name = 1;
+	string code = 2;
+}
+
+message StateRequest {
+	string Id = 1;//mysql 信息id
+	string publishId = 2;//mongodb bidding信息id
+	//  repeated Request message = 1;
+}
+
+message StateResponse {
+	int64 err_code = 1;
+	string err_msg = 2;
+}
+
+message SensitiveRequest {
+	string Id = 1;//信息id
+	string MsgType = 2;//信息类型:1:招标信息;2:采购信息;3:供应信息
+	repeated string Title = 3;//标题
+	repeated string Detail = 4;//详情
+	string Attachments = 5;//附件
+	string AttachTxt = 6;//附件备注
+}
+
+message SensitiveResponse {
+	int64 err_code = 1;
+	string err_msg = 2;
+}
+
+//
+service Common {
+	//获取省份信息(暂不用)
+  	rpc AreaInfo(ProjectReq) returns(AreaResp);
+	//获取行业信息(暂不用)
+	rpc IndustryInfo(ProjectReq) returns(IndustryResp);
+	//修改信息发布状态
+	rpc StateMethod(StateRequest) returns (StateResponse);
+	//
+	rpc SensitiveMethod(SensitiveRequest) returns (SensitiveResponse);
+}

+ 72 - 0
rpc/common/common/common.go

@@ -0,0 +1,72 @@
+// Code generated by goctl. DO NOT EDIT!
+// Source: common.proto
+
+package common
+
+import (
+	"context"
+
+	"jyInfo/rpc/common/type/common"
+
+	"github.com/zeromicro/go-zero/zrpc"
+	"google.golang.org/grpc"
+)
+
+type (
+	AreaResp           = common.AreaResp
+	City               = common.City
+	Industry           = common.Industry
+	IndustryChildsResp = common.IndustryChildsResp
+	IndustryResp       = common.IndustryResp
+	ProjectReq         = common.ProjectReq
+	Province           = common.Province
+	SensitiveRequest   = common.SensitiveRequest
+	SensitiveResponse  = common.SensitiveResponse
+	StateRequest       = common.StateRequest
+	StateResponse      = common.StateResponse
+
+	Common interface {
+		// 获取省份信息(暂不用)
+		AreaInfo(ctx context.Context, in *ProjectReq, opts ...grpc.CallOption) (*AreaResp, error)
+		// 获取行业信息(暂不用)
+		IndustryInfo(ctx context.Context, in *ProjectReq, opts ...grpc.CallOption) (*IndustryResp, error)
+		// 修改信息发布状态
+		StateMethod(ctx context.Context, in *StateRequest, opts ...grpc.CallOption) (*StateResponse, error)
+		//
+		SensitiveMethod(ctx context.Context, in *SensitiveRequest, opts ...grpc.CallOption) (*SensitiveResponse, error)
+	}
+
+	defaultCommon struct {
+		cli zrpc.Client
+	}
+)
+
+func NewCommon(cli zrpc.Client) Common {
+	return &defaultCommon{
+		cli: cli,
+	}
+}
+
+// 获取省份信息(暂不用)
+func (m *defaultCommon) AreaInfo(ctx context.Context, in *ProjectReq, opts ...grpc.CallOption) (*AreaResp, error) {
+	client := common.NewCommonClient(m.cli.Conn())
+	return client.AreaInfo(ctx, in, opts...)
+}
+
+// 获取行业信息(暂不用)
+func (m *defaultCommon) IndustryInfo(ctx context.Context, in *ProjectReq, opts ...grpc.CallOption) (*IndustryResp, error) {
+	client := common.NewCommonClient(m.cli.Conn())
+	return client.IndustryInfo(ctx, in, opts...)
+}
+
+// 修改信息发布状态
+func (m *defaultCommon) StateMethod(ctx context.Context, in *StateRequest, opts ...grpc.CallOption) (*StateResponse, error) {
+	client := common.NewCommonClient(m.cli.Conn())
+	return client.StateMethod(ctx, in, opts...)
+}
+
+//
+func (m *defaultCommon) SensitiveMethod(ctx context.Context, in *SensitiveRequest, opts ...grpc.CallOption) (*SensitiveResponse, error) {
+	client := common.NewCommonClient(m.cli.Conn())
+	return client.SensitiveMethod(ctx, in, opts...)
+}

+ 34 - 0
rpc/common/etc/common.yaml

@@ -0,0 +1,34 @@
+Name: common.rpc
+ListenOn: 0.0.0.0:8002
+Etcd:
+  Hosts:
+    - 127.0.0.1:2379
+  Key: common.rpc
+Webrpcport: 8012
+MysqlMain:
+  dbName: base_service
+  address: 192.168.3.11:3366
+  userName: root
+  passWord: Topnet123
+  maxOpenConns: 5
+  maxIdleConns: 5
+Redis:
+  Host: 192.168.3.206
+  addr: 192.168.3.206:1712
+  modules: other
+Task:
+  IsRun: true
+  TaskInfoLog:
+    Flag: true
+    Cron: 12:10
+    EffectiveTime: 15d
+Es:
+  addr: http://192.168.3.206:9800
+  size: 5
+
+Sensitive:
+  information: true
+  supplyInfo: false
+Nsq:
+  ip: 192.168.3.207:4150
+  topic: jyinfo

+ 27 - 0
rpc/common/internal/config/config.go

@@ -0,0 +1,27 @@
+package config
+
+import (
+	"jyInfo/entity"
+
+	"github.com/zeromicro/go-zero/zrpc"
+)
+
+type Config struct {
+	zrpc.RpcServerConf
+	Webrpcport int64
+	MysqlMain  entity.MysqlMainStruct
+	Redis      entity.RedisStuct
+	Task       struct {
+		IsRun       bool //是否开启定时任务
+		TaskInfoLog struct {
+			Flag          bool   //首次开始是否执行
+			Cron          string //定时任务执行时间
+			EffectiveTime string //清除xx天之前的日志数据
+		}
+	}
+	Es        entity.EsStruct
+	Sensitive entity.Sensitive
+	Nsq       entity.NsqStruct
+}
+
+var CommonConfig Config

+ 63 - 0
rpc/common/internal/logic/areainfologic.go

@@ -0,0 +1,63 @@
+package logic
+
+import (
+	"context"
+	"fmt"
+	"jyInfo/rpc/model/province"
+	"log"
+	"strings"
+
+	"jyInfo/rpc/common/common"
+	"jyInfo/rpc/common/internal/svc"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type AreaInfoLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewAreaInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AreaInfoLogic {
+	return &AreaInfoLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 获取省份信息
+func (l *AreaInfoLogic) AreaInfo(in *common.ProjectReq) (*common.AreaResp, error) {
+	//获取地区信息
+	data, err := l.svcCtx.AreaModel.Find()
+	log.Println("data:", data, "--err:", err)
+	return &common.AreaResp{
+		Data: AreaFormat(data),
+	}, nil
+}
+
+//省份信息结构化
+func AreaFormat(data []model.AreaResp) (ps []*common.Province) {
+	var provinces = map[string][]*common.City{}
+	for _, v := range data {
+		pk := fmt.Sprintf("%s-%s", v.Province, fmt.Sprint(v.Pid))
+		provinces[pk] = append(provinces[pk], &common.City{
+			Name: v.City,
+			Code: fmt.Sprint(v.Cid),
+		})
+	}
+	if provinces != nil {
+		for pk, pv := range provinces {
+			if strings.Contains(pk, "-") {
+				pkarr := strings.Split(pk, "-")
+				ps = append(ps, &common.Province{
+					Name:  pkarr[0],
+					Code:  pkarr[1],
+					Citys: pv,
+				})
+			}
+		}
+	}
+	return
+}

+ 31 - 0
rpc/common/internal/logic/industryinfologic.go

@@ -0,0 +1,31 @@
+package logic
+
+import (
+	"context"
+
+	"jyInfo/rpc/common/common"
+	"jyInfo/rpc/common/internal/svc"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type IndustryInfoLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewIndustryInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *IndustryInfoLogic {
+	return &IndustryInfoLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 获取行业信息
+func (l *IndustryInfoLogic) IndustryInfo(in *common.ProjectReq) (*common.IndustryResp, error) {
+	// todo: add your logic here and delete this line
+
+	return &common.IndustryResp{}, nil
+}

+ 133 - 0
rpc/common/internal/logic/sensitivemethodlogic.go

@@ -0,0 +1,133 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/jybase/redis"
+	"context"
+	"fmt"
+	md "jyInfo/rpc/model"
+	model "jyInfo/rpc/model/es"
+	"jyInfo/rpc/util"
+	"strings"
+	"time"
+
+	cm "app.yhyue.com/moapp/jybase/common"
+	"jyInfo/rpc/common/internal/svc"
+	"jyInfo/rpc/common/type/common"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type SensitiveMethodLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewSensitiveMethodLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SensitiveMethodLogic {
+	return &SensitiveMethodLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+func (l *SensitiveMethodLogic) SensitiveMethod(in *common.SensitiveRequest) (*common.SensitiveResponse, error) {
+	var (
+		resp common.SensitiveResponse
+		//isSensitive 是否有敏感词  isPublishInfo招标信息是否需要自动发布 isPublishSup 供应信息是否需要自动发布
+		isSensitive, isPublishInfo, isPublishSup bool
+	)
+	upData := make(map[string]interface{})
+	query := make(map[string]interface{})
+	if in.Title != nil || in.Detail != nil || in.Attachments != "" || in.AttachTxt != "" {
+		isSensitive = true
+	}
+	if !isSensitive && !md.Sensitive.Information {
+		isPublishInfo = true
+	}
+
+	if !isSensitive && !md.Sensitive.SupplyInfo {
+		isPublishSup = true
+	}
+
+	if in.Title != nil {
+		upData["sensitive_title"] = strings.Join(in.Title, ",")
+	}
+	if in.Detail != nil {
+		upData["sensitive_detail"] = strings.Join(in.Detail, ",")
+	}
+	if in.Attachments != "" {
+		upData["sensitive_attach"] = in.Attachments
+	}
+	if in.AttachTxt != "" {
+		upData["discern_attach"] = in.AttachTxt
+	}
+	query["id"] = in.Id
+	upData["status"] = 2
+	switch in.MsgType {
+	case "1", "2": //招标信息
+		data := md.Mysql.FindOne("information", query, "", "")
+		if data != nil && len(*data) > 0 {
+			isDel := cm.IntAll((*data)["is_del"]) == 1
+			//感觉没有必要
+			if !isDel {
+				delete(upData, "status")
+			} else if isPublishInfo {
+				upData["status"] = 3
+				upData["review_time"] = time.Now().Format("2006-01-02 15:04:05")
+				upData["review_desc"] = "自动审批通过"
+				//调用发布功能
+				nsq, err := util.NewNsqInfo(md.NsqConfig.Ip, md.NsqConfig.Topic, in.Id, "2", in.MsgType, false, *data)
+				if err != nil || nsq.NsqPushInfo() != nil {
+					resp.ErrCode = 1
+					resp.ErrMsg = "发布nsq失败"
+					break
+				}
+			}
+
+			if !md.Mysql.Update("information", query, upData) {
+				resp.ErrCode = 1
+				resp.ErrMsg = "调用nsq发布信息成功,更新信息失败"
+			}
+		}
+	case "3": //供应信息
+		data := md.Mysql.FindOne("supply_info", query, "", "")
+		if data != nil && len(*data) > 0 {
+			isDel := cm.IntAll((*data)["is_del"]) == 1
+			//感觉没有必要
+			if !isDel {
+				delete(upData, "status")
+			} else if isPublishSup {
+				upData["status"] = 3
+				upData["published"] = 2
+				upData["review_time"] = time.Now().Format("2006-01-02 15:04:05")
+				upData["publish_time"] = time.Now().Format("2006-01-02 15:04:05")
+				upData["review_desc"] = "自动审批通过"
+				//调用发布功能
+				entNameKye := fmt.Sprintf("userEntName_%s_%s_%s", (*data)["user_id"], in.Id, in.MsgType)
+				entName := redis.GetStr("other", entNameKye)
+				supInfo := make(map[string]interface{})
+				supInfo["id"] = (*data)["id"]
+				supInfo["title"] = (*data)["title"]
+				supInfo["detail"] = (*data)["detail"]
+				supInfo["province"] = (*data)["province"]
+				supInfo["city"] = (*data)["city"]
+				if !model.SaveSupplyInfo(entName, supInfo) {
+					resp.ErrCode = 1
+					resp.ErrMsg = "调用SaveSupplyInfo失败,供应信息发布失败"
+					break
+				}
+			}
+
+			if !md.Mysql.Update("supply_info", query, upData) {
+				resp.ErrCode = 1
+				resp.ErrMsg = "调用信息发布成功,更新信息失败"
+			}
+		}
+	default:
+		resp.ErrCode = 1
+		resp.ErrMsg = "信息类型错误"
+	}
+
+	return &resp, nil
+}

+ 60 - 0
rpc/common/internal/logic/statemethodlogic.go

@@ -0,0 +1,60 @@
+package logic
+
+import (
+	"context"
+	"jyInfo/rpc/model"
+	"jyInfo/rpc/util"
+	"time"
+
+	"jyInfo/rpc/common/internal/svc"
+	"jyInfo/rpc/common/type/common"
+
+	mc "app.yhyue.com/moapp/jybase/common"
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type StateMethodLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewStateMethodLogic(ctx context.Context, svcCtx *svc.ServiceContext) *StateMethodLogic {
+	return &StateMethodLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+func (l *StateMethodLogic) StateMethod(in *common.StateRequest) (*common.StateResponse, error) {
+	var (
+		resp common.StateResponse
+	)
+	query := make(map[string]interface{})
+	query["id"] = in.Id
+	upData := make(map[string]interface{})
+	upData["published"] = 2
+	upData["publish_id"] = in.PublishId
+	upData["publish_time"] = time.Now().Format("2006-01-02 15:04:05")
+	data := model.Mysql.FindOne("information", query, "", "")
+	if data == nil || len(*data) < 1 {
+		resp.ErrCode = 1
+		resp.ErrMsg = "nsq回调发布状态,获取信息失败"
+		return &resp, nil
+	}
+	//处理对于发布删除冲突问题,在回调发布后查看是否已删除,如已删除在回调删除nsq 未删除继续正常发布流程
+	if mc.IntAll((*data)["is_de"]) == -1 {
+		nsq, err := util.NewNsqInfo(model.NsqConfig.Ip, model.NsqConfig.Topic, mc.InterfaceToStr((*data)["id"]), "3", mc.InterfaceToStr((*data)["type"]), false, upData)
+		if err != nil || nsq.NsqPushInfo() != nil {
+			resp.ErrCode = 1
+			resp.ErrMsg = "信息已删除,同步删除信息失败"
+		}
+		return &resp, nil
+	}
+	if !model.Mysql.Update("information", query, upData) {
+		resp.ErrCode = 1
+		resp.ErrMsg = "nsq回调发布状态,更新信息状态失败"
+	}
+	return &resp, nil
+}

+ 47 - 0
rpc/common/internal/server/commonserver.go

@@ -0,0 +1,47 @@
+// Code generated by goctl. DO NOT EDIT!
+// Source: common.proto
+
+package server
+
+import (
+	"context"
+
+	"jyInfo/rpc/common/internal/logic"
+	"jyInfo/rpc/common/internal/svc"
+	"jyInfo/rpc/common/type/common"
+)
+
+type CommonServer struct {
+	svcCtx *svc.ServiceContext
+	common.UnimplementedCommonServer
+}
+
+func NewCommonServer(svcCtx *svc.ServiceContext) *CommonServer {
+	return &CommonServer{
+		svcCtx: svcCtx,
+	}
+}
+
+// 获取省份信息(暂不用)
+func (s *CommonServer) AreaInfo(ctx context.Context, in *common.ProjectReq) (*common.AreaResp, error) {
+	l := logic.NewAreaInfoLogic(ctx, s.svcCtx)
+	return l.AreaInfo(in)
+}
+
+// 获取行业信息(暂不用)
+func (s *CommonServer) IndustryInfo(ctx context.Context, in *common.ProjectReq) (*common.IndustryResp, error) {
+	l := logic.NewIndustryInfoLogic(ctx, s.svcCtx)
+	return l.IndustryInfo(in)
+}
+
+// 修改信息发布状态
+func (s *CommonServer) StateMethod(ctx context.Context, in *common.StateRequest) (*common.StateResponse, error) {
+	l := logic.NewStateMethodLogic(ctx, s.svcCtx)
+	return l.StateMethod(in)
+}
+
+//
+func (s *CommonServer) SensitiveMethod(ctx context.Context, in *common.SensitiveRequest) (*common.SensitiveResponse, error) {
+	l := logic.NewSensitiveMethodLogic(ctx, s.svcCtx)
+	return l.SensitiveMethod(in)
+}

+ 18 - 0
rpc/common/internal/svc/servicecontext.go

@@ -0,0 +1,18 @@
+package svc
+
+import (
+	"jyInfo/rpc/common/internal/config"
+	"jyInfo/rpc/model/province"
+)
+
+type ServiceContext struct {
+	Config    config.Config
+	AreaModel model.AreaModel
+}
+
+func NewServiceContext(c config.Config) *ServiceContext {
+	return &ServiceContext{
+		Config:    c,
+		AreaModel: model.NewAreaModel(),
+	}
+}

+ 53 - 0
rpc/common/test/es_test.go

@@ -0,0 +1,53 @@
+package test
+
+import (
+	"flag"
+	cf "jyInfo/rpc/common/internal/config"
+	"jyInfo/rpc/model"
+	"log"
+	"testing"
+	"time"
+
+	"app.yhyue.com/moapp/jybase/esv1"
+	"github.com/zeromicro/go-zero/core/conf"
+)
+
+var configFile = flag.String("f", "../etc/common.yaml", "the config file")
+
+//es保存
+func Test_esSave(t *testing.T) {
+	conf.MustLoad(*configFile, &cf.CommonConfig)
+	//初始es
+	es := cf.CommonConfig.Es
+	model.InitEs(&es)
+	log.Println(es.Addr, "----", es.Size)
+	elastic.InitElasticSize("http://192.168.3.206:9800", es.Size)
+	now := time.Now().Unix()
+	b := elastic.Save("supplyinfo_v1", "supplyinfo", &map[string]interface{}{
+		"_id":           "100006",
+		"id":            "100006",
+		"msg_type":      "1",
+		"title":         "一个信息消息字段可以含有一个如下类型,以及与之对应在自动生成访问类中定义类型",
+		"detail":        "这个理解起来有些晦涩,举例来说上面例子中三个字段都是singular类型的字段,在编码后的消息体中可以有0或者1个query字段,但不会有多个",
+		"ent_name":      "破产公司",
+		"province":      "河南",
+		"city":          "郑州市",
+		"validity_time": now,
+		"create_time":   now,
+		"publish_time":  now,
+	})
+
+	log.Println("---------:", b)
+}
+
+//es删除
+func Test_esDel(t *testing.T) {
+	elastic.InitElasticSize("http://192.168.3.206:9800", 1)
+	elastic.DelById("supplyinfo_v1", "supplyinfo", "100002")
+}
+
+//es更新
+func Test_esUpdate(t *testing.T) {
+	elastic.InitElasticSize("http://192.168.3.206:9800", 1)
+	elastic.Update("supplyinfo_v1", "supplyinfo", "100003", `ctx._source.ent_id="10001"`)
+}

+ 37 - 0
rpc/common/test/mysql_test.go

@@ -0,0 +1,37 @@
+package test
+
+import (
+	"log"
+	"strings"
+	"testing"
+
+	"app.yhyue.com/moapp/jybase/mysql"
+)
+
+//mysql保存
+func Test_mysqlSave(t *testing.T) {
+	Mysql := &mysql.Mysql{
+		Address:      "192.168.3.11:3366",
+		UserName:     "root",
+		PassWord:     "Topnet123",
+		DBName:       "base_service",
+		MaxOpenConns: 5,
+		MaxIdleConns: 5,
+	}
+	Mysql.Init()
+	title := []string{
+		"信息",
+		"网络",
+		"课程",
+	}
+	var sensitive_title = strings.Join(title, ",")
+	log.Println(sensitive_title)
+	query := map[string]interface{}{
+		"id": 100013,
+	}
+	insertObj := map[string]interface{}{
+		"sensitive_title": sensitive_title,
+	}
+	ok := Mysql.Update("information", query, insertObj)
+	log.Println("ok:", ok)
+}

+ 25 - 0
rpc/common/test/oss_test.go

@@ -0,0 +1,25 @@
+package test
+
+// import (
+// 	"bytes"
+// 	"io/ioutil"
+// 	"jyInfo/rpc/model/oss"
+// 	"log"
+// 	"testing"
+// )
+
+// //es保存
+// var filename = "jyInfo.docx"
+// var filecont = "信息发布,不同意公开联系方式,则采购联系人、采购联系电话不展示。"
+// var filepath = "E:/oss/我的测试文档.docx"
+
+// func Test_ossUp(t *testing.T) {
+// 	model.InitOss()
+// 	bt, _ := ioutil.ReadFile(filepath)
+// 	log.Println("size:", len(bt), len(bt)/1024)
+// 	// bt := []byte(filecont)
+// 	key := model.GetHashKey(bt) + model.TypeByExt(filename)
+// 	log.Println("keys:", key)
+// 	b, err := model.OssPutObject(key, bytes.NewReader(bt))
+// 	log.Println("b:", b, "---err:", err)
+// }

+ 971 - 0
rpc/common/type/common/common.pb.go

@@ -0,0 +1,971 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.23.0
+// 	protoc        v3.15.5
+// source: common.proto
+
+package common
+
+import (
+	proto "github.com/golang/protobuf/proto"
+	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)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+//
+type ProjectReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AppId string `protobuf:"bytes,1,opt,name=appId,proto3" json:"appId,omitempty"` //剑鱼标识 默认10000
+}
+
+func (x *ProjectReq) Reset() {
+	*x = ProjectReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ProjectReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ProjectReq) ProtoMessage() {}
+
+func (x *ProjectReq) ProtoReflect() protoreflect.Message {
+	mi := &file_common_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 ProjectReq.ProtoReflect.Descriptor instead.
+func (*ProjectReq) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *ProjectReq) GetAppId() string {
+	if x != nil {
+		return x.AppId
+	}
+	return ""
+}
+
+//地区信息
+type AreaResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64       `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string      `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	Data    []*Province `protobuf:"bytes,3,rep,name=data,proto3" json:"data,omitempty"` //城市信息
+}
+
+func (x *AreaResp) Reset() {
+	*x = AreaResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AreaResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AreaResp) ProtoMessage() {}
+
+func (x *AreaResp) ProtoReflect() protoreflect.Message {
+	mi := &file_common_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 AreaResp.ProtoReflect.Descriptor instead.
+func (*AreaResp) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *AreaResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *AreaResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *AreaResp) GetData() []*Province {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+//
+type Province struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Code  string  `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"`   //省份编码
+	Name  string  `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`   //省份名称
+	Citys []*City `protobuf:"bytes,3,rep,name=citys,proto3" json:"citys,omitempty"` //城市信息
+}
+
+func (x *Province) Reset() {
+	*x = Province{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Province) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Province) ProtoMessage() {}
+
+func (x *Province) ProtoReflect() protoreflect.Message {
+	mi := &file_common_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 Province.ProtoReflect.Descriptor instead.
+func (*Province) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *Province) GetCode() string {
+	if x != nil {
+		return x.Code
+	}
+	return ""
+}
+
+func (x *Province) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *Province) GetCitys() []*City {
+	if x != nil {
+		return x.Citys
+	}
+	return nil
+}
+
+//
+type City struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` //城市编码
+	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` //城市名称
+}
+
+func (x *City) Reset() {
+	*x = City{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *City) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*City) ProtoMessage() {}
+
+func (x *City) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[3]
+	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 City.ProtoReflect.Descriptor instead.
+func (*City) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *City) GetCode() string {
+	if x != nil {
+		return x.Code
+	}
+	return ""
+}
+
+func (x *City) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+//行业信息
+type IndustryResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64       `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string      `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	Data    []*Industry `protobuf:"bytes,3,rep,name=data,proto3" json:"data,omitempty"`
+}
+
+func (x *IndustryResp) Reset() {
+	*x = IndustryResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *IndustryResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndustryResp) ProtoMessage() {}
+
+func (x *IndustryResp) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[4]
+	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 IndustryResp.ProtoReflect.Descriptor instead.
+func (*IndustryResp) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *IndustryResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *IndustryResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *IndustryResp) GetData() []*Industry {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+//
+type Industry struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name   string                `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Childs []*IndustryChildsResp `protobuf:"bytes,2,rep,name=childs,proto3" json:"childs,omitempty"`
+}
+
+func (x *Industry) Reset() {
+	*x = Industry{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Industry) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Industry) ProtoMessage() {}
+
+func (x *Industry) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[5]
+	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 Industry.ProtoReflect.Descriptor instead.
+func (*Industry) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *Industry) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *Industry) GetChilds() []*IndustryChildsResp {
+	if x != nil {
+		return x.Childs
+	}
+	return nil
+}
+
+//二级行业
+type IndustryChildsResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"`
+}
+
+func (x *IndustryChildsResp) Reset() {
+	*x = IndustryChildsResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *IndustryChildsResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndustryChildsResp) ProtoMessage() {}
+
+func (x *IndustryChildsResp) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[6]
+	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 IndustryChildsResp.ProtoReflect.Descriptor instead.
+func (*IndustryChildsResp) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *IndustryChildsResp) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *IndustryChildsResp) GetCode() string {
+	if x != nil {
+		return x.Code
+	}
+	return ""
+}
+
+type StateRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id        string `protobuf:"bytes,1,opt,name=Id,proto3" json:"Id,omitempty"`               //mysql 信息id
+	PublishId string `protobuf:"bytes,2,opt,name=publishId,proto3" json:"publishId,omitempty"` //mongodb bidding信息id
+}
+
+func (x *StateRequest) Reset() {
+	*x = StateRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *StateRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StateRequest) ProtoMessage() {}
+
+func (x *StateRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[7]
+	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 StateRequest.ProtoReflect.Descriptor instead.
+func (*StateRequest) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *StateRequest) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *StateRequest) GetPublishId() string {
+	if x != nil {
+		return x.PublishId
+	}
+	return ""
+}
+
+type StateResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64  `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+}
+
+func (x *StateResponse) Reset() {
+	*x = StateResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *StateResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StateResponse) ProtoMessage() {}
+
+func (x *StateResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[8]
+	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 StateResponse.ProtoReflect.Descriptor instead.
+func (*StateResponse) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *StateResponse) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *StateResponse) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+type SensitiveRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id          string   `protobuf:"bytes,1,opt,name=Id,proto3" json:"Id,omitempty"`                   //信息id
+	MsgType     string   `protobuf:"bytes,2,opt,name=MsgType,proto3" json:"MsgType,omitempty"`         //信息类型:1:招标信息;2:采购信息;3:供应信息
+	Title       []string `protobuf:"bytes,3,rep,name=Title,proto3" json:"Title,omitempty"`             //标题
+	Detail      []string `protobuf:"bytes,4,rep,name=Detail,proto3" json:"Detail,omitempty"`           //详情
+	Attachments string   `protobuf:"bytes,5,opt,name=Attachments,proto3" json:"Attachments,omitempty"` //附件
+	AttachTxt   string   `protobuf:"bytes,6,opt,name=AttachTxt,proto3" json:"AttachTxt,omitempty"`     //附件备注
+}
+
+func (x *SensitiveRequest) Reset() {
+	*x = SensitiveRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SensitiveRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SensitiveRequest) ProtoMessage() {}
+
+func (x *SensitiveRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[9]
+	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 SensitiveRequest.ProtoReflect.Descriptor instead.
+func (*SensitiveRequest) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *SensitiveRequest) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *SensitiveRequest) GetMsgType() string {
+	if x != nil {
+		return x.MsgType
+	}
+	return ""
+}
+
+func (x *SensitiveRequest) GetTitle() []string {
+	if x != nil {
+		return x.Title
+	}
+	return nil
+}
+
+func (x *SensitiveRequest) GetDetail() []string {
+	if x != nil {
+		return x.Detail
+	}
+	return nil
+}
+
+func (x *SensitiveRequest) GetAttachments() string {
+	if x != nil {
+		return x.Attachments
+	}
+	return ""
+}
+
+func (x *SensitiveRequest) GetAttachTxt() string {
+	if x != nil {
+		return x.AttachTxt
+	}
+	return ""
+}
+
+type SensitiveResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64  `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+}
+
+func (x *SensitiveResponse) Reset() {
+	*x = SensitiveResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SensitiveResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SensitiveResponse) ProtoMessage() {}
+
+func (x *SensitiveResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[10]
+	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 SensitiveResponse.ProtoReflect.Descriptor instead.
+func (*SensitiveResponse) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *SensitiveResponse) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *SensitiveResponse) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+var File_common_proto protoreflect.FileDescriptor
+
+var file_common_proto_rawDesc = []byte{
+	0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06,
+	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x22, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63,
+	0x74, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x64, 0x0a, 0x08, 0x41, 0x72,
+	0x65, 0x61, 0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f,
+	0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64,
+	0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x24, 0x0a, 0x04, 0x64, 0x61,
+	0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61,
+	0x22, 0x56, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04,
+	0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65,
+	0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x63, 0x69, 0x74, 0x79, 0x73, 0x18, 0x03, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x69, 0x74,
+	0x79, 0x52, 0x05, 0x63, 0x69, 0x74, 0x79, 0x73, 0x22, 0x2e, 0x0a, 0x04, 0x43, 0x69, 0x74, 0x79,
+	0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+	0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x68, 0x0a, 0x0c, 0x49, 0x6e, 0x64, 0x75,
+	0x73, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f,
+	0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43,
+	0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x24, 0x0a, 0x04,
+	0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d,
+	0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61,
+	0x74, 0x61, 0x22, 0x52, 0x0a, 0x08, 0x49, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x12, 0x12,
+	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
+	0x6d, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x64, 0x75,
+	0x73, 0x74, 0x72, 0x79, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x52, 0x06,
+	0x63, 0x68, 0x69, 0x6c, 0x64, 0x73, 0x22, 0x3c, 0x0a, 0x12, 0x49, 0x6e, 0x64, 0x75, 0x73, 0x74,
+	0x72, 0x79, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+	0x63, 0x6f, 0x64, 0x65, 0x22, 0x3c, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x02, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x49,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
+	0x49, 0x64, 0x22, 0x43, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17,
+	0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x22, 0xaa, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x6e, 0x73,
+	0x69, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02,
+	0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07,
+	0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d,
+	0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18,
+	0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06,
+	0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x44, 0x65,
+	0x74, 0x61, 0x69, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x41, 0x74, 0x74, 0x61, 0x63,
+	0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68,
+	0x54, 0x78, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x41, 0x74, 0x74, 0x61, 0x63,
+	0x68, 0x54, 0x78, 0x74, 0x22, 0x47, 0x0a, 0x11, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76,
+	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72,
+	0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72,
+	0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x32, 0xf8, 0x01,
+	0x0a, 0x06, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x08, 0x41, 0x72, 0x65, 0x61,
+	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x72,
+	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x2e, 0x41, 0x72, 0x65, 0x61, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x0c, 0x49, 0x6e,
+	0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x2e, 0x63, 0x6f, 0x6d,
+	0x6d, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x14,
+	0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79,
+	0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74,
+	0x68, 0x6f, 0x64, 0x12, 0x14, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61,
+	0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+	0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x12, 0x46, 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x74,
+	0x68, 0x6f, 0x64, 0x12, 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x6e,
+	0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e,
+	0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x63, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_common_proto_rawDescOnce sync.Once
+	file_common_proto_rawDescData = file_common_proto_rawDesc
+)
+
+func file_common_proto_rawDescGZIP() []byte {
+	file_common_proto_rawDescOnce.Do(func() {
+		file_common_proto_rawDescData = protoimpl.X.CompressGZIP(file_common_proto_rawDescData)
+	})
+	return file_common_proto_rawDescData
+}
+
+var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
+var file_common_proto_goTypes = []interface{}{
+	(*ProjectReq)(nil),         // 0: common.ProjectReq
+	(*AreaResp)(nil),           // 1: common.AreaResp
+	(*Province)(nil),           // 2: common.Province
+	(*City)(nil),               // 3: common.City
+	(*IndustryResp)(nil),       // 4: common.IndustryResp
+	(*Industry)(nil),           // 5: common.Industry
+	(*IndustryChildsResp)(nil), // 6: common.IndustryChildsResp
+	(*StateRequest)(nil),       // 7: common.StateRequest
+	(*StateResponse)(nil),      // 8: common.StateResponse
+	(*SensitiveRequest)(nil),   // 9: common.SensitiveRequest
+	(*SensitiveResponse)(nil),  // 10: common.SensitiveResponse
+}
+var file_common_proto_depIdxs = []int32{
+	2,  // 0: common.AreaResp.data:type_name -> common.Province
+	3,  // 1: common.Province.citys:type_name -> common.City
+	5,  // 2: common.IndustryResp.data:type_name -> common.Industry
+	6,  // 3: common.Industry.childs:type_name -> common.IndustryChildsResp
+	0,  // 4: common.Common.AreaInfo:input_type -> common.ProjectReq
+	0,  // 5: common.Common.IndustryInfo:input_type -> common.ProjectReq
+	7,  // 6: common.Common.StateMethod:input_type -> common.StateRequest
+	9,  // 7: common.Common.SensitiveMethod:input_type -> common.SensitiveRequest
+	1,  // 8: common.Common.AreaInfo:output_type -> common.AreaResp
+	4,  // 9: common.Common.IndustryInfo:output_type -> common.IndustryResp
+	8,  // 10: common.Common.StateMethod:output_type -> common.StateResponse
+	10, // 11: common.Common.SensitiveMethod:output_type -> common.SensitiveResponse
+	8,  // [8:12] is the sub-list for method output_type
+	4,  // [4:8] is the sub-list for method input_type
+	4,  // [4:4] is the sub-list for extension type_name
+	4,  // [4:4] is the sub-list for extension extendee
+	0,  // [0:4] is the sub-list for field type_name
+}
+
+func init() { file_common_proto_init() }
+func file_common_proto_init() {
+	if File_common_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_common_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ProjectReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AreaResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Province); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*City); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*IndustryResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Industry); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*IndustryChildsResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*StateRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*StateResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SensitiveRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SensitiveResponse); 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_common_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   11,
+			NumExtensions: 0,
+			NumServices:   1,
+		},
+		GoTypes:           file_common_proto_goTypes,
+		DependencyIndexes: file_common_proto_depIdxs,
+		MessageInfos:      file_common_proto_msgTypes,
+	}.Build()
+	File_common_proto = out.File
+	file_common_proto_rawDesc = nil
+	file_common_proto_goTypes = nil
+	file_common_proto_depIdxs = nil
+}

+ 221 - 0
rpc/common/type/common/common_grpc.pb.go

@@ -0,0 +1,221 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.2.0
+// - protoc             v3.15.5
+// source: common.proto
+
+package common
+
+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
+
+// CommonClient is the client API for Common 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 CommonClient interface {
+	//获取省份信息(暂不用)
+	AreaInfo(ctx context.Context, in *ProjectReq, opts ...grpc.CallOption) (*AreaResp, error)
+	//获取行业信息(暂不用)
+	IndustryInfo(ctx context.Context, in *ProjectReq, opts ...grpc.CallOption) (*IndustryResp, error)
+	//修改信息发布状态
+	StateMethod(ctx context.Context, in *StateRequest, opts ...grpc.CallOption) (*StateResponse, error)
+	//
+	SensitiveMethod(ctx context.Context, in *SensitiveRequest, opts ...grpc.CallOption) (*SensitiveResponse, error)
+}
+
+type commonClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCommonClient(cc grpc.ClientConnInterface) CommonClient {
+	return &commonClient{cc}
+}
+
+func (c *commonClient) AreaInfo(ctx context.Context, in *ProjectReq, opts ...grpc.CallOption) (*AreaResp, error) {
+	out := new(AreaResp)
+	err := c.cc.Invoke(ctx, "/common.Common/AreaInfo", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *commonClient) IndustryInfo(ctx context.Context, in *ProjectReq, opts ...grpc.CallOption) (*IndustryResp, error) {
+	out := new(IndustryResp)
+	err := c.cc.Invoke(ctx, "/common.Common/IndustryInfo", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *commonClient) StateMethod(ctx context.Context, in *StateRequest, opts ...grpc.CallOption) (*StateResponse, error) {
+	out := new(StateResponse)
+	err := c.cc.Invoke(ctx, "/common.Common/StateMethod", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *commonClient) SensitiveMethod(ctx context.Context, in *SensitiveRequest, opts ...grpc.CallOption) (*SensitiveResponse, error) {
+	out := new(SensitiveResponse)
+	err := c.cc.Invoke(ctx, "/common.Common/SensitiveMethod", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CommonServer is the server API for Common service.
+// All implementations must embed UnimplementedCommonServer
+// for forward compatibility
+type CommonServer interface {
+	//获取省份信息(暂不用)
+	AreaInfo(context.Context, *ProjectReq) (*AreaResp, error)
+	//获取行业信息(暂不用)
+	IndustryInfo(context.Context, *ProjectReq) (*IndustryResp, error)
+	//修改信息发布状态
+	StateMethod(context.Context, *StateRequest) (*StateResponse, error)
+	//
+	SensitiveMethod(context.Context, *SensitiveRequest) (*SensitiveResponse, error)
+	mustEmbedUnimplementedCommonServer()
+}
+
+// UnimplementedCommonServer must be embedded to have forward compatible implementations.
+type UnimplementedCommonServer struct {
+}
+
+func (UnimplementedCommonServer) AreaInfo(context.Context, *ProjectReq) (*AreaResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method AreaInfo not implemented")
+}
+func (UnimplementedCommonServer) IndustryInfo(context.Context, *ProjectReq) (*IndustryResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method IndustryInfo not implemented")
+}
+func (UnimplementedCommonServer) StateMethod(context.Context, *StateRequest) (*StateResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method StateMethod not implemented")
+}
+func (UnimplementedCommonServer) SensitiveMethod(context.Context, *SensitiveRequest) (*SensitiveResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SensitiveMethod not implemented")
+}
+func (UnimplementedCommonServer) mustEmbedUnimplementedCommonServer() {}
+
+// UnsafeCommonServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to CommonServer will
+// result in compilation errors.
+type UnsafeCommonServer interface {
+	mustEmbedUnimplementedCommonServer()
+}
+
+func RegisterCommonServer(s grpc.ServiceRegistrar, srv CommonServer) {
+	s.RegisterService(&Common_ServiceDesc, srv)
+}
+
+func _Common_AreaInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ProjectReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CommonServer).AreaInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/common.Common/AreaInfo",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CommonServer).AreaInfo(ctx, req.(*ProjectReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Common_IndustryInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ProjectReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CommonServer).IndustryInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/common.Common/IndustryInfo",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CommonServer).IndustryInfo(ctx, req.(*ProjectReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Common_StateMethod_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(StateRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CommonServer).StateMethod(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/common.Common/StateMethod",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CommonServer).StateMethod(ctx, req.(*StateRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Common_SensitiveMethod_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SensitiveRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CommonServer).SensitiveMethod(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/common.Common/SensitiveMethod",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CommonServer).SensitiveMethod(ctx, req.(*SensitiveRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+// Common_ServiceDesc is the grpc.ServiceDesc for Common service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var Common_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "common.Common",
+	HandlerType: (*CommonServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "AreaInfo",
+			Handler:    _Common_AreaInfo_Handler,
+		},
+		{
+			MethodName: "IndustryInfo",
+			Handler:    _Common_IndustryInfo_Handler,
+		},
+		{
+			MethodName: "StateMethod",
+			Handler:    _Common_StateMethod_Handler,
+		},
+		{
+			MethodName: "SensitiveMethod",
+			Handler:    _Common_SensitiveMethod_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "common.proto",
+}

+ 76 - 0
rpc/consumer/consumer.go

@@ -0,0 +1,76 @@
+package main
+
+import (
+	mc "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/endless"
+	"flag"
+	"fmt"
+	"jyInfo/rpc/consumer/internal/config"
+	"jyInfo/rpc/consumer/internal/server"
+	"jyInfo/rpc/consumer/internal/svc"
+	"jyInfo/rpc/consumer/type/consumer"
+	"jyInfo/rpc/model"
+	Oss "jyInfo/rpc/model/oss"
+	"jyInfo/rpc/util"
+	"log"
+
+	"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/information.yaml", "the config file")
+
+func init() {
+	conf.MustLoad(*configFile, &config.CommonConfig)
+	//初始化msyql
+	mm := config.CommonConfig.MysqlMain
+	model.InitMysql(&mm)
+	//初始redis
+	rm := config.CommonConfig.Redis
+	model.InitRedis(&rm)
+	//初始nsq
+	nm := config.CommonConfig.Nsq
+	model.InitNsqConfig(&nm)
+	//初始SupplyTotal
+	sm := config.CommonConfig.SupplyTotal
+	model.SupplyTotalConfig(sm)
+	//初始es
+	es := config.CommonConfig.Es
+	model.InitEs(&es)
+	//初始化oss
+	oss := config.CommonConfig.Oss
+	Oss.InitOss(oss.OssEndpoint, oss.OssAccessKeyId, oss.OssAccessKeySecret)
+}
+
+func main() {
+	//热重启
+	go func() {
+		err := endless.ListenAndServe(":"+mc.InterfaceToStr(config.CommonConfig.Webrpcport), nil, func() {})
+		if err != nil {
+			log.Println("ListenAndServe: ", err)
+		}
+	}()
+	flag.Parse()
+
+	var c config.Config
+	conf.MustLoad(*configFile, &c)
+	ctx := svc.NewServiceContext(c)
+	svr := server.NewConsumerServer(ctx)
+
+	s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) {
+		consumer.RegisterConsumerServer(grpcServer, svr)
+
+		if c.Mode == service.DevMode || c.Mode == service.TestMode {
+			reflection.Register(grpcServer)
+		}
+	})
+	//日志记录
+	s.AddUnaryInterceptors(util.CustomInterceptors)
+	defer s.Stop()
+
+	fmt.Printf("Starting rpc server at %s...\n", c.ListenOn)
+	s.Start()
+}

+ 315 - 0
rpc/consumer/consumer.proto

@@ -0,0 +1,315 @@
+syntax = "proto3";
+
+package consumer;
+
+option go_package = "./consumer";
+
+//信息发布Req
+message PublishInfoReq {
+	string title = 1;//信息标题最长50
+	string msgType = 2;//信息类型1:招标信息 2:采购信息 3:供应信息
+	string relatedId =3;//关联公告id
+	string code = 4;//项目编码
+	string province = 5;//省份
+	string city = 6;//城市
+	repeated string industry = 7;//行业信息
+	string buyer = 8;//采购单位
+	double budget = 9;//预算
+	string winner = 10;//中标单位
+	double amount = 11;//中标金额
+	string detail = 12;//正文信息
+
+	string attach = 13;//附件
+	string userId = 14;//用户id
+	int64 appId = 15;//剑鱼标识 默认10000
+	string entId = 16;//剑鱼标识 默认10000
+	Contact contact = 17;
+	string deadline = 18;//信息有效期
+	string phone = 19;//信息有效期
+	string entName = 20;//企业名称
+}
+
+message Contact {//联系方式
+	string person = 1;//联系人姓名
+	string phone = 2;//手机号
+	int64 overt = 3;//是否公开联系方式 1:展示;2:隐藏
+}
+
+//信息发布Resp
+message PublishInfoResp {
+  	int64 err_code = 1;
+	string err_msg = 2;
+	PublishId PublishId = 3;
+}
+
+message PublishId {
+	string information_id = 1;//发布的信息id
+}
+
+//用户id:1:用户已发布信息数量Req
+message UserIdReq{
+	string userId = 1;//用户id
+	int64 appId = 2;//剑鱼标识 默认10000
+	string match  = 3;
+	int64 msqType  = 4;
+}
+//用户已发布信息数量Resp
+message InfoByUserIdResp{
+	int64 err_code = 1;
+	string err_msg = 2;
+	InfoByUserIdData results = 3;
+}
+
+message InfoByUserIdData {
+	int64 total = 1;//供应总量
+	int64 surplus = 2;//供应剩余
+}
+
+//关联公告Resp
+message InfoRelatedResp{
+  	int64 err_code = 1;
+	string err_msg = 2;
+	repeated InfoData data = 3; 
+}
+
+//公告信息InfoRelatedResp
+message InfoData {
+	string id = 1;//关联公告id
+	string title = 2;//关联公告标题
+}
+
+//我的发布列表Req
+message MyPublishListReq{
+	string userId = 1;//用户id
+	string match = 2;//检索内容
+	int64 msgType = 3;//信息类型 1:招标信息 2:采购信息 3:供应信息
+	int64 reviewStatus = 4;//审核状态 1:待审核|2:审核通过|3:审核不通过
+	int64 pageSize = 5;//每页数据量,默认10
+	int64 pageIndex = 6;//页码;默认第一页
+	int64 appId = 7;//剑鱼标识 默认10000
+}
+
+//我的发布列表Resp
+message MyPublishListResp{
+  	int64 err_code = 1;
+	string err_msg = 2;
+		MyPublishListData results = 3;
+}
+
+message MyPublishListData{
+	int64  total = 1; //总页数 仅第一次请求返回
+	int64 	amount =2;
+	int64 inReview =3;
+	int64 approved =4;
+	int64 auditFailed=5;
+	repeated ListResp list = 6;//信息列表
+}
+//我的发布列表Resp-list
+message ListResp{
+	string title = 1;//标题
+	string id = 2;//信息id
+	int64 reviewStatus = 3;//审核状态 1:待审核|2:审核通过|3:审核不通过
+	int64 msgType = 4;//信息类型 1:招标信息 2:采购信息 3:供应信息
+	string createTime =5;//审核时间
+}
+
+//发布的信息详情Req+发布信息删除Req+发布信息更新Req
+message InfoDetailReq{
+	string userId = 1;//用户id
+	string msgId = 2;//信息id
+	int64 type = 3;//处理信息类型:0:获取发布信息详情(默认);1:删除发布的信息;2:更新发布信息
+	int64 appId = 4;//剑鱼标识 默认10000
+	int64 msgType = 5;//信息类型 1:招标信息 2:采购信息 3:供应信息
+}
+
+//发布的信息详情Resp
+message InfoDetailResp{
+	int64 err_code = 1;
+	string err_msg = 2;
+	InfoDetailData results = 3;
+}
+
+message InfoDetailData {
+	int64 msgType = 1;//信息类型
+	string code = 2;//项目代码
+	string province = 3;//省份
+	string city = 4;//城市
+	repeated string industry = 5;//行业列表
+	string buyer = 6;//采购单位
+	double budget = 7;//预算
+	string winner = 8;//中标企业
+	double amount = 9;//中标金额
+	string detail = 10;//详情
+	string attach = 11;//附件列表
+	string createTime = 12;//创建时间
+	string title = 13;//信息类型
+	string validityTime = 14;//供应信息有效期
+	string publishTime = 15;//发布时间
+	int64 appId = 16;//发布时间
+
+	Related  InfoDetailRelated = 17;//关联信息
+	Review  InfoDetailReview = 18;//审核
+	InfoDetailContact  infoDetailContact = 19;//联系人内容
+}//信息详情
+
+message Related{
+	string id = 1;//关联信息id
+	string title = 2;//关联信息标题
+}
+
+message Review{
+	int64 status = 1;//审核状态
+	string detail = 2;//未通过审核原因
+	string time = 3;//审核时间
+}
+
+message InfoDetailContact{
+	string name = 1;//名字
+	string phone = 2;//电话
+	int64 overt = 3;//是否公开 1:展示;2:隐藏
+}
+
+//更新发布的信息Resp:删除和更新
+message InfoChangeResp{
+	int64 err_code = 1;
+	string err_msg = 2;
+	InfoDetailResp  info_change_data = 3;
+}
+
+message InfoChangeData {
+	string id = 1;//信息id
+	PublishInfoData Data = 2;//信息id
+}
+
+//信息发布Req
+message PublishInfoData {
+	string title = 1;//信息标题最长50
+	string msgType = 2;//信息类型1:招标信息 2:采购信息 3:供应信息
+	string relatedId =3;//关联公告id
+	string code = 4;//项目编码
+	string province = 5;//省份
+	string city = 6;//城市
+	repeated string industry = 7;//行业信息
+	string buyer = 8;//采购单位
+	double budget = 9;//预算
+	string winner = 10;//中标单位
+	double amount = 11;//中标金额
+	string detail = 12;//正文信息
+
+	repeated string attach = 13;//附件
+	Contact contact = 17;
+	string deadline = 18;//信息有效期
+}
+//信息审核状态查询
+message StatusReq {
+	string msgId = 1;
+	int64 type =2;
+}
+message StatusResp {
+	int64 err_code = 1;
+	string err_msg = 2;
+	StatusData  data = 3;
+}
+message StatusData {
+	string status = 1;
+	string published = 2;
+}
+
+//供应信息检索框查询
+message SupplyInfoSearchReq {
+	string keywords = 1;//关键词
+	string searchType = 2;//搜索范围:title:标题;detail:正文;ent_name:发布单位;(多个用,号隔开)
+	string province = 3;//省份
+	string city = 4;//城市
+	string time = 5;//发布时间 string:1592555555-1596666666
+	string status = 6;//信息状态;0:全部;1:生效中;-1:已过期
+	int64 pageSize = 7;//每页数据量,默认50
+	int64 pageIndex = 8;//页码;默认第一页
+}
+//供应信息检索框查询Resp
+message SupplyInfoSearchResp{
+	int64 err_code = 1;
+	string err_msg = 2;
+	repeated SupplyInfo data = 3;
+}
+message SupplyInfo {
+	string title = 1;//标题
+	string id = 2;//信息id
+	string detail = 3;//匹配的正文
+	string province = 4;//省份
+	string city = 5;//城市
+	string publish_time = 6;//发布时间
+	repeated string highlight = 7;//内容高亮
+}
+
+//前端其他用户查询详情页返回数据格式
+message supplyInfoDetailResp {
+	int64 err_code = 1;
+	string err_msg = 2;
+	SupplyInfoDetailData data = 3;
+}
+//前端其他用户查询详情页返回数据格式-data
+message SupplyInfoDetailData {
+	string id = 1;//信息id
+	string title = 2;//信息标题
+	string detail = 3;//信息详情
+	string province = 4;//省份
+	string city = 5;//城市
+	string validityTime = 6;//有效期
+	string entId = 7;//企业id
+	string attach = 8;//附件列表
+	InfoDetailContact  infoDetailContact = 9;//联系人详情
+	string publishTime = 10;//发布时间
+	repeated OtherSupplyInfoByEnt otherSupplyInfo = 11;//此企业发布的其他供应信息
+}
+//前端查询供应信息 此企业发布的其他供应信息
+message OtherSupplyInfoByEnt{
+	string title = 1;
+	string id = 2;
+	string province = 3;
+	string city = 4;
+	string publishTime = 5;
+	string createTime = 6;
+	string entId = 7;
+}
+//上传附件
+message InfoFileUploadReq {
+	string fileName = 1;//附件名称
+	bytes file = 2;//附件
+	int64 fileSize = 3;//附件大小
+}
+//
+message InfoFileUploadResp {
+	int64 err_code = 1;
+	string err_msg = 2;
+	InfoFileUploadData data = 3;
+}
+message InfoFileUploadData {
+	string filename = 1;//附件名称
+	string ftype = 2;//附件类型
+	string fid = 3;//key
+	string size = 4;//单位KB
+}
+//servie
+service consumer {
+	//发布信息
+  	rpc PublishInfo(PublishInfoReq) returns(PublishInfoResp);
+	//根据用户id获取当月已发布信息数量
+	rpc InfoByUserId(UserIdReq) returns(InfoByUserIdResp);
+	//关联公告
+	rpc InfoRelated(UserIdReq) returns(InfoRelatedResp);
+	//我的发布列表
+	rpc MyPublishList(MyPublishListReq) returns(MyPublishListResp);
+	//更新发布的信息0:获取详情;1:物理删除()
+	rpc InfoChange(InfoDetailReq) returns(InfoDetailResp);
+	//信息审核状态查询
+	rpc StatusQuery(StatusReq) returns(StatusResp);
+
+	//供应信息查询
+	rpc SupplyInfoSearch(SupplyInfoSearchReq) returns(SupplyInfoSearchResp);
+	//供应信息详情(前端页面查询结果详情请求地址)
+	rpc	supplyInfoDetail(StatusReq) returns(supplyInfoDetailResp);
+	
+	//上传附件
+	rpc InfoFileUpload(InfoFileUploadReq) returns(InfoFileUploadResp);
+}

+ 135 - 0
rpc/consumer/consumer/consumer.go

@@ -0,0 +1,135 @@
+// Code generated by goctl. DO NOT EDIT!
+// Source: consumer.proto
+
+package consumer
+
+import (
+	"context"
+
+	"jyInfo/rpc/consumer/type/consumer"
+
+	"github.com/zeromicro/go-zero/zrpc"
+	"google.golang.org/grpc"
+)
+
+type (
+	Contact              = consumer.Contact
+	InfoByUserIdData     = consumer.InfoByUserIdData
+	InfoByUserIdResp     = consumer.InfoByUserIdResp
+	InfoChangeData       = consumer.InfoChangeData
+	InfoChangeResp       = consumer.InfoChangeResp
+	InfoData             = consumer.InfoData
+	InfoDetailContact    = consumer.InfoDetailContact
+	InfoDetailData       = consumer.InfoDetailData
+	InfoDetailReq        = consumer.InfoDetailReq
+	InfoDetailResp       = consumer.InfoDetailResp
+	InfoFileUploadData   = consumer.InfoFileUploadData
+	InfoFileUploadReq    = consumer.InfoFileUploadReq
+	InfoFileUploadResp   = consumer.InfoFileUploadResp
+	InfoRelatedResp      = consumer.InfoRelatedResp
+	ListResp             = consumer.ListResp
+	MyPublishListData    = consumer.MyPublishListData
+	MyPublishListReq     = consumer.MyPublishListReq
+	MyPublishListResp    = consumer.MyPublishListResp
+	OtherSupplyInfoByEnt = consumer.OtherSupplyInfoByEnt
+	PublishId            = consumer.PublishId
+	PublishInfoData      = consumer.PublishInfoData
+	PublishInfoReq       = consumer.PublishInfoReq
+	PublishInfoResp      = consumer.PublishInfoResp
+	Related              = consumer.Related
+	Review               = consumer.Review
+	StatusData           = consumer.StatusData
+	StatusReq            = consumer.StatusReq
+	StatusResp           = consumer.StatusResp
+	SupplyInfo           = consumer.SupplyInfo
+	SupplyInfoDetailData = consumer.SupplyInfoDetailData
+	SupplyInfoDetailResp = consumer.SupplyInfoDetailResp
+	SupplyInfoSearchReq  = consumer.SupplyInfoSearchReq
+	SupplyInfoSearchResp = consumer.SupplyInfoSearchResp
+	UserIdReq            = consumer.UserIdReq
+
+	Consumer interface {
+		// 发布信息
+		PublishInfo(ctx context.Context, in *PublishInfoReq, opts ...grpc.CallOption) (*PublishInfoResp, error)
+		// 根据用户id获取当月已发布信息数量
+		InfoByUserId(ctx context.Context, in *UserIdReq, opts ...grpc.CallOption) (*InfoByUserIdResp, error)
+		// 关联公告
+		InfoRelated(ctx context.Context, in *UserIdReq, opts ...grpc.CallOption) (*InfoRelatedResp, error)
+		// 我的发布列表
+		MyPublishList(ctx context.Context, in *MyPublishListReq, opts ...grpc.CallOption) (*MyPublishListResp, error)
+		// 更新发布的信息0:获取详情;1:物理删除()
+		InfoChange(ctx context.Context, in *InfoDetailReq, opts ...grpc.CallOption) (*InfoDetailResp, error)
+		// 信息审核状态查询
+		StatusQuery(ctx context.Context, in *StatusReq, opts ...grpc.CallOption) (*StatusResp, error)
+		// 供应信息查询
+		SupplyInfoSearch(ctx context.Context, in *SupplyInfoSearchReq, opts ...grpc.CallOption) (*SupplyInfoSearchResp, error)
+		// 供应信息详情(前端页面查询结果详情请求地址)
+		SupplyInfoDetail(ctx context.Context, in *StatusReq, opts ...grpc.CallOption) (*SupplyInfoDetailResp, error)
+		// 上传附件
+		InfoFileUpload(ctx context.Context, in *InfoFileUploadReq, opts ...grpc.CallOption) (*InfoFileUploadResp, error)
+	}
+
+	defaultConsumer struct {
+		cli zrpc.Client
+	}
+)
+
+func NewConsumer(cli zrpc.Client) Consumer {
+	return &defaultConsumer{
+		cli: cli,
+	}
+}
+
+// 发布信息
+func (m *defaultConsumer) PublishInfo(ctx context.Context, in *PublishInfoReq, opts ...grpc.CallOption) (*PublishInfoResp, error) {
+	client := consumer.NewConsumerClient(m.cli.Conn())
+	return client.PublishInfo(ctx, in, opts...)
+}
+
+// 根据用户id获取当月已发布信息数量
+func (m *defaultConsumer) InfoByUserId(ctx context.Context, in *UserIdReq, opts ...grpc.CallOption) (*InfoByUserIdResp, error) {
+	client := consumer.NewConsumerClient(m.cli.Conn())
+	return client.InfoByUserId(ctx, in, opts...)
+}
+
+// 关联公告
+func (m *defaultConsumer) InfoRelated(ctx context.Context, in *UserIdReq, opts ...grpc.CallOption) (*InfoRelatedResp, error) {
+	client := consumer.NewConsumerClient(m.cli.Conn())
+	return client.InfoRelated(ctx, in, opts...)
+}
+
+// 我的发布列表
+func (m *defaultConsumer) MyPublishList(ctx context.Context, in *MyPublishListReq, opts ...grpc.CallOption) (*MyPublishListResp, error) {
+	client := consumer.NewConsumerClient(m.cli.Conn())
+	return client.MyPublishList(ctx, in, opts...)
+}
+
+// 更新发布的信息0:获取详情;1:物理删除()
+func (m *defaultConsumer) InfoChange(ctx context.Context, in *InfoDetailReq, opts ...grpc.CallOption) (*InfoDetailResp, error) {
+	client := consumer.NewConsumerClient(m.cli.Conn())
+	return client.InfoChange(ctx, in, opts...)
+}
+
+// 信息审核状态查询
+func (m *defaultConsumer) StatusQuery(ctx context.Context, in *StatusReq, opts ...grpc.CallOption) (*StatusResp, error) {
+	client := consumer.NewConsumerClient(m.cli.Conn())
+	return client.StatusQuery(ctx, in, opts...)
+}
+
+// 供应信息查询
+func (m *defaultConsumer) SupplyInfoSearch(ctx context.Context, in *SupplyInfoSearchReq, opts ...grpc.CallOption) (*SupplyInfoSearchResp, error) {
+	client := consumer.NewConsumerClient(m.cli.Conn())
+	return client.SupplyInfoSearch(ctx, in, opts...)
+}
+
+// 供应信息详情(前端页面查询结果详情请求地址)
+func (m *defaultConsumer) SupplyInfoDetail(ctx context.Context, in *StatusReq, opts ...grpc.CallOption) (*SupplyInfoDetailResp, error) {
+	client := consumer.NewConsumerClient(m.cli.Conn())
+	return client.SupplyInfoDetail(ctx, in, opts...)
+}
+
+// 上传附件
+func (m *defaultConsumer) InfoFileUpload(ctx context.Context, in *InfoFileUploadReq, opts ...grpc.CallOption) (*InfoFileUploadResp, error) {
+	client := consumer.NewConsumerClient(m.cli.Conn())
+	return client.InfoFileUpload(ctx, in, opts...)
+}

+ 6 - 0
rpc/consumer/etc/consumer.yaml

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

+ 30 - 0
rpc/consumer/etc/information.yaml

@@ -0,0 +1,30 @@
+Name: consumer.rpc
+ListenOn: 0.0.0.0:8003
+Nsq:
+  ip: 192.168.3.207:4150
+  topic: jyinfo
+Etcd:
+  Hosts:
+  - 127.0.0.1:2379
+  Key: consumer.rpc
+Webrpcport: 8013
+MysqlMain:
+  dbName: base_service
+  address: 192.168.3.11:3366
+  userName: root
+  passWord: Topnet123
+  maxOpenConns: 5
+  maxIdleConns: 5
+Redis:
+  Host: 192.168.3.206
+  addr: 192.168.3.206:1712
+  modules: other
+SupplyTotal: 30
+Es:
+  addr: http://192.168.3.206:9800
+  size: 5
+Oss:
+  ossEndpoint: oss-cn-beijing.aliyuncs.com
+  ossAccessKeyId: LTAI4G5x9aoZx8dDamQ7vfZi
+  ossAccessKeySecret: Bk98FsbPYXcJe72n1bG3Ssf73acuNh
+  ossBucketName: jy-datafile

+ 20 - 0
rpc/consumer/internal/config/config.go

@@ -0,0 +1,20 @@
+package config
+
+import (
+	"jyInfo/entity"
+
+	"github.com/zeromicro/go-zero/zrpc"
+)
+
+type Config struct {
+	zrpc.RpcServerConf
+	Webrpcport  int64
+	MysqlMain   entity.MysqlMainStruct
+	Redis       entity.RedisStuct
+	Nsq         entity.NsqStruct
+	SupplyTotal int
+	Es          entity.EsStruct
+	Oss         entity.OssStruct
+}
+
+var CommonConfig Config

+ 53 - 0
rpc/consumer/internal/logic/infobyuseridlogic.go

@@ -0,0 +1,53 @@
+package logic
+
+import (
+	"context"
+	"fmt"
+	"jyInfo/rpc/model"
+	"time"
+
+	"jyInfo/rpc/consumer/consumer"
+	"jyInfo/rpc/consumer/internal/svc"
+
+	mc "app.yhyue.com/moapp/jybase/common"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type InfoByUserIdLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewInfoByUserIdLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InfoByUserIdLogic {
+	return &InfoByUserIdLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+func GetZeroTime(d time.Time) time.Time {
+	return time.Date(d.Year(), d.Month(), d.Day(), 0, 0, 0, 0, d.Location())
+}
+
+// 根据用户id获取当月已发布信息数量
+func (l *InfoByUserIdLogic) InfoByUserId(in *consumer.UserIdReq) (*consumer.InfoByUserIdResp, error) {
+	// todo: add your logic here and delete this line
+	//qurey := make(map[string]interface{})
+	var data = consumer.InfoByUserIdResp{}
+	endTime := time.Now().Format("2006-01-02 15:04:05")
+	startTime := time.Date(time.Now().Year(), time.Now().Month(), 1, 0, 0, 0, 0, time.Now().Location())
+	//query := fmt.Sprintf("select count(1) from information where user_id = %s and published = 1 and publish_time>='%s' and publish_time<='%s'", in.UserId, startTime, endTime)
+	supplyquery := fmt.Sprintf("select count(1) from supply_info where user_id = '%s' and published = 2 and publish_time>='%s' and publish_time<='%s'", in.UserId, startTime, endTime)
+	//number := model.Mysql.CountBySql(query) + model.Mysql.CountBySql(supplyquery)
+	number := model.Mysql.CountBySql(supplyquery)
+
+	var resp consumer.InfoByUserIdData
+	resp.Total = mc.Int64All(model.SupplyTotal)
+	resp.Surplus = mc.Int64All(model.SupplyTotal) - number
+	data.Results = &resp
+
+	return &data, nil
+}

+ 159 - 0
rpc/consumer/internal/logic/infochangelogic.go

@@ -0,0 +1,159 @@
+package logic
+
+import (
+	se "app.yhyue.com/moapp/jybase/encrypt"
+	"context"
+	"fmt"
+	"jyInfo/rpc/consumer/consumer"
+	"jyInfo/rpc/consumer/internal/svc"
+	"jyInfo/rpc/model"
+	esmd "jyInfo/rpc/model/es"
+	"jyInfo/rpc/util"
+	"strings"
+
+	mc "app.yhyue.com/moapp/jybase/common"
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type InfoChangeLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewInfoChangeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InfoChangeLogic {
+	return &InfoChangeLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 更新发布的信息0:获取详情;1:物理删除
+func (l *InfoChangeLogic) InfoChange(in *consumer.InfoDetailReq) (*consumer.InfoDetailResp, error) {
+	// todo: add your logic here and delete this line
+	var (
+		dataRes consumer.InfoDetailResp
+	)
+	query := make(map[string]interface{})
+	upQuery := make(map[string]interface{})
+	msgId := se.SE.DecodeString(in.MsgId) //信息id解密
+	switch in.Type {
+	case 0:
+		var (
+			Results           consumer.InfoDetailData    //信息
+			Review            consumer.Review            //审核信息
+			InfoDetailContact consumer.InfoDetailContact //联系人信息
+		)
+
+		data := make(map[string]interface{})
+
+		if in.MsgType == 1 || in.MsgType == 2 {
+			if _d := model.Mysql.SelectBySql(`SELECT a.*,b.title as relatedTitle FROM information a
+				LEFT JOIN information b on (a.related_id =b.id) where a.id = ?`, mc.IntAll(msgId)); _d != nil && len(*_d) > 0 {
+				data = (*_d)[0]
+				var (
+					Related consumer.Related
+				)
+				Results.Code = mc.InterfaceToStr(data["project_code"])
+				Results.Industry = strings.Split(mc.InterfaceToStr(data["industry"]), ",")
+				Results.Buyer = mc.InterfaceToStr(data["buyer"])
+				Results.Budget = mc.Float64All(data["budget"])
+				Results.Winner = mc.InterfaceToStr(data["winner"])
+				Results.Amount = mc.Float64All(data["amount"])
+				Results.Detail = mc.InterfaceToStr(data["detail"])
+				Results.CreateTime = mc.InterfaceToStr(data["create_time"])
+				if data["related_id"] != nil && mc.IntAll(data["related_id"]) != 0 {
+					Related.Id = mc.InterfaceToStr(data["related_id"])
+					Related.Title = mc.InterfaceToStr(data["relatedTitle"])
+					Results.InfoDetailRelated = &Related
+				}
+			} else {
+				dataRes.ErrCode = -1
+				dataRes.ErrMsg = "查询数据失败"
+				break
+			}
+
+		} else if in.MsgType == 3 {
+			if _d := model.Mysql.SelectBySql(`SELECT * FROM supply_info where id = ?`, mc.IntAll(msgId)); _d != nil && len(*_d) > 0 {
+				data = (*_d)[0]
+				Results.ValidityTime = mc.InterfaceToStr(data["validity_time"])
+			} else {
+				dataRes.ErrCode = -1
+				dataRes.ErrMsg = "查询数据失败"
+				break
+			}
+		}
+		Results.Province = mc.InterfaceToStr(data["province"])
+		Results.City = mc.InterfaceToStr(data["city"])
+		Results.AppId = mc.Int64All(data["app_id"])
+		Results.Title = mc.InterfaceToStr(data["title"])
+		Results.MsgType = mc.Int64All(data["type"])
+
+		Results.Detail = mc.InterfaceToStr(data["detail"])
+		Results.Attach = mc.InterfaceToStr(data["attach"])
+		Results.CreateTime = mc.InterfaceToStr(data["create_time"])
+		status := mc.Int64All(data["status"])
+		published := mc.IntAll(data["published"])
+		Review.Status = 1
+		if published == 2 {
+			Review.Status = 2
+		} else if status == -1 || status == -2 {
+			Review.Status = 3
+		}
+
+		Review.Time = mc.InterfaceToStr(data["review_time"])
+		Review.Detail = mc.InterfaceToStr(data["review_desc"])
+		Results.InfoDetailReview = &Review
+
+		InfoDetailContact.Name = mc.InterfaceToStr(data["contact_person"])
+		InfoDetailContact.Phone = mc.InterfaceToStr(data["contact_phone"])
+		InfoDetailContact.Overt = mc.Int64All(data["contact_overt"])
+		Results.InfoDetailContact = &InfoDetailContact
+		dataRes.Results = &Results
+	case 1:
+		if in.MsgType == 1 || in.MsgType == 2 {
+			query["id"] = mc.IntAll(msgId)
+			if data := model.Mysql.FindOne("information", query, "", ""); data != nil && len(*data) > 0 {
+				upQuery["is_del"] = -1
+				if !model.Mysql.Update("information", query, upQuery) {
+					dataRes.ErrCode = -1
+					dataRes.ErrMsg = "物理删除失败"
+					return &dataRes, fmt.Errorf("物理删除失败")
+				} else if mc.IntAll((*data)["published"]) == 2 {
+					//如果是已经正常发布的信息 同步调用nsq删除
+					nsq, err := util.NewNsqInfo(model.NsqConfig.Ip, model.NsqConfig.Topic, mc.InterfaceToStr((*data)["id"]), "3", mc.InterfaceToStr((*data)["type"]), false, *data)
+					if err != nil || nsq.NsqPushInfo() != nil {
+						dataRes.ErrCode = -1
+						dataRes.ErrMsg = "nsq回调删除,同步删除信息失败"
+					}
+				}
+			} else {
+				dataRes.ErrCode = -1
+				dataRes.ErrMsg = "查询数据失败"
+			}
+		} else if in.MsgType == 3 {
+			query["id"] = mc.IntAll(msgId)
+			if data := model.Mysql.FindOne("supply_info", query, "", ""); data != nil && len(*data) > 0 {
+				upQuery["is_del"] = -1
+				if !model.Mysql.Update("supply_info", query, upQuery) {
+					dataRes.ErrCode = -1
+					dataRes.ErrMsg = "物理删除失败"
+					break
+				} else if mc.IntAll((*data)["published"]) == 2 {
+					if !esmd.DelSupplyInfo(mc.InterfaceToStr((*data)["id"])) {
+						dataRes.ErrCode = -1
+						dataRes.ErrMsg = "es删除供应信息失败"
+					}
+				}
+			} else {
+				dataRes.ErrCode = -1
+				dataRes.ErrMsg = "查询数据失败"
+			}
+		}
+	default:
+		dataRes.ErrCode = -1
+		dataRes.ErrMsg = "数据格式有误"
+	}
+	return &dataRes, nil
+}

+ 55 - 0
rpc/consumer/internal/logic/infofileuploadlogic.go

@@ -0,0 +1,55 @@
+package logic
+
+import (
+	"bytes"
+	"context"
+	"jyInfo/rpc/consumer/internal/config"
+	model "jyInfo/rpc/model/oss"
+	"strings"
+
+	"jyInfo/rpc/consumer/consumer"
+	"jyInfo/rpc/consumer/internal/svc"
+
+	mc "app.yhyue.com/moapp/jybase/common"
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type InfoFileUploadLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewInfoFileUploadLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InfoFileUploadLogic {
+	return &InfoFileUploadLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 上传附件
+func (l *InfoFileUploadLogic) InfoFileUpload(in *consumer.InfoFileUploadReq) (*consumer.InfoFileUploadResp, error) {
+	var resp consumer.InfoFileUploadResp
+	//model.InitOss()
+	key := model.GetHashKey(in.File) + model.TypeByExt(in.FileName)
+	b, err := model.OssPutObject(key, bytes.NewReader(in.File), mc.InterfaceToStr(config.CommonConfig.Oss.OssBucketName))
+	fileSize := mc.InterfaceToStr(in.FileSize/1024) + "KB"
+	if err == nil && b {
+		var data consumer.InfoFileUploadData
+		data.Filename = in.FileName
+		data.Size = fileSize
+		data.Fid = key
+		ftypes := strings.Split(in.FileName, ".")
+		var ftype string
+		if len(ftypes) > 0 && len(ftypes) == 2 {
+			ftype = strings.Split(in.FileName, ".")[1]
+		}
+		data.Ftype = ftype
+		resp.Data = &data
+		return &resp, err
+	}
+	resp.ErrCode = -1
+	resp.ErrMsg = "上传失败"
+	return &resp, nil
+}

+ 52 - 0
rpc/consumer/internal/logic/inforelatedlogic.go

@@ -0,0 +1,52 @@
+package logic
+
+import (
+	se "app.yhyue.com/moapp/jybase/encrypt"
+	"context"
+	"jyInfo/rpc/model"
+
+	"jyInfo/rpc/consumer/consumer"
+	"jyInfo/rpc/consumer/internal/svc"
+
+	mc "app.yhyue.com/moapp/jybase/common"
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type InfoRelatedLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewInfoRelatedLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InfoRelatedLogic {
+	return &InfoRelatedLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 关联公告
+func (l *InfoRelatedLogic) InfoRelated(in *consumer.UserIdReq) (*consumer.InfoRelatedResp, error) {
+	// todo: add your logic here and delete this line
+	var (
+		quryname string
+		resq     consumer.InfoRelatedResp
+	)
+	quryname = ` and type=` + mc.InterfaceToStr(in.MsqType)
+	if in.Match != "" {
+		quryname = ` and title LIKE '%` + in.Match + `%' `
+	}
+
+	allData := model.Mysql.SelectBySql(`SELECT id,title  from information WHERE user_id="` + in.UserId + `" and published=2 and is_del=1` + quryname + ` limit 50`)
+	if allData == nil || len(*allData) == 0 {
+		return &resq, nil
+	}
+	for _, v := range *allData {
+		var data consumer.InfoData
+		data.Id = se.SE.EncodeString(mc.InterfaceToStr(v["id"])) //关联信息加密
+		data.Title = mc.InterfaceToStr(v["title"])
+		resq.Data = append(resq.Data, &data)
+	}
+	return &resq, nil
+}

+ 120 - 0
rpc/consumer/internal/logic/mypublishlistlogic.go

@@ -0,0 +1,120 @@
+package logic
+
+import (
+	se "app.yhyue.com/moapp/jybase/encrypt"
+	"context"
+	"jyInfo/rpc/consumer/consumer"
+	"jyInfo/rpc/consumer/internal/svc"
+	"jyInfo/rpc/model"
+
+	mc "app.yhyue.com/moapp/jybase/common"
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type MyPublishListLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewMyPublishListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *MyPublishListLogic {
+	return &MyPublishListLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 我的发布列表
+func (l *MyPublishListLogic) MyPublishList(in *consumer.MyPublishListReq) (*consumer.MyPublishListResp, error) {
+	// todo: add your logic here and delete this line
+	var (
+		quryname                                       string
+		data                                           consumer.MyPublishListResp
+		amount, inReview, approved, auditFailed, total int64
+	)
+	if in.Match != "" {
+		quryname = ` and title LIKE '%` + in.Match + `%' `
+	}
+	if in.MsgType != 0 {
+		quryname = quryname + ` and type=` + mc.InterfaceToStr(in.MsgType)
+	}
+	if in.PageIndex == 1 {
+		//全部
+		amount = model.Mysql.CountBySql(`SELECT count(1)  from (SELECT id from information WHERE is_del = 1  and user_id= "` + in.UserId + `" ` + quryname + `
+			union all
+			SELECT id from supply_info WHERE is_del = 1  and user_id= "` + in.UserId + `" ` + quryname + `) a`)
+		//审核中
+		inReview = model.Mysql.CountBySql(`SELECT count(1)  from (SELECT id  from information WHERE is_del = 1  and user_id= "` + in.UserId + `" ` + quryname + ` and status in (0,1,2,3,4) and published = 1
+			union all
+			SELECT id  from supply_info WHERE is_del = 1  and user_id= "` + in.UserId + `" ` + quryname + `  and status in (0,1,2,3,4) and published = 1) a`)
+		//审核通过
+		approved = model.Mysql.CountBySql(`SELECT count(1)  from (SELECT id  from information WHERE is_del = 1 and user_id= "` + in.UserId + `" ` + quryname + ` and published = 2
+			union all
+			SELECT id  from supply_info WHERE is_del = 1 and user_id= "` + in.UserId + `" ` + quryname + ` and published = 2) a`)
+		//审核不通过
+		auditFailed = model.Mysql.CountBySql(`SELECT count(1)  from (SELECT id  from information WHERE is_del = 1 and user_id= "` + in.UserId + `" ` + quryname + ` and status in (-1,-2) and published = 1` + `
+			union all
+			SELECT id  from supply_info WHERE is_del = 1 and user_id= "` + in.UserId + `" ` + quryname + `  and status in (-1,-2) and published = 1) a`)
+	}
+
+	if in.ReviewStatus != 0 {
+		if in.ReviewStatus == 1 {
+			quryname = quryname + ` and status in (0,1,2,3,4) and published = 1`
+		} else if in.ReviewStatus == 2 {
+			quryname = quryname + ` and published = 2`
+		} else if in.ReviewStatus == 3 {
+			quryname = quryname + ` and status in (-1,-2)`
+		}
+	}
+
+	if in.PageSize == 0 {
+		in.PageSize = 10
+	}
+	var offset int
+	if in.PageIndex == 1 {
+		offset = 0
+	} else {
+		offset = mc.IntAll((in.PageIndex - 1) * in.PageSize)
+	}
+	if in.PageIndex == 1 {
+		count := model.Mysql.CountBySql(`SELECT count(1)  from (SELECT id,type,title,create_time,status,published  from information WHERE is_del = 1 and user_id= "` + in.UserId + `" ` + quryname + `
+			union all
+			SELECT id,type,title,create_time,status,published  from supply_info WHERE is_del = 1 and user_id= "` + in.UserId + `" ` + quryname + ` ) a`)
+		total = mc.Int64All(mc.MathCeil(mc.Float64All(count) / mc.Float64All(in.PageSize)))
+	}
+	allData := model.Mysql.SelectBySql(`SELECT a.id,a.type,a.title,a.create_time,a.published,a.status  from (SELECT id,type,title,create_time,status,published  from information WHERE is_del = 1 and user_id= "`+in.UserId+`" `+quryname+`
+			union all
+			SELECT id,type,title,create_time,status,published  from supply_info WHERE is_del = 1 and user_id= "`+in.UserId+`" `+quryname+` ) a  order by a.create_time desc limit ?,?`, offset, in.PageSize)
+	if allData == nil || len(*allData) == 0 {
+		return &data, nil
+	}
+
+	var ListData consumer.MyPublishListData
+	for _, v := range *allData {
+		var vs = consumer.ListResp{}
+		vs.Id = se.SE.EncodeString(mc.InterfaceToStr(v["id"])) //信息id加密
+		vs.ReviewStatus = 1
+		status := mc.IntAll(v["status"])
+		published := mc.IntAll(v["published"])
+		//1 审核中 2 已发布(审核通过)3 status(-1,-2) 审核不通过
+		if published == 2 {
+			vs.ReviewStatus = 2
+		} else if status == -2 || status == -1 {
+			vs.ReviewStatus = 3
+		}
+		ListData.Total = total
+		vs.MsgType = mc.Int64All(v["type"])
+		vs.CreateTime = mc.InterfaceToStr(v["create_time"])
+		vs.Title = mc.InterfaceToStr(v["title"])
+		ListData.List = append(ListData.List, &vs)
+	}
+
+	ListData.Amount = amount
+	ListData.Approved = approved
+	ListData.InReview = inReview
+	ListData.AuditFailed = auditFailed
+
+	data.Results = &ListData
+	return &data, nil
+}

+ 109 - 0
rpc/consumer/internal/logic/publishinfologic.go

@@ -0,0 +1,109 @@
+package logic
+
+import (
+	"context"
+	"fmt"
+	"jyInfo/rpc/consumer/consumer"
+	"jyInfo/rpc/consumer/internal/svc"
+	"jyInfo/rpc/model"
+	"jyInfo/rpc/util"
+	"log"
+	"strings"
+	"time"
+
+	se "app.yhyue.com/moapp/jybase/encrypt"
+
+	mc "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/redis"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type PublishInfoLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewPublishInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PublishInfoLogic {
+	return &PublishInfoLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 发布信息
+func (l *PublishInfoLogic) PublishInfo(in *consumer.PublishInfoReq) (*consumer.PublishInfoResp, error) {
+	// todo: add your logic here and delete this line
+	res := consumer.PublishInfoResp{}
+	var id int64
+	//信息类型1:招标信息 2:采购信息 3:供应信息
+	publishData := make(map[string]interface{})
+	publishData["user_id"] = in.UserId                                    //发布人用户ID
+	publishData["phone"] = in.Phone                                       //注册手机号
+	publishData["title"] = in.Title                                       //信息标题
+	publishData["province"] = in.Province                                 //项目省份
+	publishData["city"] = in.City                                         //项目城市
+	publishData["detail"] = in.Detail                                     //正文信息
+	publishData["create_time"] = time.Now().Format("2006-01-02 15:04:05") //申请时间
+	publishData["attach"] = in.Attach                                     //附件(多个附件逗号分割)
+	publishData["contact_person"] = in.Contact.Person                     //联系人
+	publishData["contact_phone"] = in.Contact.Phone                       //联系人电话
+	publishData["contact_overt"] = in.Contact.Overt                       //是否公开
+	publishData["is_del"] = 1                                             // 0:全部;1:未删除;-1:删除
+	publishData["published"] = 1                                          // 0:全部;1:未发布;2:已发布
+	publishData["type"] = mc.IntAll(in.MsgType)                           //1:招标信息|2:采购信息|3:供应信息
+	publishData["ent_id"] = mc.IntAll(in.EntId)
+	publishData["app_id"] = mc.IntAll(in.AppId)
+	//  0:全部;1:待审核;2:待人工审核(敏感词审核不通过||敏感词审核通过);3:自动审核通过;4:人工审核通过;-1:自动审核不通过(机构冻结);-2:人工审核不通过;
+	publishData["status"] = 1
+	log.Println(in.MsgType, "-------------------")
+	switch in.MsgType {
+	case "1", "2":
+		publishData["related_id"] = mc.IntAll(in.RelatedId)      //关联公告id
+		publishData["project_code"] = in.Code                    //项目编号
+		publishData["industry"] = strings.Join(in.Industry, ",") //项目行业,多个逗号分隔
+		publishData["buyer"] = in.Buyer                          //采购单位
+		publishData["budget"] = mc.IntAll(in.Budget)             // 预算单位元
+		publishData["winner"] = in.Winner                        //中标单位
+		publishData["amount"] = mc.IntAll(in.Amount)             //中标金额
+
+		id = model.Mysql.Insert("information", publishData)
+	case "3":
+		publishData["validity_time"] = in.Deadline //信息有效期
+		id = model.Mysql.Insert("supply_info", publishData)
+	default:
+		res.ErrCode = -1
+		res.ErrMsg = "数据类型有误"
+		return &res, nil
+	}
+	log.Println("id:", id)
+	if id < 1 {
+		res.ErrCode = -1
+		res.ErrMsg = fmt.Sprintf("data %s mysql memory errors", in.MsgType)
+		return &res, nil
+	}
+
+	var InfoId consumer.PublishId
+	InfoId.InformationId = se.SE.EncodeString(mc.InterfaceToStr(id)) //信息id加密
+	res.PublishId = &InfoId
+	appendInfo := make(map[string]interface{})
+	if in.Title != "" {
+		appendInfo["title"] = in.Title
+	}
+	if in.Detail != "" {
+		appendInfo["detail"] = in.Detail
+	}
+	if in.Attach != "" {
+		appendInfo["attach"] = mc.StringToMap(in.Attach)
+	}
+	nsq, err := util.NewNsqInfo(model.NsqConfig.Ip, model.NsqConfig.Topic, mc.InterfaceToStr(id), "1", in.MsgType, false, appendInfo)
+	if err != nil || nsq.NsqPushInfo() != nil {
+		res.ErrCode = -1
+		res.ErrMsg = fmt.Sprintf("添加nsq失败;%s", err.Error())
+	}
+	entNameKye := fmt.Sprintf("userEntName_%s_%d_%s", in.UserId, id, in.MsgType)
+	redis.Put("other", entNameKye, in.EntName, 3*24*60*60)
+	return &res, nil
+}

+ 62 - 0
rpc/consumer/internal/logic/statusquerylogic.go

@@ -0,0 +1,62 @@
+package logic
+
+import (
+	se "app.yhyue.com/moapp/jybase/encrypt"
+	"context"
+	"jyInfo/rpc/model"
+
+	"jyInfo/rpc/consumer/consumer"
+	"jyInfo/rpc/consumer/internal/svc"
+
+	mc "app.yhyue.com/moapp/jybase/common"
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type StatusQueryLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewStatusQueryLogic(ctx context.Context, svcCtx *svc.ServiceContext) *StatusQueryLogic {
+	return &StatusQueryLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 信息审核状态查询
+func (l *StatusQueryLogic) StatusQuery(in *consumer.StatusReq) (*consumer.StatusResp, error) {
+	msgId := se.SE.DecodeString(in.MsgId) //信息id解密
+	if in.Type == 3 {
+		data := model.Mysql.FindOne("supply_info", map[string]interface{}{"id": msgId}, "", "")
+		if len(*data) > 0 {
+			var statusData consumer.StatusData
+			statusData.Status = mc.InterfaceToStr((*data)["status"])
+			statusData.Published = mc.InterfaceToStr((*data)["published"])
+			return &consumer.StatusResp{
+				ErrCode: 0,
+				ErrMsg:  "",
+				Data:    &statusData,
+			}, nil
+		}
+	} else {
+		data := model.Mysql.FindOne("information", map[string]interface{}{"id": msgId}, "", "")
+		if len(*data) > 0 {
+			var statusData consumer.StatusData
+			statusData.Status = mc.InterfaceToStr((*data)["status"])
+			statusData.Published = mc.InterfaceToStr((*data)["published"])
+			return &consumer.StatusResp{
+				ErrCode: 0,
+				ErrMsg:  "",
+				Data:    &statusData,
+			}, nil
+		}
+	}
+	return &consumer.StatusResp{
+		ErrCode: -1,
+		ErrMsg:  "无数据",
+		Data:    nil,
+	}, nil
+}

+ 84 - 0
rpc/consumer/internal/logic/supplyinfodetaillogic.go

@@ -0,0 +1,84 @@
+package logic
+
+import (
+	se "app.yhyue.com/moapp/jybase/encrypt"
+	"context"
+	"jyInfo/rpc/model"
+	es "jyInfo/rpc/model/es"
+	"log"
+	"strconv"
+
+	"jyInfo/rpc/consumer/consumer"
+	"jyInfo/rpc/consumer/internal/svc"
+
+	mc "app.yhyue.com/moapp/jybase/common"
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type SupplyInfoDetailLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewSupplyInfoDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SupplyInfoDetailLogic {
+	return &SupplyInfoDetailLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 供应信息详情
+func (l *SupplyInfoDetailLogic) SupplyInfoDetail(in *consumer.StatusReq) (*consumer.SupplyInfoDetailResp, error) {
+	var resp consumer.SupplyInfoDetailResp
+	msgId := se.SE.DecodeString(in.MsgId) //信息id解密
+	if in.Type == 0 {
+		data := model.Mysql.FindOne("supply_info", map[string]interface{}{"id": msgId}, "", "")
+		if *data != nil {
+			var info consumer.SupplyInfoDetailData
+			info.Title = mc.InterfaceToStr((*data)["title"])
+			info.Detail = mc.InterfaceToStr((*data)["detail"])
+			info.PublishTime = mc.InterfaceToStr((*data)["publish_time"])
+			info.ValidityTime = mc.InterfaceToStr((*data)["validity_time"])
+			info.Province = mc.InterfaceToStr((*data)["province"])
+			info.City = mc.InterfaceToStr((*data)["city"])
+			var conctact consumer.InfoDetailContact
+			conctact.Phone = mc.InterfaceToStr((*data)["contact_phone"])
+			conctact.Name = mc.InterfaceToStr((*data)["contact_person"])
+			conctact.Overt = mc.Int64All((*data)["contact_overt"])
+			info.InfoDetailContact = &conctact
+			info.Attach = mc.InterfaceToStr((*data)["attach"])
+			info.EntId = mc.InterfaceToStr((*data)["ent_id"])
+			info.Id = in.MsgId
+			//其他供应信息
+			otherData := es.GetSupplyOtherInfoByEntid(info.EntId, 5)
+			if otherData != nil && len(*otherData) > 0 {
+				for _, v := range *otherData {
+					if info.Id == se.SE.EncodeString(mc.InterfaceToStr(v["_id"])) {
+						continue
+					}
+					otherSupplyInfo := consumer.OtherSupplyInfoByEnt{
+						Title:       mc.InterfaceToStr(v["title"]),
+						Id:          se.SE.EncodeString(mc.InterfaceToStr(v["_id"])),
+						Province:    mc.InterfaceToStr(v["province"]),
+						City:        mc.InterfaceToStr(v["city"]),
+						PublishTime: strconv.FormatInt(mc.Int64All(v["publish_time"]), 10),
+						CreateTime:  strconv.FormatInt(mc.Int64All(v["create_time"]), 10),
+						EntId:       se.SE.EncodeString(mc.InterfaceToStr(v["ent_id"])),
+					}
+					info.OtherSupplyInfo = append(info.OtherSupplyInfo, &otherSupplyInfo)
+				}
+			}
+			log.Println(len(*otherData), "otherData:", info.OtherSupplyInfo)
+			resp.Data = &info
+			return &resp, nil
+		}
+		resp.ErrCode = -1
+		resp.ErrMsg = "未查询到相关数据"
+		resp.Data = nil
+		return &resp, nil
+	}
+
+	return &consumer.SupplyInfoDetailResp{}, nil
+}

+ 63 - 0
rpc/consumer/internal/logic/supplyinfosearchlogic.go

@@ -0,0 +1,63 @@
+package logic
+
+import (
+	se "app.yhyue.com/moapp/jybase/encrypt"
+	"context"
+	"jyInfo/rpc/model/es"
+	"log"
+
+	"jyInfo/rpc/consumer/consumer"
+	"jyInfo/rpc/consumer/internal/svc"
+
+	"app.yhyue.com/moapp/jybase/common"
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type SupplyInfoSearchLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewSupplyInfoSearchLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SupplyInfoSearchLogic {
+	return &SupplyInfoSearchLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 供应信息查询
+func (l *SupplyInfoSearchLogic) SupplyInfoSearch(in *consumer.SupplyInfoSearchReq) (*consumer.SupplyInfoSearchResp, error) {
+	list, err := model.GetSupplyInfoList(in)
+	var infos []*consumer.SupplyInfo
+	if err == nil && len(*list) > 0 {
+		for _, v := range *list {
+			detail := []string{}
+			if v["highlight"] != nil {
+				highlight, ok := v["highlight"].(map[string][]string)
+				if ok && highlight["detail"] != nil {
+					detail = highlight["detail"]
+				}
+			}
+			info := consumer.SupplyInfo{
+				Title:       common.InterfaceToStr(v["title"]),
+				Detail:      common.InterfaceToStr(v["detail"]),
+				Id:          se.SE.EncodeString(common.InterfaceToStr(v["_id"])),
+				Province:    common.InterfaceToStr(v["province"]),
+				City:        common.InterfaceToStr(v["city"]),
+				PublishTime: common.InterfaceToStr(v["publish_time"]),
+				Highlight:   detail,
+			}
+			infos = append(infos, &info)
+		}
+		log.Println("infos:", infos)
+		return &consumer.SupplyInfoSearchResp{
+			Data: infos,
+		}, nil
+	}
+	return &consumer.SupplyInfoSearchResp{
+		ErrCode: -1,
+		ErrMsg:  "暂无数据",
+	}, nil
+}

+ 77 - 0
rpc/consumer/internal/server/consumerserver.go

@@ -0,0 +1,77 @@
+// Code generated by goctl. DO NOT EDIT!
+// Source: consumer.proto
+
+package server
+
+import (
+	"context"
+
+	"jyInfo/rpc/consumer/internal/logic"
+	"jyInfo/rpc/consumer/internal/svc"
+	"jyInfo/rpc/consumer/type/consumer"
+)
+
+type ConsumerServer struct {
+	svcCtx *svc.ServiceContext
+	consumer.UnimplementedConsumerServer
+}
+
+func NewConsumerServer(svcCtx *svc.ServiceContext) *ConsumerServer {
+	return &ConsumerServer{
+		svcCtx: svcCtx,
+	}
+}
+
+// 发布信息
+func (s *ConsumerServer) PublishInfo(ctx context.Context, in *consumer.PublishInfoReq) (*consumer.PublishInfoResp, error) {
+	l := logic.NewPublishInfoLogic(ctx, s.svcCtx)
+	return l.PublishInfo(in)
+}
+
+// 根据用户id获取当月已发布信息数量
+func (s *ConsumerServer) InfoByUserId(ctx context.Context, in *consumer.UserIdReq) (*consumer.InfoByUserIdResp, error) {
+	l := logic.NewInfoByUserIdLogic(ctx, s.svcCtx)
+	return l.InfoByUserId(in)
+}
+
+// 关联公告
+func (s *ConsumerServer) InfoRelated(ctx context.Context, in *consumer.UserIdReq) (*consumer.InfoRelatedResp, error) {
+	l := logic.NewInfoRelatedLogic(ctx, s.svcCtx)
+	return l.InfoRelated(in)
+}
+
+// 我的发布列表
+func (s *ConsumerServer) MyPublishList(ctx context.Context, in *consumer.MyPublishListReq) (*consumer.MyPublishListResp, error) {
+	l := logic.NewMyPublishListLogic(ctx, s.svcCtx)
+	return l.MyPublishList(in)
+}
+
+// 更新发布的信息0:获取详情;1:物理删除()
+func (s *ConsumerServer) InfoChange(ctx context.Context, in *consumer.InfoDetailReq) (*consumer.InfoDetailResp, error) {
+	l := logic.NewInfoChangeLogic(ctx, s.svcCtx)
+	return l.InfoChange(in)
+}
+
+// 信息审核状态查询
+func (s *ConsumerServer) StatusQuery(ctx context.Context, in *consumer.StatusReq) (*consumer.StatusResp, error) {
+	l := logic.NewStatusQueryLogic(ctx, s.svcCtx)
+	return l.StatusQuery(in)
+}
+
+// 供应信息查询
+func (s *ConsumerServer) SupplyInfoSearch(ctx context.Context, in *consumer.SupplyInfoSearchReq) (*consumer.SupplyInfoSearchResp, error) {
+	l := logic.NewSupplyInfoSearchLogic(ctx, s.svcCtx)
+	return l.SupplyInfoSearch(in)
+}
+
+// 供应信息详情(前端页面查询结果详情请求地址)
+func (s *ConsumerServer) SupplyInfoDetail(ctx context.Context, in *consumer.StatusReq) (*consumer.SupplyInfoDetailResp, error) {
+	l := logic.NewSupplyInfoDetailLogic(ctx, s.svcCtx)
+	return l.SupplyInfoDetail(in)
+}
+
+// 上传附件
+func (s *ConsumerServer) InfoFileUpload(ctx context.Context, in *consumer.InfoFileUploadReq) (*consumer.InfoFileUploadResp, error) {
+	l := logic.NewInfoFileUploadLogic(ctx, s.svcCtx)
+	return l.InfoFileUpload(in)
+}

+ 77 - 0
rpc/consumer/internal/server/informationserver.go

@@ -0,0 +1,77 @@
+// Code generated by goctl. DO NOT EDIT!
+// Source: consumer.proto
+
+package server
+
+import (
+	"context"
+
+	"jyInfo/rpc/consumer/internal/logic"
+	"jyInfo/rpc/consumer/internal/svc"
+	"jyInfo/rpc/consumer/type/consumer"
+)
+
+type InformationServer struct {
+	svcCtx *svc.ServiceContext
+	consumer.UnimplementedConsumerServer
+}
+
+func NewInformationServer(svcCtx *svc.ServiceContext) *InformationServer {
+	return &InformationServer{
+		svcCtx: svcCtx,
+	}
+}
+
+// 发布信息
+func (s *InformationServer) PublishInfo(ctx context.Context, in *consumer.PublishInfoReq) (*consumer.PublishInfoResp, error) {
+	l := logic.NewPublishInfoLogic(ctx, s.svcCtx)
+	return l.PublishInfo(in)
+}
+
+// 根据用户id获取当月已发布信息数量
+func (s *InformationServer) InfoByUserId(ctx context.Context, in *consumer.UserIdReq) (*consumer.InfoByUserIdResp, error) {
+	l := logic.NewInfoByUserIdLogic(ctx, s.svcCtx)
+	return l.InfoByUserId(in)
+}
+
+// 关联公告
+func (s *InformationServer) InfoRelated(ctx context.Context, in *consumer.UserIdReq) (*consumer.InfoRelatedResp, error) {
+	l := logic.NewInfoRelatedLogic(ctx, s.svcCtx)
+	return l.InfoRelated(in)
+}
+
+// 我的发布列表
+func (s *InformationServer) MyPublishList(ctx context.Context, in *consumer.MyPublishListReq) (*consumer.MyPublishListResp, error) {
+	l := logic.NewMyPublishListLogic(ctx, s.svcCtx)
+	return l.MyPublishList(in)
+}
+
+// 更新发布的信息0:获取详情;1:物理删除()
+func (s *InformationServer) InfoChange(ctx context.Context, in *consumer.InfoDetailReq) (*consumer.InfoDetailResp, error) {
+	l := logic.NewInfoChangeLogic(ctx, s.svcCtx)
+	return l.InfoChange(in)
+}
+
+// 信息审核状态查询
+func (s *InformationServer) StatusQuery(ctx context.Context, in *consumer.StatusReq) (*consumer.StatusResp, error) {
+	l := logic.NewStatusQueryLogic(ctx, s.svcCtx)
+	return l.StatusQuery(in)
+}
+
+// 供应信息查询
+func (s *InformationServer) SupplyInfoSearch(ctx context.Context, in *consumer.SupplyInfoSearchReq) (*consumer.SupplyInfoSearchResp, error) {
+	l := logic.NewSupplyInfoSearchLogic(ctx, s.svcCtx)
+	return l.SupplyInfoSearch(in)
+}
+
+// 供应信息详情(前端页面查询结果详情请求地址)
+func (s *InformationServer) SupplyInfoDetail(ctx context.Context, in *consumer.StatusReq) (*consumer.SupplyInfoDetailResp, error) {
+	l := logic.NewSupplyInfoDetailLogic(ctx, s.svcCtx)
+	return l.SupplyInfoDetail(in)
+}
+
+// 上传附件
+func (s *InformationServer) InfoFileUpload(ctx context.Context, in *consumer.InfoFileUploadReq) (*consumer.InfoFileUploadResp, error) {
+	l := logic.NewInfoFileUploadLogic(ctx, s.svcCtx)
+	return l.InfoFileUpload(in)
+}

+ 13 - 0
rpc/consumer/internal/svc/servicecontext.go

@@ -0,0 +1,13 @@
+package svc
+
+import "jyInfo/rpc/consumer/internal/config"
+
+type ServiceContext struct {
+	Config config.Config
+}
+
+func NewServiceContext(c config.Config) *ServiceContext {
+	return &ServiceContext{
+		Config: c,
+	}
+}

+ 3677 - 0
rpc/consumer/type/consumer/consumer.pb.go

@@ -0,0 +1,3677 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.23.0
+// 	protoc        v3.15.5
+// source: consumer.proto
+
+package consumer
+
+import (
+	proto "github.com/golang/protobuf/proto"
+	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)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+//信息发布Req
+type PublishInfoReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Title     string   `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`         //信息标题最长50
+	MsgType   string   `protobuf:"bytes,2,opt,name=msgType,proto3" json:"msgType,omitempty"`     //信息类型1:招标信息 2:采购信息 3:供应信息
+	RelatedId string   `protobuf:"bytes,3,opt,name=relatedId,proto3" json:"relatedId,omitempty"` //关联公告id
+	Code      string   `protobuf:"bytes,4,opt,name=code,proto3" json:"code,omitempty"`           //项目编码
+	Province  string   `protobuf:"bytes,5,opt,name=province,proto3" json:"province,omitempty"`   //省份
+	City      string   `protobuf:"bytes,6,opt,name=city,proto3" json:"city,omitempty"`           //城市
+	Industry  []string `protobuf:"bytes,7,rep,name=industry,proto3" json:"industry,omitempty"`   //行业信息
+	Buyer     string   `protobuf:"bytes,8,opt,name=buyer,proto3" json:"buyer,omitempty"`         //采购单位
+	Budget    float64  `protobuf:"fixed64,9,opt,name=budget,proto3" json:"budget,omitempty"`     //预算
+	Winner    string   `protobuf:"bytes,10,opt,name=winner,proto3" json:"winner,omitempty"`      //中标单位
+	Amount    float64  `protobuf:"fixed64,11,opt,name=amount,proto3" json:"amount,omitempty"`    //中标金额
+	Detail    string   `protobuf:"bytes,12,opt,name=detail,proto3" json:"detail,omitempty"`      //正文信息
+	Attach    string   `protobuf:"bytes,13,opt,name=attach,proto3" json:"attach,omitempty"`      //附件
+	UserId    string   `protobuf:"bytes,14,opt,name=userId,proto3" json:"userId,omitempty"`      //用户id
+	AppId     int64    `protobuf:"varint,15,opt,name=appId,proto3" json:"appId,omitempty"`       //剑鱼标识 默认10000
+	EntId     string   `protobuf:"bytes,16,opt,name=entId,proto3" json:"entId,omitempty"`        //剑鱼标识 默认10000
+	Contact   *Contact `protobuf:"bytes,17,opt,name=contact,proto3" json:"contact,omitempty"`
+	Deadline  string   `protobuf:"bytes,18,opt,name=deadline,proto3" json:"deadline,omitempty"` //信息有效期
+	Phone     string   `protobuf:"bytes,19,opt,name=phone,proto3" json:"phone,omitempty"`       //信息有效期
+	EntName   string   `protobuf:"bytes,20,opt,name=entName,proto3" json:"entName,omitempty"`   //企业名称
+}
+
+func (x *PublishInfoReq) Reset() {
+	*x = PublishInfoReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PublishInfoReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PublishInfoReq) ProtoMessage() {}
+
+func (x *PublishInfoReq) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_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 PublishInfoReq.ProtoReflect.Descriptor instead.
+func (*PublishInfoReq) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *PublishInfoReq) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+func (x *PublishInfoReq) GetMsgType() string {
+	if x != nil {
+		return x.MsgType
+	}
+	return ""
+}
+
+func (x *PublishInfoReq) GetRelatedId() string {
+	if x != nil {
+		return x.RelatedId
+	}
+	return ""
+}
+
+func (x *PublishInfoReq) GetCode() string {
+	if x != nil {
+		return x.Code
+	}
+	return ""
+}
+
+func (x *PublishInfoReq) GetProvince() string {
+	if x != nil {
+		return x.Province
+	}
+	return ""
+}
+
+func (x *PublishInfoReq) GetCity() string {
+	if x != nil {
+		return x.City
+	}
+	return ""
+}
+
+func (x *PublishInfoReq) GetIndustry() []string {
+	if x != nil {
+		return x.Industry
+	}
+	return nil
+}
+
+func (x *PublishInfoReq) GetBuyer() string {
+	if x != nil {
+		return x.Buyer
+	}
+	return ""
+}
+
+func (x *PublishInfoReq) GetBudget() float64 {
+	if x != nil {
+		return x.Budget
+	}
+	return 0
+}
+
+func (x *PublishInfoReq) GetWinner() string {
+	if x != nil {
+		return x.Winner
+	}
+	return ""
+}
+
+func (x *PublishInfoReq) GetAmount() float64 {
+	if x != nil {
+		return x.Amount
+	}
+	return 0
+}
+
+func (x *PublishInfoReq) GetDetail() string {
+	if x != nil {
+		return x.Detail
+	}
+	return ""
+}
+
+func (x *PublishInfoReq) GetAttach() string {
+	if x != nil {
+		return x.Attach
+	}
+	return ""
+}
+
+func (x *PublishInfoReq) GetUserId() string {
+	if x != nil {
+		return x.UserId
+	}
+	return ""
+}
+
+func (x *PublishInfoReq) GetAppId() int64 {
+	if x != nil {
+		return x.AppId
+	}
+	return 0
+}
+
+func (x *PublishInfoReq) GetEntId() string {
+	if x != nil {
+		return x.EntId
+	}
+	return ""
+}
+
+func (x *PublishInfoReq) GetContact() *Contact {
+	if x != nil {
+		return x.Contact
+	}
+	return nil
+}
+
+func (x *PublishInfoReq) GetDeadline() string {
+	if x != nil {
+		return x.Deadline
+	}
+	return ""
+}
+
+func (x *PublishInfoReq) GetPhone() string {
+	if x != nil {
+		return x.Phone
+	}
+	return ""
+}
+
+func (x *PublishInfoReq) GetEntName() string {
+	if x != nil {
+		return x.EntName
+	}
+	return ""
+}
+
+type Contact struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Person string `protobuf:"bytes,1,opt,name=person,proto3" json:"person,omitempty"` //联系人姓名
+	Phone  string `protobuf:"bytes,2,opt,name=phone,proto3" json:"phone,omitempty"`   //手机号
+	Overt  int64  `protobuf:"varint,3,opt,name=overt,proto3" json:"overt,omitempty"`  //是否公开联系方式 1:展示;2:隐藏
+}
+
+func (x *Contact) Reset() {
+	*x = Contact{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Contact) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Contact) ProtoMessage() {}
+
+func (x *Contact) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_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 Contact.ProtoReflect.Descriptor instead.
+func (*Contact) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *Contact) GetPerson() string {
+	if x != nil {
+		return x.Person
+	}
+	return ""
+}
+
+func (x *Contact) GetPhone() string {
+	if x != nil {
+		return x.Phone
+	}
+	return ""
+}
+
+func (x *Contact) GetOvert() int64 {
+	if x != nil {
+		return x.Overt
+	}
+	return 0
+}
+
+//信息发布Resp
+type PublishInfoResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode   int64      `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg    string     `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	PublishId *PublishId `protobuf:"bytes,3,opt,name=PublishId,proto3" json:"PublishId,omitempty"`
+}
+
+func (x *PublishInfoResp) Reset() {
+	*x = PublishInfoResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PublishInfoResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PublishInfoResp) ProtoMessage() {}
+
+func (x *PublishInfoResp) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_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 PublishInfoResp.ProtoReflect.Descriptor instead.
+func (*PublishInfoResp) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *PublishInfoResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *PublishInfoResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *PublishInfoResp) GetPublishId() *PublishId {
+	if x != nil {
+		return x.PublishId
+	}
+	return nil
+}
+
+type PublishId struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	InformationId string `protobuf:"bytes,1,opt,name=information_id,json=informationId,proto3" json:"information_id,omitempty"` //发布的信息id
+}
+
+func (x *PublishId) Reset() {
+	*x = PublishId{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PublishId) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PublishId) ProtoMessage() {}
+
+func (x *PublishId) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[3]
+	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 PublishId.ProtoReflect.Descriptor instead.
+func (*PublishId) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *PublishId) GetInformationId() string {
+	if x != nil {
+		return x.InformationId
+	}
+	return ""
+}
+
+//用户id:1:用户已发布信息数量Req
+type UserIdReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UserId  string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"` //用户id
+	AppId   int64  `protobuf:"varint,2,opt,name=appId,proto3" json:"appId,omitempty"`  //剑鱼标识 默认10000
+	Match   string `protobuf:"bytes,3,opt,name=match,proto3" json:"match,omitempty"`
+	MsqType int64  `protobuf:"varint,4,opt,name=msqType,proto3" json:"msqType,omitempty"`
+}
+
+func (x *UserIdReq) Reset() {
+	*x = UserIdReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *UserIdReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UserIdReq) ProtoMessage() {}
+
+func (x *UserIdReq) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[4]
+	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 UserIdReq.ProtoReflect.Descriptor instead.
+func (*UserIdReq) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *UserIdReq) GetUserId() string {
+	if x != nil {
+		return x.UserId
+	}
+	return ""
+}
+
+func (x *UserIdReq) GetAppId() int64 {
+	if x != nil {
+		return x.AppId
+	}
+	return 0
+}
+
+func (x *UserIdReq) GetMatch() string {
+	if x != nil {
+		return x.Match
+	}
+	return ""
+}
+
+func (x *UserIdReq) GetMsqType() int64 {
+	if x != nil {
+		return x.MsqType
+	}
+	return 0
+}
+
+//用户已发布信息数量Resp
+type InfoByUserIdResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64             `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string            `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	Results *InfoByUserIdData `protobuf:"bytes,3,opt,name=results,proto3" json:"results,omitempty"`
+}
+
+func (x *InfoByUserIdResp) Reset() {
+	*x = InfoByUserIdResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoByUserIdResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoByUserIdResp) ProtoMessage() {}
+
+func (x *InfoByUserIdResp) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[5]
+	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 InfoByUserIdResp.ProtoReflect.Descriptor instead.
+func (*InfoByUserIdResp) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *InfoByUserIdResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *InfoByUserIdResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *InfoByUserIdResp) GetResults() *InfoByUserIdData {
+	if x != nil {
+		return x.Results
+	}
+	return nil
+}
+
+type InfoByUserIdData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Total   int64 `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"`     //供应总量
+	Surplus int64 `protobuf:"varint,2,opt,name=surplus,proto3" json:"surplus,omitempty"` //供应剩余
+}
+
+func (x *InfoByUserIdData) Reset() {
+	*x = InfoByUserIdData{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoByUserIdData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoByUserIdData) ProtoMessage() {}
+
+func (x *InfoByUserIdData) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[6]
+	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 InfoByUserIdData.ProtoReflect.Descriptor instead.
+func (*InfoByUserIdData) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *InfoByUserIdData) GetTotal() int64 {
+	if x != nil {
+		return x.Total
+	}
+	return 0
+}
+
+func (x *InfoByUserIdData) GetSurplus() int64 {
+	if x != nil {
+		return x.Surplus
+	}
+	return 0
+}
+
+//关联公告Resp
+type InfoRelatedResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64       `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string      `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	Data    []*InfoData `protobuf:"bytes,3,rep,name=data,proto3" json:"data,omitempty"`
+}
+
+func (x *InfoRelatedResp) Reset() {
+	*x = InfoRelatedResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoRelatedResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoRelatedResp) ProtoMessage() {}
+
+func (x *InfoRelatedResp) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[7]
+	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 InfoRelatedResp.ProtoReflect.Descriptor instead.
+func (*InfoRelatedResp) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *InfoRelatedResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *InfoRelatedResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *InfoRelatedResp) GetData() []*InfoData {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+//公告信息InfoRelatedResp
+type InfoData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id    string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`       //关联公告id
+	Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` //关联公告标题
+}
+
+func (x *InfoData) Reset() {
+	*x = InfoData{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoData) ProtoMessage() {}
+
+func (x *InfoData) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[8]
+	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 InfoData.ProtoReflect.Descriptor instead.
+func (*InfoData) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *InfoData) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *InfoData) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+//我的发布列表Req
+type MyPublishListReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UserId       string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"`              //用户id
+	Match        string `protobuf:"bytes,2,opt,name=match,proto3" json:"match,omitempty"`                //检索内容
+	MsgType      int64  `protobuf:"varint,3,opt,name=msgType,proto3" json:"msgType,omitempty"`           //信息类型 1:招标信息 2:采购信息 3:供应信息
+	ReviewStatus int64  `protobuf:"varint,4,opt,name=reviewStatus,proto3" json:"reviewStatus,omitempty"` //审核状态 1:待审核|2:审核通过|3:审核不通过
+	PageSize     int64  `protobuf:"varint,5,opt,name=pageSize,proto3" json:"pageSize,omitempty"`         //每页数据量,默认10
+	PageIndex    int64  `protobuf:"varint,6,opt,name=pageIndex,proto3" json:"pageIndex,omitempty"`       //页码;默认第一页
+	AppId        int64  `protobuf:"varint,7,opt,name=appId,proto3" json:"appId,omitempty"`               //剑鱼标识 默认10000
+}
+
+func (x *MyPublishListReq) Reset() {
+	*x = MyPublishListReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *MyPublishListReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MyPublishListReq) ProtoMessage() {}
+
+func (x *MyPublishListReq) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[9]
+	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 MyPublishListReq.ProtoReflect.Descriptor instead.
+func (*MyPublishListReq) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *MyPublishListReq) GetUserId() string {
+	if x != nil {
+		return x.UserId
+	}
+	return ""
+}
+
+func (x *MyPublishListReq) GetMatch() string {
+	if x != nil {
+		return x.Match
+	}
+	return ""
+}
+
+func (x *MyPublishListReq) GetMsgType() int64 {
+	if x != nil {
+		return x.MsgType
+	}
+	return 0
+}
+
+func (x *MyPublishListReq) GetReviewStatus() int64 {
+	if x != nil {
+		return x.ReviewStatus
+	}
+	return 0
+}
+
+func (x *MyPublishListReq) GetPageSize() int64 {
+	if x != nil {
+		return x.PageSize
+	}
+	return 0
+}
+
+func (x *MyPublishListReq) GetPageIndex() int64 {
+	if x != nil {
+		return x.PageIndex
+	}
+	return 0
+}
+
+func (x *MyPublishListReq) GetAppId() int64 {
+	if x != nil {
+		return x.AppId
+	}
+	return 0
+}
+
+//我的发布列表Resp
+type MyPublishListResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64              `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string             `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	Results *MyPublishListData `protobuf:"bytes,3,opt,name=results,proto3" json:"results,omitempty"`
+}
+
+func (x *MyPublishListResp) Reset() {
+	*x = MyPublishListResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *MyPublishListResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MyPublishListResp) ProtoMessage() {}
+
+func (x *MyPublishListResp) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[10]
+	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 MyPublishListResp.ProtoReflect.Descriptor instead.
+func (*MyPublishListResp) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *MyPublishListResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *MyPublishListResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *MyPublishListResp) GetResults() *MyPublishListData {
+	if x != nil {
+		return x.Results
+	}
+	return nil
+}
+
+type MyPublishListData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Total       int64       `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"` //总页数 仅第一次请求返回
+	Amount      int64       `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"`
+	InReview    int64       `protobuf:"varint,3,opt,name=inReview,proto3" json:"inReview,omitempty"`
+	Approved    int64       `protobuf:"varint,4,opt,name=approved,proto3" json:"approved,omitempty"`
+	AuditFailed int64       `protobuf:"varint,5,opt,name=auditFailed,proto3" json:"auditFailed,omitempty"`
+	List        []*ListResp `protobuf:"bytes,6,rep,name=list,proto3" json:"list,omitempty"` //信息列表
+}
+
+func (x *MyPublishListData) Reset() {
+	*x = MyPublishListData{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *MyPublishListData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MyPublishListData) ProtoMessage() {}
+
+func (x *MyPublishListData) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[11]
+	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 MyPublishListData.ProtoReflect.Descriptor instead.
+func (*MyPublishListData) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *MyPublishListData) GetTotal() int64 {
+	if x != nil {
+		return x.Total
+	}
+	return 0
+}
+
+func (x *MyPublishListData) GetAmount() int64 {
+	if x != nil {
+		return x.Amount
+	}
+	return 0
+}
+
+func (x *MyPublishListData) GetInReview() int64 {
+	if x != nil {
+		return x.InReview
+	}
+	return 0
+}
+
+func (x *MyPublishListData) GetApproved() int64 {
+	if x != nil {
+		return x.Approved
+	}
+	return 0
+}
+
+func (x *MyPublishListData) GetAuditFailed() int64 {
+	if x != nil {
+		return x.AuditFailed
+	}
+	return 0
+}
+
+func (x *MyPublishListData) GetList() []*ListResp {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+//我的发布列表Resp-list
+type ListResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Title        string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`                //标题
+	Id           string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`                      //信息id
+	ReviewStatus int64  `protobuf:"varint,3,opt,name=reviewStatus,proto3" json:"reviewStatus,omitempty"` //审核状态 1:待审核|2:审核通过|3:审核不通过
+	MsgType      int64  `protobuf:"varint,4,opt,name=msgType,proto3" json:"msgType,omitempty"`           //信息类型 1:招标信息 2:采购信息 3:供应信息
+	CreateTime   string `protobuf:"bytes,5,opt,name=createTime,proto3" json:"createTime,omitempty"`      //审核时间
+}
+
+func (x *ListResp) Reset() {
+	*x = ListResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ListResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListResp) ProtoMessage() {}
+
+func (x *ListResp) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[12]
+	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 ListResp.ProtoReflect.Descriptor instead.
+func (*ListResp) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{12}
+}
+
+func (x *ListResp) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+func (x *ListResp) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *ListResp) GetReviewStatus() int64 {
+	if x != nil {
+		return x.ReviewStatus
+	}
+	return 0
+}
+
+func (x *ListResp) GetMsgType() int64 {
+	if x != nil {
+		return x.MsgType
+	}
+	return 0
+}
+
+func (x *ListResp) GetCreateTime() string {
+	if x != nil {
+		return x.CreateTime
+	}
+	return ""
+}
+
+//发布的信息详情Req+发布信息删除Req+发布信息更新Req
+type InfoDetailReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UserId  string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"`    //用户id
+	MsgId   string `protobuf:"bytes,2,opt,name=msgId,proto3" json:"msgId,omitempty"`      //信息id
+	Type    int64  `protobuf:"varint,3,opt,name=type,proto3" json:"type,omitempty"`       //处理信息类型:0:获取发布信息详情(默认);1:删除发布的信息;2:更新发布信息
+	AppId   int64  `protobuf:"varint,4,opt,name=appId,proto3" json:"appId,omitempty"`     //剑鱼标识 默认10000
+	MsgType int64  `protobuf:"varint,5,opt,name=msgType,proto3" json:"msgType,omitempty"` //信息类型 1:招标信息 2:采购信息 3:供应信息
+}
+
+func (x *InfoDetailReq) Reset() {
+	*x = InfoDetailReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoDetailReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoDetailReq) ProtoMessage() {}
+
+func (x *InfoDetailReq) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[13]
+	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 InfoDetailReq.ProtoReflect.Descriptor instead.
+func (*InfoDetailReq) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *InfoDetailReq) GetUserId() string {
+	if x != nil {
+		return x.UserId
+	}
+	return ""
+}
+
+func (x *InfoDetailReq) GetMsgId() string {
+	if x != nil {
+		return x.MsgId
+	}
+	return ""
+}
+
+func (x *InfoDetailReq) GetType() int64 {
+	if x != nil {
+		return x.Type
+	}
+	return 0
+}
+
+func (x *InfoDetailReq) GetAppId() int64 {
+	if x != nil {
+		return x.AppId
+	}
+	return 0
+}
+
+func (x *InfoDetailReq) GetMsgType() int64 {
+	if x != nil {
+		return x.MsgType
+	}
+	return 0
+}
+
+//发布的信息详情Resp
+type InfoDetailResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64           `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string          `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	Results *InfoDetailData `protobuf:"bytes,3,opt,name=results,proto3" json:"results,omitempty"`
+}
+
+func (x *InfoDetailResp) Reset() {
+	*x = InfoDetailResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoDetailResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoDetailResp) ProtoMessage() {}
+
+func (x *InfoDetailResp) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[14]
+	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 InfoDetailResp.ProtoReflect.Descriptor instead.
+func (*InfoDetailResp) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *InfoDetailResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *InfoDetailResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *InfoDetailResp) GetResults() *InfoDetailData {
+	if x != nil {
+		return x.Results
+	}
+	return nil
+}
+
+type InfoDetailData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	MsgType           int64              `protobuf:"varint,1,opt,name=msgType,proto3" json:"msgType,omitempty"`                     //信息类型
+	Code              string             `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"`                            //项目代码
+	Province          string             `protobuf:"bytes,3,opt,name=province,proto3" json:"province,omitempty"`                    //省份
+	City              string             `protobuf:"bytes,4,opt,name=city,proto3" json:"city,omitempty"`                            //城市
+	Industry          []string           `protobuf:"bytes,5,rep,name=industry,proto3" json:"industry,omitempty"`                    //行业列表
+	Buyer             string             `protobuf:"bytes,6,opt,name=buyer,proto3" json:"buyer,omitempty"`                          //采购单位
+	Budget            float64            `protobuf:"fixed64,7,opt,name=budget,proto3" json:"budget,omitempty"`                      //预算
+	Winner            string             `protobuf:"bytes,8,opt,name=winner,proto3" json:"winner,omitempty"`                        //中标企业
+	Amount            float64            `protobuf:"fixed64,9,opt,name=amount,proto3" json:"amount,omitempty"`                      //中标金额
+	Detail            string             `protobuf:"bytes,10,opt,name=detail,proto3" json:"detail,omitempty"`                       //详情
+	Attach            string             `protobuf:"bytes,11,opt,name=attach,proto3" json:"attach,omitempty"`                       //附件列表
+	CreateTime        string             `protobuf:"bytes,12,opt,name=createTime,proto3" json:"createTime,omitempty"`               //创建时间
+	Title             string             `protobuf:"bytes,13,opt,name=title,proto3" json:"title,omitempty"`                         //信息类型
+	ValidityTime      string             `protobuf:"bytes,14,opt,name=validityTime,proto3" json:"validityTime,omitempty"`           //供应信息有效期
+	PublishTime       string             `protobuf:"bytes,15,opt,name=publishTime,proto3" json:"publishTime,omitempty"`             //发布时间
+	AppId             int64              `protobuf:"varint,16,opt,name=appId,proto3" json:"appId,omitempty"`                        //发布时间
+	InfoDetailRelated *Related           `protobuf:"bytes,17,opt,name=InfoDetailRelated,proto3" json:"InfoDetailRelated,omitempty"` //关联信息
+	InfoDetailReview  *Review            `protobuf:"bytes,18,opt,name=InfoDetailReview,proto3" json:"InfoDetailReview,omitempty"`   //审核
+	InfoDetailContact *InfoDetailContact `protobuf:"bytes,19,opt,name=infoDetailContact,proto3" json:"infoDetailContact,omitempty"` //联系人内容
+}
+
+func (x *InfoDetailData) Reset() {
+	*x = InfoDetailData{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoDetailData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoDetailData) ProtoMessage() {}
+
+func (x *InfoDetailData) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[15]
+	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 InfoDetailData.ProtoReflect.Descriptor instead.
+func (*InfoDetailData) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *InfoDetailData) GetMsgType() int64 {
+	if x != nil {
+		return x.MsgType
+	}
+	return 0
+}
+
+func (x *InfoDetailData) GetCode() string {
+	if x != nil {
+		return x.Code
+	}
+	return ""
+}
+
+func (x *InfoDetailData) GetProvince() string {
+	if x != nil {
+		return x.Province
+	}
+	return ""
+}
+
+func (x *InfoDetailData) GetCity() string {
+	if x != nil {
+		return x.City
+	}
+	return ""
+}
+
+func (x *InfoDetailData) GetIndustry() []string {
+	if x != nil {
+		return x.Industry
+	}
+	return nil
+}
+
+func (x *InfoDetailData) GetBuyer() string {
+	if x != nil {
+		return x.Buyer
+	}
+	return ""
+}
+
+func (x *InfoDetailData) GetBudget() float64 {
+	if x != nil {
+		return x.Budget
+	}
+	return 0
+}
+
+func (x *InfoDetailData) GetWinner() string {
+	if x != nil {
+		return x.Winner
+	}
+	return ""
+}
+
+func (x *InfoDetailData) GetAmount() float64 {
+	if x != nil {
+		return x.Amount
+	}
+	return 0
+}
+
+func (x *InfoDetailData) GetDetail() string {
+	if x != nil {
+		return x.Detail
+	}
+	return ""
+}
+
+func (x *InfoDetailData) GetAttach() string {
+	if x != nil {
+		return x.Attach
+	}
+	return ""
+}
+
+func (x *InfoDetailData) GetCreateTime() string {
+	if x != nil {
+		return x.CreateTime
+	}
+	return ""
+}
+
+func (x *InfoDetailData) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+func (x *InfoDetailData) GetValidityTime() string {
+	if x != nil {
+		return x.ValidityTime
+	}
+	return ""
+}
+
+func (x *InfoDetailData) GetPublishTime() string {
+	if x != nil {
+		return x.PublishTime
+	}
+	return ""
+}
+
+func (x *InfoDetailData) GetAppId() int64 {
+	if x != nil {
+		return x.AppId
+	}
+	return 0
+}
+
+func (x *InfoDetailData) GetInfoDetailRelated() *Related {
+	if x != nil {
+		return x.InfoDetailRelated
+	}
+	return nil
+}
+
+func (x *InfoDetailData) GetInfoDetailReview() *Review {
+	if x != nil {
+		return x.InfoDetailReview
+	}
+	return nil
+}
+
+func (x *InfoDetailData) GetInfoDetailContact() *InfoDetailContact {
+	if x != nil {
+		return x.InfoDetailContact
+	}
+	return nil
+}
+
+type Related struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id    string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`       //关联信息id
+	Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` //关联信息标题
+}
+
+func (x *Related) Reset() {
+	*x = Related{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Related) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Related) ProtoMessage() {}
+
+func (x *Related) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[16]
+	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 Related.ProtoReflect.Descriptor instead.
+func (*Related) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *Related) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *Related) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+type Review struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Status int64  `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"` //审核状态
+	Detail string `protobuf:"bytes,2,opt,name=detail,proto3" json:"detail,omitempty"`  //未通过审核原因
+	Time   string `protobuf:"bytes,3,opt,name=time,proto3" json:"time,omitempty"`      //审核时间
+}
+
+func (x *Review) Reset() {
+	*x = Review{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Review) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Review) ProtoMessage() {}
+
+func (x *Review) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[17]
+	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 Review.ProtoReflect.Descriptor instead.
+func (*Review) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *Review) GetStatus() int64 {
+	if x != nil {
+		return x.Status
+	}
+	return 0
+}
+
+func (x *Review) GetDetail() string {
+	if x != nil {
+		return x.Detail
+	}
+	return ""
+}
+
+func (x *Review) GetTime() string {
+	if x != nil {
+		return x.Time
+	}
+	return ""
+}
+
+type InfoDetailContact struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name  string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`    //名字
+	Phone string `protobuf:"bytes,2,opt,name=phone,proto3" json:"phone,omitempty"`  //电话
+	Overt int64  `protobuf:"varint,3,opt,name=overt,proto3" json:"overt,omitempty"` //是否公开 1:展示;2:隐藏
+}
+
+func (x *InfoDetailContact) Reset() {
+	*x = InfoDetailContact{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoDetailContact) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoDetailContact) ProtoMessage() {}
+
+func (x *InfoDetailContact) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[18]
+	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 InfoDetailContact.ProtoReflect.Descriptor instead.
+func (*InfoDetailContact) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *InfoDetailContact) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *InfoDetailContact) GetPhone() string {
+	if x != nil {
+		return x.Phone
+	}
+	return ""
+}
+
+func (x *InfoDetailContact) GetOvert() int64 {
+	if x != nil {
+		return x.Overt
+	}
+	return 0
+}
+
+//更新发布的信息Resp:删除和更新
+type InfoChangeResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode        int64           `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg         string          `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	InfoChangeData *InfoDetailResp `protobuf:"bytes,3,opt,name=info_change_data,json=infoChangeData,proto3" json:"info_change_data,omitempty"`
+}
+
+func (x *InfoChangeResp) Reset() {
+	*x = InfoChangeResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoChangeResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoChangeResp) ProtoMessage() {}
+
+func (x *InfoChangeResp) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[19]
+	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 InfoChangeResp.ProtoReflect.Descriptor instead.
+func (*InfoChangeResp) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *InfoChangeResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *InfoChangeResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *InfoChangeResp) GetInfoChangeData() *InfoDetailResp {
+	if x != nil {
+		return x.InfoChangeData
+	}
+	return nil
+}
+
+type InfoChangeData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id   string           `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`     //信息id
+	Data *PublishInfoData `protobuf:"bytes,2,opt,name=Data,proto3" json:"Data,omitempty"` //信息id
+}
+
+func (x *InfoChangeData) Reset() {
+	*x = InfoChangeData{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoChangeData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoChangeData) ProtoMessage() {}
+
+func (x *InfoChangeData) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[20]
+	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 InfoChangeData.ProtoReflect.Descriptor instead.
+func (*InfoChangeData) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{20}
+}
+
+func (x *InfoChangeData) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *InfoChangeData) GetData() *PublishInfoData {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+//信息发布Req
+type PublishInfoData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Title     string   `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`         //信息标题最长50
+	MsgType   string   `protobuf:"bytes,2,opt,name=msgType,proto3" json:"msgType,omitempty"`     //信息类型1:招标信息 2:采购信息 3:供应信息
+	RelatedId string   `protobuf:"bytes,3,opt,name=relatedId,proto3" json:"relatedId,omitempty"` //关联公告id
+	Code      string   `protobuf:"bytes,4,opt,name=code,proto3" json:"code,omitempty"`           //项目编码
+	Province  string   `protobuf:"bytes,5,opt,name=province,proto3" json:"province,omitempty"`   //省份
+	City      string   `protobuf:"bytes,6,opt,name=city,proto3" json:"city,omitempty"`           //城市
+	Industry  []string `protobuf:"bytes,7,rep,name=industry,proto3" json:"industry,omitempty"`   //行业信息
+	Buyer     string   `protobuf:"bytes,8,opt,name=buyer,proto3" json:"buyer,omitempty"`         //采购单位
+	Budget    float64  `protobuf:"fixed64,9,opt,name=budget,proto3" json:"budget,omitempty"`     //预算
+	Winner    string   `protobuf:"bytes,10,opt,name=winner,proto3" json:"winner,omitempty"`      //中标单位
+	Amount    float64  `protobuf:"fixed64,11,opt,name=amount,proto3" json:"amount,omitempty"`    //中标金额
+	Detail    string   `protobuf:"bytes,12,opt,name=detail,proto3" json:"detail,omitempty"`      //正文信息
+	Attach    []string `protobuf:"bytes,13,rep,name=attach,proto3" json:"attach,omitempty"`      //附件
+	Contact   *Contact `protobuf:"bytes,17,opt,name=contact,proto3" json:"contact,omitempty"`
+	Deadline  string   `protobuf:"bytes,18,opt,name=deadline,proto3" json:"deadline,omitempty"` //信息有效期
+}
+
+func (x *PublishInfoData) Reset() {
+	*x = PublishInfoData{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PublishInfoData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PublishInfoData) ProtoMessage() {}
+
+func (x *PublishInfoData) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[21]
+	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 PublishInfoData.ProtoReflect.Descriptor instead.
+func (*PublishInfoData) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{21}
+}
+
+func (x *PublishInfoData) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+func (x *PublishInfoData) GetMsgType() string {
+	if x != nil {
+		return x.MsgType
+	}
+	return ""
+}
+
+func (x *PublishInfoData) GetRelatedId() string {
+	if x != nil {
+		return x.RelatedId
+	}
+	return ""
+}
+
+func (x *PublishInfoData) GetCode() string {
+	if x != nil {
+		return x.Code
+	}
+	return ""
+}
+
+func (x *PublishInfoData) GetProvince() string {
+	if x != nil {
+		return x.Province
+	}
+	return ""
+}
+
+func (x *PublishInfoData) GetCity() string {
+	if x != nil {
+		return x.City
+	}
+	return ""
+}
+
+func (x *PublishInfoData) GetIndustry() []string {
+	if x != nil {
+		return x.Industry
+	}
+	return nil
+}
+
+func (x *PublishInfoData) GetBuyer() string {
+	if x != nil {
+		return x.Buyer
+	}
+	return ""
+}
+
+func (x *PublishInfoData) GetBudget() float64 {
+	if x != nil {
+		return x.Budget
+	}
+	return 0
+}
+
+func (x *PublishInfoData) GetWinner() string {
+	if x != nil {
+		return x.Winner
+	}
+	return ""
+}
+
+func (x *PublishInfoData) GetAmount() float64 {
+	if x != nil {
+		return x.Amount
+	}
+	return 0
+}
+
+func (x *PublishInfoData) GetDetail() string {
+	if x != nil {
+		return x.Detail
+	}
+	return ""
+}
+
+func (x *PublishInfoData) GetAttach() []string {
+	if x != nil {
+		return x.Attach
+	}
+	return nil
+}
+
+func (x *PublishInfoData) GetContact() *Contact {
+	if x != nil {
+		return x.Contact
+	}
+	return nil
+}
+
+func (x *PublishInfoData) GetDeadline() string {
+	if x != nil {
+		return x.Deadline
+	}
+	return ""
+}
+
+//信息审核状态查询
+type StatusReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	MsgId string `protobuf:"bytes,1,opt,name=msgId,proto3" json:"msgId,omitempty"`
+	Type  int64  `protobuf:"varint,2,opt,name=type,proto3" json:"type,omitempty"`
+}
+
+func (x *StatusReq) Reset() {
+	*x = StatusReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *StatusReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StatusReq) ProtoMessage() {}
+
+func (x *StatusReq) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[22]
+	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 StatusReq.ProtoReflect.Descriptor instead.
+func (*StatusReq) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{22}
+}
+
+func (x *StatusReq) GetMsgId() string {
+	if x != nil {
+		return x.MsgId
+	}
+	return ""
+}
+
+func (x *StatusReq) GetType() int64 {
+	if x != nil {
+		return x.Type
+	}
+	return 0
+}
+
+type StatusResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64       `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string      `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	Data    *StatusData `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (x *StatusResp) Reset() {
+	*x = StatusResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *StatusResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StatusResp) ProtoMessage() {}
+
+func (x *StatusResp) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[23]
+	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 StatusResp.ProtoReflect.Descriptor instead.
+func (*StatusResp) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{23}
+}
+
+func (x *StatusResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *StatusResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *StatusResp) GetData() *StatusData {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+type StatusData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Status    string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
+	Published string `protobuf:"bytes,2,opt,name=published,proto3" json:"published,omitempty"`
+}
+
+func (x *StatusData) Reset() {
+	*x = StatusData{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *StatusData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StatusData) ProtoMessage() {}
+
+func (x *StatusData) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[24]
+	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 StatusData.ProtoReflect.Descriptor instead.
+func (*StatusData) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{24}
+}
+
+func (x *StatusData) GetStatus() string {
+	if x != nil {
+		return x.Status
+	}
+	return ""
+}
+
+func (x *StatusData) GetPublished() string {
+	if x != nil {
+		return x.Published
+	}
+	return ""
+}
+
+//供应信息检索框查询
+type SupplyInfoSearchReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Keywords   string `protobuf:"bytes,1,opt,name=keywords,proto3" json:"keywords,omitempty"`     //关键词
+	SearchType string `protobuf:"bytes,2,opt,name=searchType,proto3" json:"searchType,omitempty"` //搜索范围:title:标题;detail:正文;ent_name:发布单位;(多个用,号隔开)
+	Province   string `protobuf:"bytes,3,opt,name=province,proto3" json:"province,omitempty"`     //省份
+	City       string `protobuf:"bytes,4,opt,name=city,proto3" json:"city,omitempty"`             //城市
+	Time       string `protobuf:"bytes,5,opt,name=time,proto3" json:"time,omitempty"`             //发布时间 string:1592555555-1596666666
+	Status     string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"`         //信息状态;0:全部;1:生效中;-1:已过期
+	PageSize   int64  `protobuf:"varint,7,opt,name=pageSize,proto3" json:"pageSize,omitempty"`    //每页数据量,默认50
+	PageIndex  int64  `protobuf:"varint,8,opt,name=pageIndex,proto3" json:"pageIndex,omitempty"`  //页码;默认第一页
+}
+
+func (x *SupplyInfoSearchReq) Reset() {
+	*x = SupplyInfoSearchReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SupplyInfoSearchReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SupplyInfoSearchReq) ProtoMessage() {}
+
+func (x *SupplyInfoSearchReq) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[25]
+	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 SupplyInfoSearchReq.ProtoReflect.Descriptor instead.
+func (*SupplyInfoSearchReq) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{25}
+}
+
+func (x *SupplyInfoSearchReq) GetKeywords() string {
+	if x != nil {
+		return x.Keywords
+	}
+	return ""
+}
+
+func (x *SupplyInfoSearchReq) GetSearchType() string {
+	if x != nil {
+		return x.SearchType
+	}
+	return ""
+}
+
+func (x *SupplyInfoSearchReq) GetProvince() string {
+	if x != nil {
+		return x.Province
+	}
+	return ""
+}
+
+func (x *SupplyInfoSearchReq) GetCity() string {
+	if x != nil {
+		return x.City
+	}
+	return ""
+}
+
+func (x *SupplyInfoSearchReq) GetTime() string {
+	if x != nil {
+		return x.Time
+	}
+	return ""
+}
+
+func (x *SupplyInfoSearchReq) GetStatus() string {
+	if x != nil {
+		return x.Status
+	}
+	return ""
+}
+
+func (x *SupplyInfoSearchReq) GetPageSize() int64 {
+	if x != nil {
+		return x.PageSize
+	}
+	return 0
+}
+
+func (x *SupplyInfoSearchReq) GetPageIndex() int64 {
+	if x != nil {
+		return x.PageIndex
+	}
+	return 0
+}
+
+//供应信息检索框查询Resp
+type SupplyInfoSearchResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64         `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string        `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	Data    []*SupplyInfo `protobuf:"bytes,3,rep,name=data,proto3" json:"data,omitempty"`
+}
+
+func (x *SupplyInfoSearchResp) Reset() {
+	*x = SupplyInfoSearchResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SupplyInfoSearchResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SupplyInfoSearchResp) ProtoMessage() {}
+
+func (x *SupplyInfoSearchResp) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[26]
+	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 SupplyInfoSearchResp.ProtoReflect.Descriptor instead.
+func (*SupplyInfoSearchResp) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{26}
+}
+
+func (x *SupplyInfoSearchResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *SupplyInfoSearchResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *SupplyInfoSearchResp) GetData() []*SupplyInfo {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+type SupplyInfo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Title       string   `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`                                //标题
+	Id          string   `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`                                      //信息id
+	Detail      string   `protobuf:"bytes,3,opt,name=detail,proto3" json:"detail,omitempty"`                              //匹配的正文
+	Province    string   `protobuf:"bytes,4,opt,name=province,proto3" json:"province,omitempty"`                          //省份
+	City        string   `protobuf:"bytes,5,opt,name=city,proto3" json:"city,omitempty"`                                  //城市
+	PublishTime string   `protobuf:"bytes,6,opt,name=publish_time,json=publishTime,proto3" json:"publish_time,omitempty"` //发布时间
+	Highlight   []string `protobuf:"bytes,7,rep,name=highlight,proto3" json:"highlight,omitempty"`                        //内容高亮
+}
+
+func (x *SupplyInfo) Reset() {
+	*x = SupplyInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SupplyInfo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SupplyInfo) ProtoMessage() {}
+
+func (x *SupplyInfo) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[27]
+	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 SupplyInfo.ProtoReflect.Descriptor instead.
+func (*SupplyInfo) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{27}
+}
+
+func (x *SupplyInfo) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+func (x *SupplyInfo) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *SupplyInfo) GetDetail() string {
+	if x != nil {
+		return x.Detail
+	}
+	return ""
+}
+
+func (x *SupplyInfo) GetProvince() string {
+	if x != nil {
+		return x.Province
+	}
+	return ""
+}
+
+func (x *SupplyInfo) GetCity() string {
+	if x != nil {
+		return x.City
+	}
+	return ""
+}
+
+func (x *SupplyInfo) GetPublishTime() string {
+	if x != nil {
+		return x.PublishTime
+	}
+	return ""
+}
+
+func (x *SupplyInfo) GetHighlight() []string {
+	if x != nil {
+		return x.Highlight
+	}
+	return nil
+}
+
+//前端其他用户查询详情页返回数据格式
+type SupplyInfoDetailResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64                 `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string                `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	Data    *SupplyInfoDetailData `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (x *SupplyInfoDetailResp) Reset() {
+	*x = SupplyInfoDetailResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SupplyInfoDetailResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SupplyInfoDetailResp) ProtoMessage() {}
+
+func (x *SupplyInfoDetailResp) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[28]
+	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 SupplyInfoDetailResp.ProtoReflect.Descriptor instead.
+func (*SupplyInfoDetailResp) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{28}
+}
+
+func (x *SupplyInfoDetailResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *SupplyInfoDetailResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *SupplyInfoDetailResp) GetData() *SupplyInfoDetailData {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+//前端其他用户查询详情页返回数据格式-data
+type SupplyInfoDetailData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id                string                  `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`                               //信息id
+	Title             string                  `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`                         //信息标题
+	Detail            string                  `protobuf:"bytes,3,opt,name=detail,proto3" json:"detail,omitempty"`                       //信息详情
+	Province          string                  `protobuf:"bytes,4,opt,name=province,proto3" json:"province,omitempty"`                   //省份
+	City              string                  `protobuf:"bytes,5,opt,name=city,proto3" json:"city,omitempty"`                           //城市
+	ValidityTime      string                  `protobuf:"bytes,6,opt,name=validityTime,proto3" json:"validityTime,omitempty"`           //有效期
+	EntId             string                  `protobuf:"bytes,7,opt,name=entId,proto3" json:"entId,omitempty"`                         //企业id
+	Attach            string                  `protobuf:"bytes,8,opt,name=attach,proto3" json:"attach,omitempty"`                       //附件列表
+	InfoDetailContact *InfoDetailContact      `protobuf:"bytes,9,opt,name=infoDetailContact,proto3" json:"infoDetailContact,omitempty"` //联系人详情
+	PublishTime       string                  `protobuf:"bytes,10,opt,name=publishTime,proto3" json:"publishTime,omitempty"`            //发布时间
+	OtherSupplyInfo   []*OtherSupplyInfoByEnt `protobuf:"bytes,11,rep,name=otherSupplyInfo,proto3" json:"otherSupplyInfo,omitempty"`    //此企业发布的其他供应信息
+}
+
+func (x *SupplyInfoDetailData) Reset() {
+	*x = SupplyInfoDetailData{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SupplyInfoDetailData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SupplyInfoDetailData) ProtoMessage() {}
+
+func (x *SupplyInfoDetailData) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[29]
+	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 SupplyInfoDetailData.ProtoReflect.Descriptor instead.
+func (*SupplyInfoDetailData) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{29}
+}
+
+func (x *SupplyInfoDetailData) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *SupplyInfoDetailData) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+func (x *SupplyInfoDetailData) GetDetail() string {
+	if x != nil {
+		return x.Detail
+	}
+	return ""
+}
+
+func (x *SupplyInfoDetailData) GetProvince() string {
+	if x != nil {
+		return x.Province
+	}
+	return ""
+}
+
+func (x *SupplyInfoDetailData) GetCity() string {
+	if x != nil {
+		return x.City
+	}
+	return ""
+}
+
+func (x *SupplyInfoDetailData) GetValidityTime() string {
+	if x != nil {
+		return x.ValidityTime
+	}
+	return ""
+}
+
+func (x *SupplyInfoDetailData) GetEntId() string {
+	if x != nil {
+		return x.EntId
+	}
+	return ""
+}
+
+func (x *SupplyInfoDetailData) GetAttach() string {
+	if x != nil {
+		return x.Attach
+	}
+	return ""
+}
+
+func (x *SupplyInfoDetailData) GetInfoDetailContact() *InfoDetailContact {
+	if x != nil {
+		return x.InfoDetailContact
+	}
+	return nil
+}
+
+func (x *SupplyInfoDetailData) GetPublishTime() string {
+	if x != nil {
+		return x.PublishTime
+	}
+	return ""
+}
+
+func (x *SupplyInfoDetailData) GetOtherSupplyInfo() []*OtherSupplyInfoByEnt {
+	if x != nil {
+		return x.OtherSupplyInfo
+	}
+	return nil
+}
+
+//前端查询供应信息 此企业发布的其他供应信息
+type OtherSupplyInfoByEnt struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Title       string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`
+	Id          string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+	Province    string `protobuf:"bytes,3,opt,name=province,proto3" json:"province,omitempty"`
+	City        string `protobuf:"bytes,4,opt,name=city,proto3" json:"city,omitempty"`
+	PublishTime string `protobuf:"bytes,5,opt,name=publishTime,proto3" json:"publishTime,omitempty"`
+	CreateTime  string `protobuf:"bytes,6,opt,name=createTime,proto3" json:"createTime,omitempty"`
+	EntId       string `protobuf:"bytes,7,opt,name=entId,proto3" json:"entId,omitempty"`
+}
+
+func (x *OtherSupplyInfoByEnt) Reset() {
+	*x = OtherSupplyInfoByEnt{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *OtherSupplyInfoByEnt) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OtherSupplyInfoByEnt) ProtoMessage() {}
+
+func (x *OtherSupplyInfoByEnt) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[30]
+	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 OtherSupplyInfoByEnt.ProtoReflect.Descriptor instead.
+func (*OtherSupplyInfoByEnt) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{30}
+}
+
+func (x *OtherSupplyInfoByEnt) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+func (x *OtherSupplyInfoByEnt) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *OtherSupplyInfoByEnt) GetProvince() string {
+	if x != nil {
+		return x.Province
+	}
+	return ""
+}
+
+func (x *OtherSupplyInfoByEnt) GetCity() string {
+	if x != nil {
+		return x.City
+	}
+	return ""
+}
+
+func (x *OtherSupplyInfoByEnt) GetPublishTime() string {
+	if x != nil {
+		return x.PublishTime
+	}
+	return ""
+}
+
+func (x *OtherSupplyInfoByEnt) GetCreateTime() string {
+	if x != nil {
+		return x.CreateTime
+	}
+	return ""
+}
+
+func (x *OtherSupplyInfoByEnt) GetEntId() string {
+	if x != nil {
+		return x.EntId
+	}
+	return ""
+}
+
+//上传附件
+type InfoFileUploadReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	FileName string `protobuf:"bytes,1,opt,name=fileName,proto3" json:"fileName,omitempty"`  //附件名称
+	File     []byte `protobuf:"bytes,2,opt,name=file,proto3" json:"file,omitempty"`          //附件
+	FileSize int64  `protobuf:"varint,3,opt,name=fileSize,proto3" json:"fileSize,omitempty"` //附件大小
+}
+
+func (x *InfoFileUploadReq) Reset() {
+	*x = InfoFileUploadReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoFileUploadReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoFileUploadReq) ProtoMessage() {}
+
+func (x *InfoFileUploadReq) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[31]
+	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 InfoFileUploadReq.ProtoReflect.Descriptor instead.
+func (*InfoFileUploadReq) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{31}
+}
+
+func (x *InfoFileUploadReq) GetFileName() string {
+	if x != nil {
+		return x.FileName
+	}
+	return ""
+}
+
+func (x *InfoFileUploadReq) GetFile() []byte {
+	if x != nil {
+		return x.File
+	}
+	return nil
+}
+
+func (x *InfoFileUploadReq) GetFileSize() int64 {
+	if x != nil {
+		return x.FileSize
+	}
+	return 0
+}
+
+//
+type InfoFileUploadResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64               `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string              `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	Data    *InfoFileUploadData `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (x *InfoFileUploadResp) Reset() {
+	*x = InfoFileUploadResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoFileUploadResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoFileUploadResp) ProtoMessage() {}
+
+func (x *InfoFileUploadResp) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[32]
+	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 InfoFileUploadResp.ProtoReflect.Descriptor instead.
+func (*InfoFileUploadResp) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{32}
+}
+
+func (x *InfoFileUploadResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *InfoFileUploadResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *InfoFileUploadResp) GetData() *InfoFileUploadData {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+type InfoFileUploadData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Filename string `protobuf:"bytes,1,opt,name=filename,proto3" json:"filename,omitempty"` //附件名称
+	Ftype    string `protobuf:"bytes,2,opt,name=ftype,proto3" json:"ftype,omitempty"`       //附件类型
+	Fid      string `protobuf:"bytes,3,opt,name=fid,proto3" json:"fid,omitempty"`           //key
+	Size     string `protobuf:"bytes,4,opt,name=size,proto3" json:"size,omitempty"`         //单位KB
+}
+
+func (x *InfoFileUploadData) Reset() {
+	*x = InfoFileUploadData{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_consumer_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoFileUploadData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoFileUploadData) ProtoMessage() {}
+
+func (x *InfoFileUploadData) ProtoReflect() protoreflect.Message {
+	mi := &file_consumer_proto_msgTypes[33]
+	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 InfoFileUploadData.ProtoReflect.Descriptor instead.
+func (*InfoFileUploadData) Descriptor() ([]byte, []int) {
+	return file_consumer_proto_rawDescGZIP(), []int{33}
+}
+
+func (x *InfoFileUploadData) GetFilename() string {
+	if x != nil {
+		return x.Filename
+	}
+	return ""
+}
+
+func (x *InfoFileUploadData) GetFtype() string {
+	if x != nil {
+		return x.Ftype
+	}
+	return ""
+}
+
+func (x *InfoFileUploadData) GetFid() string {
+	if x != nil {
+		return x.Fid
+	}
+	return ""
+}
+
+func (x *InfoFileUploadData) GetSize() string {
+	if x != nil {
+		return x.Size
+	}
+	return ""
+}
+
+var File_consumer_proto protoreflect.FileDescriptor
+
+var file_consumer_proto_rawDesc = []byte{
+	0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x12, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x22, 0x89, 0x04, 0x0a, 0x0e, 0x50,
+	0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a,
+	0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69,
+	0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a,
+	0x09, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63,
+	0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12,
+	0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63,
+	0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12,
+	0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x18, 0x07, 0x20, 0x03, 0x28,
+	0x09, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x62,
+	0x75, 0x79, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x75, 0x79, 0x65,
+	0x72, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28,
+	0x01, 0x52, 0x06, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x69, 0x6e,
+	0x6e, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65,
+	0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28,
+	0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x74,
+	0x61, 0x69, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69,
+	0x6c, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65,
+	0x72, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
+	0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64,
+	0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x2b, 0x0a,
+	0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11,
+	0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63,
+	0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65,
+	0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65,
+	0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18,
+	0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07,
+	0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65,
+	0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4d, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63,
+	0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f,
+	0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12,
+	0x14, 0x0a, 0x05, 0x6f, 0x76, 0x65, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05,
+	0x6f, 0x76, 0x65, 0x72, 0x74, 0x22, 0x78, 0x0a, 0x0f, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
+	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f,
+	0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43,
+	0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x31, 0x0a, 0x09,
+	0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69,
+	0x73, 0x68, 0x49, 0x64, 0x52, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x49, 0x64, 0x22,
+	0x32, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e,
+	0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x49, 0x64, 0x22, 0x69, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x52, 0x65, 0x71,
+	0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x14,
+	0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d,
+	0x61, 0x74, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x71, 0x54, 0x79, 0x70, 0x65, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x71, 0x54, 0x79, 0x70, 0x65, 0x22, 0x7c,
+	0x0a, 0x10, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a,
+	0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x34, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
+	0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d,
+	0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x44,
+	0x61, 0x74, 0x61, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x42, 0x0a, 0x10,
+	0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x44, 0x61, 0x74, 0x61,
+	0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x72, 0x70, 0x6c, 0x75,
+	0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x75, 0x72, 0x70, 0x6c, 0x75, 0x73,
+	0x22, 0x6d, 0x0a, 0x0f, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52,
+	0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17,
+	0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x26, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18,
+	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72,
+	0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22,
+	0x30, 0x0a, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74,
+	0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c,
+	0x65, 0x22, 0xce, 0x01, 0x0a, 0x10, 0x4d, 0x79, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4c,
+	0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14,
+	0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d,
+	0x61, 0x74, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22,
+	0x0a, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1c,
+	0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05,
+	0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x61, 0x70, 0x70,
+	0x49, 0x64, 0x22, 0x7e, 0x0a, 0x11, 0x4d, 0x79, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4c,
+	0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63,
+	0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f,
+	0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x35, 0x0a, 0x07, 0x72,
+	0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63,
+	0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x4d, 0x79, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73,
+	0x68, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c,
+	0x74, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x11, 0x4d, 0x79, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
+	0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61,
+	0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x16,
+	0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06,
+	0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x52, 0x65, 0x76, 0x69,
+	0x65, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x52, 0x65, 0x76, 0x69,
+	0x65, 0x77, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x20,
+	0x0a, 0x0b, 0x61, 0x75, 0x64, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x0b, 0x61, 0x75, 0x64, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64,
+	0x12, 0x26, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12,
+	0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
+	0x73, 0x70, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x08, 0x4c, 0x69, 0x73,
+	0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x72,
+	0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
+	0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63,
+	0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x0d, 0x49, 0x6e,
+	0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75,
+	0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65,
+	0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70,
+	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a,
+	0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x61, 0x70,
+	0x70, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x22, 0x78, 0x0a,
+	0x0e, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12,
+	0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x72,
+	0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72,
+	0x4d, 0x73, 0x67, 0x12, 0x32, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e,
+	0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x07,
+	0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0xf4, 0x04, 0x0a, 0x0e, 0x49, 0x6e, 0x66, 0x6f,
+	0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73,
+	0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67,
+	0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76,
+	0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76,
+	0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x64, 0x75,
+	0x73, 0x74, 0x72, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x75,
+	0x73, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x75, 0x79, 0x65, 0x72, 0x18, 0x06, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x75, 0x79, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75,
+	0x64, 0x67, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x62, 0x75, 0x64, 0x67,
+	0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d,
+	0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75,
+	0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x0a, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x74,
+	0x74, 0x61, 0x63, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x74, 0x74, 0x61,
+	0x63, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65,
+	0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69,
+	0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x69,
+	0x64, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
+	0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b,
+	0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14,
+	0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x61,
+	0x70, 0x70, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x11, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61,
+	0x69, 0x6c, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x11, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74,
+	0x65, 0x64, 0x52, 0x11, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65,
+	0x6c, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x10, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74,
+	0x61, 0x69, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x10, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65,
+	0x77, 0x52, 0x10, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x76,
+	0x69, 0x65, 0x77, 0x12, 0x49, 0x0a, 0x11, 0x69, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69,
+	0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,
+	0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65,
+	0x74, 0x61, 0x69, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x11, 0x69, 0x6e, 0x66,
+	0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x22, 0x2f,
+	0x0a, 0x07, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74,
+	0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22,
+	0x4c, 0x0a, 0x06, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61,
+	0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d,
+	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x53, 0x0a,
+	0x11, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x61,
+	0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x14, 0x0a, 0x05,
+	0x6f, 0x76, 0x65, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6f, 0x76, 0x65,
+	0x72, 0x74, 0x22, 0x88, 0x01, 0x0a, 0x0e, 0x49, 0x6e, 0x66, 0x6f, 0x43, 0x68, 0x61, 0x6e, 0x67,
+	0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65,
+	0x12, 0x17, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x42, 0x0a, 0x10, 0x69, 0x6e, 0x66,
+	0x6f, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x49,
+	0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0e, 0x69,
+	0x6e, 0x66, 0x6f, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x4f, 0x0a,
+	0x0e, 0x49, 0x6e, 0x66, 0x6f, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12,
+	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12,
+	0x2d, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
+	0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
+	0x49, 0x6e, 0x66, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x96,
+	0x03, 0x0a, 0x0f, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x61,
+	0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54,
+	0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79,
+	0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x49, 0x64, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x49, 0x64,
+	0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+	0x63, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65,
+	0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+	0x63, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79,
+	0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79,
+	0x12, 0x14, 0x0a, 0x05, 0x62, 0x75, 0x79, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x62, 0x75, 0x79, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74,
+	0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x12, 0x16,
+	0x0a, 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74,
+	0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16,
+	0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68,
+	0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x12, 0x2b,
+	0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x11, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61,
+	0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64,
+	0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64,
+	0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x35, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79,
+	0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x6a,
+	0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08,
+	0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07,
+	0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d,
+	0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67,
+	0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14,
+	0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x42, 0x0a, 0x0a, 0x53, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x12, 0x1c, 0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x22, 0xe7,
+	0x01, 0x0a, 0x13, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x61,
+	0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72,
+	0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72,
+	0x64, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x79,
+	0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12,
+	0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69,
+	0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a,
+	0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61,
+	0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70,
+	0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x74, 0x0a, 0x14, 0x53, 0x75, 0x70, 0x70,
+	0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70,
+	0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65,
+	0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72,
+	0x72, 0x4d, 0x73, 0x67, 0x12, 0x28, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x53, 0x75,
+	0x70, 0x70, 0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xbb,
+	0x01, 0x0a, 0x0a, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a,
+	0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69,
+	0x74, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70,
+	0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70,
+	0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18,
+	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x70,
+	0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c,
+	0x0a, 0x09, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28,
+	0x09, 0x52, 0x09, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x22, 0x7e, 0x0a, 0x14,
+	0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c,
+	0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12,
+	0x17, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x32, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65,
+	0x72, 0x2e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61,
+	0x69, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x8d, 0x03, 0x0a,
+	0x14, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69,
+	0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64,
+	0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x74,
+	0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12,
+	0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63,
+	0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x54,
+	0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64,
+	0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64,
+	0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a,
+	0x06, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61,
+	0x74, 0x74, 0x61, 0x63, 0x68, 0x12, 0x49, 0x0a, 0x11, 0x69, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74,
+	0x61, 0x69, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f,
+	0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x11, 0x69,
+	0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74,
+	0x12, 0x20, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x18,
+	0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69,
+	0x6d, 0x65, 0x12, 0x48, 0x0a, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x75, 0x70, 0x70, 0x6c,
+	0x79, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f,
+	0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x75, 0x70, 0x70,
+	0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x45, 0x6e, 0x74, 0x52, 0x0f, 0x6f, 0x74, 0x68,
+	0x65, 0x72, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xc4, 0x01, 0x0a,
+	0x14, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f,
+	0x42, 0x79, 0x45, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70,
+	0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70,
+	0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18,
+	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x70,
+	0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a,
+	0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a,
+	0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e,
+	0x74, 0x49, 0x64, 0x22, 0x5f, 0x0a, 0x11, 0x49, 0x6e, 0x66, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x55,
+	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65,
+	0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65,
+	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0c, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65,
+	0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65,
+	0x53, 0x69, 0x7a, 0x65, 0x22, 0x7a, 0x0a, 0x12, 0x49, 0x6e, 0x66, 0x6f, 0x46, 0x69, 0x6c, 0x65,
+	0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72,
+	0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72,
+	0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x30,
+	0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63,
+	0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x46, 0x69, 0x6c, 0x65,
+	0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61,
+	0x22, 0x6c, 0x0a, 0x12, 0x49, 0x6e, 0x66, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x70, 0x6c, 0x6f,
+	0x61, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61,
+	0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61,
+	0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x05, 0x66, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x69, 0x64, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x66, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69,
+	0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x32, 0xfc,
+	0x04, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x0b, 0x50,
+	0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x2e, 0x63, 0x6f, 0x6e,
+	0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x49, 0x6e, 0x66,
+	0x6f, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e,
+	0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12,
+	0x3f, 0x0a, 0x0c, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12,
+	0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49,
+	0x64, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e,
+	0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70,
+	0x12, 0x3d, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x12,
+	0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49,
+	0x64, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e,
+	0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12,
+	0x48, 0x0a, 0x0d, 0x4d, 0x79, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4c, 0x69, 0x73, 0x74,
+	0x12, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x4d, 0x79, 0x50, 0x75,
+	0x62, 0x6c, 0x69, 0x73, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x63,
+	0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x4d, 0x79, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73,
+	0x68, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3f, 0x0a, 0x0a, 0x49, 0x6e, 0x66,
+	0x6f, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x17, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d,
+	0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71,
+	0x1a, 0x18, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f,
+	0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x38, 0x0a, 0x0b, 0x53, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x13, 0x2e, 0x63, 0x6f, 0x6e, 0x73,
+	0x75, 0x6d, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x14,
+	0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x52, 0x65, 0x73, 0x70, 0x12, 0x51, 0x0a, 0x10, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x6e,
+	0x66, 0x6f, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75,
+	0x6d, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65,
+	0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d,
+	0x65, 0x72, 0x2e, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x61,
+	0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x47, 0x0a, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6c,
+	0x79, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x13, 0x2e, 0x63, 0x6f,
+	0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71,
+	0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x73, 0x75, 0x70, 0x70,
+	0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70,
+	0x12, 0x4b, 0x0a, 0x0e, 0x49, 0x6e, 0x66, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x70, 0x6c, 0x6f,
+	0x61, 0x64, 0x12, 0x1b, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x49, 0x6e,
+	0x66, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x1a,
+	0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x46,
+	0x69, 0x6c, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0c, 0x5a,
+	0x0a, 0x2e, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x33,
+}
+
+var (
+	file_consumer_proto_rawDescOnce sync.Once
+	file_consumer_proto_rawDescData = file_consumer_proto_rawDesc
+)
+
+func file_consumer_proto_rawDescGZIP() []byte {
+	file_consumer_proto_rawDescOnce.Do(func() {
+		file_consumer_proto_rawDescData = protoimpl.X.CompressGZIP(file_consumer_proto_rawDescData)
+	})
+	return file_consumer_proto_rawDescData
+}
+
+var file_consumer_proto_msgTypes = make([]protoimpl.MessageInfo, 34)
+var file_consumer_proto_goTypes = []interface{}{
+	(*PublishInfoReq)(nil),       // 0: consumer.PublishInfoReq
+	(*Contact)(nil),              // 1: consumer.Contact
+	(*PublishInfoResp)(nil),      // 2: consumer.PublishInfoResp
+	(*PublishId)(nil),            // 3: consumer.PublishId
+	(*UserIdReq)(nil),            // 4: consumer.UserIdReq
+	(*InfoByUserIdResp)(nil),     // 5: consumer.InfoByUserIdResp
+	(*InfoByUserIdData)(nil),     // 6: consumer.InfoByUserIdData
+	(*InfoRelatedResp)(nil),      // 7: consumer.InfoRelatedResp
+	(*InfoData)(nil),             // 8: consumer.InfoData
+	(*MyPublishListReq)(nil),     // 9: consumer.MyPublishListReq
+	(*MyPublishListResp)(nil),    // 10: consumer.MyPublishListResp
+	(*MyPublishListData)(nil),    // 11: consumer.MyPublishListData
+	(*ListResp)(nil),             // 12: consumer.ListResp
+	(*InfoDetailReq)(nil),        // 13: consumer.InfoDetailReq
+	(*InfoDetailResp)(nil),       // 14: consumer.InfoDetailResp
+	(*InfoDetailData)(nil),       // 15: consumer.InfoDetailData
+	(*Related)(nil),              // 16: consumer.Related
+	(*Review)(nil),               // 17: consumer.Review
+	(*InfoDetailContact)(nil),    // 18: consumer.InfoDetailContact
+	(*InfoChangeResp)(nil),       // 19: consumer.InfoChangeResp
+	(*InfoChangeData)(nil),       // 20: consumer.InfoChangeData
+	(*PublishInfoData)(nil),      // 21: consumer.PublishInfoData
+	(*StatusReq)(nil),            // 22: consumer.StatusReq
+	(*StatusResp)(nil),           // 23: consumer.StatusResp
+	(*StatusData)(nil),           // 24: consumer.StatusData
+	(*SupplyInfoSearchReq)(nil),  // 25: consumer.SupplyInfoSearchReq
+	(*SupplyInfoSearchResp)(nil), // 26: consumer.SupplyInfoSearchResp
+	(*SupplyInfo)(nil),           // 27: consumer.SupplyInfo
+	(*SupplyInfoDetailResp)(nil), // 28: consumer.supplyInfoDetailResp
+	(*SupplyInfoDetailData)(nil), // 29: consumer.SupplyInfoDetailData
+	(*OtherSupplyInfoByEnt)(nil), // 30: consumer.OtherSupplyInfoByEnt
+	(*InfoFileUploadReq)(nil),    // 31: consumer.InfoFileUploadReq
+	(*InfoFileUploadResp)(nil),   // 32: consumer.InfoFileUploadResp
+	(*InfoFileUploadData)(nil),   // 33: consumer.InfoFileUploadData
+}
+var file_consumer_proto_depIdxs = []int32{
+	1,  // 0: consumer.PublishInfoReq.contact:type_name -> consumer.Contact
+	3,  // 1: consumer.PublishInfoResp.PublishId:type_name -> consumer.PublishId
+	6,  // 2: consumer.InfoByUserIdResp.results:type_name -> consumer.InfoByUserIdData
+	8,  // 3: consumer.InfoRelatedResp.data:type_name -> consumer.InfoData
+	11, // 4: consumer.MyPublishListResp.results:type_name -> consumer.MyPublishListData
+	12, // 5: consumer.MyPublishListData.list:type_name -> consumer.ListResp
+	15, // 6: consumer.InfoDetailResp.results:type_name -> consumer.InfoDetailData
+	16, // 7: consumer.InfoDetailData.InfoDetailRelated:type_name -> consumer.Related
+	17, // 8: consumer.InfoDetailData.InfoDetailReview:type_name -> consumer.Review
+	18, // 9: consumer.InfoDetailData.infoDetailContact:type_name -> consumer.InfoDetailContact
+	14, // 10: consumer.InfoChangeResp.info_change_data:type_name -> consumer.InfoDetailResp
+	21, // 11: consumer.InfoChangeData.Data:type_name -> consumer.PublishInfoData
+	1,  // 12: consumer.PublishInfoData.contact:type_name -> consumer.Contact
+	24, // 13: consumer.StatusResp.data:type_name -> consumer.StatusData
+	27, // 14: consumer.SupplyInfoSearchResp.data:type_name -> consumer.SupplyInfo
+	29, // 15: consumer.supplyInfoDetailResp.data:type_name -> consumer.SupplyInfoDetailData
+	18, // 16: consumer.SupplyInfoDetailData.infoDetailContact:type_name -> consumer.InfoDetailContact
+	30, // 17: consumer.SupplyInfoDetailData.otherSupplyInfo:type_name -> consumer.OtherSupplyInfoByEnt
+	33, // 18: consumer.InfoFileUploadResp.data:type_name -> consumer.InfoFileUploadData
+	0,  // 19: consumer.consumer.PublishInfo:input_type -> consumer.PublishInfoReq
+	4,  // 20: consumer.consumer.InfoByUserId:input_type -> consumer.UserIdReq
+	4,  // 21: consumer.consumer.InfoRelated:input_type -> consumer.UserIdReq
+	9,  // 22: consumer.consumer.MyPublishList:input_type -> consumer.MyPublishListReq
+	13, // 23: consumer.consumer.InfoChange:input_type -> consumer.InfoDetailReq
+	22, // 24: consumer.consumer.StatusQuery:input_type -> consumer.StatusReq
+	25, // 25: consumer.consumer.SupplyInfoSearch:input_type -> consumer.SupplyInfoSearchReq
+	22, // 26: consumer.consumer.supplyInfoDetail:input_type -> consumer.StatusReq
+	31, // 27: consumer.consumer.InfoFileUpload:input_type -> consumer.InfoFileUploadReq
+	2,  // 28: consumer.consumer.PublishInfo:output_type -> consumer.PublishInfoResp
+	5,  // 29: consumer.consumer.InfoByUserId:output_type -> consumer.InfoByUserIdResp
+	7,  // 30: consumer.consumer.InfoRelated:output_type -> consumer.InfoRelatedResp
+	10, // 31: consumer.consumer.MyPublishList:output_type -> consumer.MyPublishListResp
+	14, // 32: consumer.consumer.InfoChange:output_type -> consumer.InfoDetailResp
+	23, // 33: consumer.consumer.StatusQuery:output_type -> consumer.StatusResp
+	26, // 34: consumer.consumer.SupplyInfoSearch:output_type -> consumer.SupplyInfoSearchResp
+	28, // 35: consumer.consumer.supplyInfoDetail:output_type -> consumer.supplyInfoDetailResp
+	32, // 36: consumer.consumer.InfoFileUpload:output_type -> consumer.InfoFileUploadResp
+	28, // [28:37] is the sub-list for method output_type
+	19, // [19:28] is the sub-list for method input_type
+	19, // [19:19] is the sub-list for extension type_name
+	19, // [19:19] is the sub-list for extension extendee
+	0,  // [0:19] is the sub-list for field type_name
+}
+
+func init() { file_consumer_proto_init() }
+func file_consumer_proto_init() {
+	if File_consumer_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_consumer_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PublishInfoReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Contact); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PublishInfoResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PublishId); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*UserIdReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoByUserIdResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoByUserIdData); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoRelatedResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoData); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*MyPublishListReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*MyPublishListResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*MyPublishListData); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ListResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoDetailReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoDetailResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoDetailData); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Related); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Review); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoDetailContact); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoChangeResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoChangeData); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PublishInfoData); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*StatusReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*StatusResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*StatusData); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SupplyInfoSearchReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SupplyInfoSearchResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SupplyInfo); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SupplyInfoDetailResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SupplyInfoDetailData); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*OtherSupplyInfoByEnt); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoFileUploadReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoFileUploadResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_consumer_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoFileUploadData); 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_consumer_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   34,
+			NumExtensions: 0,
+			NumServices:   1,
+		},
+		GoTypes:           file_consumer_proto_goTypes,
+		DependencyIndexes: file_consumer_proto_depIdxs,
+		MessageInfos:      file_consumer_proto_msgTypes,
+	}.Build()
+	File_consumer_proto = out.File
+	file_consumer_proto_rawDesc = nil
+	file_consumer_proto_goTypes = nil
+	file_consumer_proto_depIdxs = nil
+}

+ 411 - 0
rpc/consumer/type/consumer/consumer_grpc.pb.go

@@ -0,0 +1,411 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.2.0
+// - protoc             v3.15.5
+// source: consumer.proto
+
+package consumer
+
+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
+
+// ConsumerClient is the client API for Consumer 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 ConsumerClient interface {
+	//发布信息
+	PublishInfo(ctx context.Context, in *PublishInfoReq, opts ...grpc.CallOption) (*PublishInfoResp, error)
+	//根据用户id获取当月已发布信息数量
+	InfoByUserId(ctx context.Context, in *UserIdReq, opts ...grpc.CallOption) (*InfoByUserIdResp, error)
+	//关联公告
+	InfoRelated(ctx context.Context, in *UserIdReq, opts ...grpc.CallOption) (*InfoRelatedResp, error)
+	//我的发布列表
+	MyPublishList(ctx context.Context, in *MyPublishListReq, opts ...grpc.CallOption) (*MyPublishListResp, error)
+	//更新发布的信息0:获取详情;1:物理删除()
+	InfoChange(ctx context.Context, in *InfoDetailReq, opts ...grpc.CallOption) (*InfoDetailResp, error)
+	//信息审核状态查询
+	StatusQuery(ctx context.Context, in *StatusReq, opts ...grpc.CallOption) (*StatusResp, error)
+	//供应信息查询
+	SupplyInfoSearch(ctx context.Context, in *SupplyInfoSearchReq, opts ...grpc.CallOption) (*SupplyInfoSearchResp, error)
+	//供应信息详情(前端页面查询结果详情请求地址)
+	SupplyInfoDetail(ctx context.Context, in *StatusReq, opts ...grpc.CallOption) (*SupplyInfoDetailResp, error)
+	//上传附件
+	InfoFileUpload(ctx context.Context, in *InfoFileUploadReq, opts ...grpc.CallOption) (*InfoFileUploadResp, error)
+}
+
+type consumerClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewConsumerClient(cc grpc.ClientConnInterface) ConsumerClient {
+	return &consumerClient{cc}
+}
+
+func (c *consumerClient) PublishInfo(ctx context.Context, in *PublishInfoReq, opts ...grpc.CallOption) (*PublishInfoResp, error) {
+	out := new(PublishInfoResp)
+	err := c.cc.Invoke(ctx, "/consumer.consumer/PublishInfo", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *consumerClient) InfoByUserId(ctx context.Context, in *UserIdReq, opts ...grpc.CallOption) (*InfoByUserIdResp, error) {
+	out := new(InfoByUserIdResp)
+	err := c.cc.Invoke(ctx, "/consumer.consumer/InfoByUserId", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *consumerClient) InfoRelated(ctx context.Context, in *UserIdReq, opts ...grpc.CallOption) (*InfoRelatedResp, error) {
+	out := new(InfoRelatedResp)
+	err := c.cc.Invoke(ctx, "/consumer.consumer/InfoRelated", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *consumerClient) MyPublishList(ctx context.Context, in *MyPublishListReq, opts ...grpc.CallOption) (*MyPublishListResp, error) {
+	out := new(MyPublishListResp)
+	err := c.cc.Invoke(ctx, "/consumer.consumer/MyPublishList", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *consumerClient) InfoChange(ctx context.Context, in *InfoDetailReq, opts ...grpc.CallOption) (*InfoDetailResp, error) {
+	out := new(InfoDetailResp)
+	err := c.cc.Invoke(ctx, "/consumer.consumer/InfoChange", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *consumerClient) StatusQuery(ctx context.Context, in *StatusReq, opts ...grpc.CallOption) (*StatusResp, error) {
+	out := new(StatusResp)
+	err := c.cc.Invoke(ctx, "/consumer.consumer/StatusQuery", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *consumerClient) SupplyInfoSearch(ctx context.Context, in *SupplyInfoSearchReq, opts ...grpc.CallOption) (*SupplyInfoSearchResp, error) {
+	out := new(SupplyInfoSearchResp)
+	err := c.cc.Invoke(ctx, "/consumer.consumer/SupplyInfoSearch", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *consumerClient) SupplyInfoDetail(ctx context.Context, in *StatusReq, opts ...grpc.CallOption) (*SupplyInfoDetailResp, error) {
+	out := new(SupplyInfoDetailResp)
+	err := c.cc.Invoke(ctx, "/consumer.consumer/supplyInfoDetail", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *consumerClient) InfoFileUpload(ctx context.Context, in *InfoFileUploadReq, opts ...grpc.CallOption) (*InfoFileUploadResp, error) {
+	out := new(InfoFileUploadResp)
+	err := c.cc.Invoke(ctx, "/consumer.consumer/InfoFileUpload", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ConsumerServer is the server API for Consumer service.
+// All implementations must embed UnimplementedConsumerServer
+// for forward compatibility
+type ConsumerServer interface {
+	//发布信息
+	PublishInfo(context.Context, *PublishInfoReq) (*PublishInfoResp, error)
+	//根据用户id获取当月已发布信息数量
+	InfoByUserId(context.Context, *UserIdReq) (*InfoByUserIdResp, error)
+	//关联公告
+	InfoRelated(context.Context, *UserIdReq) (*InfoRelatedResp, error)
+	//我的发布列表
+	MyPublishList(context.Context, *MyPublishListReq) (*MyPublishListResp, error)
+	//更新发布的信息0:获取详情;1:物理删除()
+	InfoChange(context.Context, *InfoDetailReq) (*InfoDetailResp, error)
+	//信息审核状态查询
+	StatusQuery(context.Context, *StatusReq) (*StatusResp, error)
+	//供应信息查询
+	SupplyInfoSearch(context.Context, *SupplyInfoSearchReq) (*SupplyInfoSearchResp, error)
+	//供应信息详情(前端页面查询结果详情请求地址)
+	SupplyInfoDetail(context.Context, *StatusReq) (*SupplyInfoDetailResp, error)
+	//上传附件
+	InfoFileUpload(context.Context, *InfoFileUploadReq) (*InfoFileUploadResp, error)
+	mustEmbedUnimplementedConsumerServer()
+}
+
+// UnimplementedConsumerServer must be embedded to have forward compatible implementations.
+type UnimplementedConsumerServer struct {
+}
+
+func (UnimplementedConsumerServer) PublishInfo(context.Context, *PublishInfoReq) (*PublishInfoResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method PublishInfo not implemented")
+}
+func (UnimplementedConsumerServer) InfoByUserId(context.Context, *UserIdReq) (*InfoByUserIdResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method InfoByUserId not implemented")
+}
+func (UnimplementedConsumerServer) InfoRelated(context.Context, *UserIdReq) (*InfoRelatedResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method InfoRelated not implemented")
+}
+func (UnimplementedConsumerServer) MyPublishList(context.Context, *MyPublishListReq) (*MyPublishListResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MyPublishList not implemented")
+}
+func (UnimplementedConsumerServer) InfoChange(context.Context, *InfoDetailReq) (*InfoDetailResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method InfoChange not implemented")
+}
+func (UnimplementedConsumerServer) StatusQuery(context.Context, *StatusReq) (*StatusResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method StatusQuery not implemented")
+}
+func (UnimplementedConsumerServer) SupplyInfoSearch(context.Context, *SupplyInfoSearchReq) (*SupplyInfoSearchResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SupplyInfoSearch not implemented")
+}
+func (UnimplementedConsumerServer) SupplyInfoDetail(context.Context, *StatusReq) (*SupplyInfoDetailResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SupplyInfoDetail not implemented")
+}
+func (UnimplementedConsumerServer) InfoFileUpload(context.Context, *InfoFileUploadReq) (*InfoFileUploadResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method InfoFileUpload not implemented")
+}
+func (UnimplementedConsumerServer) mustEmbedUnimplementedConsumerServer() {}
+
+// UnsafeConsumerServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to ConsumerServer will
+// result in compilation errors.
+type UnsafeConsumerServer interface {
+	mustEmbedUnimplementedConsumerServer()
+}
+
+func RegisterConsumerServer(s grpc.ServiceRegistrar, srv ConsumerServer) {
+	s.RegisterService(&Consumer_ServiceDesc, srv)
+}
+
+func _Consumer_PublishInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(PublishInfoReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConsumerServer).PublishInfo(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/consumer.consumer/PublishInfo",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConsumerServer).PublishInfo(ctx, req.(*PublishInfoReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Consumer_InfoByUserId_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UserIdReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConsumerServer).InfoByUserId(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/consumer.consumer/InfoByUserId",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConsumerServer).InfoByUserId(ctx, req.(*UserIdReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Consumer_InfoRelated_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(UserIdReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConsumerServer).InfoRelated(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/consumer.consumer/InfoRelated",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConsumerServer).InfoRelated(ctx, req.(*UserIdReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Consumer_MyPublishList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MyPublishListReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConsumerServer).MyPublishList(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/consumer.consumer/MyPublishList",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConsumerServer).MyPublishList(ctx, req.(*MyPublishListReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Consumer_InfoChange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(InfoDetailReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConsumerServer).InfoChange(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/consumer.consumer/InfoChange",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConsumerServer).InfoChange(ctx, req.(*InfoDetailReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Consumer_StatusQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(StatusReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConsumerServer).StatusQuery(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/consumer.consumer/StatusQuery",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConsumerServer).StatusQuery(ctx, req.(*StatusReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Consumer_SupplyInfoSearch_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SupplyInfoSearchReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConsumerServer).SupplyInfoSearch(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/consumer.consumer/SupplyInfoSearch",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConsumerServer).SupplyInfoSearch(ctx, req.(*SupplyInfoSearchReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Consumer_SupplyInfoDetail_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(StatusReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConsumerServer).SupplyInfoDetail(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/consumer.consumer/supplyInfoDetail",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConsumerServer).SupplyInfoDetail(ctx, req.(*StatusReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Consumer_InfoFileUpload_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(InfoFileUploadReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ConsumerServer).InfoFileUpload(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/consumer.consumer/InfoFileUpload",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ConsumerServer).InfoFileUpload(ctx, req.(*InfoFileUploadReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+// Consumer_ServiceDesc is the grpc.ServiceDesc for Consumer service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var Consumer_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "consumer.consumer",
+	HandlerType: (*ConsumerServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "PublishInfo",
+			Handler:    _Consumer_PublishInfo_Handler,
+		},
+		{
+			MethodName: "InfoByUserId",
+			Handler:    _Consumer_InfoByUserId_Handler,
+		},
+		{
+			MethodName: "InfoRelated",
+			Handler:    _Consumer_InfoRelated_Handler,
+		},
+		{
+			MethodName: "MyPublishList",
+			Handler:    _Consumer_MyPublishList_Handler,
+		},
+		{
+			MethodName: "InfoChange",
+			Handler:    _Consumer_InfoChange_Handler,
+		},
+		{
+			MethodName: "StatusQuery",
+			Handler:    _Consumer_StatusQuery_Handler,
+		},
+		{
+			MethodName: "SupplyInfoSearch",
+			Handler:    _Consumer_SupplyInfoSearch_Handler,
+		},
+		{
+			MethodName: "supplyInfoDetail",
+			Handler:    _Consumer_SupplyInfoDetail_Handler,
+		},
+		{
+			MethodName: "InfoFileUpload",
+			Handler:    _Consumer_InfoFileUpload_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "consumer.proto",
+}

+ 66 - 0
rpc/manager/common/infoModel.go

@@ -0,0 +1,66 @@
+package common
+
+type Information struct {
+	Id              string
+	EntId           string
+	AppId           string
+	UserId          string
+	Status          int64
+	Type            int64
+	RelatedId       int64
+	Title           string
+	ProjectCode     string
+	Province        string
+	City            string
+	Industry        string
+	Buyer           string
+	Budget          int64
+	Winner          string
+	Amount          int64
+	Detail          string `gorm:"type:text;"`
+	Attach          string
+	ContactPerson   string
+	ContactPhone    string
+	ContactOvert    string
+	CreateTime      string
+	ReviewTime      string
+	ReviewDesc      string
+	SensitiveTitle  string
+	SensitiveDetail string
+	SensitiveAttach string
+}
+
+type SupplyInfo struct {
+	Id              string
+	EntId           string
+	AppId           string
+	UserId          string
+	Status          int64
+	Type            int64
+	RelatedId       int64
+	Title           string
+	ProjectCode     string
+	Province        string
+	City            string
+	Industry        string
+	Buyer           string
+	Budget          int64
+	Winner          string
+	Amount          int64
+	Detail          string `gorm:"type:text;"`
+	Attach          string
+	ContactPerson   string
+	ContactPhone    string
+	ContactOvert    string
+	CreateTime      string
+	ReviewTime      string
+	ValidityTime    string
+	ReviewDesc      string
+	SensitiveTitle  string
+	SensitiveDetail string
+	SensitiveAttach string
+}
+
+func (SupplyInfo) TableName() string {
+	return "supply_info"
+}

+ 50 - 0
rpc/manager/common/initMysql.go

@@ -0,0 +1,50 @@
+package common
+
+import (
+	"flag"
+	"fmt"
+	cf "jyInfo/rpc/manager/internal/config"
+	"jyInfo/rpc/model"
+	"log"
+
+	_ "github.com/go-sql-driver/mysql"
+	"github.com/jinzhu/gorm"
+	"github.com/zeromicro/go-zero/core/conf"
+)
+
+var configF = flag.String("ff", "etc/manager.yaml", "the config file")
+
+var DB *gorm.DB
+var err error
+
+func init() {
+	conf.MustLoad(*configF, &cf.CommonConfig)
+	//初始化msyql
+	mm := cf.CommonConfig.MysqlMain
+	data_source := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=True&loc=Local",
+		mm.UserName,
+		mm.PassWord,
+		mm.Address,
+		mm.DbName,
+	)
+	DB, err = gorm.Open("mysql", data_source)
+	if err != nil {
+		panic(err)
+	}
+	DB.DB().SetMaxOpenConns(mm.MaxOpenConns) // 最大连接数
+	DB.DB().SetMaxIdleConns(mm.MaxIdleConns) // 最大空闲数
+	log.Println("初始化 mysql")
+
+	//初始redis
+	rm := cf.CommonConfig.Redis
+	model.InitRedis(&rm)
+	model.InitMysql(&mm)
+	//初始redis
+	nm := cf.CommonConfig.Nsq
+	model.InitNsqConfig(&nm)
+
+	//初始redis
+	sm := cf.CommonConfig.Sensitive
+	model.InitSensitive(&sm)
+
+}

+ 25 - 0
rpc/manager/etc/manager.yaml

@@ -0,0 +1,25 @@
+Name: manager.rpc
+ListenOn: 127.0.0.1:8004
+Etcd:
+  Hosts:
+  - 127.0.0.1:2379
+  Key: manager.rpc
+Webrpcport: 8014
+MysqlMain:
+  dbName: base_service
+  address: 192.168.3.11:3366
+  userName: root
+  passWord: Topnet123
+  maxOpenConns: 5
+  maxIdleConns: 5
+Redis:
+  Host: 192.168.3.206
+  addr: 192.168.3.206:1712
+  modules: other
+Nsq:
+  ip: 192.168.3.207:4150
+  topic: jyinfo
+
+Sensitive:
+  information: true
+  supplyInfo: false

+ 18 - 0
rpc/manager/internal/config/config.go

@@ -0,0 +1,18 @@
+package config
+
+import (
+	"jyInfo/entity"
+
+	"github.com/zeromicro/go-zero/zrpc"
+)
+
+type Config struct {
+	zrpc.RpcServerConf
+	Webrpcport int64
+	MysqlMain  entity.MysqlMainStruct
+	Redis      entity.RedisStuct
+	Nsq        entity.NsqStruct
+	Sensitive  entity.Sensitive
+}
+
+var CommonConfig Config

+ 125 - 0
rpc/manager/internal/logic/infodetaillogic.go

@@ -0,0 +1,125 @@
+package logic
+
+import (
+	se "app.yhyue.com/moapp/jybase/encrypt"
+	"context"
+	"jyInfo/rpc/model"
+	"strings"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"jyInfo/rpc/manager/internal/svc"
+	"jyInfo/rpc/manager/types/manager"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type InfoDetailLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewInfoDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InfoDetailLogic {
+	return &InfoDetailLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+//InfoDetail 信息详情
+func (l *InfoDetailLogic) InfoDetail(in *manager.InfoDetailReq) (*manager.InfoDetailResp, error) {
+	//userid := in.UserId
+	var (
+		dataRes manager.InfoDetailResp
+	)
+	//appid := in.AppId
+	var (
+		//公用信息
+		infoData  manager.InfoData
+		applyInfo manager.ApplyInfo //申请人信息
+		review    manager.Review    //审核信息
+		contact   manager.Contact   //联系人信息
+		sensitive manager.Sensitive //敏感词信息
+	)
+
+	data := make(map[string]interface{})
+	msgId := se.SE.DecodeString(in.MsgId)
+	switch in.Type {
+	case 1, 2:
+		if _d := model.Mysql.SelectBySql(`SELECT a.*,b.title as relatedTitle FROM information a 
+				LEFT JOIN information b on (a.related_id =b.id) where a.id =?`, msgId); _d != nil && len(*_d) > 0 {
+			data = (*_d)[0]
+			var (
+				related manager.Related
+			)
+			infoData.Code = common.InterfaceToStr(data["project_code"])
+			infoData.Industry = strings.Split(common.InterfaceToStr(data["industry"]), ",")
+			infoData.Buyer = common.InterfaceToStr(data["buyer"])
+			infoData.Budget = common.Float64All(data["budget"])
+			infoData.Winner = common.InterfaceToStr(data["winner"])
+			infoData.Amount = common.Float64All(data["amount"])
+			infoData.Detail = common.InterfaceToStr(data["detail"])
+			if data["related_id"] != nil && common.IntAll(data["related_id"]) != 0 {
+				related.Id = se.SE.EncodeString(common.InterfaceToStr(data["related_id"])) //关联信息id加密
+				related.Title = common.InterfaceToStr(data["relatedTitle"])
+				infoData.Related = &related
+			}
+		} else {
+			dataRes.ErrCode = -1
+			dataRes.ErrMsg = "查询数据失败"
+			goto env
+		}
+	case 3:
+		if _d := model.Mysql.SelectBySql(`SELECT * FROM supply_info where id = ?) `, msgId); _d != nil && len(*_d) > 0 {
+			data = (*_d)[0]
+			infoData.ValidityTime = common.InterfaceToStr(data["validity_time"])
+		} else {
+			dataRes.ErrCode = -1
+			dataRes.ErrMsg = "查询数据失败"
+			goto env
+		}
+	default:
+		dataRes.ErrCode = -1
+		dataRes.ErrMsg = "数据类型有误"
+		return &dataRes, nil
+	}
+	infoData.Province = common.InterfaceToStr(data["province"])
+	infoData.City = common.InterfaceToStr(data["city"])
+	infoData.AppId = common.Int64All(data["app_id"])
+	infoData.Title = common.InterfaceToStr(data["title"])
+	infoData.MsgType = common.Int64All(data["type"])
+
+	infoData.Detail = common.InterfaceToStr(data["detail"])
+	infoData.Attach = common.InterfaceToStr(data["attach"])
+
+	infoData.PublishStatus = common.Int64All(data["published"])
+	infoData.Phone = common.InterfaceToStr(data["phone"])
+
+	applyInfo.UserId = se.SE.EncodeString(common.InterfaceToStr(data["user_id"])) //用户id加密
+	applyInfo.Time = common.InterfaceToStr(data["create_time"])
+	applyInfo.EntId = se.SE.EncodeString(common.InterfaceToStr(data["ent_id"])) //企业id加密
+	applyInfo.Phone = common.InterfaceToStr(data["phone"])
+	infoData.ApplyInfo = &applyInfo
+
+	review.Status = common.Int64All(data["status"])
+	review.Time = common.InterfaceToStr(data["review_time"])
+	review.Detail = common.InterfaceToStr(data["review_desc"])
+	infoData.Review = &review
+
+	contact.Name = common.InterfaceToStr(data["contact_person"])
+	contact.Phone = common.InterfaceToStr(data["contact_phone"])
+	contact.Overt = common.Int64All(data["contact_overt"])
+	infoData.Contact = &contact
+
+	sensitive.Detail = common.InterfaceToStr(data["sensitive_detail"])
+	sensitive.Title = common.InterfaceToStr(data["sensitive_title"])
+	sensitive.Attach = common.InterfaceToStr(data["sensitive_attach"])
+	infoData.Sensitive = &sensitive
+
+	dataRes.Data = &infoData
+env:
+	return &dataRes, nil
+
+}

+ 178 - 0
rpc/manager/internal/logic/infoexaminelogic.go

@@ -0,0 +1,178 @@
+package logic
+
+import (
+	se "app.yhyue.com/moapp/jybase/encrypt"
+	//"bp.jydev.jianyu360.cn/BaseService/resourceCenter/rpc/pb"
+	//"bp.jydev.jianyu360.cn/BaseService/resourceCenter/rpc/resource"
+	"context"
+	//"errors"
+	"fmt"
+	jycommon "jyInfo/rpc/manager/common"
+	md "jyInfo/rpc/model"
+	model "jyInfo/rpc/model/es"
+	"jyInfo/rpc/util"
+	"time"
+
+	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/redis"
+
+	"jyInfo/rpc/manager/internal/svc"
+	"jyInfo/rpc/manager/types/manager"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type InfoExamineLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewInfoExamineLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InfoExamineLogic {
+	return &InfoExamineLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 信息审核
+func (l *InfoExamineLogic) InfoExamine(in *manager.InfoExamineReq) (*manager.InfoExamineResp, error) {
+	// todo: add your logic here and delete this line
+	var resp manager.InfoExamineResp
+	msgId := se.SE.DecodeString(in.MsgId) //信息id解密
+	switch in.ReviewStatus {
+	case 3:
+		query := make(map[string]interface{})
+		query["id"] = msgId
+		query["app_id"] = in.AppId
+		upData := make(map[string]interface{})
+		upData["status"] = -2
+		upData["review_desc"] = in.ReviewDetail
+		upData["review_time"] = time.Now().Format("2006-01-02 15:04:05")
+		if in.MsgType == 1 || in.MsgType == 2 {
+			var info jycommon.Information
+			db := jycommon.DB.Where(query).First(&info).Update(upData)
+			if db.Error != nil {
+				resp.ErrCode = -1
+				resp.ErrMsg = "审核不通过,更新数据失败"
+			}
+		} else if in.MsgType == 3 {
+			var info jycommon.SupplyInfo
+			db := jycommon.DB.Where(query).First(&info)
+			if db.Error != nil {
+				resp.ErrCode = -1
+				resp.ErrMsg = "审核不通过,供应信息数据查询失败"
+			} else {
+				//TODO 释放供应信息点数
+				//if err := ResourcePowerRelease(md.ResourceCenterRpc, common.Int64All(info.EntId), common.Int64All(info.UserId), md.FuncCode, common.InterfaceToStr(info.AppId)); err != nil {
+				//	resp.ErrCode = -1
+				//	resp.ErrMsg = err.Error()
+				//	break
+				//}
+				if db.Update(upData) != nil {
+					resp.ErrCode = -1
+					resp.ErrMsg = "审核不通过,供应信息更新失败"
+				}
+			}
+		} else {
+			resp.ErrCode = -1
+			resp.ErrMsg = "信息类型有误"
+		}
+
+	case 2:
+		query := make(map[string]interface{})
+		query["id"] = msgId
+		query["app_id"] = in.AppId
+
+		upData := make(map[string]interface{})
+		upData["review_desc"] = in.ReviewDetail
+		upData["status"] = 4
+		upData["review_time"] = time.Now().Format("2006-01-02 15:04:05")
+		if in.MsgType == 1 || in.MsgType == 2 {
+			var info jycommon.Information
+			db := jycommon.DB.Where(query).First(&info)
+			if db.Error != nil {
+				fmt.Println(db.Error)
+				resp.ErrCode = -1
+				resp.ErrMsg = "人工审核通过,获取信息失败"
+				break
+			} else {
+				//nsq发布信息
+				appInfo := common.StructToMapMore(info)
+				nsq, err := util.NewNsqInfo(md.NsqConfig.Ip, md.NsqConfig.Topic, in.MsgId, common.InterfaceToStr(info.Type), "2", false, appInfo)
+				if err != nil || nsq.NsqPushInfo() != nil {
+					resp.ErrCode = -1
+					resp.ErrMsg = "人工审核通过,调用nsq失败"
+					break
+				}
+				if db.Update(upData).Error != nil {
+					resp.ErrCode = -1
+					resp.ErrMsg = "人工审核通过,nsq发布成功,更新信息失败"
+				}
+			}
+		} else if in.MsgType == 3 {
+			var info jycommon.SupplyInfo
+			db := jycommon.DB.Where(query).First(&info)
+			if db.Error != nil {
+				resp.ErrCode = -1
+				resp.ErrMsg = "人工审核通过,获取供应信息数据失败"
+			} else {
+				// 供应信息生成索引
+				upData["publish_time"] = time.Now().Format("2006-01-02 15:04:05")
+				upData["published"] = 2
+				entNameKye := fmt.Sprintf("userEntName_%s_%s_%d", info.UserId, in.MsgId, in.MsgType)
+				entName := redis.GetStr("other", entNameKye)
+				supInfo := make(map[string]interface{})
+				supInfo["id"] = info.Id
+				supInfo["title"] = info.Title
+				supInfo["detail"] = info.Detail
+				supInfo["province"] = info.Province
+				supInfo["city"] = info.City
+				if !model.SaveSupplyInfo(entName, supInfo) {
+					resp.ErrCode = -1
+					resp.ErrMsg = "人工审核通过,信息发布调用失败"
+					break
+				}
+				if db.Update(upData).Error != nil {
+					resp.ErrCode = -1
+					resp.ErrMsg = "人工审核通过,供应信息发布调用成功,更新信息状态失败"
+				}
+			}
+		} else {
+			resp.ErrCode = -1
+			resp.ErrMsg = "信息类型有误"
+		}
+	default:
+		resp.ErrCode = -1
+		resp.ErrMsg = "审批状态有误"
+	}
+	return &resp, nil
+}
+
+//
+//func ResourcePowerRelease(rc resource.Resource, eId, uId int64, funcCode, Appid string) error {
+//	res, err := rc.Deduction(context.Background(), &pb.DeductionReq{
+//		Appid:        Appid,
+//		EntId:        eId,
+//		UserId:       uId,
+//		FunctionCode: funcCode,
+//		Count:        1,
+//		Ids:          nil,
+//	})
+//	if err != nil {
+//		return err
+//	}
+//	//0:失败 1:成功 -1:不在有效期内 -2:数量不足 -3:没有授权
+//	switch res.Status {
+//	case 0:
+//		return errors.New(fmt.Sprintf("账户 eId:%d,uId:%d 释放业务%s权限失败", eId, uId, funcCode))
+//	case -1:
+//		return errors.New(fmt.Sprintf("账户 eId:%d,uId:%d 释放业务%s权限失败,权限已过期", eId, uId, funcCode))
+//	case -2:
+//		return errors.New(fmt.Sprintf("账户 eId:%d,uId:%d 释放业务%s权限失败,余额不足", eId, uId, funcCode))
+//	case -3:
+//		return errors.New(fmt.Sprintf("账户 eId:%d,uId:%d 释放业务%s权限失败", eId, uId, funcCode))
+//	}
+//	return nil
+//}

+ 135 - 0
rpc/manager/internal/logic/infolistlogic.go

@@ -0,0 +1,135 @@
+package logic
+
+import (
+	se "app.yhyue.com/moapp/jybase/encrypt"
+	"context"
+	"fmt"
+	"jyInfo/rpc/manager/internal/svc"
+	"jyInfo/rpc/manager/types/manager"
+	"jyInfo/rpc/model"
+	"strings"
+
+	"app.yhyue.com/moapp/jybase/common"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type InfoListLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewInfoListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InfoListLogic {
+	return &InfoListLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 信息列表
+func (l *InfoListLogic) InfoList(in *manager.InfoListReq) (*manager.InfoListResp, error) {
+	var (
+		query     []string
+		queryInfo string
+		count     int64
+	)
+	if in.MsgType != 0 {
+		query = append(query, `type=`+common.InterfaceToStr(in.MsgType)+` `)
+	}
+
+	if in.PhoneType != 0 {
+		if in.PhoneType == 1 {
+			query = append(query, ` phone LIKE '%`+in.Phone+`%' `)
+		} else {
+			query = append(query, ` contact_phone LIKE '%`+in.Phone+`%' `)
+		}
+	}
+	if in.ApplyStartTime != "" {
+		query = append(query, ` create_time >="`+in.ApplyStartTime+`"`)
+	}
+
+	if in.IsDel != 0 {
+		query = append(query, ` is_del =`+common.InterfaceToStr(in.IsDel))
+	}
+	if in.Published != 0 {
+		query = append(query, ` published =`+common.InterfaceToStr(in.Published))
+	}
+
+	if in.ApplyEndTime != "" {
+		query = append(query, ` create_time <="`+in.ApplyEndTime+`"`)
+	}
+
+	if in.AppId != 0 {
+		query = append(query, ` app_id =`+common.InterfaceToStr(in.AppId))
+	}
+	//supQuery := query
+	if in.ReviewStatus != 0 {
+		query = append(query, ` status =`+common.InterfaceToStr(in.ReviewStatus))
+		//supQuery = append(supQuery, ` status =`+common.Str(in.ReviewStatus))
+
+	}
+	if len(query) > 0 {
+		queryInfo = fmt.Sprintf(" where %s", strings.Join(query, " and "))
+		//querySup = fmt.Sprintf(" where %s", strings.Join(supQuery, " and "))
+	}
+	if in.PageSize == 0 {
+		in.PageSize = 10
+	}
+	if in.PageIndex == 0 {
+		in.PageIndex = 1
+	}
+	if in.PageIndex == 1 {
+		count = model.Mysql.CountBySql(`SELECT count(1)  from (SELECT id,type,status,phone,contact_person,contact_phone,title,create_time  from information ` + queryInfo + `
+			union all
+			SELECT id,type,status,phone,contact_person,contact_phone,title,create_time  from supply_info ` + queryInfo + ` ) a`)
+	}
+	var offset int
+	if in.PageIndex == 1 {
+		offset = 0
+	} else {
+		offset = common.IntAll((in.PageIndex - 1) * in.PageSize)
+	}
+	allData := model.Mysql.SelectBySql(`SELECT a.id,a.type,a.status,a.phone,a.contact_person,a.contact_person,a.title,a.create_time  from (SELECT id,type,status,phone,contact_person,contact_phone,title,create_time  from information `+queryInfo+`
+			union all
+			SELECT id,type,status,phone,contact_person,contact_phone,title,create_time  from supply_info `+queryInfo+` ) a  order by a.create_time limit ?,? `, offset, in.PageSize)
+	if allData == nil || len(*allData) == 0 {
+		return &manager.InfoListResp{
+			ErrCode: 0,
+			ErrMsg:  "暂无数据",
+			Data:    nil,
+		}, nil
+	}
+
+	results := []*manager.InfoList{}
+	for _, v := range *allData {
+		res := manager.InfoList{}
+		var contact manager.Contact
+		if common.IntAll(v["type"]) == 1 || common.IntAll(v["type"]) == 2 {
+			res.Checked = model.Sensitive.Information
+		} else {
+			res.Checked = model.Sensitive.SupplyInfo
+		}
+		res.Id = se.SE.EncodeString(common.InterfaceToStr(v["id"])) //信息id加密
+		res.Title = common.InterfaceToStr(v["title"])
+		res.MsgType = common.Int64All(v["type"])
+		res.Phone = common.InterfaceToStr(v["phone"])
+		res.ReviewStatus = common.Int64All(v["status"])
+		res.Published = common.Int64All(v["published"])
+		res.IsDel = common.Int64All(v["published"])
+		res.ApplyTime = common.InterfaceToStr(v["create_time"])
+		contact.Name = common.InterfaceToStr(v["contact_person"])
+		contact.Phone = common.InterfaceToStr(v["contact_phone"])
+		res.Contact = &contact
+		results = append(results, &res)
+	}
+	data := manager.Data{}
+	data.Count = count
+	data.List = results
+	return &manager.InfoListResp{
+		ErrCode: 0,
+		ErrMsg:  "",
+		Data:    &data,
+	}, nil
+}

+ 36 - 0
rpc/manager/internal/logic/institutionsfreezelogic.go

@@ -0,0 +1,36 @@
+package logic
+
+import (
+	"context"
+	"jyInfo/rpc/model"
+
+	"jyInfo/rpc/manager/internal/svc"
+	"jyInfo/rpc/manager/types/manager"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type InstitutionsFreezeLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewInstitutionsFreezeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InstitutionsFreezeLogic {
+	return &InstitutionsFreezeLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 管理后台机构冻结
+func (l *InstitutionsFreezeLogic) InstitutionsFreeze(in *manager.InstitutionsFreezeReq) (*manager.InfoResp, error) {
+	// todo: add your logic here and delete this line
+	var resp manager.InfoResp
+
+	model.Mysql.SelectBySql(`UPDATE information SET status = -1 ,review_desc = "机构已冻结" WHERE status IN (0,1,2) and province =1 and is_del = 1 and ent_id = ` + in.EntId)
+	model.Mysql.SelectBySql(`UPDATE supply_info SET status = -1 ,review_desc = "机构已冻结" WHERE status IN (0,1,2) and province =1 and is_del = 1 and ent_id = ` + in.EntId)
+
+	return &resp, nil
+}

+ 47 - 0
rpc/manager/internal/server/managerserver.go

@@ -0,0 +1,47 @@
+// Code generated by goctl. DO NOT EDIT!
+// Source: manager.proto
+
+package server
+
+import (
+	"context"
+
+	"jyInfo/rpc/manager/internal/logic"
+	"jyInfo/rpc/manager/internal/svc"
+	"jyInfo/rpc/manager/types/manager"
+)
+
+type ManagerServer struct {
+	svcCtx *svc.ServiceContext
+	manager.UnimplementedManagerServer
+}
+
+func NewManagerServer(svcCtx *svc.ServiceContext) *ManagerServer {
+	return &ManagerServer{
+		svcCtx: svcCtx,
+	}
+}
+
+// 信息列表
+func (s *ManagerServer) InfoList(ctx context.Context, in *manager.InfoListReq) (*manager.InfoListResp, error) {
+	l := logic.NewInfoListLogic(ctx, s.svcCtx)
+	return l.InfoList(in)
+}
+
+// 信息详情
+func (s *ManagerServer) InfoDetail(ctx context.Context, in *manager.InfoDetailReq) (*manager.InfoDetailResp, error) {
+	l := logic.NewInfoDetailLogic(ctx, s.svcCtx)
+	return l.InfoDetail(in)
+}
+
+// 信息审核
+func (s *ManagerServer) InfoExamine(ctx context.Context, in *manager.InfoExamineReq) (*manager.InfoExamineResp, error) {
+	l := logic.NewInfoExamineLogic(ctx, s.svcCtx)
+	return l.InfoExamine(in)
+}
+
+// 管理后台机构冻结
+func (s *ManagerServer) InstitutionsFreeze(ctx context.Context, in *manager.InstitutionsFreezeReq) (*manager.InfoResp, error) {
+	l := logic.NewInstitutionsFreezeLogic(ctx, s.svcCtx)
+	return l.InstitutionsFreeze(in)
+}

+ 13 - 0
rpc/manager/internal/svc/servicecontext.go

@@ -0,0 +1,13 @@
+package svc
+
+import "jyInfo/rpc/manager/internal/config"
+
+type ServiceContext struct {
+	Config config.Config
+}
+
+func NewServiceContext(c config.Config) *ServiceContext {
+	return &ServiceContext{
+		Config: c,
+	}
+}

+ 55 - 0
rpc/manager/manager.go

@@ -0,0 +1,55 @@
+package main
+
+import (
+	mc "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/endless"
+	"flag"
+	"fmt"
+	"jyInfo/rpc/util"
+	"log"
+
+	"jyInfo/rpc/manager/internal/config"
+	"jyInfo/rpc/manager/internal/server"
+	"jyInfo/rpc/manager/internal/svc"
+	"jyInfo/rpc/manager/types/manager"
+
+	_ "jyInfo/rpc/manager/common"
+
+	"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/manager.yaml", "the config file")
+
+func main() {
+	//热重启
+	go func() {
+		err := endless.ListenAndServe(":"+mc.InterfaceToStr(config.CommonConfig.Webrpcport), nil, func() {})
+		if err != nil {
+			log.Println("ListenAndServe: ", err)
+		}
+	}()
+	flag.Parse()
+
+	var c config.Config
+	conf.MustLoad(*configFile, &c)
+	ctx := svc.NewServiceContext(c)
+	svr := server.NewManagerServer(ctx)
+
+	s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) {
+		manager.RegisterManagerServer(grpcServer, svr)
+
+		if c.Mode == service.DevMode || c.Mode == service.TestMode {
+			reflection.Register(grpcServer)
+		}
+	})
+	//日志记录
+	s.AddUnaryInterceptors(util.CustomInterceptors)
+	defer s.Stop()
+
+	fmt.Printf("Starting rpc server at %s...\n", c.ListenOn)
+	s.Start()
+}

+ 173 - 0
rpc/manager/manager.proto

@@ -0,0 +1,173 @@
+syntax = "proto3";
+
+package manager;
+option go_package = "./manager";
+
+//信息列表Req
+message InfoListReq {
+  	string userId = 1;//用户id
+		int64 msgType = 2;//信息类型:1:招标信息 2:采购信息 3:供应信息
+		int64 phoneType = 3;//手机号查询内容。1:注册手机号;2:联系人手机号
+		string phone = 4;//手机号
+		int64 reviewStatus = 5;//1:待审核;2:自动审核通过(不包含敏感词);3:人工审核通过;4:审核通过后删除(此情况属于审核通过);-1:自动审核不通过;-2:人工审核不通过;-3:用户已撤回(用户删除待审核完成的信息)
+		string applyStartTime = 6;//申请开始时间
+		string applyEndTime = 7;//申请结束时间
+  	int64 appId = 8;//剑鱼标识 默认10000
+		int64 PageSize = 9;//数
+		int64 PageIndex = 10;//页
+		int64 IsDel = 11;//是否删除
+		int64 Published = 12;//发布状态
+}
+
+//信息列表Resp
+message InfoListResp {
+		int64 err_code = 1;
+  	string err_msg = 2;
+		Data data = 3;
+}
+message Data {
+	int64 count = 1;
+	repeated InfoList list = 2;
+}
+//信息列表Resp-list
+message InfoList{
+		string title = 1;//标题
+		string id = 2;//信息id
+		int64 reviewStatus = 3;//审核状态···
+		int64 isDel = 4;//删除状态··
+		int64 published = 5;//发布状态····
+		int64 msgType = 6;//信息类型
+		string applyTime = 7;//申请时间
+		string phone = 8;//注册手机号
+		bool  checked =9; //是否需要审核
+		Contact contact = 10;
+}
+
+//信息详情Req
+message InfoDetailReq{
+		string userId = 1;//用户id
+		string msgId = 2;//信息id
+  	int64 appId = 3;//剑鱼标识 默认10000
+		int64 type = 4;//信息状态
+}
+
+//信息详情Resp
+message InfoDetailResp{
+		int64 err_code = 1;
+		string err_msg = 2;
+		InfoData data = 3;
+}
+
+
+message InfoData {
+	int64 msgType = 1;//信息类型
+	string code = 2;//项目代码
+	string province = 3;//省份
+	string city = 4;//城市
+	repeated string industry = 5;//行业列表
+	string buyer = 6;//采购单位
+	double budget = 7;//预算
+	string winner = 8;//中标企业
+	double amount = 9;//中标金额
+	string detail = 10;//详情
+	string attach = 11;//附件列表
+	string title = 12;//信息类型
+	string validityTime = 13;//供应信息有效期
+	string publishTime = 14;//发布时间
+	int64 publishStatus = 15;//发布时间
+	int64 appId = 16;//发布时间
+	string phone = 17;//注册手机号
+	int64 entId = 18;//企业id
+	int64 isDel = 19;//是否删除
+
+
+	ApplyInfo  ApplyInfo = 20;//关联信息
+	Review  Review = 21;//审核
+	Contact  Contact = 22;//联系人信息
+	Sensitive  sensitive = 23;//敏感词
+	Related  Related = 24;//关联信息
+}//信息详情
+
+
+message Contact{
+	string name = 1;//联系人姓名
+	string phone = 2;//联系人手机号
+	int64 overt = 3;//是否公开 1:展示;2:隐藏
+}
+
+message Related{
+	string id = 1;//关联项目id
+	string title = 2;//关联项目标题
+}
+
+message ApplyInfo{
+	string userId = 1;//申请人id
+	string phone = 2;//手机号
+	string entId = 3;//发布单位
+	string time = 4;//申请时间
+}
+
+message Review{
+	int64 status = 1;//审核状态
+	string detail = 2;//未通过原因
+	string time = 3;//审核时间
+}
+message Sensitive{
+	string title = 1;//标题敏感词
+	string detail = 2;//详情敏感词
+	string attach = 3;//附件敏感词
+}
+
+//审核action Req
+message InfoExamineReq{
+		string msgId = 1;//信息id
+		int64 reviewStatus = 2;//审核状态:1:待审核|2:审核通过|3:审核不通过
+		string reviewDetail = 3;//审核不通过原因
+  	int64 appId = 4;//剑鱼标识 默认10000
+		int64 msgType = 5;//类型
+}
+//审核action Resp
+message InfoExamineResp{
+	int64 err_code = 1;
+	string err_msg = 2;
+	message Data{
+		string msgId = 1;
+	}
+}
+
+//修改中台信息状态 Req
+message InfoStateReq{
+	string id = 1;//信息id
+}
+
+//修改中台信息内容 Req
+message InfoDataReq{
+	string id = 1;//信息id
+	string msgType = 2;//信息类型
+	repeated string title = 3; //敏感词-标题
+	repeated string detail = 4;//敏感词-详情
+	string attachments = 5;//敏感词-附件
+	string attach_txt = 6;//识别后的附件信息(对应检索库)
+}
+
+//修改中台 Resp
+message InfoResp{
+	int64 err_code = 1;
+	string err_msg = 2;
+}
+
+message InstitutionsFreezeReq {
+	int64 appId = 1;//
+	string entId = 2;//
+}
+//
+service manager {
+	//信息列表
+  	rpc InfoList(InfoListReq) returns(InfoListResp);
+	//信息详情
+		rpc InfoDetail(InfoDetailReq) returns(InfoDetailResp);
+	//信息审核
+		rpc InfoExamine(InfoExamineReq) returns(InfoExamineResp);
+	//管理后台机构冻结
+		rpc InstitutionsFreeze(InstitutionsFreezeReq) returns(InfoResp);
+}

+ 80 - 0
rpc/manager/manager/manager.go

@@ -0,0 +1,80 @@
+// Code generated by goctl. DO NOT EDIT!
+// Source: manager.proto
+
+package manager
+
+import (
+	"context"
+
+	"jyInfo/rpc/manager/types/manager"
+
+	"github.com/zeromicro/go-zero/zrpc"
+	"google.golang.org/grpc"
+)
+
+type (
+	ApplyInfo             = manager.ApplyInfo
+	Contact               = manager.Contact
+	Data                  = manager.Data
+	InfoData              = manager.InfoData
+	InfoDataReq           = manager.InfoDataReq
+	InfoDetailReq         = manager.InfoDetailReq
+	InfoDetailResp        = manager.InfoDetailResp
+	InfoExamineReq        = manager.InfoExamineReq
+	InfoExamineResp       = manager.InfoExamineResp
+	InfoExamineResp_Data  = manager.InfoExamineResp_Data
+	InfoList              = manager.InfoList
+	InfoListReq           = manager.InfoListReq
+	InfoListResp          = manager.InfoListResp
+	InfoResp              = manager.InfoResp
+	InfoStateReq          = manager.InfoStateReq
+	InstitutionsFreezeReq = manager.InstitutionsFreezeReq
+	Related               = manager.Related
+	Review                = manager.Review
+	Sensitive             = manager.Sensitive
+
+	Manager interface {
+		// 信息列表
+		InfoList(ctx context.Context, in *InfoListReq, opts ...grpc.CallOption) (*InfoListResp, error)
+		// 信息详情
+		InfoDetail(ctx context.Context, in *InfoDetailReq, opts ...grpc.CallOption) (*InfoDetailResp, error)
+		// 信息审核
+		InfoExamine(ctx context.Context, in *InfoExamineReq, opts ...grpc.CallOption) (*InfoExamineResp, error)
+		// 管理后台机构冻结
+		InstitutionsFreeze(ctx context.Context, in *InstitutionsFreezeReq, opts ...grpc.CallOption) (*InfoResp, error)
+	}
+
+	defaultManager struct {
+		cli zrpc.Client
+	}
+)
+
+func NewManager(cli zrpc.Client) Manager {
+	return &defaultManager{
+		cli: cli,
+	}
+}
+
+// 信息列表
+func (m *defaultManager) InfoList(ctx context.Context, in *InfoListReq, opts ...grpc.CallOption) (*InfoListResp, error) {
+	client := manager.NewManagerClient(m.cli.Conn())
+	return client.InfoList(ctx, in, opts...)
+}
+
+// 信息详情
+func (m *defaultManager) InfoDetail(ctx context.Context, in *InfoDetailReq, opts ...grpc.CallOption) (*InfoDetailResp, error) {
+	client := manager.NewManagerClient(m.cli.Conn())
+	return client.InfoDetail(ctx, in, opts...)
+}
+
+// 信息审核
+func (m *defaultManager) InfoExamine(ctx context.Context, in *InfoExamineReq, opts ...grpc.CallOption) (*InfoExamineResp, error) {
+	client := manager.NewManagerClient(m.cli.Conn())
+	return client.InfoExamine(ctx, in, opts...)
+}
+
+// 管理后台机构冻结
+func (m *defaultManager) InstitutionsFreeze(ctx context.Context, in *InstitutionsFreezeReq, opts ...grpc.CallOption) (*InfoResp, error) {
+	client := manager.NewManagerClient(m.cli.Conn())
+	return client.InstitutionsFreeze(ctx, in, opts...)
+}

+ 2024 - 0
rpc/manager/types/manager/manager.pb.go

@@ -0,0 +1,2024 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.23.0
+// 	protoc        v3.15.5
+// source: manager.proto
+
+package manager
+
+import (
+	proto "github.com/golang/protobuf/proto"
+	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)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+//信息列表Req
+type InfoListReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UserId         string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"`                 //用户id
+	MsgType        int64  `protobuf:"varint,2,opt,name=msgType,proto3" json:"msgType,omitempty"`              //信息类型:1:招标信息 2:采购信息 3:供应信息
+	PhoneType      int64  `protobuf:"varint,3,opt,name=phoneType,proto3" json:"phoneType,omitempty"`          //手机号查询内容。1:注册手机号;2:联系人手机号
+	Phone          string `protobuf:"bytes,4,opt,name=phone,proto3" json:"phone,omitempty"`                   //手机号
+	ReviewStatus   int64  `protobuf:"varint,5,opt,name=reviewStatus,proto3" json:"reviewStatus,omitempty"`    //1:待审核;2:自动审核通过(不包含敏感词);3:人工审核通过;4:审核通过后删除(此情况属于审核通过);-1:自动审核不通过;-2:人工审核不通过;-3:用户已撤回(用户删除待审核完成的信息)
+	ApplyStartTime string `protobuf:"bytes,6,opt,name=applyStartTime,proto3" json:"applyStartTime,omitempty"` //申请开始时间
+	ApplyEndTime   string `protobuf:"bytes,7,opt,name=applyEndTime,proto3" json:"applyEndTime,omitempty"`     //申请结束时间
+	AppId          int64  `protobuf:"varint,8,opt,name=appId,proto3" json:"appId,omitempty"`                  //剑鱼标识 默认10000
+	PageSize       int64  `protobuf:"varint,9,opt,name=PageSize,proto3" json:"PageSize,omitempty"`            //数
+	PageIndex      int64  `protobuf:"varint,10,opt,name=PageIndex,proto3" json:"PageIndex,omitempty"`         //页
+	IsDel          int64  `protobuf:"varint,11,opt,name=IsDel,proto3" json:"IsDel,omitempty"`                 //是否删除
+	Published      int64  `protobuf:"varint,12,opt,name=Published,proto3" json:"Published,omitempty"`         //发布状态
+}
+
+func (x *InfoListReq) Reset() {
+	*x = InfoListReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoListReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoListReq) ProtoMessage() {}
+
+func (x *InfoListReq) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_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 InfoListReq.ProtoReflect.Descriptor instead.
+func (*InfoListReq) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *InfoListReq) GetUserId() string {
+	if x != nil {
+		return x.UserId
+	}
+	return ""
+}
+
+func (x *InfoListReq) GetMsgType() int64 {
+	if x != nil {
+		return x.MsgType
+	}
+	return 0
+}
+
+func (x *InfoListReq) GetPhoneType() int64 {
+	if x != nil {
+		return x.PhoneType
+	}
+	return 0
+}
+
+func (x *InfoListReq) GetPhone() string {
+	if x != nil {
+		return x.Phone
+	}
+	return ""
+}
+
+func (x *InfoListReq) GetReviewStatus() int64 {
+	if x != nil {
+		return x.ReviewStatus
+	}
+	return 0
+}
+
+func (x *InfoListReq) GetApplyStartTime() string {
+	if x != nil {
+		return x.ApplyStartTime
+	}
+	return ""
+}
+
+func (x *InfoListReq) GetApplyEndTime() string {
+	if x != nil {
+		return x.ApplyEndTime
+	}
+	return ""
+}
+
+func (x *InfoListReq) GetAppId() int64 {
+	if x != nil {
+		return x.AppId
+	}
+	return 0
+}
+
+func (x *InfoListReq) GetPageSize() int64 {
+	if x != nil {
+		return x.PageSize
+	}
+	return 0
+}
+
+func (x *InfoListReq) GetPageIndex() int64 {
+	if x != nil {
+		return x.PageIndex
+	}
+	return 0
+}
+
+func (x *InfoListReq) GetIsDel() int64 {
+	if x != nil {
+		return x.IsDel
+	}
+	return 0
+}
+
+func (x *InfoListReq) GetPublished() int64 {
+	if x != nil {
+		return x.Published
+	}
+	return 0
+}
+
+//信息列表Resp
+type InfoListResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64  `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	Data    *Data  `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (x *InfoListResp) Reset() {
+	*x = InfoListResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoListResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoListResp) ProtoMessage() {}
+
+func (x *InfoListResp) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_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 InfoListResp.ProtoReflect.Descriptor instead.
+func (*InfoListResp) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *InfoListResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *InfoListResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *InfoListResp) GetData() *Data {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+type Data struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Count int64       `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"`
+	List  []*InfoList `protobuf:"bytes,2,rep,name=list,proto3" json:"list,omitempty"`
+}
+
+func (x *Data) Reset() {
+	*x = Data{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Data) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Data) ProtoMessage() {}
+
+func (x *Data) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_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 Data.ProtoReflect.Descriptor instead.
+func (*Data) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *Data) GetCount() int64 {
+	if x != nil {
+		return x.Count
+	}
+	return 0
+}
+
+func (x *Data) GetList() []*InfoList {
+	if x != nil {
+		return x.List
+	}
+	return nil
+}
+
+//信息列表Resp-list
+type InfoList struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Title        string   `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`                //标题
+	Id           string   `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`                      //信息id
+	ReviewStatus int64    `protobuf:"varint,3,opt,name=reviewStatus,proto3" json:"reviewStatus,omitempty"` //审核状态···
+	IsDel        int64    `protobuf:"varint,4,opt,name=isDel,proto3" json:"isDel,omitempty"`               //删除状态··
+	Published    int64    `protobuf:"varint,5,opt,name=published,proto3" json:"published,omitempty"`       //发布状态····
+	MsgType      int64    `protobuf:"varint,6,opt,name=msgType,proto3" json:"msgType,omitempty"`           //信息类型
+	ApplyTime    string   `protobuf:"bytes,7,opt,name=applyTime,proto3" json:"applyTime,omitempty"`        //申请时间
+	Phone        string   `protobuf:"bytes,8,opt,name=phone,proto3" json:"phone,omitempty"`                //注册手机号
+	Checked      bool     `protobuf:"varint,9,opt,name=checked,proto3" json:"checked,omitempty"`           //是否需要审核
+	Contact      *Contact `protobuf:"bytes,10,opt,name=contact,proto3" json:"contact,omitempty"`
+}
+
+func (x *InfoList) Reset() {
+	*x = InfoList{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoList) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoList) ProtoMessage() {}
+
+func (x *InfoList) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[3]
+	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 InfoList.ProtoReflect.Descriptor instead.
+func (*InfoList) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *InfoList) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+func (x *InfoList) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *InfoList) GetReviewStatus() int64 {
+	if x != nil {
+		return x.ReviewStatus
+	}
+	return 0
+}
+
+func (x *InfoList) GetIsDel() int64 {
+	if x != nil {
+		return x.IsDel
+	}
+	return 0
+}
+
+func (x *InfoList) GetPublished() int64 {
+	if x != nil {
+		return x.Published
+	}
+	return 0
+}
+
+func (x *InfoList) GetMsgType() int64 {
+	if x != nil {
+		return x.MsgType
+	}
+	return 0
+}
+
+func (x *InfoList) GetApplyTime() string {
+	if x != nil {
+		return x.ApplyTime
+	}
+	return ""
+}
+
+func (x *InfoList) GetPhone() string {
+	if x != nil {
+		return x.Phone
+	}
+	return ""
+}
+
+func (x *InfoList) GetChecked() bool {
+	if x != nil {
+		return x.Checked
+	}
+	return false
+}
+
+func (x *InfoList) GetContact() *Contact {
+	if x != nil {
+		return x.Contact
+	}
+	return nil
+}
+
+//信息详情Req
+type InfoDetailReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"` //用户id
+	MsgId  string `protobuf:"bytes,2,opt,name=msgId,proto3" json:"msgId,omitempty"`   //信息id
+	AppId  int64  `protobuf:"varint,3,opt,name=appId,proto3" json:"appId,omitempty"`  //剑鱼标识 默认10000
+	Type   int64  `protobuf:"varint,4,opt,name=type,proto3" json:"type,omitempty"`    //信息状态
+}
+
+func (x *InfoDetailReq) Reset() {
+	*x = InfoDetailReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoDetailReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoDetailReq) ProtoMessage() {}
+
+func (x *InfoDetailReq) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[4]
+	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 InfoDetailReq.ProtoReflect.Descriptor instead.
+func (*InfoDetailReq) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *InfoDetailReq) GetUserId() string {
+	if x != nil {
+		return x.UserId
+	}
+	return ""
+}
+
+func (x *InfoDetailReq) GetMsgId() string {
+	if x != nil {
+		return x.MsgId
+	}
+	return ""
+}
+
+func (x *InfoDetailReq) GetAppId() int64 {
+	if x != nil {
+		return x.AppId
+	}
+	return 0
+}
+
+func (x *InfoDetailReq) GetType() int64 {
+	if x != nil {
+		return x.Type
+	}
+	return 0
+}
+
+//信息详情Resp
+type InfoDetailResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64     `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string    `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+	Data    *InfoData `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+}
+
+func (x *InfoDetailResp) Reset() {
+	*x = InfoDetailResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoDetailResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoDetailResp) ProtoMessage() {}
+
+func (x *InfoDetailResp) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[5]
+	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 InfoDetailResp.ProtoReflect.Descriptor instead.
+func (*InfoDetailResp) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *InfoDetailResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *InfoDetailResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *InfoDetailResp) GetData() *InfoData {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+type InfoData struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	MsgType       int64      `protobuf:"varint,1,opt,name=msgType,proto3" json:"msgType,omitempty"`              //信息类型
+	Code          string     `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"`                     //项目代码
+	Province      string     `protobuf:"bytes,3,opt,name=province,proto3" json:"province,omitempty"`             //省份
+	City          string     `protobuf:"bytes,4,opt,name=city,proto3" json:"city,omitempty"`                     //城市
+	Industry      []string   `protobuf:"bytes,5,rep,name=industry,proto3" json:"industry,omitempty"`             //行业列表
+	Buyer         string     `protobuf:"bytes,6,opt,name=buyer,proto3" json:"buyer,omitempty"`                   //采购单位
+	Budget        float64    `protobuf:"fixed64,7,opt,name=budget,proto3" json:"budget,omitempty"`               //预算
+	Winner        string     `protobuf:"bytes,8,opt,name=winner,proto3" json:"winner,omitempty"`                 //中标企业
+	Amount        float64    `protobuf:"fixed64,9,opt,name=amount,proto3" json:"amount,omitempty"`               //中标金额
+	Detail        string     `protobuf:"bytes,10,opt,name=detail,proto3" json:"detail,omitempty"`                //详情
+	Attach        string     `protobuf:"bytes,11,opt,name=attach,proto3" json:"attach,omitempty"`                //附件列表
+	Title         string     `protobuf:"bytes,12,opt,name=title,proto3" json:"title,omitempty"`                  //信息类型
+	ValidityTime  string     `protobuf:"bytes,13,opt,name=validityTime,proto3" json:"validityTime,omitempty"`    //供应信息有效期
+	PublishTime   string     `protobuf:"bytes,14,opt,name=publishTime,proto3" json:"publishTime,omitempty"`      //发布时间
+	PublishStatus int64      `protobuf:"varint,15,opt,name=publishStatus,proto3" json:"publishStatus,omitempty"` //发布时间
+	AppId         int64      `protobuf:"varint,16,opt,name=appId,proto3" json:"appId,omitempty"`                 //发布时间
+	Phone         string     `protobuf:"bytes,17,opt,name=phone,proto3" json:"phone,omitempty"`                  //注册手机号
+	EntId         int64      `protobuf:"varint,18,opt,name=entId,proto3" json:"entId,omitempty"`                 //企业id
+	IsDel         int64      `protobuf:"varint,19,opt,name=isDel,proto3" json:"isDel,omitempty"`                 //是否删除
+	ApplyInfo     *ApplyInfo `protobuf:"bytes,20,opt,name=ApplyInfo,proto3" json:"ApplyInfo,omitempty"`          //关联信息
+	Review        *Review    `protobuf:"bytes,21,opt,name=Review,proto3" json:"Review,omitempty"`                //审核
+	Contact       *Contact   `protobuf:"bytes,22,opt,name=Contact,proto3" json:"Contact,omitempty"`              //联系人信息
+	Sensitive     *Sensitive `protobuf:"bytes,23,opt,name=sensitive,proto3" json:"sensitive,omitempty"`          //敏感词
+	Related       *Related   `protobuf:"bytes,24,opt,name=Related,proto3" json:"Related,omitempty"`              //关联信息
+}
+
+func (x *InfoData) Reset() {
+	*x = InfoData{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoData) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoData) ProtoMessage() {}
+
+func (x *InfoData) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[6]
+	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 InfoData.ProtoReflect.Descriptor instead.
+func (*InfoData) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *InfoData) GetMsgType() int64 {
+	if x != nil {
+		return x.MsgType
+	}
+	return 0
+}
+
+func (x *InfoData) GetCode() string {
+	if x != nil {
+		return x.Code
+	}
+	return ""
+}
+
+func (x *InfoData) GetProvince() string {
+	if x != nil {
+		return x.Province
+	}
+	return ""
+}
+
+func (x *InfoData) GetCity() string {
+	if x != nil {
+		return x.City
+	}
+	return ""
+}
+
+func (x *InfoData) GetIndustry() []string {
+	if x != nil {
+		return x.Industry
+	}
+	return nil
+}
+
+func (x *InfoData) GetBuyer() string {
+	if x != nil {
+		return x.Buyer
+	}
+	return ""
+}
+
+func (x *InfoData) GetBudget() float64 {
+	if x != nil {
+		return x.Budget
+	}
+	return 0
+}
+
+func (x *InfoData) GetWinner() string {
+	if x != nil {
+		return x.Winner
+	}
+	return ""
+}
+
+func (x *InfoData) GetAmount() float64 {
+	if x != nil {
+		return x.Amount
+	}
+	return 0
+}
+
+func (x *InfoData) GetDetail() string {
+	if x != nil {
+		return x.Detail
+	}
+	return ""
+}
+
+func (x *InfoData) GetAttach() string {
+	if x != nil {
+		return x.Attach
+	}
+	return ""
+}
+
+func (x *InfoData) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+func (x *InfoData) GetValidityTime() string {
+	if x != nil {
+		return x.ValidityTime
+	}
+	return ""
+}
+
+func (x *InfoData) GetPublishTime() string {
+	if x != nil {
+		return x.PublishTime
+	}
+	return ""
+}
+
+func (x *InfoData) GetPublishStatus() int64 {
+	if x != nil {
+		return x.PublishStatus
+	}
+	return 0
+}
+
+func (x *InfoData) GetAppId() int64 {
+	if x != nil {
+		return x.AppId
+	}
+	return 0
+}
+
+func (x *InfoData) GetPhone() string {
+	if x != nil {
+		return x.Phone
+	}
+	return ""
+}
+
+func (x *InfoData) GetEntId() int64 {
+	if x != nil {
+		return x.EntId
+	}
+	return 0
+}
+
+func (x *InfoData) GetIsDel() int64 {
+	if x != nil {
+		return x.IsDel
+	}
+	return 0
+}
+
+func (x *InfoData) GetApplyInfo() *ApplyInfo {
+	if x != nil {
+		return x.ApplyInfo
+	}
+	return nil
+}
+
+func (x *InfoData) GetReview() *Review {
+	if x != nil {
+		return x.Review
+	}
+	return nil
+}
+
+func (x *InfoData) GetContact() *Contact {
+	if x != nil {
+		return x.Contact
+	}
+	return nil
+}
+
+func (x *InfoData) GetSensitive() *Sensitive {
+	if x != nil {
+		return x.Sensitive
+	}
+	return nil
+}
+
+func (x *InfoData) GetRelated() *Related {
+	if x != nil {
+		return x.Related
+	}
+	return nil
+}
+
+type Contact struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name  string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`    //联系人姓名
+	Phone string `protobuf:"bytes,2,opt,name=phone,proto3" json:"phone,omitempty"`  //联系人手机号
+	Overt int64  `protobuf:"varint,3,opt,name=overt,proto3" json:"overt,omitempty"` //是否公开 1:展示;2:隐藏
+}
+
+func (x *Contact) Reset() {
+	*x = Contact{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Contact) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Contact) ProtoMessage() {}
+
+func (x *Contact) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[7]
+	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 Contact.ProtoReflect.Descriptor instead.
+func (*Contact) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *Contact) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *Contact) GetPhone() string {
+	if x != nil {
+		return x.Phone
+	}
+	return ""
+}
+
+func (x *Contact) GetOvert() int64 {
+	if x != nil {
+		return x.Overt
+	}
+	return 0
+}
+
+type Related struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id    string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`       //关联项目id
+	Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` //关联项目标题
+}
+
+func (x *Related) Reset() {
+	*x = Related{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Related) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Related) ProtoMessage() {}
+
+func (x *Related) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[8]
+	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 Related.ProtoReflect.Descriptor instead.
+func (*Related) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *Related) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *Related) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+type ApplyInfo struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"` //申请人id
+	Phone  string `protobuf:"bytes,2,opt,name=phone,proto3" json:"phone,omitempty"`   //手机号
+	EntId  string `protobuf:"bytes,3,opt,name=entId,proto3" json:"entId,omitempty"`   //发布单位
+	Time   string `protobuf:"bytes,4,opt,name=time,proto3" json:"time,omitempty"`     //申请时间
+}
+
+func (x *ApplyInfo) Reset() {
+	*x = ApplyInfo{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ApplyInfo) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ApplyInfo) ProtoMessage() {}
+
+func (x *ApplyInfo) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[9]
+	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 ApplyInfo.ProtoReflect.Descriptor instead.
+func (*ApplyInfo) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *ApplyInfo) GetUserId() string {
+	if x != nil {
+		return x.UserId
+	}
+	return ""
+}
+
+func (x *ApplyInfo) GetPhone() string {
+	if x != nil {
+		return x.Phone
+	}
+	return ""
+}
+
+func (x *ApplyInfo) GetEntId() string {
+	if x != nil {
+		return x.EntId
+	}
+	return ""
+}
+
+func (x *ApplyInfo) GetTime() string {
+	if x != nil {
+		return x.Time
+	}
+	return ""
+}
+
+type Review struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Status int64  `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"` //审核状态
+	Detail string `protobuf:"bytes,2,opt,name=detail,proto3" json:"detail,omitempty"`  //未通过原因
+	Time   string `protobuf:"bytes,3,opt,name=time,proto3" json:"time,omitempty"`      //审核时间
+}
+
+func (x *Review) Reset() {
+	*x = Review{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Review) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Review) ProtoMessage() {}
+
+func (x *Review) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[10]
+	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 Review.ProtoReflect.Descriptor instead.
+func (*Review) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *Review) GetStatus() int64 {
+	if x != nil {
+		return x.Status
+	}
+	return 0
+}
+
+func (x *Review) GetDetail() string {
+	if x != nil {
+		return x.Detail
+	}
+	return ""
+}
+
+func (x *Review) GetTime() string {
+	if x != nil {
+		return x.Time
+	}
+	return ""
+}
+
+type Sensitive struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Title  string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`   //标题敏感词
+	Detail string `protobuf:"bytes,2,opt,name=detail,proto3" json:"detail,omitempty"` //详情敏感词
+	Attach string `protobuf:"bytes,3,opt,name=attach,proto3" json:"attach,omitempty"` //附件敏感词
+}
+
+func (x *Sensitive) Reset() {
+	*x = Sensitive{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Sensitive) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Sensitive) ProtoMessage() {}
+
+func (x *Sensitive) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[11]
+	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 Sensitive.ProtoReflect.Descriptor instead.
+func (*Sensitive) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *Sensitive) GetTitle() string {
+	if x != nil {
+		return x.Title
+	}
+	return ""
+}
+
+func (x *Sensitive) GetDetail() string {
+	if x != nil {
+		return x.Detail
+	}
+	return ""
+}
+
+func (x *Sensitive) GetAttach() string {
+	if x != nil {
+		return x.Attach
+	}
+	return ""
+}
+
+//审核action Req
+type InfoExamineReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	MsgId        string `protobuf:"bytes,1,opt,name=msgId,proto3" json:"msgId,omitempty"`                //信息id
+	ReviewStatus int64  `protobuf:"varint,2,opt,name=reviewStatus,proto3" json:"reviewStatus,omitempty"` //审核状态:1:待审核|2:审核通过|3:审核不通过
+	ReviewDetail string `protobuf:"bytes,3,opt,name=reviewDetail,proto3" json:"reviewDetail,omitempty"`  //审核不通过原因
+	AppId        int64  `protobuf:"varint,4,opt,name=appId,proto3" json:"appId,omitempty"`               //剑鱼标识 默认10000
+	MsgType      int64  `protobuf:"varint,5,opt,name=msgType,proto3" json:"msgType,omitempty"`           //类型
+}
+
+func (x *InfoExamineReq) Reset() {
+	*x = InfoExamineReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoExamineReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoExamineReq) ProtoMessage() {}
+
+func (x *InfoExamineReq) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[12]
+	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 InfoExamineReq.ProtoReflect.Descriptor instead.
+func (*InfoExamineReq) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{12}
+}
+
+func (x *InfoExamineReq) GetMsgId() string {
+	if x != nil {
+		return x.MsgId
+	}
+	return ""
+}
+
+func (x *InfoExamineReq) GetReviewStatus() int64 {
+	if x != nil {
+		return x.ReviewStatus
+	}
+	return 0
+}
+
+func (x *InfoExamineReq) GetReviewDetail() string {
+	if x != nil {
+		return x.ReviewDetail
+	}
+	return ""
+}
+
+func (x *InfoExamineReq) GetAppId() int64 {
+	if x != nil {
+		return x.AppId
+	}
+	return 0
+}
+
+func (x *InfoExamineReq) GetMsgType() int64 {
+	if x != nil {
+		return x.MsgType
+	}
+	return 0
+}
+
+//审核action Resp
+type InfoExamineResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64  `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+}
+
+func (x *InfoExamineResp) Reset() {
+	*x = InfoExamineResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoExamineResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoExamineResp) ProtoMessage() {}
+
+func (x *InfoExamineResp) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[13]
+	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 InfoExamineResp.ProtoReflect.Descriptor instead.
+func (*InfoExamineResp) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *InfoExamineResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *InfoExamineResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+//修改中台信息状态 Req
+type InfoStateReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` //信息id
+}
+
+func (x *InfoStateReq) Reset() {
+	*x = InfoStateReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoStateReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoStateReq) ProtoMessage() {}
+
+func (x *InfoStateReq) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[14]
+	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 InfoStateReq.ProtoReflect.Descriptor instead.
+func (*InfoStateReq) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *InfoStateReq) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+//修改中台信息内容 Req
+type InfoDataReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Id          string   `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`                                //信息id
+	MsgType     string   `protobuf:"bytes,2,opt,name=msgType,proto3" json:"msgType,omitempty"`                      //信息类型
+	Title       []string `protobuf:"bytes,3,rep,name=title,proto3" json:"title,omitempty"`                          //敏感词-标题
+	Detail      []string `protobuf:"bytes,4,rep,name=detail,proto3" json:"detail,omitempty"`                        //敏感词-详情
+	Attachments string   `protobuf:"bytes,5,opt,name=attachments,proto3" json:"attachments,omitempty"`              //敏感词-附件
+	AttachTxt   string   `protobuf:"bytes,6,opt,name=attach_txt,json=attachTxt,proto3" json:"attach_txt,omitempty"` //识别后的附件信息(对应检索库)
+}
+
+func (x *InfoDataReq) Reset() {
+	*x = InfoDataReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoDataReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoDataReq) ProtoMessage() {}
+
+func (x *InfoDataReq) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[15]
+	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 InfoDataReq.ProtoReflect.Descriptor instead.
+func (*InfoDataReq) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *InfoDataReq) GetId() string {
+	if x != nil {
+		return x.Id
+	}
+	return ""
+}
+
+func (x *InfoDataReq) GetMsgType() string {
+	if x != nil {
+		return x.MsgType
+	}
+	return ""
+}
+
+func (x *InfoDataReq) GetTitle() []string {
+	if x != nil {
+		return x.Title
+	}
+	return nil
+}
+
+func (x *InfoDataReq) GetDetail() []string {
+	if x != nil {
+		return x.Detail
+	}
+	return nil
+}
+
+func (x *InfoDataReq) GetAttachments() string {
+	if x != nil {
+		return x.Attachments
+	}
+	return ""
+}
+
+func (x *InfoDataReq) GetAttachTxt() string {
+	if x != nil {
+		return x.AttachTxt
+	}
+	return ""
+}
+
+//修改中台 Resp
+type InfoResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrCode int64  `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
+	ErrMsg  string `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
+}
+
+func (x *InfoResp) Reset() {
+	*x = InfoResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoResp) ProtoMessage() {}
+
+func (x *InfoResp) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[16]
+	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 InfoResp.ProtoReflect.Descriptor instead.
+func (*InfoResp) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *InfoResp) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *InfoResp) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+type InstitutionsFreezeReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AppId int64  `protobuf:"varint,1,opt,name=appId,proto3" json:"appId,omitempty"` //
+	EntId string `protobuf:"bytes,2,opt,name=entId,proto3" json:"entId,omitempty"`  //
+}
+
+func (x *InstitutionsFreezeReq) Reset() {
+	*x = InstitutionsFreezeReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InstitutionsFreezeReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InstitutionsFreezeReq) ProtoMessage() {}
+
+func (x *InstitutionsFreezeReq) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[17]
+	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 InstitutionsFreezeReq.ProtoReflect.Descriptor instead.
+func (*InstitutionsFreezeReq) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *InstitutionsFreezeReq) GetAppId() int64 {
+	if x != nil {
+		return x.AppId
+	}
+	return 0
+}
+
+func (x *InstitutionsFreezeReq) GetEntId() string {
+	if x != nil {
+		return x.EntId
+	}
+	return ""
+}
+
+type InfoExamineResp_Data struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	MsgId string `protobuf:"bytes,1,opt,name=msgId,proto3" json:"msgId,omitempty"`
+}
+
+func (x *InfoExamineResp_Data) Reset() {
+	*x = InfoExamineResp_Data{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_manager_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *InfoExamineResp_Data) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InfoExamineResp_Data) ProtoMessage() {}
+
+func (x *InfoExamineResp_Data) ProtoReflect() protoreflect.Message {
+	mi := &file_manager_proto_msgTypes[18]
+	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 InfoExamineResp_Data.ProtoReflect.Descriptor instead.
+func (*InfoExamineResp_Data) Descriptor() ([]byte, []int) {
+	return file_manager_proto_rawDescGZIP(), []int{13, 0}
+}
+
+func (x *InfoExamineResp_Data) GetMsgId() string {
+	if x != nil {
+		return x.MsgId
+	}
+	return ""
+}
+
+var File_manager_proto protoreflect.FileDescriptor
+
+var file_manager_proto_rawDesc = []byte{
+	0x0a, 0x0d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
+	0x07, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x22, 0xe7, 0x02, 0x0a, 0x0b, 0x49, 0x6e, 0x66,
+	0x6f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72,
+	0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64,
+	0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x68,
+	0x6f, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70,
+	0x68, 0x6f, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e,
+	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x22,
+	0x0a, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x72, 0x74,
+	0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x6c,
+	0x79, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x70,
+	0x70, 0x6c, 0x79, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0c, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14,
+	0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x61,
+	0x70, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65,
+	0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65,
+	0x12, 0x1c, 0x0a, 0x09, 0x50, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0a, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x09, 0x50, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14,
+	0x0a, 0x05, 0x49, 0x73, 0x44, 0x65, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x49,
+	0x73, 0x44, 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65,
+	0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
+	0x65, 0x64, 0x22, 0x65, 0x0a, 0x0c, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a,
+	0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x21, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x44,
+	0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x43, 0x0a, 0x04, 0x44, 0x61, 0x74,
+	0x61, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18,
+	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e,
+	0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x9c,
+	0x02, 0x0a, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74,
+	0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c,
+	0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
+	0x64, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x44, 0x65, 0x6c, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x69, 0x73, 0x44, 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x70,
+	0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
+	0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67,
+	0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54,
+	0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65,
+	0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x54, 0x69, 0x6d,
+	0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x65, 0x63, 0x6b,
+	0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65,
+	0x64, 0x12, 0x2a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x0a, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e,
+	0x74, 0x61, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x22, 0x67, 0x0a,
+	0x0d, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x16,
+	0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+	0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05,
+	0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x61, 0x70, 0x70,
+	0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x6b, 0x0a, 0x0e, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65,
+	0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f,
+	0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43,
+	0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x25, 0x0a, 0x04,
+	0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x6e,
+	0x61, 0x67, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64,
+	0x61, 0x74, 0x61, 0x22, 0xd1, 0x05, 0x0a, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x61, 0x74, 0x61,
+	0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f,
+	0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1a,
+	0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69,
+	0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x1a,
+	0x0a, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09,
+	0x52, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x75,
+	0x79, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x75, 0x79, 0x65, 0x72,
+	0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01,
+	0x52, 0x06, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x69, 0x6e, 0x6e,
+	0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72,
+	0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01,
+	0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61,
+	0x69, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c,
+	0x12, 0x16, 0x0a, 0x06, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c,
+	0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x22,
+	0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0d,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x54, 0x69,
+	0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d,
+	0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
+	0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x53,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x70, 0x75, 0x62,
+	0x6c, 0x69, 0x73, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70,
+	0x70, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64,
+	0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18,
+	0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05,
+	0x69, 0x73, 0x44, 0x65, 0x6c, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x69, 0x73, 0x44,
+	0x65, 0x6c, 0x12, 0x30, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x18,
+	0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e,
+	0x41, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x41, 0x70, 0x70, 0x6c, 0x79,
+	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x0a, 0x06, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x18, 0x15,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x52,
+	0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x06, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x2a, 0x0a,
+	0x07, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10,
+	0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74,
+	0x52, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x30, 0x0a, 0x09, 0x73, 0x65, 0x6e,
+	0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d,
+	0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65,
+	0x52, 0x09, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x52,
+	0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d,
+	0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x52, 0x07,
+	0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x22, 0x49, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x61,
+	0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x14, 0x0a, 0x05,
+	0x6f, 0x76, 0x65, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6f, 0x76, 0x65,
+	0x72, 0x74, 0x22, 0x2f, 0x0a, 0x07, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x12, 0x0e, 0x0a,
+	0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a,
+	0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69,
+	0x74, 0x6c, 0x65, 0x22, 0x63, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x49, 0x6e, 0x66, 0x6f,
+	0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x14,
+	0x0a, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65,
+	0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x4c, 0x0a, 0x06, 0x52, 0x65, 0x76, 0x69,
+	0x65, 0x77, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65,
+	0x74, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61,
+	0x69, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x51, 0x0a, 0x09, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74,
+	0x69, 0x76, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x74,
+	0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69,
+	0x6c, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x06, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x22, 0x9e, 0x01, 0x0a, 0x0e, 0x49, 0x6e,
+	0x66, 0x6f, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05,
+	0x6d, 0x73, 0x67, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x73, 0x67,
+	0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77,
+	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77,
+	0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65,
+	0x76, 0x69, 0x65, 0x77, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70,
+	0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64,
+	0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x22, 0x63, 0x0a, 0x0f, 0x49, 0x6e,
+	0x66, 0x6f, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a,
+	0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f,
+	0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73,
+	0x67, 0x1a, 0x1c, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x73, 0x67,
+	0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x22,
+	0x1e, 0x0a, 0x0c, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12,
+	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22,
+	0xa6, 0x01, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x12,
+	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12,
+	0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74,
+	0x6c, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12,
+	0x16, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52,
+	0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x74, 0x74, 0x61, 0x63,
+	0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x74,
+	0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x74, 0x74,
+	0x61, 0x63, 0x68, 0x5f, 0x74, 0x78, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61,
+	0x74, 0x74, 0x61, 0x63, 0x68, 0x54, 0x78, 0x74, 0x22, 0x3e, 0x0a, 0x08, 0x49, 0x6e, 0x66, 0x6f,
+	0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12,
+	0x17, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x22, 0x43, 0x0a, 0x15, 0x49, 0x6e, 0x73, 0x74,
+	0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x52, 0x65,
+	0x71, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x32, 0x8c, 0x02,
+	0x0a, 0x07, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x08, 0x49, 0x6e, 0x66,
+	0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e,
+	0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x6d, 0x61,
+	0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x3d, 0x0a, 0x0a, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c,
+	0x12, 0x16, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x44,
+	0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67,
+	0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73,
+	0x70, 0x12, 0x40, 0x0a, 0x0b, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65,
+	0x12, 0x17, 0x2e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x45,
+	0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x6e, 0x61,
+	0x67, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x78, 0x61, 0x6d, 0x69, 0x6e, 0x65, 0x52,
+	0x65, 0x73, 0x70, 0x12, 0x47, 0x0a, 0x12, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x12, 0x1e, 0x2e, 0x6d, 0x61, 0x6e, 0x61,
+	0x67, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+	0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x6d, 0x61, 0x6e, 0x61,
+	0x67, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0b, 0x5a, 0x09,
+	0x2e, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x33,
+}
+
+var (
+	file_manager_proto_rawDescOnce sync.Once
+	file_manager_proto_rawDescData = file_manager_proto_rawDesc
+)
+
+func file_manager_proto_rawDescGZIP() []byte {
+	file_manager_proto_rawDescOnce.Do(func() {
+		file_manager_proto_rawDescData = protoimpl.X.CompressGZIP(file_manager_proto_rawDescData)
+	})
+	return file_manager_proto_rawDescData
+}
+
+var file_manager_proto_msgTypes = make([]protoimpl.MessageInfo, 19)
+var file_manager_proto_goTypes = []interface{}{
+	(*InfoListReq)(nil),           // 0: manager.InfoListReq
+	(*InfoListResp)(nil),          // 1: manager.InfoListResp
+	(*Data)(nil),                  // 2: manager.Data
+	(*InfoList)(nil),              // 3: manager.InfoList
+	(*InfoDetailReq)(nil),         // 4: manager.InfoDetailReq
+	(*InfoDetailResp)(nil),        // 5: manager.InfoDetailResp
+	(*InfoData)(nil),              // 6: manager.InfoData
+	(*Contact)(nil),               // 7: manager.Contact
+	(*Related)(nil),               // 8: manager.Related
+	(*ApplyInfo)(nil),             // 9: manager.ApplyInfo
+	(*Review)(nil),                // 10: manager.Review
+	(*Sensitive)(nil),             // 11: manager.Sensitive
+	(*InfoExamineReq)(nil),        // 12: manager.InfoExamineReq
+	(*InfoExamineResp)(nil),       // 13: manager.InfoExamineResp
+	(*InfoStateReq)(nil),          // 14: manager.InfoStateReq
+	(*InfoDataReq)(nil),           // 15: manager.InfoDataReq
+	(*InfoResp)(nil),              // 16: manager.InfoResp
+	(*InstitutionsFreezeReq)(nil), // 17: manager.InstitutionsFreezeReq
+	(*InfoExamineResp_Data)(nil),  // 18: manager.InfoExamineResp.Data
+}
+var file_manager_proto_depIdxs = []int32{
+	2,  // 0: manager.InfoListResp.data:type_name -> manager.Data
+	3,  // 1: manager.Data.list:type_name -> manager.InfoList
+	7,  // 2: manager.InfoList.contact:type_name -> manager.Contact
+	6,  // 3: manager.InfoDetailResp.data:type_name -> manager.InfoData
+	9,  // 4: manager.InfoData.ApplyInfo:type_name -> manager.ApplyInfo
+	10, // 5: manager.InfoData.Review:type_name -> manager.Review
+	7,  // 6: manager.InfoData.Contact:type_name -> manager.Contact
+	11, // 7: manager.InfoData.sensitive:type_name -> manager.Sensitive
+	8,  // 8: manager.InfoData.Related:type_name -> manager.Related
+	0,  // 9: manager.manager.InfoList:input_type -> manager.InfoListReq
+	4,  // 10: manager.manager.InfoDetail:input_type -> manager.InfoDetailReq
+	12, // 11: manager.manager.InfoExamine:input_type -> manager.InfoExamineReq
+	17, // 12: manager.manager.InstitutionsFreeze:input_type -> manager.InstitutionsFreezeReq
+	1,  // 13: manager.manager.InfoList:output_type -> manager.InfoListResp
+	5,  // 14: manager.manager.InfoDetail:output_type -> manager.InfoDetailResp
+	13, // 15: manager.manager.InfoExamine:output_type -> manager.InfoExamineResp
+	16, // 16: manager.manager.InstitutionsFreeze:output_type -> manager.InfoResp
+	13, // [13:17] is the sub-list for method output_type
+	9,  // [9:13] is the sub-list for method input_type
+	9,  // [9:9] is the sub-list for extension type_name
+	9,  // [9:9] is the sub-list for extension extendee
+	0,  // [0:9] is the sub-list for field type_name
+}
+
+func init() { file_manager_proto_init() }
+func file_manager_proto_init() {
+	if File_manager_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_manager_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoListReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoListResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Data); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoList); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoDetailReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoDetailResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoData); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Contact); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Related); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ApplyInfo); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Review); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Sensitive); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoExamineReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoExamineResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoStateReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoDataReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InstitutionsFreezeReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_manager_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*InfoExamineResp_Data); 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_manager_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   19,
+			NumExtensions: 0,
+			NumServices:   1,
+		},
+		GoTypes:           file_manager_proto_goTypes,
+		DependencyIndexes: file_manager_proto_depIdxs,
+		MessageInfos:      file_manager_proto_msgTypes,
+	}.Build()
+	File_manager_proto = out.File
+	file_manager_proto_rawDesc = nil
+	file_manager_proto_goTypes = nil
+	file_manager_proto_depIdxs = nil
+}

+ 221 - 0
rpc/manager/types/manager/manager_grpc.pb.go

@@ -0,0 +1,221 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.2.0
+// - protoc             v3.15.5
+// source: manager.proto
+
+package manager
+
+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
+
+// ManagerClient is the client API for Manager 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 ManagerClient interface {
+	//信息列表
+	InfoList(ctx context.Context, in *InfoListReq, opts ...grpc.CallOption) (*InfoListResp, error)
+	//信息详情
+	InfoDetail(ctx context.Context, in *InfoDetailReq, opts ...grpc.CallOption) (*InfoDetailResp, error)
+	//信息审核
+	InfoExamine(ctx context.Context, in *InfoExamineReq, opts ...grpc.CallOption) (*InfoExamineResp, error)
+	//管理后台机构冻结
+	InstitutionsFreeze(ctx context.Context, in *InstitutionsFreezeReq, opts ...grpc.CallOption) (*InfoResp, error)
+}
+
+type managerClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewManagerClient(cc grpc.ClientConnInterface) ManagerClient {
+	return &managerClient{cc}
+}
+
+func (c *managerClient) InfoList(ctx context.Context, in *InfoListReq, opts ...grpc.CallOption) (*InfoListResp, error) {
+	out := new(InfoListResp)
+	err := c.cc.Invoke(ctx, "/manager.manager/InfoList", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *managerClient) InfoDetail(ctx context.Context, in *InfoDetailReq, opts ...grpc.CallOption) (*InfoDetailResp, error) {
+	out := new(InfoDetailResp)
+	err := c.cc.Invoke(ctx, "/manager.manager/InfoDetail", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *managerClient) InfoExamine(ctx context.Context, in *InfoExamineReq, opts ...grpc.CallOption) (*InfoExamineResp, error) {
+	out := new(InfoExamineResp)
+	err := c.cc.Invoke(ctx, "/manager.manager/InfoExamine", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *managerClient) InstitutionsFreeze(ctx context.Context, in *InstitutionsFreezeReq, opts ...grpc.CallOption) (*InfoResp, error) {
+	out := new(InfoResp)
+	err := c.cc.Invoke(ctx, "/manager.manager/InstitutionsFreeze", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// ManagerServer is the server API for Manager service.
+// All implementations must embed UnimplementedManagerServer
+// for forward compatibility
+type ManagerServer interface {
+	//信息列表
+	InfoList(context.Context, *InfoListReq) (*InfoListResp, error)
+	//信息详情
+	InfoDetail(context.Context, *InfoDetailReq) (*InfoDetailResp, error)
+	//信息审核
+	InfoExamine(context.Context, *InfoExamineReq) (*InfoExamineResp, error)
+	//管理后台机构冻结
+	InstitutionsFreeze(context.Context, *InstitutionsFreezeReq) (*InfoResp, error)
+	mustEmbedUnimplementedManagerServer()
+}
+
+// UnimplementedManagerServer must be embedded to have forward compatible implementations.
+type UnimplementedManagerServer struct {
+}
+
+func (UnimplementedManagerServer) InfoList(context.Context, *InfoListReq) (*InfoListResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method InfoList not implemented")
+}
+func (UnimplementedManagerServer) InfoDetail(context.Context, *InfoDetailReq) (*InfoDetailResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method InfoDetail not implemented")
+}
+func (UnimplementedManagerServer) InfoExamine(context.Context, *InfoExamineReq) (*InfoExamineResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method InfoExamine not implemented")
+}
+func (UnimplementedManagerServer) InstitutionsFreeze(context.Context, *InstitutionsFreezeReq) (*InfoResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method InstitutionsFreeze not implemented")
+}
+func (UnimplementedManagerServer) mustEmbedUnimplementedManagerServer() {}
+
+// UnsafeManagerServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to ManagerServer will
+// result in compilation errors.
+type UnsafeManagerServer interface {
+	mustEmbedUnimplementedManagerServer()
+}
+
+func RegisterManagerServer(s grpc.ServiceRegistrar, srv ManagerServer) {
+	s.RegisterService(&Manager_ServiceDesc, srv)
+}
+
+func _Manager_InfoList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(InfoListReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ManagerServer).InfoList(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/manager.manager/InfoList",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ManagerServer).InfoList(ctx, req.(*InfoListReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Manager_InfoDetail_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(InfoDetailReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ManagerServer).InfoDetail(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/manager.manager/InfoDetail",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ManagerServer).InfoDetail(ctx, req.(*InfoDetailReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Manager_InfoExamine_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(InfoExamineReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ManagerServer).InfoExamine(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/manager.manager/InfoExamine",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ManagerServer).InfoExamine(ctx, req.(*InfoExamineReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Manager_InstitutionsFreeze_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(InstitutionsFreezeReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ManagerServer).InstitutionsFreeze(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/manager.manager/InstitutionsFreeze",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ManagerServer).InstitutionsFreeze(ctx, req.(*InstitutionsFreezeReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+// Manager_ServiceDesc is the grpc.ServiceDesc for Manager service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var Manager_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "manager.manager",
+	HandlerType: (*ManagerServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "InfoList",
+			Handler:    _Manager_InfoList_Handler,
+		},
+		{
+			MethodName: "InfoDetail",
+			Handler:    _Manager_InfoDetail_Handler,
+		},
+		{
+			MethodName: "InfoExamine",
+			Handler:    _Manager_InfoExamine_Handler,
+		},
+		{
+			MethodName: "InstitutionsFreeze",
+			Handler:    _Manager_InstitutionsFreeze_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "manager.proto",
+}

+ 92 - 0
rpc/model/db.go

@@ -0,0 +1,92 @@
+/*
+初始数据库应用
+*/
+package model
+
+import (
+	"bp.jydev.jianyu360.cn/BaseService/resourceCenter/rpc/resource"
+	"fmt"
+	"github.com/zeromicro/go-zero/core/discov"
+	"github.com/zeromicro/go-zero/zrpc"
+	"log"
+
+	"jyInfo/entity"
+
+	"app.yhyue.com/moapp/jybase/esv1"
+	"app.yhyue.com/moapp/jybase/mysql"
+	"app.yhyue.com/moapp/jybase/redis"
+)
+
+var Mysql *mysql.Mysql
+var NsqConfig *entity.NsqStruct
+var SupplyTotal int
+var Sensitive *entity.Sensitive
+var ResourceCenterRpc resource.Resource
+var FuncCode string
+
+func SupplyTotalConfig(mm int) {
+	SupplyTotal = mm
+}
+
+func InitNsqConfig(mm *entity.NsqStruct) {
+	if mm.Ip != "" {
+		log.Println("--初始化 nsq--")
+		NsqConfig = &entity.NsqStruct{
+			Ip:    mm.Ip,
+			Topic: mm.Topic,
+		}
+	}
+}
+func InitMysql(mm *entity.MysqlMainStruct) {
+	//初始化 mysql
+	if mm.Address != "" {
+		log.Println("--初始化 mysql--")
+		Mysql = &mysql.Mysql{
+			Address:      mm.Address,
+			UserName:     mm.UserName,
+			PassWord:     mm.PassWord,
+			DBName:       mm.DbName,
+			MaxOpenConns: mm.MaxOpenConns,
+			MaxIdleConns: mm.MaxIdleConns,
+		}
+		Mysql.Init()
+	}
+}
+
+//
+func InitRedis(rm *entity.RedisStuct) {
+	//初始化 redis
+	if rm.Addr != "" {
+		if rm.Modules == "" {
+			rm.Modules = "other"
+		}
+		log.Println("--初始化 redis--")
+		redis.InitRedisBySize(fmt.Sprintf("%s=%s", rm.Modules, rm.Addr), 100, 30, 300)
+	}
+}
+
+//
+func InitEs(es *entity.EsStruct) {
+	//初始化 elasticsearch
+	if es.Addr != "" {
+		log.Println("--初始化 elasticsearch--")
+		elastic.InitElasticSize(es.Addr, es.Size)
+	}
+}
+
+func InitSensitive(ss *entity.Sensitive) {
+	//初始化 Sensitive
+	Sensitive = ss
+}
+
+func InitResourceCenterRpc(cf *entity.ResourceCenter, fc string) {
+	var hosts []string
+	hosts = append(hosts, cf.Hosts)
+	FuncCode = fc
+	ResourceCenterRpc = resource.NewResource(zrpc.MustNewClient(zrpc.RpcClientConf{
+		Etcd: discov.EtcdConf{
+			Key:   cf.Key,
+			Hosts: hosts,
+		},
+	}))
+}

+ 141 - 0
rpc/model/es/es.go

@@ -0,0 +1,141 @@
+package model
+
+import (
+	"fmt"
+	"jyInfo/rpc/consumer/consumer"
+	"log"
+	"strconv"
+	"strings"
+	"time"
+
+	"app.yhyue.com/moapp/jybase/esv1"
+)
+
+const (
+	INDEX        = "supplyinfo"
+	TYPE         = "supplyinfo"
+	Search_sort  = `{"publish_time":-1}`
+	Search_field = `"_id","title","detail","msg_type","ent_name","province","city","publish_time","create_time","ent_id"`
+)
+
+//获取供应信息
+func GetSupplyInfoList(in *consumer.SupplyInfoSearchReq) (list *[]map[string]interface{}, err error) {
+	isHight := false
+	if in.SearchType != "" {
+		for _, v := range strings.Split(in.SearchType, ",") {
+			if v == "detail" {
+				isHight = true
+			}
+		}
+		in.SearchType = fmt.Sprintf(`"%s"`, strings.ReplaceAll(in.SearchType, ",", "\",\""))
+	} else {
+		in.SearchType = `"title"`
+	}
+	qstr := GetSearchQuery(in)
+	start := int((in.PageIndex - 1) * in.PageSize)
+	pagesize := int(in.PageSize)
+	if isHight { //全文搜索
+		list = elastic.GetAllByNgram(INDEX, TYPE, qstr, `"detail"`, Search_sort, Search_field, start, pagesize, 100, true)
+	} else { //标题搜索
+		list = elastic.GetAllByNgram(INDEX, TYPE, qstr, ``, Search_sort, Search_field, start, pagesize, 0, false)
+	}
+	return
+}
+
+//
+func GetSearchQuery(in *consumer.SupplyInfoSearchReq) (qstr string) {
+	query := `{"query":{"bool":{"must":[%s],"must_not":[%s]}}}`
+	multi_match := `{"multi_match": {"query": "%s","type": "phrase", "fields": [%s]}}`
+	province := `{"terms":{"province":[%s]}}`
+	city := `{"terms":{"city":[%s]}}`
+	publishTime := `{"range":{"publish_time":{"gte":%d,"lt":%d}}}`
+	validityTime := `{"range":{"validity_time":{%s}}}`
+	musts := []string{}
+
+	//关键词
+	if in.Keywords != "" {
+		keyword_multi_match := fmt.Sprintf(multi_match, "%s", in.SearchType)
+		shoulds := []string{}
+		for _, v := range strings.Split(in.Keywords, "+") {
+			shoulds = append(shoulds, fmt.Sprintf(keyword_multi_match, elastic.ReplaceYH(v)))
+		}
+		musts = append(musts, fmt.Sprintf(elastic.NgramMust, strings.Join(shoulds, ",")))
+	}
+	//省份
+	if in.Province != "" {
+		pv := ``
+		for k, v := range strings.Split(in.Province, ",") {
+			if k > 0 {
+				pv += `,`
+			}
+			pv += `"` + v + `"`
+		}
+		musts = append(musts, fmt.Sprintf(province, pv))
+	}
+	//城市
+	if in.City != "" {
+		cv := ``
+		for k, v := range strings.Split(in.City, ",") {
+			if k > 0 {
+				cv += `,`
+			}
+			cv += `"` + v + `"`
+		}
+		musts = append(musts, fmt.Sprintf(city, cv))
+	}
+	//发布时间
+	if in.Time != "" && strings.Contains(in.Time, "-") {
+		sstr, estr := strings.Split(in.Time, "-")[0], strings.Split(in.Time, "-")[1]
+		si, _ := strconv.Atoi(sstr)
+		ei, _ := strconv.Atoi(estr)
+		publishTime = fmt.Sprintf(publishTime, si, ei)
+		musts = append(musts, publishTime)
+	}
+	//到期时间
+	if in.Status != "" && in.Status != "0" {
+		now := time.Now()
+		switch in.Status {
+		case "-1":
+			validityTime = fmt.Sprintf(validityTime, fmt.Sprintf(`"lte":%d`, now.Unix())) //已过期
+		case "1":
+			validityTime = fmt.Sprintf(validityTime, fmt.Sprintf(`"gte":%d`, now.Unix())) //生效中
+		}
+		musts = append(musts, validityTime)
+	}
+
+	qstr = fmt.Sprintf(query, strings.Join(musts, ","), "")
+	log.Println(qstr)
+	return
+}
+
+//保存供应信息
+func SaveSupplyInfo(ent_name string, supplyInfo map[string]interface{}) bool {
+	now := time.Now().Unix()
+	return elastic.Save(INDEX, TYPE, &map[string]interface{}{
+		"_id":           supplyInfo["id"],
+		"id":            supplyInfo["id"],
+		"msg_type":      "1",
+		"title":         supplyInfo["title"],
+		"detail":        supplyInfo["detail"],
+		"ent_name":      ent_name, //机构名称
+		"province":      supplyInfo["province"],
+		"city":          supplyInfo["city"],
+		"validity_time": now,
+		"create_time":   now,
+		"publish_time":  now,
+	})
+}
+
+//删除供应信息
+func DelSupplyInfo(id string) bool {
+	if id != "" {
+		return elastic.DelById(INDEX, TYPE, id)
+	}
+	return false
+}
+
+//获取相关机构发布的供应信息
+func GetSupplyOtherInfoByEntid(id string, limit int) *[]map[string]interface{} {
+	queryStr := `{"TERM_supplyinfo.ent_id":` + id + `}`
+	return elastic.GetPage(INDEX, TYPE, queryStr, Search_sort, Search_field, 0, limit)
+}

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio