227 lines
7.5 KiB
PHP
Executable File
227 lines
7.5 KiB
PHP
Executable File
<?php
|
||
|
||
namespace App\Http\Controllers\Api;
|
||
|
||
use App\Models\User;
|
||
use App\Models\WebSocketDialog;
|
||
use App\Models\WebSocketDialogMsg;
|
||
use App\Models\WebSocketDialogMsgRead;
|
||
use App\Models\WebSocketDialogUser;
|
||
use App\Module\Base;
|
||
use Request;
|
||
|
||
/**
|
||
* @apiDefine dialog
|
||
*
|
||
* 对话
|
||
*/
|
||
class DialogController extends AbstractController
|
||
{
|
||
/**
|
||
* 消息列表
|
||
*
|
||
* @apiParam {Number} dialog_id 对话ID
|
||
*
|
||
* @apiParam {Number} [page] 当前页,默认:1
|
||
* @apiParam {Number} [pagesize] 每页显示数量,默认:50,最大:100
|
||
*/
|
||
public function msg__lists()
|
||
{
|
||
$user = User::authE();
|
||
if (Base::isError($user)) {
|
||
return $user;
|
||
} else {
|
||
$user = User::IDE($user['data']);
|
||
}
|
||
//
|
||
$dialog_id = intval(Request::input('dialog_id'));
|
||
//
|
||
if (!WebSocketDialogUser::whereDialogId($dialog_id)->whereUserid($user->userid)->exists()) {
|
||
return Base::retError('不在成员列表内');
|
||
}
|
||
$dialog = WebSocketDialog::whereId($dialog_id)->first();
|
||
if (empty($dialog)) {
|
||
return Base::retError('对话不存在或已被删除');
|
||
}
|
||
//
|
||
$list = WebSocketDialogMsg::whereDialogId($dialog_id)->orderByDesc('id')->paginate(Base::getPaginate(100, 50));
|
||
$list->transform(function (WebSocketDialogMsg $item) use ($user) {
|
||
$item->r = $item->userid === $user->userid ? null : WebSocketDialogMsgRead::whereMsgId($item->id)->whereUserid($user->userid)->first();
|
||
return $item;
|
||
});
|
||
//
|
||
return Base::retSuccess('success', $list);
|
||
}
|
||
|
||
/**
|
||
* 发送消息
|
||
*
|
||
* @apiParam {Number} dialog_id 对话ID
|
||
* @apiParam {Number} [extra_int] 额外参数(数字)
|
||
* @apiParam {String} [extra_str] 额外参数(字符)
|
||
* @apiParam {String} text 消息内容
|
||
*/
|
||
public function msg__sendtext()
|
||
{
|
||
$user = User::authE();
|
||
if (Base::isError($user)) {
|
||
return $user;
|
||
} else {
|
||
$user = User::IDE($user['data']);
|
||
}
|
||
//
|
||
$dialog_id = intval(Request::input('dialog_id'));
|
||
$extra_int = intval(Request::input('extra_int'));
|
||
$extra_str = trim(Request::input('extra_str'));
|
||
$text = trim(Request::input('text'));
|
||
//
|
||
if (mb_strlen($text) < 1) {
|
||
return Base::retError('消息内容不能为空');
|
||
} elseif (mb_strlen($text) > 20000) {
|
||
return Base::retError('消息内容最大不能超过20000字');
|
||
}
|
||
//
|
||
if (!WebSocketDialogUser::whereDialogId($dialog_id)->whereUserid($user->userid)->exists()) {
|
||
return Base::retError('不在成员列表内');
|
||
}
|
||
$dialog = WebSocketDialog::whereId($dialog_id)->first();
|
||
if (empty($dialog)) {
|
||
return Base::retError('对话不存在或已被删除');
|
||
}
|
||
//
|
||
$msg = [
|
||
'text' => $text
|
||
];
|
||
//
|
||
if ($dialog->type == 'group') {
|
||
return WebSocketDialogMsg::addGroupMsg($dialog_id, 'text', $msg, $user->userid, $extra_int, $extra_str);
|
||
} else {
|
||
return WebSocketDialogMsg::addUserMsg($dialog_id, 'text', $msg, $user->userid, $extra_int, $extra_str);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* {post}文件上传
|
||
*
|
||
* @apiParam {Number} dialog_id 对话ID
|
||
* @apiParam {Number} [extra_int] 额外参数(数字)
|
||
* @apiParam {String} [extra_str] 额外参数(字符)
|
||
* @apiParam {String} [filename] post-文件名称
|
||
* @apiParam {String} [image64] post-base64图片(二选一)
|
||
* @apiParam {File} [files] post-文件对象(二选一)
|
||
*/
|
||
public function msg__sendfile()
|
||
{
|
||
$user = User::authE();
|
||
if (Base::isError($user)) {
|
||
return $user;
|
||
} else {
|
||
$user = User::IDE($user['data']);
|
||
}
|
||
//
|
||
$dialog_id = Base::getPostInt('dialog_id');
|
||
$extra_int = Base::getPostInt('extra_int');
|
||
$extra_str = Base::getPostValue('extra_str');
|
||
//
|
||
if (!WebSocketDialogUser::whereDialogId($dialog_id)->whereUserid($user->userid)->exists()) {
|
||
return Base::retError('不在成员列表内');
|
||
}
|
||
$dialog = WebSocketDialog::whereId($dialog_id)->first();
|
||
if (empty($dialog)) {
|
||
return Base::retError('对话不存在或已被删除');
|
||
}
|
||
//
|
||
$path = "uploads/chat/" . $user->userid . "/";
|
||
$image64 = Base::getPostValue('image64');
|
||
$fileName = Base::getPostValue('filename');
|
||
if ($image64) {
|
||
$data = Base::image64save([
|
||
"image64" => $image64,
|
||
"path" => $path,
|
||
"fileName" => $fileName,
|
||
]);
|
||
} else {
|
||
$data = Base::upload([
|
||
"file" => Request::file('files'),
|
||
"type" => 'file',
|
||
"path" => $path,
|
||
"fileName" => $fileName,
|
||
]);
|
||
}
|
||
//
|
||
if (Base::isError($data)) {
|
||
return Base::retError($data['msg']);
|
||
} else {
|
||
$fileData = $data['data'];
|
||
$fileData['thumb'] = $fileData['thumb'] ?: 'images/ext/file.png';
|
||
switch ($fileData['ext']) {
|
||
case "docx":
|
||
$fileData['thumb'] = 'images/ext/doc.png';
|
||
break;
|
||
case "xlsx":
|
||
$fileData['thumb'] = 'images/ext/xls.png';
|
||
break;
|
||
case "pptx":
|
||
$fileData['thumb'] = 'images/ext/ppt.png';
|
||
break;
|
||
case "ai":
|
||
case "avi":
|
||
case "bmp":
|
||
case "cdr":
|
||
case "doc":
|
||
case "eps":
|
||
case "gif":
|
||
case "mov":
|
||
case "mp3":
|
||
case "mp4":
|
||
case "pdf":
|
||
case "ppt":
|
||
case "pr":
|
||
case "psd":
|
||
case "rar":
|
||
case "svg":
|
||
case "tif":
|
||
case "txt":
|
||
case "xls":
|
||
case "zip":
|
||
$fileData['thumb'] = 'images/ext/' . $fileData['ext'] . '.png';
|
||
break;
|
||
}
|
||
//
|
||
$msg = $fileData;
|
||
$msg['size'] *= 1024;
|
||
//
|
||
if ($dialog->type == 'group') {
|
||
return WebSocketDialogMsg::addGroupMsg($dialog_id, 'file', $msg, $user->userid, $extra_int, $extra_str);
|
||
} else {
|
||
return WebSocketDialogMsg::addUserMsg($dialog_id, 'file', $msg, $user->userid, $extra_int, $extra_str);
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取消息阅读情况
|
||
*
|
||
* @apiParam {Number} msg_id 消息ID(需要是消息的发送人)
|
||
*/
|
||
public function msg__readlist()
|
||
{
|
||
$user = User::authE();
|
||
if (Base::isError($user)) {
|
||
return $user;
|
||
} else {
|
||
$user = User::IDE($user['data']);
|
||
}
|
||
//
|
||
$msg_id = intval(Request::input('msg_id'));
|
||
//
|
||
$msg = WebSocketDialogMsg::whereId($msg_id)->whereUserid($user->userid)->first();
|
||
if (empty($msg)) {
|
||
return Base::retError('不是发送人');
|
||
}
|
||
//
|
||
$read = WebSocketDialogMsgRead::whereMsgId($msg_id)->get();
|
||
return Base::retSuccess('success', $read ?: []);
|
||
}
|
||
}
|