根据药房查询医生列表
This commit is contained in:
@@ -232,3 +232,53 @@ func (r *Pharmacy) DeletePharmacy(c *gin.Context) {
|
|||||||
|
|
||||||
responses.Ok(c)
|
responses.Ok(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetPharmacyDoctorPage 获取药房绑定的医生列表-分页
|
||||||
|
func (r *Pharmacy) GetPharmacyDoctorPage(c *gin.Context) {
|
||||||
|
req := requests.GetPharmacyDoctorPage{}
|
||||||
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||||||
|
responses.FailWithMessage(err.Error(), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := global.Validate.Struct(req); err != nil {
|
||||||
|
responses.FailWithMessage(utils.Translate(err), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
pharmacyService := service.PharmacyService{}
|
||||||
|
result, err := pharmacyService.GetPharmacyDoctorPage(req)
|
||||||
|
if err != nil {
|
||||||
|
responses.FailWithMessage(err.Error(), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
responses.OkWithData(result, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPharmacyDoctorList 获取药房绑定的医生列表
|
||||||
|
func (r *Pharmacy) GetPharmacyDoctorList(c *gin.Context) {
|
||||||
|
id := c.Param("pharmacy_id")
|
||||||
|
if id == "" {
|
||||||
|
id = c.Param("id")
|
||||||
|
}
|
||||||
|
if id == "" {
|
||||||
|
responses.FailWithMessage("缺少药房ID参数", c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
pharmacyId, err := strconv.ParseInt(id, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
responses.Fail(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
pharmacyService := service.PharmacyService{}
|
||||||
|
list, err := pharmacyService.GetPharmacyDoctorList(pharmacyId)
|
||||||
|
if err != nil {
|
||||||
|
responses.FailWithMessage(err.Error(), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
responses.OkWithData(list, c)
|
||||||
|
}
|
||||||
|
|||||||
@@ -96,3 +96,52 @@ func (r *DoctorPharmacyDao) SetDefaultPharmacyById(tx *gorm.DB, doctorPharmacyId
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetPharmacyDoctorPageSearch 获取药房绑定的医生列表-分页
|
||||||
|
func (r *DoctorPharmacyDao) GetPharmacyDoctorPageSearch(pharmacyId int64, req requests.GetPharmacyDoctorPage, page, pageSize int) (m []*model.DoctorPharmacy, total int64, err error) {
|
||||||
|
var totalRecords int64
|
||||||
|
|
||||||
|
query := global.Db.Model(&model.DoctorPharmacy{}).
|
||||||
|
Where("gdxz_doctor_pharmacy.pharmacy_id = ? AND gdxz_doctor_pharmacy.status = 1", pharmacyId)
|
||||||
|
|
||||||
|
// 如果有医生姓名或手机号筛选,做表连接
|
||||||
|
needJoinDoctor := req.DoctorName != "" || req.Mobile != ""
|
||||||
|
if needJoinDoctor {
|
||||||
|
query = query.Joins("JOIN gdxz_user_doctor ON gdxz_user_doctor.doctor_id = gdxz_doctor_pharmacy.doctor_id")
|
||||||
|
if req.DoctorName != "" {
|
||||||
|
query = query.Where("gdxz_user_doctor.user_name LIKE ?", "%"+req.DoctorName+"%")
|
||||||
|
}
|
||||||
|
if req.Mobile != "" {
|
||||||
|
query = query.Joins("JOIN gdxz_user ON gdxz_user.user_id = gdxz_user_doctor.user_id").
|
||||||
|
Where("gdxz_user.mobile LIKE ?", "%"+req.Mobile+"%")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := query.Count(&totalRecords).Error; err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = query.Order("gdxz_doctor_pharmacy.is_default desc, gdxz_doctor_pharmacy.created_at desc").
|
||||||
|
Preload("UserDoctor.User").
|
||||||
|
Preload("UserDoctor.Hospital").
|
||||||
|
Scopes(model.Paginate(page, pageSize)).
|
||||||
|
Find(&m).Error
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return m, totalRecords, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPharmacyDoctorListByPharmacyId 获取药房绑定的所有医生列表
|
||||||
|
func (r *DoctorPharmacyDao) GetPharmacyDoctorListByPharmacyId(pharmacyId int64) (m []*model.DoctorPharmacy, err error) {
|
||||||
|
err = global.Db.Preload("UserDoctor.User").
|
||||||
|
Preload("UserDoctor.Hospital").
|
||||||
|
Where("pharmacy_id = ? AND status = 1", pharmacyId).
|
||||||
|
Order("is_default desc, created_at desc").
|
||||||
|
Find(&m).Error
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
package dto
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"hospital-admin-api/api/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PharmacyDoctorDto struct {
|
||||||
|
DoctorPharmacyId string `json:"doctor_pharmacy_id"` // 绑定关系id
|
||||||
|
DoctorId string `json:"doctor_id"` // 医生id
|
||||||
|
UserId string `json:"user_id"` // 用户id
|
||||||
|
UserName string `json:"user_name"` // 医生姓名
|
||||||
|
Avatar string `json:"avatar"` // 头像
|
||||||
|
DoctorTitle int `json:"doctor_title"` // 职称代码
|
||||||
|
DoctorTitleName string `json:"doctor_title_name"` // 职称名称
|
||||||
|
DepartmentCustomId string `json:"department_custom_id"` // 科室id
|
||||||
|
DepartmentCustomName string `json:"department_custom_name"` // 科室名称
|
||||||
|
DepartmentCustomMobile string `json:"department_custom_mobile"` // 科室电话
|
||||||
|
HospitalId string `json:"hospital_id"` // 医院id
|
||||||
|
HospitalName string `json:"hospital_name"` // 医院名称
|
||||||
|
Mobile string `json:"mobile"` // 手机号
|
||||||
|
IsDefault int `json:"is_default"` // 是否为默认药房(0:否 1:是)
|
||||||
|
Status int `json:"status"` // 状态(1:正常)
|
||||||
|
BindTime model.LocalTime `json:"bind_time"` // 绑定时间
|
||||||
|
}
|
||||||
|
|
||||||
|
var doctorTitleMap = map[int]string{
|
||||||
|
1: "主任医师",
|
||||||
|
2: "主任中医师",
|
||||||
|
3: "副主任医师",
|
||||||
|
4: "副主任中医师",
|
||||||
|
5: "主治医师",
|
||||||
|
6: "住院医师",
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetPharmacyDoctorDto(m *model.DoctorPharmacy) *PharmacyDoctorDto {
|
||||||
|
if m == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
dto := &PharmacyDoctorDto{
|
||||||
|
DoctorPharmacyId: fmt.Sprintf("%d", m.DoctorPharmacyId),
|
||||||
|
DoctorId: fmt.Sprintf("%d", m.DoctorId),
|
||||||
|
IsDefault: m.IsDefault,
|
||||||
|
Status: m.Status,
|
||||||
|
BindTime: m.CreatedAt,
|
||||||
|
}
|
||||||
|
|
||||||
|
if m.UserDoctor != nil {
|
||||||
|
dto.UserId = fmt.Sprintf("%d", m.UserDoctor.UserId)
|
||||||
|
dto.UserName = m.UserDoctor.UserName
|
||||||
|
dto.Avatar = m.UserDoctor.Avatar
|
||||||
|
dto.DoctorTitle = m.UserDoctor.DoctorTitle
|
||||||
|
dto.DoctorTitleName = doctorTitleMap[m.UserDoctor.DoctorTitle]
|
||||||
|
dto.DepartmentCustomId = fmt.Sprintf("%d", m.UserDoctor.DepartmentCustomId)
|
||||||
|
dto.DepartmentCustomName = m.UserDoctor.DepartmentCustomName
|
||||||
|
dto.DepartmentCustomMobile = m.UserDoctor.DepartmentCustomMobile
|
||||||
|
dto.HospitalId = fmt.Sprintf("%d", m.UserDoctor.HospitalID)
|
||||||
|
|
||||||
|
if m.UserDoctor.Hospital != nil {
|
||||||
|
dto.HospitalName = m.UserDoctor.Hospital.HospitalName
|
||||||
|
}
|
||||||
|
|
||||||
|
if m.UserDoctor.User != nil {
|
||||||
|
dto.Mobile = m.UserDoctor.User.Mobile
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dto
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetPharmacyDoctorListDto(list []*model.DoctorPharmacy) []PharmacyDoctorDto {
|
||||||
|
res := make([]PharmacyDoctorDto, len(list))
|
||||||
|
for i, v := range list {
|
||||||
|
res[i] = *GetPharmacyDoctorDto(v)
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
@@ -14,7 +14,8 @@ type DoctorPharmacy struct {
|
|||||||
IsDefault int `gorm:"column:is_default;type:tinyint(1);default:0;comment:是否默认药房(0:否 1:是)" json:"is_default"`
|
IsDefault int `gorm:"column:is_default;type:tinyint(1);default:0;comment:是否默认药房(0:否 1:是)" json:"is_default"`
|
||||||
Status int `gorm:"column:status;type:tinyint(1);default:1;comment:状态(0:禁用 1:正常)" json:"status"`
|
Status int `gorm:"column:status;type:tinyint(1);default:1;comment:状态(0:禁用 1:正常)" json:"status"`
|
||||||
Model
|
Model
|
||||||
Pharmacy *Pharmacy `gorm:"foreignKey:PharmacyId;references:pharmacy_id" json:"pharmacy"`
|
Pharmacy *Pharmacy `gorm:"foreignKey:PharmacyId;references:pharmacy_id" json:"pharmacy"`
|
||||||
|
UserDoctor *UserDoctor `gorm:"foreignKey:DoctorId;references:doctor_id" json:"user_doctor"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *DoctorPharmacy) TableName() string {
|
func (m *DoctorPharmacy) TableName() string {
|
||||||
|
|||||||
@@ -1,11 +1,27 @@
|
|||||||
package requests
|
package requests
|
||||||
|
|
||||||
type PharmacyRequest struct {
|
type PharmacyRequest struct {
|
||||||
GetPharmacyList // 获取药房列表
|
GetPharmacyList // 获取药房列表
|
||||||
GetPharmacyPage // 获取药房列表-分页
|
GetPharmacyPage // 获取药房列表-分页
|
||||||
AddPharmacy // 新增药房
|
AddPharmacy // 新增药房
|
||||||
PutPharmacy // 修改药房
|
PutPharmacy // 修改药房
|
||||||
PutPharmacyStatus // 修改药房状态
|
PutPharmacyStatus // 修改药房状态
|
||||||
|
GetPharmacyDoctorPage // 药房绑定的医生列表-分页
|
||||||
|
GetPharmacyDoctorList // 药房绑定的医生列表
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPharmacyDoctorPage 药房绑定的医生列表-分页
|
||||||
|
type GetPharmacyDoctorPage struct {
|
||||||
|
PharmacyId string `json:"pharmacy_id" form:"pharmacy_id" label:"药房id" validate:"required"`
|
||||||
|
DoctorName string `json:"doctor_name" form:"doctor_name" label:"医生姓名"`
|
||||||
|
Mobile string `json:"mobile" form:"mobile" label:"手机号"`
|
||||||
|
Page int `json:"page" form:"page" label:"页码"`
|
||||||
|
PageSize int `json:"page_size" form:"page_size" label:"每页个数"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPharmacyDoctorList 药房绑定的医生列表
|
||||||
|
type GetPharmacyDoctorList struct {
|
||||||
|
PharmacyId string `json:"pharmacy_id" form:"pharmacy_id" label:"药房id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPharmacyList 获取药房列表
|
// GetPharmacyList 获取药房列表
|
||||||
|
|||||||
@@ -937,6 +937,12 @@ func privateRouter(r *gin.Engine, api controller.Api) {
|
|||||||
|
|
||||||
// 删除药房
|
// 删除药房
|
||||||
pharmacyGroup.DELETE("/:pharmacy_id", api.Pharmacy.DeletePharmacy)
|
pharmacyGroup.DELETE("/:pharmacy_id", api.Pharmacy.DeletePharmacy)
|
||||||
|
|
||||||
|
// 药房绑定的医生列表-分页
|
||||||
|
pharmacyGroup.POST("/doctor/page", api.Pharmacy.GetPharmacyDoctorPage)
|
||||||
|
|
||||||
|
// 药房绑定的医生列表
|
||||||
|
pharmacyGroup.GET("/doctor/:pharmacy_id", api.Pharmacy.GetPharmacyDoctorList)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 科普分类管理
|
// 科普分类管理
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import (
|
|||||||
"hospital-admin-api/api/model"
|
"hospital-admin-api/api/model"
|
||||||
"hospital-admin-api/api/requests"
|
"hospital-admin-api/api/requests"
|
||||||
"hospital-admin-api/global"
|
"hospital-admin-api/global"
|
||||||
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
type PharmacyService struct{}
|
type PharmacyService struct{}
|
||||||
@@ -259,3 +260,56 @@ func (r *PharmacyService) GetPharmacy(pharmacyId int64) (*dto.PharmacyDto, error
|
|||||||
|
|
||||||
return dto.GetPharmacyDto(pharmacy), nil
|
return dto.GetPharmacyDto(pharmacy), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetPharmacyDoctorPage 获取药房绑定的医生列表-分页
|
||||||
|
func (r *PharmacyService) GetPharmacyDoctorPage(req requests.GetPharmacyDoctorPage) (map[string]interface{}, error) {
|
||||||
|
pharmacyId, err := strconv.ParseInt(req.PharmacyId, 10, 64)
|
||||||
|
if err != nil || pharmacyId == 0 {
|
||||||
|
return nil, errors.New("药房id无效")
|
||||||
|
}
|
||||||
|
|
||||||
|
pharmacyDao := dao.PharmacyDao{}
|
||||||
|
pharmacy, err := pharmacyDao.GetPharmacyById(pharmacyId)
|
||||||
|
if err != nil || pharmacy == nil {
|
||||||
|
return nil, errors.New("药房不存在或已被删除")
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.Page <= 0 {
|
||||||
|
req.Page = 1
|
||||||
|
}
|
||||||
|
if req.PageSize <= 0 {
|
||||||
|
req.PageSize = 20
|
||||||
|
}
|
||||||
|
|
||||||
|
doctorPharmacyDao := dao.DoctorPharmacyDao{}
|
||||||
|
list, total, err := doctorPharmacyDao.GetPharmacyDoctorPageSearch(pharmacyId, req, req.Page, req.PageSize)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
resList := dto.GetPharmacyDoctorListDto(list)
|
||||||
|
|
||||||
|
result := make(map[string]interface{})
|
||||||
|
result["page"] = req.Page
|
||||||
|
result["page_size"] = req.PageSize
|
||||||
|
result["total"] = total
|
||||||
|
result["data"] = resList
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPharmacyDoctorList 获取药房绑定的全部医生列表
|
||||||
|
func (r *PharmacyService) GetPharmacyDoctorList(pharmacyId int64) ([]dto.PharmacyDoctorDto, error) {
|
||||||
|
pharmacyDao := dao.PharmacyDao{}
|
||||||
|
pharmacy, err := pharmacyDao.GetPharmacyById(pharmacyId)
|
||||||
|
if err != nil || pharmacy == nil {
|
||||||
|
return nil, errors.New("药房不存在或已被删除")
|
||||||
|
}
|
||||||
|
|
||||||
|
doctorPharmacyDao := dao.DoctorPharmacyDao{}
|
||||||
|
list, err := doctorPharmacyDao.GetPharmacyDoctorListByPharmacyId(pharmacyId)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return dto.GetPharmacyDoctorListDto(list), nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user