126 lines
3.4 KiB
PHP
126 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace common\models;
|
|
|
|
use common\enums\UserRoleEnum;
|
|
use Exception;
|
|
use yii\behaviors\TimestampBehavior;
|
|
use yii\db\ActiveRecord;
|
|
|
|
class LeadInfo extends \common\modelsgii\LeadInfo
|
|
{
|
|
public function behaviors()
|
|
{
|
|
return [
|
|
[
|
|
'class' => TimestampBehavior::class,
|
|
'attributes' => [
|
|
ActiveRecord::EVENT_BEFORE_INSERT => ['created_at','updated_at'],
|
|
ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
|
|
],
|
|
],
|
|
];
|
|
}
|
|
|
|
//关联职称
|
|
public function getTitle()
|
|
{
|
|
return $this->hasOne(DoctorTitle::className(),['id'=>'title_id']);
|
|
}
|
|
|
|
//关联科室
|
|
public function getDepart()
|
|
{
|
|
return $this->hasOne(HospitalDepartment::className(),['id'=>'depart_id']);
|
|
}
|
|
|
|
//关联医院
|
|
public function getHospital()
|
|
{
|
|
return $this->hasOne(Hospital::className(), ['id' => 'hospital_id']);
|
|
}
|
|
|
|
//关联院区
|
|
public function getYard()
|
|
{
|
|
return $this->hasOne(HospitalYard::className(), ['id' => 'yard_id']);
|
|
}
|
|
|
|
// 关联用户
|
|
public function getUser()
|
|
{
|
|
return $this->hasOne(ServiceUser::className(), ['id' => 'su_id']);
|
|
}
|
|
|
|
// 关联回话
|
|
public function getImMessageSessions()
|
|
{
|
|
return $this->hasMany(ImMessageSession::className(), ['id' => 'service_id']);
|
|
}
|
|
|
|
/**
|
|
* 获取空闲导医
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function getLastLeadUserId(): array
|
|
{
|
|
$wheres = [
|
|
[
|
|
'su.role' => UserRoleEnum::LEADER,
|
|
'su.status' => 2,
|
|
'su.is_delete' => 0,
|
|
'su.im_status' => 1,
|
|
'ims.type' => 3,
|
|
'ims.status' => 10,
|
|
],
|
|
[
|
|
'su.role' => UserRoleEnum::LEADER,
|
|
'su.status' => 2,
|
|
'su.is_delete' => 0,
|
|
'su.im_status' => 1,
|
|
'ims.type' => 3,
|
|
'ims.status' => 0,
|
|
],
|
|
[
|
|
'su.role' => UserRoleEnum::LEADER,
|
|
'su.status' => 2,
|
|
'su.is_delete' => 0,
|
|
'su.im_status' => 0,
|
|
'ims.type' => 3,
|
|
'ims.status' => 10,
|
|
],
|
|
[
|
|
'su.role' => UserRoleEnum::LEADER,
|
|
'su.status' => 2,
|
|
'su.is_delete' => 0,
|
|
'su.im_status' => 0,
|
|
'ims.type' => 3,
|
|
'ims.status' => 0,
|
|
],
|
|
[
|
|
'su.role' => UserRoleEnum::LEADER,
|
|
'su.status' => 2,
|
|
'su.is_delete' => 0,
|
|
'ims.type' => 3,
|
|
],
|
|
];
|
|
foreach ($wheres as $where) {
|
|
$users = ServiceUser::find()
|
|
->alias('su')
|
|
->select(['su.id, count(ims.id) as count'])
|
|
->leftJoin('yii_im_message_session as ims', 'su.id = ims.service_id')
|
|
->where($where)
|
|
->groupBy('su.id')
|
|
->orderBy(['count' => SORT_ASC])
|
|
->asArray()
|
|
->all();
|
|
if (count($users)) {
|
|
return [
|
|
'id' => $users[0]['id'],
|
|
];
|
|
}
|
|
}
|
|
throw new Exception('当前无客服在线');
|
|
}
|
|
} |