Bladeren bron

物料包存

renjiaojiao 1 maand geleden
bovenliggende
commit
b46c2fe698

+ 41 - 25
api/biService.api

@@ -161,6 +161,19 @@ type (
 		PageSize   int64  `json:"pageSize"`
 		PageNum    int64  `json:"pageNum"`
 	}
+
+	MaterialSaveReq {
+		TaskName        string `json:"taskName"`
+		TaskDescription string `json:"taskDescription"`
+		MaterialContent string `json:"materialContent"`
+		QrcodeUrl       string `json:"qrcodeUrl"`
+		ReceiveUserName string `json:"receiveUserName"`
+		ReceiveUserId   string `json:"receiveUserId"`
+		FileUrl         string `json:"fileUrl"`
+		EntId           int64  `json:"entId"`
+		CreateUser      string `json:"createUser"`
+		ImgWebpage      string `json:"imgWebpage"`
+	}
 )
 
 @server (
@@ -170,94 +183,97 @@ type (
 service biService-api {
 	@handler MyDataAsset
 	post /biService/myDataAsset (myDataAssetReq) returns (biResp)
-
+	
 	@handler AddProjectReq
 	post /biService/addProject (addProjectReq) returns (biResp)
-
+	
 	@handler GetInfoId
 	post /biService/getInfoId (getInfoIdReq) returns (biResp)
-
+	
 	@handler DrawClue
 	post /biService/drawClue (drawClueReq) returns (biResp)
-
+	
 	@handler Call
 	post /biService/call (callReq) returns (biResp) //拨打电话
-
+	
 	@handler DistributeClue
 	post /biService/distributeClue (DistributeClueReq) returns (biResp)
-
+	
 	@handler DistributeClueShow
 	post /biService/distributeClueShow (DistributeClueShowReq) returns (biResp)
-
+	
 	@handler ClueImport
 	post /biService/clueImport (ClueImportReq) returns (biResp)
-
+	
 	@handler ClueAdd
 	post /biService/ClueAdd (ClueAddReq) returns (biResp)
-
+	
 	@handler ClueImportTl
 	post /biService/clueImportTt (ClueImportReq) returns (biResp)
-
+	
 	@handler AutoFollow
 	post /biService/autoFollow (callReq) returns (biResp)
-
+	
 	@doc "bi通用接口"
 	@handler sqlManage
 	post /biService/sqlManage (SqlManageReq) returns (biResp)
-
+	
 	@doc "用户身份"
 	@handler Myinfo
 	post /biService/myInfo (MyInfoReq) returns (biResp)
-
+	
 	@doc "资源中台授权"
 	@handler ResEmpower
 	post /biService/resEmpower (ResEmpowerReq) returns (biResp)
-
+	
 	@doc "项目全量导出"
 	@handler allProjectExport
 	post /biService/allProjectExport (ExportReq) returns (biResp)
-
+	
 	@doc "资讯全量导出"
 	@handler allInfoExport
 	post /biService/allInfoExport (ExportReq) returns (biResp)
-
+	
 	@doc "资讯操作"
 	@handler infoOperate
 	post /biService/infoOperate (OperateReq) returns (biResp)
-
+	
 	@doc "公司类型"
 	@handler getCompanyType
 	post /biService/getCompanyType (getCompanyTypeReq) returns (biResp)
-
+	
 	@doc "数据导出(通用),发邮件"
 	@handler sendMail
 	post /biService/sendMail (ExportByDbReq) returns (biResp)
-
+	
 	@doc "附件上传"
 	@handler upFile
 	post /biService/upFile (UpFileReq) returns (biResp)
-
+	
 	@doc "发送邮件"
 	@handler sendComMail
 	post /biService/sendCommonndMail (SendMailReq) returns (biResp)
-
+	
 	@doc "新增受理单"
 	@handler addAcceptance
 	post /biService/addAcceptance (AcceptanceReq) returns (biResp)
-
+	
 	@doc "创建线索"
 	@handler createClue
 	post /biService/createClueByPhone (CreateClueReq) returns (biResp)
-
+	
 	@doc "客成线索移交"
 	@handler transferClueSucc
 	post /biService/transferClueByPhone (TransferClueReq) returns (biResp)
-
+	
 	@doc "线索查询"
 	@handler findClueInfo
 	post /biService/findClueInfo (FindClueInfoReq) returns (biResp)
-
+	
 	@doc "线索验重 列表"
 	@handler getClueInfoList
 	post /biService/getClueInfoList (ClueInfoReq) returns (biResp)
+	
+	@handler MaterialSave
+	post /biService/materialSave (MaterialSaveReq) returns (biResp)
 }

+ 5 - 1
api/etc/biservice-api.yaml

@@ -20,4 +20,8 @@ Logx:
   Level: info #info|error|severe
   KeepDays: 10
 ResourceCenterKey: "resource.rpc" #资源中台rpc
-UserCenterKey: "usercenter.rpc" #用户中台rpc
+UserCenterKey: "usercenter.rpc" #用户中台rpc
+MessageCenterKey: message.rpc
+materialMsg:
+  title: "您有1个宣传物料需要发布!"
+  content: "%s给你分享了运营宣传物料,请及时处理。点击查看详情。"

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

@@ -13,4 +13,9 @@ type Config struct {
 	Logx              logx.LogConf
 	ResourceCenterKey string
 	UserCenterKey     string
+	MessageCenterKey  string
+	MaterialMsg       struct {
+		Title   string
+		Content string
+	}
 }

+ 5 - 1
api/internal/handler/routes.go

@@ -142,7 +142,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 				Path:    "/biService/getClueInfoList",
 				Handler: getClueInfoListHandler(serverCtx),
 			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/biService/materialSave",
+				Handler: MaterialSaveHandler(serverCtx),
+			},
 		},
-		rest.WithMaxBytes(104857600),
 	)
 }

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

@@ -1,6 +1,7 @@
 package svc
 
 import (
+	"app.yhyue.com/moapp/MessageCenter/rpc/messageclient"
 	"bp.jydev.jianyu360.cn/BaseService/biService/api/internal/config"
 	"bp.jydev.jianyu360.cn/BaseService/biService/rpc/biservice"
 	"bp.jydev.jianyu360.cn/BaseService/resourceCenter/rpc/resource"
@@ -14,6 +15,7 @@ type ServiceContext struct {
 	BiServiceRpc      biservice.BiService
 	ResourceCenterRpc resource.Resource
 	UserCenterRpc     usercenter.UserCenter
+	MessageCenterRpc  messageclient.Message
 }
 
 func NewServiceContext(c config.Config) *ServiceContext {
@@ -34,5 +36,12 @@ func NewServiceContext(c config.Config) *ServiceContext {
 				Key: c.UserCenterKey,
 			},
 		})),
+		MessageCenterRpc: messageclient.NewMessage(zrpc.MustNewClient(zrpc.RpcClientConf{
+			Etcd: discov.EtcdConf{
+				Hosts: c.BiServiceRpc.Etcd.Hosts,
+				//Hosts: []string{"192.168.3.149:2379"},
+				Key: c.MessageCenterKey,
+			},
+		})),
 	}
 }

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

@@ -185,3 +185,16 @@ type ClueInfoReq struct {
 	PageSize   int64  `json:"pageSize"`
 	PageNum    int64  `json:"pageNum"`
 }
+
+type MaterialSaveReq struct {
+	TaskName        string `json:"taskName"`
+	TaskDescription string `json:"taskDescription"`
+	MaterialContent string `json:"materialContent"`
+	QrcodeUrl       string `json:"qrcodeUrl"`
+	ReceiveUserName string `json:"receiveUserName"`
+	ReceiveUserId   string `json:"receiveUserId"`
+	FileUrl         string `json:"fileUrl"`
+	EntId           int64  `json:"entId"`
+	CreateUser      string `json:"createUser"`
+	ImgWebpage      string `json:"imgWebpage"`
+}

+ 1 - 0
go.mod

@@ -3,6 +3,7 @@ module bp.jydev.jianyu360.cn/BaseService/biService
 go 1.20
 
 require (
+	app.yhyue.com/moapp/MessageCenter v0.0.0-20250225080509-3a53e1e61ead
 	app.yhyue.com/moapp/jybase v0.0.0-20240523083821-42a82b37ae20
 	app.yhyue.com/moapp/jypkg v1.13.3
 	bp.jydev.jianyu360.cn/BaseService/fileCenter v0.0.0-20231017010644-b9f5c5167673

+ 21 - 0
go.sum

@@ -1,3 +1,4 @@
+app.yhyue.com/moapp/MessageCenter v0.0.0-20250225080509-3a53e1e61ead/go.mod h1:XCJ6PL4mrZBnpWJPLpc73vziLvfoQIs/kFQmXWG6pmM=
 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/jyMarketing v0.0.2-0.20230304035551-21bb1eedf547 h1:cCmWQW8DUBD2nuZNDz9aIe6MrlioxTbdaA2YiJhlzjY=
@@ -9,6 +10,7 @@ app.yhyue.com/moapp/jybase v0.0.0-20220418104200-46c3fff161c7/go.mod h1:qNRA0sHu
 app.yhyue.com/moapp/jybase v0.0.0-20220420032112-668025915ee4/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 app.yhyue.com/moapp/jybase v0.0.0-20220421060131-a1001013ba46/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a/go.mod h1:zB47XTeJvpcbtBRYgkQuxOICWNexiZfbUO+7aUf6mNs=
+app.yhyue.com/moapp/jybase v0.0.0-20230901064756-2fc66b18db40/go.mod h1:Hv9U/7oHRucqH315Tr1+d03NCvS9mOKPfk8pwwlOIwQ=
 app.yhyue.com/moapp/jybase v0.0.0-20240523083821-42a82b37ae20 h1:F1ZHkzo7yHp5eNrZDqQxaXMIKFQU72bsI1dMq3ztJLA=
 app.yhyue.com/moapp/jybase v0.0.0-20240523083821-42a82b37ae20/go.mod h1:XHNATN6tsJKHdCB0DbUtFdPPHXexTUFyB3RlO+lUUoM=
 app.yhyue.com/moapp/jypkg v1.13.3 h1:qJdzwbjoddEZW2e96OqUypUz356/aVXlAqJn2kmeksE=
@@ -85,6 +87,7 @@ github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbi
 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/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
+github.com/ClickHouse/clickhouse-go/v2 v2.0.15/go.mod h1:Z21o82zD8FFqefOQDg93c0XITlxGbTsWQuRm588Azkk=
 github.com/ClickHouse/clickhouse-go/v2 v2.2.0/go.mod h1:8f2XZUi7XoeU+uPIytSi1cvx8fmJxi7vIgqpvYTF1+o=
 github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
@@ -191,6 +194,7 @@ github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi
 github.com/evanphx/json-patch v4.11.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/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
+github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
 github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
 github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
 github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
@@ -294,7 +298,9 @@ github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY9
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
 github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/gogf/gf/contrib/drivers/clickhouse/v2 v2.6.1/go.mod h1:wlqfsjkIw3ZLEbcns5jK5urj1lt2JLweaqB+OlduRl0=
 github.com/gogf/gf/v2 v2.0.6/go.mod h1:8uYzw7qNzuq8vrhVlWke1b1925FFqOJIgmyYW1sr/0M=
+github.com/gogf/gf/v2 v2.6.1/go.mod h1:x2XONYcI4hRQ/4gMNbWHmZrNzSEIg20s2NULbzom5k0=
 github.com/gogf/gf/v2 v2.6.2 h1:TvI1UEH2RDbgFVlJJjkc/6ct6+5zjbOS5MiJ2ESG8qg=
 github.com/gogf/gf/v2 v2.6.2/go.mod h1:x2XONYcI4hRQ/4gMNbWHmZrNzSEIg20s2NULbzom5k0=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
@@ -363,6 +369,7 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
 github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
 github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
 github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -526,6 +533,7 @@ github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/longbridgeapp/sqlparser v0.3.1/go.mod h1:GIHaUq8zvYyHLCLMJJykx1CdM6LHtkUih/QaJXySSx4=
+github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
 github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
 github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
 github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
@@ -549,6 +557,7 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y
 github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
 github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
+github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
 github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
 github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
@@ -633,6 +642,7 @@ github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdU
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
 github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
 github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -687,6 +697,7 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ
 github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
 github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
 github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
+github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
 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=
@@ -740,6 +751,7 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F
 github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
 github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
 github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
@@ -816,6 +828,7 @@ go.opentelemetry.io/otel v1.0.0/go.mod h1:AjRVh9A5/5DE7S+mZtTR6t8vpKKryam+0lREnf
 go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs=
 go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk=
 go.opentelemetry.io/otel v1.8.0/go.mod h1:2pkj+iMj0o03Y+cW6/m8Y4WkRdYN3AvCXCnzRMp9yvM=
+go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU=
 go.opentelemetry.io/otel v1.19.0 h1:MuS/TNf4/j4IXsZuJegVzI1cwut7Qc00344rgH7p8bs=
 go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY=
 go.opentelemetry.io/otel/exporters/jaeger v1.3.0/go.mod h1:KoYHi1BtkUPncGSRtCe/eh1ijsnePhSkxwzz07vU0Fc=
@@ -839,12 +852,14 @@ go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319
 go.opentelemetry.io/otel/sdk v1.0.0/go.mod h1:PCrDHlSy5x1kjezSdL37PhbFUMjrsLRshJ2zCzeXwbM=
 go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs=
 go.opentelemetry.io/otel/sdk v1.8.0/go.mod h1:uPSfc+yfDH2StDM/Rm35WE8gXSNdvCg023J6HeGNO0c=
+go.opentelemetry.io/otel/sdk v1.14.0/go.mod h1:bwIC5TjrNG6QDCHNWvW4HLHtUQ4I+VQDsnjhvyZCALM=
 go.opentelemetry.io/otel/sdk v1.19.0 h1:6USY6zH+L8uMH8L3t1enZPR3WFEmSTADlqldyHtJi3o=
 go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A=
 go.opentelemetry.io/otel/trace v1.0.0/go.mod h1:PXTWqayeFUlJV1YDNhsJYB184+IvAH814St6o6ajzIs=
 go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk=
 go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU=
 go.opentelemetry.io/otel/trace v1.8.0/go.mod h1:0Bt3PXY8w+3pheS3hQUt+wow8b1ojPaTBoTCh2zIFI4=
+go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8=
 go.opentelemetry.io/otel/trace v1.19.0 h1:DFVQmlVbfVeOuBRrwdtaehRrWiL1JoVs9CPIQ1Dzxpg=
 go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo=
 go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
@@ -901,6 +916,7 @@ golang.org/x/crypto v0.0.0-20210920023735-84f357641f63/go.mod h1:GvvjBRRGRdwPK5y
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
+golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
 golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
 golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -989,6 +1005,7 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
 golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
 golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
 golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
 golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
 golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -1090,10 +1107,12 @@ golang.org/x/sys v0.0.0-20220429233432-b5fbb4746d32/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
 golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
@@ -1103,6 +1122,7 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX
 golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
 golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
 golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
 golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
 golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1119,6 +1139,7 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
 golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
 golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=

+ 201 - 182
rpc/biService.proto

@@ -1,293 +1,312 @@
 syntax = "proto3";
 
-option go_package ="./pb";
+option go_package = "./pb";
 
 message MyDataAssetReq {
-	string userId = 1;
-	int64 newUserId = 2;
-	int64 entUserId = 3;
+  string userId = 1;
+  int64 newUserId = 2;
+  int64 entUserId = 3;
 }
 
 message MyDataAssetResp {
-	int64 error_code = 1;
-	string error_msg = 2;
-	MyDataAsset data = 3;
+  int64 error_code = 1;
+  string error_msg = 2;
+  MyDataAsset data = 3;
 }
 
 message MyDataAsset {
-	int64 collect_info_count = 1;
-	int64 follow_project_count = 2;
-	int64 collect_doc_count = 3;
-	int64 claim_customer_count = 4;
-	int64 claim_nzj_count = 5;
+  int64 collect_info_count = 1;
+  int64 follow_project_count = 2;
+  int64 collect_doc_count = 3;
+  int64 claim_customer_count = 4;
+  int64 claim_nzj_count = 5;
 }
 
 message AddProjectReq {
-	string info_id = 1; //信息id
-	int64 source = 2; //1-收藏,2-招标搜索,3-关注
-	int64 position_id = 3; //职位id
-	int64 position_type = 4; //职位类型
-	int64 account_id = 5; //账户id
-	string company_name = 6;
-	string user_name = 7;
-	int64 userId = 8;
-	int64 entId = 9;
-	string entUserName = 10;
+  string info_id = 1; //信息id
+  int64 source = 2; //1-收藏,2-招标搜索,3-关注
+  int64 position_id = 3; //职位id
+  int64 position_type = 4; //职位类型
+  int64 account_id = 5; //账户id
+  string company_name = 6;
+  string user_name = 7;
+  int64 userId = 8;
+  int64 entId = 9;
+  string entUserName = 10;
 }
 
 message AddProjectResp {
-	int64 error_code = 1;
-	string error_msg = 2;
-	AddProject data = 3;
+  int64 error_code = 1;
+  string error_msg = 2;
+  AddProject data = 3;
 }
 
 message AddProject {
-	int64 status = 1;
-	int64 count = 2;
+  int64 status = 1;
+  int64 count = 2;
 }
 
 message GetInfoIdResp {
-	int64 error_code = 1;
-	string error_msg = 2;
-	repeated string data = 3;
+  int64 error_code = 1;
+  string error_msg = 2;
+  repeated string data = 3;
 }
 
 message DrawClueReq {
-	int64 positionId = 1;
-	int64 count = 2;
+  int64 positionId = 1;
+  int64 count = 2;
 }
 
 message CallReq {
-	int64 position_id =1;
-	string phone =2; 
+  int64 position_id = 1;
+  string phone = 2;
 }
 
 message BiResp {
-	int64 error_code = 1;
-	string error_msg = 2;
-	string data = 3;
+  int64 error_code = 1;
+  string error_msg = 2;
+  string data = 3;
 }
 
 message BiReply {
-	int64 error_code = 1;
-	string error_msg = 2;
-	bytes data = 3;
+  int64 error_code = 1;
+  string error_msg = 2;
+  bytes data = 3;
 }
 
 message DistributeClueReq {
-	string clueCount = 1;
-	repeated int64 clueIdList = 2;
-	repeated DistributeDatas datas = 3;
-	int64 positionId = 4;
-	int64 isTask = 5;
+  string clueCount = 1;
+  repeated int64 clueIdList = 2;
+  repeated DistributeDatas datas = 3;
+  int64 positionId = 4;
+  int64 isTask = 5;
 }
 
 message DistributeDatas {
-	string name = 1;
-	int64 positionId = 2;
-	string totalCount = 3;
-	string uncompletedCount = 4;
-	int64 distributedCount = 5;
+  string name = 1;
+  int64 positionId = 2;
+  string totalCount = 3;
+  string uncompletedCount = 4;
+  int64 distributedCount = 5;
 }
 
 message ClueImportReq {
-	string pcbh = 1;
-	int64 positionId = 2;
+  string pcbh = 1;
+  int64 positionId = 2;
 }
 
 message ClueImportResp {
-	int64 error_code = 1;
-	string error_msg = 2;
-	ClueImport data = 3;
+  int64 error_code = 1;
+  string error_msg = 2;
+  ClueImport data = 3;
 }
 
 message ClueImport {
-	int64 status = 1;
-	string result = 2;
+  int64 status = 1;
+  string result = 2;
 }
 
 message ClueAddReq {
-	string phone = 1;
-	string username = 2;
-	string source = 3;
-	string status999 = 4;
-	string owner = 5;
-	string empNo = 6;
-	string company = 7;
-	string isPolicymaker = 8;
-	string belongToIndustry = 9;
-	string job = 10;
-	string customerNeeds = 11;
-	string belongTo = 12;
-	string wantGoods = 13;
-	string customerBudget = 14;
+  string phone = 1;
+  string username = 2;
+  string source = 3;
+  string status999 = 4;
+  string owner = 5;
+  string empNo = 6;
+  string company = 7;
+  string isPolicymaker = 8;
+  string belongToIndustry = 9;
+  string job = 10;
+  string customerNeeds = 11;
+  string belongTo = 12;
+  string wantGoods = 13;
+  string customerBudget = 14;
 }
 
 message SqlManageReq {
-	float id = 1;
-	repeated Param params = 2;
+  float id = 1;
+  repeated Param params = 2;
 }
 
 message MyInfoReq {
-	string bid = 1;
-	string sid = 2;
+  string bid = 1;
+  string sid = 2;
 }
 
 message Param {
-	string value = 1;
-	string type = 2;
+  string value = 1;
+  string type = 2;
 }
 
 message ExportReq {
-	string mail = 1;
-	repeated string mapping = 2;
-	int64 PositionId=3;
+  string mail = 1;
+  repeated string mapping = 2;
+  int64 PositionId = 3;
 }
 
 message OperateReq {
-	string newId = 1;
-	int64 type=2;
+  string newId = 1;
+  int64 type = 2;
 }
 
 message CompanyReq {
-	string companyName = 1;
+  string companyName = 1;
 }
 
 message CompanyResp {
-	int64 status = 1;
+  int64 status = 1;
 }
 
 message DistributeClueShowReq {
-	int64 positionId = 1;
-	int64 dataType = 2;
-	string clueIdList = 3;
-	repeated DistributeClueShows datas = 4;
-	int64 IsTask = 5;
-	int64 UpdatePositionID=6;
+  int64 positionId = 1;
+  int64 dataType = 2;
+  string clueIdList = 3;
+  repeated DistributeClueShows datas = 4;
+  int64 IsTask = 5;
+  int64 UpdatePositionID = 6;
 }
 
 message DistributeClueShows {
-	int64 positionId = 1;
-	int64 distributedCount = 2;
+  int64 positionId = 1;
+  int64 distributedCount = 2;
 }
 message DistributeClueShowss {
-	int64 positionId = 1;
-	int64 companyCount = 2;
-	int64 clueCount = 3;
-	int64 minCount = 4;
-	int64 companyCounts = 5;
-	int64 existingCount=6;
-	bool FullStatus=7;
+  int64 positionId = 1;
+  int64 companyCount = 2;
+  int64 clueCount = 3;
+  int64 minCount = 4;
+  int64 companyCounts = 5;
+  int64 existingCount = 6;
+  bool FullStatus = 7;
 }
 
 message DistributeClueShowResp {
-	int64 error_code = 1;
-	string error_msg = 2;
-	repeated DistributeClueShowss data = 3;
+  int64 error_code = 1;
+  string error_msg = 2;
+  repeated DistributeClueShowss data = 3;
 }
 
 message ExportByDbReq {
-	string token = 1;
-	string title = 2;
-	string content = 3;
-	string mails = 4;
-	string fileName = 5;
-	repeated FilesData datas = 6;
+  string token = 1;
+  string title = 2;
+  string content = 3;
+  string mails = 4;
+  string fileName = 5;
+  repeated FilesData datas = 6;
 }
 
 message FilesData {
-	string sheetName = 1;
-	string sql = 2;
+  string sheetName = 1;
+  string sql = 2;
 }
 
 message UpFileReq {
-	string appId = 1;
-	int64 userId = 2;
-	int64 positionId = 3;
-	int64 entUserId = 4;
-	int64 entId = 5;
-	string stype = 6;
-	bytes file = 7;
-	string fileName = 8;
-	string fileSize = 9;
+  string appId = 1;
+  int64 userId = 2;
+  int64 positionId = 3;
+  int64 entUserId = 4;
+  int64 entId = 5;
+  string stype = 6;
+  bytes file = 7;
+  string fileName = 8;
+  string fileSize = 9;
 }
 message AcceptanceReq{
-	int64 	ProposeType=1;
-	string Propose_time  =2;
-	string Channel   =3;
-	int64 Acceptance_type =4;
-	int64 Status       =5;
-	string Over_time   =6;
-	string Remark      =7;
-	int64 PositionId   =8;
-	string DeptId      =9;
-	string EntUserName    =10;
-	string paramData=11;
-}
-	message 	AcceptanceResp{
-		int64 error_code = 1;
-		string error_msg = 2;
-		Acceptance data = 3;
-	}
-	message  Acceptance{
-	 string  AcceptanceNo=1;
-	}
+  int64  ProposeType = 1;
+  string Propose_time = 2;
+  string Channel = 3;
+  int64 Acceptance_type = 4;
+  int64 Status = 5;
+  string Over_time = 6;
+  string Remark = 7;
+  int64 PositionId = 8;
+  string DeptId = 9;
+  string EntUserName = 10;
+  string paramData = 11;
+}
+message  AcceptanceResp{
+  int64 error_code = 1;
+  string error_msg = 2;
+  Acceptance data = 3;
+}
+message  Acceptance{
+  string  AcceptanceNo = 1;
+}
 
 message SendMailReq {
-	string title = 1;
-	string content = 2;
-	string mails = 3;
+  string title = 1;
+  string content = 2;
+  string mails = 3;
 }
 
 message CreateCuleReq {
-	string appId = 1;
-	int64 positionId = 2;
-	string userId = 3;
-	string phone = 4;
+  string appId = 1;
+  int64 positionId = 2;
+  string userId = 3;
+  string phone = 4;
 }
 
 message TransferClueReq {
-	int64 positionId = 1;
-	string userId = 2;
-	string phone = 3;
-	string orderNo = 4;
+  int64 positionId = 1;
+  string userId = 2;
+  string phone = 3;
+  string orderNo = 4;
 }
 message FindClueInfoReq {
-	string userId = 2;
-	int64 positionId = 1;
-	string phone=3;
+  string userId = 2;
+  int64 positionId = 1;
+  string phone = 3;
 }
 message ClueInfoReq {
-	string searchTxt = 1;
-	string searchType = 2; // 0: 线索名称,1: 联系方式,2: 联系人
-	int64 pageSize = 3;
-	int64 pageNum = 4;
+  string searchTxt = 1;
+  string searchType = 2; // 0: 线索名称,1: 联系方式,2: 联系人
+  int64 pageSize = 3;
+  int64 pageNum = 4;
+}
+message MaterialSaveReq {
+  string task_name = 1;
+  string task_description = 2;
+  string material_content = 3;
+  string qrcode_url = 4;
+  string receive_user_name = 5;
+  string receive_user_id = 6;
+  string file_url = 7;
+  int64 ent_id = 8;
+  string create_user = 9;
+  string img_webpage = 10;
+}
+message MaterialSaveResp {
+  int64 error_code = 1;
+  string error_msg = 2;
+  int64 msg_id =3;
+  repeated string userIdArr = 4;
 }
 
 service BiService {
-	rpc myDataAsset (MyDataAssetReq) returns (MyDataAssetResp); //我的数据资产
-	rpc addProject (AddProjectReq) returns (AddProjectResp); //添加项目
-	rpc getInfoId (AddProjectReq) returns (GetInfoIdResp); //获取添加过项目的信息id
-	rpc drawClue (DrawClueReq) returns (AddProjectResp); //领取线索
-	rpc Call (CallReq) returns (BiResp); //外呼集成
-	rpc distributeClue (DistributeClueReq) returns (AddProjectResp); //批量分配
-	rpc clueImport (ClueImportReq) returns (ClueImportResp); //线索导入
-	rpc clueAdd (ClueAddReq) returns (AddProjectResp); //合力亿捷新增线索
-	rpc clueImportTt (ClueImportReq) returns (ClueImportResp); //线索导入tt
-	rpc autoFollow (CallReq) returns (ClueImportResp);
-	rpc sqlManage (SqlManageReq) returns (BiReply); //bi通用接口
-	rpc myInfo (MyInfoReq) returns (BiReply); //用户身份
-	rpc allInfoExport (ExportReq) returns (BiReply); //资讯全量导出
-	rpc allProjectExport (ExportReq) returns (BiReply); //项目全量导出
-	rpc infoOperate (OperateReq) returns (BiReply); //数据操作
-	rpc getCompanyType (CompanyReq) returns (CompanyResp); //判断公司类型
-	rpc distributeClueShow (DistributeClueShowReq) returns (DistributeClueShowResp); //批量分配展示
-	rpc sendMail (ExportByDbReq) returns (BiReply); //数据导出(通用)
-	rpc upFile (UpFileReq) returns(BiReply);
-	rpc sendCommonMail (SendMailReq) returns(BiReply);
-	rpc addAcceptance (AcceptanceReq) returns(AcceptanceResp);
-	rpc createClueByPhone(CreateCuleReq) returns(BiReply);
-	rpc transferClueByPhone(TransferClueReq) returns(BiReply);
-	rpc findClueInfo(FindClueInfoReq) returns(BiReply);
-	rpc getClueInfoList(ClueInfoReq) returns(BiReply);
+  rpc myDataAsset (MyDataAssetReq) returns (MyDataAssetResp); //我的数据资产
+  rpc addProject (AddProjectReq) returns (AddProjectResp); //添加项目
+  rpc getInfoId (AddProjectReq) returns (GetInfoIdResp); //获取添加过项目的信息id
+  rpc drawClue (DrawClueReq) returns (AddProjectResp); //领取线索
+  rpc Call (CallReq) returns (BiResp); //外呼集成
+  rpc distributeClue (DistributeClueReq) returns (AddProjectResp); //批量分配
+  rpc clueImport (ClueImportReq) returns (ClueImportResp); //线索导入
+  rpc clueAdd (ClueAddReq) returns (AddProjectResp); //合力亿捷新增线索
+  rpc clueImportTt (ClueImportReq) returns (ClueImportResp); //线索导入tt
+  rpc autoFollow (CallReq) returns (ClueImportResp);
+  rpc sqlManage (SqlManageReq) returns (BiReply); //bi通用接口
+  rpc myInfo (MyInfoReq) returns (BiReply); //用户身份
+  rpc allInfoExport (ExportReq) returns (BiReply); //资讯全量导出
+  rpc allProjectExport (ExportReq) returns (BiReply); //项目全量导出
+  rpc infoOperate (OperateReq) returns (BiReply); //数据操作
+  rpc getCompanyType (CompanyReq) returns (CompanyResp); //判断公司类型
+  rpc distributeClueShow (DistributeClueShowReq) returns (DistributeClueShowResp); //批量分配展示
+  rpc sendMail (ExportByDbReq) returns (BiReply); //数据导出(通用)
+  rpc upFile (UpFileReq) returns(BiReply);
+  rpc sendCommonMail (SendMailReq) returns(BiReply);
+  rpc addAcceptance (AcceptanceReq) returns(AcceptanceResp);
+  rpc createClueByPhone(CreateCuleReq) returns(BiReply);
+  rpc transferClueByPhone(TransferClueReq) returns(BiReply);
+  rpc findClueInfo(FindClueInfoReq) returns(BiReply);
+  rpc getClueInfoList(ClueInfoReq) returns(BiReply);
+  rpc MaterialSave(MaterialSaveReq) returns(MaterialSaveResp);//物料分发保存
 }

+ 9 - 1
rpc/biservice/biservice.go

@@ -1,4 +1,4 @@
-// Code generated by goctl. DO NOT EDIT.
+// Code generated by goctl. DO NOT EDIT!
 // Source: biService.proto
 
 package biservice
@@ -42,6 +42,8 @@ type (
 	FilesData              = pb.FilesData
 	FindClueInfoReq        = pb.FindClueInfoReq
 	GetInfoIdResp          = pb.GetInfoIdResp
+	MaterialSaveReq        = pb.MaterialSaveReq
+	MaterialSaveResp       = pb.MaterialSaveResp
 	MyDataAsset            = pb.MyDataAsset
 	MyDataAssetReq         = pb.MyDataAssetReq
 	MyDataAssetResp        = pb.MyDataAssetResp
@@ -79,6 +81,7 @@ type (
 		TransferClueByPhone(ctx context.Context, in *TransferClueReq, opts ...grpc.CallOption) (*BiReply, error)
 		FindClueInfo(ctx context.Context, in *FindClueInfoReq, opts ...grpc.CallOption) (*BiReply, error)
 		GetClueInfoList(ctx context.Context, in *ClueInfoReq, opts ...grpc.CallOption) (*BiReply, error)
+		MaterialSave(ctx context.Context, in *MaterialSaveReq, opts ...grpc.CallOption) (*MaterialSaveResp, error)
 	}
 
 	defaultBiService struct {
@@ -216,3 +219,8 @@ func (m *defaultBiService) GetClueInfoList(ctx context.Context, in *ClueInfoReq,
 	client := pb.NewBiServiceClient(m.cli.Conn())
 	return client.GetClueInfoList(ctx, in, opts...)
 }
+
+func (m *defaultBiService) MaterialSave(ctx context.Context, in *MaterialSaveReq, opts ...grpc.CallOption) (*MaterialSaveResp, error) {
+	client := pb.NewBiServiceClient(m.cli.Conn())
+	return client.MaterialSave(ctx, in, opts...)
+}

+ 4 - 1
rpc/etc/biservice.yaml

@@ -187,5 +187,8 @@ productArr:
       - name: 郑爽
         phone: '18595618858'
         isResign: false
-
+messageCenterKey: message.rpc
+materialMsg:
+  title: "您有1个宣传物料需要发布!"
+  content: "%s给你分享了运营宣传物料,请及时处理。点击查看详情。"
 

+ 9 - 4
rpc/internal/config/config.go

@@ -14,10 +14,11 @@ type ProductMap struct {
 
 type Config struct {
 	zrpc.RpcServerConf
-	UserCenterRpc zrpc.RpcClientConf
-	FileCenterRpc zrpc.RpcClientConf
-	Logx          logx.LogConf
-	Mysql         struct {
+	UserCenterRpc    zrpc.RpcClientConf
+	MessageCenterRpc zrpc.RpcClientConf
+	FileCenterRpc    zrpc.RpcClientConf
+	Logx             logx.LogConf
+	Mysql            struct {
 		JianYu    *mysql.Mysql
 		JyDoc     *mysql.Mysql
 		Bi        *mysql.Mysql
@@ -98,4 +99,8 @@ type Config struct {
 	AllocationCap     int64
 	ProductArr        []entity.ProductMap
 	EntId             int64
+	MaterialMsg       struct {
+		Title   string
+		Content string
+	}
 }

+ 6 - 1
rpc/internal/server/biserviceserver.go

@@ -1,4 +1,4 @@
-// Code generated by goctl. DO NOT EDIT.
+// Code generated by goctl. DO NOT EDIT!
 // Source: biService.proto
 
 package server
@@ -146,3 +146,8 @@ func (s *BiServiceServer) GetClueInfoList(ctx context.Context, in *pb.ClueInfoRe
 	l := logic.NewGetClueInfoListLogic(ctx, s.svcCtx)
 	return l.GetClueInfoList(in)
 }
+
+func (s *BiServiceServer) MaterialSave(ctx context.Context, in *pb.MaterialSaveReq) (*pb.MaterialSaveResp, error) {
+	l := logic.NewMaterialSaveLogic(ctx, s.svcCtx)
+	return l.MaterialSave(in)
+}

+ 355 - 103
rpc/pb/biService.pb.go

@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.31.0
-// 	protoc        v3.15.1
+// 	protoc-gen-go v1.28.0
+// 	protoc        v3.19.4
 // source: biService.proto
 
 package pb
@@ -2749,6 +2749,196 @@ func (x *ClueInfoReq) GetPageNum() int64 {
 	return 0
 }
 
+type MaterialSaveReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	TaskName        string `protobuf:"bytes,1,opt,name=task_name,json=taskName,proto3" json:"task_name,omitempty"`
+	TaskDescription string `protobuf:"bytes,2,opt,name=task_description,json=taskDescription,proto3" json:"task_description,omitempty"`
+	MaterialContent string `protobuf:"bytes,3,opt,name=material_content,json=materialContent,proto3" json:"material_content,omitempty"`
+	QrcodeUrl       string `protobuf:"bytes,4,opt,name=qrcode_url,json=qrcodeUrl,proto3" json:"qrcode_url,omitempty"`
+	ReceiveUserName string `protobuf:"bytes,5,opt,name=receive_user_name,json=receiveUserName,proto3" json:"receive_user_name,omitempty"`
+	ReceiveUserId   string `protobuf:"bytes,6,opt,name=receive_user_id,json=receiveUserId,proto3" json:"receive_user_id,omitempty"`
+	FileUrl         string `protobuf:"bytes,7,opt,name=file_url,json=fileUrl,proto3" json:"file_url,omitempty"`
+	EntId           int64  `protobuf:"varint,8,opt,name=ent_id,json=entId,proto3" json:"ent_id,omitempty"`
+	CreateUser      string `protobuf:"bytes,9,opt,name=create_user,json=createUser,proto3" json:"create_user,omitempty"`
+	ImgWebpage      string `protobuf:"bytes,10,opt,name=img_webpage,json=imgWebpage,proto3" json:"img_webpage,omitempty"`
+}
+
+func (x *MaterialSaveReq) Reset() {
+	*x = MaterialSaveReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_biService_proto_msgTypes[39]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *MaterialSaveReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MaterialSaveReq) ProtoMessage() {}
+
+func (x *MaterialSaveReq) ProtoReflect() protoreflect.Message {
+	mi := &file_biService_proto_msgTypes[39]
+	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 MaterialSaveReq.ProtoReflect.Descriptor instead.
+func (*MaterialSaveReq) Descriptor() ([]byte, []int) {
+	return file_biService_proto_rawDescGZIP(), []int{39}
+}
+
+func (x *MaterialSaveReq) GetTaskName() string {
+	if x != nil {
+		return x.TaskName
+	}
+	return ""
+}
+
+func (x *MaterialSaveReq) GetTaskDescription() string {
+	if x != nil {
+		return x.TaskDescription
+	}
+	return ""
+}
+
+func (x *MaterialSaveReq) GetMaterialContent() string {
+	if x != nil {
+		return x.MaterialContent
+	}
+	return ""
+}
+
+func (x *MaterialSaveReq) GetQrcodeUrl() string {
+	if x != nil {
+		return x.QrcodeUrl
+	}
+	return ""
+}
+
+func (x *MaterialSaveReq) GetReceiveUserName() string {
+	if x != nil {
+		return x.ReceiveUserName
+	}
+	return ""
+}
+
+func (x *MaterialSaveReq) GetReceiveUserId() string {
+	if x != nil {
+		return x.ReceiveUserId
+	}
+	return ""
+}
+
+func (x *MaterialSaveReq) GetFileUrl() string {
+	if x != nil {
+		return x.FileUrl
+	}
+	return ""
+}
+
+func (x *MaterialSaveReq) GetEntId() int64 {
+	if x != nil {
+		return x.EntId
+	}
+	return 0
+}
+
+func (x *MaterialSaveReq) GetCreateUser() string {
+	if x != nil {
+		return x.CreateUser
+	}
+	return ""
+}
+
+func (x *MaterialSaveReq) GetImgWebpage() string {
+	if x != nil {
+		return x.ImgWebpage
+	}
+	return ""
+}
+
+type MaterialSaveResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ErrorCode int64    `protobuf:"varint,1,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"`
+	ErrorMsg  string   `protobuf:"bytes,2,opt,name=error_msg,json=errorMsg,proto3" json:"error_msg,omitempty"`
+	MsgId     int64    `protobuf:"varint,3,opt,name=msg_id,json=msgId,proto3" json:"msg_id,omitempty"`
+	UserIdArr []string `protobuf:"bytes,4,rep,name=userIdArr,proto3" json:"userIdArr,omitempty"`
+}
+
+func (x *MaterialSaveResp) Reset() {
+	*x = MaterialSaveResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_biService_proto_msgTypes[40]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *MaterialSaveResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MaterialSaveResp) ProtoMessage() {}
+
+func (x *MaterialSaveResp) ProtoReflect() protoreflect.Message {
+	mi := &file_biService_proto_msgTypes[40]
+	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 MaterialSaveResp.ProtoReflect.Descriptor instead.
+func (*MaterialSaveResp) Descriptor() ([]byte, []int) {
+	return file_biService_proto_rawDescGZIP(), []int{40}
+}
+
+func (x *MaterialSaveResp) GetErrorCode() int64 {
+	if x != nil {
+		return x.ErrorCode
+	}
+	return 0
+}
+
+func (x *MaterialSaveResp) GetErrorMsg() string {
+	if x != nil {
+		return x.ErrorMsg
+	}
+	return ""
+}
+
+func (x *MaterialSaveResp) GetMsgId() int64 {
+	if x != nil {
+		return x.MsgId
+	}
+	return 0
+}
+
+func (x *MaterialSaveResp) GetUserIdArr() []string {
+	if x != nil {
+		return x.UserIdArr
+	}
+	return nil
+}
+
 var File_biService_proto protoreflect.FileDescriptor
 
 var file_biService_proto_rawDesc = []byte{
@@ -3068,78 +3258,112 @@ var file_biService_proto_rawDesc = []byte{
 	0x72, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53,
 	0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53,
 	0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x04,
-	0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x32, 0xd4, 0x08,
-	0x0a, 0x09, 0x42, 0x69, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x0b, 0x6d,
-	0x79, 0x44, 0x61, 0x74, 0x61, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x0f, 0x2e, 0x4d, 0x79, 0x44,
-	0x61, 0x74, 0x61, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x4d, 0x79,
-	0x44, 0x61, 0x74, 0x61, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a,
-	0x0a, 0x61, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x0e, 0x2e, 0x41, 0x64,
-	0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x41, 0x64,
-	0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2b, 0x0a, 0x09,
-	0x67, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x49, 0x64, 0x12, 0x0e, 0x2e, 0x41, 0x64, 0x64, 0x50,
-	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x0e, 0x2e, 0x47, 0x65, 0x74, 0x49,
-	0x6e, 0x66, 0x6f, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x29, 0x0a, 0x08, 0x64, 0x72, 0x61,
-	0x77, 0x43, 0x6c, 0x75, 0x65, 0x12, 0x0c, 0x2e, 0x44, 0x72, 0x61, 0x77, 0x43, 0x6c, 0x75, 0x65,
-	0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
-	0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x04, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x08, 0x2e, 0x43,
-	0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x07, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x73, 0x70, 0x12,
-	0x35, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6c, 0x75,
-	0x65, 0x12, 0x12, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6c,
-	0x75, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65,
-	0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x65, 0x49, 0x6d,
-	0x70, 0x6f, 0x72, 0x74, 0x12, 0x0e, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72,
-	0x74, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72,
-	0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x27, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64,
-	0x12, 0x0b, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e,
-	0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2f,
-	0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x74, 0x12, 0x0e,
-	0x2e, 0x43, 0x6c, 0x75, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x0f,
-	0x2e, 0x43, 0x6c, 0x75, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12,
-	0x27, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x08, 0x2e,
-	0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x49, 0x6d,
-	0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x24, 0x0a, 0x09, 0x73, 0x71, 0x6c, 0x4d,
-	0x61, 0x6e, 0x61, 0x67, 0x65, 0x12, 0x0d, 0x2e, 0x53, 0x71, 0x6c, 0x4d, 0x61, 0x6e, 0x61, 0x67,
-	0x65, 0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1e,
-	0x0a, 0x06, 0x6d, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0a, 0x2e, 0x4d, 0x79, 0x49, 0x6e, 0x66,
-	0x6f, 0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x25,
-	0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12,
-	0x0a, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69,
-	0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x6c, 0x6c, 0x50, 0x72, 0x6f, 0x6a,
-	0x65, 0x63, 0x74, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x0a, 0x2e, 0x45, 0x78, 0x70, 0x6f,
-	0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12,
-	0x24, 0x0a, 0x0b, 0x69, 0x6e, 0x66, 0x6f, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x0b,
-	0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69,
-	0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2b, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70,
-	0x61, 0x6e, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e,
-	0x79, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x52, 0x65,
-	0x73, 0x70, 0x12, 0x45, 0x0a, 0x12, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
-	0x43, 0x6c, 0x75, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x16, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72,
-	0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x71,
-	0x1a, 0x17, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6c, 0x75,
-	0x65, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x12, 0x24, 0x0a, 0x08, 0x73, 0x65, 0x6e,
-	0x64, 0x4d, 0x61, 0x69, 0x6c, 0x12, 0x0e, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x79,
-	0x44, 0x62, 0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12,
-	0x1e, 0x0a, 0x06, 0x75, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x0a, 0x2e, 0x55, 0x70, 0x46, 0x69,
-	0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12,
-	0x28, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4d, 0x61, 0x69,
-	0x6c, 0x12, 0x0c, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a,
-	0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x30, 0x0a, 0x0d, 0x61, 0x64, 0x64,
-	0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x0e, 0x2e, 0x41, 0x63, 0x63,
-	0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x41, 0x63, 0x63,
-	0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x11, 0x63,
-	0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x65, 0x42, 0x79, 0x50, 0x68, 0x6f, 0x6e, 0x65,
-	0x12, 0x0e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71,
-	0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x31, 0x0a, 0x13, 0x74, 0x72,
-	0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x65, 0x42, 0x79, 0x50, 0x68, 0x6f, 0x6e,
-	0x65, 0x12, 0x10, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x65,
-	0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2a, 0x0a,
-	0x0c, 0x66, 0x69, 0x6e, 0x64, 0x43, 0x6c, 0x75, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x2e,
-	0x46, 0x69, 0x6e, 0x64, 0x43, 0x6c, 0x75, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a,
-	0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x29, 0x0a, 0x0f, 0x67, 0x65, 0x74,
-	0x43, 0x6c, 0x75, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0c, 0x2e, 0x43,
-	0x6c, 0x75, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52,
-	0x65, 0x70, 0x6c, 0x79, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x33,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x22, 0xeb, 0x02,
+	0x0a, 0x0f, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65,
+	0x71, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29,
+	0x0a, 0x10, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
+	0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x61, 0x73, 0x6b, 0x44, 0x65,
+	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x6d, 0x61, 0x74,
+	0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0f, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x6e,
+	0x74, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x71, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x75,
+	0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x71, 0x72, 0x63, 0x6f, 0x64, 0x65,
+	0x55, 0x72, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x75,
+	0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f,
+	0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+	0x26, 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f,
+	0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76,
+	0x65, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x5f,
+	0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x55,
+	0x72, 0x6c, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x72, 0x65,
+	0x61, 0x74, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
+	0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6d,
+	0x67, 0x5f, 0x77, 0x65, 0x62, 0x70, 0x61, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0a, 0x69, 0x6d, 0x67, 0x57, 0x65, 0x62, 0x70, 0x61, 0x67, 0x65, 0x22, 0x83, 0x01, 0x0a, 0x10,
+	0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70,
+	0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12,
+	0x1b, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x15, 0x0a, 0x06,
+	0x6d, 0x73, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6d, 0x73,
+	0x67, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x41, 0x72, 0x72,
+	0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x41, 0x72,
+	0x72, 0x32, 0x89, 0x09, 0x0a, 0x09, 0x42, 0x69, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
+	0x30, 0x0a, 0x0b, 0x6d, 0x79, 0x44, 0x61, 0x74, 0x61, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x0f,
+	0x2e, 0x4d, 0x79, 0x44, 0x61, 0x74, 0x61, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a,
+	0x10, 0x2e, 0x4d, 0x79, 0x44, 0x61, 0x74, 0x61, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73,
+	0x70, 0x12, 0x2d, 0x0a, 0x0a, 0x61, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12,
+	0x0e, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x1a,
+	0x0f, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70,
+	0x12, 0x2b, 0x0a, 0x09, 0x67, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x49, 0x64, 0x12, 0x0e, 0x2e,
+	0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x0e, 0x2e,
+	0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x29, 0x0a,
+	0x08, 0x64, 0x72, 0x61, 0x77, 0x43, 0x6c, 0x75, 0x65, 0x12, 0x0c, 0x2e, 0x44, 0x72, 0x61, 0x77,
+	0x43, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f,
+	0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x04, 0x43, 0x61, 0x6c, 0x6c,
+	0x12, 0x08, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x07, 0x2e, 0x42, 0x69, 0x52,
+	0x65, 0x73, 0x70, 0x12, 0x35, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+	0x65, 0x43, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75,
+	0x74, 0x65, 0x43, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x41, 0x64, 0x64, 0x50,
+	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x0a, 0x63, 0x6c,
+	0x75, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x0e, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x49,
+	0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x49,
+	0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x27, 0x0a, 0x07, 0x63, 0x6c, 0x75,
+	0x65, 0x41, 0x64, 0x64, 0x12, 0x0b, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x41, 0x64, 0x64, 0x52, 0x65,
+	0x71, 0x1a, 0x0f, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x2f, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74,
+	0x54, 0x74, 0x12, 0x0e, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52,
+	0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52,
+	0x65, 0x73, 0x70, 0x12, 0x27, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x46, 0x6f, 0x6c, 0x6c, 0x6f,
+	0x77, 0x12, 0x08, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x43, 0x6c,
+	0x75, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x24, 0x0a, 0x09,
+	0x73, 0x71, 0x6c, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x12, 0x0d, 0x2e, 0x53, 0x71, 0x6c, 0x4d,
+	0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70,
+	0x6c, 0x79, 0x12, 0x1e, 0x0a, 0x06, 0x6d, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0a, 0x2e, 0x4d,
+	0x79, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70,
+	0x6c, 0x79, 0x12, 0x25, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x45, 0x78, 0x70,
+	0x6f, 0x72, 0x74, 0x12, 0x0a, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a,
+	0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x6c, 0x6c,
+	0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x0a, 0x2e,
+	0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65,
+	0x70, 0x6c, 0x79, 0x12, 0x24, 0x0a, 0x0b, 0x69, 0x6e, 0x66, 0x6f, 0x4f, 0x70, 0x65, 0x72, 0x61,
+	0x74, 0x65, 0x12, 0x0b, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a,
+	0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2b, 0x0a, 0x0e, 0x67, 0x65, 0x74,
+	0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x2e, 0x43, 0x6f,
+	0x6d, 0x70, 0x61, 0x6e, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61,
+	0x6e, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12, 0x45, 0x0a, 0x12, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69,
+	0x62, 0x75, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x12, 0x16, 0x2e, 0x44,
+	0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x65, 0x53, 0x68, 0x6f,
+	0x77, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+	0x65, 0x43, 0x6c, 0x75, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x52, 0x65, 0x73, 0x70, 0x12, 0x24, 0x0a,
+	0x08, 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x12, 0x0e, 0x2e, 0x45, 0x78, 0x70, 0x6f,
+	0x72, 0x74, 0x42, 0x79, 0x44, 0x62, 0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65,
+	0x70, 0x6c, 0x79, 0x12, 0x1e, 0x0a, 0x06, 0x75, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x0a, 0x2e,
+	0x55, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65,
+	0x70, 0x6c, 0x79, 0x12, 0x28, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
+	0x6e, 0x4d, 0x61, 0x69, 0x6c, 0x12, 0x0c, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x61, 0x69, 0x6c,
+	0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x30, 0x0a,
+	0x0d, 0x61, 0x64, 0x64, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x0e,
+	0x2e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0f,
+	0x2e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12,
+	0x2d, 0x0a, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x65, 0x42, 0x79, 0x50,
+	0x68, 0x6f, 0x6e, 0x65, 0x12, 0x0e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x75, 0x6c,
+	0x65, 0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x31,
+	0x0a, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x65, 0x42, 0x79,
+	0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x10, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72,
+	0x43, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c,
+	0x79, 0x12, 0x2a, 0x0a, 0x0c, 0x66, 0x69, 0x6e, 0x64, 0x43, 0x6c, 0x75, 0x65, 0x49, 0x6e, 0x66,
+	0x6f, 0x12, 0x10, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x43, 0x6c, 0x75, 0x65, 0x49, 0x6e, 0x66, 0x6f,
+	0x52, 0x65, 0x71, 0x1a, 0x08, 0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x29, 0x0a,
+	0x0f, 0x67, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x69, 0x73, 0x74,
+	0x12, 0x0c, 0x2e, 0x43, 0x6c, 0x75, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x08,
+	0x2e, 0x42, 0x69, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x33, 0x0a, 0x0c, 0x4d, 0x61, 0x74, 0x65,
+	0x72, 0x69, 0x61, 0x6c, 0x53, 0x61, 0x76, 0x65, 0x12, 0x10, 0x2e, 0x4d, 0x61, 0x74, 0x65, 0x72,
+	0x69, 0x61, 0x6c, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x4d, 0x61, 0x74,
+	0x65, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x61, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x42, 0x06, 0x5a,
+	0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -3154,7 +3378,7 @@ func file_biService_proto_rawDescGZIP() []byte {
 	return file_biService_proto_rawDescData
 }
 
-var file_biService_proto_msgTypes = make([]protoimpl.MessageInfo, 39)
+var file_biService_proto_msgTypes = make([]protoimpl.MessageInfo, 41)
 var file_biService_proto_goTypes = []interface{}{
 	(*MyDataAssetReq)(nil),         // 0: MyDataAssetReq
 	(*MyDataAssetResp)(nil),        // 1: MyDataAssetResp
@@ -3195,6 +3419,8 @@ var file_biService_proto_goTypes = []interface{}{
 	(*TransferClueReq)(nil),        // 36: TransferClueReq
 	(*FindClueInfoReq)(nil),        // 37: FindClueInfoReq
 	(*ClueInfoReq)(nil),            // 38: ClueInfoReq
+	(*MaterialSaveReq)(nil),        // 39: MaterialSaveReq
+	(*MaterialSaveResp)(nil),       // 40: MaterialSaveResp
 }
 var file_biService_proto_depIdxs = []int32{
 	2,  // 0: MyDataAssetResp.data:type_name -> MyDataAsset
@@ -3231,33 +3457,35 @@ var file_biService_proto_depIdxs = []int32{
 	36, // 31: BiService.transferClueByPhone:input_type -> TransferClueReq
 	37, // 32: BiService.findClueInfo:input_type -> FindClueInfoReq
 	38, // 33: BiService.getClueInfoList:input_type -> ClueInfoReq
-	1,  // 34: BiService.myDataAsset:output_type -> MyDataAssetResp
-	4,  // 35: BiService.addProject:output_type -> AddProjectResp
-	6,  // 36: BiService.getInfoId:output_type -> GetInfoIdResp
-	4,  // 37: BiService.drawClue:output_type -> AddProjectResp
-	9,  // 38: BiService.Call:output_type -> BiResp
-	4,  // 39: BiService.distributeClue:output_type -> AddProjectResp
-	14, // 40: BiService.clueImport:output_type -> ClueImportResp
-	4,  // 41: BiService.clueAdd:output_type -> AddProjectResp
-	14, // 42: BiService.clueImportTt:output_type -> ClueImportResp
-	14, // 43: BiService.autoFollow:output_type -> ClueImportResp
-	10, // 44: BiService.sqlManage:output_type -> BiReply
-	10, // 45: BiService.myInfo:output_type -> BiReply
-	10, // 46: BiService.allInfoExport:output_type -> BiReply
-	10, // 47: BiService.allProjectExport:output_type -> BiReply
-	10, // 48: BiService.infoOperate:output_type -> BiReply
-	23, // 49: BiService.getCompanyType:output_type -> CompanyResp
-	27, // 50: BiService.distributeClueShow:output_type -> DistributeClueShowResp
-	10, // 51: BiService.sendMail:output_type -> BiReply
-	10, // 52: BiService.upFile:output_type -> BiReply
-	10, // 53: BiService.sendCommonMail:output_type -> BiReply
-	32, // 54: BiService.addAcceptance:output_type -> AcceptanceResp
-	10, // 55: BiService.createClueByPhone:output_type -> BiReply
-	10, // 56: BiService.transferClueByPhone:output_type -> BiReply
-	10, // 57: BiService.findClueInfo:output_type -> BiReply
-	10, // 58: BiService.getClueInfoList:output_type -> BiReply
-	34, // [34:59] is the sub-list for method output_type
-	9,  // [9:34] is the sub-list for method input_type
+	39, // 34: BiService.MaterialSave:input_type -> MaterialSaveReq
+	1,  // 35: BiService.myDataAsset:output_type -> MyDataAssetResp
+	4,  // 36: BiService.addProject:output_type -> AddProjectResp
+	6,  // 37: BiService.getInfoId:output_type -> GetInfoIdResp
+	4,  // 38: BiService.drawClue:output_type -> AddProjectResp
+	9,  // 39: BiService.Call:output_type -> BiResp
+	4,  // 40: BiService.distributeClue:output_type -> AddProjectResp
+	14, // 41: BiService.clueImport:output_type -> ClueImportResp
+	4,  // 42: BiService.clueAdd:output_type -> AddProjectResp
+	14, // 43: BiService.clueImportTt:output_type -> ClueImportResp
+	14, // 44: BiService.autoFollow:output_type -> ClueImportResp
+	10, // 45: BiService.sqlManage:output_type -> BiReply
+	10, // 46: BiService.myInfo:output_type -> BiReply
+	10, // 47: BiService.allInfoExport:output_type -> BiReply
+	10, // 48: BiService.allProjectExport:output_type -> BiReply
+	10, // 49: BiService.infoOperate:output_type -> BiReply
+	23, // 50: BiService.getCompanyType:output_type -> CompanyResp
+	27, // 51: BiService.distributeClueShow:output_type -> DistributeClueShowResp
+	10, // 52: BiService.sendMail:output_type -> BiReply
+	10, // 53: BiService.upFile:output_type -> BiReply
+	10, // 54: BiService.sendCommonMail:output_type -> BiReply
+	32, // 55: BiService.addAcceptance:output_type -> AcceptanceResp
+	10, // 56: BiService.createClueByPhone:output_type -> BiReply
+	10, // 57: BiService.transferClueByPhone:output_type -> BiReply
+	10, // 58: BiService.findClueInfo:output_type -> BiReply
+	10, // 59: BiService.getClueInfoList:output_type -> BiReply
+	40, // 60: BiService.MaterialSave:output_type -> MaterialSaveResp
+	35, // [35:61] is the sub-list for method output_type
+	9,  // [9:35] 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
@@ -3737,6 +3965,30 @@ func file_biService_proto_init() {
 				return nil
 			}
 		}
+		file_biService_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*MaterialSaveReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_biService_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*MaterialSaveResp); 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{
@@ -3744,7 +3996,7 @@ func file_biService_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_biService_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   39,
+			NumMessages:   41,
 			NumExtensions: 0,
 			NumServices:   1,
 		},

+ 88 - 80
rpc/pb/biService_grpc.pb.go

@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
 // versions:
-// - protoc-gen-go-grpc v1.3.0
-// - protoc             v3.15.1
+// - protoc-gen-go-grpc v1.2.0
+// - protoc             v3.19.4
 // source: biService.proto
 
 package pb
@@ -18,34 +18,6 @@ import (
 // Requires gRPC-Go v1.32.0 or later.
 const _ = grpc.SupportPackageIsVersion7
 
-const (
-	BiService_MyDataAsset_FullMethodName         = "/BiService/myDataAsset"
-	BiService_AddProject_FullMethodName          = "/BiService/addProject"
-	BiService_GetInfoId_FullMethodName           = "/BiService/getInfoId"
-	BiService_DrawClue_FullMethodName            = "/BiService/drawClue"
-	BiService_Call_FullMethodName                = "/BiService/Call"
-	BiService_DistributeClue_FullMethodName      = "/BiService/distributeClue"
-	BiService_ClueImport_FullMethodName          = "/BiService/clueImport"
-	BiService_ClueAdd_FullMethodName             = "/BiService/clueAdd"
-	BiService_ClueImportTt_FullMethodName        = "/BiService/clueImportTt"
-	BiService_AutoFollow_FullMethodName          = "/BiService/autoFollow"
-	BiService_SqlManage_FullMethodName           = "/BiService/sqlManage"
-	BiService_MyInfo_FullMethodName              = "/BiService/myInfo"
-	BiService_AllInfoExport_FullMethodName       = "/BiService/allInfoExport"
-	BiService_AllProjectExport_FullMethodName    = "/BiService/allProjectExport"
-	BiService_InfoOperate_FullMethodName         = "/BiService/infoOperate"
-	BiService_GetCompanyType_FullMethodName      = "/BiService/getCompanyType"
-	BiService_DistributeClueShow_FullMethodName  = "/BiService/distributeClueShow"
-	BiService_SendMail_FullMethodName            = "/BiService/sendMail"
-	BiService_UpFile_FullMethodName              = "/BiService/upFile"
-	BiService_SendCommonMail_FullMethodName      = "/BiService/sendCommonMail"
-	BiService_AddAcceptance_FullMethodName       = "/BiService/addAcceptance"
-	BiService_CreateClueByPhone_FullMethodName   = "/BiService/createClueByPhone"
-	BiService_TransferClueByPhone_FullMethodName = "/BiService/transferClueByPhone"
-	BiService_FindClueInfo_FullMethodName        = "/BiService/findClueInfo"
-	BiService_GetClueInfoList_FullMethodName     = "/BiService/getClueInfoList"
-)
-
 // BiServiceClient is the client API for BiService 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.
@@ -75,6 +47,7 @@ type BiServiceClient interface {
 	TransferClueByPhone(ctx context.Context, in *TransferClueReq, opts ...grpc.CallOption) (*BiReply, error)
 	FindClueInfo(ctx context.Context, in *FindClueInfoReq, opts ...grpc.CallOption) (*BiReply, error)
 	GetClueInfoList(ctx context.Context, in *ClueInfoReq, opts ...grpc.CallOption) (*BiReply, error)
+	MaterialSave(ctx context.Context, in *MaterialSaveReq, opts ...grpc.CallOption) (*MaterialSaveResp, error)
 }
 
 type biServiceClient struct {
@@ -87,7 +60,7 @@ func NewBiServiceClient(cc grpc.ClientConnInterface) BiServiceClient {
 
 func (c *biServiceClient) MyDataAsset(ctx context.Context, in *MyDataAssetReq, opts ...grpc.CallOption) (*MyDataAssetResp, error) {
 	out := new(MyDataAssetResp)
-	err := c.cc.Invoke(ctx, BiService_MyDataAsset_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/myDataAsset", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -96,7 +69,7 @@ func (c *biServiceClient) MyDataAsset(ctx context.Context, in *MyDataAssetReq, o
 
 func (c *biServiceClient) AddProject(ctx context.Context, in *AddProjectReq, opts ...grpc.CallOption) (*AddProjectResp, error) {
 	out := new(AddProjectResp)
-	err := c.cc.Invoke(ctx, BiService_AddProject_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/addProject", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -105,7 +78,7 @@ func (c *biServiceClient) AddProject(ctx context.Context, in *AddProjectReq, opt
 
 func (c *biServiceClient) GetInfoId(ctx context.Context, in *AddProjectReq, opts ...grpc.CallOption) (*GetInfoIdResp, error) {
 	out := new(GetInfoIdResp)
-	err := c.cc.Invoke(ctx, BiService_GetInfoId_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/getInfoId", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -114,7 +87,7 @@ func (c *biServiceClient) GetInfoId(ctx context.Context, in *AddProjectReq, opts
 
 func (c *biServiceClient) DrawClue(ctx context.Context, in *DrawClueReq, opts ...grpc.CallOption) (*AddProjectResp, error) {
 	out := new(AddProjectResp)
-	err := c.cc.Invoke(ctx, BiService_DrawClue_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/drawClue", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -123,7 +96,7 @@ func (c *biServiceClient) DrawClue(ctx context.Context, in *DrawClueReq, opts ..
 
 func (c *biServiceClient) Call(ctx context.Context, in *CallReq, opts ...grpc.CallOption) (*BiResp, error) {
 	out := new(BiResp)
-	err := c.cc.Invoke(ctx, BiService_Call_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/Call", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -132,7 +105,7 @@ func (c *biServiceClient) Call(ctx context.Context, in *CallReq, opts ...grpc.Ca
 
 func (c *biServiceClient) DistributeClue(ctx context.Context, in *DistributeClueReq, opts ...grpc.CallOption) (*AddProjectResp, error) {
 	out := new(AddProjectResp)
-	err := c.cc.Invoke(ctx, BiService_DistributeClue_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/distributeClue", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -141,7 +114,7 @@ func (c *biServiceClient) DistributeClue(ctx context.Context, in *DistributeClue
 
 func (c *biServiceClient) ClueImport(ctx context.Context, in *ClueImportReq, opts ...grpc.CallOption) (*ClueImportResp, error) {
 	out := new(ClueImportResp)
-	err := c.cc.Invoke(ctx, BiService_ClueImport_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/clueImport", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -150,7 +123,7 @@ func (c *biServiceClient) ClueImport(ctx context.Context, in *ClueImportReq, opt
 
 func (c *biServiceClient) ClueAdd(ctx context.Context, in *ClueAddReq, opts ...grpc.CallOption) (*AddProjectResp, error) {
 	out := new(AddProjectResp)
-	err := c.cc.Invoke(ctx, BiService_ClueAdd_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/clueAdd", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -159,7 +132,7 @@ func (c *biServiceClient) ClueAdd(ctx context.Context, in *ClueAddReq, opts ...g
 
 func (c *biServiceClient) ClueImportTt(ctx context.Context, in *ClueImportReq, opts ...grpc.CallOption) (*ClueImportResp, error) {
 	out := new(ClueImportResp)
-	err := c.cc.Invoke(ctx, BiService_ClueImportTt_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/clueImportTt", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -168,7 +141,7 @@ func (c *biServiceClient) ClueImportTt(ctx context.Context, in *ClueImportReq, o
 
 func (c *biServiceClient) AutoFollow(ctx context.Context, in *CallReq, opts ...grpc.CallOption) (*ClueImportResp, error) {
 	out := new(ClueImportResp)
-	err := c.cc.Invoke(ctx, BiService_AutoFollow_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/autoFollow", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -177,7 +150,7 @@ func (c *biServiceClient) AutoFollow(ctx context.Context, in *CallReq, opts ...g
 
 func (c *biServiceClient) SqlManage(ctx context.Context, in *SqlManageReq, opts ...grpc.CallOption) (*BiReply, error) {
 	out := new(BiReply)
-	err := c.cc.Invoke(ctx, BiService_SqlManage_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/sqlManage", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -186,7 +159,7 @@ func (c *biServiceClient) SqlManage(ctx context.Context, in *SqlManageReq, opts
 
 func (c *biServiceClient) MyInfo(ctx context.Context, in *MyInfoReq, opts ...grpc.CallOption) (*BiReply, error) {
 	out := new(BiReply)
-	err := c.cc.Invoke(ctx, BiService_MyInfo_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/myInfo", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -195,7 +168,7 @@ func (c *biServiceClient) MyInfo(ctx context.Context, in *MyInfoReq, opts ...grp
 
 func (c *biServiceClient) AllInfoExport(ctx context.Context, in *ExportReq, opts ...grpc.CallOption) (*BiReply, error) {
 	out := new(BiReply)
-	err := c.cc.Invoke(ctx, BiService_AllInfoExport_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/allInfoExport", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -204,7 +177,7 @@ func (c *biServiceClient) AllInfoExport(ctx context.Context, in *ExportReq, opts
 
 func (c *biServiceClient) AllProjectExport(ctx context.Context, in *ExportReq, opts ...grpc.CallOption) (*BiReply, error) {
 	out := new(BiReply)
-	err := c.cc.Invoke(ctx, BiService_AllProjectExport_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/allProjectExport", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -213,7 +186,7 @@ func (c *biServiceClient) AllProjectExport(ctx context.Context, in *ExportReq, o
 
 func (c *biServiceClient) InfoOperate(ctx context.Context, in *OperateReq, opts ...grpc.CallOption) (*BiReply, error) {
 	out := new(BiReply)
-	err := c.cc.Invoke(ctx, BiService_InfoOperate_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/infoOperate", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -222,7 +195,7 @@ func (c *biServiceClient) InfoOperate(ctx context.Context, in *OperateReq, opts
 
 func (c *biServiceClient) GetCompanyType(ctx context.Context, in *CompanyReq, opts ...grpc.CallOption) (*CompanyResp, error) {
 	out := new(CompanyResp)
-	err := c.cc.Invoke(ctx, BiService_GetCompanyType_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/getCompanyType", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -231,7 +204,7 @@ func (c *biServiceClient) GetCompanyType(ctx context.Context, in *CompanyReq, op
 
 func (c *biServiceClient) DistributeClueShow(ctx context.Context, in *DistributeClueShowReq, opts ...grpc.CallOption) (*DistributeClueShowResp, error) {
 	out := new(DistributeClueShowResp)
-	err := c.cc.Invoke(ctx, BiService_DistributeClueShow_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/distributeClueShow", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -240,7 +213,7 @@ func (c *biServiceClient) DistributeClueShow(ctx context.Context, in *Distribute
 
 func (c *biServiceClient) SendMail(ctx context.Context, in *ExportByDbReq, opts ...grpc.CallOption) (*BiReply, error) {
 	out := new(BiReply)
-	err := c.cc.Invoke(ctx, BiService_SendMail_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/sendMail", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -249,7 +222,7 @@ func (c *biServiceClient) SendMail(ctx context.Context, in *ExportByDbReq, opts
 
 func (c *biServiceClient) UpFile(ctx context.Context, in *UpFileReq, opts ...grpc.CallOption) (*BiReply, error) {
 	out := new(BiReply)
-	err := c.cc.Invoke(ctx, BiService_UpFile_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/upFile", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -258,7 +231,7 @@ func (c *biServiceClient) UpFile(ctx context.Context, in *UpFileReq, opts ...grp
 
 func (c *biServiceClient) SendCommonMail(ctx context.Context, in *SendMailReq, opts ...grpc.CallOption) (*BiReply, error) {
 	out := new(BiReply)
-	err := c.cc.Invoke(ctx, BiService_SendCommonMail_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/sendCommonMail", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -267,7 +240,7 @@ func (c *biServiceClient) SendCommonMail(ctx context.Context, in *SendMailReq, o
 
 func (c *biServiceClient) AddAcceptance(ctx context.Context, in *AcceptanceReq, opts ...grpc.CallOption) (*AcceptanceResp, error) {
 	out := new(AcceptanceResp)
-	err := c.cc.Invoke(ctx, BiService_AddAcceptance_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/addAcceptance", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -276,7 +249,7 @@ func (c *biServiceClient) AddAcceptance(ctx context.Context, in *AcceptanceReq,
 
 func (c *biServiceClient) CreateClueByPhone(ctx context.Context, in *CreateCuleReq, opts ...grpc.CallOption) (*BiReply, error) {
 	out := new(BiReply)
-	err := c.cc.Invoke(ctx, BiService_CreateClueByPhone_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/createClueByPhone", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -285,7 +258,7 @@ func (c *biServiceClient) CreateClueByPhone(ctx context.Context, in *CreateCuleR
 
 func (c *biServiceClient) TransferClueByPhone(ctx context.Context, in *TransferClueReq, opts ...grpc.CallOption) (*BiReply, error) {
 	out := new(BiReply)
-	err := c.cc.Invoke(ctx, BiService_TransferClueByPhone_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/transferClueByPhone", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -294,7 +267,7 @@ func (c *biServiceClient) TransferClueByPhone(ctx context.Context, in *TransferC
 
 func (c *biServiceClient) FindClueInfo(ctx context.Context, in *FindClueInfoReq, opts ...grpc.CallOption) (*BiReply, error) {
 	out := new(BiReply)
-	err := c.cc.Invoke(ctx, BiService_FindClueInfo_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/findClueInfo", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -303,7 +276,16 @@ func (c *biServiceClient) FindClueInfo(ctx context.Context, in *FindClueInfoReq,
 
 func (c *biServiceClient) GetClueInfoList(ctx context.Context, in *ClueInfoReq, opts ...grpc.CallOption) (*BiReply, error) {
 	out := new(BiReply)
-	err := c.cc.Invoke(ctx, BiService_GetClueInfoList_FullMethodName, in, out, opts...)
+	err := c.cc.Invoke(ctx, "/BiService/getClueInfoList", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *biServiceClient) MaterialSave(ctx context.Context, in *MaterialSaveReq, opts ...grpc.CallOption) (*MaterialSaveResp, error) {
+	out := new(MaterialSaveResp)
+	err := c.cc.Invoke(ctx, "/BiService/MaterialSave", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -339,6 +321,7 @@ type BiServiceServer interface {
 	TransferClueByPhone(context.Context, *TransferClueReq) (*BiReply, error)
 	FindClueInfo(context.Context, *FindClueInfoReq) (*BiReply, error)
 	GetClueInfoList(context.Context, *ClueInfoReq) (*BiReply, error)
+	MaterialSave(context.Context, *MaterialSaveReq) (*MaterialSaveResp, error)
 	mustEmbedUnimplementedBiServiceServer()
 }
 
@@ -421,6 +404,9 @@ func (UnimplementedBiServiceServer) FindClueInfo(context.Context, *FindClueInfoR
 func (UnimplementedBiServiceServer) GetClueInfoList(context.Context, *ClueInfoReq) (*BiReply, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetClueInfoList not implemented")
 }
+func (UnimplementedBiServiceServer) MaterialSave(context.Context, *MaterialSaveReq) (*MaterialSaveResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MaterialSave not implemented")
+}
 func (UnimplementedBiServiceServer) mustEmbedUnimplementedBiServiceServer() {}
 
 // UnsafeBiServiceServer may be embedded to opt out of forward compatibility for this service.
@@ -444,7 +430,7 @@ func _BiService_MyDataAsset_Handler(srv interface{}, ctx context.Context, dec fu
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_MyDataAsset_FullMethodName,
+		FullMethod: "/BiService/myDataAsset",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).MyDataAsset(ctx, req.(*MyDataAssetReq))
@@ -462,7 +448,7 @@ func _BiService_AddProject_Handler(srv interface{}, ctx context.Context, dec fun
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_AddProject_FullMethodName,
+		FullMethod: "/BiService/addProject",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).AddProject(ctx, req.(*AddProjectReq))
@@ -480,7 +466,7 @@ func _BiService_GetInfoId_Handler(srv interface{}, ctx context.Context, dec func
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_GetInfoId_FullMethodName,
+		FullMethod: "/BiService/getInfoId",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).GetInfoId(ctx, req.(*AddProjectReq))
@@ -498,7 +484,7 @@ func _BiService_DrawClue_Handler(srv interface{}, ctx context.Context, dec func(
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_DrawClue_FullMethodName,
+		FullMethod: "/BiService/drawClue",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).DrawClue(ctx, req.(*DrawClueReq))
@@ -516,7 +502,7 @@ func _BiService_Call_Handler(srv interface{}, ctx context.Context, dec func(inte
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_Call_FullMethodName,
+		FullMethod: "/BiService/Call",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).Call(ctx, req.(*CallReq))
@@ -534,7 +520,7 @@ func _BiService_DistributeClue_Handler(srv interface{}, ctx context.Context, dec
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_DistributeClue_FullMethodName,
+		FullMethod: "/BiService/distributeClue",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).DistributeClue(ctx, req.(*DistributeClueReq))
@@ -552,7 +538,7 @@ func _BiService_ClueImport_Handler(srv interface{}, ctx context.Context, dec fun
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_ClueImport_FullMethodName,
+		FullMethod: "/BiService/clueImport",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).ClueImport(ctx, req.(*ClueImportReq))
@@ -570,7 +556,7 @@ func _BiService_ClueAdd_Handler(srv interface{}, ctx context.Context, dec func(i
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_ClueAdd_FullMethodName,
+		FullMethod: "/BiService/clueAdd",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).ClueAdd(ctx, req.(*ClueAddReq))
@@ -588,7 +574,7 @@ func _BiService_ClueImportTt_Handler(srv interface{}, ctx context.Context, dec f
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_ClueImportTt_FullMethodName,
+		FullMethod: "/BiService/clueImportTt",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).ClueImportTt(ctx, req.(*ClueImportReq))
@@ -606,7 +592,7 @@ func _BiService_AutoFollow_Handler(srv interface{}, ctx context.Context, dec fun
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_AutoFollow_FullMethodName,
+		FullMethod: "/BiService/autoFollow",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).AutoFollow(ctx, req.(*CallReq))
@@ -624,7 +610,7 @@ func _BiService_SqlManage_Handler(srv interface{}, ctx context.Context, dec func
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_SqlManage_FullMethodName,
+		FullMethod: "/BiService/sqlManage",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).SqlManage(ctx, req.(*SqlManageReq))
@@ -642,7 +628,7 @@ func _BiService_MyInfo_Handler(srv interface{}, ctx context.Context, dec func(in
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_MyInfo_FullMethodName,
+		FullMethod: "/BiService/myInfo",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).MyInfo(ctx, req.(*MyInfoReq))
@@ -660,7 +646,7 @@ func _BiService_AllInfoExport_Handler(srv interface{}, ctx context.Context, dec
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_AllInfoExport_FullMethodName,
+		FullMethod: "/BiService/allInfoExport",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).AllInfoExport(ctx, req.(*ExportReq))
@@ -678,7 +664,7 @@ func _BiService_AllProjectExport_Handler(srv interface{}, ctx context.Context, d
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_AllProjectExport_FullMethodName,
+		FullMethod: "/BiService/allProjectExport",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).AllProjectExport(ctx, req.(*ExportReq))
@@ -696,7 +682,7 @@ func _BiService_InfoOperate_Handler(srv interface{}, ctx context.Context, dec fu
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_InfoOperate_FullMethodName,
+		FullMethod: "/BiService/infoOperate",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).InfoOperate(ctx, req.(*OperateReq))
@@ -714,7 +700,7 @@ func _BiService_GetCompanyType_Handler(srv interface{}, ctx context.Context, dec
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_GetCompanyType_FullMethodName,
+		FullMethod: "/BiService/getCompanyType",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).GetCompanyType(ctx, req.(*CompanyReq))
@@ -732,7 +718,7 @@ func _BiService_DistributeClueShow_Handler(srv interface{}, ctx context.Context,
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_DistributeClueShow_FullMethodName,
+		FullMethod: "/BiService/distributeClueShow",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).DistributeClueShow(ctx, req.(*DistributeClueShowReq))
@@ -750,7 +736,7 @@ func _BiService_SendMail_Handler(srv interface{}, ctx context.Context, dec func(
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_SendMail_FullMethodName,
+		FullMethod: "/BiService/sendMail",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).SendMail(ctx, req.(*ExportByDbReq))
@@ -768,7 +754,7 @@ func _BiService_UpFile_Handler(srv interface{}, ctx context.Context, dec func(in
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_UpFile_FullMethodName,
+		FullMethod: "/BiService/upFile",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).UpFile(ctx, req.(*UpFileReq))
@@ -786,7 +772,7 @@ func _BiService_SendCommonMail_Handler(srv interface{}, ctx context.Context, dec
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_SendCommonMail_FullMethodName,
+		FullMethod: "/BiService/sendCommonMail",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).SendCommonMail(ctx, req.(*SendMailReq))
@@ -804,7 +790,7 @@ func _BiService_AddAcceptance_Handler(srv interface{}, ctx context.Context, dec
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_AddAcceptance_FullMethodName,
+		FullMethod: "/BiService/addAcceptance",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).AddAcceptance(ctx, req.(*AcceptanceReq))
@@ -822,7 +808,7 @@ func _BiService_CreateClueByPhone_Handler(srv interface{}, ctx context.Context,
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_CreateClueByPhone_FullMethodName,
+		FullMethod: "/BiService/createClueByPhone",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).CreateClueByPhone(ctx, req.(*CreateCuleReq))
@@ -840,7 +826,7 @@ func _BiService_TransferClueByPhone_Handler(srv interface{}, ctx context.Context
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_TransferClueByPhone_FullMethodName,
+		FullMethod: "/BiService/transferClueByPhone",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).TransferClueByPhone(ctx, req.(*TransferClueReq))
@@ -858,7 +844,7 @@ func _BiService_FindClueInfo_Handler(srv interface{}, ctx context.Context, dec f
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_FindClueInfo_FullMethodName,
+		FullMethod: "/BiService/findClueInfo",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).FindClueInfo(ctx, req.(*FindClueInfoReq))
@@ -876,7 +862,7 @@ func _BiService_GetClueInfoList_Handler(srv interface{}, ctx context.Context, de
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: BiService_GetClueInfoList_FullMethodName,
+		FullMethod: "/BiService/getClueInfoList",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).GetClueInfoList(ctx, req.(*ClueInfoReq))
@@ -884,6 +870,24 @@ func _BiService_GetClueInfoList_Handler(srv interface{}, ctx context.Context, de
 	return interceptor(ctx, in, info, handler)
 }
 
+func _BiService_MaterialSave_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MaterialSaveReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BiServiceServer).MaterialSave(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/BiService/MaterialSave",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BiServiceServer).MaterialSave(ctx, req.(*MaterialSaveReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // BiService_ServiceDesc is the grpc.ServiceDesc for BiService service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -991,6 +995,10 @@ var BiService_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "getClueInfoList",
 			Handler:    _BiService_GetClueInfoList_Handler,
 		},
+		{
+			MethodName: "MaterialSave",
+			Handler:    _BiService_MaterialSave_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "biService.proto",

+ 67 - 0
service/material.go

@@ -0,0 +1,67 @@
+package service
+
+import (
+	"app.yhyue.com/moapp/jybase/date"
+	entity "bp.jydev.jianyu360.cn/BaseService/biService/entity"
+	"bp.jydev.jianyu360.cn/BaseService/biService/rpc/pb"
+	"errors"
+	"github.com/gogf/gf/v2/util/gconv"
+	"strings"
+	"time"
+)
+
+func MaterialSave(in *pb.MaterialSaveReq, title, content string) (msgId int64, err error) {
+	if len(strings.Split(in.ReceiveUserId, ",")) < 1 {
+		return 0, errors.New("物料发送人员为空")
+	}
+	//先插入message_log
+	saveMsg := map[string]interface{}{
+		"msg_type":    "14",
+		"title":       title,
+		"content":     content,
+		"send_mode":   2,
+		"send_time":   time.Now().Format(date.Date_Full_Layout),
+		"send_status": 4,
+		"update_time": time.Now().Format(date.Date_Full_Layout),
+		"link":        "",
+		"isdel":       1,
+		"update_user": in.CreateUser,
+		"Sign":        1,
+		"group_id":    11,
+		"createtime":  time.Now().Format(date.Date_Full_Layout),
+	}
+	msgId = entity.JyMysql.Insert("message_send_log", saveMsg)
+	if msgId < 0 {
+		return 0, errors.New("插入消息表message_send_log出错")
+	}
+	saveMap := map[string]interface{}{
+		"task_name":           in.TaskName,
+		"task_description":    in.TaskDescription,
+		"material_content":    in.MaterialContent,
+		"qrcode_url":          in.QrcodeUrl,
+		"receive_user_name":   in.ReceiveUserName,
+		"receive_position_id": in.ReceiveUserId,
+		"file_url":            in.FileUrl,
+		"createtime":          time.Now().Format(date.Date_Full_Layout),
+		"create_user":         in.CreateUser,
+		"msg_id":              msgId,
+		"img_webpage":         in.ImgWebpage,
+	}
+	ins := entity.BiService.Insert("operating_materials", saveMap)
+	if ins < 0 {
+		return 0, errors.New("插入物料表operating_materials出错")
+	}
+	return msgId, nil
+}
+
+func GetSendUserId(positionIds string, entId int64) []string {
+	//拿职位id找mgoid
+	userIdArr := []string{}
+	useridMap := entity.JyBiTidb.SelectBySql("SELECT userid FROM `dwd_f_userbase_id_mapping` WHERE position_id in (?) AND ent_id = ?", positionIds, entId)
+	if useridMap != nil && len(*useridMap) > 0 {
+		for _, val := range *useridMap {
+			userIdArr = append(userIdArr, gconv.String(val["userid"]))
+		}
+	}
+	return userIdArr
+}