You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
7.7 KiB
147 lines
7.7 KiB
<?php
|
|
|
|
namespace app\admin\service;
|
|
|
|
use app\model\UserChatGroupModel;
|
|
use app\model\UserChatLinkModel;
|
|
use app\model\UserModel;
|
|
use think\facade\Log;
|
|
|
|
class InitService extends AdminBaseService
|
|
{
|
|
// 管理员(admin)账号创建聊天账号、创建聊天群组,
|
|
public function initAdminChatInfo()
|
|
{
|
|
try {
|
|
$adminID = 1; // P1项目管理员的ID是1
|
|
// 查询管理员的chat信息,如果不存在则创建
|
|
$adminChatInfo = UserChatLinkModel::where(['user_id'=>$adminID, 'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find();
|
|
if (empty($adminChatInfo)) {
|
|
$adminChatData = [
|
|
'Username' => $adminID."_admin", //用account.id + account.user_name 拼接作为聊天账号注册的Username,
|
|
'Password' => '123456',
|
|
'Nickname' => "admin",
|
|
'Avatar' => env('USER.DEFAULT_HEAD_IMG_PATH'),
|
|
];
|
|
$chatUrl = env('CHAT_SERVER.BASE_URL') . '/api/user/register';
|
|
$adminChatRes = (new \app\utility\RequestChatServer())->ReqChatServer($chatUrl, $adminChatData);
|
|
if (!isset($adminChatRes['data']['uuid'])) {
|
|
return $this->toData('500', 'admin注册聊天账号失败,请稍后再试');
|
|
}
|
|
$adminChatInfo = UserChatLinkModel::create([
|
|
'user_id' => $adminID,
|
|
'user_type' => UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN,
|
|
'chat_uuid' => $adminChatRes['data']['uuid'],
|
|
'chat_name' => $adminChatRes['data']['username']
|
|
]);
|
|
if (!isset($adminChatInfo->chat_uuid)) {
|
|
return $this->toData('500', 'admin聊天账号创建失败,请稍后再试');
|
|
}
|
|
}
|
|
// 查询管理员的聊天群组, 如果不存在则创建
|
|
$adminGroup = UserChatGroupModel::where(['user_id'=>$adminID, 'remark'=>UserChatGroupModel::USER_CHAT_GROUP_REMARK_ADMIN_INIT])->find();
|
|
if (empty($adminGroup)) {
|
|
$groupName = 'ivs-group'.$adminID;
|
|
$chatGroupData = [
|
|
'Name' => $groupName,
|
|
];
|
|
$chatGroupUrl = env('CHAT_SERVER.BASE_URL') . '/api/group/'.$adminChatInfo->chat_uuid;
|
|
$chatGroupRes = (new \app\utility\RequestChatServer())->ReqChatServer($chatGroupUrl, $chatGroupData);
|
|
if (!isset($chatGroupRes['data']['group_uuid'])) {
|
|
return $this->toData('500', '管理员创建聊天群组失败');
|
|
}
|
|
$adminGroup = UserChatGroupModel::create([
|
|
'user_id' => $adminID,
|
|
'user_chat_uuid' => $adminChatInfo->chat_uuid,
|
|
'group_name' => $groupName,
|
|
'group_uuid' => $chatGroupRes['data']['group_uuid'],
|
|
'remark' => UserChatGroupModel::USER_CHAT_GROUP_REMARK_ADMIN_INIT,
|
|
]);
|
|
if (!isset($adminGroup->group_uuid)) {
|
|
return $this->toData('500', '管理员聊天群组创建失败');
|
|
}
|
|
}
|
|
return $this->toData('0', 'ok');
|
|
} catch (\Exception $e) {
|
|
return $this->toData('500', 'system error', [$e->getMessage(), $e->getTrace()]);
|
|
}
|
|
}
|
|
|
|
// 获取已注册用户,遍历用户注册chat信息,添加管理员chat好友,加入管理员聊天群组
|
|
public function initUserChatInfo($param)
|
|
{
|
|
try {
|
|
$limit = 200;
|
|
$offset = 0;
|
|
if (isset($param['page']) && $param['page'] > 1) {
|
|
$offset = ($param['page'] - 1) * 200;
|
|
}
|
|
$userList = UserModel::limit($offset, $limit)->select();
|
|
if ($userList->isEmpty()) {
|
|
return $this->toData('0', '本次获取用户列表为空, page='.$param['page']. ' limit='.$limit);
|
|
}
|
|
|
|
// 遍历用户创建chat信息,添加管理员chat好友,加入管理员聊天群组
|
|
foreach ($userList as $user) {
|
|
// 注册chat信息
|
|
$userChatInfo = UserChatLinkModel::where(['user_id'=>$user['user_id'], 'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_PC])->find();
|
|
if (empty($userChatInfo)) {
|
|
$nickName = 'user_'.$user['user_id'];
|
|
if (!empty($user['email'])) {
|
|
$nickName = 'user_'.explode('@', $user['email'])[0];
|
|
}
|
|
if (!empty($user['phone_number'])) {
|
|
$nickName = 'user_'.substr($user['phone_number'], -4);
|
|
}
|
|
$userChatData = [
|
|
'Username' => $user["user_no"],
|
|
'Password' => '123456',
|
|
'Nickname' => $nickName,
|
|
'Avatar' => env('USER.DEFAULT_HEAD_IMG_PATH'),
|
|
];
|
|
$chatUrl = env('CHAT_SERVER.BASE_URL') . '/api/user/register';
|
|
$userChatRes = (new \app\utility\RequestChatServer())->ReqChatServer($chatUrl, $userChatData);
|
|
if (!isset($userChatRes['data']['uuid'])) {
|
|
return $this->toData('500', '用户注册聊天账号失败');
|
|
}
|
|
$userChatInfo = UserChatLinkModel::create([
|
|
'user_id' => $user['user_id'],
|
|
'user_type' => UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_PC,
|
|
'chat_uuid' => $userChatRes['data']['uuid'],
|
|
'chat_name' => $userChatRes['data']['username']
|
|
]);
|
|
if (!isset($userChatInfo->chat_uuid)) {
|
|
return $this->toData('500', 'admin聊天账号创建失败');
|
|
}
|
|
}
|
|
|
|
// 添加管理员chat好友
|
|
$adminID = 1;
|
|
$adminChatInfo = UserChatLinkModel::where(['user_id'=>$adminID, 'user_type'=>UserChatLinkModel::USER_CHAT_LINK_USER_TYPE_ADMIN])->find(); //查询管理员的chat信息
|
|
if (empty($adminChatInfo)) {
|
|
return $this->toData('500', '管理员的chat信息为空,请先创建管理员的chat信息');
|
|
}
|
|
$chatFriendsData = [
|
|
'UserUuid' => $userChatInfo->chat_uuid,
|
|
'CustomerUuid' => $adminChatInfo->chat_uuid,
|
|
];
|
|
$chatFriendsUrl = env('CHAT_SERVER.BASE_URL') . '/api/eachOtherFriends';
|
|
$chatFriendsRes = (new \app\utility\RequestChatServer())->ReqChatServer($chatFriendsUrl, $chatFriendsData);
|
|
Log::info("用户与管理员加好友结果:".json_encode($chatFriendsRes));
|
|
|
|
// 将用户添加到管理员的群聊中
|
|
$adminGroup = UserChatGroupModel::where(['user_id'=>$adminID, 'remark'=>UserChatGroupModel::USER_CHAT_GROUP_REMARK_ADMIN_INIT])->find();
|
|
if (empty($adminGroup)) {
|
|
return $this->toData('500', '管理员的聊天群组信息为空,请先创建管理员的聊天群组信息');
|
|
}
|
|
$joinChatGroupUrl = env('CHAT_SERVER.BASE_URL') . '/api/group/join/'.$userChatInfo->chat_uuid.'/'.$adminGroup->group_uuid;
|
|
$joinChatGroupRes = (new \app\utility\RequestChatServer())->ReqChatServer($joinChatGroupUrl, []);
|
|
Log::info("用户加入聊天群组结果:".json_encode($joinChatGroupRes));
|
|
}
|
|
|
|
return $this->toData('0', 'ok');
|
|
} catch (\Exception $e) {
|
|
return $this->toData('500', 'system error', [$e->getMessage(), $e->getTrace()]);
|
|
}
|
|
}
|
|
}
|