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

<?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()]);
}
}
}