xiaoai/php_server/app/api/logic/interview/InterviewLogic.php

182 lines
6.8 KiB
PHP

<?php
namespace app\api\logic\interview;
use app\common\logic\BaseLogic;
use app\common\model\interview\Interview;
use app\common\model\interview\InterviewCv;
use app\common\model\interview\InterviewDialog;
use app\common\model\interview\InterviewJob;
use app\common\model\interview\InterviewRecord;
use app\common\service\wechat\WeChatMnpService;
use app\common\service\wechat\WeChatUrllinkService;
class InterviewLogic extends BaseLogic
{
/**
* @desc 统计
* @return void
* @date 2025/2/25 14:55
* @author dagouzi
*/
public static function stat(array $params)
{
$jobCount = InterviewJob::where('user_id', $params['user_id'])->count();
$jobIds = InterviewJob::where('user_id', $params['user_id'])->column('id');
$duration = InterviewRecord::where('job_id', 'in', $jobIds)->column('duration');
$interviewCount = count($duration);
if ($interviewCount == 0){
$avgTime = 0;
} else {
$duration = array_sum($duration);
$minutes = floor( $duration / 60); // 计算分钟
$avgTime = floor($minutes / $interviewCount);
}
self::$returnData = [
'job_count' => $jobCount,
'avg_time' => $avgTime,
'interview_count' => $interviewCount,
];
return true;
}
public static function detail($id)
{
try {
$interviewRecord = InterviewRecord::where('id', $id)->findOrEmpty()->toArray();
if (empty($interviewRecord)) {
throw new \Exception('面试记录不存在');
}
$InterviewIds = Interview::where('interview_record_id', $interviewRecord['id'])->column('id');
if (empty($InterviewIds)) {
throw new \Exception('面试会话不存在');
}
$cv = InterviewCv::where('user_id', $interviewRecord['user_id'])->findOrEmpty()->toArray();
if (empty($cv)) {
throw new \Exception('简历不存在');
}
$result['cv'] = $cv;
$Interview = Interview::where(['interview_record_id' => $interviewRecord['id'],'status' => 1])
->findOrEmpty()->toArray();
$comment = '';
$analyze = '';
$inspection_point = '';
if (!empty($Interview)) {
$comment = $Interview['comment'];
$analyze = $Interview['analyze'];
$inspection_point = $Interview['inspection_point'];
}
$alltime = $interviewRecord['duration'];
$hours = floor($alltime / 3600); // 计算小时
$minutes = floor(($alltime % 3600) / 60); // 计算分钟
$seconds = $alltime % 60; // 计算秒数
// 格式化为 "时:分:秒"
$formattedTime = sprintf('%d:%02d:%02d', $hours, $minutes, $seconds);
$result['ai'] = [
'job_name' => $interviewRecord['job_name'],
'duration' => $formattedTime,
'times' =>Interview::where(['interview_record_id' =>$id,'status' => Interview::STATUS_RESTART])->count(),
'first_start_time' => $interviewRecord['first_start_time'],
'score' => $interviewRecord['best_score'],
'comment' => $comment,
'analyze' => $analyze,
'inspection_point' => $inspection_point,
];
$dialogs = InterviewDialog::whereIn('interview_id', $InterviewIds)->select()->toArray();
// 初始化结果数组
$newArr = [];
// 按 interview_id 分组并构建结果
foreach ($dialogs as $dialog) {
$interviewId = $dialog['interview_id'];
// 初始化分组
if (!isset($newArr[$interviewId])) {
$newArr[$interviewId] = [
'interview_dialog' => null,
'interview_id' => $interviewId,
'type' => null,
'out_reason' => null,
'list' => []
];
}
// 将对话记录添加到对应的组
$newArr[$interviewId]['list'][] = $dialog;
// 更新最后一个对话信息
$newArr[$interviewId]['interview_dialog'] = $dialog['id'];
$newArr[$interviewId]['type'] = $dialog['type'];
$newArr[$interviewId]['out_reason'] = $dialog['out_reason'];
if(!empty($dialog['restart_reason'])){
$newArr[$interviewId]['out_reason'] = $dialog['restart_reason'];
}
}
// 处理结果,提取最后一个对话
foreach ($newArr as &$group) {
// 提取最后一个对话
$lastDialog = end($group['list']); // 获取最后一个对话
$group['interview_dialog'] = $lastDialog['id'];
$group['type'] = $lastDialog['type'];
$group['out_reason'] = $lastDialog['out_reason'];
if(!empty($lastDialog['restart_reason'])){
$group['out_reason'] = $lastDialog['restart_reason'];
}
}
// 重新索引数组
$newArr = array_values($newArr);
$result['dialogs'] = array_reverse($newArr);
self::$returnData = $result;
return true;
} catch (\Exception $exception) {
self::setError($exception->getMessage());
return false;
}
}
/**
* @desc 岗位链接
* @param array $params
* @return array
* @date 2025/2/14 10:42
* @throws \Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface
* @author dagouzi
*/
public static function jobLink(array $params): array
{
$path = '/ai_modules/interview/pages/index/index';
// $path = '/pages/index/index';
$query = 'user_id=' . $params['user_id'] . '&job_id=' . $params['job_id'];
$wechatService = new WeChatUrllinkService();
$result = $wechatService->urlLink($path, $query);
return ['url' => $result['url_link'] ?? ''];
}
/**
* @desc 我的岗位链接
* @param array $params
* @return array
* @date 2025/2/14 10:58
* @throws \Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface
* @author dagouzi
*/
public static function myJobLink(array $params): array
{
$path = '/ai_modules/interview/pages/index/index';
//$path = '/pages/index/index';
$query = 'user_id=' . $params['user_id'];
$wechatService = new WeChatUrllinkService();
$result = $wechatService->urlLink($path, $query);
return ['url' => $result['url_link'] ?? ''];
}
}