新增获取处方列表-分页

This commit is contained in:
wucongxing 2023-09-19 17:49:20 +08:00
parent dbbf44edb0
commit efde711eaa
11 changed files with 422 additions and 39 deletions

View File

@ -10,6 +10,7 @@ type Api struct {
order // 订单管理
userPatientManage // 患者管理
caseManage // 病例管理
orderPrescriptionManage // 处方管理
}
// SysSetting 系统设置
@ -53,3 +54,8 @@ type userPatientManage struct {
type caseManage struct {
Case // 患者列表
}
// 处方管理
type orderPrescriptionManage struct {
OrderPrescription // 处方列表
}

View File

@ -0,0 +1,79 @@
package controller
import (
"github.com/gin-gonic/gin"
"hospital-admin-api/api/dao"
"hospital-admin-api/api/requests"
"hospital-admin-api/api/responses"
"hospital-admin-api/api/responses/orderPrescriptionResponse"
"hospital-admin-api/global"
"hospital-admin-api/utils"
)
type OrderPrescription struct{}
// GetOrderPrescriptionPage 获取处方列表-分页
func (r *OrderPrescription) GetOrderPrescriptionPage(c *gin.Context) {
req := requests.OrderPrescriptionRequest{}
if err := c.ShouldBind(&req.GetOrderPrescriptionPage); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req.GetOrderPrescriptionPage); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
if req.GetOrderPrescriptionPage.Page == 0 {
req.GetOrderPrescriptionPage.Page = 1
}
if req.GetOrderPrescriptionPage.PageSize == 0 {
req.GetOrderPrescriptionPage.PageSize = 20
}
orderPrescriptionDao := dao.OrderPrescriptionDao{}
orderPrescription, total, err := orderPrescriptionDao.GetOrderPrescriptionPageSearch(req.GetOrderPrescriptionPage, req.GetOrderPrescriptionPage.Page, req.GetOrderPrescriptionPage.PageSize)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 处理返回值
GetOrderPrescriptionPage := orderPrescriptionResponse.GetOrderPrescriptionPageResponse(orderPrescription)
result := make(map[string]interface{})
result["page"] = req.GetOrderPrescriptionPage.Page
result["page_size"] = req.GetOrderPrescriptionPage.PageSize
result["total"] = total
result["data"] = GetOrderPrescriptionPage
responses.OkWithData(result, c)
}
// // GetOrderPrescription 处方详情
// func (r *OrderPrescription) GetOrderPrescription(c *gin.Context) {
// id := c.Param("family_id")
// if id == "" {
// responses.FailWithMessage("缺少参数", c)
// return
// }
//
// // 将 id 转换为 int64 类型
// familyId, err := strconv.ParseInt(id, 10, 64)
// if err != nil {
// responses.Fail(c)
// return
// }
//
// // 业务处理
// patientFamilyService := service.PrescriptionService{}
// getPrescriptionResponse, err := patientFamilyService.GetPrescription(familyId)
// if err != nil {
// responses.FailWithMessage(err.Error(), c)
// return
// }
//
// responses.OkWithData(getPrescriptionResponse, c)
// }

View File

@ -3,7 +3,10 @@ package dao
import (
"gorm.io/gorm"
"hospital-admin-api/api/model"
"hospital-admin-api/api/requests"
"hospital-admin-api/global"
"strings"
"time"
)
type OrderPrescriptionDao struct {
@ -70,3 +73,161 @@ func (r *OrderPrescriptionDao) AddByMap(tx *gorm.DB, data map[string]interface{}
}
return orderPrescription, nil
}
// GetOrderPrescriptionPageSearch 获取处方列表-分页
func (r *OrderPrescriptionDao) GetOrderPrescriptionPageSearch(req requests.GetOrderPrescriptionPage, page, pageSize int) (m []*model.OrderPrescription, total int64, err error) {
var totalRecords int64
// 构建查询条件
query := global.Db.Model(&model.OrderPrescription{})
// 患者表
query = query.Preload("UserPatient", func(db *gorm.DB) *gorm.DB {
return db.Omit("open_id", "union_id", "wx_session_key")
})
// 用户表
query = query.Preload("UserPatient.User", func(db *gorm.DB) *gorm.DB {
return db.Omit("user_password", "salt")
})
// 药师表
query = query.Preload("UserPharmacist", func(db *gorm.DB) *gorm.DB {
return db.Omit("open_id", "union_id", "wx_session_key")
})
// 处方关联疾病表
query = query.Preload("OrderPrescriptionIcd")
// 患者家庭成员表
query = query.Preload("PatientFamily")
// 处方编号
if req.PrescriptionCode != "" {
query = query.Where("prescription_code = ?", req.PrescriptionCode)
}
// 医生名称
if req.DoctorName != "" {
query = query.Where("doctor_name LIKE ?", "%"+req.DoctorName+"%")
}
// 患者姓名-就诊人
if req.PatientName != "" {
query = query.Where("patient_name LIKE ?", "%"+req.PatientName+"%")
}
// 手机号-医生/患者/就诊人
if req.Mobile != "" {
// 就诊人
patientFamilySubQuery := global.Db.Model(&model.PatientFamily{}).
Select("family_id").
Where("mobile = ?", req.Mobile)
// 患者
patientUserSubQuery := global.Db.Model(&model.User{}).
Select("user_id").
Where("mobile = ?", req.Mobile)
patientSubQuery := global.Db.Model(&model.UserPatient{}).
Select("patient_id").
Where(gorm.Expr("user_id IN (?)", patientUserSubQuery))
// 医生
doctorUserSubQuery := global.Db.Model(&model.User{}).
Select("user_id").
Where("mobile = ?", req.Mobile)
doctorSubQuery := global.Db.Model(&model.UserDoctor{}).
Select("doctor_id").
Where(gorm.Expr("user_id IN (?)", doctorUserSubQuery))
query = query.Where("patient_id IN (?)", patientSubQuery).Or("doctor_id IN (?)", doctorSubQuery).Or("family_id IN (?)", patientFamilySubQuery)
}
// 处方状态
if req.PrescriptionStatus != nil {
query = query.Where("prescription_status = ?", req.PrescriptionStatus)
}
// 药师审核状态
if req.PharmacistAuditStatus != nil {
query = query.Where("pharmacist_audit_status = ?", req.PharmacistAuditStatus)
}
// 问诊订单编号
if req.InquiryNo != "" {
subQuery := global.Db.Model(&model.OrderInquiry{}).
Select("order_inquiry_id").
Where("inquiry_no = ?", req.InquiryNo)
query = query.Where("order_inquiry_id IN (?)", subQuery)
}
// 药品订单编号
if req.OrderProductNo != "" {
subQuery := global.Db.Model(&model.OrderInquiry{}).
Select("order_prescription_id").
Where("order_product_no = ?", req.OrderProductNo)
query = query.Where("order_prescription_id IN (?)", subQuery)
}
// 药师审核时间
if req.PharmacistVerifyTime != "" {
pharmacistVerifyTime := strings.Split(req.PharmacistVerifyTime, "&")
if len(pharmacistVerifyTime) == 2 {
startTime, _ := time.Parse("2006-01-02", pharmacistVerifyTime[0])
endTime, _ := time.Parse("2006-01-02", pharmacistVerifyTime[1])
if startTime == endTime {
endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
}
query = query.Where("pharmacist_verify_time BETWEEN ? AND ?", startTime, endTime)
}
}
// 医生开具处方时间
if req.DoctorCreatedTime != "" {
doctorCreatedTime := strings.Split(req.DoctorCreatedTime, "&")
if len(doctorCreatedTime) == 2 {
startTime, _ := time.Parse("2006-01-02", doctorCreatedTime[0])
endTime, _ := time.Parse("2006-01-02", doctorCreatedTime[1])
if startTime == endTime {
endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
}
query = query.Where("doctor_created_time BETWEEN ? AND ?", startTime, endTime)
}
}
// 处方过期时间
if req.ExpiredTime != "" {
expiredTime := strings.Split(req.ExpiredTime, "&")
if len(expiredTime) == 2 {
startTime, _ := time.Parse("2006-01-02", expiredTime[0])
endTime, _ := time.Parse("2006-01-02", expiredTime[1])
if startTime == endTime {
endTime = endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
}
query = query.Where("expired_time BETWEEN ? AND ?", startTime, endTime)
}
}
// 排序
query = query.Order("created_at desc")
// 查询总数量
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

@ -32,6 +32,12 @@ type OrderPrescription struct {
PatientSex int `gorm:"column:patient_sex;type:tinyint(1);comment:患者性别-就诊人1:男 2:女)" json:"patient_sex"`
PatientAge int `gorm:"column:patient_age;type:int(11);comment:患者年龄-就诊人" json:"patient_age"`
DoctorAdvice string `gorm:"column:doctor_advice;type:varchar(255);comment:医嘱" json:"doctor_advice"`
OrderInquiry *OrderInquiry `gorm:"foreignKey:OrderInquiryId;references:order_inquiry_id" json:"order_inquiry"` // 问诊订单
UserDoctor *UserDoctor `gorm:"foreignKey:DoctorId;references:doctor_id" json:"user_doctor"` // 医生
UserPharmacist *UserPharmacist `gorm:"foreignKey:PharmacistId;references:pharmacist_id" json:"user_pharmacist"` // 药师
UserPatient *UserPatient `gorm:"foreignKey:PatientId;references:patient_id" json:"user_patient"` // 患者
OrderPrescriptionIcd []*OrderPrescriptionIcd `gorm:"foreignKey:OrderPrescriptionId;references:order_prescription_id" json:"order_prescription_icd"` // 处方疾病
PatientFamily *PatientFamily `gorm:"foreignKey:FamilyId;references:family_id" json:"patient_family"` // 家庭成员
Model
}

View File

@ -10,7 +10,7 @@ import (
type PatientFamily struct {
FamilyId int64 `gorm:"column:family_id;type:bigint(19);primary_key;comment:主键id" json:"family_id"`
PatientId int64 `gorm:"column:patient_id;type:bigint(19);comment:患者id" json:"patient_id"`
Relation int `gorm:"column:relation;type:tinyint(1);comment:与患者关系1:本人 2:父母 3:爱人 4:子女 5:亲戚 6:其他 " json:"relation"`
Relation *int `gorm:"column:relation;type:tinyint(1);comment:与患者关系1:本人 2:父母 3:爱人 4:子女 5:亲戚 6:其他 " json:"relation"`
Status int `gorm:"column:status;type:tinyint(1);default:1;comment:状态1:正常 2:删除)" json:"status"`
IsDefault int `gorm:"column:is_default;type:tinyint(1);default:0;comment:是否默认0:否 1:是)" json:"is_default"`
CardName string `gorm:"column:card_name;type:varchar(50);comment:姓名" json:"card_name"`

View File

@ -0,0 +1,22 @@
package requests
type OrderPrescriptionRequest struct {
GetOrderPrescriptionPage // 获取处方列表-分页
}
// GetOrderPrescriptionPage 获取处方列表-分页
type GetOrderPrescriptionPage struct {
Page int `json:"page" form:"page" label:"页码"`
PageSize int `json:"page_size" form:"page_size" label:"每页个数"`
PrescriptionCode string `json:"prescription_code" form:"prescription_code" label:"处方编号"`
DoctorName string `json:"doctor_name" form:"doctor_name" label:"医生名称"`
PatientName string `json:"patient_name" form:"patient_name" label:"患者姓名-就诊人"`
Mobile string `json:"mobile" form:"mobile" label:"手机号-医生/患者/就诊人"`
PrescriptionStatus *int `json:"prescription_status" form:"prescription_status" label:"处方状态"` // 1:待审核 2:待使用 3:已失效 4:已使用)
PharmacistAuditStatus *int `json:"pharmacist_audit_status" form:"pharmacist_audit_status" label:"药师审核状态"` // 0:审核中 1:审核成功 2:审核驳回)
PharmacistVerifyTime string `json:"pharmacist_verify_time" form:"pharmacist_verify_time" label:"药师审核时间"` // 时间区间数组形式下标0为开始时间下标1为结束时间
DoctorCreatedTime string `json:"doctor_created_time" form:"doctor_created_time" label:"医生开具处方时间"` // 时间区间数组形式下标0为开始时间下标1为结束时间
ExpiredTime string `json:"expired_time" form:"expired_time" label:"处方过期时间"` // 时间区间数组形式下标0为开始时间下标1为结束时间
InquiryNo string `json:"inquiry_no" form:"inquiry_no" label:"问诊订单编号"`
OrderProductNo string `json:"order_product_no" form:"order_product_no" label:"药品订单编号"`
}

View File

@ -1,7 +1,10 @@
package orderPrescriptionResponse
import (
"fmt"
"hospital-admin-api/api/model"
"hospital-admin-api/utils"
"strings"
)
type OrderPrescription struct {
@ -32,3 +35,101 @@ type OrderPrescription struct {
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间
}
type getOrderPrescriptionPage struct {
OrderPrescriptionId string `json:"order_prescription_id"` // 主键id
OrderInquiryId string `json:"order_inquiry_id"` // 订单-问诊id;NOT NULL
DoctorId string `json:"doctor_id"` // 医生id;NOT NULL
PatientId string `json:"patient_id"` // 患者id
FamilyId string `json:"family_id"` // 家庭成员id就诊用户
PharmacistId string `json:"pharmacist_id"` // 药师id
PrescriptionStatus int `json:"prescription_status"` // 处方状态1:待审核 2:待使用 3:已失效 4:已使用)
PharmacistAuditStatus int `json:"pharmacist_audit_status"` // 药师审核状态0:审核中 1:审核成功 2:审核驳回)
PharmacistVerifyTime model.LocalTime `json:"pharmacist_verify_time"` // 药师审核时间
PharmacistFailReason string `json:"pharmacist_fail_reason"` // 药师审核驳回原因
PlatformAuditStatus int `json:"platform_audit_status"` // 处方平台审核状态0:审核中 1:审核成功 2:审核驳回)
PlatformFailTime model.LocalTime `json:"platform_fail_time"` // 平台审核失败时间
PlatformFailReason string `json:"platform_fail_reason"` // 处方平台驳回原因
IsAutoPharVerify int `json:"is_auto_phar_verify"` // 是否药师自动审核0:否 1:是)
DoctorCreatedTime model.LocalTime `json:"doctor_created_time"` // 医生开具处方时间
ExpiredTime model.LocalTime `json:"expired_time"` // 处方过期时间
IsDelete int `json:"is_delete"` // 是否删除0:否 1:是)
PrescriptionCode string `json:"prescription_code"` // 处方编号
DoctorName string `json:"doctor_name"` // 医生名称
PatientName string `json:"patient_name"` // 患者姓名-就诊人
PatientSex int `json:"patient_sex"` // 患者性别-就诊人1:男 2:女)
PatientAge int `json:"patient_age"` // 患者年龄-就诊人
DoctorAdvice string `json:"doctor_advice"` // 医嘱
PharmacistName string `json:"pharmacist_name"` // 药师姓名
Mobile string `json:"mobile"` // 手机号
OrderPrescriptionIcd string `json:"order_prescription_icd"` // 处方诊断疾病
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间
}
// GetOrderPrescriptionPageResponse 获取处方列表-分页
func GetOrderPrescriptionPageResponse(orderPrescription []*model.OrderPrescription) []getOrderPrescriptionPage {
// 处理返回值
orderPrescriptionResponses := make([]getOrderPrescriptionPage, len(orderPrescription))
if len(orderPrescription) > 0 {
for i, v := range orderPrescription {
// 将原始结构体转换为新结构体
u := getOrderPrescriptionPage{
OrderPrescriptionId: fmt.Sprintf("%d", v.OrderPrescriptionId),
OrderInquiryId: fmt.Sprintf("%d", v.OrderInquiryId),
DoctorId: fmt.Sprintf("%d", v.DoctorId),
PatientId: fmt.Sprintf("%d", v.PatientId),
FamilyId: fmt.Sprintf("%d", v.FamilyId),
PharmacistId: fmt.Sprintf("%d", v.PharmacistId),
PrescriptionStatus: v.PrescriptionStatus,
PharmacistAuditStatus: v.PharmacistAuditStatus,
PharmacistVerifyTime: v.PharmacistVerifyTime,
PharmacistFailReason: v.PharmacistFailReason,
PlatformAuditStatus: v.PlatformAuditStatus,
PlatformFailTime: v.PlatformFailTime,
PlatformFailReason: v.PlatformFailReason,
IsAutoPharVerify: v.IsAutoPharVerify,
DoctorCreatedTime: v.DoctorCreatedTime,
ExpiredTime: v.ExpiredTime,
IsDelete: v.IsDelete,
PrescriptionCode: v.PrescriptionCode,
DoctorName: v.DoctorName,
PatientName: v.PatientName,
PatientSex: v.PatientSex,
PatientAge: v.PatientAge,
DoctorAdvice: v.DoctorAdvice,
CreatedAt: v.CreatedAt,
UpdatedAt: v.UpdatedAt,
}
// 药师姓名
if v.UserPharmacist != nil {
u.PharmacistName = v.UserPharmacist.UserName
}
// 手机号
if v.PatientFamily != nil {
u.Mobile = v.PatientFamily.MobileMask
}
if u.Mobile == "" && v.UserPatient.User != nil {
u.Mobile = utils.MaskPhoneStr(v.UserPatient.User.Mobile)
}
// 处方诊断疾病
if len(v.OrderPrescriptionIcd) > 0 {
var orderPrescriptionIcd []string
for _, icd := range v.OrderPrescriptionIcd {
orderPrescriptionIcd = append(orderPrescriptionIcd, icd.IcdName)
}
u.OrderPrescriptionIcd = strings.Join(orderPrescriptionIcd, "、")
}
// 将转换后的结构体添加到新切片中
orderPrescriptionResponses[i] = u
}
}
return orderPrescriptionResponses
}

View File

@ -111,7 +111,7 @@ func GetUserPatientResponse(patientFamilys []*model.PatientFamily) []*GetUserPat
item := &GetUserPatient{
FamilyId: fmt.Sprintf("%d", v.FamilyId),
PatientId: fmt.Sprintf("%d", v.PatientId),
Relation: &v.Relation,
Relation: v.Relation,
Status: &v.Status,
IsDefault: &v.IsDefault,
CardNameMask: v.CardNameMask,
@ -137,12 +137,11 @@ func GetPatientFamilyPageResponse(patientFamily []*model.PatientFamily) []getPat
if len(patientFamily) > 0 {
for i, v := range patientFamily {
// 将原始结构体转换为新结构体
// 将原始结构体转换为新结构体
patientFamilyResponse := getPatientFamilyPage{
FamilyId: fmt.Sprintf("%d", v.FamilyId),
PatientId: fmt.Sprintf("%d", v.PatientId),
Relation: &v.Relation,
Relation: v.Relation,
Status: &v.Status,
CardName: v.CardName,
MobileMask: utils.MaskPhoneStr(v.UserPatient.User.Mobile),

View File

@ -438,4 +438,14 @@ func privateRouter(r *gin.Engine, api controller.Api) {
}
}
// 处方管理
prescriptionGroup := adminGroup.Group("/prescription")
{
// 获取处方列表-分页
prescriptionGroup.GET("", api.OrderPrescription.GetOrderPrescriptionPage)
// 处方详情
prescriptionGroup.GET("/:patient_id", api.OrderPrescription.GetOrderPrescriptionPage)
}
}

View File

@ -35,7 +35,6 @@ func (r *OrderPrescriptionService) GetOrderPrescriptionById(OrderPrescriptionId
IsAutoPharVerify: orderPrescription.IsAutoPharVerify,
DoctorCreatedTime: orderPrescription.DoctorCreatedTime,
ExpiredTime: orderPrescription.ExpiredTime,
VoidTime: orderPrescription.VoidTime,
IsDelete: orderPrescription.IsDelete,
PrescriptionCode: orderPrescription.PrescriptionCode,
DoctorName: orderPrescription.DoctorName,

View File

@ -31,7 +31,7 @@ func (r *PatientFamilyService) GetPatientFamilyListByPatientId(patientId int64)
item := &patientFamilyResponse.PatientFamily{
FamilyId: fmt.Sprintf("%d", v.FamilyId),
PatientId: fmt.Sprintf("%d", v.PatientId),
Relation: &v.Relation,
Relation: v.Relation,
Status: &v.Status,
IsDefault: &v.IsDefault,
CardName: v.CardName,
@ -102,7 +102,7 @@ func (r *PatientFamilyService) GetPatientFamily(familyId int64) (getPatientFamil
getPatientFamilyResponse = &patientFamilyResponse.GetPatientFamily{
FamilyId: fmt.Sprintf("%d", patientFamily.FamilyId),
PatientId: fmt.Sprintf("%d", patientFamily.PatientId),
Relation: &patientFamily.Relation,
Relation: patientFamily.Relation,
Status: &patientFamily.Status,
IsDefault: &patientFamily.IsDefault,
CardName: patientFamily.CardName,