From 542a8f71ad43f3edaa8da5f0dd12f7cb3737a8ef Mon Sep 17 00:00:00 2001 From: haomingming Date: Tue, 6 Jan 2026 14:32:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/dao/orderPrescription.go | 31 ++++++++++++++--------- api/dao/orderProduct.go | 49 ++++++++++++++++++++++++++++++------ api/requests/orderProduct.go | 2 ++ 3 files changed, 63 insertions(+), 19 deletions(-) diff --git a/api/dao/orderPrescription.go b/api/dao/orderPrescription.go index 4cf4474..81df4d1 100644 --- a/api/dao/orderPrescription.go +++ b/api/dao/orderPrescription.go @@ -187,7 +187,7 @@ func (r *OrderPrescriptionDao) GetOrderPrescriptionPageSearch(req requests.GetOr // 药品订单编号 if req.OrderProductNo != "" { - subQuery := global.Db.Model(&model.OrderInquiry{}). + subQuery := global.Db.Model(&model.OrderProduct{}). Select("order_prescription_id"). Where("order_product_no = ?", req.OrderProductNo) query = query.Where("order_prescription_id IN (?)", subQuery) @@ -259,6 +259,7 @@ func (r *OrderPrescriptionDao) GetOrderPrescriptionTransferPageSearch(req reques var totalRecords int64 prescriptionTable := (&model.OrderPrescription{}).TableName() inquiryTable := (&model.OrderInquiry{}).TableName() + doctorTable := (&model.UserDoctor{}).TableName() // 构建查询条件 query := global.Db.Model(&model.OrderPrescription{}) @@ -267,6 +268,9 @@ func (r *OrderPrescriptionDao) GetOrderPrescriptionTransferPageSearch(req reques query = query.Joins("INNER JOIN "+inquiryTable+" ON "+prescriptionTable+".order_inquiry_id = "+inquiryTable+".order_inquiry_id"). Where(inquiryTable+".transfer_doctor_id IS NOT NULL") + // 关联抄方医生表 + query = query.Joins("LEFT JOIN " + doctorTable + " ON " + inquiryTable + ".transfer_doctor_id = " + doctorTable + ".doctor_id") + // 患者表 query = query.Preload("UserPatient", func(db *gorm.DB) *gorm.DB { return db.Omit("open_id", "union_id", "wx_session_key") @@ -302,9 +306,9 @@ func (r *OrderPrescriptionDao) GetOrderPrescriptionTransferPageSearch(req reques query = query.Where(prescriptionTable+".prescription_code = ?", req.PrescriptionCode) } - // 医生名称 + // 医生名称 - 查询抄方医生名称 if req.DoctorName != "" { - query = query.Where(prescriptionTable+".doctor_name LIKE ?", "%"+req.DoctorName+"%") + query = query.Where(doctorTable+".user_name LIKE ?", "%"+req.DoctorName+"%") } // 患者姓名-就诊人 @@ -312,7 +316,7 @@ func (r *OrderPrescriptionDao) GetOrderPrescriptionTransferPageSearch(req reques query = query.Where(prescriptionTable+".patient_name LIKE ?", "%"+req.PatientName+"%") } - // 手机号-医生/患者/就诊人 + // 手机号-医生/患者/就诊人(医生部分改为抄方医生) if req.Mobile != "" { // 就诊人 patientFamilySubQuery := global.Db.Model(&model.PatientFamily{}). @@ -328,16 +332,19 @@ func (r *OrderPrescriptionDao) GetOrderPrescriptionTransferPageSearch(req reques Select("patient_id"). Where(gorm.Expr("user_id IN (?)", patientUserSubQuery)) - // 医生 - doctorUserSubQuery := global.Db.Model(&model.User{}). + // 抄方医生:通过手机号找到 user_id -> doctor_id(抄方医生) + transferDoctorUserSubQuery := global.Db.Model(&model.User{}). Select("user_id"). Where("mobile = ?", req.Mobile) - doctorSubQuery := global.Db.Model(&model.UserDoctor{}). + transferDoctorSubQuery := global.Db.Model(&model.UserDoctor{}). Select("doctor_id"). - Where(gorm.Expr("user_id IN (?)", doctorUserSubQuery)) + Where(gorm.Expr("user_id IN (?)", transferDoctorUserSubQuery)) - query = query.Where(prescriptionTable+".patient_id IN (?)", patientSubQuery).Or(prescriptionTable+".doctor_id IN (?)", doctorSubQuery).Or(prescriptionTable+".family_id IN (?)", patientFamilySubQuery) + // 使用 OR 条件:患者匹配 OR 抄方医生匹配 OR 就诊人匹配 + query = query.Where(prescriptionTable+".patient_id IN (?)", patientSubQuery). + Or(inquiryTable+".transfer_doctor_id IN (?)", transferDoctorSubQuery). + Or(prescriptionTable+".family_id IN (?)", patientFamilySubQuery) } // 处方状态 @@ -360,7 +367,7 @@ func (r *OrderPrescriptionDao) GetOrderPrescriptionTransferPageSearch(req reques // 药品订单编号 if req.OrderProductNo != "" { - subQuery := global.Db.Model(&model.OrderInquiry{}). + subQuery := global.Db.Model(&model.OrderProduct{}). Select("order_prescription_id"). Where("order_product_no = ?", req.OrderProductNo) query = query.Where(prescriptionTable+".order_prescription_id IN (?)", subQuery) @@ -532,7 +539,7 @@ func (r *OrderPrescriptionDao) GetOrderTransferPrescriptionExportListSearch(req // 药品订单编号 if req.OrderProductNo != "" { - subQuery := global.Db.Model(&model.OrderInquiry{}). + subQuery := global.Db.Model(&model.OrderProduct{}). Select("order_prescription_id"). Where("order_product_no = ?", req.OrderProductNo) query = query.Where("order_prescription_id IN (?)", subQuery) @@ -701,7 +708,7 @@ func (r *OrderPrescriptionDao) GetOrderPrescriptionExportListSearch(req requests // 药品订单编号 if req.OrderProductNo != "" { - subQuery := global.Db.Model(&model.OrderInquiry{}). + subQuery := global.Db.Model(&model.OrderProduct{}). Select("order_prescription_id"). Where("order_product_no = ?", req.OrderProductNo) query = query.Where("order_prescription_id IN (?)", subQuery) diff --git a/api/dao/orderProduct.go b/api/dao/orderProduct.go index b4e6aa6..7fb6350 100644 --- a/api/dao/orderProduct.go +++ b/api/dao/orderProduct.go @@ -130,13 +130,26 @@ func (r *OrderProductDao) GetOrderProductPageSearch(req requests.GetOrderProduct return db.Omit("open_id", "union_id", "wx_session_key") }) - // 医生姓名 + // 医生姓名 - 同时查询原医生和抄方医生 if req.DoctorName != "" { - subQuery := global.Db.Model(&model.UserDoctor{}). + // 原医生查询条件 + originalDoctorSubQuery := global.Db.Model(&model.UserDoctor{}). Select("doctor_id"). Where("user_name LIKE ?", "%"+req.DoctorName+"%") - query = query.Where(gorm.Expr("doctor_id IN (?)", subQuery)) + // 抄方医生查询条件 + transferDoctorSubQuery := global.Db.Model(&model.UserDoctor{}). + Select("doctor_id"). + Where("user_name LIKE ?", "%"+req.DoctorName+"%") + + // 查询抄方医生对应的问诊订单ID + inquirySubQuery := global.Db.Model(&model.OrderInquiry{}). + Select("order_inquiry_id"). + Where(gorm.Expr("transfer_doctor_id IN (?)", transferDoctorSubQuery)) + + // 使用 OR 条件:原医生匹配 OR 抄方医生匹配 + query = query.Where(gorm.Expr("doctor_id IN (?)", originalDoctorSubQuery)). + Or(gorm.Expr("order_inquiry_id IN (?)", inquirySubQuery)) } // 处方 @@ -190,6 +203,11 @@ func (r *OrderProductDao) GetOrderProductPageSearch(req requests.GetOrderProduct query = query.Where("order_product_id IN (?)", subQuery) } + // 处方编号 + if req.PrescriptionCode != "" { + query = query.Where("prescription_code = ?", req.PrescriptionCode) + } + // 订单编号 if req.OrderProductNo != "" { query = query.Where("order_product_no = ?", req.OrderProductNo) @@ -320,7 +338,7 @@ func (r *OrderProductDao) GetOrderProductPageSearch(req requests.GetOrderProduct query = query.Where("consignee_tel LIKE ?", "%"+req.ConsigneeTel+"%") } - // 手机号-医生/患者 + // 手机号-医生/患者 - 同时查询原医生和抄方医生 if req.Mobile != "" { // 患者 patientUserSubQuery := global.Db.Model(&model.User{}). @@ -331,16 +349,33 @@ func (r *OrderProductDao) GetOrderProductPageSearch(req requests.GetOrderProduct 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{}). + originalDoctorSubQuery := 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) + // 抄方医生 + transferDoctorUserSubQuery := global.Db.Model(&model.User{}). + Select("user_id"). + Where("mobile = ?", req.Mobile) + + transferDoctorSubQuery := global.Db.Model(&model.UserDoctor{}). + Select("doctor_id"). + Where(gorm.Expr("user_id IN (?)", transferDoctorUserSubQuery)) + + // 查询抄方医生对应的问诊订单ID + inquirySubQuery := global.Db.Model(&model.OrderInquiry{}). + Select("order_inquiry_id"). + Where(gorm.Expr("transfer_doctor_id IN (?)", transferDoctorSubQuery)) + + // 使用 OR 条件:患者匹配 OR 原医生匹配 OR 抄方医生匹配 + query = query.Where("patient_id IN (?)", patientSubQuery). + Or("doctor_id IN (?)", originalDoctorSubQuery). + Or(gorm.Expr("order_inquiry_id IN (?)", inquirySubQuery)) } // 排序 diff --git a/api/requests/orderProduct.go b/api/requests/orderProduct.go index 272fb75..a784e72 100644 --- a/api/requests/orderProduct.go +++ b/api/requests/orderProduct.go @@ -33,6 +33,8 @@ type GetOrderProductPage struct { Mobile string `json:"mobile" form:"mobile" label:"手机号-医生/患者"` ProductName string `json:"product_name" form:"product_name" label:"药品名称"` CommonName string `json:"common_name" form:"common_name" label:"药品通用名"` + PrescriptionCode string `json:"prescription_code" form:"prescription_code" label:"处方编号"` + } // CancelOrderProduct 取消药品订单