lianbingjie 2 anni fa
parent
commit
6d31a99394

+ 33 - 1
jyBXSubscribe/api/bxsubscribe.api

@@ -26,6 +26,9 @@ type (
 		Subtype    string `json:"subtype,optional"`
 		Price      string `json:"price,optional"`
 		FileExists string `json:"fileExists,optional"`
+		Source     string `json:"source,optional"`                                        //信息来源
+		IsRead     string `json:"isRead,optional"`                                        //是否已读
+		Staffs     string `json:"staffs,optional"`                                        //分发的员工
 		UserType   string `path:"userType,default=fType,options=fType|vType|mType|eType"` //fType:普通用户;vType:超级订阅用户;mType:大会员用户;eType:商机管理用户;
 		NewUserId  int64  `header:"newUserId"`
 		IsEnt      bool   `json:"isEnt,optional"`
@@ -86,6 +89,29 @@ type (
 		PowerSource int64  `form:"powerSource,optional"`
 		UserPower   int64  `form:"userPower,optional"`
 	}
+	DistributorReq {
+		AppId     string `header:"appId"`
+		EntId     string `header:"entId,optional"`
+		EntUserId string `header:"entUserId,optional"`
+		UserType  string `path:"userType,optional"`
+		Region    string `json:"region,optional"`
+		SelectIds string `json:"selectIds,optional"`
+		QueryType string `json:"queryType,optional"`
+	}
+	viewStatusReq {
+		AppId     string `header:"appId"`
+		EntId     string `header:"entId,optional"`
+		EntUserId string `header:"entUserId,optional"`
+		UserType  string `path:"userType,optional"`
+		InfoId    string `json:"infoId,optional"`
+	}
+	msgDistributor {
+		AppId     string `header:"appId"`
+		EntId     string `header:"entId,optional"`
+		EntUserId string `header:"entUserId,optional"`
+		MessageId string `json:"messageId"`
+		Staffs    string `json:"staffs"`
+	}
 )
 service bxsubscribe-api {
 	@handler subscribeList
@@ -100,4 +126,10 @@ service bxsubscribe-api {
 	post /jybx/subscribe/:userType/setRead(SetReadReq) returns (commonResp)
 	@handler getKey
 	post /jybx/subscribe/:userType/getKey(GetKeyReq) returns (commonResp)
-}
+	@handler distributor
+	post /jybx/subscribe/:userType/distributor(DistributorReq) returns (commonResp)
+	@handler viewStatus
+	post /jybx/subscribe/:userType/viewStatus(viewStatusReq) returns (commonResp)
+	@handler msgDistributor
+	post /jybx/subscribe/msgDistributor(msgDistributor) returns (commonResp)
+}

+ 28 - 0
jyBXSubscribe/api/internal/handler/distributorhandler.go

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

+ 28 - 0
jyBXSubscribe/api/internal/handler/msgDistributorHandler.go

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

+ 15 - 0
jyBXSubscribe/api/internal/handler/routes.go

@@ -42,6 +42,21 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 				Path:    "/jybx/subscribe/:userType/getKey",
 				Handler: getKeyHandler(serverCtx),
 			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jybx/subscribe/:userType/distributor",
+				Handler: distributorHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jybx/subscribe/:userType/viewStatus",
+				Handler: viewStatusHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jybx/subscribe/msgDistributor",
+				Handler: msgDistributorHandler(serverCtx),
+			},
 		},
 	)
 }

+ 28 - 0
jyBXSubscribe/api/internal/handler/viewStatusHandler.go

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

+ 3 - 0
jyBXSubscribe/api/internal/logic/byPushHistoryLogic.go

@@ -38,6 +38,9 @@ func (l *ByPushHistoryLogic) ByPushHistory(req *types.SubscribeReq) (resp *types
 		UserType:   req.UserType,
 		Price:      req.Price,
 		FileExists: req.FileExists,
+		IsRead:     req.IsRead,
+		Source:     req.Source,
+		Staffs:     req.Staffs,
 		UserId:     req.UserId,
 		EntId:      req.EntId,
 		EntUserId:  req.EntUserId,

+ 57 - 0
jyBXSubscribe/api/internal/logic/distributorlogic.go

@@ -0,0 +1,57 @@
+package logic
+
+import (
+	"context"
+	"jyBXSubscribe/rpc/type/bxsubscribe"
+
+	"jyBXSubscribe/api/internal/svc"
+	"jyBXSubscribe/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type DistributorLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewDistributorLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DistributorLogic {
+	return &DistributorLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *DistributorLogic) Distributor(req *types.DistributorReq) (resp *types.CommonResp, err error) {
+	// todo: add your logic here and delete this line
+	res, err := l.svcCtx.Suscribe.GetDistributor(l.ctx, &bxsubscribe.GetDistributorReq{
+		AppId:     req.AppId,
+		EntId:     req.EntId,
+		EntUserId: req.EntUserId,
+		Region:    req.Region,
+		QueryType: req.QueryType,
+	})
+	if err != nil {
+		return &types.CommonResp{
+			Err_code: res.ErrCode,
+			Err_msg:  res.ErrMsg,
+			Data:     nil,
+		}, nil
+	}
+	var data []map[string]interface{}
+	for _, v := range res.Items {
+		_d := make(map[string]interface{})
+		_d["name"] = v.Name
+		_d["id"] = v.Id
+		_d["phone"] = v.Phone
+		data = append(data, _d)
+	}
+	return &types.CommonResp{
+		Err_code: res.ErrCode,
+		Err_msg:  res.ErrMsg,
+		Data:     data,
+	}, nil
+	return
+}

+ 40 - 0
jyBXSubscribe/api/internal/logic/msgDistributorLogic.go

@@ -0,0 +1,40 @@
+package logic
+
+import (
+	"context"
+	"jyBXSubscribe/rpc/type/bxsubscribe"
+
+	"jyBXSubscribe/api/internal/svc"
+	"jyBXSubscribe/api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type MsgDistributorLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewMsgDistributorLogic(ctx context.Context, svcCtx *svc.ServiceContext) *MsgDistributorLogic {
+	return &MsgDistributorLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *MsgDistributorLogic) MsgDistributor(req *types.MsgDistributor) (resp *types.CommonResp, err error) {
+	res, err := l.svcCtx.Suscribe.MsgDistributor(l.ctx, &bxsubscribe.MsgDistributorReq{
+		AppId:     req.AppId,
+		EntId:     req.EntId,
+		EntUserId: req.EntUserId,
+		MessageId: req.MessageId,
+		Staffs:    req.Staffs,
+	})
+	return &types.CommonResp{
+		Err_code: res.ErrorCode,
+		Err_msg:  res.ErrorMsg,
+		Data:     res.Status,
+	}, err
+}

+ 3 - 0
jyBXSubscribe/api/internal/logic/subscribeListLogic.go

@@ -40,6 +40,9 @@ func (l *SubscribeListLogic) SubscribeList(req *types.SubscribeReq) (resp *types
 		UserType:   req.UserType,
 		Price:      req.Price,
 		FileExists: req.FileExists,
+		IsRead:     req.IsRead,
+		Source:     req.Source,
+		Staffs:     req.Staffs,
 		UserId:     req.UserId,
 		EntId:      req.EntId,
 		EntUserId:  req.EntUserId,

+ 57 - 0
jyBXSubscribe/api/internal/logic/viewStatusLogic.go

@@ -0,0 +1,57 @@
+package logic
+
+import (
+	"context"
+	"jyBXSubscribe/api/internal/svc"
+	"jyBXSubscribe/api/internal/types"
+	"jyBXSubscribe/rpc/type/bxsubscribe"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type ViewStatusLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewViewStatusLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ViewStatusLogic {
+	return &ViewStatusLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *ViewStatusLogic) ViewStatus(req *types.ViewStatusReq) (resp *types.CommonResp, err error) {
+	// todo: add your logic here and delete this line
+	res, err := l.svcCtx.Suscribe.GetViewStatus(l.ctx, &bxsubscribe.GetViewStatusReq{
+		AppId:     req.AppId,
+		EntId:     req.EntId,
+		EntUserId: req.EntUserId,
+		InfoId:    req.InfoId,
+	})
+	if err != nil {
+		return &types.CommonResp{
+			Err_code: res.ErrCode,
+			Err_msg:  res.ErrMsg,
+			Data:     nil,
+		}, nil
+	}
+	var data []map[string]interface{}
+	for _, v := range res.Items {
+		_d := make(map[string]interface{})
+		_d["name"] = v.Name
+		_d["id"] = v.Id
+		_d["visittime"] = v.Visittime
+		_d["isvisit"] = v.Isvisit
+		_d["date"] = v.Date
+		data = append(data, _d)
+	}
+	return &types.CommonResp{
+		Err_code: res.ErrCode,
+		Err_msg:  res.ErrMsg,
+		Data:     data,
+	}, nil
+	return
+}

+ 29 - 0
jyBXSubscribe/api/internal/types/types.go

@@ -18,6 +18,9 @@ type SubscribeReq struct {
 	Subtype    string `json:"subtype,optional"`
 	Price      string `json:"price,optional"`
 	FileExists string `json:"fileExists,optional"`
+	Source     string `json:"source,optional"`                                        //信息来源
+	IsRead     string `json:"isRead,optional"`                                        //是否已读
+	Staffs     string `json:"staffs,optional"`                                        //分发的员工
 	UserType   string `path:"userType,default=fType,options=fType|vType|mType|eType"` //fType:普通用户;vType:超级订阅用户;mType:大会员用户;eType:商机管理用户;
 	NewUserId  int64  `header:"newUserId"`
 	IsEnt      bool   `json:"isEnt,optional"`
@@ -80,3 +83,29 @@ type GetKeyReq struct {
 	PowerSource int64  `form:"powerSource,optional"`
 	UserPower   int64  `form:"userPower,optional"`
 }
+
+type DistributorReq struct {
+	AppId     string `header:"appId"`
+	EntId     string `header:"entId,optional"`
+	EntUserId string `header:"entUserId,optional"`
+	UserType  string `path:"userType,optional"`
+	Region    string `json:"region,optional"`
+	SelectIds string `json:"selectIds,optional"`
+	QueryType string `json:"queryType,optional"`
+}
+
+type ViewStatusReq struct {
+	AppId     string `header:"appId"`
+	EntId     string `header:"entId,optional"`
+	EntUserId string `header:"entUserId,optional"`
+	UserType  string `path:"userType,optional"`
+	InfoId    string `json:"infoId,optional"`
+}
+
+type MsgDistributor struct {
+	AppId     string `header:"appId"`
+	EntId     string `header:"entId,optional"`
+	EntUserId string `header:"entUserId,optional"`
+	MessageId string `json:"messageId"`
+	Staffs    string `json:"staffs"`
+}

+ 63 - 5
jyBXSubscribe/rpc/bxsubscribe.proto

@@ -19,11 +19,14 @@ message SubscribeInfosReq {
   string  appId = 13;
   string  price = 14;
   string  fileExists = 15;
-  string  entUserId = 16;
-  string deptId = 17;
-  int64 newUserId = 18;
-  bool IsEnt = 19;
-  string SelectIds = 20;
+  string  isRead = 16; //是否已读
+  string  staffs = 17;//分发人员
+  string  source = 18; //信息来源
+  string  entUserId = 19;
+  string  deptId = 20;
+  int64 newUserId = 21;
+  bool IsEnt = 22;
+  string SelectIds = 23;
 }
 
 message SubscribeInfosResp {
@@ -185,12 +188,61 @@ message GetKeyReq{
   int64   userPower = 12;
   string  deptId = 13;
 }
+
+message GetDistributorReq{
+  string  appId = 1;
+  string  entId = 2;
+  string  entUserId = 3;
+  string  region = 4;
+  string  selectIds = 5;
+  string  queryType = 6;
+}
+
+message MsgDistributorReq{
+  string  appId = 1;
+  string  entId = 2;
+  string  entUserId = 3;
+  string  messageId = 4;//分发信息
+  string  staffs = 5; //分发的员工
+}
+
 message KeyResp {
   int64 err_code = 1;
   string err_msg = 2;
   repeated KeyItems items = 3;//关键词
 }
 
+message DistributorResp {
+  int64 err_code = 1;
+  string err_msg = 2;
+  repeated userResp items = 3;//分发人员
+}
+
+message userResp {
+  string name = 1;
+  int64 id = 2;
+  string phone = 3;
+}
+
+message GetViewStatusReq{
+  string  appId = 1;
+  string  entId = 2;
+  string  entUserId = 3;
+  string  infoId = 4;
+}
+
+message ViewStatusResp {
+  int64 err_code = 1;
+  string err_msg = 2;
+  repeated UserStatus items = 3;//分发人员
+}
+message UserStatus {
+  string name = 1;
+  int64 id = 2;
+  int64 isvisit = 3;
+  string visittime = 4;
+  string date = 5;
+}
 
 
 service Bxsubscribe {
@@ -206,4 +258,10 @@ service Bxsubscribe {
   rpc SetRead(SetReadReq)returns(StatusResp);
   //关键词获取
   rpc GetKey(GetKeyReq)returns(KeyResp);
+  //信息分发
+  rpc MsgDistributor(MsgDistributorReq)returns(StatusResp);
+  //手动分发人员查询
+  rpc GetDistributor(GetDistributorReq)returns(DistributorResp);
+  //查看状态
+  rpc GetViewStatus(GetViewStatusReq)returns(ViewStatusResp);
 }

+ 31 - 0
jyBXSubscribe/rpc/bxsubscribe/bxsubscribe.go

@@ -15,12 +15,16 @@ import (
 type (
 	ByPushHistoryResp      = bxsubscribe.ByPushHistoryResp
 	CityList               = bxsubscribe.CityList
+	DistributorResp        = bxsubscribe.DistributorResp
+	GetDistributorReq      = bxsubscribe.GetDistributorReq
 	GetKeyReq              = bxsubscribe.GetKeyReq
+	GetViewStatusReq       = bxsubscribe.GetViewStatusReq
 	Items                  = bxsubscribe.Items
 	Key                    = bxsubscribe.Key
 	KeyItems               = bxsubscribe.KeyItems
 	KeyResp                = bxsubscribe.KeyResp
 	Keys                   = bxsubscribe.Keys
+	MsgDistributorReq      = bxsubscribe.MsgDistributorReq
 	SetReadReq             = bxsubscribe.SetReadReq
 	SomeInfo               = bxsubscribe.SomeInfo
 	SomeInfoReq            = bxsubscribe.SomeInfoReq
@@ -31,6 +35,9 @@ type (
 	SubscribeInfosReq      = bxsubscribe.SubscribeInfosReq
 	SubscribeInfosResp     = bxsubscribe.SubscribeInfosResp
 	UpdateSubScribeInfoReq = bxsubscribe.UpdateSubScribeInfoReq
+	UserResp               = bxsubscribe.UserResp
+	UserStatus             = bxsubscribe.UserStatus
+	ViewStatusResp         = bxsubscribe.ViewStatusResp
 
 	Bxsubscribe interface {
 		// 获取订阅推送列表
@@ -45,6 +52,12 @@ type (
 		SetRead(ctx context.Context, in *SetReadReq, opts ...grpc.CallOption) (*StatusResp, error)
 		// 关键词获取
 		GetKey(ctx context.Context, in *GetKeyReq, opts ...grpc.CallOption) (*KeyResp, error)
+		// 信息分发
+		MsgDistributor(ctx context.Context, in *MsgDistributorReq, opts ...grpc.CallOption) (*StatusResp, error)
+		// 手动分发人员查询
+		GetDistributor(ctx context.Context, in *GetDistributorReq, opts ...grpc.CallOption) (*DistributorResp, error)
+		// 查看状态
+		GetViewStatus(ctx context.Context, in *GetViewStatusReq, opts ...grpc.CallOption) (*ViewStatusResp, error)
 	}
 
 	defaultBxsubscribe struct {
@@ -93,3 +106,21 @@ func (m *defaultBxsubscribe) GetKey(ctx context.Context, in *GetKeyReq, opts ...
 	client := bxsubscribe.NewBxsubscribeClient(m.cli.Conn())
 	return client.GetKey(ctx, in, opts...)
 }
+
+// 信息分发
+func (m *defaultBxsubscribe) MsgDistributor(ctx context.Context, in *MsgDistributorReq, opts ...grpc.CallOption) (*StatusResp, error) {
+	client := bxsubscribe.NewBxsubscribeClient(m.cli.Conn())
+	return client.MsgDistributor(ctx, in, opts...)
+}
+
+// 手动分发人员查询
+func (m *defaultBxsubscribe) GetDistributor(ctx context.Context, in *GetDistributorReq, opts ...grpc.CallOption) (*DistributorResp, error) {
+	client := bxsubscribe.NewBxsubscribeClient(m.cli.Conn())
+	return client.GetDistributor(ctx, in, opts...)
+}
+
+// 查看状态
+func (m *defaultBxsubscribe) GetViewStatus(ctx context.Context, in *GetViewStatusReq, opts ...grpc.CallOption) (*ViewStatusResp, error) {
+	client := bxsubscribe.NewBxsubscribeClient(m.cli.Conn())
+	return client.GetViewStatus(ctx, in, opts...)
+}

+ 10 - 0
jyBXSubscribe/rpc/internal/logic/bypushhistorylogic.go

@@ -31,6 +31,13 @@ func NewByPushHistoryLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ByP
 func (l *ByPushHistoryLogic) ByPushHistory(in *bxsubscribe.SubscribeInfosReq) (*bxsubscribe.ByPushHistoryResp, error) {
 	// todo: add your logic here and delete this line
 	vipType := in.UserType
+	//分发员工
+	var staffIds []string
+	for _, staffId := range strings.Split(in.Staffs, ",") {
+		if staffId != "" {
+			staffIds = append(staffIds, staffId)
+		}
+	}
 	spqp := &model.SubPushQueryParam{
 		Mgo_bidding:      IC.MgoBidding,                      //mongo
 		Bidding:          IC.DB.Mongo.Bidding.Collection,     //招标信息 表
@@ -51,6 +58,9 @@ func (l *ByPushHistoryLogic) ByPushHistory(in *bxsubscribe.SubscribeInfosReq) (*
 		EntId:            in.EntId,      //商机管理企业id
 		EntUserId:        in.EntUserId,  //商机管理用户id
 		DeptId:           in.DeptId,     //商机管理部门id
+		IsRead:           in.IsRead,
+		Source:           in.Source,
+		Staffs:           staffIds,
 		NewUserId:        in.NewUserId,
 		BaseServiceMysql: IC.BaseServiceMysql,
 		IsEnt:            in.IsEnt,

+ 55 - 0
jyBXSubscribe/rpc/internal/logic/getdistributorlogic.go

@@ -0,0 +1,55 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	"context"
+	"jyBXSubscribe/rpc/model"
+	"log"
+	"strings"
+
+	"jyBXSubscribe/rpc/internal/svc"
+	"jyBXSubscribe/rpc/type/bxsubscribe"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type GetDistributorLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewGetDistributorLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetDistributorLogic {
+	return &GetDistributorLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 手动分发人员
+func (l *GetDistributorLogic) GetDistributor(in *bxsubscribe.GetDistributorReq) (*bxsubscribe.DistributorResp, error) {
+	// todo: add your logic here and delete this line
+	da := new(bxsubscribe.DistributorResp)
+	var (
+		users []*model.User
+	)
+	log.Printf("分发人员参数entuserid:%s;entid:%s;region:%s;QueryType:%s", in.EntUserId, in.EntId, in.Region, in.QueryType)
+	//搜索分发人员
+	if in.QueryType == "1" {
+		users = model.AllDistributor(common.IntAll(in.EntId), common.IntAll(in.EntUserId))
+	} else {
+		//手动分发人员
+		users = model.Distributor(strings.Split(in.Region, ","), common.IntAll(in.EntId), common.IntAll(in.EntUserId))
+	}
+	if len(users) > 0 {
+		for _, v := range users {
+			var data bxsubscribe.UserResp
+			data.Id = common.Int64All(v.Id)
+			data.Name = v.Name
+			data.Phone = v.Phone
+			da.Items = append(da.Items, &data)
+		}
+	}
+	return da, nil
+}

+ 14 - 3
jyBXSubscribe/rpc/internal/logic/getsublistlogic.go

@@ -7,6 +7,7 @@ import (
 	"jyBXSubscribe/rpc/model"
 	"jyBXSubscribe/rpc/type/bxsubscribe"
 	"jyBXSubscribe/rpc/util"
+	"strings"
 	"time"
 
 	"app.yhyue.com/moapp/jybase/common"
@@ -46,6 +47,13 @@ func (l *GetSubListLogic) GetSubList(in *bxsubscribe.SubscribeInfosReq) (*bxsubs
 	if in.UserType != "fType" && userInfo.IsPayedUser() {
 		isPayUser = true
 	}
+	//分发员工
+	var staffIds []string
+	for _, staffId := range strings.Split(in.Staffs, ",") {
+		if staffId != "" {
+			staffIds = append(staffIds, staffId)
+		}
+	}
 	spqp := &model.SubPushQueryParam{
 		Mgo_bidding:      IC.MgoBidding,                      //mongo
 		Bidding:          IC.DB.Mongo.Bidding.Collection,     //招标信息 表
@@ -62,9 +70,12 @@ func (l *GetSubListLogic) GetSubList(in *bxsubscribe.SubscribeInfosReq) (*bxsubs
 		Key:              in.KeyWords,                        //关键词
 		Price:            in.Price,                           //价格区间
 		FileExists:       in.FileExists,                      //是否有附件
-		EntId:            in.EntId,                           //商机管理企业id
-		EntUserId:        in.EntUserId,                       //商机管理用户id
-		DeptId:           in.DeptId,                          //商机管理部门id
+		IsRead:           in.IsRead,
+		Source:           in.Source,
+		Staffs:           staffIds,
+		EntId:            in.EntId,     //商机管理企业id
+		EntUserId:        in.EntUserId, //商机管理用户id
+		DeptId:           in.DeptId,    //商机管理部门id
 		NewUserId:        in.NewUserId,
 		BaseServiceMysql: IC.BaseServiceMysql,
 		IsEnt:            in.IsEnt,

+ 106 - 0
jyBXSubscribe/rpc/internal/logic/getviewstatuslogic.go

@@ -0,0 +1,106 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	"context"
+	"fmt"
+	IC "jyBXSubscribe/rpc/init"
+	"jyBXSubscribe/rpc/model"
+	"jyBXSubscribe/rpc/util"
+	"log"
+	"strings"
+	"time"
+
+	"jyBXSubscribe/rpc/internal/svc"
+	"jyBXSubscribe/rpc/type/bxsubscribe"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type GetViewStatusLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewGetViewStatusLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetViewStatusLogic {
+	return &GetViewStatusLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 查看状态
+func (l *GetViewStatusLogic) GetViewStatus(in *bxsubscribe.GetViewStatusReq) (*bxsubscribe.ViewStatusResp, error) {
+	// todo: add your logic here and delete this line
+	user := model.EntInfo(common.IntAll(in.EntId), common.IntAll(in.EntUserId))
+	var (
+		users  *[]*model.User
+		ss     []string
+		finsql string
+	)
+	in.InfoId = util.DecodeId(in.InfoId)
+	log.Println("查看状态参数", in)
+	res := new(bxsubscribe.ViewStatusResp)
+	finsql = `SELECT userid,isvisit,visittime,date FROM pushentniche where  infoid =? and source in (2,3) order By date asc`
+	if user.Role_admin_department {
+		users = model.GetDisUsers(common.IntAll(in.EntId), user.Dept.Id)
+		if users != nil && len(*users) > 0 {
+			//获取所有部门和子部门员工
+			for _, v := range *users {
+				ss = append(ss, common.InterfaceToStr(v.Id))
+			}
+		} else {
+			log.Println("部门管理员下为获取到员工", in.EntUserId)
+			return &bxsubscribe.ViewStatusResp{}, nil
+		}
+	} else if user.Role_admin_system {
+		//获取企业所有用户
+		users = model.GetEntUsers(common.IntAll(in.EntId))
+	}
+	if len(ss) > 0 {
+		finsql = fmt.Sprintf(`SELECT userid,isvisit,visittime,date FROM pushentniche where  infoid =? and source in (2,3) %s order By date asc`, fmt.Sprintf(`and userid in (%s)`, strings.Join(ss, ",")))
+	}
+	data := IC.BaseServiceMysql.SelectBySql(finsql, in.InfoId)
+	userMap := make(map[int]string)
+	for _, u := range *users {
+		userMap[u.Id] = u.Name
+	}
+	if data != nil && len(*data) > 0 {
+		//d := make(map[string]int)
+		for _, v := range *data {
+			userid := common.IntAll(v["userid"])
+			if name, ok := userMap[userid]; ok && name != "" {
+				var da bxsubscribe.UserStatus
+				da.Name = name
+				da.Isvisit = common.Int64All(v["isvisit"])
+				visittime := common.InterfaceToStr(v["visittime"])
+				date := common.Int64All(v["date"])
+				if date > 0 {
+					da.Date = time.Unix(date, 0).Format("2006-01-02 15:04:05")
+				}
+				da.Visittime = visittime
+				da.Id = common.Int64All(userid)
+				res.Items = append(res.Items, &da)
+				//if _, ok1 := d[common.InterfaceToStr(userid)]; !ok1 {
+				//	res.Items = append(res.Items, &da)
+				//	d[common.InterfaceToStr(userid)] = len(res.Items) - 1
+				//}
+			}
+		}
+	}
+	//Reverse(&res.Items)
+	return res, nil
+}
+
+// 数组倒序函数
+func Reverse(arr *[]*bxsubscribe.UserStatus) {
+	var temp *bxsubscribe.UserStatus
+	length := len(*arr)
+	for i := 0; i < length/2; i++ {
+		temp = (*arr)[i]
+		(*arr)[i] = (*arr)[length-1-i]
+		(*arr)[length-1-i] = temp
+	}
+}

+ 123 - 0
jyBXSubscribe/rpc/internal/logic/msgdistributorlogic.go

@@ -0,0 +1,123 @@
+package logic
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/redis"
+	"context"
+	"database/sql"
+	"fmt"
+	IC "jyBXSubscribe/rpc/init"
+	"jyBXSubscribe/rpc/model"
+	"strings"
+	"time"
+
+	"jyBXSubscribe/rpc/internal/svc"
+	"jyBXSubscribe/rpc/type/bxsubscribe"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type MsgDistributorLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewMsgDistributorLogic(ctx context.Context, svcCtx *svc.ServiceContext) *MsgDistributorLogic {
+	return &MsgDistributorLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 信息分发
+func (l *MsgDistributorLogic) MsgDistributor(in *bxsubscribe.MsgDistributorReq) (*bxsubscribe.StatusResp, error) {
+	userEnt := model.EntInfo(common.IntAll(in.EntId), common.IntAll(in.EntUserId))
+	if !(userEnt.Role_admin_system || userEnt.Role_admin_department) {
+		return &bxsubscribe.StatusResp{ErrorCode: -1, ErrorMsg: "无权限"}, nil
+	}
+	//根据信息查询区域列表
+	var regin, pushIds, staffs []string
+	staffs = strings.Split(in.Staffs, ",")
+	var pushCas []*model.PushCa
+	for _, id := range strings.Split(in.MessageId, ",") {
+		if id != "" {
+			pushIds = append(pushIds, id)
+		}
+	}
+	if len(pushIds) == 0 || in.Staffs == "" {
+		return &bxsubscribe.StatusResp{ErrorCode: -1, ErrorMsg: "缺少参数"}, nil
+	}
+	//获取分发信息的地区
+	infoRes := IC.BaseServiceMysql.SelectBySql(fmt.Sprintf("SELECT infoid FROM pushentniche WHERE id in('%s')", strings.Join(pushIds, "','")))
+	if infoRes == nil || len(*infoRes) == 0 {
+		return &bxsubscribe.StatusResp{ErrorCode: -1, ErrorMsg: "获取分发地区异常"}, nil
+	}
+	for _, m := range *infoRes {
+		if infoId, _ := m["infoid"].(string); infoId != "" {
+			pushCas = append(pushCas, &model.PushCa{InfoId: infoId})
+		}
+	}
+	infoList := model.NewSubscribePush().GetInfoByIds(IC.MgoBidding, IC.DB.Mongo.Bidding.Collection, IC.DB.Mongo.Bidding.CollectionBack, pushCas)
+	for _, info := range infoList {
+		if info.Area != "" && info.Area != "全国" {
+			regin = append(regin, info.Area)
+		}
+	}
+	//区域人员校验
+	userArr := model.Distributor(regin, common.IntAll(in.EntId), common.IntAll(in.EntUserId))
+	for _, uid := range staffs {
+		check := false
+		for _, user := range userArr {
+			if user.Id == common.IntAll(uid) {
+				check = true
+				break
+			}
+		}
+		if !check {
+			return &bxsubscribe.StatusResp{ErrorCode: -1, ErrorMsg: "选择人员异常"}, nil
+		}
+	}
+	//查询分发信息内容
+	msgRes := IC.BaseServiceMysql.SelectBySql(fmt.Sprintf("SELECT * FROM pushentniche WHERE id in ('%s') and entid =? and source = 2 ", strings.Join(pushIds, "','")), in.EntId)
+	if msgRes == nil || len(*msgRes) == 0 {
+		return &bxsubscribe.StatusResp{ErrorCode: -1, ErrorMsg: "获取分发信息内容异常"}, nil
+	}
+	//分发数据库修改
+	ok := IC.BaseServiceMysql.ExecTx("分发数据库修改", func(tx *sql.Tx) bool {
+		insertRow := []string{"entid", "deptid", "infoid", "matchkeys", "type", "product", "matchways", "matchitems", "disid", "source", "date", "userid", "isvisit", "visittime", "pid"}
+		msgItems := []string{"entid", "deptid", "infoid", "matchkeys", "type", "product", "matchways", "matchitems", "disid"}
+		dateNew := time.Now().Unix()
+		for _, m := range *msgRes {
+			var msgValues, insertValue []interface{}
+			for _, key := range msgItems {
+				msgValues = append(msgValues, m[key])
+			}
+			for _, uid := range staffs {
+				insertValue = append(insertValue, msgValues...)
+				insertValue = append(insertValue, []interface{}{3, dateNew, uid, nil, nil, m["id"]}...)
+			}
+			affected, _ := IC.BaseServiceMysql.InsertBatchByTx(tx, "pushentniche", insertRow, insertValue)
+			if affected == 0 {
+				return false
+			}
+		}
+		return true
+	})
+	//清除推送列表缓存
+	for _, staff := range staffs {
+		//today
+		redis.Del("pushcache_2_b", fmt.Sprintf("entnichepush_%s", staff))
+
+		//all
+		redis.Del("pushcache_2_a", fmt.Sprintf("all_entnichepush_%s", staff))
+		redis.Del("pushcache_2_a", fmt.Sprintf("all_entnichepush_vip_%s", staff))
+		redis.Del("pushcache_2_a", fmt.Sprintf("all_entnichepush_member_%s", staff))
+	}
+
+	if !ok {
+		return &bxsubscribe.StatusResp{ErrorCode: -1, ErrorMsg: "数据分发异常"}, nil
+	}
+	return &bxsubscribe.StatusResp{Status: 1}, nil
+}

+ 18 - 0
jyBXSubscribe/rpc/internal/server/bxsubscribeserver.go

@@ -57,3 +57,21 @@ func (s *BxsubscribeServer) GetKey(ctx context.Context, in *bxsubscribe.GetKeyRe
 	l := logic.NewGetKeyLogic(ctx, s.svcCtx)
 	return l.GetKey(in)
 }
+
+// 信息分发
+func (s *BxsubscribeServer) MsgDistributor(ctx context.Context, in *bxsubscribe.MsgDistributorReq) (*bxsubscribe.StatusResp, error) {
+	l := logic.NewMsgDistributorLogic(ctx, s.svcCtx)
+	return l.MsgDistributor(in)
+}
+
+// 手动分发人员查询
+func (s *BxsubscribeServer) GetDistributor(ctx context.Context, in *bxsubscribe.GetDistributorReq) (*bxsubscribe.DistributorResp, error) {
+	l := logic.NewGetDistributorLogic(ctx, s.svcCtx)
+	return l.GetDistributor(in)
+}
+
+// 查看状态
+func (s *BxsubscribeServer) GetViewStatus(ctx context.Context, in *bxsubscribe.GetViewStatusReq) (*bxsubscribe.ViewStatusResp, error) {
+	l := logic.NewGetViewStatusLogic(ctx, s.svcCtx)
+	return l.GetViewStatus(in)
+}

+ 178 - 0
jyBXSubscribe/rpc/model/distributor.go

@@ -0,0 +1,178 @@
+package model
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	IC "jyBXSubscribe/rpc/init"
+	"strings"
+)
+
+func AllDistributor(entId, entUserId int) []*User {
+	var (
+		users []*User
+	)
+	entInfo := EntInfo(entId, entUserId)
+	if entInfo.Role_admin_department {
+		users = *GetDisUsers(entId, entInfo.Dept.Id)
+	} else if entInfo.Role_admin_system {
+		users = *GetEntUsers(entId)
+	}
+	return users
+}
+func Distributor(region []string, entId, entUserId int) []*User {
+	var (
+		ss, users []*User
+	)
+	entInfo := EntInfo(entId, entUserId)
+	if entInfo.Role_admin_department {
+		users = *GetDisUsers(entId, entInfo.Dept.Id)
+	} else if entInfo.Role_admin_system {
+		users = *GetEntUsers(entId)
+	}
+	//获取所有分配权益的用户
+	powerUser := GetEntPowerUsers(entId)
+	//判断企业是否为商机管理企业
+	isEnt := GetIsEnt(entId)
+	regions := []string{}
+	for _, v := range region {
+		//剔除空与全国
+		if v == "" || strings.Contains(v, "全国") {
+			continue
+		}
+		regions = append(regions, v)
+	}
+
+	for _, v := range users {
+		var _n namePower
+		_n.entUserId = common.InterfaceToStr(v.Id)
+		_n.power = 1
+		n1 := powerUser[_n]
+		_n.power = 2
+		n2 := powerUser[_n]
+		if (isEnt && v.Power == 1) || n1 != 0 || n2 != 0 { //有权益用户 判断是否被设置分配区域
+			if len(regions) == 0 { //判断区域
+				ss = append(ss, v)
+				continue
+			}
+			var rule_id string
+			//有区域限制 过滤筛选
+			rules := IC.MainMysql.Find("entniche_user_rule", map[string]interface{}{"user_id": v.Id}, "rule_id,dept_id", "", -1, -1)
+			if rules != nil && len(*rules) > 0 {
+				if len(*rules) > 1 { //多条规则 查询优先级最高的规则
+					ruleIds := make(map[int]string)
+					for _, v2 := range *rules {
+						ruleIds[common.IntAll(v2["dept_id"])] = common.InterfaceToStr(v2["rule_id"])
+					}
+					//获取部门优先级
+					var ids []int
+					departSort(&ids, v.Dept_id)
+					ids = append(ids, v.Dept_id)
+					//Reverse(&ids)
+					for _, v1 := range ids {
+						if v2, ok := ruleIds[v1]; ok && v2 != "" {
+							rule_id = v2
+							break
+						}
+					}
+				} else {
+					rule_id = common.InterfaceToStr((*rules)[0]["rule_id"])
+				}
+				if rule_id != "" {
+					data, ok := IC.Mgo.FindById("entniche_distribute", rule_id, "")
+					if ok && data != nil && len(*data) > 0 {
+						o_area, _ := (*data)["o_area"].(map[string]interface{})
+						if regionCheck(o_area, regions) {
+							ss = append(ss, v)
+						}
+						continue //企业设置分发区域
+					}
+				}
+			}
+			if isEnt && v.Power == 1 { // 企业未分配规则 商机管理用户查询个人
+				data, ok := IC.Mgo.FindOne("entniche_rule", map[string]interface{}{
+					"i_userid": v.Id,
+					"i_entid":  entId,
+				})
+				if ok && data != nil && len(*data) > 0 {
+					o_entniche, _ := (*data)["o_entniche"].(map[string]interface{})
+					o_area, _ := o_entniche["o_area"].(map[string]interface{})
+					if regionCheck(o_area, regions) {
+						ss = append(ss, v)
+						continue //商机管理
+					}
+				}
+			}
+
+			// 企业未分配规则 非商机管理用户  判断是否分配大会员或超级订阅
+			//user表 判断区域是否符合
+			if (n1 != 0 || n2 != 0) && v.Phone != "" {
+				//查询user表订阅区域
+				data, ok := IC.Mgo.FindOne("user", map[string]interface{}{
+					"$or": []map[string]interface{}{{"s_phone": v.Phone}, {"s_m_phone": v.Phone}},
+				})
+				if ok && data != nil && len(*data) > 0 {
+					o_area := make(map[string]interface{})
+					i_member_status := common.IntAll((*data)["i_member_status"])
+					i_vip_status := common.IntAll((*data)["i_vip_status"])
+					o_member_jy, _ := (*data)["o_member_jy"].(map[string]interface{})
+					o_vipjy, _ := (*data)["o_vipjy"].(map[string]interface{})
+					if n2 != 0 && i_member_status > 0 { //有大会员权益 校验区域
+						o_area, _ = o_member_jy["o_area"].(map[string]interface{})
+						if regionCheck(o_area, regions) {
+							ss = append(ss, v)
+							continue
+						}
+					}
+					if n1 != 0 && i_vip_status > 0 { //有超级订阅权益 校验区域
+						o_area, _ = o_vipjy["o_area"].(map[string]interface{})
+						if regionCheck(o_area, regions) {
+							ss = append(ss, v)
+							continue
+						}
+					}
+				}
+			}
+		}
+
+	}
+
+	return ss
+}
+
+func regionCheck(o_area map[string]interface{}, regions []string) bool {
+	if o_area == nil || len(o_area) == 0 {
+		return true
+	} else {
+		regionBool := true
+		for _, v1 := range regions {
+			if _, ok1 := o_area[v1]; ok1 {
+				continue
+			} else {
+				regionBool = false
+				break
+			}
+		}
+		return regionBool
+	}
+}
+
+func departSort(ids *[]int, deptId int) {
+	list := IC.MainMysql.FindOne("entniche_department", map[string]interface{}{"id": deptId}, "id,pid", "")
+	if list != nil && len(*list) > 0 {
+		pid := common.IntAll((*list)["pid"])
+		if pid != 0 {
+			departSort(ids, pid)
+			*ids = append(*ids, pid)
+		}
+	}
+}
+
+// 数组倒序函数
+func Reverse(arr *[]int) {
+	var temp int
+	length := len(*arr)
+	for i := 0; i < length/2; i++ {
+		temp = (*arr)[i]
+		(*arr)[i] = (*arr)[length-1-i]
+		(*arr)[length-1-i] = temp
+	}
+}

+ 167 - 0
jyBXSubscribe/rpc/model/entity.go

@@ -0,0 +1,167 @@
+package model
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/date"
+	"encoding/json"
+	IC "jyBXSubscribe/rpc/init"
+	"strings"
+)
+
+type User struct {
+	Id        int
+	Name      string //员工姓名
+	Mail      string //邮箱
+	Phone     string //手机号
+	Dept_id   int    //部门id
+	Dept_name string //部门名称
+	//Role      string //角色
+	Power int //权限
+}
+
+type CurrentUser struct {
+	Role_admin_department bool        //是否是部门管理员
+	Role_admin_system     bool        //是否是系统管理员
+	Dept                  *Department //部门信息
+	BondPhone             string      //手机号
+	NickName              string      //昵称
+	HeadImageUrl          string      //头像
+	PersonalAuth          int         //个人认证
+	PersonalAuthReason    string      //个人认证不通过原因
+	User_power            int         //是否分配权限
+	User_name             string      //用户姓名
+}
+
+type Department struct {
+	Id         int
+	Name       string //部门名
+	Pid        int    //上级部门id
+	Pname      string //上级部门名称
+	Nodiff     int    //全员无差别接收 0:关闭 1:打开
+	Subdis     int    //订阅分发 0:关闭 1:打开
+	Aid        int    //管理员id
+	Aname      string //管理员姓名
+	Rname      string //角色名
+	User_count int    //该部门下员工的总数
+	Dept_count int    //该部门下子部门总数
+	Ent_id     int    //公司id
+}
+
+type namePower struct {
+	entUserId string
+	power     int //1 超级订阅权益 2大会员权益
+}
+
+const (
+	//角色
+	Role_admin_system     = 1 //系统管理员
+	Role_admin_department = 2 //部门管理员
+)
+
+// 当前登录用户的信息
+func EntInfo(entId, entUserId int) *CurrentUser {
+	currentUser := &CurrentUser{
+		Dept: &Department{},
+	}
+	user := IC.MainMysql.SelectBySql(`SELECT a.name as user_name from entniche_user a INNER JOIN entniche_user_role b on (a.id=b.user_id) where a.id=? and b.role_id=? limit 1`, entUserId, Role_admin_system)
+	if user != nil && len(*user) > 0 {
+		currentUser.Role_admin_system = true
+		currentUser.User_name, _ = (*user)[0]["user_name"].(string)
+		currentUser.User_power = 1
+		r := IC.MainMysql.SelectBySql(`SELECT id,name,subdis,nodiff from entniche_department where ent_id=? and pid=0 limit 1`, entId)
+		if r != nil && len(*r) == 1 {
+			department := JsonUnmarshal((*r)[0], &Department{}).(*Department)
+			if department != nil {
+				department.Pid = department.Id
+				currentUser.Dept = department
+			}
+		}
+	} else {
+		//角色、权限
+		r := IC.MainMysql.SelectBySql(`SELECT a.name as user_name,a.power as user_power,b.role_id,d.id as dept_id,d.name as dept_name,d.subdis as dept_subdis,d.nodiff as dept_nodiff,e.id as dept_pid from entniche_user a 
+			LEFT JOIN entniche_user_role b on (b.user_id=?) 
+			INNER JOIN entniche_department_user c on (a.id=? and a.id=c.user_id) 
+			INNER JOIN entniche_department d on (c.dept_id=d.id) 
+			INNER JOIN entniche_department e on (e.ent_id=? and e.pid=0) 
+			order by a.id desc limit 1`, entUserId, entUserId, entId)
+		if r != nil && len(*r) == 1 {
+			currentUser.User_name, _ = (*r)[0]["user_name"].(string)
+			currentUser.User_power = common.IntAll((*r)[0]["user_power"])
+			if common.IntAll((*r)[0]["role_id"]) == Role_admin_department {
+				currentUser.Role_admin_department = true
+			}
+			currentUser.Dept.Id = common.IntAll((*r)[0]["dept_id"])
+			currentUser.Dept.Pid = common.IntAll((*r)[0]["dept_pid"])
+			currentUser.Dept.Name = common.ObjToString((*r)[0]["dept_name"])
+			currentUser.Dept.Subdis = common.IntAll((*r)[0]["dept_subdis"])
+			currentUser.Dept.Nodiff = common.IntAll((*r)[0]["dept_nodiff"])
+		}
+	}
+	return currentUser
+}
+
+// map转结构体
+func JsonUnmarshal(m interface{}, s interface{}) interface{} {
+	var b []byte
+	if v, ok := m.(string); ok {
+		b = []byte(v)
+	} else if v, ok := m.([]byte); ok {
+		b = v
+	} else {
+		b, _ = json.Marshal(m)
+	}
+	json.Unmarshal(b, &s)
+	return s
+}
+
+// 获取部门下可以进行分发的人员(不包含部门名称和部门id)
+func GetDisUsers(entId, deptId int) *[]*User {
+	r := IC.MainMysql.SelectBySql(`select DISTINCT c.id,c.name,c.phone,c.power,b.dept_id from entniche_department_parent a 
+		INNER JOIN entniche_department_user b on (b.dept_id=? or (a.pid=? and a.id=b.dept_id)) 
+		INNER JOIN entniche_user c on (c.ent_id=? and b.user_id=c.id) 
+		order by convert(c.name using gbk) COLLATE gbk_chinese_ci asc`, deptId, deptId, entId)
+	users, _ := JsonUnmarshal(r, &[]*User{}).(*[]*User)
+	if users == nil {
+		return &[]*User{}
+	}
+	return users
+}
+
+// 获取企业下所有的员工(不包含部门名称和部门id)
+func GetEntUsers(entId int) *[]*User {
+	r := IC.MainMysql.SelectBySql(`select a.id,a.name,a.phone,a.power,b.dept_id from entniche_user a  LEFT JOIN entniche_department_user b on  (a.id=b.user_id )  where ent_id=?
+		order by convert(name using gbk) COLLATE gbk_chinese_ci asc`, entId)
+	users, _ := JsonUnmarshal(*r, &[]*User{}).(*[]*User)
+	if users == nil {
+		return &[]*User{}
+	}
+	return users
+}
+
+// 获取企业下分配权益的用户
+func GetEntPowerUsers(entId int) map[namePower]int {
+	nowFormat := date.NowFormat(date.Date_Short_Layout)
+	r := IC.MainMysql.SelectBySql(`select a.ent_user_id,b.product_type from entniche_power a  LEFT JOIN entniche_wait_empower b ON (a.wait_empower_id = b.id) where a.ent_id=? and a.status = 1 and b.start_time <=? and b.end_time>=? `, entId, nowFormat, nowFormat)
+	if r == nil {
+		return nil
+	}
+	data := make(map[namePower]int)
+	for _, v := range *r {
+		if strings.Contains(common.InterfaceToStr(v["product_type"]), "VIP") {
+			var _n namePower
+			_n.entUserId = common.InterfaceToStr(v["ent_user_id"])
+			_n.power = 1
+			data[_n] = 1
+		} else if strings.Contains(common.InterfaceToStr(v["product_type"]), "大会员") {
+			var _n namePower
+			_n.entUserId = common.InterfaceToStr(v["ent_user_id"])
+			_n.power = 2
+			data[_n] = 2
+		}
+	}
+	return data
+}
+
+func GetIsEnt(entId int) bool {
+	return IC.MainMysql.CountBySql(`select count(*) from entniche_info where id=? and status = 1`, entId) > 0
+}

+ 125 - 56
jyBXSubscribe/rpc/model/push.go

@@ -98,6 +98,9 @@ type SubPushQueryParam struct {
 	FileExists       string             //是否有附件;默认全部;1:有附件;-1:无附件
 	EntUserId        string             //商机管理用户id
 	DeptId           string             //商机管理用户部门id
+	IsRead           string             //是否已读
+	Source           string             //信息来源
+	Staffs           []string           //分发人员
 	BaseServiceMysql *mysql.Mysql
 	NewUserId        int64
 	IsEnt            bool
@@ -122,7 +125,7 @@ type KeyParam struct {
 }
 
 func (spqp *SubPushQueryParam) IsEmpty() bool {
-	return (spqp.SelectTime == "" || spqp.SelectTime == "all") && spqp.Area == "" && spqp.City == "" && spqp.Buyerclass == "" && spqp.Subscopeclass == "" && spqp.Subtype == "" && spqp.Key == "" && spqp.Price == "" && spqp.FileExists == ""
+	return (spqp.SelectTime == "" || spqp.SelectTime == "all") && spqp.Area == "" && spqp.City == "" && spqp.Buyerclass == "" && spqp.Subscopeclass == "" && spqp.Subtype == "" && spqp.Key == "" && spqp.Price == "" && spqp.FileExists == "" && len(spqp.Staffs) == 0 && spqp.Source == "" && spqp.IsRead == ""
 }
 
 type subscribePush struct {
@@ -280,7 +283,7 @@ func (s *subscribePush) Datas(spqp *SubPushQueryParam) (hasNextPage bool, total
 	start := (spqp.PageNum - 1) * spqp.PageSize
 	end := start + spqp.PageSize
 	//时间是今天,没有别的过滤条件--首先读取当前推送缓存数据 其次查询数据库
-	if nowFormat == date.FormatDateByInt64(&starttime, date.Date_Short_Layout) && spqp.Area == "" && spqp.City == "" && spqp.Buyerclass == "" && spqp.Subscopeclass == "" && spqp.Subtype == "" && spqp.Key == "" && spqp.Price == "" && spqp.FileExists == "" {
+	if nowFormat == date.FormatDateByInt64(&starttime, date.Date_Short_Layout) && spqp.Area == "" && spqp.City == "" && spqp.Buyerclass == "" && spqp.Subscopeclass == "" && spqp.Subtype == "" && spqp.Key == "" && spqp.Price == "" && spqp.FileExists == "" && len(spqp.Staffs) == 0 && spqp.Source == "" && spqp.IsRead == "" {
 		subPush := &SubPush{}
 		var err error
 		if spqp.IsEnt == false {
@@ -363,7 +366,7 @@ func (s *subscribePush) getDatasFromMysql(spqp *SubPushQueryParam, starttime, en
 	userStr := " "
 	leftJoinStr := " "
 	var (
-		countSql, searchSql, findSql string
+		countSql, findSql string
 	)
 	codeMap, err := IC.CodeLib.CodeTransformation(context.Background(), &codeservice.Request{})
 	if codeMap.Data == nil || err != nil {
@@ -374,47 +377,11 @@ func (s *subscribePush) getDatasFromMysql(spqp *SubPushQueryParam, starttime, en
 	if spqp.SelectInfoIds != nil && len(spqp.SelectInfoIds) > 0 {
 		countSql = fmt.Sprintf("select count(1) as count from %s a LEFT JOIN %s b ON a.infoid = b.infoid where %s", aboutDbMsg[s.ModuleFlag].MysqlTable, Baseinfo, fmt.Sprintf("a.id in ('%s')", strings.Join(spqp.SelectInfoIds, "','")))
 		logx.Info("countSql", countSql)
-		searchSql = fmt.Sprintf(" from %s a LEFT JOIN %s b ON a.infoid = b.infoid where %s order by a.date desc,a.id desc", aboutDbMsg[s.ModuleFlag].MysqlTable, Baseinfo, fmt.Sprintf("a.id in ('%s')", strings.Join(spqp.SelectInfoIds, "','")))
+		findSql = fmt.Sprintf("select a.id,a.date,a.infoid,a.isvisit,a.matchkeys,a.type,b.isvalidfile as attachment_count from %s a LEFT JOIN %s b ON a.infoid = b.infoid where %s order by a.date desc,a.id desc", aboutDbMsg[s.ModuleFlag].MysqlTable, Baseinfo, fmt.Sprintf("a.id in ('%s')", strings.Join(spqp.SelectInfoIds, "','")))
 		//查询总数
 		count = spqp.BaseServiceMysql.CountBySql(countSql)
-		findSql = "select a.id,a.date,a.infoid,a.isvisit,a.matchkeys,a.type,b.isvalidfile as attachment_count"
 	} else {
-		if spqp.IsEnt {
-			isNew := 1
-			//商机管理判断
-			newCount := IC.MainMysql.CountBySql("select  count(id) from  entniche_info where  id =? and  isNew != 1 and  status=1", spqp.EntId)
-			if newCount > 0 {
-				//新商机管理
-				isNew = 0
-			}
-			if isNew == 1 {
-				//企业主体是企业的企业查询
-				userStr = fmt.Sprintf("   a.entid='%s' and (a.source > 1) ", spqp.EntId)
-			} else {
-				userStr = fmt.Sprintf("   a.entid='%s' ", spqp.EntId)
-			}
-		} else {
-			if spqp.BuySubject == 1 {
-				//企业主体是企业的个人查询
-				if spqp.UserType == SubVipFlag {
-					userStr = fmt.Sprintf("  a.userid='%s' and (  a.product=1 or a.source>1     ) ", common.If(s.ModuleFlag == EntnicheFlag, spqp.EntUserId, common.InterfaceToStr(spqp.NewUserId)))
-				} else if spqp.UserType == MemberFlag {
-					userStr = fmt.Sprintf("  a.userid='%s' and (  a.product=2  or a.source>1  ) ", common.If(s.ModuleFlag == EntnicheFlag, spqp.EntUserId, common.InterfaceToStr(spqp.NewUserId)))
-				} else {
-					userStr = fmt.Sprintf("  a.userid='%s' and (  a.product is null  or a.source>1  ) ", common.If(s.ModuleFlag == EntnicheFlag, spqp.EntUserId, common.InterfaceToStr(spqp.NewUserId)))
-				}
-			} else {
-				if s.ModuleFlag == EntnicheFlag {
-					//老商机管理个人订阅查询
-					userStr = fmt.Sprintf("  a.userid='%s'  and a.product is null", common.If(s.ModuleFlag == EntnicheFlag, spqp.EntUserId, common.InterfaceToStr(spqp.NewUserId)))
-				} else {
-					//个人订阅查询
-					userStr = fmt.Sprintf("  a.userid='%s'", common.If(s.ModuleFlag == EntnicheFlag, spqp.EntUserId, common.InterfaceToStr(spqp.NewUserId)))
-				}
-
-			}
-		}
-
+		//公共查询条件
 		//时间
 		if starttime > 0 && endtime > 0 {
 			userStr += fmt.Sprintf(" and a.date>=%d and a.date<=%d", starttime, endtime)
@@ -423,6 +390,7 @@ func (s *subscribePush) getDatasFromMysql(spqp *SubPushQueryParam, starttime, en
 		} else if starttime == 0 && endtime > 0 {
 			userStr += fmt.Sprintf(" and a.date<=%d", endtime)
 		}
+
 		if spqp.Area != "" || spqp.City != "" {
 			var sqlAreaCity = ""
 			//城市
@@ -545,25 +513,126 @@ func (s *subscribePush) getDatasFromMysql(spqp *SubPushQueryParam, starttime, en
 				querys = append(querys, fmt.Sprintf("b.isvalidfile =0 "))
 			}
 		}
-		if len(querys) > 1 {
-			countSql = fmt.Sprintf("select count(1) as count from %s  a STRAIGHT_JOIN %s b ON %s and a.infoid = b.infoid  %s where %s", aboutDbMsg[s.ModuleFlag].MysqlTable, Baseinfo, userStr, leftJoinStr, strings.Join(querys, " and "))
+
+		if spqp.IsEnt {
+			var staffs []string
+			userStr += fmt.Sprintf(" and  a.entid='%s' ", spqp.EntId)
+
+			//判断是企业管理员还是部门管理员 部门管理员获取所有子部门
+			userEnt := EntInfo(common.IntAll(spqp.EntId), common.IntAll(spqp.EntUserId))
+			if !(userEnt.Role_admin_system || userEnt.Role_admin_department) {
+				result = []*bxsubscribe.SubscribeInfo{}
+				return
+			}
+			if userEnt.Role_admin_department { //部门管理员 获取所有部门和子部门员工
+				users := GetDisUsers(common.IntAll(spqp.EntId), userEnt.Dept.Id)
+				if users != nil && len(*users) > 0 {
+					for _, v := range *users {
+						if len(spqp.Staffs) > 0 {
+							for _, vv := range spqp.Staffs {
+								if fmt.Sprintf("%d", v.Id) == vv {
+									staffs = append(staffs, common.InterfaceToStr(v.Id))
+								}
+							}
+						} else {
+							staffs = append(staffs, common.InterfaceToStr(v.Id))
+						}
+					}
+				} else {
+					log.Printf("部门管理员为获取到部门员工:%s", spqp.EntUserId)
+					result = []*bxsubscribe.SubscribeInfo{}
+					return
+				}
+			} else if len(spqp.Staffs) > 0 {
+				staffs = spqp.Staffs
+			}
+
+			// 无查询分配人员、是否已读
+			if spqp.IsRead == "" && len(staffs) == 0 {
+				//查询数量(需要去重)
+				//if len(querys) > 1 {
+				countSql = fmt.Sprintf("select count(1) from %s a STRAIGHT_JOIN %s b ON  a.infoid = b.infoid  %s where  %s %s and a.source = 2", aboutDbMsg[s.ModuleFlag].MysqlTable, Baseinfo, leftJoinStr, strings.Join(querys, " and "), userStr)
+				//} else {
+				//	countSql = fmt.Sprintf("select count(1) from %s a WHERE 1=1 %s ", aboutDbMsg[s.ModuleFlag].MysqlTable, userStr)
+				//}
+				//列表查询
+				findSql = fmt.Sprintf("select a.id,a.infoid,a.matchkeys,b.isvalidfile as attachment_count from %s a STRAIGHT_JOIN %s b ON a.infoid = b.infoid  %s where  %s %s and a.source = 2 order by a.date desc,a.id desc",
+					aboutDbMsg[s.ModuleFlag].MysqlTable, Baseinfo, leftJoinStr, strings.Join(querys, " and "), userStr)
+			} else {
+				//查询分配人员或是否已读
+				staffQuery := " 1=1 "
+				if len(staffs) > 0 {
+					staffQuery += fmt.Sprintf(" and  a.userid in ('%s')  ", strings.Join(staffs, "','"))
+				}
+				if spqp.IsRead != "" {
+					if spqp.IsRead == "0" {
+						staffQuery += " and a.isvisit IS NULL"
+					} else if spqp.IsRead == "1" {
+						staffQuery += " and a.isvisit=1"
+					}
+				}
+				//if len(querys) > 1 {
+				countSql = fmt.Sprintf("select count(1) from %s a STRAIGHT_JOIN %s b ON  a.infoid = b.infoid  %s where a.source=2 %s and %s and ((%s) or EXISTS (SELECT 1 from %s c STRAIGHT_JOIN %s b ON c.infoid = b.infoid  %s WHERE c.source=3 %s and %s and a.id=c.pid and (%s))) ", aboutDbMsg[s.ModuleFlag].MysqlTable, Baseinfo, leftJoinStr, userStr, strings.Join(querys, " and "), staffQuery, aboutDbMsg[s.ModuleFlag].MysqlTable, Baseinfo, leftJoinStr, strings.ReplaceAll(userStr, "a.", "c."), strings.Join(querys, " and "), strings.ReplaceAll(staffQuery, "a.", "c."))
+				//} else {
+				//	countSql = fmt.Sprintf("select count(1) from %s a WHERE a.source=2 %s and ((%s) or EXISTS (SELECT 1 from %s c WHERE c.source=3 %s and a.id=pid and (%s))) ", aboutDbMsg[s.ModuleFlag].MysqlTable, userStr, staffQuery, aboutDbMsg[s.ModuleFlag].MysqlTable, strings.ReplaceAll(userStr, "a.", "c."), strings.ReplaceAll(staffQuery, "a.", "c."))
+				//}
+				//列表查询
+				findSql = fmt.Sprintf("select a.id,a.infoid,a.matchkeys,b.isvalidfile as attachment_count from %s a STRAIGHT_JOIN %s b ON  a.infoid = b.infoid  %s where a.source=2 %s and %s and ((%s) or EXISTS (SELECT 1 from %s c STRAIGHT_JOIN %s b ON c.infoid = b.infoid  %s WHERE c.source=3 %s and %s and a.id=c.pid and (%s))) order by a.date desc,a.id desc ", aboutDbMsg[s.ModuleFlag].MysqlTable, Baseinfo, leftJoinStr, userStr, strings.Join(querys, " and "), staffQuery, aboutDbMsg[s.ModuleFlag].MysqlTable, Baseinfo, leftJoinStr, strings.ReplaceAll(userStr, "a.", "c."), strings.Join(querys, " and "), strings.ReplaceAll(staffQuery, "a.", "c."))
+			}
 		} else {
-			countSql = fmt.Sprintf("select count(1) as count from %s  a where %s", aboutDbMsg[s.ModuleFlag].MysqlTable, userStr)
+			// 是否已读
+			if spqp.IsRead != "" {
+				if spqp.IsRead == "0" {
+					userStr += " and a.isvisit IS NULL"
+				} else if spqp.IsRead == "1" {
+					userStr += " and a.isvisit=1"
+				}
+			}
+			// 信息来源
+			if spqp.Source == "1" || spqp.Source == "2" || spqp.Source == "3" {
+				userStr += " and a.source=" + spqp.Source
+			}
+
+			if spqp.BuySubject == 1 {
+				//企业主体是企业的个人查询
+				if spqp.UserType == SubVipFlag {
+					userStr += fmt.Sprintf(" and  a.userid='%s' and (  a.product=1 or a.source>1     ) ", common.If(s.ModuleFlag == EntnicheFlag, spqp.EntUserId, common.InterfaceToStr(spqp.NewUserId)))
+				} else if spqp.UserType == MemberFlag {
+					userStr += fmt.Sprintf(" and  a.userid='%s' and (  a.product=2  or a.source>1  ) ", common.If(s.ModuleFlag == EntnicheFlag, spqp.EntUserId, common.InterfaceToStr(spqp.NewUserId)))
+				} else {
+					userStr += fmt.Sprintf(" and  a.userid='%s' and (  a.product is null  or a.source>1  ) ", common.If(s.ModuleFlag == EntnicheFlag, spqp.EntUserId, common.InterfaceToStr(spqp.NewUserId)))
+				}
+			} else {
+				if s.ModuleFlag == EntnicheFlag {
+					//老商机管理个人订阅查询
+					userStr += fmt.Sprintf(" and  a.userid='%s'  and a.product is null", common.If(s.ModuleFlag == EntnicheFlag, spqp.EntUserId, common.InterfaceToStr(spqp.NewUserId)))
+				} else {
+					//个人订阅查询
+					userStr += fmt.Sprintf(" and  a.userid='%s'", common.If(s.ModuleFlag == EntnicheFlag, spqp.EntUserId, common.InterfaceToStr(spqp.NewUserId)))
+				}
+			}
+
+			//查询数量
+			//if len(querys) > 1 {
+			countSql = fmt.Sprintf("select count(1) as count from %s  a STRAIGHT_JOIN %s b ON a.infoid = b.infoid  %s where 1=1 %s and %s", aboutDbMsg[s.ModuleFlag].MysqlTable, Baseinfo, leftJoinStr, userStr, strings.Join(querys, " and "))
+			//} else {
+			//	countSql = fmt.Sprintf("select count(1) as count from %s  a where 1=1 %s", aboutDbMsg[s.ModuleFlag].MysqlTable, userStr)
+			//}
+			//列表查询语句
+			findSql = "select a.id,a.date,a.infoid,a.isvisit,a.matchkeys,a.type,b.isvalidfile as attachment_count"
+			if s.ModuleFlag == EntnicheFlag {
+				findSql += ", IF(a.source is NULL,1,a.source) as  source "
+			}
+			if s.ModuleFlag != MemberFlag && s.ModuleFlag != EntnicheFlag {
+				findSql += ",a.isvip"
+			}
+			findSql = fmt.Sprintf("%s from %s  a STRAIGHT_JOIN %s b ON 1=1 %s and a.infoid = b.infoid  %s where %s"+
+				" order by a.date desc,a.id desc", findSql, aboutDbMsg[s.ModuleFlag].MysqlTable, Baseinfo, userStr, leftJoinStr, strings.Join(querys, " and "))
 		}
-		logx.Info("countSql", countSql)
-		searchSql = fmt.Sprintf(" from %s  a STRAIGHT_JOIN %s b ON %s and a.infoid = b.infoid  %s where %s"+
-			" order by a.date desc,a.id desc", aboutDbMsg[s.ModuleFlag].MysqlTable, Baseinfo, userStr, leftJoinStr, strings.Join(querys, " and "))
 		//查询总数
+		logx.Info("countSql", countSql)
 		count = spqp.BaseServiceMysql.CountBySql(countSql)
-		findSql = "select a.id,a.date,a.infoid,a.isvisit,a.matchkeys,a.type,b.isvalidfile as attachment_count"
-		if s.ModuleFlag == EntnicheFlag {
-			findSql += ", IF(a.source is NULL,1,a.source) as  source "
-		}
-	}
-	if s.ModuleFlag != MemberFlag && s.ModuleFlag != EntnicheFlag {
-		findSql += ",a.isvip"
 	}
-	findSql += searchSql
 	if isLimit {
 		findSql += fmt.Sprintf(" limit %d,%d", (spqp.PageNum-1)*size, size)
 	}
@@ -1567,7 +1636,7 @@ func (s *subscribePush) Keys(spqp *KeyParam) (result []*bxsubscribe.KeyItems) {
 
 }
 
-//关键词处理
+// 关键词处理
 func KeyHandle(a_items map[string]interface{}) []interface{} {
 	keyArr := []interface{}{}
 	if a_items["a_key"] != nil {

+ 0 - 2394
jyBXSubscribe/rpc/type/bxsubscribe/bxsubscribe.pb.go

@@ -1,2394 +0,0 @@
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// versions:
-// 	protoc-gen-go v1.28.0
-// 	protoc        v3.19.4
-// source: bxsubscribe.proto
-
-package bxsubscribe
-
-import (
-	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-	reflect "reflect"
-	sync "sync"
-)
-
-const (
-	// Verify that this generated code is sufficiently up-to-date.
-	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
-	// Verify that runtime/protoimpl is sufficiently up-to-date.
-	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
-)
-
-type SubscribeInfosReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	PageNum    int64  `protobuf:"varint,1,opt,name=pageNum,proto3" json:"pageNum,omitempty"`
-	PageSize   int64  `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize,omitempty"`
-	SelectTime string `protobuf:"bytes,3,opt,name=selectTime,proto3" json:"selectTime,omitempty"`
-	Area       string `protobuf:"bytes,4,opt,name=area,proto3" json:"area,omitempty"`
-	City       string `protobuf:"bytes,5,opt,name=city,proto3" json:"city,omitempty"`
-	Industry   string `protobuf:"bytes,6,opt,name=industry,proto3" json:"industry,omitempty"`
-	BuyerClass string `protobuf:"bytes,7,opt,name=buyerClass,proto3" json:"buyerClass,omitempty"`
-	KeyWords   string `protobuf:"bytes,8,opt,name=keyWords,proto3" json:"keyWords,omitempty"`
-	Subtype    string `protobuf:"bytes,9,opt,name=subtype,proto3" json:"subtype,omitempty"`
-	UserType   string `protobuf:"bytes,10,opt,name=userType,proto3" json:"userType,omitempty"` //fType:普通用户;vType:超级订阅用户;mType:大会员用户;eType:商机管理用户;
-	UserId     string `protobuf:"bytes,11,opt,name=userId,proto3" json:"userId,omitempty"`
-	EntId      string `protobuf:"bytes,12,opt,name=entId,proto3" json:"entId,omitempty"`
-	AppId      string `protobuf:"bytes,13,opt,name=appId,proto3" json:"appId,omitempty"`
-	Price      string `protobuf:"bytes,14,opt,name=price,proto3" json:"price,omitempty"`
-	FileExists string `protobuf:"bytes,15,opt,name=fileExists,proto3" json:"fileExists,omitempty"`
-	EntUserId  string `protobuf:"bytes,16,opt,name=entUserId,proto3" json:"entUserId,omitempty"`
-	DeptId     string `protobuf:"bytes,17,opt,name=deptId,proto3" json:"deptId,omitempty"`
-	NewUserId  int64  `protobuf:"varint,18,opt,name=newUserId,proto3" json:"newUserId,omitempty"`
-	IsEnt      bool   `protobuf:"varint,19,opt,name=IsEnt,proto3" json:"IsEnt,omitempty"`
-	SelectIds  string `protobuf:"bytes,20,opt,name=SelectIds,proto3" json:"SelectIds,omitempty"`
-}
-
-func (x *SubscribeInfosReq) Reset() {
-	*x = SubscribeInfosReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[0]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SubscribeInfosReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SubscribeInfosReq) ProtoMessage() {}
-
-func (x *SubscribeInfosReq) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[0]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use SubscribeInfosReq.ProtoReflect.Descriptor instead.
-func (*SubscribeInfosReq) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{0}
-}
-
-func (x *SubscribeInfosReq) GetPageNum() int64 {
-	if x != nil {
-		return x.PageNum
-	}
-	return 0
-}
-
-func (x *SubscribeInfosReq) GetPageSize() int64 {
-	if x != nil {
-		return x.PageSize
-	}
-	return 0
-}
-
-func (x *SubscribeInfosReq) GetSelectTime() string {
-	if x != nil {
-		return x.SelectTime
-	}
-	return ""
-}
-
-func (x *SubscribeInfosReq) GetArea() string {
-	if x != nil {
-		return x.Area
-	}
-	return ""
-}
-
-func (x *SubscribeInfosReq) GetCity() string {
-	if x != nil {
-		return x.City
-	}
-	return ""
-}
-
-func (x *SubscribeInfosReq) GetIndustry() string {
-	if x != nil {
-		return x.Industry
-	}
-	return ""
-}
-
-func (x *SubscribeInfosReq) GetBuyerClass() string {
-	if x != nil {
-		return x.BuyerClass
-	}
-	return ""
-}
-
-func (x *SubscribeInfosReq) GetKeyWords() string {
-	if x != nil {
-		return x.KeyWords
-	}
-	return ""
-}
-
-func (x *SubscribeInfosReq) GetSubtype() string {
-	if x != nil {
-		return x.Subtype
-	}
-	return ""
-}
-
-func (x *SubscribeInfosReq) GetUserType() string {
-	if x != nil {
-		return x.UserType
-	}
-	return ""
-}
-
-func (x *SubscribeInfosReq) GetUserId() string {
-	if x != nil {
-		return x.UserId
-	}
-	return ""
-}
-
-func (x *SubscribeInfosReq) GetEntId() string {
-	if x != nil {
-		return x.EntId
-	}
-	return ""
-}
-
-func (x *SubscribeInfosReq) GetAppId() string {
-	if x != nil {
-		return x.AppId
-	}
-	return ""
-}
-
-func (x *SubscribeInfosReq) GetPrice() string {
-	if x != nil {
-		return x.Price
-	}
-	return ""
-}
-
-func (x *SubscribeInfosReq) GetFileExists() string {
-	if x != nil {
-		return x.FileExists
-	}
-	return ""
-}
-
-func (x *SubscribeInfosReq) GetEntUserId() string {
-	if x != nil {
-		return x.EntUserId
-	}
-	return ""
-}
-
-func (x *SubscribeInfosReq) GetDeptId() string {
-	if x != nil {
-		return x.DeptId
-	}
-	return ""
-}
-
-func (x *SubscribeInfosReq) GetNewUserId() int64 {
-	if x != nil {
-		return x.NewUserId
-	}
-	return 0
-}
-
-func (x *SubscribeInfosReq) GetIsEnt() bool {
-	if x != nil {
-		return x.IsEnt
-	}
-	return false
-}
-
-func (x *SubscribeInfosReq) GetSelectIds() string {
-	if x != nil {
-		return x.SelectIds
-	}
-	return ""
-}
-
-type SubscribeInfosResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	ErrCode int64          `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
-	ErrMsg  string         `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
-	Data    *SubscribeData `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
-}
-
-func (x *SubscribeInfosResp) Reset() {
-	*x = SubscribeInfosResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[1]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SubscribeInfosResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SubscribeInfosResp) ProtoMessage() {}
-
-func (x *SubscribeInfosResp) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[1]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use SubscribeInfosResp.ProtoReflect.Descriptor instead.
-func (*SubscribeInfosResp) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{1}
-}
-
-func (x *SubscribeInfosResp) GetErrCode() int64 {
-	if x != nil {
-		return x.ErrCode
-	}
-	return 0
-}
-
-func (x *SubscribeInfosResp) GetErrMsg() string {
-	if x != nil {
-		return x.ErrMsg
-	}
-	return ""
-}
-
-func (x *SubscribeInfosResp) GetData() *SubscribeData {
-	if x != nil {
-		return x.Data
-	}
-	return nil
-}
-
-type SubscribeData struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Count       int64            `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"`
-	HasNextPage bool             `protobuf:"varint,2,opt,name=hasNextPage,proto3" json:"hasNextPage,omitempty"`
-	List        []*SubscribeInfo `protobuf:"bytes,3,rep,name=list,proto3" json:"list,omitempty"`
-}
-
-func (x *SubscribeData) Reset() {
-	*x = SubscribeData{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[2]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SubscribeData) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SubscribeData) ProtoMessage() {}
-
-func (x *SubscribeData) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[2]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use SubscribeData.ProtoReflect.Descriptor instead.
-func (*SubscribeData) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{2}
-}
-
-func (x *SubscribeData) GetCount() int64 {
-	if x != nil {
-		return x.Count
-	}
-	return 0
-}
-
-func (x *SubscribeData) GetHasNextPage() bool {
-	if x != nil {
-		return x.HasNextPage
-	}
-	return false
-}
-
-func (x *SubscribeData) GetList() []*SubscribeInfo {
-	if x != nil {
-		return x.List
-	}
-	return nil
-}
-
-type SubscribeInfo struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	XId          string   `protobuf:"bytes,1,opt,name=_id,json=Id,proto3" json:"_id,omitempty"` //和推送程序 缓存保持一致
-	Title        string   `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
-	Area         string   `protobuf:"bytes,3,opt,name=area,proto3" json:"area,omitempty"`
-	BuyerClass   string   `protobuf:"bytes,4,opt,name=buyerClass,proto3" json:"buyerClass,omitempty"`
-	Subtype      string   `protobuf:"bytes,5,opt,name=subtype,proto3" json:"subtype,omitempty"`
-	Industry     string   `protobuf:"bytes,6,opt,name=industry,proto3" json:"industry,omitempty"`
-	PublishTime  int64    `protobuf:"varint,7,opt,name=publishTime,proto3" json:"publishTime,omitempty"`
-	CaIndex      int64    `protobuf:"varint,8,opt,name=ca_index,json=caIndex,proto3" json:"ca_index,omitempty"`
-	CaDate       int64    `protobuf:"varint,9,opt,name=ca_date,json=caDate,proto3" json:"ca_date,omitempty"`
-	CaIsvisit    int64    `protobuf:"varint,10,opt,name=ca_isvisit,json=caIsvisit,proto3" json:"ca_isvisit,omitempty"`
-	CaType       int64    `protobuf:"varint,11,opt,name=ca_type,json=caType,proto3" json:"ca_type,omitempty"`
-	MatchKeys    []string `protobuf:"bytes,12,rep,name=matchKeys,proto3" json:"matchKeys,omitempty"`
-	Budget       float64  `protobuf:"fixed64,13,opt,name=budget,proto3" json:"budget,omitempty"` // 预算
-	BidAmount    float64  `protobuf:"fixed64,14,opt,name=bidAmount,proto3" json:"bidAmount,omitempty"`
-	Collection   int64    `protobuf:"varint,15,opt,name=collection,proto3" json:"collection,omitempty"`
-	Buyer        string   `protobuf:"bytes,16,opt,name=buyer,proto3" json:"buyer,omitempty"`
-	ProjectName  string   `protobuf:"bytes,17,opt,name=projectName,proto3" json:"projectName,omitempty"`
-	Winner       string   `protobuf:"bytes,18,opt,name=winner,proto3" json:"winner,omitempty"`
-	BidOpenTime  int64    `protobuf:"varint,19,opt,name=bidOpenTime,proto3" json:"bidOpenTime,omitempty"`
-	CaIsvip      int64    `protobuf:"varint,20,opt,name=ca_isvip,json=caIsvip,proto3" json:"ca_isvip,omitempty"`
-	CaFileExists bool     `protobuf:"varint,21,opt,name=ca_fileExists,json=caFileExists,proto3" json:"ca_fileExists,omitempty"`
-	Source       int64    `protobuf:"varint,22,opt,name=source,proto3" json:"source,omitempty"` //来源;1:个人订阅 2:企业自动分发 3:企业手动分发
-	Site         string   `protobuf:"bytes,23,opt,name=site,proto3" json:"site,omitempty"`
-	BuyerTel     string   `protobuf:"bytes,24,opt,name=buyerTel,proto3" json:"buyerTel,omitempty"`         // 采购单位联系方式
-	BuyerPerson  string   `protobuf:"bytes,25,opt,name=buyerPerson,proto3" json:"buyerPerson,omitempty"`   // 采购单位联系人
-	Agency       string   `protobuf:"bytes,26,opt,name=agency,proto3" json:"agency,omitempty"`             //代理机构
-	AgencyPerson string   `protobuf:"bytes,27,opt,name=agencyPerson,proto3" json:"agencyPerson,omitempty"` //代理机构联系人
-	AgencyTel    string   `protobuf:"bytes,28,opt,name=agencyTel,proto3" json:"agencyTel,omitempty"`       //代理机构联系电话
-	WinnerPerson string   `protobuf:"bytes,29,opt,name=winnerPerson,proto3" json:"winnerPerson,omitempty"` //中标企业联系人
-	WinnerTel    string   `protobuf:"bytes,30,opt,name=winnerTel,proto3" json:"winnerTel,omitempty"`       //中标企业联系电话
-	SignendTime  string   `protobuf:"bytes,31,opt,name=signendTime,proto3" json:"signendTime,omitempty"`   // 报名截止日期
-	Bidendtime   string   `protobuf:"bytes,32,opt,name=bidendtime,proto3" json:"bidendtime,omitempty"`     // 投标截止日期
-}
-
-func (x *SubscribeInfo) Reset() {
-	*x = SubscribeInfo{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[3]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SubscribeInfo) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SubscribeInfo) ProtoMessage() {}
-
-func (x *SubscribeInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[3]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use SubscribeInfo.ProtoReflect.Descriptor instead.
-func (*SubscribeInfo) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{3}
-}
-
-func (x *SubscribeInfo) GetXId() string {
-	if x != nil {
-		return x.XId
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetTitle() string {
-	if x != nil {
-		return x.Title
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetArea() string {
-	if x != nil {
-		return x.Area
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetBuyerClass() string {
-	if x != nil {
-		return x.BuyerClass
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetSubtype() string {
-	if x != nil {
-		return x.Subtype
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetIndustry() string {
-	if x != nil {
-		return x.Industry
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetPublishTime() int64 {
-	if x != nil {
-		return x.PublishTime
-	}
-	return 0
-}
-
-func (x *SubscribeInfo) GetCaIndex() int64 {
-	if x != nil {
-		return x.CaIndex
-	}
-	return 0
-}
-
-func (x *SubscribeInfo) GetCaDate() int64 {
-	if x != nil {
-		return x.CaDate
-	}
-	return 0
-}
-
-func (x *SubscribeInfo) GetCaIsvisit() int64 {
-	if x != nil {
-		return x.CaIsvisit
-	}
-	return 0
-}
-
-func (x *SubscribeInfo) GetCaType() int64 {
-	if x != nil {
-		return x.CaType
-	}
-	return 0
-}
-
-func (x *SubscribeInfo) GetMatchKeys() []string {
-	if x != nil {
-		return x.MatchKeys
-	}
-	return nil
-}
-
-func (x *SubscribeInfo) GetBudget() float64 {
-	if x != nil {
-		return x.Budget
-	}
-	return 0
-}
-
-func (x *SubscribeInfo) GetBidAmount() float64 {
-	if x != nil {
-		return x.BidAmount
-	}
-	return 0
-}
-
-func (x *SubscribeInfo) GetCollection() int64 {
-	if x != nil {
-		return x.Collection
-	}
-	return 0
-}
-
-func (x *SubscribeInfo) GetBuyer() string {
-	if x != nil {
-		return x.Buyer
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetProjectName() string {
-	if x != nil {
-		return x.ProjectName
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetWinner() string {
-	if x != nil {
-		return x.Winner
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetBidOpenTime() int64 {
-	if x != nil {
-		return x.BidOpenTime
-	}
-	return 0
-}
-
-func (x *SubscribeInfo) GetCaIsvip() int64 {
-	if x != nil {
-		return x.CaIsvip
-	}
-	return 0
-}
-
-func (x *SubscribeInfo) GetCaFileExists() bool {
-	if x != nil {
-		return x.CaFileExists
-	}
-	return false
-}
-
-func (x *SubscribeInfo) GetSource() int64 {
-	if x != nil {
-		return x.Source
-	}
-	return 0
-}
-
-func (x *SubscribeInfo) GetSite() string {
-	if x != nil {
-		return x.Site
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetBuyerTel() string {
-	if x != nil {
-		return x.BuyerTel
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetBuyerPerson() string {
-	if x != nil {
-		return x.BuyerPerson
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetAgency() string {
-	if x != nil {
-		return x.Agency
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetAgencyPerson() string {
-	if x != nil {
-		return x.AgencyPerson
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetAgencyTel() string {
-	if x != nil {
-		return x.AgencyTel
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetWinnerPerson() string {
-	if x != nil {
-		return x.WinnerPerson
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetWinnerTel() string {
-	if x != nil {
-		return x.WinnerTel
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetSignendTime() string {
-	if x != nil {
-		return x.SignendTime
-	}
-	return ""
-}
-
-func (x *SubscribeInfo) GetBidendtime() string {
-	if x != nil {
-		return x.Bidendtime
-	}
-	return ""
-}
-
-//
-type SomeInfoReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	AppId     string `protobuf:"bytes,1,opt,name=appId,proto3" json:"appId,omitempty"`
-	UserId    string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId,omitempty"`
-	UserType  string `protobuf:"bytes,3,opt,name=userType,proto3" json:"userType,omitempty"`
-	NewUserId int64  `protobuf:"varint,4,opt,name=newUserId,proto3" json:"newUserId,omitempty"`
-	EntId     string `protobuf:"bytes,5,opt,name=entId,proto3" json:"entId,omitempty"`
-}
-
-func (x *SomeInfoReq) Reset() {
-	*x = SomeInfoReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[4]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SomeInfoReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SomeInfoReq) ProtoMessage() {}
-
-func (x *SomeInfoReq) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[4]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use SomeInfoReq.ProtoReflect.Descriptor instead.
-func (*SomeInfoReq) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{4}
-}
-
-func (x *SomeInfoReq) GetAppId() string {
-	if x != nil {
-		return x.AppId
-	}
-	return ""
-}
-
-func (x *SomeInfoReq) GetUserId() string {
-	if x != nil {
-		return x.UserId
-	}
-	return ""
-}
-
-func (x *SomeInfoReq) GetUserType() string {
-	if x != nil {
-		return x.UserType
-	}
-	return ""
-}
-
-func (x *SomeInfoReq) GetNewUserId() int64 {
-	if x != nil {
-		return x.NewUserId
-	}
-	return 0
-}
-
-func (x *SomeInfoReq) GetEntId() string {
-	if x != nil {
-		return x.EntId
-	}
-	return ""
-}
-
-type SomeInfoResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	ErrCode int64     `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
-	ErrMsg  string    `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
-	Data    *SomeInfo `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
-}
-
-func (x *SomeInfoResp) Reset() {
-	*x = SomeInfoResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[5]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SomeInfoResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SomeInfoResp) ProtoMessage() {}
-
-func (x *SomeInfoResp) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[5]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use SomeInfoResp.ProtoReflect.Descriptor instead.
-func (*SomeInfoResp) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{5}
-}
-
-func (x *SomeInfoResp) GetErrCode() int64 {
-	if x != nil {
-		return x.ErrCode
-	}
-	return 0
-}
-
-func (x *SomeInfoResp) GetErrMsg() string {
-	if x != nil {
-		return x.ErrMsg
-	}
-	return ""
-}
-
-func (x *SomeInfoResp) GetData() *SomeInfo {
-	if x != nil {
-		return x.Data
-	}
-	return nil
-}
-
-type SomeInfo struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	HasKey      bool     `protobuf:"varint,1,opt,name=hasKey,proto3" json:"hasKey,omitempty"`           //免费用户和超级订阅是否有订阅词
-	IsInTSguide bool     `protobuf:"varint,2,opt,name=isInTSguide,proto3" json:"isInTSguide,omitempty"` //是否进入向导
-	IsExpire    int64    `protobuf:"varint,3,opt,name=isExpire,proto3" json:"isExpire,omitempty"`       //超级订阅到期提醒
-	IsOnTail    int64    `protobuf:"varint,4,opt,name=isOnTail,proto3" json:"isOnTail,omitempty"`       //超级订阅试用状态
-	IsPassCount bool     `protobuf:"varint,5,opt,name=isPassCount,proto3" json:"isPassCount,omitempty"` //推送数量校验
-	OtherFlag   bool     `protobuf:"varint,6,opt,name=otherFlag,proto3" json:"otherFlag,omitempty"`     //首次用户推送查询“其他”
-	IsRead      bool     `protobuf:"varint,7,opt,name=isRead,proto3" json:"isRead,omitempty"`           //某个通知??是否已读
-	Industry    []string `protobuf:"bytes,8,rep,name=industry,proto3" json:"industry,omitempty"`        //会员订阅的行业
-	UserId      string   `protobuf:"bytes,9,opt,name=userId,proto3" json:"userId,omitempty"`            //用户id
-}
-
-func (x *SomeInfo) Reset() {
-	*x = SomeInfo{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[6]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SomeInfo) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SomeInfo) ProtoMessage() {}
-
-func (x *SomeInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[6]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use SomeInfo.ProtoReflect.Descriptor instead.
-func (*SomeInfo) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{6}
-}
-
-func (x *SomeInfo) GetHasKey() bool {
-	if x != nil {
-		return x.HasKey
-	}
-	return false
-}
-
-func (x *SomeInfo) GetIsInTSguide() bool {
-	if x != nil {
-		return x.IsInTSguide
-	}
-	return false
-}
-
-func (x *SomeInfo) GetIsExpire() int64 {
-	if x != nil {
-		return x.IsExpire
-	}
-	return 0
-}
-
-func (x *SomeInfo) GetIsOnTail() int64 {
-	if x != nil {
-		return x.IsOnTail
-	}
-	return 0
-}
-
-func (x *SomeInfo) GetIsPassCount() bool {
-	if x != nil {
-		return x.IsPassCount
-	}
-	return false
-}
-
-func (x *SomeInfo) GetOtherFlag() bool {
-	if x != nil {
-		return x.OtherFlag
-	}
-	return false
-}
-
-func (x *SomeInfo) GetIsRead() bool {
-	if x != nil {
-		return x.IsRead
-	}
-	return false
-}
-
-func (x *SomeInfo) GetIndustry() []string {
-	if x != nil {
-		return x.Industry
-	}
-	return nil
-}
-
-func (x *SomeInfo) GetUserId() string {
-	if x != nil {
-		return x.UserId
-	}
-	return ""
-}
-
-//
-type StatusResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	ErrorMsg  string `protobuf:"bytes,1,opt,name=error_msg,json=errorMsg,proto3" json:"error_msg,omitempty"`
-	ErrorCode int64  `protobuf:"varint,2,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"`
-	Status    int64  `protobuf:"varint,3,opt,name=status,proto3" json:"status,omitempty"`
-}
-
-func (x *StatusResp) Reset() {
-	*x = StatusResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[7]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *StatusResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*StatusResp) ProtoMessage() {}
-
-func (x *StatusResp) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[7]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use StatusResp.ProtoReflect.Descriptor instead.
-func (*StatusResp) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{7}
-}
-
-func (x *StatusResp) GetErrorMsg() string {
-	if x != nil {
-		return x.ErrorMsg
-	}
-	return ""
-}
-
-func (x *StatusResp) GetErrorCode() int64 {
-	if x != nil {
-		return x.ErrorCode
-	}
-	return 0
-}
-
-func (x *StatusResp) GetStatus() int64 {
-	if x != nil {
-		return x.Status
-	}
-	return 0
-}
-
-type ByPushHistoryResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	ErrorMsg  string `protobuf:"bytes,1,opt,name=error_msg,json=errorMsg,proto3" json:"error_msg,omitempty"`
-	ErrorCode int64  `protobuf:"varint,2,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"`
-	Data      string `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
-}
-
-func (x *ByPushHistoryResp) Reset() {
-	*x = ByPushHistoryResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[8]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *ByPushHistoryResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*ByPushHistoryResp) ProtoMessage() {}
-
-func (x *ByPushHistoryResp) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[8]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use ByPushHistoryResp.ProtoReflect.Descriptor instead.
-func (*ByPushHistoryResp) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{8}
-}
-
-func (x *ByPushHistoryResp) GetErrorMsg() string {
-	if x != nil {
-		return x.ErrorMsg
-	}
-	return ""
-}
-
-func (x *ByPushHistoryResp) GetErrorCode() int64 {
-	if x != nil {
-		return x.ErrorCode
-	}
-	return 0
-}
-
-func (x *ByPushHistoryResp) GetData() string {
-	if x != nil {
-		return x.Data
-	}
-	return ""
-}
-
-type UpdateSubScribeInfoReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Area            map[string]*CityList `protobuf:"bytes,1,rep,name=area,proto3" json:"area,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` //地区
-	Buyerclass      []string             `protobuf:"bytes,2,rep,name=buyerclass,proto3" json:"buyerclass,omitempty"`                                                                             //采购单位类型
-	Items           []*Items             `protobuf:"bytes,3,rep,name=items,proto3" json:"items,omitempty"`                                                                                       //关键词
-	Infotype        []string             `protobuf:"bytes,4,rep,name=infotype,proto3" json:"infotype,omitempty"`                                                                                 //信息类型
-	Matchway        string               `protobuf:"bytes,5,opt,name=matchway,proto3" json:"matchway,omitempty"`                                                                                 //匹配方式 1标题 2正文
-	Projectmatch    string               `protobuf:"bytes,6,opt,name=projectmatch,proto3" json:"projectmatch,omitempty"`                                                                         //项目匹配 1开始 0关闭
-	Ratemode        string               `protobuf:"bytes,7,opt,name=ratemode,proto3" json:"ratemode,omitempty"`                                                                                 // 1:实时推送,2:每天9点推送,3:每周推送,4:每月推送 5:每日推送两次
-	Apppush         string               `protobuf:"bytes,8,opt,name=apppush,proto3" json:"apppush,omitempty"`                                                                                   //app推送 1开启 0关闭
-	Mailpush        string               `protobuf:"bytes,9,opt,name=mailpush,proto3" json:"mailpush,omitempty"`                                                                                 //邮箱推送 1开启 0关闭
-	Mail            string               `protobuf:"bytes,10,opt,name=mail,proto3" json:"mail,omitempty"`                                                                                        //邮箱
-	Otherbuyerclass string               `protobuf:"bytes,11,opt,name=otherbuyerclass,proto3" json:"otherbuyerclass,omitempty"`                                                                  //匹配未分类类型 1匹配 0不匹配
-	UserId          string               `protobuf:"bytes,12,opt,name=userId,proto3" json:"userId,omitempty"`                                                                                    //用户id
-}
-
-func (x *UpdateSubScribeInfoReq) Reset() {
-	*x = UpdateSubScribeInfoReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[9]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *UpdateSubScribeInfoReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*UpdateSubScribeInfoReq) ProtoMessage() {}
-
-func (x *UpdateSubScribeInfoReq) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[9]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use UpdateSubScribeInfoReq.ProtoReflect.Descriptor instead.
-func (*UpdateSubScribeInfoReq) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{9}
-}
-
-func (x *UpdateSubScribeInfoReq) GetArea() map[string]*CityList {
-	if x != nil {
-		return x.Area
-	}
-	return nil
-}
-
-func (x *UpdateSubScribeInfoReq) GetBuyerclass() []string {
-	if x != nil {
-		return x.Buyerclass
-	}
-	return nil
-}
-
-func (x *UpdateSubScribeInfoReq) GetItems() []*Items {
-	if x != nil {
-		return x.Items
-	}
-	return nil
-}
-
-func (x *UpdateSubScribeInfoReq) GetInfotype() []string {
-	if x != nil {
-		return x.Infotype
-	}
-	return nil
-}
-
-func (x *UpdateSubScribeInfoReq) GetMatchway() string {
-	if x != nil {
-		return x.Matchway
-	}
-	return ""
-}
-
-func (x *UpdateSubScribeInfoReq) GetProjectmatch() string {
-	if x != nil {
-		return x.Projectmatch
-	}
-	return ""
-}
-
-func (x *UpdateSubScribeInfoReq) GetRatemode() string {
-	if x != nil {
-		return x.Ratemode
-	}
-	return ""
-}
-
-func (x *UpdateSubScribeInfoReq) GetApppush() string {
-	if x != nil {
-		return x.Apppush
-	}
-	return ""
-}
-
-func (x *UpdateSubScribeInfoReq) GetMailpush() string {
-	if x != nil {
-		return x.Mailpush
-	}
-	return ""
-}
-
-func (x *UpdateSubScribeInfoReq) GetMail() string {
-	if x != nil {
-		return x.Mail
-	}
-	return ""
-}
-
-func (x *UpdateSubScribeInfoReq) GetOtherbuyerclass() string {
-	if x != nil {
-		return x.Otherbuyerclass
-	}
-	return ""
-}
-
-func (x *UpdateSubScribeInfoReq) GetUserId() string {
-	if x != nil {
-		return x.UserId
-	}
-	return ""
-}
-
-//城市
-type CityList struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	City []string `protobuf:"bytes,1,rep,name=city,proto3" json:"city,omitempty"`
-}
-
-func (x *CityList) Reset() {
-	*x = CityList{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[10]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *CityList) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*CityList) ProtoMessage() {}
-
-func (x *CityList) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[10]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use CityList.ProtoReflect.Descriptor instead.
-func (*CityList) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{10}
-}
-
-func (x *CityList) GetCity() []string {
-	if x != nil {
-		return x.City
-	}
-	return nil
-}
-
-//分类
-type Items struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	SItem      string  `protobuf:"bytes,1,opt,name=s_item,json=sItem,proto3" json:"s_item,omitempty"` //分类名称
-	UpdateTime int64   `protobuf:"varint,2,opt,name=updateTime,proto3" json:"updateTime,omitempty"`
-	AKey       []*Keys `protobuf:"bytes,3,rep,name=a_key,json=aKey,proto3" json:"a_key,omitempty"`
-}
-
-func (x *Items) Reset() {
-	*x = Items{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[11]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *Items) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Items) ProtoMessage() {}
-
-func (x *Items) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[11]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use Items.ProtoReflect.Descriptor instead.
-func (*Items) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{11}
-}
-
-func (x *Items) GetSItem() string {
-	if x != nil {
-		return x.SItem
-	}
-	return ""
-}
-
-func (x *Items) GetUpdateTime() int64 {
-	if x != nil {
-		return x.UpdateTime
-	}
-	return 0
-}
-
-func (x *Items) GetAKey() []*Keys {
-	if x != nil {
-		return x.AKey
-	}
-	return nil
-}
-
-//关键词
-type Keys struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Key        []string `protobuf:"bytes,1,rep,name=key,proto3" json:"key,omitempty"`
-	Notkey     []string `protobuf:"bytes,2,rep,name=notkey,proto3" json:"notkey,omitempty"`
-	UpdateTime int64    `protobuf:"varint,3,opt,name=updateTime,proto3" json:"updateTime,omitempty"`
-	Matchway   int64    `protobuf:"varint,4,opt,name=matchway,proto3" json:"matchway,omitempty"`
-	AppendKey  []string `protobuf:"bytes,5,rep,name=appendKey,proto3" json:"appendKey,omitempty"`
-}
-
-func (x *Keys) Reset() {
-	*x = Keys{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[12]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *Keys) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Keys) ProtoMessage() {}
-
-func (x *Keys) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[12]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use Keys.ProtoReflect.Descriptor instead.
-func (*Keys) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{12}
-}
-
-func (x *Keys) GetKey() []string {
-	if x != nil {
-		return x.Key
-	}
-	return nil
-}
-
-func (x *Keys) GetNotkey() []string {
-	if x != nil {
-		return x.Notkey
-	}
-	return nil
-}
-
-func (x *Keys) GetUpdateTime() int64 {
-	if x != nil {
-		return x.UpdateTime
-	}
-	return 0
-}
-
-func (x *Keys) GetMatchway() int64 {
-	if x != nil {
-		return x.Matchway
-	}
-	return 0
-}
-
-func (x *Keys) GetAppendKey() []string {
-	if x != nil {
-		return x.AppendKey
-	}
-	return nil
-}
-
-type KeyItems struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	SItem      string `protobuf:"bytes,1,opt,name=s_item,json=sItem,proto3" json:"s_item,omitempty"` //分类名称
-	UpdateTime int64  `protobuf:"varint,2,opt,name=updateTime,proto3" json:"updateTime,omitempty"`
-	AKey       []*Key `protobuf:"bytes,3,rep,name=a_key,json=aKey,proto3" json:"a_key,omitempty"`
-}
-
-func (x *KeyItems) Reset() {
-	*x = KeyItems{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[13]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *KeyItems) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*KeyItems) ProtoMessage() {}
-
-func (x *KeyItems) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[13]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use KeyItems.ProtoReflect.Descriptor instead.
-func (*KeyItems) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{13}
-}
-
-func (x *KeyItems) GetSItem() string {
-	if x != nil {
-		return x.SItem
-	}
-	return ""
-}
-
-func (x *KeyItems) GetUpdateTime() int64 {
-	if x != nil {
-		return x.UpdateTime
-	}
-	return 0
-}
-
-func (x *KeyItems) GetAKey() []*Key {
-	if x != nil {
-		return x.AKey
-	}
-	return nil
-}
-
-//关键词
-type Key struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Key        []string `protobuf:"bytes,1,rep,name=key,proto3" json:"key,omitempty"`
-	Notkey     []string `protobuf:"bytes,2,rep,name=notkey,proto3" json:"notkey,omitempty"`
-	UpdateTime int64    `protobuf:"varint,3,opt,name=updateTime,proto3" json:"updateTime,omitempty"`
-	Matchway   int64    `protobuf:"varint,4,opt,name=matchway,proto3" json:"matchway,omitempty"`
-	Appendkey  []string `protobuf:"bytes,5,rep,name=appendkey,proto3" json:"appendkey,omitempty"`
-}
-
-func (x *Key) Reset() {
-	*x = Key{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[14]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *Key) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*Key) ProtoMessage() {}
-
-func (x *Key) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[14]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use Key.ProtoReflect.Descriptor instead.
-func (*Key) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{14}
-}
-
-func (x *Key) GetKey() []string {
-	if x != nil {
-		return x.Key
-	}
-	return nil
-}
-
-func (x *Key) GetNotkey() []string {
-	if x != nil {
-		return x.Notkey
-	}
-	return nil
-}
-
-func (x *Key) GetUpdateTime() int64 {
-	if x != nil {
-		return x.UpdateTime
-	}
-	return 0
-}
-
-func (x *Key) GetMatchway() int64 {
-	if x != nil {
-		return x.Matchway
-	}
-	return 0
-}
-
-func (x *Key) GetAppendkey() []string {
-	if x != nil {
-		return x.Appendkey
-	}
-	return nil
-}
-
-type SetReadReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	AppId     string `protobuf:"bytes,1,opt,name=appId,proto3" json:"appId,omitempty"`
-	UserId    string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId,omitempty"`
-	UserType  string `protobuf:"bytes,3,opt,name=userType,proto3" json:"userType,omitempty"`
-	Vsid      int64  `protobuf:"varint,4,opt,name=vsid,proto3" json:"vsid,omitempty"`
-	EntId     string `protobuf:"bytes,5,opt,name=EntId,proto3" json:"EntId,omitempty"`
-	NewUserId int64  `protobuf:"varint,6,opt,name=newUserId,proto3" json:"newUserId,omitempty"`
-	EntUserId string `protobuf:"bytes,7,opt,name=entUserId,proto3" json:"entUserId,omitempty"`
-	IsEnt     bool   `protobuf:"varint,8,opt,name=isEnt,proto3" json:"isEnt,omitempty"`
-}
-
-func (x *SetReadReq) Reset() {
-	*x = SetReadReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[15]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *SetReadReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*SetReadReq) ProtoMessage() {}
-
-func (x *SetReadReq) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[15]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use SetReadReq.ProtoReflect.Descriptor instead.
-func (*SetReadReq) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{15}
-}
-
-func (x *SetReadReq) GetAppId() string {
-	if x != nil {
-		return x.AppId
-	}
-	return ""
-}
-
-func (x *SetReadReq) GetUserId() string {
-	if x != nil {
-		return x.UserId
-	}
-	return ""
-}
-
-func (x *SetReadReq) GetUserType() string {
-	if x != nil {
-		return x.UserType
-	}
-	return ""
-}
-
-func (x *SetReadReq) GetVsid() int64 {
-	if x != nil {
-		return x.Vsid
-	}
-	return 0
-}
-
-func (x *SetReadReq) GetEntId() string {
-	if x != nil {
-		return x.EntId
-	}
-	return ""
-}
-
-func (x *SetReadReq) GetNewUserId() int64 {
-	if x != nil {
-		return x.NewUserId
-	}
-	return 0
-}
-
-func (x *SetReadReq) GetEntUserId() string {
-	if x != nil {
-		return x.EntUserId
-	}
-	return ""
-}
-
-func (x *SetReadReq) GetIsEnt() bool {
-	if x != nil {
-		return x.IsEnt
-	}
-	return false
-}
-
-type GetKeyReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	AppId       string `protobuf:"bytes,1,opt,name=appId,proto3" json:"appId,omitempty"`
-	UserId      string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId,omitempty"`
-	UserType    string `protobuf:"bytes,3,opt,name=userType,proto3" json:"userType,omitempty"`
-	EntId       string `protobuf:"bytes,5,opt,name=entId,proto3" json:"entId,omitempty"`
-	NewUserId   int64  `protobuf:"varint,6,opt,name=newUserId,proto3" json:"newUserId,omitempty"`
-	EntUserId   string `protobuf:"bytes,7,opt,name=entUserId,proto3" json:"entUserId,omitempty"`
-	IsEnt       bool   `protobuf:"varint,8,opt,name=isEnt,proto3" json:"isEnt,omitempty"`
-	VipPower    int64  `protobuf:"varint,4,opt,name=vipPower,proto3" json:"vipPower,omitempty"`
-	MemberPower int64  `protobuf:"varint,10,opt,name=memberPower,proto3" json:"memberPower,omitempty"`
-	PowerSource int64  `protobuf:"varint,11,opt,name=powerSource,proto3" json:"powerSource,omitempty"`
-	UserPower   int64  `protobuf:"varint,12,opt,name=userPower,proto3" json:"userPower,omitempty"`
-	DeptId      string `protobuf:"bytes,13,opt,name=deptId,proto3" json:"deptId,omitempty"`
-}
-
-func (x *GetKeyReq) Reset() {
-	*x = GetKeyReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[16]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *GetKeyReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*GetKeyReq) ProtoMessage() {}
-
-func (x *GetKeyReq) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[16]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use GetKeyReq.ProtoReflect.Descriptor instead.
-func (*GetKeyReq) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{16}
-}
-
-func (x *GetKeyReq) GetAppId() string {
-	if x != nil {
-		return x.AppId
-	}
-	return ""
-}
-
-func (x *GetKeyReq) GetUserId() string {
-	if x != nil {
-		return x.UserId
-	}
-	return ""
-}
-
-func (x *GetKeyReq) GetUserType() string {
-	if x != nil {
-		return x.UserType
-	}
-	return ""
-}
-
-func (x *GetKeyReq) GetEntId() string {
-	if x != nil {
-		return x.EntId
-	}
-	return ""
-}
-
-func (x *GetKeyReq) GetNewUserId() int64 {
-	if x != nil {
-		return x.NewUserId
-	}
-	return 0
-}
-
-func (x *GetKeyReq) GetEntUserId() string {
-	if x != nil {
-		return x.EntUserId
-	}
-	return ""
-}
-
-func (x *GetKeyReq) GetIsEnt() bool {
-	if x != nil {
-		return x.IsEnt
-	}
-	return false
-}
-
-func (x *GetKeyReq) GetVipPower() int64 {
-	if x != nil {
-		return x.VipPower
-	}
-	return 0
-}
-
-func (x *GetKeyReq) GetMemberPower() int64 {
-	if x != nil {
-		return x.MemberPower
-	}
-	return 0
-}
-
-func (x *GetKeyReq) GetPowerSource() int64 {
-	if x != nil {
-		return x.PowerSource
-	}
-	return 0
-}
-
-func (x *GetKeyReq) GetUserPower() int64 {
-	if x != nil {
-		return x.UserPower
-	}
-	return 0
-}
-
-func (x *GetKeyReq) GetDeptId() string {
-	if x != nil {
-		return x.DeptId
-	}
-	return ""
-}
-
-type KeyResp struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	ErrCode int64       `protobuf:"varint,1,opt,name=err_code,json=errCode,proto3" json:"err_code,omitempty"`
-	ErrMsg  string      `protobuf:"bytes,2,opt,name=err_msg,json=errMsg,proto3" json:"err_msg,omitempty"`
-	Items   []*KeyItems `protobuf:"bytes,3,rep,name=items,proto3" json:"items,omitempty"` //关键词
-}
-
-func (x *KeyResp) Reset() {
-	*x = KeyResp{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_bxsubscribe_proto_msgTypes[17]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *KeyResp) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*KeyResp) ProtoMessage() {}
-
-func (x *KeyResp) ProtoReflect() protoreflect.Message {
-	mi := &file_bxsubscribe_proto_msgTypes[17]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use KeyResp.ProtoReflect.Descriptor instead.
-func (*KeyResp) Descriptor() ([]byte, []int) {
-	return file_bxsubscribe_proto_rawDescGZIP(), []int{17}
-}
-
-func (x *KeyResp) GetErrCode() int64 {
-	if x != nil {
-		return x.ErrCode
-	}
-	return 0
-}
-
-func (x *KeyResp) GetErrMsg() string {
-	if x != nil {
-		return x.ErrMsg
-	}
-	return ""
-}
-
-func (x *KeyResp) GetItems() []*KeyItems {
-	if x != nil {
-		return x.Items
-	}
-	return nil
-}
-
-var File_bxsubscribe_proto protoreflect.FileDescriptor
-
-var file_bxsubscribe_proto_rawDesc = []byte{
-	0x0a, 0x11, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
-	0x22, 0xa1, 0x04, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e,
-	0x66, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75,
-	0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d,
-	0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1e, 0x0a, 0x0a,
-	0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04,
-	0x61, 0x72, 0x65, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x65, 0x61,
-	0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x63, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79,
-	0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79,
-	0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x07,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x73, 0x73,
-	0x12, 0x1a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07,
-	0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73,
-	0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x79,
-	0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x79,
-	0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e,
-	0x74, 0x49, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64,
-	0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18,
-	0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a,
-	0x66, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09,
-	0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65,
-	0x70, 0x74, 0x49, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x70, 0x74,
-	0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18,
-	0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64,
-	0x12, 0x14, 0x0a, 0x05, 0x49, 0x73, 0x45, 0x6e, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52,
-	0x05, 0x49, 0x73, 0x45, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
-	0x49, 0x64, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x65, 0x6c, 0x65, 0x63,
-	0x74, 0x49, 0x64, 0x73, 0x22, 0x78, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62,
-	0x65, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72,
-	0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72,
-	0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x2e,
-	0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62,
-	0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63,
-	0x72, 0x69, 0x62, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x77,
-	0x0a, 0x0d, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12,
-	0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05,
-	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x61, 0x73, 0x4e, 0x65, 0x78, 0x74,
-	0x50, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x68, 0x61, 0x73, 0x4e,
-	0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18,
-	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72,
-	0x69, 0x62, 0x65, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66,
-	0x6f, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x9c, 0x07, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x73,
-	0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0f, 0x0a, 0x03, 0x5f, 0x69, 0x64,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69,
-	0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
-	0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x65, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x61, 0x72, 0x65, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x43, 0x6c, 0x61,
-	0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x43,
-	0x6c, 0x61, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x18,
-	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a,
-	0x0a, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x75,
-	0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52,
-	0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08,
-	0x63, 0x61, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07,
-	0x63, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x61, 0x5f, 0x64, 0x61,
-	0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x61, 0x44, 0x61, 0x74, 0x65,
-	0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x61, 0x5f, 0x69, 0x73, 0x76, 0x69, 0x73, 0x69, 0x74, 0x18, 0x0a,
-	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x61, 0x49, 0x73, 0x76, 0x69, 0x73, 0x69, 0x74, 0x12,
-	0x17, 0x0a, 0x07, 0x63, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x06, 0x63, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x61, 0x74, 0x63,
-	0x68, 0x4b, 0x65, 0x79, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x74,
-	0x63, 0x68, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74,
-	0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x12, 0x1c,
-	0x0a, 0x09, 0x62, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28,
-	0x01, 0x52, 0x09, 0x62, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a,
-	0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05,
-	0x62, 0x75, 0x79, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x75, 0x79,
-	0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d,
-	0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
-	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x12,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b,
-	0x62, 0x69, 0x64, 0x4f, 0x70, 0x65, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28,
-	0x03, 0x52, 0x0b, 0x62, 0x69, 0x64, 0x4f, 0x70, 0x65, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19,
-	0x0a, 0x08, 0x63, 0x61, 0x5f, 0x69, 0x73, 0x76, 0x69, 0x70, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x07, 0x63, 0x61, 0x49, 0x73, 0x76, 0x69, 0x70, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x5f,
-	0x66, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08,
-	0x52, 0x0c, 0x63, 0x61, 0x46, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x16,
-	0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06,
-	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x74, 0x65, 0x18, 0x17,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x75,
-	0x79, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x75,
-	0x79, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x75, 0x79, 0x65, 0x72, 0x50,
-	0x65, 0x72, 0x73, 0x6f, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x75, 0x79,
-	0x65, 0x72, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e,
-	0x63, 0x79, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79,
-	0x12, 0x22, 0x0a, 0x0c, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e,
-	0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x65,
-	0x72, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x54, 0x65,
-	0x6c, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x54,
-	0x65, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x50, 0x65, 0x72, 0x73,
-	0x6f, 0x6e, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72,
-	0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72,
-	0x54, 0x65, 0x6c, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x77, 0x69, 0x6e, 0x6e, 0x65,
-	0x72, 0x54, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x6e, 0x64, 0x54,
-	0x69, 0x6d, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x65,
-	0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x69, 0x64, 0x65, 0x6e, 0x64,
-	0x74, 0x69, 0x6d, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x69, 0x64, 0x65,
-	0x6e, 0x64, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x0b, 0x53, 0x6f, 0x6d, 0x65, 0x49,
-	0x6e, 0x66, 0x6f, 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, 0x09, 0x52, 0x06, 0x75, 0x73,
-	0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65,
-	0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14,
-	0x0a, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65,
-	0x6e, 0x74, 0x49, 0x64, 0x22, 0x6d, 0x0a, 0x0c, 0x53, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f,
-	0x52, 0x65, 0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12,
-	0x17, 0x0a, 0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x29, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63,
-	0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x64,
-	0x61, 0x74, 0x61, 0x22, 0x88, 0x02, 0x0a, 0x08, 0x53, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f,
-	0x12, 0x16, 0x0a, 0x06, 0x68, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,
-	0x52, 0x06, 0x68, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x49, 0x6e,
-	0x54, 0x53, 0x67, 0x75, 0x69, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69,
-	0x73, 0x49, 0x6e, 0x54, 0x53, 0x67, 0x75, 0x69, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73,
-	0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x73,
-	0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x4f, 0x6e, 0x54, 0x61,
-	0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x73, 0x4f, 0x6e, 0x54, 0x61,
-	0x69, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x50, 0x61, 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e,
-	0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x50, 0x61, 0x73, 0x73, 0x43,
-	0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x46, 0x6c, 0x61,
-	0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x46, 0x6c,
-	0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x52, 0x65, 0x61, 0x64, 0x18, 0x07, 0x20, 0x01,
-	0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e,
-	0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e,
-	0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64,
-	0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x60,
-	0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1b, 0x0a, 0x09,
-	0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72,
-	0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65,
-	0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
-	0x22, 0x63, 0x0a, 0x11, 0x42, 0x79, 0x50, 0x75, 0x73, 0x68, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72,
-	0x79, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d,
-	0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d,
-	0x73, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64,
-	0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xf9, 0x03, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
-	0x53, 0x75, 0x62, 0x53, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71,
-	0x12, 0x41, 0x0a, 0x04, 0x61, 0x72, 0x65, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d,
-	0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x53, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f,
-	0x52, 0x65, 0x71, 0x2e, 0x41, 0x72, 0x65, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x61,
-	0x72, 0x65, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x63, 0x6c, 0x61, 0x73,
-	0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x63, 0x6c,
-	0x61, 0x73, 0x73, 0x12, 0x28, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
-	0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1a, 0x0a,
-	0x08, 0x69, 0x6e, 0x66, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52,
-	0x08, 0x69, 0x6e, 0x66, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x74,
-	0x63, 0x68, 0x77, 0x61, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x74,
-	0x63, 0x68, 0x77, 0x61, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
-	0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f,
-	0x6a, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x61, 0x74,
-	0x65, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x61, 0x74,
-	0x65, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x70, 0x75, 0x73, 0x68,
-	0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x70, 0x75, 0x73, 0x68, 0x12,
-	0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x69, 0x6c, 0x70, 0x75, 0x73, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x08, 0x6d, 0x61, 0x69, 0x6c, 0x70, 0x75, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6d,
-	0x61, 0x69, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x61, 0x69, 0x6c, 0x12,
-	0x28, 0x0a, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x62, 0x75, 0x79, 0x65, 0x72, 0x63, 0x6c, 0x61,
-	0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x62,
-	0x75, 0x79, 0x65, 0x72, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65,
-	0x72, 0x49, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49,
-	0x64, 0x1a, 0x4e, 0x0a, 0x09, 0x41, 0x72, 0x65, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
-	0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
-	0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
-	0x15, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x43, 0x69,
-	0x74, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
-	0x01, 0x22, 0x1e, 0x0a, 0x08, 0x43, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a,
-	0x04, 0x63, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74,
-	0x79, 0x22, 0x66, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x5f,
-	0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x49, 0x74, 0x65,
-	0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d,
-	0x65, 0x12, 0x26, 0x0a, 0x05, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
-	0x32, 0x11, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x4b,
-	0x65, 0x79, 0x73, 0x52, 0x04, 0x61, 0x4b, 0x65, 0x79, 0x22, 0x8a, 0x01, 0x0a, 0x04, 0x4b, 0x65,
-	0x79, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
-	0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x74, 0x6b, 0x65, 0x79, 0x18, 0x02,
-	0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x74, 0x6b, 0x65, 0x79, 0x12, 0x1e, 0x0a, 0x0a,
-	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08,
-	0x6d, 0x61, 0x74, 0x63, 0x68, 0x77, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08,
-	0x6d, 0x61, 0x74, 0x63, 0x68, 0x77, 0x61, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x65,
-	0x6e, 0x64, 0x4b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70,
-	0x65, 0x6e, 0x64, 0x4b, 0x65, 0x79, 0x22, 0x68, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x49, 0x74, 0x65,
-	0x6d, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x73, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x05, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75,
-	0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x61, 0x5f, 0x6b,
-	0x65, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62,
-	0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x04, 0x61, 0x4b, 0x65, 0x79,
-	0x22, 0x89, 0x01, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
-	0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f,
-	0x74, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x74, 0x6b,
-	0x65, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65,
-	0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69,
-	0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x77, 0x61, 0x79, 0x18, 0x04,
-	0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x77, 0x61, 0x79, 0x12, 0x1c,
-	0x0a, 0x09, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28,
-	0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x6b, 0x65, 0x79, 0x22, 0xd2, 0x01, 0x0a,
-	0x0a, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 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,
-	0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65,
-	0x72, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65,
-	0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x76, 0x73, 0x69, 0x64, 0x18, 0x04, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x04, 0x76, 0x73, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x6e, 0x74,
-	0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x6e, 0x74, 0x49, 0x64, 0x12,
-	0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01,
-	0x28, 0x03, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a,
-	0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69,
-	0x73, 0x45, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x45, 0x6e,
-	0x74, 0x22, 0xd3, 0x02, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 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, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a,
-	0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74,
-	0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12,
-	0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01,
-	0x28, 0x03, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a,
-	0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69,
-	0x73, 0x45, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x45, 0x6e,
-	0x74, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x69, 0x70, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x04, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x08, 0x76, 0x69, 0x70, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x20, 0x0a,
-	0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01,
-	0x28, 0x03, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x12,
-	0x20, 0x0a, 0x0b, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0b,
-	0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63,
-	0x65, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x0c,
-	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x12,
-	0x16, 0x0a, 0x06, 0x64, 0x65, 0x70, 0x74, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x06, 0x64, 0x65, 0x70, 0x74, 0x49, 0x64, 0x22, 0x6a, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x52, 0x65,
-	0x73, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x72, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x72, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a,
-	0x07, 0x65, 0x72, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
-	0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x2b, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18,
-	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72,
-	0x69, 0x62, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x05, 0x69, 0x74,
-	0x65, 0x6d, 0x73, 0x32, 0xbe, 0x03, 0x0a, 0x0b, 0x42, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72,
-	0x69, 0x62, 0x65, 0x12, 0x4d, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x4c, 0x69, 0x73,
-	0x74, 0x12, 0x1e, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e,
-	0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x65,
-	0x71, 0x1a, 0x1f, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e,
-	0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x65,
-	0x73, 0x70, 0x12, 0x45, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x53, 0x6f, 0x6d, 0x65,
-	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69,
-	0x62, 0x65, 0x2e, 0x53, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x19,
-	0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x6f, 0x6d,
-	0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x53, 0x0a, 0x13, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x53, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f,
-	0x12, 0x23, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x55,
-	0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x53, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e,
-	0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72,
-	0x69, 0x62, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f,
-	0x0a, 0x0d, 0x42, 0x79, 0x50, 0x75, 0x73, 0x68, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12,
-	0x1e, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x75,
-	0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x1a,
-	0x1e, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x42, 0x79,
-	0x50, 0x75, 0x73, 0x68, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12,
-	0x3b, 0x0a, 0x07, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64, 0x12, 0x17, 0x2e, 0x62, 0x78, 0x73,
-	0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x61, 0x64,
-	0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62,
-	0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x06,
-	0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63,
-	0x72, 0x69, 0x62, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x14,
-	0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x4b, 0x65, 0x79,
-	0x52, 0x65, 0x73, 0x70, 0x42, 0x0f, 0x5a, 0x0d, 0x2e, 0x2f, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73,
-	0x63, 0x72, 0x69, 0x62, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
-}
-
-var (
-	file_bxsubscribe_proto_rawDescOnce sync.Once
-	file_bxsubscribe_proto_rawDescData = file_bxsubscribe_proto_rawDesc
-)
-
-func file_bxsubscribe_proto_rawDescGZIP() []byte {
-	file_bxsubscribe_proto_rawDescOnce.Do(func() {
-		file_bxsubscribe_proto_rawDescData = protoimpl.X.CompressGZIP(file_bxsubscribe_proto_rawDescData)
-	})
-	return file_bxsubscribe_proto_rawDescData
-}
-
-var file_bxsubscribe_proto_msgTypes = make([]protoimpl.MessageInfo, 19)
-var file_bxsubscribe_proto_goTypes = []interface{}{
-	(*SubscribeInfosReq)(nil),      // 0: bxsubscribe.SubscribeInfosReq
-	(*SubscribeInfosResp)(nil),     // 1: bxsubscribe.SubscribeInfosResp
-	(*SubscribeData)(nil),          // 2: bxsubscribe.subscribeData
-	(*SubscribeInfo)(nil),          // 3: bxsubscribe.subscribeInfo
-	(*SomeInfoReq)(nil),            // 4: bxsubscribe.SomeInfoReq
-	(*SomeInfoResp)(nil),           // 5: bxsubscribe.SomeInfoResp
-	(*SomeInfo)(nil),               // 6: bxsubscribe.SomeInfo
-	(*StatusResp)(nil),             // 7: bxsubscribe.StatusResp
-	(*ByPushHistoryResp)(nil),      // 8: bxsubscribe.ByPushHistoryResp
-	(*UpdateSubScribeInfoReq)(nil), // 9: bxsubscribe.UpdateSubScribeInfoReq
-	(*CityList)(nil),               // 10: bxsubscribe.CityList
-	(*Items)(nil),                  // 11: bxsubscribe.Items
-	(*Keys)(nil),                   // 12: bxsubscribe.Keys
-	(*KeyItems)(nil),               // 13: bxsubscribe.KeyItems
-	(*Key)(nil),                    // 14: bxsubscribe.Key
-	(*SetReadReq)(nil),             // 15: bxsubscribe.SetReadReq
-	(*GetKeyReq)(nil),              // 16: bxsubscribe.GetKeyReq
-	(*KeyResp)(nil),                // 17: bxsubscribe.KeyResp
-	nil,                            // 18: bxsubscribe.UpdateSubScribeInfoReq.AreaEntry
-}
-var file_bxsubscribe_proto_depIdxs = []int32{
-	2,  // 0: bxsubscribe.SubscribeInfosResp.data:type_name -> bxsubscribe.subscribeData
-	3,  // 1: bxsubscribe.subscribeData.list:type_name -> bxsubscribe.subscribeInfo
-	6,  // 2: bxsubscribe.SomeInfoResp.data:type_name -> bxsubscribe.SomeInfo
-	18, // 3: bxsubscribe.UpdateSubScribeInfoReq.area:type_name -> bxsubscribe.UpdateSubScribeInfoReq.AreaEntry
-	11, // 4: bxsubscribe.UpdateSubScribeInfoReq.items:type_name -> bxsubscribe.Items
-	12, // 5: bxsubscribe.Items.a_key:type_name -> bxsubscribe.Keys
-	14, // 6: bxsubscribe.KeyItems.a_key:type_name -> bxsubscribe.Key
-	13, // 7: bxsubscribe.KeyResp.items:type_name -> bxsubscribe.KeyItems
-	10, // 8: bxsubscribe.UpdateSubScribeInfoReq.AreaEntry.value:type_name -> bxsubscribe.CityList
-	0,  // 9: bxsubscribe.Bxsubscribe.GetSubList:input_type -> bxsubscribe.SubscribeInfosReq
-	4,  // 10: bxsubscribe.Bxsubscribe.GetSubSomeInfo:input_type -> bxsubscribe.SomeInfoReq
-	9,  // 11: bxsubscribe.Bxsubscribe.UpdateSubScribeInfo:input_type -> bxsubscribe.UpdateSubScribeInfoReq
-	0,  // 12: bxsubscribe.Bxsubscribe.ByPushHistory:input_type -> bxsubscribe.SubscribeInfosReq
-	15, // 13: bxsubscribe.Bxsubscribe.SetRead:input_type -> bxsubscribe.SetReadReq
-	16, // 14: bxsubscribe.Bxsubscribe.GetKey:input_type -> bxsubscribe.GetKeyReq
-	1,  // 15: bxsubscribe.Bxsubscribe.GetSubList:output_type -> bxsubscribe.SubscribeInfosResp
-	5,  // 16: bxsubscribe.Bxsubscribe.GetSubSomeInfo:output_type -> bxsubscribe.SomeInfoResp
-	7,  // 17: bxsubscribe.Bxsubscribe.UpdateSubScribeInfo:output_type -> bxsubscribe.StatusResp
-	8,  // 18: bxsubscribe.Bxsubscribe.ByPushHistory:output_type -> bxsubscribe.ByPushHistoryResp
-	7,  // 19: bxsubscribe.Bxsubscribe.SetRead:output_type -> bxsubscribe.StatusResp
-	17, // 20: bxsubscribe.Bxsubscribe.GetKey:output_type -> bxsubscribe.KeyResp
-	15, // [15:21] is the sub-list for method output_type
-	9,  // [9:15] is the sub-list for method input_type
-	9,  // [9:9] is the sub-list for extension type_name
-	9,  // [9:9] is the sub-list for extension extendee
-	0,  // [0:9] is the sub-list for field type_name
-}
-
-func init() { file_bxsubscribe_proto_init() }
-func file_bxsubscribe_proto_init() {
-	if File_bxsubscribe_proto != nil {
-		return
-	}
-	if !protoimpl.UnsafeEnabled {
-		file_bxsubscribe_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SubscribeInfosReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SubscribeInfosResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SubscribeData); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SubscribeInfo); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SomeInfoReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SomeInfoResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SomeInfo); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*StatusResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ByPushHistoryResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*UpdateSubScribeInfoReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CityList); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Items); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Keys); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*KeyItems); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Key); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetReadReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*GetKeyReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_bxsubscribe_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*KeyResp); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
-	type x struct{}
-	out := protoimpl.TypeBuilder{
-		File: protoimpl.DescBuilder{
-			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
-			RawDescriptor: file_bxsubscribe_proto_rawDesc,
-			NumEnums:      0,
-			NumMessages:   19,
-			NumExtensions: 0,
-			NumServices:   1,
-		},
-		GoTypes:           file_bxsubscribe_proto_goTypes,
-		DependencyIndexes: file_bxsubscribe_proto_depIdxs,
-		MessageInfos:      file_bxsubscribe_proto_msgTypes,
-	}.Build()
-	File_bxsubscribe_proto = out.File
-	file_bxsubscribe_proto_rawDesc = nil
-	file_bxsubscribe_proto_goTypes = nil
-	file_bxsubscribe_proto_depIdxs = nil
-}

+ 126 - 12
jyBXSubscribe/rpc/type/bxsubscribe/bxsubscribe_grpc.pb.go

@@ -22,18 +22,24 @@ const _ = grpc.SupportPackageIsVersion7
 //
 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
 type BxsubscribeClient interface {
-	//获取订阅推送列表
+	// 获取订阅推送列表
 	GetSubList(ctx context.Context, in *SubscribeInfosReq, opts ...grpc.CallOption) (*SubscribeInfosResp, error)
-	//获取订阅推送相关信息
+	// 获取订阅推送相关信息
 	GetSubSomeInfo(ctx context.Context, in *SomeInfoReq, opts ...grpc.CallOption) (*SomeInfoResp, error)
-	//修改订阅信息接口
+	// 修改订阅信息接口
 	UpdateSubScribeInfo(ctx context.Context, in *UpdateSubScribeInfoReq, opts ...grpc.CallOption) (*StatusResp, error)
-	//推送页面筛选导出
+	// 推送页面筛选导出
 	ByPushHistory(ctx context.Context, in *SubscribeInfosReq, opts ...grpc.CallOption) (*ByPushHistoryResp, error)
-	//推送数据浏览状态修改
+	// 推送数据浏览状态修改
 	SetRead(ctx context.Context, in *SetReadReq, opts ...grpc.CallOption) (*StatusResp, error)
-	//关键词获取
+	// 关键词获取
 	GetKey(ctx context.Context, in *GetKeyReq, opts ...grpc.CallOption) (*KeyResp, error)
+	// 信息分发
+	MsgDistributor(ctx context.Context, in *MsgDistributorReq, opts ...grpc.CallOption) (*StatusResp, error)
+	// 手动分发人员查询
+	GetDistributor(ctx context.Context, in *GetDistributorReq, opts ...grpc.CallOption) (*DistributorResp, error)
+	// 查看状态
+	GetViewStatus(ctx context.Context, in *GetViewStatusReq, opts ...grpc.CallOption) (*ViewStatusResp, error)
 }
 
 type bxsubscribeClient struct {
@@ -98,22 +104,55 @@ func (c *bxsubscribeClient) GetKey(ctx context.Context, in *GetKeyReq, opts ...g
 	return out, nil
 }
 
+func (c *bxsubscribeClient) MsgDistributor(ctx context.Context, in *MsgDistributorReq, opts ...grpc.CallOption) (*StatusResp, error) {
+	out := new(StatusResp)
+	err := c.cc.Invoke(ctx, "/bxsubscribe.Bxsubscribe/MsgDistributor", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *bxsubscribeClient) GetDistributor(ctx context.Context, in *GetDistributorReq, opts ...grpc.CallOption) (*DistributorResp, error) {
+	out := new(DistributorResp)
+	err := c.cc.Invoke(ctx, "/bxsubscribe.Bxsubscribe/GetDistributor", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *bxsubscribeClient) GetViewStatus(ctx context.Context, in *GetViewStatusReq, opts ...grpc.CallOption) (*ViewStatusResp, error) {
+	out := new(ViewStatusResp)
+	err := c.cc.Invoke(ctx, "/bxsubscribe.Bxsubscribe/GetViewStatus", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // BxsubscribeServer is the server API for Bxsubscribe service.
 // All implementations must embed UnimplementedBxsubscribeServer
 // for forward compatibility
 type BxsubscribeServer interface {
-	//获取订阅推送列表
+	// 获取订阅推送列表
 	GetSubList(context.Context, *SubscribeInfosReq) (*SubscribeInfosResp, error)
-	//获取订阅推送相关信息
+	// 获取订阅推送相关信息
 	GetSubSomeInfo(context.Context, *SomeInfoReq) (*SomeInfoResp, error)
-	//修改订阅信息接口
+	// 修改订阅信息接口
 	UpdateSubScribeInfo(context.Context, *UpdateSubScribeInfoReq) (*StatusResp, error)
-	//推送页面筛选导出
+	// 推送页面筛选导出
 	ByPushHistory(context.Context, *SubscribeInfosReq) (*ByPushHistoryResp, error)
-	//推送数据浏览状态修改
+	// 推送数据浏览状态修改
 	SetRead(context.Context, *SetReadReq) (*StatusResp, error)
-	//关键词获取
+	// 关键词获取
 	GetKey(context.Context, *GetKeyReq) (*KeyResp, error)
+	// 信息分发
+	MsgDistributor(context.Context, *MsgDistributorReq) (*StatusResp, error)
+	// 手动分发人员查询
+	GetDistributor(context.Context, *GetDistributorReq) (*DistributorResp, error)
+	// 查看状态
+	GetViewStatus(context.Context, *GetViewStatusReq) (*ViewStatusResp, error)
 	mustEmbedUnimplementedBxsubscribeServer()
 }
 
@@ -139,6 +178,15 @@ func (UnimplementedBxsubscribeServer) SetRead(context.Context, *SetReadReq) (*St
 func (UnimplementedBxsubscribeServer) GetKey(context.Context, *GetKeyReq) (*KeyResp, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetKey not implemented")
 }
+func (UnimplementedBxsubscribeServer) MsgDistributor(context.Context, *MsgDistributorReq) (*StatusResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method MsgDistributor not implemented")
+}
+func (UnimplementedBxsubscribeServer) GetDistributor(context.Context, *GetDistributorReq) (*DistributorResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetDistributor not implemented")
+}
+func (UnimplementedBxsubscribeServer) GetViewStatus(context.Context, *GetViewStatusReq) (*ViewStatusResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetViewStatus not implemented")
+}
 func (UnimplementedBxsubscribeServer) mustEmbedUnimplementedBxsubscribeServer() {}
 
 // UnsafeBxsubscribeServer may be embedded to opt out of forward compatibility for this service.
@@ -260,6 +308,60 @@ func _Bxsubscribe_GetKey_Handler(srv interface{}, ctx context.Context, dec func(
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Bxsubscribe_MsgDistributor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(MsgDistributorReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BxsubscribeServer).MsgDistributor(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/bxsubscribe.Bxsubscribe/MsgDistributor",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BxsubscribeServer).MsgDistributor(ctx, req.(*MsgDistributorReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Bxsubscribe_GetDistributor_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetDistributorReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BxsubscribeServer).GetDistributor(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/bxsubscribe.Bxsubscribe/GetDistributor",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BxsubscribeServer).GetDistributor(ctx, req.(*GetDistributorReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Bxsubscribe_GetViewStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetViewStatusReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BxsubscribeServer).GetViewStatus(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/bxsubscribe.Bxsubscribe/GetViewStatus",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BxsubscribeServer).GetViewStatus(ctx, req.(*GetViewStatusReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // Bxsubscribe_ServiceDesc is the grpc.ServiceDesc for Bxsubscribe service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -291,6 +393,18 @@ var Bxsubscribe_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "GetKey",
 			Handler:    _Bxsubscribe_GetKey_Handler,
 		},
+		{
+			MethodName: "MsgDistributor",
+			Handler:    _Bxsubscribe_MsgDistributor_Handler,
+		},
+		{
+			MethodName: "GetDistributor",
+			Handler:    _Bxsubscribe_GetDistributor_Handler,
+		},
+		{
+			MethodName: "GetViewStatus",
+			Handler:    _Bxsubscribe_GetViewStatus_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "bxsubscribe.proto",