WH01243 3 years ago
parent
commit
30563ac26c

+ 20 - 2
entity/code.go

@@ -2,9 +2,11 @@ package entity
 
 //表代码
 const (
-	CODE_MEDICAL_INSTITUTION_LEVEL = "code_medical_institution_level"
-	CODE_MEDICAL_INSTITUTION_TYPE  = "code_medical_institution_type"
+	CODE_MEDICAL_INSTITUTION_LEVEL = "code_level"
+	CODE_MEDICAL_INSTITUTION_TYPE  = "code_type"
 	DOMAIN_ENT_FOLLOW              = "domain_ent_follow"
+	DOMAIN_CAPITAL_RETENTION       = "domain_capital_retention"
+	TableDomainEntClaim            = "domain_ent_claim"
 )
 
 //返回状态
@@ -12,3 +14,19 @@ const (
 	ERRORCODE   = 1
 	SUCCESSCODE = 0
 )
+
+const (
+	Date_Full_Layout = "2006-01-02 15:04:05"
+)
+
+// 类型
+const (
+	TypeInstitution = 1 // 医疗机构
+	TypeDistributor = 2 // 经销商
+)
+
+// 认领状态
+const (
+	StatusClaimed   = 1  // 认领
+	StatusUnClaimed = -1 // 取消认领
+)

+ 31 - 0
rpc/medical/internal/logic/portraitlogic.go

@@ -0,0 +1,31 @@
+package logic
+
+import (
+	"context"
+
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/rpc/medical/internal/svc"
+	"bp.jydev.jianyu360.cn/ApplicationCenter/medicalField/rpc/medical/medical"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type PortraitLogic struct {
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	logx.Logger
+}
+
+func NewPortraitLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PortraitLogic {
+	return &PortraitLogic{
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		Logger: logx.WithContext(ctx),
+	}
+}
+
+// 医疗机构画像
+func (l *PortraitLogic) Portrait(in *medical.PortraitReq) (*medical.PortraitResp, error) {
+	// todo: add your logic here and delete this line
+
+	return &medical.PortraitResp{}, nil
+}

+ 6 - 0
rpc/medical/internal/server/medicalserver.go

@@ -51,3 +51,9 @@ func (s *MedicalServer) UserAuthInfo(ctx context.Context, in *medical.CommonReq)
 	l := logic.NewUserAuthInfoLogic(ctx, s.svcCtx)
 	return l.UserAuthInfo(in)
 }
+
+// 医疗机构画像
+func (s *MedicalServer) Portrait(ctx context.Context, in *medical.PortraitReq) (*medical.PortraitResp, error) {
+	l := logic.NewPortraitLogic(ctx, s.svcCtx)
+	return l.Portrait(in)
+}

+ 24 - 0
rpc/medical/medical.proto

@@ -107,6 +107,28 @@ message UserInfoResp{
   UserInfo        data        =3;
   bool            status=4;
 }
+//医疗机构画像入参
+message PortraitReq{
+	string appId =1;
+	string companyId =2;
+}
+//医疗机构画像出参
+message PortraitResp{
+	int64 beds=1;//床位数
+	int64 visitPerday=2; // 门诊量/日
+	int64 doctorsnum=3;//医生人数
+	string address=4; //医疗机构地址
+	string website=5; //医疗机构网站
+	string area=6; //区域
+	int64 business_type=7; //医疗机构经营方式(0:公立、1:民营、2:其它)
+	string level=8; //医疗机构等级
+	string miType=9; //医疗机构类型
+	string equipment=10;//医院设备
+	string departnames=11;//医院科室
+	int64 follow=12; //是否关注 0-未关注 1已关注
+	string companyName=13;//医疗机构名称
+	string establish_date=14;//成立日期
+}
 
 service Medical {
       //搜索医疗机构
@@ -119,4 +141,6 @@ service Medical {
       rpc userAuthInfoSave(UserInfo) returns(CommonResp);
       //获取用户认证信息
       rpc userAuthInfo(CommonReq) returns(UserInfoResp);
+      //医疗机构画像
+      rpc Portrait(PortraitReq) returns (PortraitResp);
 }

+ 8 - 0
rpc/medical/medical/medical.go

@@ -22,6 +22,8 @@ type (
 		UserAuthInfoSave(ctx context.Context, in *UserInfo, opts ...grpc.CallOption) (*CommonResp, error)
 		// 获取用户认证信息
 		UserAuthInfo(ctx context.Context, in *CommonReq, opts ...grpc.CallOption) (*UserInfoResp, error)
+		// 医疗机构画像
+		Portrait(ctx context.Context, in *PortraitReq, opts ...grpc.CallOption) (*PortraitResp, error)
 	}
 
 	defaultMedical struct {
@@ -64,3 +66,9 @@ func (m *defaultMedical) UserAuthInfo(ctx context.Context, in *CommonReq, opts .
 	client := NewMedicalClient(m.cli.Conn())
 	return client.UserAuthInfo(ctx, in, opts...)
 }
+
+// 医疗机构画像
+func (m *defaultMedical) Portrait(ctx context.Context, in *PortraitReq, opts ...grpc.CallOption) (*PortraitResp, error) {
+	client := NewMedicalClient(m.cli.Conn())
+	return client.Portrait(ctx, in, opts...)
+}

+ 302 - 32
rpc/medical/medical/medical.pb.go

@@ -1158,6 +1158,214 @@ func (x *UserInfoResp) GetStatus() bool {
 	return false
 }
 
+//医疗机构画像入参
+type PortraitReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AppId     string `protobuf:"bytes,1,opt,name=appId,proto3" json:"appId,omitempty"`
+	CompanyId string `protobuf:"bytes,2,opt,name=companyId,proto3" json:"companyId,omitempty"`
+}
+
+func (x *PortraitReq) Reset() {
+	*x = PortraitReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_medical_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PortraitReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PortraitReq) ProtoMessage() {}
+
+func (x *PortraitReq) ProtoReflect() protoreflect.Message {
+	mi := &file_medical_proto_msgTypes[16]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use PortraitReq.ProtoReflect.Descriptor instead.
+func (*PortraitReq) Descriptor() ([]byte, []int) {
+	return file_medical_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *PortraitReq) GetAppId() string {
+	if x != nil {
+		return x.AppId
+	}
+	return ""
+}
+
+func (x *PortraitReq) GetCompanyId() string {
+	if x != nil {
+		return x.CompanyId
+	}
+	return ""
+}
+
+//医疗机构画像出参
+type PortraitResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Beds          int64  `protobuf:"varint,1,opt,name=beds,proto3" json:"beds,omitempty"`                                        //床位数
+	VisitPerday   int64  `protobuf:"varint,2,opt,name=visitPerday,proto3" json:"visitPerday,omitempty"`                          // 门诊量/日
+	Doctorsnum    int64  `protobuf:"varint,3,opt,name=doctorsnum,proto3" json:"doctorsnum,omitempty"`                            //医生人数
+	Address       string `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"`                                   //医疗机构地址
+	Website       string `protobuf:"bytes,5,opt,name=website,proto3" json:"website,omitempty"`                                   //医疗机构网站
+	Area          string `protobuf:"bytes,6,opt,name=area,proto3" json:"area,omitempty"`                                         //区域
+	BusinessType  int64  `protobuf:"varint,7,opt,name=business_type,json=businessType,proto3" json:"business_type,omitempty"`    //医疗机构经营方式(0:公立、1:民营、2:其它)
+	Level         string `protobuf:"bytes,8,opt,name=level,proto3" json:"level,omitempty"`                                       //医疗机构等级
+	MiType        string `protobuf:"bytes,9,opt,name=miType,proto3" json:"miType,omitempty"`                                     //医疗机构类型
+	Equipment     string `protobuf:"bytes,10,opt,name=equipment,proto3" json:"equipment,omitempty"`                              //医院设备
+	Departnames   string `protobuf:"bytes,11,opt,name=departnames,proto3" json:"departnames,omitempty"`                          //医院科室
+	Follow        int64  `protobuf:"varint,12,opt,name=follow,proto3" json:"follow,omitempty"`                                   //是否关注 0-未关注 1已关注
+	CompanyName   string `protobuf:"bytes,13,opt,name=companyName,proto3" json:"companyName,omitempty"`                          //医疗机构名称
+	EstablishDate string `protobuf:"bytes,14,opt,name=establish_date,json=establishDate,proto3" json:"establish_date,omitempty"` //成立日期
+}
+
+func (x *PortraitResp) Reset() {
+	*x = PortraitResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_medical_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *PortraitResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PortraitResp) ProtoMessage() {}
+
+func (x *PortraitResp) ProtoReflect() protoreflect.Message {
+	mi := &file_medical_proto_msgTypes[17]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use PortraitResp.ProtoReflect.Descriptor instead.
+func (*PortraitResp) Descriptor() ([]byte, []int) {
+	return file_medical_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *PortraitResp) GetBeds() int64 {
+	if x != nil {
+		return x.Beds
+	}
+	return 0
+}
+
+func (x *PortraitResp) GetVisitPerday() int64 {
+	if x != nil {
+		return x.VisitPerday
+	}
+	return 0
+}
+
+func (x *PortraitResp) GetDoctorsnum() int64 {
+	if x != nil {
+		return x.Doctorsnum
+	}
+	return 0
+}
+
+func (x *PortraitResp) GetAddress() string {
+	if x != nil {
+		return x.Address
+	}
+	return ""
+}
+
+func (x *PortraitResp) GetWebsite() string {
+	if x != nil {
+		return x.Website
+	}
+	return ""
+}
+
+func (x *PortraitResp) GetArea() string {
+	if x != nil {
+		return x.Area
+	}
+	return ""
+}
+
+func (x *PortraitResp) GetBusinessType() int64 {
+	if x != nil {
+		return x.BusinessType
+	}
+	return 0
+}
+
+func (x *PortraitResp) GetLevel() string {
+	if x != nil {
+		return x.Level
+	}
+	return ""
+}
+
+func (x *PortraitResp) GetMiType() string {
+	if x != nil {
+		return x.MiType
+	}
+	return ""
+}
+
+func (x *PortraitResp) GetEquipment() string {
+	if x != nil {
+		return x.Equipment
+	}
+	return ""
+}
+
+func (x *PortraitResp) GetDepartnames() string {
+	if x != nil {
+		return x.Departnames
+	}
+	return ""
+}
+
+func (x *PortraitResp) GetFollow() int64 {
+	if x != nil {
+		return x.Follow
+	}
+	return 0
+}
+
+func (x *PortraitResp) GetCompanyName() string {
+	if x != nil {
+		return x.CompanyName
+	}
+	return ""
+}
+
+func (x *PortraitResp) GetEstablishDate() string {
+	if x != nil {
+		return x.EstablishDate
+	}
+	return ""
+}
+
 var File_medical_proto protoreflect.FileDescriptor
 
 var file_medical_proto_rawDesc = []byte{
@@ -1294,29 +1502,63 @@ var file_medical_proto_rawDesc = []byte{
 	0x12, 0x25, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11,
 	0x2e, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66,
 	0x6f, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
-	0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x32,
-	0xc1, 0x02, 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, 0x42, 0x0b, 0x5a, 0x09, 0x2e, 0x2f, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c,
-	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22,
+	0x41, 0x0a, 0x0b, 0x50, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, 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, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x49,
+	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79,
+	0x49, 0x64, 0x22, 0xa0, 0x03, 0x0a, 0x0c, 0x50, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, 0x52,
+	0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x65, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x04, 0x62, 0x65, 0x64, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x76, 0x69, 0x73, 0x69, 0x74,
+	0x50, 0x65, 0x72, 0x64, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x76, 0x69,
+	0x73, 0x69, 0x74, 0x50, 0x65, 0x72, 0x64, 0x61, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x6f, 0x63,
+	0x74, 0x6f, 0x72, 0x73, 0x6e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64,
+	0x6f, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x6e, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64,
+	0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72,
+	0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x18, 0x05,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x12, 0x12, 0x0a,
+	0x04, 0x61, 0x72, 0x65, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x65,
+	0x61, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x79,
+	0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65,
+	0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18,
+	0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06,
+	0x6d, 0x69, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x69,
+	0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e,
+	0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65,
+	0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6e, 0x61, 0x6d, 0x65,
+	0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6e,
+	0x61, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x0c,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x20, 0x0a, 0x0b,
+	0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25,
+	0x0a, 0x0e, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x64, 0x61, 0x74, 0x65,
+	0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73,
+	0x68, 0x44, 0x61, 0x74, 0x65, 0x32, 0xfa, 0x02, 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, 0x42, 0x0b, 0x5a, 0x09, 0x2e, 0x2f, 0x6d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x62,
+	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -1331,7 +1573,7 @@ func file_medical_proto_rawDescGZIP() []byte {
 	return file_medical_proto_rawDescData
 }
 
-var file_medical_proto_msgTypes = make([]protoimpl.MessageInfo, 16)
+var file_medical_proto_msgTypes = make([]protoimpl.MessageInfo, 18)
 var file_medical_proto_goTypes = []interface{}{
 	(*Request)(nil),              // 0: medical.Request
 	(*Response)(nil),             // 1: medical.Response
@@ -1349,6 +1591,8 @@ var file_medical_proto_goTypes = []interface{}{
 	(*FilterItemResp)(nil),       // 13: medical.FilterItemResp
 	(*UserInfo)(nil),             // 14: medical.UserInfo
 	(*UserInfoResp)(nil),         // 15: medical.UserInfoResp
+	(*PortraitReq)(nil),          // 16: medical.PortraitReq
+	(*PortraitResp)(nil),         // 17: medical.PortraitResp
 }
 var file_medical_proto_depIdxs = []int32{
 	7,  // 0: medical.CompanyDataList.list:type_name -> medical.CompanyData
@@ -1362,13 +1606,15 @@ var file_medical_proto_depIdxs = []int32{
 	6,  // 8: medical.Medical.Distributor:input_type -> medical.SearchDistributorReq
 	14, // 9: medical.Medical.userAuthInfoSave:input_type -> medical.UserInfo
 	3,  // 10: medical.Medical.userAuthInfo:input_type -> medical.CommonReq
-	9,  // 11: medical.Medical.Institution:output_type -> medical.CompanyResp
-	13, // 12: medical.Medical.GetFilterItem:output_type -> medical.FilterItemResp
-	9,  // 13: medical.Medical.Distributor:output_type -> medical.CompanyResp
-	2,  // 14: medical.Medical.userAuthInfoSave:output_type -> medical.CommonResp
-	15, // 15: medical.Medical.userAuthInfo:output_type -> medical.UserInfoResp
-	11, // [11:16] is the sub-list for method output_type
-	6,  // [6:11] is the sub-list for method input_type
+	16, // 11: medical.Medical.Portrait:input_type -> medical.PortraitReq
+	9,  // 12: medical.Medical.Institution:output_type -> medical.CompanyResp
+	13, // 13: medical.Medical.GetFilterItem:output_type -> medical.FilterItemResp
+	9,  // 14: medical.Medical.Distributor:output_type -> medical.CompanyResp
+	2,  // 15: medical.Medical.userAuthInfoSave:output_type -> medical.CommonResp
+	15, // 16: medical.Medical.userAuthInfo:output_type -> medical.UserInfoResp
+	17, // 17: medical.Medical.Portrait:output_type -> medical.PortraitResp
+	12, // [12:18] is the sub-list for method output_type
+	6,  // [6:12] is the sub-list for method input_type
 	6,  // [6:6] is the sub-list for extension type_name
 	6,  // [6:6] is the sub-list for extension extendee
 	0,  // [0:6] is the sub-list for field type_name
@@ -1572,6 +1818,30 @@ func file_medical_proto_init() {
 				return nil
 			}
 		}
+		file_medical_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PortraitReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_medical_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*PortraitResp); 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{
@@ -1579,7 +1849,7 @@ func file_medical_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_medical_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   16,
+			NumMessages:   18,
 			NumExtensions: 0,
 			NumServices:   1,
 		},

+ 38 - 0
rpc/medical/medical/medical_grpc.pb.go

@@ -32,6 +32,8 @@ type MedicalClient interface {
 	UserAuthInfoSave(ctx context.Context, in *UserInfo, opts ...grpc.CallOption) (*CommonResp, error)
 	//获取用户认证信息
 	UserAuthInfo(ctx context.Context, in *CommonReq, opts ...grpc.CallOption) (*UserInfoResp, error)
+	//医疗机构画像
+	Portrait(ctx context.Context, in *PortraitReq, opts ...grpc.CallOption) (*PortraitResp, error)
 }
 
 type medicalClient struct {
@@ -87,6 +89,15 @@ func (c *medicalClient) UserAuthInfo(ctx context.Context, in *CommonReq, opts ..
 	return out, nil
 }
 
+func (c *medicalClient) Portrait(ctx context.Context, in *PortraitReq, opts ...grpc.CallOption) (*PortraitResp, error) {
+	out := new(PortraitResp)
+	err := c.cc.Invoke(ctx, "/medical.Medical/Portrait", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // MedicalServer is the server API for Medical service.
 // All implementations must embed UnimplementedMedicalServer
 // for forward compatibility
@@ -101,6 +112,8 @@ type MedicalServer interface {
 	UserAuthInfoSave(context.Context, *UserInfo) (*CommonResp, error)
 	//获取用户认证信息
 	UserAuthInfo(context.Context, *CommonReq) (*UserInfoResp, error)
+	//医疗机构画像
+	Portrait(context.Context, *PortraitReq) (*PortraitResp, error)
 	mustEmbedUnimplementedMedicalServer()
 }
 
@@ -123,6 +136,9 @@ func (UnimplementedMedicalServer) UserAuthInfoSave(context.Context, *UserInfo) (
 func (UnimplementedMedicalServer) UserAuthInfo(context.Context, *CommonReq) (*UserInfoResp, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method UserAuthInfo not implemented")
 }
+func (UnimplementedMedicalServer) Portrait(context.Context, *PortraitReq) (*PortraitResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Portrait not implemented")
+}
 func (UnimplementedMedicalServer) mustEmbedUnimplementedMedicalServer() {}
 
 // UnsafeMedicalServer may be embedded to opt out of forward compatibility for this service.
@@ -226,6 +242,24 @@ func _Medical_UserAuthInfo_Handler(srv interface{}, ctx context.Context, dec fun
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Medical_Portrait_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(PortraitReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MedicalServer).Portrait(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/medical.Medical/Portrait",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MedicalServer).Portrait(ctx, req.(*PortraitReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // Medical_ServiceDesc is the grpc.ServiceDesc for Medical service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -253,6 +287,10 @@ var Medical_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "userAuthInfo",
 			Handler:    _Medical_UserAuthInfo_Handler,
 		},
+		{
+			MethodName: "Portrait",
+			Handler:    _Medical_Portrait_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "medical.proto",