no message
This commit is contained in:
parent
12031aca33
commit
efe9c5039c
@ -90,7 +90,7 @@ class DialogController extends AbstractController
|
||||
}
|
||||
|
||||
/**
|
||||
* 消息列表
|
||||
* 获取消息列表
|
||||
*
|
||||
* @apiParam {Number} dialog_id 对话ID
|
||||
*
|
||||
@ -114,6 +114,9 @@ class DialogController extends AbstractController
|
||||
$data = $list->toArray();
|
||||
$data['dialog'] = WebSocketDialog::formatData($dialog, $user->userid);
|
||||
//
|
||||
$user->dialog_id = $dialog->id;
|
||||
$user->save();
|
||||
//
|
||||
return Base::retSuccess('success', $data);
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,8 @@ class AbstractModel extends Model
|
||||
'deleted_at',
|
||||
];
|
||||
|
||||
protected $appendattrs = [];
|
||||
|
||||
/**
|
||||
* 保存数据忽略错误
|
||||
* @return bool
|
||||
|
@ -72,16 +72,16 @@ class Project extends AbstractModel
|
||||
*/
|
||||
private function generateTaskData()
|
||||
{
|
||||
if (!isset($this->attributes['task_num'])) {
|
||||
if (!isset($this->appendattrs['task_num'])) {
|
||||
$builder = ProjectTask::whereProjectId($this->id)->whereParentId(0)->whereNull('archived_at');
|
||||
$this->attributes['task_num'] = $builder->count();
|
||||
$this->attributes['task_complete'] = $builder->whereNotNull('complete_at')->count();
|
||||
$this->attributes['task_percent'] = $this->attributes['task_num'] ? intval($this->attributes['task_complete'] / $this->attributes['task_num'] * 100) : 0;
|
||||
$this->appendattrs['task_num'] = $builder->count();
|
||||
$this->appendattrs['task_complete'] = $builder->whereNotNull('complete_at')->count();
|
||||
$this->appendattrs['task_percent'] = $this->appendattrs['task_num'] ? intval($this->appendattrs['task_complete'] / $this->appendattrs['task_num'] * 100) : 0;
|
||||
//
|
||||
$builder = ProjectTask::whereProjectId($this->id)->whereParentId(0)->whereNull('archived_at');
|
||||
$this->attributes['task_my_num'] = $builder->whereUserid(User::token2userid())->count();
|
||||
$this->attributes['task_my_complete'] = $builder->whereUserid(User::token2userid())->whereNotNull('complete_at')->count();
|
||||
$this->attributes['task_my_percent'] = $this->attributes['task_my_num'] ? intval($this->attributes['task_my_complete'] / $this->attributes['task_my_num'] * 100) : 0;
|
||||
$this->appendattrs['task_my_num'] = $builder->whereUserid(User::token2userid())->count();
|
||||
$this->appendattrs['task_my_complete'] = $builder->whereUserid(User::token2userid())->whereNotNull('complete_at')->count();
|
||||
$this->appendattrs['task_my_percent'] = $this->appendattrs['task_my_num'] ? intval($this->appendattrs['task_my_complete'] / $this->appendattrs['task_my_num'] * 100) : 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ class Project extends AbstractModel
|
||||
public function getTaskNumAttribute()
|
||||
{
|
||||
$this->generateTaskData();
|
||||
return $this->attributes['task_num'];
|
||||
return $this->appendattrs['task_num'];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -102,7 +102,7 @@ class Project extends AbstractModel
|
||||
public function getTaskCompleteAttribute()
|
||||
{
|
||||
$this->generateTaskData();
|
||||
return $this->attributes['task_complete'];
|
||||
return $this->appendattrs['task_complete'];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -112,7 +112,7 @@ class Project extends AbstractModel
|
||||
public function getTaskPercentAttribute()
|
||||
{
|
||||
$this->generateTaskData();
|
||||
return $this->attributes['task_percent'];
|
||||
return $this->appendattrs['task_percent'];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -122,7 +122,7 @@ class Project extends AbstractModel
|
||||
public function getTaskMyNumAttribute()
|
||||
{
|
||||
$this->generateTaskData();
|
||||
return $this->attributes['task_my_num'];
|
||||
return $this->appendattrs['task_my_num'];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -132,7 +132,7 @@ class Project extends AbstractModel
|
||||
public function getTaskMyCompleteAttribute()
|
||||
{
|
||||
$this->generateTaskData();
|
||||
return $this->attributes['task_my_complete'];
|
||||
return $this->appendattrs['task_my_complete'];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -142,7 +142,7 @@ class Project extends AbstractModel
|
||||
public function getTaskMyPercentAttribute()
|
||||
{
|
||||
$this->generateTaskData();
|
||||
return $this->attributes['task_my_percent'];
|
||||
return $this->appendattrs['task_my_percent'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -103,10 +103,10 @@ class ProjectTask extends AbstractModel
|
||||
*/
|
||||
public function getFileNumAttribute()
|
||||
{
|
||||
if (!isset($this->attributes['file_num'])) {
|
||||
$this->attributes['file_num'] = ProjectTaskFile::whereTaskId($this->id)->count();
|
||||
if (!isset($this->appendattrs['file_num'])) {
|
||||
$this->appendattrs['file_num'] = ProjectTaskFile::whereTaskId($this->id)->count();
|
||||
}
|
||||
return $this->attributes['file_num'];
|
||||
return $this->appendattrs['file_num'];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -115,10 +115,10 @@ class ProjectTask extends AbstractModel
|
||||
*/
|
||||
public function getMsgNumAttribute()
|
||||
{
|
||||
if (!isset($this->attributes['msg_num'])) {
|
||||
$this->attributes['msg_num'] = $this->dialog_id ? WebSocketDialogMsg::whereDialogId($this->dialog_id)->count() : 0;
|
||||
if (!isset($this->appendattrs['msg_num'])) {
|
||||
$this->appendattrs['msg_num'] = $this->dialog_id ? WebSocketDialogMsg::whereDialogId($this->dialog_id)->count() : 0;
|
||||
}
|
||||
return $this->attributes['msg_num'];
|
||||
return $this->appendattrs['msg_num'];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -127,22 +127,22 @@ class ProjectTask extends AbstractModel
|
||||
private function generateSubTaskData()
|
||||
{
|
||||
if ($this->parent_id > 0) {
|
||||
$this->attributes['sub_num'] = 0;
|
||||
$this->attributes['sub_complete'] = 0;
|
||||
$this->attributes['percent'] = $this->complete_at ? 100 : 0;
|
||||
$this->appendattrs['sub_num'] = 0;
|
||||
$this->appendattrs['sub_complete'] = 0;
|
||||
$this->appendattrs['percent'] = $this->complete_at ? 100 : 0;
|
||||
return;
|
||||
}
|
||||
if (!isset($this->attributes['sub_num'])) {
|
||||
if (!isset($this->appendattrs['sub_num'])) {
|
||||
$builder = self::whereParentId($this->id)->whereNull('archived_at');
|
||||
$this->attributes['sub_num'] = $builder->count();
|
||||
$this->attributes['sub_complete'] = $builder->whereNotNull('complete_at')->count();
|
||||
$this->appendattrs['sub_num'] = $builder->count();
|
||||
$this->appendattrs['sub_complete'] = $builder->whereNotNull('complete_at')->count();
|
||||
//
|
||||
if ($this->complete_at) {
|
||||
$this->attributes['percent'] = 100;
|
||||
} elseif ($this->attributes['sub_complete'] == 0) {
|
||||
$this->attributes['percent'] = 0;
|
||||
$this->appendattrs['percent'] = 100;
|
||||
} elseif ($this->appendattrs['sub_complete'] == 0) {
|
||||
$this->appendattrs['percent'] = 0;
|
||||
} else {
|
||||
$this->attributes['percent'] = intval($this->attributes['sub_complete'] / $this->attributes['sub_num'] * 100);
|
||||
$this->appendattrs['percent'] = intval($this->appendattrs['sub_complete'] / $this->appendattrs['sub_num'] * 100);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -154,7 +154,7 @@ class ProjectTask extends AbstractModel
|
||||
public function getSubNumAttribute()
|
||||
{
|
||||
$this->generateSubTaskData();
|
||||
return $this->attributes['sub_num'];
|
||||
return $this->appendattrs['sub_num'];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -164,7 +164,7 @@ class ProjectTask extends AbstractModel
|
||||
public function getSubCompleteAttribute()
|
||||
{
|
||||
$this->generateSubTaskData();
|
||||
return $this->attributes['sub_complete'];
|
||||
return $this->appendattrs['sub_complete'];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -174,7 +174,7 @@ class ProjectTask extends AbstractModel
|
||||
public function getPercentAttribute()
|
||||
{
|
||||
$this->generateSubTaskData();
|
||||
return $this->attributes['percent'];
|
||||
return $this->appendattrs['percent'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -27,6 +27,7 @@ use Carbon\Carbon;
|
||||
* @property string|null $last_at 最后登录时间
|
||||
* @property string|null $line_ip 最后在线IP(接口)
|
||||
* @property string|null $line_at 最后在线时间(接口)
|
||||
* @property int|null $dialog_id 最后打开的会话ID
|
||||
* @property string|null $created_ip 注册IP
|
||||
* @property \Illuminate\Support\Carbon|null $created_at
|
||||
* @property \Illuminate\Support\Carbon|null $updated_at
|
||||
@ -37,6 +38,7 @@ use Carbon\Carbon;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User whereChangepass($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User whereCreatedIp($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User whereDialogId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User whereEmail($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User whereEncrypt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User whereIdentity($value)
|
||||
@ -46,11 +48,11 @@ use Carbon\Carbon;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User whereLineIp($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User whereLoginNum($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User whereNickname($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User wherePassword($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User whereProfession($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User whereUpdatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User whereUserid($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User whereUserimg($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User wherePassword($value)
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class User extends AbstractModel
|
||||
|
@ -52,14 +52,14 @@ class WebSocketDialogMsg extends AbstractModel
|
||||
*/
|
||||
public function getPercentageAttribute()
|
||||
{
|
||||
if (!isset($this->attributes['percentage'])) {
|
||||
if (!isset($this->appendattrs['percentage'])) {
|
||||
if ($this->read > $this->send || empty($this->send)) {
|
||||
$this->attributes['percentage'] = 100;
|
||||
$this->appendattrs['percentage'] = 100;
|
||||
} else {
|
||||
$this->attributes['percentage'] = intval($this->read / $this->send * 100);
|
||||
$this->appendattrs['percentage'] = intval($this->read / $this->send * 100);
|
||||
}
|
||||
}
|
||||
return $this->attributes['percentage'];
|
||||
return $this->appendattrs['percentage'];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -101,7 +101,8 @@ class WebSocketDialogMsg extends AbstractModel
|
||||
'after' => 1,
|
||||
]);
|
||||
if ($msgRead->saveOrIgnore()) {
|
||||
$this->increment('send');
|
||||
$this->send = WebSocketDialogMsgRead::whereMsgId($this->id)->count();
|
||||
$this->save();
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
@ -139,20 +140,22 @@ class WebSocketDialogMsg extends AbstractModel
|
||||
'msg' => $msg,
|
||||
'read' => 0,
|
||||
]);
|
||||
return AbstractModel::transaction(function () use ($dialog_id, $msg, $dialogMsg) {
|
||||
$result = AbstractModel::transaction(function () use ($dialog_id, $msg, $dialogMsg) {
|
||||
$dialog = WebSocketDialog::find($dialog_id);
|
||||
if (empty($dialog)) {
|
||||
return Base::retError('获取会话失败');
|
||||
}
|
||||
$dialog->last_at = Carbon::now();
|
||||
$dialog->save();
|
||||
$dialogMsg->send = 1;
|
||||
$dialogMsg->dialog_id = $dialog->id;
|
||||
$dialogMsg->save();
|
||||
//
|
||||
Task::deliver(new WebSocketDialogMsgTask($dialogMsg->id));
|
||||
//
|
||||
return Base::retSuccess('发送成功', $dialogMsg->toArray());
|
||||
});
|
||||
if (Base::isSuccess($result)) {
|
||||
Task::deliver(new WebSocketDialogMsgTask($dialogMsg->id));
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,13 +2,14 @@
|
||||
|
||||
namespace App\Tasks;
|
||||
|
||||
@error_reporting(E_ALL & ~E_NOTICE);
|
||||
|
||||
use App\Models\User;
|
||||
use App\Models\WebSocketDialog;
|
||||
use App\Models\WebSocketDialogMsg;
|
||||
use App\Models\WebSocketDialogMsgRead;
|
||||
use Request;
|
||||
|
||||
@error_reporting(E_ALL & ~E_NOTICE);
|
||||
|
||||
|
||||
/**
|
||||
* 推送回话消息
|
||||
@ -40,7 +41,8 @@ class WebSocketDialogMsgTask extends AbstractTask
|
||||
if (empty($dialog)) {
|
||||
return;
|
||||
}
|
||||
// 推送目标
|
||||
|
||||
// 推送目标①:群成员
|
||||
$userids = $dialog->dialogUser->pluck('userid')->toArray();
|
||||
foreach ($userids AS $userid) {
|
||||
if ($userid == $msg->userid) {
|
||||
@ -61,9 +63,31 @@ class WebSocketDialogMsgTask extends AbstractTask
|
||||
'ignoreFd' => $this->ignoreFd,
|
||||
'msg' => [
|
||||
'type' => 'dialog',
|
||||
'mode' => 'add',
|
||||
'mode' => 'add1',
|
||||
'data' => $msg->toArray(),
|
||||
]
|
||||
]);
|
||||
|
||||
// 推送目标②:正在打开这个会话的会员
|
||||
$list = User::whereDialogId($dialog->id)->pluck('userid')->toArray();
|
||||
if ($list) {
|
||||
$array = [];
|
||||
foreach ($list as $uid) {
|
||||
if (!in_array($uid, $userids)) {
|
||||
$array[] = $uid;
|
||||
}
|
||||
}
|
||||
if ($array) {
|
||||
PushTask::push([
|
||||
'userid' => $array,
|
||||
'ignoreFd' => $this->ignoreFd,
|
||||
'msg' => [
|
||||
'type' => 'dialog',
|
||||
'mode' => 'add2',
|
||||
'data' => $msg->toArray(),
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
13
resources/assets/js/store/actions.js
vendored
13
resources/assets/js/store/actions.js
vendored
@ -779,10 +779,10 @@ export default {
|
||||
result.data.data.forEach((dialog) => {
|
||||
let index = state.dialogList.findIndex(({id}) => id == dialog.id);
|
||||
if (index > -1) {
|
||||
state.dialogList.splice(index, 1, Object.assign(state.dialogList[index], dialog))
|
||||
} else {
|
||||
state.dialogList.unshift(dialog);
|
||||
dialog = Object.assign(state.dialogList[index], dialog)
|
||||
state.dialogList.splice(index, 1);
|
||||
}
|
||||
state.dialogList.push(dialog);
|
||||
});
|
||||
}
|
||||
resolve(result);
|
||||
@ -1089,6 +1089,9 @@ export default {
|
||||
state.dialogMsgList.splice(index, 1, data);
|
||||
}
|
||||
}
|
||||
if (mode === "add2") {
|
||||
return;
|
||||
}
|
||||
// 更新最后消息
|
||||
let dialog = state.dialogList.find(({id}) => id == dialog_id);
|
||||
if (dialog) {
|
||||
@ -1096,7 +1099,7 @@ export default {
|
||||
} else {
|
||||
dispatch("getDialogBasic", dialog_id);
|
||||
}
|
||||
if (mode === "add") {
|
||||
if (mode === "add1") {
|
||||
// 更新对话列表
|
||||
if (dialog) {
|
||||
// 新增未读数
|
||||
@ -1104,7 +1107,7 @@ export default {
|
||||
// 移动到首位
|
||||
const index = state.dialogList.findIndex(({id}) => id == dialog_id);
|
||||
if (index > -1) {
|
||||
const tmp = state.dialogList[index];
|
||||
const tmp = state.method.cloneJSON(state.dialogList[index]);
|
||||
state.dialogList.splice(index, 1);
|
||||
state.dialogList.unshift(tmp);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user