diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index 6f42795..7f37236 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -274,6 +274,18 @@ class CallBackController extends AbstractController return $this->ImErrorReturn("消息内容错误,缺少MsgBody"); } + // 验证消息内容类型 + if (empty($request_params['MsgBody'][0]['MsgType'])){ + Log::getInstance()->error("Im回调数据处理失败:缺少MsgType"); + return $this->ImErrorReturn("消息内容错误,缺少MsgType"); + } + + // 验证消息内容详情 + if (empty($request_params['MsgBody'][0]['MsgContent'])){ + Log::getInstance()->error("Im回调数据处理失败:缺少MsgContent"); + return $this->ImErrorReturn("消息内容错误,缺少MsgContent"); + } + // 验证接收方user_id if (empty($request_params['To_Account'])){ Log::getInstance()->error("Im回调数据处理失败:接收用户错误"); @@ -340,14 +352,14 @@ class CallBackController extends AbstractController $data['message_seq'] = $request_params['MsgSeq']; $data['message_send_result'] = $message_send_result ?? 0; $data['send_error_info'] = $request_params['ErrorInfo']; - $data['message_type'] = $request_params['MsgBody'][0]['MsgType'] ?? "未定义"; + $data['message_type'] = $request_params['MsgBody'][0]['MsgType']; $data['is_system'] = $is_system; if (!empty($order_inquiry_id)){ $data['order_inquiry_id'] = $order_inquiry_id; } - $message_content = $request_params['MsgBody'][0]['MsgContent'] ?? ""; + $message_content = $request_params['MsgBody'][0]['MsgContent']; $data['message_content'] = json_encode($message_content,JSON_UNESCAPED_UNICODE); $data['message_custom_content'] = $request_params['CloudCustomData'] ?? ""; $message = \App\Model\Message::addMessage($data); @@ -365,7 +377,9 @@ class CallBackController extends AbstractController $data['patient_age'] = $order_inquiry['patient_age']; $data['inquiry_status'] = $order_inquiry['inquiry_status']; $data['message_send_time'] = $request_params['RequestTime']; - $data['last_message_content'] = $request_params['MsgBody'][0]['MsgContent'] ?? ""; + $data['message_seq'] = $request_params['MsgSeq']; + $data['message_type'] = $request_params['MsgBody'][0]['MsgType']; + $data['last_message_content'] = $request_params['MsgBody'][0]['MsgContent']; $imService = new ImService(); $imService->addRecentContactRecordCache($order_inquiry['doctor_id'],$order_inquiry['inquiry_type'],$order_inquiry['user_id'],$data); diff --git a/app/Controller/UserController.php b/app/Controller/UserController.php index 1010422..5a8094d 100644 --- a/app/Controller/UserController.php +++ b/app/Controller/UserController.php @@ -149,7 +149,7 @@ class UserController extends AbstractController // 发送消息 $arg = array(); - $arg['From_Account'] = "10000"; // 发送方user_id 如系统发送,无需填写 + $arg['From_Account'] = "10002"; // 发送方user_id 如系统发送,无需填写 $arg['To_Account'] = "123456"; // 接收方user_id $arg['ForbidCallbackControl'] = ['ForbidBeforeSendMsgCallback']; @@ -157,7 +157,7 @@ class UserController extends AbstractController [ "MsgType" => "TIMTextElem", "MsgContent" => [ - "Text" => "测试消息22", + "Text" => "测试消息33", ], ] ]; diff --git a/app/Controller/UserDoctorController.php b/app/Controller/UserDoctorController.php index b13177e..8cd0506 100644 --- a/app/Controller/UserDoctorController.php +++ b/app/Controller/UserDoctorController.php @@ -8,6 +8,7 @@ use App\Request\DoctorAuthRequest; use App\Request\UserDoctorRequest; use App\Services\DoctorAuthService; use App\Services\DoctorInquiryService; +use App\Services\ImService; use App\Services\UserDoctorService; use Extend\TencentIm\Account; use Hyperf\Amqp\Producer; @@ -309,6 +310,19 @@ class UserDoctorController extends AbstractController */ public function getDoctorMessageList(): ResponseInterface { +// $data['order_inquiry_id'] = 3; +// $data['patient_name'] = "测试用户3"; +// $data['patient_sex'] = 1; +// $data['patient_age'] = 19; +// $data['inquiry_status'] = 1; +// $data['message_send_time'] = 10000; +// $data['message_seq'] = 101; +// $data['last_message_content'] = ""; +// +// $imService = new ImService(); +// $imService->addRecentContactRecordCache("491925054779883520",2,"3",$data); + + $request = $this->container->get(UserDoctorRequest::class); $request->scene('getDoctorMessageList')->validateResolved(); diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index c71048f..98f3fb1 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1339,10 +1339,26 @@ class UserDoctorService extends BaseService $message_inquiry_type = $this->request->input('message_inquiry_type'); $redis_key = "recentContact" . $user_info['client_user_id'] . $message_inquiry_type; - dump($redis_key); + $redis = $this->container->get(Redis::class); - $result = $redis->hKeys($redis_key); - dump($result); + $result = $redis->hVals($redis_key); + if (empty($result)){ + return success(); + } + + foreach ($result as &$item){ + $item = json_decode($item,true); + } + + // 获取 message_send_time 和 message_seq 两个字段的值,分别存储在不同的数组中 + foreach ($result as $key => $row) { + $messageSendTime[$key] = $row['message_send_time']; + $messageSeq[$key] = $row['message_seq']; + } + + // 通过 array_multisort 函数对两个字段进行排序 + // 优先按照 message_send_time 排序,如果 message_send_time 相同,则按照 message_seq 排序 + array_multisort($messageSendTime, SORT_DESC, $messageSeq, SORT_DESC, $result); return success($result); }