2026-03-04 14:42:40 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Services\YunXinMessageCallBack;
|
|
|
|
|
|
|
|
|
|
use App\Models\Group;
|
2026-03-25 15:25:59 +08:00
|
|
|
use App\Models\GroupFile;
|
2026-03-04 14:42:40 +08:00
|
|
|
use App\Models\GroupMessage;
|
|
|
|
|
use App\Models\GroupMessageConfig;
|
|
|
|
|
use App\Models\GroupUser;
|
|
|
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
|
|
|
|
|
|
class Team
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
public function handle($params)
|
|
|
|
|
{
|
|
|
|
|
$this->saveMessage($params);
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-25 15:25:59 +08:00
|
|
|
public function recall($params)
|
|
|
|
|
{
|
2026-03-04 14:42:40 +08:00
|
|
|
$clientId = $params["clientId"];
|
|
|
|
|
if ($clientId) {
|
2026-03-25 15:25:59 +08:00
|
|
|
GroupMessage::where('im_msg_id', $clientId)->update(['is_recall' => 1]);
|
|
|
|
|
|
|
|
|
|
// 文件消息 撤回存储文件
|
2026-03-26 14:51:02 +08:00
|
|
|
GroupFile::where("im_msg_id", $clientId)->update(["is_recall" => 1]);
|
2026-03-04 14:42:40 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 写入群聊记录
|
|
|
|
|
*/
|
|
|
|
|
private function saveMessage($params)
|
|
|
|
|
{
|
|
|
|
|
// $params = request()->all(['msgType', 'fromAccount', 'to', 'attach', 'body',"msgidClient"]);
|
|
|
|
|
|
|
|
|
|
$im_msg_id = $params['msgidClient'];
|
|
|
|
|
if ($im_msg_id) {
|
|
|
|
|
$gm = GroupMessage::where('im_msg_id', $im_msg_id)->first();
|
2026-03-25 15:25:59 +08:00
|
|
|
if ($gm)
|
|
|
|
|
return;
|
2026-03-04 14:42:40 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$group_id = Group::where('im_chat_id', $params['to'])->value('id');
|
|
|
|
|
|
|
|
|
|
if ($params['msgType'] == 'TEXT') {
|
2026-03-25 15:25:59 +08:00
|
|
|
$content = json_encode(['body' => $params['body']], JSON_UNESCAPED_UNICODE);
|
2026-03-04 14:42:40 +08:00
|
|
|
} else {
|
|
|
|
|
$content = $params['attach'];
|
|
|
|
|
$content_arr = json_decode($content, true);
|
2026-03-25 15:25:59 +08:00
|
|
|
$content_arr["extend"] = $params["ext"] ?? "";
|
|
|
|
|
$content = json_encode($content_arr);
|
2026-03-04 14:42:40 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$group_message = new GroupMessage();
|
|
|
|
|
$group_message->user_id = get_userid_by_accid($params['fromAccount']);
|
|
|
|
|
$group_message->group_id = $group_id;
|
|
|
|
|
$group_message->content = $content;
|
|
|
|
|
$group_message->content_type = $params['msgType'];
|
2026-03-25 15:25:59 +08:00
|
|
|
$group_message->im_msg_id = $params['msgidClient'] ?? null;
|
2026-03-04 14:42:40 +08:00
|
|
|
$group_message->msg_timestamp = $params["msgTimestamp"];
|
|
|
|
|
$group_message->data = json_encode($params, JSON_UNESCAPED_UNICODE);
|
|
|
|
|
$group_message->save();
|
|
|
|
|
|
2026-03-25 15:25:59 +08:00
|
|
|
Group::where("id", $group_id)->update(["last_msg_id" => $group_message->id]);
|
|
|
|
|
GroupUser::where("group_id", $group_id)->where("is_hidden", 1)->update(['is_hidden' => 0]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 文件另存一份
|
|
|
|
|
if ($params["msgType"] == "FILE") {
|
|
|
|
|
$fileJson = $params['attach'];
|
|
|
|
|
$fileArr = json_decode($fileJson, true);
|
|
|
|
|
$file = new GroupFile();
|
|
|
|
|
$file->group_id = $group_id;
|
|
|
|
|
$file->im_chat_id = $params['to'];
|
|
|
|
|
$file->user_id = get_userid_by_accid($params['fromAccount']);
|
|
|
|
|
$file->name = $fileArr["name"] ?? "";
|
|
|
|
|
$file->ext = $fileArr["ext"] ?? "";
|
|
|
|
|
$file->url = $fileArr["url"] ?? "";
|
|
|
|
|
$file->size = $fileArr["size"] ?? "";
|
|
|
|
|
$file->im_msg_id = $params['msgidClient'] ?? null;
|
|
|
|
|
$file->msg_timestamp = $params["msgTimestamp"];
|
|
|
|
|
$file->save();
|
|
|
|
|
|
|
|
|
|
}
|
2026-03-04 14:42:40 +08:00
|
|
|
}
|
|
|
|
|
|
2026-03-25 15:25:59 +08:00
|
|
|
public function readMsg($params)
|
|
|
|
|
{
|
2026-03-04 14:42:40 +08:00
|
|
|
// 已读时间
|
|
|
|
|
$ackMsgTime = $params["ackMsgTime"];
|
|
|
|
|
// 已读群id
|
|
|
|
|
$ackTeamId = $params["ackTeamId"];
|
|
|
|
|
// accid
|
|
|
|
|
$accid = $params["accid"];
|
|
|
|
|
$user_id = get_userid_by_accid($accid);
|
|
|
|
|
|
|
|
|
|
$group = Group::where('im_chat_id', $ackTeamId)->first();
|
2026-03-25 15:25:59 +08:00
|
|
|
if (empty($group))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
$config = GroupMessageConfig::where("user_id", $user_id)->where("group_id", $group->id)->first();
|
2026-03-04 14:42:40 +08:00
|
|
|
if (empty($config)) {
|
2026-03-25 15:25:59 +08:00
|
|
|
GroupMessageConfig::create(["user_id" => $user_id, "group_id" => $group->id, "msg_time" => $ackMsgTime]);
|
2026-03-04 14:42:40 +08:00
|
|
|
} else {
|
2026-03-25 15:25:59 +08:00
|
|
|
GroupMessageConfig::where("user_id", $user_id)->where("group_id", $group->id)->update(["msg_time" => $ackMsgTime]);
|
2026-03-04 14:42:40 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|