浏览代码

Merge remote-tracking branch 'origin/master'

WH01243 3 年之前
父节点
当前提交
1ec09c6794

+ 3 - 3
api/medical/internal/handler/public/claimhandler.go → api/medical/internal/handler/public/distributorclaimhandler.go

@@ -9,7 +9,7 @@ import (
 	"github.com/zeromicro/go-zero/rest/httpx"
 )
 
-func ClaimHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+func DistributorClaimHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
 	return func(w http.ResponseWriter, r *http.Request) {
 		var req types.ClaimReq
 		if err := httpx.Parse(r, &req); err != nil {
@@ -17,8 +17,8 @@ func ClaimHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
 			return
 		}
 
-		l := public.NewClaimLogic(r.Context(), svcCtx)
-		resp, err := l.Claim(&req)
+		l := public.NewDistributorClaimLogic(r.Context(), svcCtx)
+		resp, err := l.DistributorClaim(&req)
 		if err != nil {
 			httpx.Error(w, err)
 		} else {

+ 28 - 0
api/medical/internal/handler/public/distributorunclaimedhandler.go

@@ -0,0 +1,28 @@
+package public
+
+import (
+	"net/http"
+
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/api/medical/internal/logic/public"
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/api/medical/internal/svc"
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/api/medical/internal/types"
+	"github.com/zeromicro/go-zero/rest/httpx"
+)
+
+func DistributorUnclaimedHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.ClaimReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := public.NewDistributorUnclaimedLogic(r.Context(), svcCtx)
+		resp, err := l.DistributorUnclaimed(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 4 - 4
api/medical/internal/handler/public/unclaimedhandler.go → api/medical/internal/handler/public/institutionclaimhandler.go

@@ -9,16 +9,16 @@ import (
 	"github.com/zeromicro/go-zero/rest/httpx"
 )
 
-func UnclaimedHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+func InstitutionclaimHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
 	return func(w http.ResponseWriter, r *http.Request) {
-		var req types.UnclaimedReq
+		var req types.ClaimReq
 		if err := httpx.Parse(r, &req); err != nil {
 			httpx.Error(w, err)
 			return
 		}
 
-		l := public.NewUnclaimedLogic(r.Context(), svcCtx)
-		resp, err := l.Unclaimed(&req)
+		l := public.NewInstitutionclaimLogic(r.Context(), svcCtx)
+		resp, err := l.Institutionclaim(&req)
 		if err != nil {
 			httpx.Error(w, err)
 		} else {

+ 28 - 0
api/medical/internal/handler/public/institutionunclaimedhandler.go

@@ -0,0 +1,28 @@
+package public
+
+import (
+	"net/http"
+
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/api/medical/internal/logic/public"
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/api/medical/internal/svc"
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/api/medical/internal/types"
+	"github.com/zeromicro/go-zero/rest/httpx"
+)
+
+func InstitutionUnclaimedHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.ClaimReq
+		if err := httpx.Parse(r, &req); err != nil {
+			httpx.Error(w, err)
+			return
+		}
+
+		l := public.NewInstitutionUnclaimedLogic(r.Context(), svcCtx)
+		resp, err := l.InstitutionUnclaimed(&req)
+		if err != nil {
+			httpx.Error(w, err)
+		} else {
+			httpx.OkJson(w, resp)
+		}
+	}
+}

+ 14 - 4
api/medical/internal/handler/routes.go

@@ -75,13 +75,23 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 		[]rest.Route{
 			{
 				Method:  http.MethodPost,
-				Path:    "/claim",
-				Handler: public.ClaimHandler(serverCtx),
+				Path:    "/institution/claim",
+				Handler: public.InstitutionclaimHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,
-				Path:    "/unclaimed",
-				Handler: public.UnclaimedHandler(serverCtx),
+				Path:    "/distributor/claim",
+				Handler: public.DistributorClaimHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/institution/unclaimed",
+				Handler: public.InstitutionUnclaimedHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/distributor/unclaimed",
+				Handler: public.DistributorUnclaimedHandler(serverCtx),
 			},
 			{
 				Method:  http.MethodPost,

+ 8 - 9
api/medical/internal/logic/public/claimlogic.go → api/medical/internal/logic/public/distributorclaimlogic.go

@@ -2,35 +2,35 @@ package public
 
 import (
 	"app.yhyue.com/moapp/jybase/encrypt"
-	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/api/medical/internal/svc"
-	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/api/medical/internal/types"
 	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/entity"
 	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/rpc/medical/medical"
 	"context"
 
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/api/medical/internal/svc"
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/api/medical/internal/types"
+
 	"github.com/zeromicro/go-zero/core/logx"
 )
 
-type ClaimLogic struct {
+type DistributorClaimLogic struct {
 	logx.Logger
 	ctx    context.Context
 	svcCtx *svc.ServiceContext
 }
 
-func NewClaimLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ClaimLogic {
-	return &ClaimLogic{
+func NewDistributorClaimLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DistributorClaimLogic {
+	return &DistributorClaimLogic{
 		Logger: logx.WithContext(ctx),
 		ctx:    ctx,
 		svcCtx: svcCtx,
 	}
 }
 
-// Claim 认领
-func (l *ClaimLogic) Claim(req *types.ClaimReq) (resp *types.ClaimResp, err error) {
+func (l *DistributorClaimLogic) DistributorClaim(req *types.ClaimReq) (resp *types.ClaimResp, err error) {
 	rs, err := l.svcCtx.Medical.Claim(l.ctx, &medical.ClaimReq{
 		UserId: int64(req.UserId),
 		EntId:  encrypt.SE.DecodeString(req.EntId),
-		Type:   int64(req.Type),
+		Type:   entity.TypeDistributor,
 		AppId:  req.AppId,
 	})
 	if err != nil || rs == nil {
@@ -47,5 +47,4 @@ func (l *ClaimLogic) Claim(req *types.ClaimReq) (resp *types.ClaimResp, err erro
 		ResourceNum: int(rs.ResourceNum),
 		ResourceIds: int(rs.ResourceIds),
 	}, nil
-
 }

+ 50 - 0
api/medical/internal/logic/public/distributorunclaimedlogic.go

@@ -0,0 +1,50 @@
+package public
+
+import (
+	"app.yhyue.com/moapp/jybase/encrypt"
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/entity"
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/rpc/medical/medical"
+	"context"
+
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/api/medical/internal/svc"
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/api/medical/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type DistributorUnclaimedLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewDistributorUnclaimedLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DistributorUnclaimedLogic {
+	return &DistributorUnclaimedLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *DistributorUnclaimedLogic) DistributorUnclaimed(req *types.ClaimReq) (resp *types.ClaimResp, err error) {
+	rs, err := l.svcCtx.Medical.UnClaimed(l.ctx, &medical.ClaimReq{
+		UserId: int64(req.UserId),
+		EntId:  encrypt.SE.DecodeString(req.EntId),
+		Type:   entity.TypeDistributor,
+		AppId:  req.AppId,
+	})
+	if err != nil || rs == nil {
+		return &types.ClaimResp{
+			Error_msg:   "操作失败",
+			Error_code:  entity.ERRORCODE,
+			ResourceNum: 0,
+			ResourceIds: 0,
+		}, nil
+	}
+	return &types.ClaimResp{
+		Error_msg:   rs.ErrorMsg,
+		Error_code:  int(rs.ErrorCode),
+		ResourceIds: int(rs.ResourceIds),
+		ResourceNum: int(rs.ResourceNum),
+	}, nil
+}

+ 9 - 9
api/medical/internal/logic/public/unclaimedlogic.go → api/medical/internal/logic/public/institutionclaimlogic.go

@@ -1,7 +1,6 @@
 package public
 
 import (
-	"app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/entity"
 	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/rpc/medical/medical"
@@ -13,25 +12,26 @@ import (
 	"github.com/zeromicro/go-zero/core/logx"
 )
 
-type UnclaimedLogic struct {
+type InstitutionclaimLogic struct {
 	logx.Logger
 	ctx    context.Context
 	svcCtx *svc.ServiceContext
 }
 
-func NewUnclaimedLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UnclaimedLogic {
-	return &UnclaimedLogic{
+func NewInstitutionclaimLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InstitutionclaimLogic {
+	return &InstitutionclaimLogic{
 		Logger: logx.WithContext(ctx),
 		ctx:    ctx,
 		svcCtx: svcCtx,
 	}
 }
 
-// Unclaimed 取消认领
-func (l *UnclaimedLogic) Unclaimed(req *types.UnclaimedReq) (resp *types.ClaimResp, err error) {
-	rs, err := l.svcCtx.Medical.UnClaimed(l.ctx, &medical.UnclaimedReq{
+func (l *InstitutionclaimLogic) Institutionclaim(req *types.ClaimReq) (resp *types.ClaimResp, err error) {
+	rs, err := l.svcCtx.Medical.Claim(l.ctx, &medical.ClaimReq{
 		UserId: int64(req.UserId),
-		Id:     common.Int64All(encrypt.SE.DecodeString(req.Id)),
+		EntId:  encrypt.SE.DecodeString(req.EntId),
+		Type:   entity.TypeInstitution,
+		AppId:  req.AppId,
 	})
 	if err != nil || rs == nil {
 		return &types.ClaimResp{
@@ -44,7 +44,7 @@ func (l *UnclaimedLogic) Unclaimed(req *types.UnclaimedReq) (resp *types.ClaimRe
 	return &types.ClaimResp{
 		Error_msg:   rs.ErrorMsg,
 		Error_code:  int(rs.ErrorCode),
-		ResourceIds: int(rs.ResourceIds),
 		ResourceNum: int(rs.ResourceNum),
+		ResourceIds: int(rs.ResourceIds),
 	}, nil
 }

+ 50 - 0
api/medical/internal/logic/public/institutionunclaimedlogic.go

@@ -0,0 +1,50 @@
+package public
+
+import (
+	"app.yhyue.com/moapp/jybase/encrypt"
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/entity"
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/rpc/medical/medical"
+	"context"
+
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/api/medical/internal/svc"
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/api/medical/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type InstitutionUnclaimedLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewInstitutionUnclaimedLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InstitutionUnclaimedLogic {
+	return &InstitutionUnclaimedLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+	}
+}
+
+func (l *InstitutionUnclaimedLogic) InstitutionUnclaimed(req *types.ClaimReq) (resp *types.ClaimResp, err error) {
+	rs, err := l.svcCtx.Medical.UnClaimed(l.ctx, &medical.ClaimReq{
+		UserId: int64(req.UserId),
+		EntId:  encrypt.SE.DecodeString(req.EntId),
+		Type:   entity.TypeInstitution,
+		AppId:  req.AppId,
+	})
+	if err != nil || rs == nil {
+		return &types.ClaimResp{
+			Error_msg:   "操作失败",
+			Error_code:  entity.ERRORCODE,
+			ResourceNum: 0,
+			ResourceIds: 0,
+		}, nil
+	}
+	return &types.ClaimResp{
+		Error_msg:   rs.ErrorMsg,
+		Error_code:  int(rs.ErrorCode),
+		ResourceIds: int(rs.ResourceIds),
+		ResourceNum: int(rs.ResourceNum),
+	}, nil
+}

+ 2 - 8
api/medical/internal/types/types.go

@@ -63,15 +63,9 @@ type DistributorProductsReq struct {
 }
 
 type ClaimReq struct {
-	Type   int    `json:"type,options=1|2"` // 1 医疗机构 2 经销商
-	EntId  string `json:"ent_id"`           // 企业标识
-	UserId int    `header:"newUserId"`      // 用户id
-	AppId  string `header:"appId"`          // appid
-}
-
-type UnclaimedReq struct {
+	EntId  string `json:"ent_id"`      // 企业标识
 	UserId int    `header:"newUserId"` // 用户id
-	Id     string `json:"id"`
+	AppId  string `header:"appId"`     // appid
 }
 
 type ClaimResp struct {

+ 12 - 14
api/medical/medical.api

@@ -64,19 +64,13 @@ type DistributorProductsReq {
 	Page      int    `json:"page,optional"`      // 页码
 	PageSize  int    `json:"page_size,optional"` // 每页条数
 }
-// 认领
+// 认领/取消认领
 type ClaimReq {
-	Type   int    `json:"type,options=1|2"` // 1 医疗机构 2 经销商
-	EntId  string `json:"ent_id"`           // 企业标识
-	UserId int    `header:"newUserId"`      // 用户id
-	AppId  string `header:"appId"`          // appid
-}
-
-// 取消认领
-type UnclaimedReq {
+	EntId  string `json:"ent_id"`      // 企业标识
 	UserId int    `header:"newUserId"` // 用户id
-	Id     string `json:"id"`
+	AppId  string `header:"appId"`     // appid
 }
+
 type ClaimResp {
 	Error_code  int    `json:"error_code"`
 	Error_msg   string `json:"error_msg"`
@@ -138,10 +132,14 @@ service medical-api {
 	prefix: domain
 )
 service medical-api {
-	@handler claim
-	post /claim (ClaimReq) returns (ClaimResp); 	// 认领
-	@handler unclaimed
-	post /unclaimed (UnclaimedReq) returns (ClaimResp); // 取消认领
+	@handler institutionclaim
+	post /institution/claim (ClaimReq) returns (ClaimResp); 	// 认领
+	@handler distributorClaim
+	post /distributor/claim (ClaimReq) returns (ClaimResp); 	// 认领
+	@handler institutionUnclaimed
+	post /institution/unclaimed (ClaimReq) returns (ClaimResp); // 机构取消认领
+	@handler distributorUnclaimed
+	post /distributor/unclaimed (ClaimReq) returns (ClaimResp); // 经销商取消认领
 	@handler isClaimed
 	post /isClaimed (IsClaimedReq) returns (ClaimResp); // 是否认领
 	

+ 3 - 3
rpc/medical/internal/logic/unclaimedlogic.go

@@ -24,8 +24,8 @@ func NewUnClaimedLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UnClaim
 }
 
 // UnClaimed 取消认领(经销商/医疗机构)
-func (l *UnClaimedLogic) UnClaimed(in *medical.UnclaimedReq) (*medical.ClaimResp, error) {
-	rs := l.svcCtx.EntClaimSrv.Unclaimed(int(in.Id), int(in.UserId))
+func (l *UnClaimedLogic) UnClaimed(in *medical.ClaimReq) (*medical.ClaimResp, error) {
+	rs, id := l.svcCtx.EntClaimSrv.UnclaimedByEnt(int(in.UserId), in.EntId, int(in.Type))
 	if !rs {
 		return &medical.ClaimResp{
 			ErrorMsg:    "操作失败",
@@ -38,6 +38,6 @@ func (l *UnClaimedLogic) UnClaimed(in *medical.UnclaimedReq) (*medical.ClaimResp
 		ErrorMsg:    "",
 		ErrorCode:   entity.SUCCESSCODE,
 		ResourceNum: 1,
-		ResourceIds: in.Id,
+		ResourceIds: int64(id),
 	}, nil
 }

+ 1 - 1
rpc/medical/internal/server/medicalserver.go

@@ -65,7 +65,7 @@ func (s *MedicalServer) Claim(ctx context.Context, in *medical.ClaimReq) (*medic
 }
 
 //  取消认领(经销商/医疗机构)
-func (s *MedicalServer) UnClaimed(ctx context.Context, in *medical.UnclaimedReq) (*medical.ClaimResp, error) {
+func (s *MedicalServer) UnClaimed(ctx context.Context, in *medical.ClaimReq) (*medical.ClaimResp, error) {
 	l := logic.NewUnClaimedLogic(ctx, s.svcCtx)
 	return l.UnClaimed(in)
 }

+ 2 - 7
rpc/medical/medical.proto

@@ -144,12 +144,7 @@ message ClaimReq{
   string AppId = 4 ;//appid
 }
 
-// 取消认领
-message UnclaimedReq{
-  int64  UserId = 1 ;// 用户id
-  int64  Id = 2; // 认领记录id
-  string AppId = 3 ;//appid
-}
+
 //
 message ClaimResp{
   int64           ErrorCode = 1;  // 响应代码
@@ -249,7 +244,7 @@ service Medical {
       // 认领(经销商/医疗机构)
       rpc Claim(ClaimReq) returns(ClaimResp);
       // 取消认领(经销商/医疗机构)
-      rpc UnClaimed(UnclaimedReq) returns(ClaimResp);
+      rpc UnClaimed(ClaimReq) returns(ClaimResp);
       // 是否认领(经销商/医疗机构)
       rpc IsClaimed(IsClaimedReq) returns(IsClaimedResp);
       // 我认领的经销商列表

+ 2 - 2
rpc/medical/medical/medical.go

@@ -27,7 +27,7 @@ type (
 		//  认领(经销商/医疗机构)
 		Claim(ctx context.Context, in *ClaimReq, opts ...grpc.CallOption) (*ClaimResp, error)
 		//  取消认领(经销商/医疗机构)
-		UnClaimed(ctx context.Context, in *UnclaimedReq, opts ...grpc.CallOption) (*ClaimResp, error)
+		UnClaimed(ctx context.Context, in *ClaimReq, opts ...grpc.CallOption) (*ClaimResp, error)
 		//  是否认领(经销商/医疗机构)
 		IsClaimed(ctx context.Context, in *IsClaimedReq, opts ...grpc.CallOption) (*IsClaimedResp, error)
 		//  我认领的经销商列表
@@ -92,7 +92,7 @@ func (m *defaultMedical) Claim(ctx context.Context, in *ClaimReq, opts ...grpc.C
 }
 
 //  取消认领(经销商/医疗机构)
-func (m *defaultMedical) UnClaimed(ctx context.Context, in *UnclaimedReq, opts ...grpc.CallOption) (*ClaimResp, error) {
+func (m *defaultMedical) UnClaimed(ctx context.Context, in *ClaimReq, opts ...grpc.CallOption) (*ClaimResp, error) {
 	client := NewMedicalClient(m.cli.Conn())
 	return client.UnClaimed(ctx, in, opts...)
 }

+ 215 - 297
rpc/medical/medical/medical.pb.go

@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
 // 	protoc-gen-go v1.28.0
-// 	protoc        v3.15.1
+// 	protoc        v3.19.4
 // source: medical.proto
 
 package medical
@@ -1480,70 +1480,6 @@ func (x *ClaimReq) GetAppId() string {
 	return ""
 }
 
-// 取消认领
-type UnclaimedReq struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	UserId int64  `protobuf:"varint,1,opt,name=UserId,proto3" json:"UserId,omitempty"` // 用户id
-	Id     int64  `protobuf:"varint,2,opt,name=Id,proto3" json:"Id,omitempty"`         // 认领记录id
-	AppId  string `protobuf:"bytes,3,opt,name=AppId,proto3" json:"AppId,omitempty"`    //appid
-}
-
-func (x *UnclaimedReq) Reset() {
-	*x = UnclaimedReq{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_medical_proto_msgTypes[19]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *UnclaimedReq) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*UnclaimedReq) ProtoMessage() {}
-
-func (x *UnclaimedReq) ProtoReflect() protoreflect.Message {
-	mi := &file_medical_proto_msgTypes[19]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use UnclaimedReq.ProtoReflect.Descriptor instead.
-func (*UnclaimedReq) Descriptor() ([]byte, []int) {
-	return file_medical_proto_rawDescGZIP(), []int{19}
-}
-
-func (x *UnclaimedReq) GetUserId() int64 {
-	if x != nil {
-		return x.UserId
-	}
-	return 0
-}
-
-func (x *UnclaimedReq) GetId() int64 {
-	if x != nil {
-		return x.Id
-	}
-	return 0
-}
-
-func (x *UnclaimedReq) GetAppId() string {
-	if x != nil {
-		return x.AppId
-	}
-	return ""
-}
-
 //
 type ClaimResp struct {
 	state         protoimpl.MessageState
@@ -1559,7 +1495,7 @@ type ClaimResp struct {
 func (x *ClaimResp) Reset() {
 	*x = ClaimResp{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_medical_proto_msgTypes[20]
+		mi := &file_medical_proto_msgTypes[19]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1572,7 +1508,7 @@ func (x *ClaimResp) String() string {
 func (*ClaimResp) ProtoMessage() {}
 
 func (x *ClaimResp) ProtoReflect() protoreflect.Message {
-	mi := &file_medical_proto_msgTypes[20]
+	mi := &file_medical_proto_msgTypes[19]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1585,7 +1521,7 @@ func (x *ClaimResp) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ClaimResp.ProtoReflect.Descriptor instead.
 func (*ClaimResp) Descriptor() ([]byte, []int) {
-	return file_medical_proto_rawDescGZIP(), []int{20}
+	return file_medical_proto_rawDescGZIP(), []int{19}
 }
 
 func (x *ClaimResp) GetErrorCode() int64 {
@@ -1631,7 +1567,7 @@ type IsClaimedReq struct {
 func (x *IsClaimedReq) Reset() {
 	*x = IsClaimedReq{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_medical_proto_msgTypes[21]
+		mi := &file_medical_proto_msgTypes[20]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1644,7 +1580,7 @@ func (x *IsClaimedReq) String() string {
 func (*IsClaimedReq) ProtoMessage() {}
 
 func (x *IsClaimedReq) ProtoReflect() protoreflect.Message {
-	mi := &file_medical_proto_msgTypes[21]
+	mi := &file_medical_proto_msgTypes[20]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1657,7 +1593,7 @@ func (x *IsClaimedReq) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use IsClaimedReq.ProtoReflect.Descriptor instead.
 func (*IsClaimedReq) Descriptor() ([]byte, []int) {
-	return file_medical_proto_rawDescGZIP(), []int{21}
+	return file_medical_proto_rawDescGZIP(), []int{20}
 }
 
 func (x *IsClaimedReq) GetUserId() int64 {
@@ -1701,7 +1637,7 @@ type IsClaimedResp struct {
 func (x *IsClaimedResp) Reset() {
 	*x = IsClaimedResp{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_medical_proto_msgTypes[22]
+		mi := &file_medical_proto_msgTypes[21]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1714,7 +1650,7 @@ func (x *IsClaimedResp) String() string {
 func (*IsClaimedResp) ProtoMessage() {}
 
 func (x *IsClaimedResp) ProtoReflect() protoreflect.Message {
-	mi := &file_medical_proto_msgTypes[22]
+	mi := &file_medical_proto_msgTypes[21]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1727,7 +1663,7 @@ func (x *IsClaimedResp) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use IsClaimedResp.ProtoReflect.Descriptor instead.
 func (*IsClaimedResp) Descriptor() ([]byte, []int) {
-	return file_medical_proto_rawDescGZIP(), []int{22}
+	return file_medical_proto_rawDescGZIP(), []int{21}
 }
 
 func (x *IsClaimedResp) GetErrorCode() int64 {
@@ -1766,7 +1702,7 @@ type ClaimedReq struct {
 func (x *ClaimedReq) Reset() {
 	*x = ClaimedReq{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_medical_proto_msgTypes[23]
+		mi := &file_medical_proto_msgTypes[22]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1779,7 +1715,7 @@ func (x *ClaimedReq) String() string {
 func (*ClaimedReq) ProtoMessage() {}
 
 func (x *ClaimedReq) ProtoReflect() protoreflect.Message {
-	mi := &file_medical_proto_msgTypes[23]
+	mi := &file_medical_proto_msgTypes[22]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1792,7 +1728,7 @@ func (x *ClaimedReq) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ClaimedReq.ProtoReflect.Descriptor instead.
 func (*ClaimedReq) Descriptor() ([]byte, []int) {
-	return file_medical_proto_rawDescGZIP(), []int{23}
+	return file_medical_proto_rawDescGZIP(), []int{22}
 }
 
 func (x *ClaimedReq) GetUserId() int64 {
@@ -1837,7 +1773,7 @@ type GetNewMsgReq struct {
 func (x *GetNewMsgReq) Reset() {
 	*x = GetNewMsgReq{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_medical_proto_msgTypes[24]
+		mi := &file_medical_proto_msgTypes[23]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1850,7 +1786,7 @@ func (x *GetNewMsgReq) String() string {
 func (*GetNewMsgReq) ProtoMessage() {}
 
 func (x *GetNewMsgReq) ProtoReflect() protoreflect.Message {
-	mi := &file_medical_proto_msgTypes[24]
+	mi := &file_medical_proto_msgTypes[23]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1863,7 +1799,7 @@ func (x *GetNewMsgReq) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetNewMsgReq.ProtoReflect.Descriptor instead.
 func (*GetNewMsgReq) Descriptor() ([]byte, []int) {
-	return file_medical_proto_rawDescGZIP(), []int{24}
+	return file_medical_proto_rawDescGZIP(), []int{23}
 }
 
 func (x *GetNewMsgReq) GetCompanyName() string {
@@ -1902,7 +1838,7 @@ type GetNewMsgResp struct {
 func (x *GetNewMsgResp) Reset() {
 	*x = GetNewMsgResp{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_medical_proto_msgTypes[25]
+		mi := &file_medical_proto_msgTypes[24]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1915,7 +1851,7 @@ func (x *GetNewMsgResp) String() string {
 func (*GetNewMsgResp) ProtoMessage() {}
 
 func (x *GetNewMsgResp) ProtoReflect() protoreflect.Message {
-	mi := &file_medical_proto_msgTypes[25]
+	mi := &file_medical_proto_msgTypes[24]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1928,7 +1864,7 @@ func (x *GetNewMsgResp) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetNewMsgResp.ProtoReflect.Descriptor instead.
 func (*GetNewMsgResp) Descriptor() ([]byte, []int) {
-	return file_medical_proto_rawDescGZIP(), []int{25}
+	return file_medical_proto_rawDescGZIP(), []int{24}
 }
 
 func (x *GetNewMsgResp) GetList() []*NewMsgList {
@@ -1977,7 +1913,7 @@ type NewMsgList struct {
 func (x *NewMsgList) Reset() {
 	*x = NewMsgList{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_medical_proto_msgTypes[26]
+		mi := &file_medical_proto_msgTypes[25]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1990,7 +1926,7 @@ func (x *NewMsgList) String() string {
 func (*NewMsgList) ProtoMessage() {}
 
 func (x *NewMsgList) ProtoReflect() protoreflect.Message {
-	mi := &file_medical_proto_msgTypes[26]
+	mi := &file_medical_proto_msgTypes[25]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2003,7 +1939,7 @@ func (x *NewMsgList) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use NewMsgList.ProtoReflect.Descriptor instead.
 func (*NewMsgList) Descriptor() ([]byte, []int) {
-	return file_medical_proto_rawDescGZIP(), []int{26}
+	return file_medical_proto_rawDescGZIP(), []int{25}
 }
 
 func (x *NewMsgList) GetArea() string {
@@ -2077,7 +2013,7 @@ type EntClaim struct {
 func (x *EntClaim) Reset() {
 	*x = EntClaim{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_medical_proto_msgTypes[27]
+		mi := &file_medical_proto_msgTypes[26]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2090,7 +2026,7 @@ func (x *EntClaim) String() string {
 func (*EntClaim) ProtoMessage() {}
 
 func (x *EntClaim) ProtoReflect() protoreflect.Message {
-	mi := &file_medical_proto_msgTypes[27]
+	mi := &file_medical_proto_msgTypes[26]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2103,7 +2039,7 @@ func (x *EntClaim) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use EntClaim.ProtoReflect.Descriptor instead.
 func (*EntClaim) Descriptor() ([]byte, []int) {
-	return file_medical_proto_rawDescGZIP(), []int{27}
+	return file_medical_proto_rawDescGZIP(), []int{26}
 }
 
 func (x *EntClaim) GetId() string {
@@ -2203,7 +2139,7 @@ type EntClaimListStruct struct {
 func (x *EntClaimListStruct) Reset() {
 	*x = EntClaimListStruct{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_medical_proto_msgTypes[28]
+		mi := &file_medical_proto_msgTypes[27]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2216,7 +2152,7 @@ func (x *EntClaimListStruct) String() string {
 func (*EntClaimListStruct) ProtoMessage() {}
 
 func (x *EntClaimListStruct) ProtoReflect() protoreflect.Message {
-	mi := &file_medical_proto_msgTypes[28]
+	mi := &file_medical_proto_msgTypes[27]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2229,7 +2165,7 @@ func (x *EntClaimListStruct) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use EntClaimListStruct.ProtoReflect.Descriptor instead.
 func (*EntClaimListStruct) Descriptor() ([]byte, []int) {
-	return file_medical_proto_rawDescGZIP(), []int{28}
+	return file_medical_proto_rawDescGZIP(), []int{27}
 }
 
 func (x *EntClaimListStruct) GetList() []*EntClaim {
@@ -2260,7 +2196,7 @@ type EntClaimListResp struct {
 func (x *EntClaimListResp) Reset() {
 	*x = EntClaimListResp{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_medical_proto_msgTypes[29]
+		mi := &file_medical_proto_msgTypes[28]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2273,7 +2209,7 @@ func (x *EntClaimListResp) String() string {
 func (*EntClaimListResp) ProtoMessage() {}
 
 func (x *EntClaimListResp) ProtoReflect() protoreflect.Message {
-	mi := &file_medical_proto_msgTypes[29]
+	mi := &file_medical_proto_msgTypes[28]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2286,7 +2222,7 @@ func (x *EntClaimListResp) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use EntClaimListResp.ProtoReflect.Descriptor instead.
 func (*EntClaimListResp) Descriptor() ([]byte, []int) {
-	return file_medical_proto_rawDescGZIP(), []int{29}
+	return file_medical_proto_rawDescGZIP(), []int{28}
 }
 
 func (x *EntClaimListResp) GetErrorCode() int64 {
@@ -2321,7 +2257,7 @@ type IsClaimedResp_StatusRes struct {
 func (x *IsClaimedResp_StatusRes) Reset() {
 	*x = IsClaimedResp_StatusRes{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_medical_proto_msgTypes[30]
+		mi := &file_medical_proto_msgTypes[29]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2334,7 +2270,7 @@ func (x *IsClaimedResp_StatusRes) String() string {
 func (*IsClaimedResp_StatusRes) ProtoMessage() {}
 
 func (x *IsClaimedResp_StatusRes) ProtoReflect() protoreflect.Message {
-	mi := &file_medical_proto_msgTypes[30]
+	mi := &file_medical_proto_msgTypes[29]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2347,7 +2283,7 @@ func (x *IsClaimedResp_StatusRes) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use IsClaimedResp_StatusRes.ProtoReflect.Descriptor instead.
 func (*IsClaimedResp_StatusRes) Descriptor() ([]byte, []int) {
-	return file_medical_proto_rawDescGZIP(), []int{22, 0}
+	return file_medical_proto_rawDescGZIP(), []int{21, 0}
 }
 
 func (x *IsClaimedResp_StatusRes) GetStatus() bool {
@@ -2539,154 +2475,149 @@ var file_medical_proto_rawDesc = []byte{
 	0x45, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x6e, 0x74,
 	0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
 	0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18,
-	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x22, 0x4c, 0x0a, 0x0c,
-	0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06,
-	0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x55, 0x73,
-	0x65, 0x72, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x02, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x22, 0x89, 0x01, 0x0a, 0x09, 0x43,
-	0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f,
-	0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x45, 0x72, 0x72,
-	0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d,
-	0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d,
-	0x73, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x75,
-	0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
-	0x65, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
-	0x49, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75,
-	0x72, 0x63, 0x65, 0x49, 0x64, 0x73, 0x22, 0x66, 0x0a, 0x0c, 0x49, 0x73, 0x43, 0x6c, 0x61, 0x69,
-	0x6d, 0x65, 0x64, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14,
-	0x0a, 0x05, 0x45, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45,
-	0x6e, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79,
-	0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x22, 0xa4,
-	0x01, 0x0a, 0x0d, 0x49, 0x73, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70,
-	0x12, 0x1c, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a,
-	0x0a, 0x08, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x08, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x34, 0x0a, 0x04, 0x44, 0x61,
-	0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63,
-	0x61, 0x6c, 0x2e, 0x49, 0x73, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70,
-	0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61,
-	0x1a, 0x23, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x12, 0x16, 0x0a,
-	0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73,
-	0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x6a, 0x0a, 0x0a, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64,
-	0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41,
-	0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49,
-	0x64, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52,
-	0x04, 0x50, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a,
-	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a,
-	0x65, 0x22, 0x66, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x77, 0x4d, 0x73, 0x67, 0x52, 0x65,
-	0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x4e, 0x61, 0x6d, 0x65,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x4e,
-	0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x02,
-	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, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52,
-	0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0d, 0x47, 0x65,
-	0x74, 0x4e, 0x65, 0x77, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x27, 0x0a, 0x04, 0x6c,
-	0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x65, 0x64, 0x69,
-	0x63, 0x61, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x04,
-	0x6c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x72,
-	0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x03, 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, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x72, 0x72,
-	0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x0a, 0x4e, 0x65, 0x77, 0x4d, 0x73,
-	0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x65, 0x61, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x65, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x69, 0x64,
-	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x69,
-	0x64, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x69, 0x64, 0x61, 0x6d,
-	0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x69, 0x64, 0x61,
-	0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x74, 0x69,
-	0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x74,
-	0x69, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x69, 0x6e,
-	0x6e, 0x65, 0x72, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65,
-	0x72, 0x22, 0xd1, 0x02, 0x0a, 0x08, 0x45, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x0e,
-	0x0a, 0x02, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17,
-	0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
-	0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x5f, 0x69,
-	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x19,
-	0x0a, 0x08, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x07, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70,
-	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a,
-	0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
-	0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x73, 0x74, 0x61, 0x62,
-	0x6c, 0x69, 0x73, 0x68, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0d, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x44, 0x61, 0x74, 0x65, 0x12, 0x18,
-	0x0a, 0x07, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x07, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x70,
-	0x61, 0x6e, 0x79, 0x5f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x14, 0x0a,
-	0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x70,
-	0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69,
-	0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
-	0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74,
-	0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74,
-	0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x51, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x69,
-	0x6d, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x25, 0x0a, 0x04, 0x6c,
-	0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x65, 0x64, 0x69,
-	0x63, 0x61, 0x6c, 0x2e, 0x45, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x04, 0x6c, 0x69,
-	0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x7d, 0x0a, 0x10, 0x45, 0x6e, 0x74, 0x43,
-	0x6c, 0x61, 0x69, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1c, 0x0a, 0x09,
-	0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
-	0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x45, 0x72,
-	0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x45, 0x72,
-	0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x2f, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x45,
-	0x6e, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63,
-	0x74, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x32, 0xee, 0x05, 0x0a, 0x07, 0x4d, 0x65, 0x64, 0x69,
-	0x63, 0x61, 0x6c, 0x12, 0x42, 0x0a, 0x0b, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69,
-	0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x53, 0x65, 0x61,
-	0x72, 0x63, 0x68, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
-	0x71, 0x1a, 0x14, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x70,
-	0x61, 0x6e, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x46, 0x69,
-	0x6c, 0x74, 0x65, 0x72, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0d, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63,
-	0x61, 0x6c, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x1a, 0x17, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61,
-	0x6c, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70,
-	0x12, 0x42, 0x0a, 0x0b, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x12,
-	0x1d, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
-	0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x14,
-	0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79,
-	0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68,
-	0x49, 0x6e, 0x66, 0x6f, 0x53, 0x61, 0x76, 0x65, 0x12, 0x11, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63,
-	0x61, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x13, 0x2e, 0x6d, 0x65,
-	0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
-	0x12, 0x39, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f,
-	0x12, 0x12, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
-	0x6e, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x55,
-	0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x08, 0x50,
-	0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, 0x12, 0x14, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61,
-	0x6c, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e,
-	0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74,
-	0x52, 0x65, 0x73, 0x70, 0x12, 0x2e, 0x0a, 0x05, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x11, 0x2e,
-	0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71,
-	0x1a, 0x12, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d,
-	0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x09, 0x55, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65,
-	0x64, 0x12, 0x15, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x55, 0x6e, 0x63, 0x6c,
-	0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63,
-	0x61, 0x6c, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x09,
-	0x49, 0x73, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x12, 0x15, 0x2e, 0x6d, 0x65, 0x64, 0x69,
-	0x63, 0x61, 0x6c, 0x2e, 0x49, 0x73, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x71,
-	0x1a, 0x16, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x49, 0x73, 0x43, 0x6c, 0x61,
-	0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x48, 0x0a, 0x16, 0x43, 0x6c, 0x61, 0x69,
-	0x6d, 0x65, 0x64, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x4c, 0x69,
-	0x73, 0x74, 0x12, 0x13, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6c, 0x61,
-	0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61,
-	0x6c, 0x2e, 0x45, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
-	0x73, 0x70, 0x12, 0x48, 0x0a, 0x16, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x49, 0x6e, 0x73,
-	0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x13, 0x2e, 0x6d,
-	0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65,
-	0x71, 0x1a, 0x19, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x45, 0x6e, 0x74, 0x43,
-	0x6c, 0x61, 0x69, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x09,
-	0x47, 0x65, 0x74, 0x4e, 0x65, 0x77, 0x4d, 0x73, 0x67, 0x12, 0x15, 0x2e, 0x6d, 0x65, 0x64, 0x69,
-	0x63, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x77, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71,
-	0x1a, 0x16, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65,
-	0x77, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0b, 0x5a, 0x09, 0x2e, 0x2f, 0x6d, 0x65,
-	0x64, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x22, 0x89, 0x01, 0x0a,
+	0x09, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x72,
+	0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x45,
+	0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x45, 0x72, 0x72, 0x6f,
+	0x72, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x45, 0x72, 0x72, 0x6f,
+	0x72, 0x4d, 0x73, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75,
+	0x72, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
+	0x63, 0x65, 0x49, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x73,
+	0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x73, 0x22, 0x66, 0x0a, 0x0c, 0x49, 0x73, 0x43, 0x6c,
+	0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72,
+	0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64,
+	0x12, 0x14, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x45, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04,
+	0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65,
+	0x22, 0xa4, 0x01, 0x0a, 0x0d, 0x49, 0x73, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65,
+	0x12, 0x1a, 0x0a, 0x08, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x08, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x34, 0x0a, 0x04,
+	0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x65, 0x64,
+	0x69, 0x63, 0x61, 0x6c, 0x2e, 0x49, 0x73, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65,
+	0x73, 0x70, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x52, 0x04, 0x44, 0x61,
+	0x74, 0x61, 0x1a, 0x23, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x12,
+	0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x6a, 0x0a, 0x0a, 0x43, 0x6c, 0x61, 0x69, 0x6d,
+	0x65, 0x64, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a,
+	0x05, 0x41, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x70,
+	0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x04, 0x50, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53,
+	0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53,
+	0x69, 0x7a, 0x65, 0x22, 0x66, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x77, 0x4d, 0x73, 0x67,
+	0x52, 0x65, 0x71, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x4e, 0x61,
+	0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e,
+	0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d,
+	0x18, 0x02, 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, 0x03, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0d,
+	0x47, 0x65, 0x74, 0x4e, 0x65, 0x77, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x27, 0x0a,
+	0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x65,
+	0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x4e, 0x65, 0x77, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74,
+	0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09,
+	0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x03, 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, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65,
+	0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x0a, 0x4e, 0x65, 0x77,
+	0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x65, 0x61, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x65, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x62,
+	0x69, 0x64, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+	0x62, 0x69, 0x64, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x69, 0x64,
+	0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x69,
+	0x64, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74,
+	0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73,
+	0x74, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x77,
+	0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x77, 0x69, 0x6e,
+	0x6e, 0x65, 0x72, 0x22, 0xd1, 0x02, 0x0a, 0x08, 0x45, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d,
+	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
+	0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x65, 0x6e, 0x74,
+	0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x49, 0x64,
+	0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74,
+	0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12,
+	0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x73, 0x74,
+	0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0d, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x44, 0x61, 0x74, 0x65,
+	0x12, 0x18, 0x0a, 0x07, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x07, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f,
+	0x6d, 0x70, 0x61, 0x6e, 0x79, 0x5f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x12,
+	0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+	0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f,
+	0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61,
+	0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x75, 0x70, 0x64,
+	0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x51, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x43, 0x6c,
+	0x61, 0x69, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x25, 0x0a,
+	0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x65,
+	0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x45, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x04,
+	0x6c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x7d, 0x0a, 0x10, 0x45, 0x6e,
+	0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1c,
+	0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08,
+	0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+	0x45, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x2f, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c,
+	0x2e, 0x45, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x72,
+	0x75, 0x63, 0x74, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x32, 0xea, 0x05, 0x0a, 0x07, 0x4d, 0x65,
+	0x64, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x42, 0x0a, 0x0b, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75,
+	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x53,
+	0x65, 0x61, 0x72, 0x63, 0x68, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e,
+	0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6f,
+	0x6d, 0x70, 0x61, 0x6e, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x0d, 0x47, 0x65, 0x74,
+	0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0d, 0x2e, 0x6d, 0x65, 0x64,
+	0x69, 0x63, 0x61, 0x6c, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x1a, 0x17, 0x2e, 0x6d, 0x65, 0x64, 0x69,
+	0x63, 0x61, 0x6c, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x42, 0x0a, 0x0b, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f,
+	0x72, 0x12, 0x1d, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x53, 0x65, 0x61, 0x72,
+	0x63, 0x68, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71,
+	0x1a, 0x14, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61,
+	0x6e, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x41, 0x75,
+	0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x61, 0x76, 0x65, 0x12, 0x11, 0x2e, 0x6d, 0x65, 0x64,
+	0x69, 0x63, 0x61, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0x13, 0x2e,
+	0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65,
+	0x73, 0x70, 0x12, 0x39, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x49, 0x6e,
+	0x66, 0x6f, 0x12, 0x12, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6d,
+	0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c,
+	0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a,
+	0x08, 0x50, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, 0x12, 0x14, 0x2e, 0x6d, 0x65, 0x64, 0x69,
+	0x63, 0x61, 0x6c, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, 0x52, 0x65, 0x71, 0x1a,
+	0x15, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x72, 0x61,
+	0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2e, 0x0a, 0x05, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12,
+	0x11, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52,
+	0x65, 0x71, 0x1a, 0x12, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6c, 0x61,
+	0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x32, 0x0a, 0x09, 0x55, 0x6e, 0x43, 0x6c, 0x61, 0x69,
+	0x6d, 0x65, 0x64, 0x12, 0x11, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6c,
+	0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c,
+	0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x09, 0x49, 0x73,
+	0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x12, 0x15, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61,
+	0x6c, 0x2e, 0x49, 0x73, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x16,
+	0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x49, 0x73, 0x43, 0x6c, 0x61, 0x69, 0x6d,
+	0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x48, 0x0a, 0x16, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65,
+	0x64, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x4c, 0x69, 0x73, 0x74,
+	0x12, 0x13, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d,
+	0x65, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e,
+	0x45, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,
+	0x12, 0x48, 0x0a, 0x16, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x69,
+	0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x13, 0x2e, 0x6d, 0x65, 0x64,
+	0x69, 0x63, 0x61, 0x6c, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x71, 0x1a,
+	0x19, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x45, 0x6e, 0x74, 0x43, 0x6c, 0x61,
+	0x69, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x09, 0x47, 0x65,
+	0x74, 0x4e, 0x65, 0x77, 0x4d, 0x73, 0x67, 0x12, 0x15, 0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61,
+	0x6c, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x77, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x16,
+	0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x77, 0x4d,
+	0x73, 0x67, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0b, 0x5a, 0x09, 0x2e, 0x2f, 0x6d, 0x65, 0x64, 0x69,
+	0x63, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -2701,7 +2632,7 @@ func file_medical_proto_rawDescGZIP() []byte {
 	return file_medical_proto_rawDescData
 }
 
-var file_medical_proto_msgTypes = make([]protoimpl.MessageInfo, 31)
+var file_medical_proto_msgTypes = make([]protoimpl.MessageInfo, 30)
 var file_medical_proto_goTypes = []interface{}{
 	(*Request)(nil),                 // 0: medical.Request
 	(*Response)(nil),                // 1: medical.Response
@@ -2722,18 +2653,17 @@ var file_medical_proto_goTypes = []interface{}{
 	(*PortraitReq)(nil),             // 16: medical.PortraitReq
 	(*PortraitResp)(nil),            // 17: medical.PortraitResp
 	(*ClaimReq)(nil),                // 18: medical.ClaimReq
-	(*UnclaimedReq)(nil),            // 19: medical.UnclaimedReq
-	(*ClaimResp)(nil),               // 20: medical.ClaimResp
-	(*IsClaimedReq)(nil),            // 21: medical.IsClaimedReq
-	(*IsClaimedResp)(nil),           // 22: medical.IsClaimedResp
-	(*ClaimedReq)(nil),              // 23: medical.ClaimedReq
-	(*GetNewMsgReq)(nil),            // 24: medical.GetNewMsgReq
-	(*GetNewMsgResp)(nil),           // 25: medical.GetNewMsgResp
-	(*NewMsgList)(nil),              // 26: medical.NewMsgList
-	(*EntClaim)(nil),                // 27: medical.EntClaim
-	(*EntClaimListStruct)(nil),      // 28: medical.EntClaimListStruct
-	(*EntClaimListResp)(nil),        // 29: medical.EntClaimListResp
-	(*IsClaimedResp_StatusRes)(nil), // 30: medical.IsClaimedResp.StatusRes
+	(*ClaimResp)(nil),               // 19: medical.ClaimResp
+	(*IsClaimedReq)(nil),            // 20: medical.IsClaimedReq
+	(*IsClaimedResp)(nil),           // 21: medical.IsClaimedResp
+	(*ClaimedReq)(nil),              // 22: medical.ClaimedReq
+	(*GetNewMsgReq)(nil),            // 23: medical.GetNewMsgReq
+	(*GetNewMsgResp)(nil),           // 24: medical.GetNewMsgResp
+	(*NewMsgList)(nil),              // 25: medical.NewMsgList
+	(*EntClaim)(nil),                // 26: medical.EntClaim
+	(*EntClaimListStruct)(nil),      // 27: medical.EntClaimListStruct
+	(*EntClaimListResp)(nil),        // 28: medical.EntClaimListResp
+	(*IsClaimedResp_StatusRes)(nil), // 29: medical.IsClaimedResp.StatusRes
 }
 var file_medical_proto_depIdxs = []int32{
 	7,  // 0: medical.SearchInstitutionReq.sdequipmentCode:type_name -> medical.Business_Scope
@@ -2743,10 +2673,10 @@ var file_medical_proto_depIdxs = []int32{
 	11, // 4: medical.FilterItem.mi_type_code:type_name -> medical.MiTypeCode
 	12, // 5: medical.FilterItemResp.data:type_name -> medical.FilterItem
 	14, // 6: medical.UserInfoResp.data:type_name -> medical.UserInfo
-	30, // 7: medical.IsClaimedResp.Data:type_name -> medical.IsClaimedResp.StatusRes
-	26, // 8: medical.GetNewMsgResp.list:type_name -> medical.NewMsgList
-	27, // 9: medical.EntClaimListStruct.list:type_name -> medical.EntClaim
-	28, // 10: medical.EntClaimListResp.Data:type_name -> medical.EntClaimListStruct
+	29, // 7: medical.IsClaimedResp.Data:type_name -> medical.IsClaimedResp.StatusRes
+	25, // 8: medical.GetNewMsgResp.list:type_name -> medical.NewMsgList
+	26, // 9: medical.EntClaimListStruct.list:type_name -> medical.EntClaim
+	27, // 10: medical.EntClaimListResp.Data:type_name -> medical.EntClaimListStruct
 	5,  // 11: medical.Medical.Institution:input_type -> medical.SearchInstitutionReq
 	4,  // 12: medical.Medical.GetFilterItem:input_type -> medical.Zero
 	6,  // 13: medical.Medical.Distributor:input_type -> medical.SearchDistributorReq
@@ -2754,23 +2684,23 @@ var file_medical_proto_depIdxs = []int32{
 	3,  // 15: medical.Medical.userAuthInfo:input_type -> medical.CommonReq
 	16, // 16: medical.Medical.Portrait:input_type -> medical.PortraitReq
 	18, // 17: medical.Medical.Claim:input_type -> medical.ClaimReq
-	19, // 18: medical.Medical.UnClaimed:input_type -> medical.UnclaimedReq
-	21, // 19: medical.Medical.IsClaimed:input_type -> medical.IsClaimedReq
-	23, // 20: medical.Medical.ClaimedDistributorList:input_type -> medical.ClaimedReq
-	23, // 21: medical.Medical.ClaimedInstitutionList:input_type -> medical.ClaimedReq
-	24, // 22: medical.Medical.GetNewMsg:input_type -> medical.GetNewMsgReq
+	18, // 18: medical.Medical.UnClaimed:input_type -> medical.ClaimReq
+	20, // 19: medical.Medical.IsClaimed:input_type -> medical.IsClaimedReq
+	22, // 20: medical.Medical.ClaimedDistributorList:input_type -> medical.ClaimedReq
+	22, // 21: medical.Medical.ClaimedInstitutionList:input_type -> medical.ClaimedReq
+	23, // 22: medical.Medical.GetNewMsg:input_type -> medical.GetNewMsgReq
 	9,  // 23: medical.Medical.Institution:output_type -> medical.CompanyResp
 	13, // 24: medical.Medical.GetFilterItem:output_type -> medical.FilterItemResp
 	9,  // 25: medical.Medical.Distributor:output_type -> medical.CompanyResp
 	2,  // 26: medical.Medical.userAuthInfoSave:output_type -> medical.CommonResp
 	15, // 27: medical.Medical.userAuthInfo:output_type -> medical.UserInfoResp
 	17, // 28: medical.Medical.Portrait:output_type -> medical.PortraitResp
-	20, // 29: medical.Medical.Claim:output_type -> medical.ClaimResp
-	20, // 30: medical.Medical.UnClaimed:output_type -> medical.ClaimResp
-	22, // 31: medical.Medical.IsClaimed:output_type -> medical.IsClaimedResp
-	29, // 32: medical.Medical.ClaimedDistributorList:output_type -> medical.EntClaimListResp
-	29, // 33: medical.Medical.ClaimedInstitutionList:output_type -> medical.EntClaimListResp
-	25, // 34: medical.Medical.GetNewMsg:output_type -> medical.GetNewMsgResp
+	19, // 29: medical.Medical.Claim:output_type -> medical.ClaimResp
+	19, // 30: medical.Medical.UnClaimed:output_type -> medical.ClaimResp
+	21, // 31: medical.Medical.IsClaimed:output_type -> medical.IsClaimedResp
+	28, // 32: medical.Medical.ClaimedDistributorList:output_type -> medical.EntClaimListResp
+	28, // 33: medical.Medical.ClaimedInstitutionList:output_type -> medical.EntClaimListResp
+	24, // 34: medical.Medical.GetNewMsg:output_type -> medical.GetNewMsgResp
 	23, // [23:35] is the sub-list for method output_type
 	11, // [11:23] is the sub-list for method input_type
 	11, // [11:11] is the sub-list for extension type_name
@@ -3013,18 +2943,6 @@ func file_medical_proto_init() {
 			}
 		}
 		file_medical_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*UnclaimedReq); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-		file_medical_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*ClaimResp); i {
 			case 0:
 				return &v.state
@@ -3036,7 +2954,7 @@ func file_medical_proto_init() {
 				return nil
 			}
 		}
-		file_medical_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+		file_medical_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*IsClaimedReq); i {
 			case 0:
 				return &v.state
@@ -3048,7 +2966,7 @@ func file_medical_proto_init() {
 				return nil
 			}
 		}
-		file_medical_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+		file_medical_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*IsClaimedResp); i {
 			case 0:
 				return &v.state
@@ -3060,7 +2978,7 @@ func file_medical_proto_init() {
 				return nil
 			}
 		}
-		file_medical_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
+		file_medical_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*ClaimedReq); i {
 			case 0:
 				return &v.state
@@ -3072,7 +2990,7 @@ func file_medical_proto_init() {
 				return nil
 			}
 		}
-		file_medical_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
+		file_medical_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*GetNewMsgReq); i {
 			case 0:
 				return &v.state
@@ -3084,7 +3002,7 @@ func file_medical_proto_init() {
 				return nil
 			}
 		}
-		file_medical_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
+		file_medical_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*GetNewMsgResp); i {
 			case 0:
 				return &v.state
@@ -3096,7 +3014,7 @@ func file_medical_proto_init() {
 				return nil
 			}
 		}
-		file_medical_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
+		file_medical_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*NewMsgList); i {
 			case 0:
 				return &v.state
@@ -3108,7 +3026,7 @@ func file_medical_proto_init() {
 				return nil
 			}
 		}
-		file_medical_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
+		file_medical_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*EntClaim); i {
 			case 0:
 				return &v.state
@@ -3120,7 +3038,7 @@ func file_medical_proto_init() {
 				return nil
 			}
 		}
-		file_medical_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
+		file_medical_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*EntClaimListStruct); i {
 			case 0:
 				return &v.state
@@ -3132,7 +3050,7 @@ func file_medical_proto_init() {
 				return nil
 			}
 		}
-		file_medical_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
+		file_medical_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*EntClaimListResp); i {
 			case 0:
 				return &v.state
@@ -3144,7 +3062,7 @@ func file_medical_proto_init() {
 				return nil
 			}
 		}
-		file_medical_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
+		file_medical_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*IsClaimedResp_StatusRes); i {
 			case 0:
 				return &v.state
@@ -3163,7 +3081,7 @@ func file_medical_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_medical_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   31,
+			NumMessages:   30,
 			NumExtensions: 0,
 			NumServices:   1,
 		},

+ 7 - 7
rpc/medical/medical/medical_grpc.pb.go

@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
 // versions:
 // - protoc-gen-go-grpc v1.2.0
-// - protoc             v3.15.1
+// - protoc             v3.19.4
 // source: medical.proto
 
 package medical
@@ -37,7 +37,7 @@ type MedicalClient interface {
 	// 认领(经销商/医疗机构)
 	Claim(ctx context.Context, in *ClaimReq, opts ...grpc.CallOption) (*ClaimResp, error)
 	// 取消认领(经销商/医疗机构)
-	UnClaimed(ctx context.Context, in *UnclaimedReq, opts ...grpc.CallOption) (*ClaimResp, error)
+	UnClaimed(ctx context.Context, in *ClaimReq, opts ...grpc.CallOption) (*ClaimResp, error)
 	// 是否认领(经销商/医疗机构)
 	IsClaimed(ctx context.Context, in *IsClaimedReq, opts ...grpc.CallOption) (*IsClaimedResp, error)
 	// 我认领的经销商列表
@@ -119,7 +119,7 @@ func (c *medicalClient) Claim(ctx context.Context, in *ClaimReq, opts ...grpc.Ca
 	return out, nil
 }
 
-func (c *medicalClient) UnClaimed(ctx context.Context, in *UnclaimedReq, opts ...grpc.CallOption) (*ClaimResp, error) {
+func (c *medicalClient) UnClaimed(ctx context.Context, in *ClaimReq, opts ...grpc.CallOption) (*ClaimResp, error) {
 	out := new(ClaimResp)
 	err := c.cc.Invoke(ctx, "/medical.Medical/UnClaimed", in, out, opts...)
 	if err != nil {
@@ -183,7 +183,7 @@ type MedicalServer interface {
 	// 认领(经销商/医疗机构)
 	Claim(context.Context, *ClaimReq) (*ClaimResp, error)
 	// 取消认领(经销商/医疗机构)
-	UnClaimed(context.Context, *UnclaimedReq) (*ClaimResp, error)
+	UnClaimed(context.Context, *ClaimReq) (*ClaimResp, error)
 	// 是否认领(经销商/医疗机构)
 	IsClaimed(context.Context, *IsClaimedReq) (*IsClaimedResp, error)
 	// 我认领的经销商列表
@@ -220,7 +220,7 @@ func (UnimplementedMedicalServer) Portrait(context.Context, *PortraitReq) (*Port
 func (UnimplementedMedicalServer) Claim(context.Context, *ClaimReq) (*ClaimResp, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method Claim not implemented")
 }
-func (UnimplementedMedicalServer) UnClaimed(context.Context, *UnclaimedReq) (*ClaimResp, error) {
+func (UnimplementedMedicalServer) UnClaimed(context.Context, *ClaimReq) (*ClaimResp, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method UnClaimed not implemented")
 }
 func (UnimplementedMedicalServer) IsClaimed(context.Context, *IsClaimedReq) (*IsClaimedResp, error) {
@@ -375,7 +375,7 @@ func _Medical_Claim_Handler(srv interface{}, ctx context.Context, dec func(inter
 }
 
 func _Medical_UnClaimed_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(UnclaimedReq)
+	in := new(ClaimReq)
 	if err := dec(in); err != nil {
 		return nil, err
 	}
@@ -387,7 +387,7 @@ func _Medical_UnClaimed_Handler(srv interface{}, ctx context.Context, dec func(i
 		FullMethod: "/medical.Medical/UnClaimed",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(MedicalServer).UnClaimed(ctx, req.(*UnclaimedReq))
+		return srv.(MedicalServer).UnClaimed(ctx, req.(*ClaimReq))
 	}
 	return interceptor(ctx, in, info, handler)
 }

+ 1 - 1
service/InstitutionService_test.go

@@ -95,7 +95,7 @@ func TestInstitutionService_Institution(t *testing.T) {
 							Appendkey: []string{},
 							Notkey:    []string{"1", "2"}},
 					},
-					BusinessTypeCode: 0,
+					BusinessTypeCode: "0",
 				}},
 		},
 	}

+ 27 - 0
service/claim.go

@@ -31,6 +31,7 @@ func (e *EntClaimService) Claim(data *entity.EntClaim) int64 {
 
 // Unclaimed // 取消认领
 func (e *EntClaimService) Unclaimed(id, userId int) bool {
+
 	query := map[string]interface{}{
 		"id": id,
 	}
@@ -55,6 +56,32 @@ func (e *EntClaimService) Unclaimed(id, userId int) bool {
 	return e.BaseMysql.Update(entity.TableDomainEntClaim, query, update)
 }
 
+func (e EntClaimService) UnclaimedByEnt(userId int, entId string, type_ int) (bool, int) {
+
+	query := map[string]interface{}{
+		"user_id": userId,
+		"status":  entity.StatusClaimed,
+		"ent_id":  entId,
+		"type":    type_,
+	}
+	// 1. 查询该条数据
+	rs := e.BaseMysql.FindOne(entity.TableDomainEntClaim, query, "id", "")
+	if rs == nil || len(*rs) == 0 {
+
+		logx.Errorf("取消认领:无效的企业id %v", entId)
+		return false, 0
+	}
+	query2 := map[string]interface{}{
+		"id": (*rs)["id"],
+	}
+	// 2. 取消认领
+	update := map[string]interface{}{
+		"status":      entity.StatusUnClaimed,
+		"update_time": date.NowFormat(date.Date_Full_Layout),
+	}
+	return e.BaseMysql.Update(entity.TableDomainEntClaim, query2, update), common.IntAll((*rs)["id"])
+}
+
 // IsClaimed 是否认领
 func (e *EntClaimService) IsClaimed(userId int, appId string, entId string, typeCode int) bool {
 	query := map[string]interface{}{

+ 2 - 3
service/claim_test.go

@@ -1,7 +1,6 @@
 package service
 
 import (
-	"app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/encrypt"
 	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/entity"
 	"fmt"
@@ -171,7 +170,7 @@ func TestEntClaimService_GetInstitution(t *testing.T) {
 	}
 }
 func TestName(t *testing.T) {
-	s := encrypt.SE.Decode4Hex(common.ObjToString("001d050b"))
+	s := encrypt.SE.DecodeString("QgpHCARNUAdXBRVXSF9URFMIAwIRVxIPVExUVlMEQV0=")
 	//s1 := encrypt.SE.Encode2Hex(common.ObjToString("001d050b"))
 	fmt.Print(s, 2)
 }
@@ -186,7 +185,7 @@ func TestEntClaimService_GetInstitutionByIds(t *testing.T) {
 		args args
 	}{
 		{
-			"获取企业基本信息", args{ids: []string{"2c55e97a56d53b763ed716ec119a8051", "6e29fb15f21afe82692dc95ba018f56a"}},
+			"获取企业基本信息", args{ids: []string{"6e7fa9b7f0a88110a827e8ba18ffb1522"}},
 		},
 	}
 	for _, tt := range tests {