jianghan 4 kuukautta sitten
vanhempi
commit
540ebd8896

+ 7 - 9
api/biService.api

@@ -3,7 +3,7 @@ syntax = "v1"
 type (
 	biResp {
 		Error_code int64       `json:"error_code"` //响应代码
-		Error_msg  string      `json:"error_msg"` //响应消息
+		Error_msg  string      `json:"error_msg"`  //响应消息
 		Data       interface{} `json:"data"`
 	}
 	myDataAssetReq {
@@ -153,11 +153,14 @@ type (
 	}
 	FindClueInfoReq {
 		UserId     string `header:"userId,optional"`
-		Phone      string `json:"phone"`
 		PositionId int64  `header:"positionId,optional"`
+		Phone      string `header:"phone,optional"`
 	}
 	ClueInfoReq {
-		SearchName string `json:"searchName"`
+		SearchTxt  string `json:"searchTxt"`
+		SearchType string `json:"searchType"` // 0: 线索名称,1: 联系方式,2: 联系人
+		PageSize   int64  `json:"pageSize"`
+		PageNum    int64  `json:"pageNum"`
 	}
 )
 
@@ -254,9 +257,4 @@ service biService-api {
 	@doc "线索查询"
 	@handler findClueInfo
 	post /biService/findClueInfo (FindClueInfoReq) returns (biResp)
-
-	@doc "线索验重 列表"
-	@handler getClueInfoList
-	post /biService/getClueInfoList (ClueInfoReq) returns (biResp)
-}
-
+}

+ 20 - 117
api/etc/biservice-api.yaml

@@ -1,120 +1,23 @@
-Name: biservice.rpc
-ListenOn: 0.0.0.0:9998
-Etcd:
-  Hosts:
-    - 192.168.3.240:2379
-  Key: biservice.rpc
-Mode: test
-Mysql:
-  JianYu:
-    DBName: jianyu
-    Address: 192.168.3.149:3306
-    UserName: root
-    PassWord: Topnet123
-    MaxOpenConns: 5
-    MaxIdleConns: 5
-  JyDoc:
-    DBName: jydocs
-    Address: 192.168.3.149:3306
-    UserName: root
-    PassWord: Topnet123
-    MaxOpenConns: 5
-    MaxIdleConns: 5
-  Bi:
-    DBName: jianyu_subjectdb_test
-    Address: 192.168.3.149:4000
-    UserName: xuzhiheng
-    PassWord: "Xzh#20221122K"
-    MaxOpenConns: 5
-    MaxIdleConns: 5
-  Tidb:
-    DBName: base_service
-    Address: 192.168.3.217:4000
-    UserName: root
-    PassWord: "=PDT49#80Z!RVv52_z"
-    MaxOpenConns: 5
-    MaxIdleConns: 5
-  BiTidb:
-    DBName: jianyu_subjectdb_test
-    Address: 192.168.3.149:4000
-    UserName: xuzhiheng
-    PassWord: "Xzh#20221122K"
-    MaxOpenConns: 5
-    MaxIdleConns: 5
-  CallTidb:
-    DBName: Call_Accounting
-    Address: 192.168.3.149:4000
-    UserName: xuzhiheng
-    PassWord: "Xzh#20221122K"
-    MaxOpenConns: 5
-    MaxIdleConns: 5
-  BiService:
-    DBName: bi_service
-    Address: 192.168.3.217:4000
-    UserName: root
-    PassWord: "=PDT49#80Z!RVv52_z"
-    MaxOpenConns: 5
-    MaxIdleConns: 5
-Mongo:
-  Qfw:
-    MongodbAddr: 192.168.3.206:27080
-    DbName: qfw
-    Size: 10
-  Bidding:
-    MongodbAddr: 192.168.3.206:27080
-    DbName: qfw
-    UserName:
-    Password:
-    Size: 10
-Es:
-  Address: http://192.168.3.241:9205
-  DbSize: 5
-  Version: v7
-  UserName:
-  Password:
-  Index: projectset
-  IType: projectset
-EntEs:
-  Address: http://192.168.3.241:9205
-  DbSize: 5
-  Version: v7
-  UserName:
-  Password:
+Name: biService-api
+Host: 0.0.0.0
+Port: 9995
+BiServiceRpc:
+  Etcd:
+    Hosts:
+      - 127.0.0.1:2379
+    Key: biservice.rpc
+  Timeout: 100000
+Timeout: 100000
+GatewayRpcConf:
+  Etcd:
+    Hosts:
+      - 172.31.31.203:2379
+    Key: gatewayDemo.rpc
+  Timeout: 300000
 Logx:
   Mode: console #console|file|volume
-  Path: logs
+  Path: ./logs
   Level: info #info|error|severe
-  KeepDays: 100
-CustomerCol: customer_test
-AddCountLimit: 500
-DrawCountLimit: 1000
-TopicName: jy_position_sync
-NsqUrl: 192.168.3.240:4161
-#合力亿捷account_token存储
-RedisAddress:
-  - newother=192.168.3.149:1712
-  - session=192.168.3.149:1713
-#合力亿捷相关调用参数
-Hlyj:
-  Appid: w4w2ex0bnt1n61or
-  Account: N000000029739
-  Secret: 3c8f7dd04d2c11edb786132b38c4d48a
-  TokenUrl: https://a1.7x24cc.com/accessToken #获取token接口
-  CallFlag: 104 #外呼集成的接口号
-  CallUrl: https://a1.7x24cc.com/commonInte #外呼集成接口
-  Integratedid: "8546"
-PublicKey: "791c521fec164e6c"
-Mail:
-  - Addr: smtp.exmail.qq.com
-    Port: 465
-    Pwd: "ue9Rg9Sf4CVtdm5a"
-    User: "public03@topnet.net.cn"
-  - Addr: smtp.exmail.qq.com
-    Port: 465
-    Pwd: "ue9Rg9Sf4CVtdm5a"
-    User: "public03@topnet.net.cn"
-UpdateProjectUrl: "http://192.168.3.206:7778/updateProject"
-ExportDirectory: "D:/top_git_projects/biService"
-CommonExportDir: "D:/top_git_projects/biComFileRes"
-ExportUrl: "https://jybx-webtest.jydev.jianyu360.com/tietaRes"
-ExportCount: 15000
+  KeepDays: 10
+ResourceCenterKey: "resource.rpc" #资源中台rpc
+UserCenterKey: "usercenter.rpc" #用户中台rpc

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

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

+ 20 - 10
api/internal/logic/getclueinfolistlogic.go

@@ -1,12 +1,11 @@
 package logic
 
 import (
-	"bp.jydev.jianyu360.cn/BaseService/biService/rpc/biservice"
-	"context"
-
 	"bp.jydev.jianyu360.cn/BaseService/biService/api/internal/svc"
 	"bp.jydev.jianyu360.cn/BaseService/biService/api/internal/types"
-
+	"bp.jydev.jianyu360.cn/BaseService/biService/rpc/biservice"
+	"context"
+	"github.com/gogf/gf/v2/util/gconv"
 	"github.com/zeromicro/go-zero/core/logx"
 )
 
@@ -26,14 +25,25 @@ func NewGetClueInfoListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *G
 }
 
 func (l *GetClueInfoListLogic) GetClueInfoList(req *types.ClueInfoReq) (resp *types.BiResp, err error) {
-	// todo: add your logic here and delete this line
-	if req.SearchName == "" {
+	if req.SearchTxt == "" {
 		return &types.BiResp{
-			Error_code: 1,
-			Error_msg:  "参数无效"}, nil
+			Error_code: 0,
+			Error_msg:  "搜索字段不能为空",
+			Data:       nil,
+		}, nil
 	}
 	res, err := l.svcCtx.BiServiceRpc.GetClueInfoList(l.ctx, &biservice.ClueInfoReq{
-		SearchName: req.SearchName,
+		SearchTxt:  req.SearchTxt,
+		SearchType: req.SearchType,
+		PageSize:   req.PageSize,
+		PageNum:    req.PageNum,
 	})
-	return &types.BiResp{Error_code: res.ErrorCode, Error_msg: res.ErrorMsg, Data: res.Data}, err
+	if err != nil || res.Data == nil {
+		return &types.BiResp{
+			Error_code: -1,
+			Error_msg:  "严重错误!",
+		}, err
+	}
+	data := gconv.Map(gconv.UnsafeBytesToStr(res.Data))
+	return &types.BiResp{Data: data}, err
 }

+ 8 - 1
api/internal/types/types.go

@@ -161,7 +161,14 @@ type BiResp struct {
 
 type CallReq struct {
 	PositionId int64  `header:"positionId,optional"`
-	Phone      string `json:"phone"`
+	Phone      string `header:"phone,optional"`
+}
+
+type ClueInfoReq struct {
+	SearchTxt  string `json:"searchTxt"`
+	SearchType string `json:"searchType"` // 0: 线索名称,1: 联系方式,2: 联系人
+	PageSize   int64  `json:"pageSize"`
+	PageNum    int64  `json:"pageNum"`
 }
 
 type DrawClueReq struct {

+ 1 - 1
go.mod

@@ -1,6 +1,6 @@
 module bp.jydev.jianyu360.cn/BaseService/biService
 
-go 1.19
+go 1.20
 
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20240523083821-42a82b37ae20

+ 14 - 0
rpc/biService.proto

@@ -258,12 +258,22 @@ message FindClueInfoReq {
 	int64 positionId = 1;
 	string phone=3;
 }
+<<<<<<< HEAD
 message MakeEntRelationReq {
 	string entName = 1;
 }
 message MakeEntRelationResp {
 	int64 status = 1;
 }
+=======
+message ClueInfoReq {
+	string searchTxt = 1;
+	string searchType = 2; // 0: 线索名称,1: 联系方式,2: 联系人
+	int64 pageSize = 3;
+	int64 pageNum = 4;
+}
+
+>>>>>>> master
 service BiService {
 	rpc myDataAsset (MyDataAssetReq) returns (MyDataAssetResp); //我的数据资产
 	rpc addProject (AddProjectReq) returns (AddProjectResp); //添加项目
@@ -289,5 +299,9 @@ service BiService {
 	rpc createClueByPhone(CreateCuleReq) returns(BiReply);
 	rpc transferClueByPhone(TransferClueReq) returns(BiReply);
 	rpc findClueInfo(FindClueInfoReq) returns(BiReply);
+<<<<<<< HEAD
 	rpc makeEntRelation(MakeEntRelationReq) returns(MakeEntRelationResp);
+=======
+	rpc getClueInfoList(ClueInfoReq) returns(BiReply);
+>>>>>>> master
 }

+ 11 - 0
rpc/biservice/biservice.go

@@ -26,6 +26,7 @@ type (
 	ClueImport             = pb.ClueImport
 	ClueImportReq          = pb.ClueImportReq
 	ClueImportResp         = pb.ClueImportResp
+	ClueInfoReq            = pb.ClueInfoReq
 	CompanyReq             = pb.CompanyReq
 	CompanyResp            = pb.CompanyResp
 	CreateCuleReq          = pb.CreateCuleReq
@@ -79,7 +80,11 @@ type (
 		CreateClueByPhone(ctx context.Context, in *CreateCuleReq, opts ...grpc.CallOption) (*BiReply, error)
 		TransferClueByPhone(ctx context.Context, in *TransferClueReq, opts ...grpc.CallOption) (*BiReply, error)
 		FindClueInfo(ctx context.Context, in *FindClueInfoReq, opts ...grpc.CallOption) (*BiReply, error)
+<<<<<<< HEAD
 		MakeEntRelation(ctx context.Context, in *MakeEntRelationReq, opts ...grpc.CallOption) (*MakeEntRelationResp, error)
+=======
+		GetClueInfoList(ctx context.Context, in *ClueInfoReq, opts ...grpc.CallOption) (*BiReply, error)
+>>>>>>> master
 	}
 
 	defaultBiService struct {
@@ -213,7 +218,13 @@ func (m *defaultBiService) FindClueInfo(ctx context.Context, in *FindClueInfoReq
 	return client.FindClueInfo(ctx, in, opts...)
 }
 
+<<<<<<< HEAD
 func (m *defaultBiService) MakeEntRelation(ctx context.Context, in *MakeEntRelationReq, opts ...grpc.CallOption) (*MakeEntRelationResp, error) {
 	client := pb.NewBiServiceClient(m.cli.Conn())
 	return client.MakeEntRelation(ctx, in, opts...)
+=======
+func (m *defaultBiService) GetClueInfoList(ctx context.Context, in *ClueInfoReq, opts ...grpc.CallOption) (*BiReply, error) {
+	client := pb.NewBiServiceClient(m.cli.Conn())
+	return client.GetClueInfoList(ctx, in, opts...)
+>>>>>>> master
 }

+ 14 - 14
rpc/etc/biservice.yaml

@@ -23,9 +23,9 @@ Mysql:
     MaxIdleConns: 5
   Bi:
     DBName: jianyu_subjectdb_test
-    Address: 192.168.3.149:4000
-    UserName: xuzhiheng
-    PassWord: Xzh#20221122K
+    Address: 127.0.0.1:4001
+    UserName: root
+    PassWord: "Tibi#20211222"
     MaxOpenConns: 30
     MaxIdleConns: 30
   Tidb:
@@ -37,14 +37,14 @@ Mysql:
     MaxIdleConns: 5
   BiTidb:
     DBName: jianyu_subjectdb_test
-    Address: 192.168.3.149:4000
+    Address: 127.0.0.1:4001
     UserName: root
     PassWord: "Tibi#20211222"
     MaxOpenConns: 20
     MaxIdleConns: 20
   CallTidb:
     DBName: Call_Accounting
-    Address: 192.168.3.149:4000
+    Address: 127.0.0.1:4001
     UserName: root
     PassWord: Tibi#20211222
     MaxOpenConns: 5
@@ -58,7 +58,7 @@ Mysql:
     MaxIdleConns: 5
   WorkOrder:
     DBName: work_order
-    Address: 192.168.3.14:4000
+    Address: 172.20.45.129:4000
     UserName: root
     PassWord: =PDT49#80Z!RVv52_z
     MaxOpenConns: 5
@@ -81,7 +81,11 @@ Mongo:
     Password:
     Size: 10
   PingAn:
+<<<<<<< HEAD
     MongodbAddr: 192.168.3.206:27002
+=======
+    MongodbAddr: 172.20.45.129:27002
+>>>>>>> master
     UserName: root
     DbName: mixdata
     Password: jy@DevGroup
@@ -112,8 +116,8 @@ TopicName: jy_position_sync
 NsqUrl: 192.168.3.240:4161
 #合力亿捷account_token存储
 RedisAddress:
-  - newother=192.168.3.149:1712
-  - session=192.168.3.149:1713
+  - newother=172.20.45.129:1712
+  - session=172.20.45.129:1713
 #合力亿捷相关调用参数
 Hlyj:
   Appid: w4w2ex0bnt1n61or
@@ -144,7 +148,7 @@ ResourceCenterKey: resource.rpc
 FileCenterRpc:
   Etcd:
     Hosts:
-      - 192.168.3.206:2379
+      - 172.31.31.203:2379
     Key: filecenter.rpc
 ossBucketName: jytest2022
 ossUrl: https://jytest2022.oss-cn-beijing.aliyuncs.com
@@ -171,8 +175,4 @@ productArr:
     productCode: zx
     personArr:
       - name: 张鹏
-        phone: '13027770072'
-
-
-
-
+        phone: '13027770072'

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

@@ -142,7 +142,13 @@ func (s *BiServiceServer) FindClueInfo(ctx context.Context, in *pb.FindClueInfoR
 	return l.FindClueInfo(in)
 }
 
+<<<<<<< HEAD
 func (s *BiServiceServer) MakeEntRelation(ctx context.Context, in *pb.MakeEntRelationReq) (*pb.MakeEntRelationResp, error) {
 	l := logic.NewMakeEntRelationLogic(ctx, s.svcCtx)
 	return l.MakeEntRelation(in)
+=======
+func (s *BiServiceServer) GetClueInfoList(ctx context.Context, in *pb.ClueInfoReq) (*pb.BiReply, error) {
+	l := logic.NewGetClueInfoListLogic(ctx, s.svcCtx)
+	return l.GetClueInfoList(in)
+>>>>>>> master
 }

+ 296 - 0
rpc/pb/biService.pb.go

@@ -2686,16 +2686,31 @@ func (x *FindClueInfoReq) GetPhone() string {
 	return ""
 }
 
+<<<<<<< HEAD
 type MakeEntRelationReq struct {
+=======
+type ClueInfoReq struct {
+>>>>>>> master
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
+<<<<<<< HEAD
 	EntName string `protobuf:"bytes,1,opt,name=entName,proto3" json:"entName,omitempty"`
 }
 
 func (x *MakeEntRelationReq) Reset() {
 	*x = MakeEntRelationReq{}
+=======
+	SearchTxt  string `protobuf:"bytes,1,opt,name=searchTxt,proto3" json:"searchTxt,omitempty"`
+	SearchType string `protobuf:"bytes,2,opt,name=searchType,proto3" json:"searchType,omitempty"` // 0: 线索名称,1: 联系方式,2: 联系人
+	PageSize   int64  `protobuf:"varint,3,opt,name=pageSize,proto3" json:"pageSize,omitempty"`
+	PageNum    int64  `protobuf:"varint,4,opt,name=pageNum,proto3" json:"pageNum,omitempty"`
+}
+
+func (x *ClueInfoReq) Reset() {
+	*x = ClueInfoReq{}
+>>>>>>> master
 	if protoimpl.UnsafeEnabled {
 		mi := &file_biService_proto_msgTypes[38]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2703,6 +2718,7 @@ func (x *MakeEntRelationReq) Reset() {
 	}
 }
 
+<<<<<<< HEAD
 func (x *MakeEntRelationReq) String() string {
 	return protoimpl.X.MessageStringOf(x)
 }
@@ -2710,6 +2726,15 @@ func (x *MakeEntRelationReq) String() string {
 func (*MakeEntRelationReq) ProtoMessage() {}
 
 func (x *MakeEntRelationReq) ProtoReflect() protoreflect.Message {
+=======
+func (x *ClueInfoReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ClueInfoReq) ProtoMessage() {}
+
+func (x *ClueInfoReq) ProtoReflect() protoreflect.Message {
+>>>>>>> master
 	mi := &file_biService_proto_msgTypes[38]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2721,6 +2746,7 @@ func (x *MakeEntRelationReq) ProtoReflect() protoreflect.Message {
 	return mi.MessageOf(x)
 }
 
+<<<<<<< HEAD
 // Deprecated: Use MakeEntRelationReq.ProtoReflect.Descriptor instead.
 func (*MakeEntRelationReq) Descriptor() ([]byte, []int) {
 	return file_biService_proto_rawDescGZIP(), []int{38}
@@ -2729,10 +2755,21 @@ func (*MakeEntRelationReq) Descriptor() ([]byte, []int) {
 func (x *MakeEntRelationReq) GetEntName() string {
 	if x != nil {
 		return x.EntName
+=======
+// Deprecated: Use ClueInfoReq.ProtoReflect.Descriptor instead.
+func (*ClueInfoReq) Descriptor() ([]byte, []int) {
+	return file_biService_proto_rawDescGZIP(), []int{38}
+}
+
+func (x *ClueInfoReq) GetSearchTxt() string {
+	if x != nil {
+		return x.SearchTxt
+>>>>>>> master
 	}
 	return ""
 }
 
+<<<<<<< HEAD
 type MakeEntRelationResp struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -2776,6 +2813,25 @@ func (*MakeEntRelationResp) Descriptor() ([]byte, []int) {
 func (x *MakeEntRelationResp) GetStatus() int64 {
 	if x != nil {
 		return x.Status
+=======
+func (x *ClueInfoReq) GetSearchType() string {
+	if x != nil {
+		return x.SearchType
+	}
+	return ""
+}
+
+func (x *ClueInfoReq) GetPageSize() int64 {
+	if x != nil {
+		return x.PageSize
+	}
+	return 0
+}
+
+func (x *ClueInfoReq) GetPageNum() int64 {
+	if x != nil {
+		return x.PageNum
+>>>>>>> master
 	}
 	return 0
 }
@@ -2958,6 +3014,7 @@ var file_biService_proto_rawDesc = []byte{
 	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79,
 	0x4e, 0x61, 0x6d, 0x65, 0x22, 0x49, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x52,
 	0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20,
+<<<<<<< HEAD
 	0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x63,
 	0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28,
 	0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22,
@@ -3172,6 +3229,221 @@ var file_biService_proto_rawDesc = []byte{
 	0x1a, 0x14, 0x2e, 0x4d, 0x61, 0x6b, 0x65, 0x45, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69,
 	0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06,
 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+=======
+	0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xe3, 0x01, 0x0a, 0x15,
+	0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x65, 0x53, 0x68,
+	0x6f, 0x77, 0x52, 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
+	0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74,
+	0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70,
+	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70,
+	0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x65, 0x49, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x65, 0x49, 0x64, 0x4c, 0x69, 0x73,
+	0x74, 0x12, 0x2a, 0x0a, 0x05, 0x64, 0x61, 0x74, 0x61, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x14, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6c, 0x75,
+	0x65, 0x53, 0x68, 0x6f, 0x77, 0x73, 0x52, 0x05, 0x64, 0x61, 0x74, 0x61, 0x73, 0x12, 0x16, 0x0a,
+	0x06, 0x49, 0x73, 0x54, 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x49,
+	0x73, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2a, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50,
+	0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52,
+	0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49,
+	0x44, 0x22, 0x61, 0x0a, 0x13, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43,
+	0x6c, 0x75, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6f, 0x73, 0x69,
+	0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x6f,
+	0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x64, 0x69, 0x73, 0x74,
+	0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x10, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x43,
+	0x6f, 0x75, 0x6e, 0x74, 0x22, 0x80, 0x02, 0x0a, 0x14, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62,
+	0x75, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x65, 0x53, 0x68, 0x6f, 0x77, 0x73, 0x73, 0x12, 0x1e, 0x0a,
+	0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x22, 0x0a,
+	0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x43, 0x6f, 0x75, 0x6e,
+	0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12,
+	0x1a, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x63,
+	0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74,
+	0x73, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75,
+	0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69,
+	0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x46, 0x75, 0x6c, 0x6c, 0x53,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x46, 0x75, 0x6c,
+	0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x7f, 0x0a, 0x16, 0x44, 0x69, 0x73, 0x74, 0x72,
+	0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x65, 0x53, 0x68, 0x6f, 0x77, 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, 0x29, 0x0a,
+	0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x44, 0x69,
+	0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x65, 0x53, 0x68, 0x6f, 0x77,
+	0x73, 0x73, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa9, 0x01, 0x0a, 0x0d, 0x45, 0x78, 0x70,
+	0x6f, 0x72, 0x74, 0x42, 0x79, 0x44, 0x62, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f,
+	0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
+	0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+	0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+	0x12, 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61,
+	0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61,
+	0x6d, 0x65, 0x12, 0x20, 0x0a, 0x05, 0x64, 0x61, 0x74, 0x61, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x0a, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x64,
+	0x61, 0x74, 0x61, 0x73, 0x22, 0x3b, 0x0a, 0x09, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x44, 0x61, 0x74,
+	0x61, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x68, 0x65, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x65, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+	0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71,
+	0x6c, 0x22, 0xef, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12,
+	0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+	0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a,
+	0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a,
+	0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65,
+	0x6e, 0x74, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49,
+	0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x05, 0x73, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18,
+	0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66,
+	0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66,
+	0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53,
+	0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53,
+	0x69, 0x7a, 0x65, 0x22, 0xdc, 0x02, 0x0a, 0x0d, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e,
+	0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65,
+	0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x50, 0x72, 0x6f, 0x70,
+	0x6f, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f,
+	0x73, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x50,
+	0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68,
+	0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61,
+	0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e,
+	0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x41,
+	0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a,
+	0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x53,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x4f, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x69,
+	0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x54, 0x69,
+	0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x6f,
+	0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a,
+	0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x65,
+	0x70, 0x74, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x44, 0x65, 0x70, 0x74,
+	0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d,
+	0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x45, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72,
+	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x44, 0x61, 0x74,
+	0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x44, 0x61,
+	0x74, 0x61, 0x22, 0x6d, 0x0a, 0x0e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 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, 0x1f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b,
+	0x2e, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74,
+	0x61, 0x22, 0x30, 0x0a, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12,
+	0x22, 0x0a, 0x0c, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x6f, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, 0x63,
+	0x65, 0x4e, 0x6f, 0x22, 0x53, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x52,
+	0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74,
+	0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+	0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x05, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x73, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61,
+	0x74, 0x65, 0x43, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70,
+	0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12,
+	0x1e, 0x0a, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12,
+	0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x22, 0x79, 0x0a,
+	0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71,
+	0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64,
+	0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e,
+	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x18,
+	0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x4e, 0x6f, 0x22, 0x5f, 0x0a, 0x0f, 0x46, 0x69, 0x6e, 0x64,
+	0x43, 0x6c, 0x75, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75,
+	0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65,
+	0x72, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
+	0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x0b, 0x43, 0x6c,
+	0x75, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x61,
+	0x72, 0x63, 0x68, 0x54, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65,
+	0x61, 0x72, 0x63, 0x68, 0x54, 0x78, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63,
+	0x68, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61,
+	0x72, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 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,
+>>>>>>> master
 }
 
 var (
@@ -3186,7 +3458,11 @@ func file_biService_proto_rawDescGZIP() []byte {
 	return file_biService_proto_rawDescData
 }
 
+<<<<<<< HEAD
 var file_biService_proto_msgTypes = make([]protoimpl.MessageInfo, 40)
+=======
+var file_biService_proto_msgTypes = make([]protoimpl.MessageInfo, 39)
+>>>>>>> master
 var file_biService_proto_goTypes = []interface{}{
 	(*MyDataAssetReq)(nil),         // 0: MyDataAssetReq
 	(*MyDataAssetResp)(nil),        // 1: MyDataAssetResp
@@ -3226,8 +3502,12 @@ var file_biService_proto_goTypes = []interface{}{
 	(*CreateCuleReq)(nil),          // 35: CreateCuleReq
 	(*TransferClueReq)(nil),        // 36: TransferClueReq
 	(*FindClueInfoReq)(nil),        // 37: FindClueInfoReq
+<<<<<<< HEAD
 	(*MakeEntRelationReq)(nil),     // 38: MakeEntRelationReq
 	(*MakeEntRelationResp)(nil),    // 39: MakeEntRelationResp
+=======
+	(*ClueInfoReq)(nil),            // 38: ClueInfoReq
+>>>>>>> master
 }
 var file_biService_proto_depIdxs = []int32{
 	2,  // 0: MyDataAssetResp.data:type_name -> MyDataAsset
@@ -3263,7 +3543,11 @@ var file_biService_proto_depIdxs = []int32{
 	35, // 30: BiService.createClueByPhone:input_type -> CreateCuleReq
 	36, // 31: BiService.transferClueByPhone:input_type -> TransferClueReq
 	37, // 32: BiService.findClueInfo:input_type -> FindClueInfoReq
+<<<<<<< HEAD
 	38, // 33: BiService.makeEntRelation:input_type -> MakeEntRelationReq
+=======
+	38, // 33: BiService.getClueInfoList:input_type -> ClueInfoReq
+>>>>>>> master
 	1,  // 34: BiService.myDataAsset:output_type -> MyDataAssetResp
 	4,  // 35: BiService.addProject:output_type -> AddProjectResp
 	6,  // 36: BiService.getInfoId:output_type -> GetInfoIdResp
@@ -3288,7 +3572,11 @@ var file_biService_proto_depIdxs = []int32{
 	10, // 55: BiService.createClueByPhone:output_type -> BiReply
 	10, // 56: BiService.transferClueByPhone:output_type -> BiReply
 	10, // 57: BiService.findClueInfo:output_type -> BiReply
+<<<<<<< HEAD
 	39, // 58: BiService.makeEntRelation:output_type -> MakeEntRelationResp
+=======
+	10, // 58: BiService.getClueInfoList:output_type -> BiReply
+>>>>>>> master
 	34, // [34:59] is the sub-list for method output_type
 	9,  // [9:34] is the sub-list for method input_type
 	9,  // [9:9] is the sub-list for extension type_name
@@ -3759,6 +4047,7 @@ func file_biService_proto_init() {
 			}
 		}
 		file_biService_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
+<<<<<<< HEAD
 			switch v := v.(*MakeEntRelationReq); i {
 			case 0:
 				return &v.state
@@ -3772,6 +4061,9 @@ func file_biService_proto_init() {
 		}
 		file_biService_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*MakeEntRelationResp); i {
+=======
+			switch v := v.(*ClueInfoReq); i {
+>>>>>>> master
 			case 0:
 				return &v.state
 			case 1:
@@ -3789,7 +4081,11 @@ func file_biService_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_biService_proto_rawDesc,
 			NumEnums:      0,
+<<<<<<< HEAD
 			NumMessages:   40,
+=======
+			NumMessages:   39,
+>>>>>>> master
 			NumExtensions: 0,
 			NumServices:   1,
 		},

+ 44 - 0
rpc/pb/biService_grpc.pb.go

@@ -43,7 +43,11 @@ const (
 	BiService_CreateClueByPhone_FullMethodName   = "/BiService/createClueByPhone"
 	BiService_TransferClueByPhone_FullMethodName = "/BiService/transferClueByPhone"
 	BiService_FindClueInfo_FullMethodName        = "/BiService/findClueInfo"
+<<<<<<< HEAD
 	BiService_MakeEntRelation_FullMethodName     = "/BiService/makeEntRelation"
+=======
+	BiService_GetClueInfoList_FullMethodName     = "/BiService/getClueInfoList"
+>>>>>>> master
 )
 
 // BiServiceClient is the client API for BiService service.
@@ -74,7 +78,11 @@ type BiServiceClient interface {
 	CreateClueByPhone(ctx context.Context, in *CreateCuleReq, opts ...grpc.CallOption) (*BiReply, error)
 	TransferClueByPhone(ctx context.Context, in *TransferClueReq, opts ...grpc.CallOption) (*BiReply, error)
 	FindClueInfo(ctx context.Context, in *FindClueInfoReq, opts ...grpc.CallOption) (*BiReply, error)
+<<<<<<< HEAD
 	MakeEntRelation(ctx context.Context, in *MakeEntRelationReq, opts ...grpc.CallOption) (*MakeEntRelationResp, error)
+=======
+	GetClueInfoList(ctx context.Context, in *ClueInfoReq, opts ...grpc.CallOption) (*BiReply, error)
+>>>>>>> master
 }
 
 type biServiceClient struct {
@@ -301,9 +309,15 @@ func (c *biServiceClient) FindClueInfo(ctx context.Context, in *FindClueInfoReq,
 	return out, nil
 }
 
+<<<<<<< HEAD
 func (c *biServiceClient) MakeEntRelation(ctx context.Context, in *MakeEntRelationReq, opts ...grpc.CallOption) (*MakeEntRelationResp, error) {
 	out := new(MakeEntRelationResp)
 	err := c.cc.Invoke(ctx, BiService_MakeEntRelation_FullMethodName, in, out, opts...)
+=======
+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...)
+>>>>>>> master
 	if err != nil {
 		return nil, err
 	}
@@ -338,7 +352,11 @@ type BiServiceServer interface {
 	CreateClueByPhone(context.Context, *CreateCuleReq) (*BiReply, error)
 	TransferClueByPhone(context.Context, *TransferClueReq) (*BiReply, error)
 	FindClueInfo(context.Context, *FindClueInfoReq) (*BiReply, error)
+<<<<<<< HEAD
 	MakeEntRelation(context.Context, *MakeEntRelationReq) (*MakeEntRelationResp, error)
+=======
+	GetClueInfoList(context.Context, *ClueInfoReq) (*BiReply, error)
+>>>>>>> master
 	mustEmbedUnimplementedBiServiceServer()
 }
 
@@ -418,8 +436,13 @@ func (UnimplementedBiServiceServer) TransferClueByPhone(context.Context, *Transf
 func (UnimplementedBiServiceServer) FindClueInfo(context.Context, *FindClueInfoReq) (*BiReply, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method FindClueInfo not implemented")
 }
+<<<<<<< HEAD
 func (UnimplementedBiServiceServer) MakeEntRelation(context.Context, *MakeEntRelationReq) (*MakeEntRelationResp, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method MakeEntRelation not implemented")
+=======
+func (UnimplementedBiServiceServer) GetClueInfoList(context.Context, *ClueInfoReq) (*BiReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetClueInfoList not implemented")
+>>>>>>> master
 }
 func (UnimplementedBiServiceServer) mustEmbedUnimplementedBiServiceServer() {}
 
@@ -866,12 +889,18 @@ func _BiService_FindClueInfo_Handler(srv interface{}, ctx context.Context, dec f
 	return interceptor(ctx, in, info, handler)
 }
 
+<<<<<<< HEAD
 func _BiService_MakeEntRelation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(MakeEntRelationReq)
+=======
+func _BiService_GetClueInfoList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ClueInfoReq)
+>>>>>>> master
 	if err := dec(in); err != nil {
 		return nil, err
 	}
 	if interceptor == nil {
+<<<<<<< HEAD
 		return srv.(BiServiceServer).MakeEntRelation(ctx, in)
 	}
 	info := &grpc.UnaryServerInfo{
@@ -880,6 +909,16 @@ func _BiService_MakeEntRelation_Handler(srv interface{}, ctx context.Context, de
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 		return srv.(BiServiceServer).MakeEntRelation(ctx, req.(*MakeEntRelationReq))
+=======
+		return srv.(BiServiceServer).GetClueInfoList(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: BiService_GetClueInfoList_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BiServiceServer).GetClueInfoList(ctx, req.(*ClueInfoReq))
+>>>>>>> master
 	}
 	return interceptor(ctx, in, info, handler)
 }
@@ -988,8 +1027,13 @@ var BiService_ServiceDesc = grpc.ServiceDesc{
 			Handler:    _BiService_FindClueInfo_Handler,
 		},
 		{
+<<<<<<< HEAD
 			MethodName: "makeEntRelation",
 			Handler:    _BiService_MakeEntRelation_Handler,
+=======
+			MethodName: "getClueInfoList",
+			Handler:    _BiService_GetClueInfoList_Handler,
+>>>>>>> master
 		},
 	},
 	Streams:  []grpc.StreamDesc{},

+ 174 - 0
service/clueInfoList.go

@@ -0,0 +1,174 @@
+package service
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	"bp.jydev.jianyu360.cn/BaseService/biService/entity"
+	"bp.jydev.jianyu360.cn/BaseService/biService/rpc/pb"
+	"fmt"
+	"github.com/gogf/gf/v2/util/gconv"
+	"math"
+)
+
+type ClueInfo struct {
+	Id                  int64  `json:"id"`
+	Uid                 string `json:"uid"`
+	ClueName            string `json:"cluename"`
+	PositionId          int64  `json:"position_id"`
+	SeatNumber          string `json:"seatNumber"`
+	CompanyNature       int    `json:"company_natural"`     // 公司性质  集团/非集团
+	CompanyNatureStr    string `json:"company_natural_str"` // 公司性质  集团/非集团
+	LockStatus          int    `json:"lock_status"`         // 锁定状态
+	LockStatusStr       string `json:"lock_status_str"`
+	LockPerson          string `json:"lock_person"` // 锁定人
+	LockTime            string `json:"lock_time"`   // 锁定时间
+	LockPositionId      int64  `json:"lock_position_id"`
+	Name                string `json:"name"`              // 联系人
+	SalesPeople         string `json:"sales_people"`      // 销售人员
+	IsAssign            int    `json:"is_assign"`         // 线索池
+	IsAssignStr         string `json:"is_assign_str"`     // 线索池
+	CustomerDemand      string `json:"customer_demand"`   // 客户需求
+	IntendedProducts    string `json:"intended_products"` // 意向产品
+	CustomerBudget      int64  `json:"customer_budget"`   // 客户预算
+	Content             string `json:"content"`           // 最近跟进内容
+	TrailTime           string `json:"trail_time"`        // 最近跟进时间
+	StartTrailTime      string `json:"start_trail_time"`  // 开始跟进时间
+	ClueStatus          string `json:"clue_status"`       // 线索状态
+	IsTransfer          int    `json:"is_transfer"`
+	CompanyVerification int    `json:"company_verification"`
+	//客成
+	SucManager string `json:"suc_manager"` // 客成经理
+	// 企业
+	LegalPerson string `json:"legal_person"` // 法人
+
+	ClueOwn string `json:"clue_own"` // 线索归属
+
+}
+
+func CheckingList(in *pb.ClueInfoReq) *pb.BiReply {
+	sql0 := `SELECT a1.*, a3.name as customer, a4.name as trailstatus_name, a5.name as sales_people FROM dwd_f_crm_clue_info a1 LEFT JOIN dwd_f_csm_customer_info a3 ON a1.id = a3.clue_id 
+    	LEFT JOIN dwd_d_crm_trailstatus_code a4 ON a1.trailstatus = a4.code
+	    LEFT JOIN dwd_d_crm_department_level_succbi a5 ON a1.position_id = a5.position_id 
+	    WHERE a1.cluename LIKE '%%%s%%' ORDER BY a1.lock_status ASC, a1.trail_time DESC, a1.id ASC limit ? offset ?`
+	cq0 := `SELECT COUNT(1) FROM dwd_f_crm_clue_info a1 WHERE a1.cluename LIKE '%%%s%%'`
+
+	sql1 := `SELECT a1.*, a3.name as customer, a4.name as trailstatus_name, a5.name as sales_people FROM dwd_f_crm_clue_info a1 LEFT JOIN dwd_f_csm_customer_info a3 ON a1.id = a3.clue_id 
+    	LEFT JOIN dwd_d_crm_trailstatus_code a4 ON a1.trailstatus = a4.code 
+	    LEFT JOIN dwd_d_crm_department_level_succbi a5 ON a1.position_id = a5.position_id 
+		WHERE a1.name = '%s' ORDER BY a1.lock_status ASC, a1.trail_time DESC, a1.id ASC limit ? offset ?`
+	cq1 := `SELECT COUNT(1) FROM dwd_f_crm_clue_info a1 WHERE a1.name = '%s'`
+
+	sql2 := `SELECT a1.*, a3.name as customer, a4.name as trailstatus_name, a5.name as sales_people FROM dwd_f_crm_clue_info a1 LEFT JOIN dwd_f_csm_customer_info a3 ON a1.id = a3.clue_id 
+    	LEFT JOIN dwd_d_crm_trailstatus_code a4 ON a1.trailstatus = a4.code
+	    LEFT JOIN dwd_d_crm_department_level_succbi a5 ON a1.position_id = a5.position_id 
+		WHERE a1.phone = '%s' ORDER BY a1.lock_status ASC, a1.trail_time DESC, a1.id ASC limit ? offset ?`
+	cq2 := `SELECT COUNT(1) FROM dwd_f_crm_clue_info a1 WHERE a1.phone = '%s'`
+
+	sql, cq := "", ""
+	if in.SearchType == "0" {
+		sql = sql0
+		cq = cq0
+	} else if in.SearchType == "1" {
+		sql = sql1
+		cq = cq1
+	} else if in.SearchType == "2" {
+		sql = sql2
+		cq = cq2
+	}
+
+	if in.PageSize == 0 {
+		in.PageSize = 10
+	}
+	rows := entity.JyBiTidb.Query(fmt.Sprintf(sql, in.SearchTxt), in.PageSize, (in.PageNum-1)*in.PageSize)
+	var resultList []*ClueInfo
+	for _, m := range *rows {
+		resultList = append(resultList, getClueInfo(m))
+	}
+	count := entity.JyBiTidb.CountBySql(fmt.Sprintf(cq, in.SearchTxt))
+	totalPage := int64(math.Ceil(float64(count) / float64(in.PageSize)))
+	result := map[string]interface{}{
+		"list":  resultList,
+		"count": count,
+	}
+	if totalPage > in.PageNum {
+		result["hasNextPage"] = true
+	} else {
+		result["hasNextPage"] = false
+	}
+	return &pb.BiReply{
+		Data: gconv.Bytes(result),
+	}
+}
+
+func getClueInfo(tmp map[string]interface{}) *ClueInfo {
+	clueInfo := &ClueInfo{
+		Id:                  common.Int64All(tmp["id"]),
+		Uid:                 common.ObjToString(tmp["uid"]),
+		ClueName:            common.ObjToString(tmp["cluename"]),
+		SeatNumber:          common.ObjToString(tmp["seatNumber"]),
+		PositionId:          common.Int64All(tmp["position_id"]),
+		CompanyNature:       common.IntAll(tmp["company_nature"]),
+		CompanyNatureStr:    common.ObjToString(common.If(common.IntAll(tmp["company_nature"]) == 0, "非集团公司", "集团公司")),
+		LockStatus:          common.IntAll(tmp["lock_status"]),
+		LockTime:            common.ObjToString(tmp["lock_time"]),
+		LockPositionId:      common.Int64All(tmp["lock_position_id"]),
+		Name:                common.ObjToString(tmp["name"]),
+		IsAssign:            common.IntAll(tmp["is_assign"]),
+		CustomerDemand:      common.ObjToString(tmp["customer_demand"]),
+		IntendedProducts:    common.ObjToString(tmp["intended_products"]),
+		CustomerBudget:      common.Int64All(tmp["customer_budget"]),
+		Content:             common.ObjToString(tmp["content"]),
+		TrailTime:           common.ObjToString(tmp["trail_time"]),
+		SalesPeople:         common.ObjToString(tmp["sales_people"]),
+		SucManager:          common.ObjToString(common.If(common.ObjToString(tmp["customer"]) != "", common.ObjToString(tmp["customer"]), "/")),
+		ClueStatus:          common.ObjToString(tmp["trailstatus_name"]),
+		IsTransfer:          common.IntAll(tmp["is_transfer"]),
+		CompanyVerification: common.IntAll(tmp["company_verification"]),
+	}
+	switch clueInfo.IsAssign {
+	case 0:
+		clueInfo.IsAssignStr = "公海"
+	case 1:
+		clueInfo.IsAssignStr = "私海"
+	case -1:
+		clueInfo.IsAssignStr = "退出公海"
+	case -2:
+		clueInfo.IsAssignStr = "域外"
+	case -3:
+		clueInfo.IsAssignStr = "冻结池"
+	case -4:
+		clueInfo.IsAssignStr = "内部员工"
+	case -5:
+		clueInfo.IsAssignStr = "存在大会员子账号权益,临时处理"
+	case -6:
+		clueInfo.IsAssignStr = "特殊原因,不允许销售进行跟进"
+	}
+	switch clueInfo.LockStatus {
+	case 1:
+		clueInfo.LockStatusStr = "已锁定"
+	case 2:
+		clueInfo.LockStatusStr = "未锁定"
+	case 3:
+		clueInfo.LockStatusStr = "无需锁定"
+	}
+	clueInfo.LockPerson, _ = getSeatNumber(common.Int64All(tmp["lock_position_id"]))
+	if common.IntAll(tmp["company_verification"]) == 1 {
+		ent, b := entity.MgoQyxy.FindOneByField("qyxy_std", map[string]interface{}{"company_name": clueInfo.ClueName},
+			map[string]interface{}{"legal_person": 1})
+		if b && len(*ent) > 0 {
+			clueInfo.LegalPerson = common.ObjToString((*ent)["legal_person"])
+		}
+	}
+	if common.IntAll(tmp["is_transfer"]) == 1 {
+		clueInfo.ClueOwn = "客户成功组"
+	} else if clueInfo.IsAssign == 0 && clueInfo.PositionId == 0 {
+		clueInfo.ClueOwn = "销售一部、三部"
+	} else if clueInfo.IsAssign == -4 && clueInfo.PositionId == 0 {
+		clueInfo.ClueOwn = "/"
+	} else if clueInfo.PositionId != 0 {
+		info := entity.JyBiTidb.FindOne("dwd_d_crm_department_level_succbi", map[string]interface{}{"position_id": clueInfo.PositionId}, "dept_name", "")
+		if info != nil && len(*info) > 0 {
+			clueInfo.ClueOwn = common.ObjToString((*info)["dept_name"])
+		}
+	}
+	return clueInfo
+}