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.

244 lines
7.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace App\Repositories;
use App\Models\AppointmentConfig;
use App\Models\ThirdAppointmentLog;
/**
* 会议第三方
*/
class MeetRepository
{
public $baseUrl;
public $account;
public $password;
public $companyId;
public function __construct()
{
$this->baseUrl = 'https://www.aiyuyue.cn';
$this->account = '13771971407';
$this->password = '123456';
$this->companyId = 'b6fbd3f82db94dd5bb7f8e5768540528';
}
/**
* 获取公司 Id
* @return false|mixed
*/
public function login()
{
$url = $this->baseUrl . '/services/showInfo.ashx';
$header[] = 'Content-Type: application/json';
$params = [
'method' => 'login',
'account' => $this->account,
'password' => $this->password
];
try {
$result = httpCurl($url, 'GET', $params, $header);
$result = json_decode($result, true);
if ($result['success']) {
return $result['companyId'];
} else {
return false;
}
} catch (\Exception $e) {
return false;
}
}
/**
* 会议室列表
*/
public function index()
{
$url = $this->baseUrl . '/services/api/MeetingRoomService.aspx';
$header[] = 'Content-Type: application/json';
$params = [
'method' => 'find',
'account' => $this->account,
'password' => md5($this->password)
];
try {
$resultJson = httpCurl($url, 'GET', $params, $header, 30);
$result = json_decode($resultJson, true);
if (!is_array($result) || empty($result['success']) || empty($result['data'])) {
return false;
}
// value/room/remark 在模型中为 guarded需 unguarded 才能写入
AppointmentConfig::unguarded(function () use ($result) {
foreach ($result['data'] as $item) {
$where = ['value' => $item['id']];
$data = [
'remark' => $item['name'],
'value' => $item['id'],
'room' => json_encode($item, JSON_UNESCAPED_UNICODE),
];
AppointmentConfig::updateOrCreate($where, $data);
}
});
return $result['data'];
} catch (\Exception $e) {
return false;
}
}
/**
* 会议室预约
*/
public function appointment($model, $appointmentConfig, &$out)
{
$startDateTime = new \DateTime($model->start_time);
$endDateTime = new \DateTime($model->end_time);
$meetOther = json_decode($appointmentConfig->room, true);
$url = $this->baseUrl . '/services/api/BookingService.aspx';
$header[] = 'Content-Type: application/json';
$allMeetIds = [];
$allResults = [];
$currentDate = clone $startDateTime;
while ($currentDate->format('Y-m-d') <= $endDateTime->format('Y-m-d')) {
$dayStart = clone $currentDate;
$dayStart->setTime(5, 0, 0);
$dayEnd = clone $currentDate;
$dayEnd->setTime(23, 0, 0);
if ($currentDate->format('Y-m-d') === $startDateTime->format('Y-m-d')) {
$dayStart = clone $startDateTime;
}
if ($currentDate->format('Y-m-d') === $endDateTime->format('Y-m-d')) {
$dayEnd = clone $endDateTime;
}
$params = [
'account' => $this->account,
'password' => md5($this->password),
'roomName' => $appointmentConfig->name,
'roomCode' => $meetOther['code'],
'roomAddress' => $meetOther['address'],
'beginTime' => $dayStart->format('Y-m-d H:i:s'),
'endTime' => $dayEnd->format('Y-m-d H:i:s'),
'speaker' => $model->name,
'subject' => empty($model->content) ? '预约会议室' : $model->content,
'booker' => "{$model->name};{$model->mobile};",
'attendance' => "{$model->name};{$model->mobile};",
'signUrl' => ''
];
$result = [];
$finally = 0;
try {
$resultJson = httpCurl($url, 'GET', $params, $header);
$result = json_decode($resultJson, true);
if ($result['success']) {
$finally = 1;
$allMeetIds[] = $result['data'];
$allResults[] = $result;
ThirdAppointmentLog::add($model->id, 0, $model->user_id, $url, $params, $result, $finally, '会议室预约-' . $currentDate->format('Y-m-d'));
} else {
$out = $resultJson;
ThirdAppointmentLog::add($model->id, 0, $model->user_id, $url, $params, $result, $finally, '会议室预约-' . $currentDate->format('Y-m-d'));
return false;
}
} catch (\Exception $e) {
$out = $e->getMessage();
ThirdAppointmentLog::add($model->id, 0, $model->user_id, $url, $params, $result, $finally, '会议室预约-' . $currentDate->format('Y-m-d'));
return false;
}
$currentDate->modify('+1 day');
}
if (!empty($allMeetIds)) {
$meetIds = explode(',', $model->meet_id);
$meetIds = array_merge($meetIds, $allMeetIds);
$meetIds = array_filter($meetIds);
$model->meet_id = implode(',', $meetIds);
$model->save();
$out = json_encode($allResults, JSON_UNESCAPED_UNICODE);
return true;
}
return false;
}
/**
* 会议室删除
*/
public function cancelAppointment($model, $meetId, &$out)
{
if (empty($meetId)) return true;
$url = $this->baseUrl . '/services/api/BookingService.aspx';
$header[] = 'Content-Type: application/json';
$params = [
'account' => $this->account,
'password' => md5($this->password),
'method' => 'delete',
'id' => $meetId
];
$result = [];
$finally = 0;
try {
$resultJson = httpCurl($url, 'GET', $params, $header);
$out = $resultJson;
$result = json_decode($resultJson, true);
if ($result['success']) {
$finally = 1;
return true;
} else {
$out = $resultJson;
return false;
}
} catch (\Exception $e) {
$out = $e->getMessage();
return false;
} finally {
// 写日志
ThirdAppointmentLog::add($model->id, 0, $model->user_id, $url, $params, $result, $finally, '会议室预约取消');
}
}
/**
* 会议室信息
*/
public function meetingService($roomId, $startDate, $endDate, &$out)
{
$url = $this->baseUrl . '/services/api/MeetingService.aspx';
$header[] = 'Content-Type: application/json';
$params = [
'account' => $this->account,
'password' => md5($this->password),
'method' => 'find',
'roomId' => $roomId,
'begin' => $startDate,
'end' => $endDate,
];
try {
$resultJson = httpCurl($url, 'GET', $params, $header);
$out = $resultJson;
$result = json_decode($resultJson, true);
if ($result['success']) {
$out = $result['data'];
return true;
} else {
$out = $resultJson;
return false;
}
} catch (\Exception $e) {
$out = $e->getMessage();
return false;
}
}
}