Files
xk-api-yii/common/models/LeadInfo.php
2024-09-19 11:32:39 +08:00

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('当前无客服在线');
}
}