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