修改了返回数据的处理文件,修正为dto表示返回。新增了获取医生列表-分页接口。重构了获取医生详情、获取多点执业医生详情接口

This commit is contained in:
wucongxing8150 2024-05-28 14:04:10 +08:00
parent 9996a2a749
commit 7a1ed10dd8
8 changed files with 609 additions and 243 deletions

View File

@ -3,9 +3,10 @@ package v1
import (
"github.com/gin-gonic/gin"
"hospital-open-api/api/dao"
"hospital-open-api/api/requests/v1"
dtoV1 "hospital-open-api/api/dto/v1"
requestsV1 "hospital-open-api/api/requests/v1"
"hospital-open-api/api/responses"
"hospital-open-api/api/responses/v1/userDoctorResponse"
serviceV1 "hospital-open-api/api/service/v1"
"hospital-open-api/global"
"hospital-open-api/utils"
)
@ -14,54 +15,96 @@ type UserDoctor struct{}
// GetMultiDoctor 获取多点执业医生详情
func (r *UserDoctor) GetMultiDoctor(c *gin.Context) {
req := v1.UserDoctorRequest{}
if err := c.ShouldBind(&req.GetMultiDoctor); err != nil {
userDoctorRequest := requestsV1.UserDoctorRequest{}
req := userDoctorRequest.GetMultiDoctor
if err := c.ShouldBind(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req.GetMultiDoctor); err != nil {
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
// 获取数据
userDoctorDao := dao.UserDoctorDao{}
userDoctor, err := userDoctorDao.GetMultiUserDoctor(req.GetMultiDoctor)
if err != nil && userDoctor == nil {
responses.Ok(c)
// 业务处理
userDoctorService := serviceV1.UserDoctorService{}
getMultiDoctorResponses, err := userDoctorService.GetMultiDoctor(req)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 处理返回值
getMultiDoctorResponse := userDoctorResponse.GetMultiDoctorResponse(userDoctor)
responses.OkWithData(getMultiDoctorResponse, c)
responses.OkWithData(getMultiDoctorResponses, c)
}
// GetDoctor 获取医生详情
func (r *UserDoctor) GetDoctor(c *gin.Context) {
req := v1.UserDoctorRequest{}
if err := c.ShouldBind(&req.GetDoctor); err != nil {
userDoctorRequest := requestsV1.UserDoctorRequest{}
req := userDoctorRequest.GetDoctor
if err := c.ShouldBind(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req.GetDoctor); err != nil {
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
// 获取数据
// 业务处理
userDoctorService := serviceV1.UserDoctorService{}
getDoctorResponses, err := userDoctorService.GetDoctor(req)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.OkWithData(getDoctorResponses, c)
}
// GetUserDoctorPage 获取医生列表-分页
func (r *UserDoctor) GetUserDoctorPage(c *gin.Context) {
userDoctorRequest := requestsV1.UserDoctorRequest{}
req := userDoctorRequest.GetUserDoctorPage
if err := c.ShouldBind(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
if req.Page == 0 {
req.Page = 1
}
if req.PageSize == 0 {
req.PageSize = 20
}
userDoctorDao := dao.UserDoctorDao{}
userDoctor, err := userDoctorDao.GetUserDoctor(req.GetDoctor)
if err != nil && userDoctor == nil {
responses.Ok(c)
userDoctor, total, err := userDoctorDao.GetUserDoctorPageSearch(req, req.Page, req.PageSize)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 处理返回值
getMultiDoctorResponse := userDoctorResponse.GetDoctorResponse(userDoctor)
responses.OkWithData(getMultiDoctorResponse, c)
getUserDoctorPageResponses := dtoV1.GetUserDoctorPageListDto(userDoctor)
result := make(map[string]interface{})
result["page"] = req.Page
result["page_size"] = req.PageSize
result["total"] = total
result["data"] = getUserDoctorPageResponses
responses.OkWithData(result, c)
}

View File

@ -4,8 +4,9 @@ import (
"gorm.io/gorm"
"gorm.io/gorm/clause"
"hospital-open-api/api/model"
"hospital-open-api/api/requests/v1"
requestsV1 "hospital-open-api/api/requests/v1"
"hospital-open-api/global"
"strings"
)
type UserDoctorDao struct {
@ -30,55 +31,7 @@ func (r *UserDoctorDao) GetUserDoctorPreloadById(doctorId int64) (m *model.UserD
}
// GetMultiUserDoctor 获取多点医生详情
func (r *UserDoctorDao) GetMultiUserDoctor(req v1.GetMultiDoctor) (m *model.UserDoctor, err error) {
// 构建查询条件
query := global.Db.Model(&model.UserDoctor{}).Omit("open_id", "union_id", "wx_session_key")
// 用户
query = query.Preload("User", func(db *gorm.DB) *gorm.DB {
return db.Omit("user_password", "salt")
})
// 医院
query = query.Preload("Hospital", func(db *gorm.DB) *gorm.DB {
return db.Select("hospital_id,hospital_name,hospital_level_name")
})
// 状态
query = query.Where("status = ?", 1)
// 实名认证状态
query = query.Where("idcard_status = ?", 1)
// 身份认证状态
query = query.Where("iden_auth_status = ?", 1)
// 是否已绑定结算银行卡
query = query.Where("is_bind_bank = ?", 1)
// 姓名
if req.UserName != "" {
query = query.Where("user_name = ?", req.UserName)
}
// 手机号
if req.Mobile != "" {
subQuery := global.Db.Model(&model.User{}).
Select("user_id").
Where("mobile = ?", req.Mobile)
query = query.Where(gorm.Expr("user_id IN (?)", subQuery))
}
err = query.First(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// GetUserDoctor 获取医生详情
func (r *UserDoctorDao) GetUserDoctor(req v1.GetDoctor) (m *model.UserDoctor, err error) {
func (r *UserDoctorDao) GetMultiUserDoctor(req requestsV1.GetMultiDoctor) (m *model.UserDoctor, err error) {
// 构建查询条件
query := global.Db.Model(&model.UserDoctor{}).Omit("open_id", "union_id", "wx_session_key")
@ -127,3 +80,159 @@ func (r *UserDoctorDao) GetUserDoctor(req v1.GetDoctor) (m *model.UserDoctor, er
}
return m, nil
}
// GetUserDoctor 获取医生详情
func (r *UserDoctorDao) GetUserDoctor(req requestsV1.GetDoctor) (m *model.UserDoctor, err error) {
// 构建查询条件
query := global.Db.Model(&model.UserDoctor{}).Omit("open_id", "union_id", "wx_session_key")
// 用户
query = query.Preload("User", func(db *gorm.DB) *gorm.DB {
return db.Omit("user_password", "salt")
})
// 医院
query = query.Preload("Hospital", func(db *gorm.DB) *gorm.DB {
return db.Select("hospital_id,hospital_name,hospital_level_name")
})
// 问诊配置
query = query.Preload("DoctorInquiryConfig")
// 状态
query = query.Where("status = ?", 1)
// 实名认证状态
query = query.Where("idcard_status = ?", 1)
// 身份认证状态
query = query.Where("iden_auth_status = ?", 1)
// 是否已绑定结算银行卡
query = query.Where("is_bind_bank = ?", 1)
// 姓名
if req.UserName != "" {
query = query.Where("user_name = ?", req.UserName)
}
// 手机号
if req.Mobile != "" {
subQuery := global.Db.Model(&model.User{}).
Select("user_id").
Where("mobile = ?", req.Mobile)
query = query.Where(gorm.Expr("user_id IN (?)", subQuery))
}
err = query.First(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// GetUserDoctorPageSearch 获取医生列表-分页
func (r *UserDoctorDao) GetUserDoctorPageSearch(req requestsV1.GetUserDoctorPage, page, pageSize int) (m []*model.UserDoctor, total int64, err error) {
var totalRecords int64
// 构建查询条件
query := global.Db.Model(&model.UserDoctor{}).Omit("open_id", "union_id", "wx_session_key")
query = query.Where("status = ?", 1)
query = query.Where("idcard_status = ?", 1)
query = query.Where("iden_auth_status = ?", 1)
query = query.Where("is_bind_bank = ?", 1)
// 用户
query = query.Preload("User", func(db *gorm.DB) *gorm.DB {
return db.Omit("user_password", "salt")
})
// 医院
query = query.Preload("Hospital", func(db *gorm.DB) *gorm.DB {
return db.Select("hospital_id,hospital_name,hospital_level_name")
})
// 医生问诊配置
query = query.Preload("DoctorInquiryConfig")
// 医生问诊配置
if req.InquiryType != "" && req.InquiryMode != "" {
inquiryType := strings.Split(req.InquiryType, ",")
inquiryMode := strings.Split(req.InquiryMode, ",")
if len(inquiryType) > 0 {
subQuery := global.Db.Model(&model.DoctorInquiryConfig{}).
Where("gdxz_doctor_inquiry_config.doctor_id = gdxz_user_doctor.doctor_id").
Where("gdxz_doctor_inquiry_config.inquiry_type IN (?)", inquiryType).
Where("gdxz_doctor_inquiry_config.inquiry_mode IN (?)", inquiryMode).
Where("gdxz_doctor_inquiry_config.is_enable = ?", 1).Select("1")
query = query.Where("EXISTS (?)", subQuery)
}
}
// 手机号
if req.Mobile != "" {
subQuery := global.Db.Model(&model.User{}).
Select("user_id").
Where("mobile LIKE ?", "%"+req.Mobile+"%")
query = query.Where(gorm.Expr("user_id IN (?)", subQuery))
}
// 用户名称
if req.UserName != "" {
query = query.Where("user_name LIKE ?", "%"+req.UserName+"%")
}
// 医院名称
if req.HospitalName != "" {
subQuery := global.Db.Model(&model.Hospital{}).
Select("hospital_id").
Where("hospital_name LIKE ?", "%"+req.HospitalName+"%")
query = query.Where(gorm.Expr("hospital_id IN (?)", subQuery))
}
// 科室名称
if req.DepartmentCustomName != "" {
query = query.Where("department_custom_name = ?", req.DepartmentCustomName)
}
// 是否首页推荐
if req.IsRecommend != nil {
query = query.Where("is_recommend = ?", req.IsRecommend)
}
if req.DoctorTitle != nil {
query = query.Where("doctor_title = ?", req.DoctorTitle)
}
// 排序
query = query.Order("created_at desc")
if req.IsEnterpriseDeepCooperation != nil {
query = query.Where("is_enterprise_deep_cooperation = ?", req.IsEnterpriseDeepCooperation)
}
if req.IsPlatformDeepCooperation != nil {
query = query.Where("is_platform_deep_cooperation = ?", req.IsPlatformDeepCooperation)
}
if req.IsSysDiagnoCooperation != nil {
query = query.Where("is_sys_diagno_cooperation = ?", req.IsSysDiagnoCooperation)
}
// 查询总数量
if err := query.Count(&totalRecords).Error; err != nil {
return nil, 0, err
}
err = query.Scopes(model.Paginate(page, pageSize)).Find(&m).Error
if err != nil {
return nil, 0, err
}
return m, totalRecords, nil
}

View File

@ -1,11 +1,11 @@
package doctotInquiryConfigResponse
package v1
import (
"fmt"
"hospital-open-api/api/model"
)
type DoctorInquiryConfig struct {
type DoctorInquiryConfigDto struct {
InquiryConfigId string `json:"inquiry_config_id"` // 主键id
DoctorId string `json:"doctor_id"` // 医生id
InquiryType int `json:"inquiry_type"` // 接诊类型1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药);NOT NULL
@ -23,13 +23,13 @@ type DoctorInquiryConfig struct {
MultiPointStatus int `json:"multi_point_status"` // 医生多点执业认证状态0:未认证 1:认证通过 2:审核中 3:认证失败)
}
func GetDoctorInquiryConfigListResponse(m []*model.DoctorInquiryConfig) []*DoctorInquiryConfig {
func GetDoctorInquiryConfigListDto(m []*model.DoctorInquiryConfig) []*DoctorInquiryConfigDto {
// 处理返回值
responses := make([]*DoctorInquiryConfig, len(m))
responses := make([]*DoctorInquiryConfigDto, len(m))
if len(m) > 0 {
for i, v := range m {
response := &DoctorInquiryConfig{
response := &DoctorInquiryConfigDto{
InquiryConfigId: fmt.Sprintf("%d", v.InquiryConfigId),
DoctorId: fmt.Sprintf("%d", v.DoctorId),
InquiryType: v.InquiryType,

286
api/dto/v1/UserDoctor.go Normal file
View File

@ -0,0 +1,286 @@
package v1
import (
"fmt"
"hospital-open-api/api/model"
"hospital-open-api/utils"
"strconv"
)
// UserDoctorDto 医生详情
type UserDoctorDto struct {
DoctorID string `json:"doctor_id"` // 主键id
UserID string `json:"user_id"` // 用户id
UserName string `json:"user_name"` // 用户名称
Status int `json:"status"` // 状态0:禁用 1:正常 2:删除)
IDCardStatus int `json:"idcard_status"` // 实名认证状态0:未认证 1:认证通过 2:认证失败)
IdenAuthStatus int `json:"iden_auth_status"` // 身份认证状态0:未认证 1:认证通过 2:审核中 3:认证失败)
MultiPointStatus int `json:"multi_point_status"` // 医生多点执业认证状态0:未认证 1:认证通过 2:审核中 3:认证失败)
Avatar string `json:"avatar"` // 头像
DoctorTitle string `json:"doctor_title"` // 医生职称1:主任医师 2:主任中医师 3:副主任医师 4:副主任中医师 5:主治医师 6:住院医师)
DepartmentCustomName string `json:"department_custom_name"` // 科室名称(如未自己输入,填入标准科室名称)
ServedPatientsNum int `json:"served_patients_num"` // 服务患者数量(订单结束时统计)
PraiseRate float64 `json:"praise_rate"` // 好评率百分制。订单平均评价中超过4-5分的订单总数 / 总订单数 * 5
AvgResponseTime float64 `json:"avg_response_time"` // 平均响应时间(分钟制)
NumberOfFans uint `json:"number_of_fans"` // 被关注数量
IsImgExpertReception int `json:"is_img_expert_reception"` // 是否参加专家图文接诊0:否 1:是)
IsImgWelfareReception int `json:"is_img_welfare_reception"` // 是否参加公益图文问诊0:否 1:是)
IsImgQuickReception int `json:"is_img_quick_reception"` // 是否参加快速图文接诊0:否 1:是)
IsPlatformDeepCooperation int `json:"is_platform_deep_cooperation"` // 是否平台深度合作医生0:否 1:是)
IsEnterpriseDeepCooperation int `json:"is_enterprise_deep_cooperation"` // 是否企业深度合作医生0:否 1:是)
QrCode string `json:"qr_code"` // 分享二维码
BeGoodAt string `json:"be_good_at"` // 擅长
BriefIntroduction string `json:"brief_introduction"` // 医生简介
Mobile string `json:"mobile"` // 手机号
Age uint `json:"age"` // 年龄
Sex int `json:"sex"` // 性别0:未知 1:男 2:女)
HospitalName string `json:"hospital_name"` // 医院名称
DoctorInquiryConfig []*DoctorInquiryConfigDto `json:"doctor_inquiry_config"` // 医生问诊配置
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间
}
// MultiUserDoctorDto 多点执业医生详情
type MultiUserDoctorDto struct {
DoctorID string `json:"doctor_id"` // 主键id
UserID string `json:"user_id"` // 用户id
UserName string `json:"user_name"` // 用户名称
Status int `json:"status"` // 状态0:禁用 1:正常 2:删除)
IDCardStatus int `json:"idcard_status"` // 实名认证状态0:未认证 1:认证通过 2:认证失败)
IdenAuthStatus int `json:"iden_auth_status"` // 身份认证状态0:未认证 1:认证通过 2:审核中 3:认证失败)
MultiPointStatus int `json:"multi_point_status"` // 医生多点执业认证状态0:未认证 1:认证通过 2:审核中 3:认证失败)
Avatar string `json:"avatar"` // 头像
DoctorTitle string `json:"doctor_title"` // 医生职称1:主任医师 2:主任中医师 3:副主任医师 4:副主任中医师 5:主治医师 6:住院医师)
DepartmentCustomName string `json:"department_custom_name"` // 科室名称(如未自己输入,填入标准科室名称)
ServedPatientsNum int `json:"served_patients_num"` // 服务患者数量(订单结束时统计)
PraiseRate float64 `json:"praise_rate"` // 好评率百分制。订单平均评价中超过4-5分的订单总数 / 总订单数 * 5
AvgResponseTime float64 `json:"avg_response_time"` // 平均响应时间(分钟制)
NumberOfFans uint `json:"number_of_fans"` // 被关注数量
IsImgExpertReception int `json:"is_img_expert_reception"` // 是否参加专家图文接诊0:否 1:是)
IsImgWelfareReception int `json:"is_img_welfare_reception"` // 是否参加公益图文问诊0:否 1:是)
IsImgQuickReception int `json:"is_img_quick_reception"` // 是否参加快速图文接诊0:否 1:是)
IsPlatformDeepCooperation int `json:"is_platform_deep_cooperation"` // 是否平台深度合作医生0:否 1:是)
IsEnterpriseDeepCooperation int `json:"is_enterprise_deep_cooperation"` // 是否企业深度合作医生0:否 1:是)
QrCode string `json:"qr_code"` // 分享二维码
BeGoodAt string `json:"be_good_at"` // 擅长
BriefIntroduction string `json:"brief_introduction"` // 医生简介
Mobile string `json:"mobile"` // 手机号
Age uint `json:"age"` // 年龄
Sex int `json:"sex"` // 性别0:未知 1:男 2:女)
HospitalName string `json:"hospital_name"` // 医院名称
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间
}
// UserDoctorPageDto 获取医生列表-分页
type UserDoctorPageDto struct {
DoctorID string `json:"doctor_id"` // 主键id
UserID string `json:"user_id"` // 用户id
UserName string `json:"user_name"` // 用户名称
MultiPointStatus int `json:"multi_point_status"` // 医生多点执业认证状态0:未认证 1:认证通过 2:审核中 3:认证失败)
Avatar string `json:"avatar"` // 头像
DoctorTitle string `json:"doctor_title"` // 医生职称1:主任医师 2:主任中医师 3:副主任医师 4:副主任中医师 5:主治医师 6:住院医师)
DepartmentCustomName string `json:"department_custom_name"` // 科室名称(如未自己输入,填入标准科室名称)
ServedPatientsNum int `json:"served_patients_num"` // 服务患者数量(订单结束时统计)
PraiseRate float64 `json:"praise_rate"` // 好评率百分制。订单平均评价中超过4-5分的订单总数 / 总订单数 * 5
AvgResponseTime float64 `json:"avg_response_time"` // 平均响应时间(分钟制)
NumberOfFans uint `json:"number_of_fans"` // 被关注数量
IsPlatformDeepCooperation int `json:"is_platform_deep_cooperation"` // 是否平台深度合作医生0:否 1:是)
IsEnterpriseDeepCooperation int `json:"is_enterprise_deep_cooperation"` // 是否企业深度合作医生0:否 1:是)
QrCode string `json:"qr_code"` // 分享二维码
BeGoodAt string `json:"be_good_at"` // 擅长
BriefIntroduction string `json:"brief_introduction"` // 医生简介
Age uint `json:"age"` // 年龄
Sex int `json:"sex"` // 性别0:未知 1:男 2:女)
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间
HospitalName string `json:"hospital_name"` // 医院名称
HospitalLevelName string `json:"hospital_level_name"` // 医院等级
IsOnline int `json:"is_online"` // 是否在线0:不在线 1:在线)
DoctorInquiryConfig []*DoctorInquiryConfigDto `json:"doctor_inquiry_config"` // 医生问诊配置
}
// GetMultiDoctorDto 获取多点执业医生详情
func GetMultiDoctorDto(m *model.UserDoctor) *MultiUserDoctorDto {
res := &MultiUserDoctorDto{
DoctorID: strconv.Itoa(int(m.DoctorId)),
UserID: strconv.Itoa(int(m.UserId)),
UserName: m.UserName,
Status: m.Status,
IDCardStatus: m.Status,
IdenAuthStatus: m.IdenAuthStatus,
MultiPointStatus: m.MultiPointStatus,
Avatar: utils.AddOssDomain(m.Avatar),
DoctorTitle: utils.DoctorTitleToStr(m.DoctorTitle),
DepartmentCustomName: m.DepartmentCustomName,
ServedPatientsNum: m.ServedPatientsNum,
PraiseRate: m.PraiseRate,
AvgResponseTime: m.AvgResponseTime,
NumberOfFans: m.NumberOfFans,
IsImgExpertReception: m.IsImgExpertReception,
IsImgWelfareReception: m.IsImgWelfareReception,
IsImgQuickReception: m.IsImgQuickReception,
IsPlatformDeepCooperation: m.IsPlatformDeepCooperation,
IsEnterpriseDeepCooperation: m.IsEnterpriseDeepCooperation,
QrCode: utils.AddOssDomain(m.QrCode),
BeGoodAt: m.BeGoodAt,
BriefIntroduction: m.BriefIntroduction,
CreatedAt: m.CreatedAt,
UpdatedAt: m.UpdatedAt,
}
return res
}
// GetDoctorDto 获取医生详情
func GetDoctorDto(m *model.UserDoctor) *UserDoctorDto {
res := &UserDoctorDto{
DoctorID: strconv.Itoa(int(m.DoctorId)),
UserID: strconv.Itoa(int(m.UserId)),
UserName: m.UserName,
Status: m.Status,
IDCardStatus: m.Status,
IdenAuthStatus: m.IdenAuthStatus,
MultiPointStatus: m.MultiPointStatus,
Avatar: utils.AddOssDomain(m.Avatar),
DoctorTitle: utils.DoctorTitleToStr(m.DoctorTitle),
DepartmentCustomName: m.DepartmentCustomName,
ServedPatientsNum: m.ServedPatientsNum,
PraiseRate: m.PraiseRate,
AvgResponseTime: m.AvgResponseTime,
NumberOfFans: m.NumberOfFans,
IsImgExpertReception: m.IsImgExpertReception,
IsImgWelfareReception: m.IsImgWelfareReception,
IsImgQuickReception: m.IsImgQuickReception,
IsPlatformDeepCooperation: m.IsPlatformDeepCooperation,
IsEnterpriseDeepCooperation: m.IsEnterpriseDeepCooperation,
QrCode: utils.AddOssDomain(m.QrCode),
BeGoodAt: m.BeGoodAt,
BriefIntroduction: m.BriefIntroduction,
CreatedAt: m.CreatedAt,
UpdatedAt: m.UpdatedAt,
}
return res
}
// GetUserDoctorPageListDto 获取医生列表-分页
func GetUserDoctorPageListDto(m []*model.UserDoctor) []*UserDoctorPageDto {
// 处理返回值
responses := make([]*UserDoctorPageDto, len(m))
if len(m) > 0 {
for i, v := range m {
response := &UserDoctorPageDto{
DoctorID: fmt.Sprintf("%d", v.DoctorId),
UserID: fmt.Sprintf("%d", v.UserId),
UserName: v.UserName,
MultiPointStatus: v.MultiPointStatus,
Avatar: utils.AddOssDomain(v.Avatar),
DoctorTitle: utils.DoctorTitleToStr(v.DoctorTitle),
DepartmentCustomName: v.DepartmentCustomName,
ServedPatientsNum: v.ServedPatientsNum,
PraiseRate: v.PraiseRate,
AvgResponseTime: v.AvgResponseTime,
NumberOfFans: v.NumberOfFans,
IsPlatformDeepCooperation: v.IsPlatformDeepCooperation,
CreatedAt: v.CreatedAt,
QrCode: utils.AddOssDomain(v.QrCode),
BeGoodAt: v.BeGoodAt,
BriefIntroduction: v.BriefIntroduction,
UpdatedAt: v.UpdatedAt,
}
// 加载用户属性
if v.User != nil {
response = response.LoadUserAttr(v.User)
}
// 加载医院属性数据
if v.Hospital != nil {
response = response.LoadHospitalAttr(v.Hospital)
}
// 加载问诊配置数据
if v.Hospital != nil {
response = response.LoadDoctorInquiryConfig(v.DoctorInquiryConfig)
}
// 将转换后的结构体添加到新切片中
responses[i] = response
}
}
return responses
}
// LoadUserAttr 加载用户属性数据
func (r *UserDoctorDto) LoadUserAttr(m *model.User) *UserDoctorDto {
if m != nil {
r.Mobile = m.Mobile
r.Age = m.Age
r.Sex = m.Sex
}
return r
}
// LoadHospitalName 加载医院名称
func (r *UserDoctorDto) LoadHospitalName(m *model.Hospital) *UserDoctorDto {
if m != nil {
r.HospitalName = m.HospitalName
}
return r
}
// LoadDoctorInquiryConfig 加载问诊配置数据
func (r *UserDoctorDto) LoadDoctorInquiryConfig(m []*model.DoctorInquiryConfig) *UserDoctorDto {
if len(m) > 0 {
r.DoctorInquiryConfig = GetDoctorInquiryConfigListDto(m)
}
return r
}
// LoadUserAttr 加载用户属性数据
func (r *MultiUserDoctorDto) LoadUserAttr(m *model.User) *MultiUserDoctorDto {
if m != nil {
r.Mobile = m.Mobile
r.Age = m.Age
r.Sex = m.Sex
}
return r
}
// LoadHospitalName 加载医院名称
func (r *MultiUserDoctorDto) LoadHospitalName(m *model.Hospital) *MultiUserDoctorDto {
if m != nil {
r.HospitalName = m.HospitalName
}
return r
}
// LoadUserAttr 加载用户属性数据
func (r *UserDoctorPageDto) LoadUserAttr(m *model.User) *UserDoctorPageDto {
if m != nil {
r.Age = m.Age
r.Sex = m.Sex
r.IsOnline = m.IsOnline
}
return r
}
// LoadHospitalAttr 加载医院属性数据
func (r *UserDoctorPageDto) LoadHospitalAttr(m *model.Hospital) *UserDoctorPageDto {
if m != nil {
r.HospitalName = m.HospitalName
r.HospitalLevelName = m.HospitalLevelName
}
return r
}
// LoadDoctorInquiryConfig 加载问诊配置数据
func (r *UserDoctorPageDto) LoadDoctorInquiryConfig(m []*model.DoctorInquiryConfig) *UserDoctorPageDto {
if len(m) > 0 {
r.DoctorInquiryConfig = GetDoctorInquiryConfigListDto(m)
}
return r
}

View File

@ -1,8 +1,9 @@
package v1
type UserDoctorRequest struct {
GetMultiDoctor // 获取多点执业医生详情
GetDoctor // 获取医生详情
GetMultiDoctor // 获取多点执业医生详情
GetDoctor // 获取医生详情
GetUserDoctorPage // 获取医生列表-分页
}
// GetMultiDoctor 获取多点执业医生详情
@ -16,3 +17,20 @@ type GetDoctor struct {
Mobile string `json:"mobile" form:"mobile" validate:"required,Mobile" label:"手机号"`
UserName string `json:"user_name" form:"user_name" validate:"required" label:"用户名"`
}
// GetUserDoctorPage 获取医生列表-分页
type GetUserDoctorPage struct {
Page int `json:"page" form:"page" label:"页码"`
PageSize int `json:"page_size" form:"page_size" label:"每页个数"`
Mobile string `json:"mobile" form:"mobile" label:"手机号"`
UserName string `json:"user_name" form:"user_name" label:"用户名"`
HospitalName string `json:"hospital_name" form:"hospital_name" label:"医院名称"`
DepartmentCustomName string `json:"department_custom_name" form:"department_custom_name" label:"科室名称"`
IsRecommend *int `json:"is_recommend" form:"is_recommend" label:"是否推荐"` // 0:否 1:是)
DoctorTitle *int `json:"doctor_title" form:"doctor_title" label:"医生职称"` // 1:主任医师 2:主任中医师 3:副主任医师 4:副主任中医师 5:主治医师 6:住院医师)
InquiryType string `json:"inquiry_type" form:"inquiry_type" label:"接诊类型" validate:"required"` // 接诊类型1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
InquiryMode string `json:"inquiry_mode" form:"inquiry_mode" label:"接诊方式" validate:"required"` // 接诊方式1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8 // :健康包 9:随访包)
IsEnterpriseDeepCooperation *int `json:"is_enterprise_deep_cooperation" form:"is_enterprise_deep_cooperation" label:"是否企业深度合作"` // 0:否 1:是)
IsPlatformDeepCooperation *int `json:"is_platform_deep_cooperation" form:"is_platform_deep_cooperation" label:"平台深度合作医生"` // 是否平台深度合作医生0:否 1:是)
IsSysDiagnoCooperation *int `json:"is_sys_diagno_cooperation" form:"is_sys_diagno_cooperation" label:"是否先思达合作医生"` // 0:否 1:是)
}

View File

@ -1,164 +0,0 @@
package userDoctorResponse
import (
"hospital-open-api/api/model"
"hospital-open-api/api/responses/v1/doctotInquiryConfigResponse"
"hospital-open-api/utils"
"strconv"
)
// GetMultiDoctor 获取多点执业医生详情
type GetMultiDoctor struct {
DoctorID string `json:"doctor_id"` // 主键id
UserID string `json:"user_id"` // 用户id
UserName string `json:"user_name"` // 用户名称
Status int `json:"status"` // 状态0:禁用 1:正常 2:删除)
IDCardStatus int `json:"idcard_status"` // 实名认证状态0:未认证 1:认证通过 2:认证失败)
IdenAuthStatus int `json:"iden_auth_status"` // 身份认证状态0:未认证 1:认证通过 2:审核中 3:认证失败)
MultiPointStatus int `json:"multi_point_status"` // 医生多点执业认证状态0:未认证 1:认证通过 2:审核中 3:认证失败)
Avatar string `json:"avatar"` // 头像
DoctorTitle string `json:"doctor_title"` // 医生职称1:主任医师 2:主任中医师 3:副主任医师 4:副主任中医师 5:主治医师 6:住院医师)
DepartmentCustomName string `json:"department_custom_name"` // 科室名称(如未自己输入,填入标准科室名称)
ServedPatientsNum int `json:"served_patients_num"` // 服务患者数量(订单结束时统计)
PraiseRate float64 `json:"praise_rate"` // 好评率百分制。订单平均评价中超过4-5分的订单总数 / 总订单数 * 5
AvgResponseTime float64 `json:"avg_response_time"` // 平均响应时间(分钟制)
NumberOfFans uint `json:"number_of_fans"` // 被关注数量
IsImgExpertReception int `json:"is_img_expert_reception"` // 是否参加专家图文接诊0:否 1:是)
IsImgWelfareReception int `json:"is_img_welfare_reception"` // 是否参加公益图文问诊0:否 1:是)
IsImgQuickReception int `json:"is_img_quick_reception"` // 是否参加快速图文接诊0:否 1:是)
IsPlatformDeepCooperation int `json:"is_platform_deep_cooperation"` // 是否平台深度合作医生0:否 1:是)
IsEnterpriseDeepCooperation int `json:"is_enterprise_deep_cooperation"` // 是否企业深度合作医生0:否 1:是)
QrCode string `json:"qr_code"` // 分享二维码
BeGoodAt string `json:"be_good_at"` // 擅长
BriefIntroduction string `json:"brief_introduction"` // 医生简介
Mobile string `json:"mobile"` // 手机号
Age uint `json:"age"` // 年龄
Sex int `json:"sex"` // 性别0:未知 1:男 2:女)
HospitalName string `json:"hospital_name"` // 医院名称
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间
}
// GetDoctor 获取医生详情
type GetDoctor struct {
DoctorID string `json:"doctor_id"` // 主键id
UserID string `json:"user_id"` // 用户id
UserName string `json:"user_name"` // 用户名称
Status int `json:"status"` // 状态0:禁用 1:正常 2:删除)
IDCardStatus int `json:"idcard_status"` // 实名认证状态0:未认证 1:认证通过 2:认证失败)
IdenAuthStatus int `json:"iden_auth_status"` // 身份认证状态0:未认证 1:认证通过 2:审核中 3:认证失败)
MultiPointStatus int `json:"multi_point_status"` // 医生多点执业认证状态0:未认证 1:认证通过 2:审核中 3:认证失败)
Avatar string `json:"avatar"` // 头像
DoctorTitle string `json:"doctor_title"` // 医生职称1:主任医师 2:主任中医师 3:副主任医师 4:副主任中医师 5:主治医师 6:住院医师)
DepartmentCustomName string `json:"department_custom_name"` // 科室名称(如未自己输入,填入标准科室名称)
ServedPatientsNum int `json:"served_patients_num"` // 服务患者数量(订单结束时统计)
PraiseRate float64 `json:"praise_rate"` // 好评率百分制。订单平均评价中超过4-5分的订单总数 / 总订单数 * 5
AvgResponseTime float64 `json:"avg_response_time"` // 平均响应时间(分钟制)
NumberOfFans uint `json:"number_of_fans"` // 被关注数量
IsImgExpertReception int `json:"is_img_expert_reception"` // 是否参加专家图文接诊0:否 1:是)
IsImgWelfareReception int `json:"is_img_welfare_reception"` // 是否参加公益图文问诊0:否 1:是)
IsImgQuickReception int `json:"is_img_quick_reception"` // 是否参加快速图文接诊0:否 1:是)
IsPlatformDeepCooperation int `json:"is_platform_deep_cooperation"` // 是否平台深度合作医生0:否 1:是)
IsEnterpriseDeepCooperation int `json:"is_enterprise_deep_cooperation"` // 是否企业深度合作医生0:否 1:是)
QrCode string `json:"qr_code"` // 分享二维码
BeGoodAt string `json:"be_good_at"` // 擅长
BriefIntroduction string `json:"brief_introduction"` // 医生简介
Mobile string `json:"mobile"` // 手机号
Age uint `json:"age"` // 年龄
Sex int `json:"sex"` // 性别0:未知 1:男 2:女)
HospitalName string `json:"hospital_name"` // 医院名称
DoctorInquiryConfig []*doctotInquiryConfigResponse.DoctorInquiryConfig `json:"doctor_inquiry_config"` // 医生问诊配置
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间
}
// GetMultiDoctorResponse 获取多点执业医生详情
func GetMultiDoctorResponse(userDoctor *model.UserDoctor) GetMultiDoctor {
res := GetMultiDoctor{
DoctorID: strconv.Itoa(int(userDoctor.DoctorId)),
UserID: strconv.Itoa(int(userDoctor.UserId)),
UserName: userDoctor.UserName,
Status: userDoctor.Status,
IDCardStatus: userDoctor.Status,
IdenAuthStatus: userDoctor.IdenAuthStatus,
MultiPointStatus: userDoctor.MultiPointStatus,
Avatar: utils.AddOssDomain(userDoctor.Avatar),
DoctorTitle: utils.DoctorTitleToStr(userDoctor.DoctorTitle),
DepartmentCustomName: userDoctor.DepartmentCustomName,
ServedPatientsNum: userDoctor.ServedPatientsNum,
PraiseRate: userDoctor.PraiseRate,
AvgResponseTime: userDoctor.AvgResponseTime,
NumberOfFans: userDoctor.NumberOfFans,
IsImgExpertReception: userDoctor.IsImgExpertReception,
IsImgWelfareReception: userDoctor.IsImgWelfareReception,
IsImgQuickReception: userDoctor.IsImgQuickReception,
IsPlatformDeepCooperation: userDoctor.IsPlatformDeepCooperation,
IsEnterpriseDeepCooperation: userDoctor.IsEnterpriseDeepCooperation,
QrCode: utils.AddOssDomain(userDoctor.QrCode),
BeGoodAt: userDoctor.BeGoodAt,
BriefIntroduction: userDoctor.BriefIntroduction,
CreatedAt: userDoctor.CreatedAt,
UpdatedAt: userDoctor.UpdatedAt,
}
if userDoctor.User != nil {
res.Mobile = userDoctor.User.Mobile
res.Age = userDoctor.User.Age
res.Sex = userDoctor.User.Sex
}
if userDoctor.Hospital != nil {
res.HospitalName = userDoctor.Hospital.HospitalName
}
return res
}
// GetDoctorResponse 获取医生详情
func GetDoctorResponse(userDoctor *model.UserDoctor) GetDoctor {
res := GetDoctor{
DoctorID: strconv.Itoa(int(userDoctor.DoctorId)),
UserID: strconv.Itoa(int(userDoctor.UserId)),
UserName: userDoctor.UserName,
Status: userDoctor.Status,
IDCardStatus: userDoctor.Status,
IdenAuthStatus: userDoctor.IdenAuthStatus,
MultiPointStatus: userDoctor.MultiPointStatus,
Avatar: utils.AddOssDomain(userDoctor.Avatar),
DoctorTitle: utils.DoctorTitleToStr(userDoctor.DoctorTitle),
DepartmentCustomName: userDoctor.DepartmentCustomName,
ServedPatientsNum: userDoctor.ServedPatientsNum,
PraiseRate: userDoctor.PraiseRate,
AvgResponseTime: userDoctor.AvgResponseTime,
NumberOfFans: userDoctor.NumberOfFans,
IsImgExpertReception: userDoctor.IsImgExpertReception,
IsImgWelfareReception: userDoctor.IsImgWelfareReception,
IsImgQuickReception: userDoctor.IsImgQuickReception,
IsPlatformDeepCooperation: userDoctor.IsPlatformDeepCooperation,
IsEnterpriseDeepCooperation: userDoctor.IsEnterpriseDeepCooperation,
QrCode: utils.AddOssDomain(userDoctor.QrCode),
BeGoodAt: userDoctor.BeGoodAt,
BriefIntroduction: userDoctor.BriefIntroduction,
CreatedAt: userDoctor.CreatedAt,
UpdatedAt: userDoctor.UpdatedAt,
}
// 用户数据
if userDoctor.User != nil {
res.Mobile = userDoctor.User.Mobile
res.Age = userDoctor.User.Age
res.Sex = userDoctor.User.Sex
}
// 医院名称
if userDoctor.Hospital != nil {
res.HospitalName = userDoctor.Hospital.HospitalName
}
// 问诊配置
if len(userDoctor.DoctorInquiryConfig) > 0 {
res.DoctorInquiryConfig = doctotInquiryConfigResponse.GetDoctorInquiryConfigListResponse(userDoctor.DoctorInquiryConfig)
}
return res
}

View File

@ -91,6 +91,9 @@ func privateRouter(r *gin.Engine, api controller.Api) {
// 获取多点执业医生详情
doctorGroup.GET("/multi", api.V1.UserDoctor.GetMultiDoctor)
// 获取医生列表-分页
doctorGroup.GET("/page", api.V1.UserDoctor.GetUserDoctorPage)
}
}
@ -100,5 +103,15 @@ func privateRouter(r *gin.Engine, api controller.Api) {
// 生成页面加密scheme码
wechatGroup.POST("/scheme", api.V1.WeChat.GetScheme)
}
// 优惠卷
couponGroup := v1Group.Group("/coupon")
{
// 查询用户某一优惠卷领取状态
couponGroup.GET("", api.V1.UserDoctor.GetDoctor)
// 领取某一优惠卷
couponGroup.POST("", api.V1.UserDoctor.GetDoctor)
}
}
}

View File

@ -0,0 +1,61 @@
package v1
import (
"hospital-open-api/api/dao"
dtoV1 "hospital-open-api/api/dto/v1"
requestsV1 "hospital-open-api/api/requests/v1"
)
// UserDoctorService 医生
type UserDoctorService struct {
}
// GetDoctor 获取医生详情
func (r *UserDoctorService) GetDoctor(req requestsV1.GetDoctor) (g *dtoV1.UserDoctorDto, err error) {
// 获取数据
userDoctorDao := dao.UserDoctorDao{}
userDoctor, err := userDoctorDao.GetUserDoctor(req)
if err != nil && userDoctor == nil {
return nil, err
}
// 处理返回值
g = dtoV1.GetDoctorDto(userDoctor)
// 加载用户数据
g.LoadUserAttr(userDoctor.User)
// 加载医院名称
g.LoadHospitalName(userDoctor.Hospital)
// 加载问诊配置数据
g.LoadDoctorInquiryConfig(userDoctor.DoctorInquiryConfig)
return g, nil
}
// GetMultiDoctor 获取多点执业医生详情
func (r *UserDoctorService) GetMultiDoctor(req requestsV1.GetMultiDoctor) (g *dtoV1.MultiUserDoctorDto, err error) {
// 获取数据
userDoctorDao := dao.UserDoctorDao{}
userDoctor, err := userDoctorDao.GetMultiUserDoctor(req)
if err != nil && userDoctor == nil {
return nil, err
}
// 处理返回值
g = dtoV1.GetMultiDoctorDto(userDoctor)
if err != nil {
return nil, err
}
// 加载用户数据
g.LoadUserAttr(userDoctor.User)
// 加载医院名称
g.LoadHospitalName(userDoctor.Hospital)
// 维护是否多点执业字段
return g, nil
}