浏览代码

feat:数据导出筛选条件列表功能与删除功能添加

duxin 2 年之前
父节点
当前提交
b4af4ddb84

+ 13 - 1
jyBXSubscribe/api/bxsubscribe.api

@@ -112,6 +112,14 @@ type (
 		MessageId string `json:"messageId"`
 		Staffs    string `json:"staffs"`
 	}
+
+	deriveReq {
+		AppId     string `header:"appId"`
+		UserId    string `header:"userId"`
+		EntId     string `header:"entId,optional"`
+		EntUserId string `header:"entUserId,optional"`
+		InfoId    string `json:"infoId,optional"`
+	}
 )
 service bxsubscribe-api {
 	@handler subscribeList
@@ -132,4 +140,8 @@ service bxsubscribe-api {
 	post /jybx/subscribe/:userType/viewStatus(viewStatusReq) returns (commonResp)
 	@handler msgDistributor
 	post /jybx/subscribe/msgDistributor(msgDistributor) returns (commonResp)
-}
+	@handler deriveShow //数据导出筛选条件回显
+	post /jybx/subscribe/deriveShow(deriveReq) returns (commonResp)
+	@handler deriveDel//数据导出筛选条件删除
+	post /jybx/subscribe/deriveDel(deriveReq) returns (commonResp)
+}

+ 28 - 0
jyBXSubscribe/api/internal/handler/derivedelhandler.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 deriveDelHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.DeriveReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewDeriveDelLogic(r.Context(), svcCtx)
+		resp, err := l.DeriveDel(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 28 - 0
jyBXSubscribe/api/internal/handler/deriveshowhandler.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 deriveShowHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.DeriveReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := logic.NewDeriveShowLogic(r.Context(), svcCtx)
+		resp, err := l.DeriveShow(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

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

@@ -57,6 +57,16 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 				Path:    "/jybx/subscribe/msgDistributor",
 				Handler: msgDistributorHandler(serverCtx),
 			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jybx/subscribe/deriveShow",
+				Handler: deriveShowHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/jybx/subscribe/deriveDel",
+				Handler: deriveDelHandler(serverCtx),
+			},
 		},
 	)
 }

+ 44 - 0
jyBXSubscribe/api/internal/logic/derivedellogic.go

@@ -0,0 +1,44 @@
+package logic
+
+import (
+	"context"
+
+	"jyBXSubscribe/api/internal/svc"
+	"jyBXSubscribe/api/internal/types"
+	"jyBXSubscribe/rpc/type/bxsubscribe"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type DeriveDelLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewDeriveDelLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeriveDelLogic {
+	return &DeriveDelLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *DeriveDelLogic) DeriveDel(req *types.DeriveReq) (resp *types.CommonResp, err error) {
+	res, err := l.svcCtx.Suscribe.DeriveDel(l.ctx, &bxsubscribe.DeriveReq{
+		InfoId: req.InfoId,
+	})
+	if err != nil {
+		return &types.CommonResp{
+			Err_code: res.ErrorCode,
+			Err_msg:  res.ErrorMsg,
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonResp{
+		Err_code: res.ErrorCode,
+		Err_msg:  res.ErrorMsg,
+		Data:     res.Status,
+	}, nil
+	return
+}

+ 46 - 0
jyBXSubscribe/api/internal/logic/deriveshowlogic.go

@@ -0,0 +1,46 @@
+package logic
+
+import (
+	"context"
+
+	"jyBXSubscribe/api/internal/svc"
+	"jyBXSubscribe/api/internal/types"
+	"jyBXSubscribe/rpc/type/bxsubscribe"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type DeriveShowLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewDeriveShowLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeriveShowLogic {
+	return &DeriveShowLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *DeriveShowLogic) DeriveShow(req *types.DeriveReq) (resp *types.CommonResp, err error) {
+	res, err := l.svcCtx.Suscribe.DeriveShow(l.ctx, &bxsubscribe.DeriveReq{
+		EntId:     req.EntId,
+		EntUserId: req.EntUserId,
+		UserId:    req.UserId,
+	})
+	if err != nil {
+		return &types.CommonResp{
+			Err_code: res.ErrCode,
+			Err_msg:  res.ErrMsg,
+			Data:     nil,
+		}, nil
+	}
+	return &types.CommonResp{
+		Err_code: res.ErrCode,
+		Err_msg:  res.ErrMsg,
+		Data:     res.Data,
+	}, nil
+	return
+}

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

@@ -109,3 +109,11 @@ type MsgDistributor struct {
 	MessageId string `json:"messageId"`
 	Staffs    string `json:"staffs"`
 }
+
+type DeriveReq struct {
+	AppId     string `header:"appId"`
+	UserId    string `header:"userId"`
+	EntId     string `header:"entId,optional"`
+	EntUserId string `header:"entUserId,optional"`
+	InfoId    string `json:"infoId,optional"`
+}

+ 37 - 0
jyBXSubscribe/rpc/bxsubscribe.proto

@@ -251,6 +251,39 @@ message UserStatus {
   string date = 5;
 }
 
+message DeriveReq{
+  string  appId = 1;
+  string  entId = 2;
+  string  entUserId = 3;
+  string  UserId = 4;
+  string  InfoId = 6;
+}
+
+message DeriveRes{
+  int64 err_code = 1;
+  string err_msg = 2;
+  repeated Derive data = 3;//分发人员
+}
+message Derive{
+  string  _id = 1;
+  string  region = 2;
+  string  area = 3;
+  string  maxprice = 4;
+  string  winner = 6;
+  string  industry = 7;
+  string  minprice = 8;
+  string  buyer = 9;
+  string  buyerclass = 10;
+  repeated keyWord  keywords = 11;
+  string  selectType = 12;
+  string  subtype = 13;
+  string  city = 14;
+}
+message keyWord{
+  string keyword = 1;
+  repeated string appended = 2;
+  repeated string exclude = 3;
+}
 
 service Bxsubscribe {
   //获取订阅推送列表
@@ -271,4 +304,8 @@ service Bxsubscribe {
   rpc GetDistributor(GetDistributorReq)returns(DistributorResp);
   //查看状态
   rpc GetViewStatus(GetViewStatusReq)returns(ViewStatusResp);
+  //自动数据导出筛选条件查询
+  rpc deriveShow(DeriveReq)returns(DeriveRes);
+  //删除自动数据导出筛选条件
+  rpc deriveDel(DeriveReq)returns(StatusResp);
 }

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

@@ -15,6 +15,9 @@ import (
 type (
 	ByPushHistoryResp      = bxsubscribe.ByPushHistoryResp
 	CityList               = bxsubscribe.CityList
+	Derive                 = bxsubscribe.Derive
+	DeriveReq              = bxsubscribe.DeriveReq
+	DeriveRes              = bxsubscribe.DeriveRes
 	DistributorResp        = bxsubscribe.DistributorResp
 	GetDistributorReq      = bxsubscribe.GetDistributorReq
 	GetKeyReq              = bxsubscribe.GetKeyReq
@@ -23,6 +26,7 @@ type (
 	Key                    = bxsubscribe.Key
 	KeyItems               = bxsubscribe.KeyItems
 	KeyResp                = bxsubscribe.KeyResp
+	KeyWord                = bxsubscribe.KeyWord
 	Keys                   = bxsubscribe.Keys
 	MsgDistributorReq      = bxsubscribe.MsgDistributorReq
 	SetReadReq             = bxsubscribe.SetReadReq
@@ -59,6 +63,10 @@ type (
 		GetDistributor(ctx context.Context, in *GetDistributorReq, opts ...grpc.CallOption) (*DistributorResp, error)
 		// 查看状态
 		GetViewStatus(ctx context.Context, in *GetViewStatusReq, opts ...grpc.CallOption) (*ViewStatusResp, error)
+		// 自动数据导出筛选条件查询
+		DeriveShow(ctx context.Context, in *DeriveReq, opts ...grpc.CallOption) (*DeriveRes, error)
+		// 删除自动数据导出筛选条件
+		DeriveDel(ctx context.Context, in *DeriveReq, opts ...grpc.CallOption) (*StatusResp, error)
 	}
 
 	defaultBxsubscribe struct {
@@ -125,3 +133,15 @@ func (m *defaultBxsubscribe) GetViewStatus(ctx context.Context, in *GetViewStatu
 	client := bxsubscribe.NewBxsubscribeClient(m.cli.Conn())
 	return client.GetViewStatus(ctx, in, opts...)
 }
+
+// 自动数据导出筛选条件查询
+func (m *defaultBxsubscribe) DeriveShow(ctx context.Context, in *DeriveReq, opts ...grpc.CallOption) (*DeriveRes, error) {
+	client := bxsubscribe.NewBxsubscribeClient(m.cli.Conn())
+	return client.DeriveShow(ctx, in, opts...)
+}
+
+// 删除自动数据导出筛选条件
+func (m *defaultBxsubscribe) DeriveDel(ctx context.Context, in *DeriveReq, opts ...grpc.CallOption) (*StatusResp, error) {
+	client := bxsubscribe.NewBxsubscribeClient(m.cli.Conn())
+	return client.DeriveDel(ctx, in, opts...)
+}

+ 31 - 0
jyBXSubscribe/rpc/internal/logic/derivedellogic.go

@@ -0,0 +1,31 @@
+package logic
+
+import (
+	"context"
+	"jyBXSubscribe/rpc/model"
+
+	"jyBXSubscribe/rpc/internal/svc"
+	"jyBXSubscribe/rpc/type/bxsubscribe"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type DeriveDelLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewDeriveDelLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeriveDelLogic {
+	return &DeriveDelLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 删除自动数据导出筛选条件
+func (l *DeriveDelLogic) DeriveDel(in *bxsubscribe.DeriveReq) (*bxsubscribe.StatusResp, error) {
+	// todo: add your logic here and delete this line
+	return model.ScreeningDelete(in.InfoId), nil
+}

+ 30 - 0
jyBXSubscribe/rpc/internal/logic/deriveshowlogic.go

@@ -0,0 +1,30 @@
+package logic
+
+import (
+	"context"
+	"jyBXSubscribe/rpc/model"
+
+	"jyBXSubscribe/rpc/internal/svc"
+	"jyBXSubscribe/rpc/type/bxsubscribe"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type DeriveShowLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewDeriveShowLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeriveShowLogic {
+	return &DeriveShowLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 自动数据导出筛选条件查询
+func (l *DeriveShowLogic) DeriveShow(in *bxsubscribe.DeriveReq) (*bxsubscribe.DeriveRes, error) {
+	return model.ScreeningList(in.UserId), nil
+}

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

@@ -75,3 +75,15 @@ func (s *BxsubscribeServer) GetViewStatus(ctx context.Context, in *bxsubscribe.G
 	l := logic.NewGetViewStatusLogic(ctx, s.svcCtx)
 	return l.GetViewStatus(in)
 }
+
+// 自动数据导出筛选条件查询
+func (s *BxsubscribeServer) DeriveShow(ctx context.Context, in *bxsubscribe.DeriveReq) (*bxsubscribe.DeriveRes, error) {
+	l := logic.NewDeriveShowLogic(ctx, s.svcCtx)
+	return l.DeriveShow(in)
+}
+
+// 删除自动数据导出筛选条件
+func (s *BxsubscribeServer) DeriveDel(ctx context.Context, in *bxsubscribe.DeriveReq) (*bxsubscribe.StatusResp, error) {
+	l := logic.NewDeriveDelLogic(ctx, s.svcCtx)
+	return l.DeriveDel(in)
+}

+ 71 - 0
jyBXSubscribe/rpc/model/derivedFiltering.go

@@ -0,0 +1,71 @@
+package model
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/encrypt"
+	IC "jyBXSubscribe/rpc/init"
+	"jyBXSubscribe/rpc/type/bxsubscribe"
+	"log"
+)
+
+func ScreeningList(userid string) *bxsubscribe.DeriveRes {
+	qy := map[string]interface{}{
+		"s_userid":   userid,
+		"filterSave": 1,
+	}
+	data := new(bxsubscribe.DeriveRes)
+	allData, ok := IC.Mgo.Find("export_search", qy, "comeintime desc", "", false, -1, -1)
+	if ok && allData != nil && len(*allData) > 0 {
+		for _, v := range *allData {
+			dataOne := bxsubscribe.Derive{
+				XId:        encrypt.SE.Encode2Hex(common.InterfaceToStr(v["_id"])),
+				Region:     common.InterfaceToStr(v["region"]),
+				Area:       common.InterfaceToStr(v["area"]),
+				Maxprice:   common.InterfaceToStr(v["maxprice"]),
+				Winner:     common.InterfaceToStr(v["winner"]),
+				Industry:   common.InterfaceToStr(v["industry"]),
+				Minprice:   common.InterfaceToStr(v["minprice"]),
+				Buyer:      common.InterfaceToStr(v["buyer"]),
+				Buyerclass: common.InterfaceToStr(v["buyerclass"]),
+				SelectType: common.InterfaceToStr(v["selectType"]),
+				Subtype:    common.InterfaceToStr(v["subtype"]),
+				City:       common.InterfaceToStr(v["city"]),
+			}
+			keyWord, _ := v["keywords"].([]map[string]interface{})
+			var keys []*bxsubscribe.KeyWord
+			for _, v1 := range keyWord {
+				key := bxsubscribe.KeyWord{
+					Keyword: common.InterfaceToStr(v1["keyword"]),
+				}
+				appended, _ := v1["appended"].([]string)
+				if len(appended) > 0 {
+					key.Appended = appended
+				}
+				exclude, _ := v1["exclude"].([]string)
+				if len(exclude) > 0 {
+					key.Exclude = exclude
+				}
+				keys = append(keys, &key)
+			}
+			if len(keyWord) > 0 {
+				dataOne.Keywords = keys
+			}
+			data.Data = append(data.Data, &dataOne)
+		}
+	}
+	return data
+}
+
+func ScreeningDelete(infoId string) *bxsubscribe.StatusResp {
+	id := encrypt.SE.Decode4Hex(infoId)
+	qy := map[string]interface{}{
+		"filterSave": -1,
+	}
+	data := new(bxsubscribe.StatusResp)
+	if !IC.Mgo.UpdateById("export_search", id, qy) {
+		log.Printf("删除自主导出筛选条件失败:%s", infoId)
+		data.ErrorCode = -1
+		data.ErrorMsg = "删除自主导出筛选条件失败"
+	}
+	return data
+}

+ 534 - 80
jyBXSubscribe/rpc/type/bxsubscribe/bxsubscribe.pb.go

@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.28.0
+// 	protoc-gen-go v1.28.1
 // 	protoc        v3.19.4
 // source: bxsubscribe.proto
 
@@ -664,7 +664,6 @@ func (x *SubscribeInfo) GetSpiderCode() string {
 	return ""
 }
 
-//
 type WinnerInfo struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -736,7 +735,6 @@ func (x *WinnerInfo) GetWinnerId() string {
 	return ""
 }
 
-//
 type SomeInfoReq struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -990,7 +988,6 @@ func (x *SomeInfo) GetUserId() string {
 	return ""
 }
 
-//
 type StatusResp struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -1252,7 +1249,7 @@ func (x *UpdateSubScribeInfoReq) GetUserId() string {
 	return ""
 }
 
-//城市
+// 城市
 type CityList struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -1300,7 +1297,7 @@ func (x *CityList) GetCity() []string {
 	return nil
 }
 
-//分类
+// 分类
 type Items struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -1364,7 +1361,7 @@ func (x *Items) GetAKey() []*Keys {
 	return nil
 }
 
-//关键词
+// 关键词
 type Keys struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -1507,7 +1504,7 @@ func (x *KeyItems) GetAKey() []*Key {
 	return nil
 }
 
-//关键词
+// 关键词
 type Key struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -2393,6 +2390,354 @@ func (x *UserStatus) GetDate() string {
 	return ""
 }
 
+type DeriveReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AppId     string `protobuf:"bytes,1,opt,name=appId,proto3" json:"appId,omitempty"`
+	EntId     string `protobuf:"bytes,2,opt,name=entId,proto3" json:"entId,omitempty"`
+	EntUserId string `protobuf:"bytes,3,opt,name=entUserId,proto3" json:"entUserId,omitempty"`
+	UserId    string `protobuf:"bytes,4,opt,name=UserId,proto3" json:"UserId,omitempty"`
+	InfoId    string `protobuf:"bytes,6,opt,name=InfoId,proto3" json:"InfoId,omitempty"`
+}
+
+func (x *DeriveReq) Reset() {
+	*x = DeriveReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_bxsubscribe_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DeriveReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeriveReq) ProtoMessage() {}
+
+func (x *DeriveReq) ProtoReflect() protoreflect.Message {
+	mi := &file_bxsubscribe_proto_msgTypes[26]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeriveReq.ProtoReflect.Descriptor instead.
+func (*DeriveReq) Descriptor() ([]byte, []int) {
+	return file_bxsubscribe_proto_rawDescGZIP(), []int{26}
+}
+
+func (x *DeriveReq) GetAppId() string {
+	if x != nil {
+		return x.AppId
+	}
+	return ""
+}
+
+func (x *DeriveReq) GetEntId() string {
+	if x != nil {
+		return x.EntId
+	}
+	return ""
+}
+
+func (x *DeriveReq) GetEntUserId() string {
+	if x != nil {
+		return x.EntUserId
+	}
+	return ""
+}
+
+func (x *DeriveReq) GetUserId() string {
+	if x != nil {
+		return x.UserId
+	}
+	return ""
+}
+
+func (x *DeriveReq) GetInfoId() string {
+	if x != nil {
+		return x.InfoId
+	}
+	return ""
+}
+
+type DeriveRes 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    []*Derive `protobuf:"bytes,3,rep,name=data,proto3" json:"data,omitempty"` //分发人员
+}
+
+func (x *DeriveRes) Reset() {
+	*x = DeriveRes{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_bxsubscribe_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DeriveRes) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeriveRes) ProtoMessage() {}
+
+func (x *DeriveRes) ProtoReflect() protoreflect.Message {
+	mi := &file_bxsubscribe_proto_msgTypes[27]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeriveRes.ProtoReflect.Descriptor instead.
+func (*DeriveRes) Descriptor() ([]byte, []int) {
+	return file_bxsubscribe_proto_rawDescGZIP(), []int{27}
+}
+
+func (x *DeriveRes) GetErrCode() int64 {
+	if x != nil {
+		return x.ErrCode
+	}
+	return 0
+}
+
+func (x *DeriveRes) GetErrMsg() string {
+	if x != nil {
+		return x.ErrMsg
+	}
+	return ""
+}
+
+func (x *DeriveRes) GetData() []*Derive {
+	if x != nil {
+		return x.Data
+	}
+	return nil
+}
+
+type Derive struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	XId        string     `protobuf:"bytes,1,opt,name=_id,json=Id,proto3" json:"_id,omitempty"`
+	Region     string     `protobuf:"bytes,2,opt,name=region,proto3" json:"region,omitempty"`
+	Area       string     `protobuf:"bytes,3,opt,name=area,proto3" json:"area,omitempty"`
+	Maxprice   string     `protobuf:"bytes,4,opt,name=maxprice,proto3" json:"maxprice,omitempty"`
+	Winner     string     `protobuf:"bytes,6,opt,name=winner,proto3" json:"winner,omitempty"`
+	Industry   string     `protobuf:"bytes,7,opt,name=industry,proto3" json:"industry,omitempty"`
+	Minprice   string     `protobuf:"bytes,8,opt,name=minprice,proto3" json:"minprice,omitempty"`
+	Buyer      string     `protobuf:"bytes,9,opt,name=buyer,proto3" json:"buyer,omitempty"`
+	Buyerclass string     `protobuf:"bytes,10,opt,name=buyerclass,proto3" json:"buyerclass,omitempty"`
+	Keywords   []*KeyWord `protobuf:"bytes,11,rep,name=keywords,proto3" json:"keywords,omitempty"`
+	SelectType string     `protobuf:"bytes,12,opt,name=selectType,proto3" json:"selectType,omitempty"`
+	Subtype    string     `protobuf:"bytes,13,opt,name=subtype,proto3" json:"subtype,omitempty"`
+	City       string     `protobuf:"bytes,14,opt,name=city,proto3" json:"city,omitempty"`
+}
+
+func (x *Derive) Reset() {
+	*x = Derive{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_bxsubscribe_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Derive) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Derive) ProtoMessage() {}
+
+func (x *Derive) ProtoReflect() protoreflect.Message {
+	mi := &file_bxsubscribe_proto_msgTypes[28]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Derive.ProtoReflect.Descriptor instead.
+func (*Derive) Descriptor() ([]byte, []int) {
+	return file_bxsubscribe_proto_rawDescGZIP(), []int{28}
+}
+
+func (x *Derive) GetXId() string {
+	if x != nil {
+		return x.XId
+	}
+	return ""
+}
+
+func (x *Derive) GetRegion() string {
+	if x != nil {
+		return x.Region
+	}
+	return ""
+}
+
+func (x *Derive) GetArea() string {
+	if x != nil {
+		return x.Area
+	}
+	return ""
+}
+
+func (x *Derive) GetMaxprice() string {
+	if x != nil {
+		return x.Maxprice
+	}
+	return ""
+}
+
+func (x *Derive) GetWinner() string {
+	if x != nil {
+		return x.Winner
+	}
+	return ""
+}
+
+func (x *Derive) GetIndustry() string {
+	if x != nil {
+		return x.Industry
+	}
+	return ""
+}
+
+func (x *Derive) GetMinprice() string {
+	if x != nil {
+		return x.Minprice
+	}
+	return ""
+}
+
+func (x *Derive) GetBuyer() string {
+	if x != nil {
+		return x.Buyer
+	}
+	return ""
+}
+
+func (x *Derive) GetBuyerclass() string {
+	if x != nil {
+		return x.Buyerclass
+	}
+	return ""
+}
+
+func (x *Derive) GetKeywords() []*KeyWord {
+	if x != nil {
+		return x.Keywords
+	}
+	return nil
+}
+
+func (x *Derive) GetSelectType() string {
+	if x != nil {
+		return x.SelectType
+	}
+	return ""
+}
+
+func (x *Derive) GetSubtype() string {
+	if x != nil {
+		return x.Subtype
+	}
+	return ""
+}
+
+func (x *Derive) GetCity() string {
+	if x != nil {
+		return x.City
+	}
+	return ""
+}
+
+type KeyWord struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Keyword  string   `protobuf:"bytes,1,opt,name=keyword,proto3" json:"keyword,omitempty"`
+	Appended []string `protobuf:"bytes,2,rep,name=appended,proto3" json:"appended,omitempty"`
+	Exclude  []string `protobuf:"bytes,3,rep,name=exclude,proto3" json:"exclude,omitempty"`
+}
+
+func (x *KeyWord) Reset() {
+	*x = KeyWord{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_bxsubscribe_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *KeyWord) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*KeyWord) ProtoMessage() {}
+
+func (x *KeyWord) ProtoReflect() protoreflect.Message {
+	mi := &file_bxsubscribe_proto_msgTypes[29]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use KeyWord.ProtoReflect.Descriptor instead.
+func (*KeyWord) Descriptor() ([]byte, []int) {
+	return file_bxsubscribe_proto_rawDescGZIP(), []int{29}
+}
+
+func (x *KeyWord) GetKeyword() string {
+	if x != nil {
+		return x.Keyword
+	}
+	return ""
+}
+
+func (x *KeyWord) GetAppended() []string {
+	if x != nil {
+		return x.Appended
+	}
+	return nil
+}
+
+func (x *KeyWord) GetExclude() []string {
+	if x != nil {
+		return x.Exclude
+	}
+	return nil
+}
+
 var File_bxsubscribe_proto protoreflect.FileDescriptor
 
 var file_bxsubscribe_proto_rawDesc = []byte{
@@ -2725,51 +3070,102 @@ var file_bxsubscribe_proto_rawDesc = []byte{
 	0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x69, 0x73, 0x69, 0x74, 0x74, 0x69, 0x6d, 0x65, 0x18,
 	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x69, 0x73, 0x69, 0x74, 0x74, 0x69, 0x6d, 0x65,
 	0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x64, 0x61, 0x74, 0x65, 0x32, 0xa6, 0x05, 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, 0x12, 0x49, 0x0a, 0x0e, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x74,
-	0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x12, 0x1e, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73,
-	0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62,
-	0x75, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73,
+	0x64, 0x61, 0x74, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x52,
+	0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x49,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c,
+	0x0a, 0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x09, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06,
+	0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73,
+	0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x49, 0x6e, 0x66, 0x6f, 0x49, 0x64, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x49, 0x6e, 0x66, 0x6f, 0x49, 0x64, 0x22, 0x68, 0x0a, 0x09,
+	0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 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, 0x27, 0x0a,
+	0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x62, 0x78,
+	0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65,
+	0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xe7, 0x02, 0x0a, 0x06, 0x44, 0x65, 0x72, 0x69, 0x76,
+	0x65, 0x12, 0x0f, 0x0a, 0x03, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
+	0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72,
+	0x65, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x65, 0x61, 0x12, 0x1a,
+	0x0a, 0x08, 0x6d, 0x61, 0x78, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x08, 0x6d, 0x61, 0x78, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x69,
+	0x6e, 0x6e, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x69, 0x6e, 0x6e,
+	0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x18, 0x07,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, 0x12, 0x1a,
+	0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x08, 0x6d, 0x69, 0x6e, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x75,
+	0x79, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x62, 0x75, 0x79, 0x65, 0x72,
+	0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x0a,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x79, 0x65, 0x72, 0x63, 0x6c, 0x61, 0x73, 0x73,
+	0x12, 0x30, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x14, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
+	0x2e, 0x6b, 0x65, 0x79, 0x57, 0x6f, 0x72, 0x64, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72,
+	0x64, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65,
+	0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x54, 0x79,
+	0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04,
+	0x63, 0x69, 0x74, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79,
+	0x22, 0x59, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x57, 0x6f, 0x72, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6b,
+	0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65,
+	0x79, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x65,
+	0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x65,
+	0x64, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x18, 0x03, 0x20, 0x03,
+	0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x32, 0xa2, 0x06, 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, 0x12, 0x49, 0x0a, 0x0e,
+	0x4d, 0x73, 0x67, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x12, 0x1e,
+	0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x4d, 0x73, 0x67,
+	0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 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, 0x4e, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x44, 0x69,
+	0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x12, 0x1e, 0x2e, 0x62, 0x78, 0x73, 0x75,
+	0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x74, 0x72,
+	0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x62, 0x78, 0x73, 0x75,
+	0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75,
+	0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4b, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x69,
+	0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62,
+	0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x69, 0x65, 0x77, 0x53, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73,
+	0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x52, 0x65, 0x73, 0x70, 0x12, 0x3c, 0x0a, 0x0a, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x53, 0x68,
+	0x6f, 0x77, 0x12, 0x16, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
+	0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x62, 0x78, 0x73,
+	0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x52,
+	0x65, 0x73, 0x12, 0x3c, 0x0a, 0x09, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x44, 0x65, 0x6c, 0x12,
+	0x16, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x44, 0x65,
+	0x72, 0x69, 0x76, 0x65, 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, 0x4e, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
-	0x6f, 0x72, 0x12, 0x1e, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
-	0x2e, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x52,
-	0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
-	0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70,
-	0x12, 0x4b, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x69, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75,
-	0x73, 0x12, 0x1d, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e,
-	0x47, 0x65, 0x74, 0x56, 0x69, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71,
-	0x1a, 0x1b, 0x2e, 0x62, 0x78, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x2e, 0x56,
-	0x69, 0x65, 0x77, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 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,
+	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 (
@@ -2784,7 +3180,7 @@ func file_bxsubscribe_proto_rawDescGZIP() []byte {
 	return file_bxsubscribe_proto_rawDescData
 }
 
-var file_bxsubscribe_proto_msgTypes = make([]protoimpl.MessageInfo, 27)
+var file_bxsubscribe_proto_msgTypes = make([]protoimpl.MessageInfo, 31)
 var file_bxsubscribe_proto_goTypes = []interface{}{
 	(*SubscribeInfosReq)(nil),      // 0: bxsubscribe.SubscribeInfosReq
 	(*SubscribeInfosResp)(nil),     // 1: bxsubscribe.SubscribeInfosResp
@@ -2812,44 +3208,54 @@ var file_bxsubscribe_proto_goTypes = []interface{}{
 	(*GetViewStatusReq)(nil),       // 23: bxsubscribe.GetViewStatusReq
 	(*ViewStatusResp)(nil),         // 24: bxsubscribe.ViewStatusResp
 	(*UserStatus)(nil),             // 25: bxsubscribe.UserStatus
-	nil,                            // 26: bxsubscribe.UpdateSubScribeInfoReq.AreaEntry
+	(*DeriveReq)(nil),              // 26: bxsubscribe.DeriveReq
+	(*DeriveRes)(nil),              // 27: bxsubscribe.DeriveRes
+	(*Derive)(nil),                 // 28: bxsubscribe.Derive
+	(*KeyWord)(nil),                // 29: bxsubscribe.keyWord
+	nil,                            // 30: 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
 	4,  // 2: bxsubscribe.subscribeInfo.winnerInfo:type_name -> bxsubscribe.WinnerInfo
 	7,  // 3: bxsubscribe.SomeInfoResp.data:type_name -> bxsubscribe.SomeInfo
-	26, // 4: bxsubscribe.UpdateSubScribeInfoReq.area:type_name -> bxsubscribe.UpdateSubScribeInfoReq.AreaEntry
+	30, // 4: bxsubscribe.UpdateSubScribeInfoReq.area:type_name -> bxsubscribe.UpdateSubScribeInfoReq.AreaEntry
 	12, // 5: bxsubscribe.UpdateSubScribeInfoReq.items:type_name -> bxsubscribe.Items
 	13, // 6: bxsubscribe.Items.a_key:type_name -> bxsubscribe.Keys
 	15, // 7: bxsubscribe.KeyItems.a_key:type_name -> bxsubscribe.Key
 	14, // 8: bxsubscribe.KeyResp.items:type_name -> bxsubscribe.KeyItems
 	22, // 9: bxsubscribe.DistributorResp.items:type_name -> bxsubscribe.userResp
 	25, // 10: bxsubscribe.ViewStatusResp.items:type_name -> bxsubscribe.UserStatus
-	11, // 11: bxsubscribe.UpdateSubScribeInfoReq.AreaEntry.value:type_name -> bxsubscribe.CityList
-	0,  // 12: bxsubscribe.Bxsubscribe.GetSubList:input_type -> bxsubscribe.SubscribeInfosReq
-	5,  // 13: bxsubscribe.Bxsubscribe.GetSubSomeInfo:input_type -> bxsubscribe.SomeInfoReq
-	10, // 14: bxsubscribe.Bxsubscribe.UpdateSubScribeInfo:input_type -> bxsubscribe.UpdateSubScribeInfoReq
-	0,  // 15: bxsubscribe.Bxsubscribe.ByPushHistory:input_type -> bxsubscribe.SubscribeInfosReq
-	16, // 16: bxsubscribe.Bxsubscribe.SetRead:input_type -> bxsubscribe.SetReadReq
-	17, // 17: bxsubscribe.Bxsubscribe.GetKey:input_type -> bxsubscribe.GetKeyReq
-	19, // 18: bxsubscribe.Bxsubscribe.MsgDistributor:input_type -> bxsubscribe.MsgDistributorReq
-	18, // 19: bxsubscribe.Bxsubscribe.GetDistributor:input_type -> bxsubscribe.GetDistributorReq
-	23, // 20: bxsubscribe.Bxsubscribe.GetViewStatus:input_type -> bxsubscribe.GetViewStatusReq
-	1,  // 21: bxsubscribe.Bxsubscribe.GetSubList:output_type -> bxsubscribe.SubscribeInfosResp
-	6,  // 22: bxsubscribe.Bxsubscribe.GetSubSomeInfo:output_type -> bxsubscribe.SomeInfoResp
-	8,  // 23: bxsubscribe.Bxsubscribe.UpdateSubScribeInfo:output_type -> bxsubscribe.StatusResp
-	9,  // 24: bxsubscribe.Bxsubscribe.ByPushHistory:output_type -> bxsubscribe.ByPushHistoryResp
-	8,  // 25: bxsubscribe.Bxsubscribe.SetRead:output_type -> bxsubscribe.StatusResp
-	20, // 26: bxsubscribe.Bxsubscribe.GetKey:output_type -> bxsubscribe.KeyResp
-	8,  // 27: bxsubscribe.Bxsubscribe.MsgDistributor:output_type -> bxsubscribe.StatusResp
-	21, // 28: bxsubscribe.Bxsubscribe.GetDistributor:output_type -> bxsubscribe.DistributorResp
-	24, // 29: bxsubscribe.Bxsubscribe.GetViewStatus:output_type -> bxsubscribe.ViewStatusResp
-	21, // [21:30] is the sub-list for method output_type
-	12, // [12:21] is the sub-list for method input_type
-	12, // [12:12] is the sub-list for extension type_name
-	12, // [12:12] is the sub-list for extension extendee
-	0,  // [0:12] is the sub-list for field type_name
+	28, // 11: bxsubscribe.DeriveRes.data:type_name -> bxsubscribe.Derive
+	29, // 12: bxsubscribe.Derive.keywords:type_name -> bxsubscribe.keyWord
+	11, // 13: bxsubscribe.UpdateSubScribeInfoReq.AreaEntry.value:type_name -> bxsubscribe.CityList
+	0,  // 14: bxsubscribe.Bxsubscribe.GetSubList:input_type -> bxsubscribe.SubscribeInfosReq
+	5,  // 15: bxsubscribe.Bxsubscribe.GetSubSomeInfo:input_type -> bxsubscribe.SomeInfoReq
+	10, // 16: bxsubscribe.Bxsubscribe.UpdateSubScribeInfo:input_type -> bxsubscribe.UpdateSubScribeInfoReq
+	0,  // 17: bxsubscribe.Bxsubscribe.ByPushHistory:input_type -> bxsubscribe.SubscribeInfosReq
+	16, // 18: bxsubscribe.Bxsubscribe.SetRead:input_type -> bxsubscribe.SetReadReq
+	17, // 19: bxsubscribe.Bxsubscribe.GetKey:input_type -> bxsubscribe.GetKeyReq
+	19, // 20: bxsubscribe.Bxsubscribe.MsgDistributor:input_type -> bxsubscribe.MsgDistributorReq
+	18, // 21: bxsubscribe.Bxsubscribe.GetDistributor:input_type -> bxsubscribe.GetDistributorReq
+	23, // 22: bxsubscribe.Bxsubscribe.GetViewStatus:input_type -> bxsubscribe.GetViewStatusReq
+	26, // 23: bxsubscribe.Bxsubscribe.deriveShow:input_type -> bxsubscribe.DeriveReq
+	26, // 24: bxsubscribe.Bxsubscribe.deriveDel:input_type -> bxsubscribe.DeriveReq
+	1,  // 25: bxsubscribe.Bxsubscribe.GetSubList:output_type -> bxsubscribe.SubscribeInfosResp
+	6,  // 26: bxsubscribe.Bxsubscribe.GetSubSomeInfo:output_type -> bxsubscribe.SomeInfoResp
+	8,  // 27: bxsubscribe.Bxsubscribe.UpdateSubScribeInfo:output_type -> bxsubscribe.StatusResp
+	9,  // 28: bxsubscribe.Bxsubscribe.ByPushHistory:output_type -> bxsubscribe.ByPushHistoryResp
+	8,  // 29: bxsubscribe.Bxsubscribe.SetRead:output_type -> bxsubscribe.StatusResp
+	20, // 30: bxsubscribe.Bxsubscribe.GetKey:output_type -> bxsubscribe.KeyResp
+	8,  // 31: bxsubscribe.Bxsubscribe.MsgDistributor:output_type -> bxsubscribe.StatusResp
+	21, // 32: bxsubscribe.Bxsubscribe.GetDistributor:output_type -> bxsubscribe.DistributorResp
+	24, // 33: bxsubscribe.Bxsubscribe.GetViewStatus:output_type -> bxsubscribe.ViewStatusResp
+	27, // 34: bxsubscribe.Bxsubscribe.deriveShow:output_type -> bxsubscribe.DeriveRes
+	8,  // 35: bxsubscribe.Bxsubscribe.deriveDel:output_type -> bxsubscribe.StatusResp
+	25, // [25:36] is the sub-list for method output_type
+	14, // [14:25] is the sub-list for method input_type
+	14, // [14:14] is the sub-list for extension type_name
+	14, // [14:14] is the sub-list for extension extendee
+	0,  // [0:14] is the sub-list for field type_name
 }
 
 func init() { file_bxsubscribe_proto_init() }
@@ -3170,6 +3576,54 @@ func file_bxsubscribe_proto_init() {
 				return nil
 			}
 		}
+		file_bxsubscribe_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DeriveReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_bxsubscribe_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DeriveRes); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_bxsubscribe_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Derive); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_bxsubscribe_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*KeyWord); 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{
@@ -3177,7 +3631,7 @@ func file_bxsubscribe_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_bxsubscribe_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   27,
+			NumMessages:   31,
 			NumExtensions: 0,
 			NumServices:   1,
 		},

+ 94 - 18
jyBXSubscribe/rpc/type/bxsubscribe/bxsubscribe_grpc.pb.go

@@ -22,24 +22,28 @@ 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)
+	// 自动数据导出筛选条件查询
+	DeriveShow(ctx context.Context, in *DeriveReq, opts ...grpc.CallOption) (*DeriveRes, error)
+	// 删除自动数据导出筛选条件
+	DeriveDel(ctx context.Context, in *DeriveReq, opts ...grpc.CallOption) (*StatusResp, error)
 }
 
 type bxsubscribeClient struct {
@@ -131,28 +135,50 @@ func (c *bxsubscribeClient) GetViewStatus(ctx context.Context, in *GetViewStatus
 	return out, nil
 }
 
+func (c *bxsubscribeClient) DeriveShow(ctx context.Context, in *DeriveReq, opts ...grpc.CallOption) (*DeriveRes, error) {
+	out := new(DeriveRes)
+	err := c.cc.Invoke(ctx, "/bxsubscribe.Bxsubscribe/deriveShow", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *bxsubscribeClient) DeriveDel(ctx context.Context, in *DeriveReq, opts ...grpc.CallOption) (*StatusResp, error) {
+	out := new(StatusResp)
+	err := c.cc.Invoke(ctx, "/bxsubscribe.Bxsubscribe/deriveDel", 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)
+	// 自动数据导出筛选条件查询
+	DeriveShow(context.Context, *DeriveReq) (*DeriveRes, error)
+	// 删除自动数据导出筛选条件
+	DeriveDel(context.Context, *DeriveReq) (*StatusResp, error)
 	mustEmbedUnimplementedBxsubscribeServer()
 }
 
@@ -187,6 +213,12 @@ func (UnimplementedBxsubscribeServer) GetDistributor(context.Context, *GetDistri
 func (UnimplementedBxsubscribeServer) GetViewStatus(context.Context, *GetViewStatusReq) (*ViewStatusResp, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetViewStatus not implemented")
 }
+func (UnimplementedBxsubscribeServer) DeriveShow(context.Context, *DeriveReq) (*DeriveRes, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeriveShow not implemented")
+}
+func (UnimplementedBxsubscribeServer) DeriveDel(context.Context, *DeriveReq) (*StatusResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeriveDel not implemented")
+}
 func (UnimplementedBxsubscribeServer) mustEmbedUnimplementedBxsubscribeServer() {}
 
 // UnsafeBxsubscribeServer may be embedded to opt out of forward compatibility for this service.
@@ -362,6 +394,42 @@ func _Bxsubscribe_GetViewStatus_Handler(srv interface{}, ctx context.Context, de
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Bxsubscribe_DeriveShow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeriveReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BxsubscribeServer).DeriveShow(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/bxsubscribe.Bxsubscribe/deriveShow",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BxsubscribeServer).DeriveShow(ctx, req.(*DeriveReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Bxsubscribe_DeriveDel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeriveReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BxsubscribeServer).DeriveDel(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/bxsubscribe.Bxsubscribe/deriveDel",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BxsubscribeServer).DeriveDel(ctx, req.(*DeriveReq))
+	}
+	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)
@@ -405,6 +473,14 @@ var Bxsubscribe_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "GetViewStatus",
 			Handler:    _Bxsubscribe_GetViewStatus_Handler,
 		},
+		{
+			MethodName: "deriveShow",
+			Handler:    _Bxsubscribe_DeriveShow_Handler,
+		},
+		{
+			MethodName: "deriveDel",
+			Handler:    _Bxsubscribe_DeriveDel_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "bxsubscribe.proto",