diff --git a/app/Model/OrderInquiry.php b/app/Model/OrderInquiry.php index 08b4449..7f9bbda 100644 --- a/app/Model/OrderInquiry.php +++ b/app/Model/OrderInquiry.php @@ -444,9 +444,13 @@ class OrderInquiry extends Model * @param int|null $per_page * @return array */ - public static function getInquiryEndPage(array $params, array $fields = ["*"], int $page = null, ?int $per_page = 10): array + public static function getInquiryEndPage(array $params, int $page = null, ?int $per_page = 10): array { - $query = self::select(["user_id","family_id"]) +// 参考sql +// SELECT t1.* FROM test t1 INNER JOIN ( +// SELECT user_id, MAX(create_at) AS max_create_at FROM test GROUP BY user_id +// ) t2 ON t1.user_id = t2.user_id AND t1.create_at = t2.max_create_at; + $subQuery = self::select(["user_id","family_id",Db::raw('max(reception_time) as at')]) ->whereNotIn('user_id', function ($query) use ($params){ $query->select('user_id') ->from('order_inquiry') @@ -454,12 +458,42 @@ class OrderInquiry extends Model ->where($params) ->groupBy(["user_id"]); }) - ->whereIn('inquiry_status', [5,6]) ->where($params) - ->orderBy('complete_time') ->groupBy(["user_id","family_id"]); + $query = self:: joinSub($subQuery, 'sub_query', function($join) { + $join->on('order_inquiry.user_id', '=', 'sub_query.user_id') + ->on('order_inquiry.family_id', '=', 'sub_query.family_id') + ->on('order_inquiry.reception_time', '=', 'sub_query.at'); + }) + ->whereIn('inquiry_status', [5,6]) + ->where($params) + ->orderBy("sub_query.at",'desc'); + + + $fields = [ + 'order_inquiry.order_inquiry_id', + 'order_inquiry.user_id', + 'order_inquiry.patient_id', + 'order_inquiry.doctor_id', + 'order_inquiry.family_id', + 'order_inquiry.inquiry_type', + 'order_inquiry.inquiry_mode', + 'order_inquiry.inquiry_status', + 'order_inquiry.inquiry_no', + 'order_inquiry.reception_time', + 'order_inquiry.complete_time', + 'order_inquiry.finish_time', + 'order_inquiry.cancel_time', + 'order_inquiry.cancel_reason', + 'order_inquiry.cancel_remarks', + 'order_inquiry.patient_name', + 'order_inquiry.patient_sex', + 'order_inquiry.patient_age', + 'order_inquiry.created_at', + ]; + $result = $query->paginate($per_page, $fields, "page", $page); $data = array(); diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index d2fe832..5fcee51 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -837,34 +837,9 @@ class InquiryService extends BaseService $params = array(); $params['doctor_id'] = $user_info['client_user_id']; + $result = OrderInquiry::getInquiryEndPage($params, $page, $per_page); - $inquiry_status_params = ["5", "6"]; - - $fields = [ - 'order_inquiry_id', - 'user_id', - 'patient_id', - 'doctor_id', - 'family_id', - 'inquiry_type', - 'inquiry_mode', - 'inquiry_status', - 'inquiry_no', - 'reception_time', - 'complete_time', - 'finish_time', - 'cancel_time', - 'cancel_reason', - 'cancel_remarks', - 'patient_name', - 'patient_sex', - 'patient_age', - 'created_at', - ]; - - $result = OrderInquiry::getInquiryEndPage($params, $fields, $page, $per_page); - - if (!empty($result['data'])) { + if (empty($result['data'])) { foreach ($result['data'] as &$item) { $params = array(); $params['doctor_id'] = $user_info['client_user_id']; @@ -872,6 +847,29 @@ class InquiryService extends BaseService $params['family_id'] = $item['family_id']; $inquiry_status_params = [5,6]; + + $fields = [ + 'order_inquiry_id', + 'user_id', + 'patient_id', + 'doctor_id', + 'family_id', + 'inquiry_type', + 'inquiry_mode', + 'inquiry_status', + 'inquiry_no', + 'reception_time', + 'complete_time', + 'finish_time', + 'cancel_time', + 'cancel_reason', + 'cancel_remarks', + 'patient_name', + 'patient_sex', + 'patient_age', + 'created_at', + ]; + $order_inquiry = OrderInquiry::getInquiryStatusLastOne($params,$inquiry_status_params,$fields); unset($item['user_id']);