This commit is contained in:
杨志
2026-01-21 09:41:22 +08:00
parent eed3540f3d
commit 08cb6b2b03
2 changed files with 197 additions and 56 deletions

View File

@@ -275,6 +275,72 @@ class CrawlerService
return $cookies;
}
/**
* 计算最大公约数GCD
* @param int $a
* @param int $b
* @return int
*/
private function gcd(int $a, int $b): int
{
while ($b != 0) {
$temp = $b;
$b = $a % $b;
$a = $temp;
}
return $a;
}
/**
* 计算竞争比(格式:招聘人数:审核通过人数简化比例保留2位小数
* @param int $zprs 招聘人数
* @param int $bkrs 审核通过人数
* @return string
*/
private function calculateCompetitionRatio(int $zprs, int $bkrs): string
{
if ($zprs <= 0) {
return '0:0';
}
if ($bkrs <= 0) {
return $zprs . ':0';
}
// 计算最大公约数
$gcd = $this->gcd($zprs, $bkrs);
// 简化比例
$simplifiedZprs = $zprs / $gcd;
$simplifiedBkrs = $bkrs / $gcd;
// 如果两个数都是整数,直接返回
if ($simplifiedZprs == intval($simplifiedZprs) && $simplifiedBkrs == intval($simplifiedBkrs)) {
return intval($simplifiedZprs) . ':' . intval($simplifiedBkrs);
}
// 如果招聘人数是1审核通过人数保留2位小数
if ($simplifiedZprs == 1) {
$bkrsFormatted = number_format($simplifiedBkrs, 2, '.', '');
// 如果小数部分是.00,则显示为整数
if (floatval($bkrsFormatted) == intval($bkrsFormatted)) {
return '1:' . intval($bkrsFormatted);
}
return '1:' . $bkrsFormatted;
}
// 否则将招聘人数简化为1审核通过人数按比例计算并保留2位小数
$ratio = $simplifiedBkrs / $simplifiedZprs;
$ratioFormatted = number_format($ratio, 2, '.', '');
// 如果小数部分是.00,则显示为整数
if (floatval($ratioFormatted) == intval($ratioFormatted)) {
return '1:' . intval($ratioFormatted);
}
return '1:' . $ratioFormatted;
}
/**
* 格式化职位信息(包含竞争比计算)
* @param array $item 原始职位数据
@@ -288,10 +354,12 @@ class CrawlerService
$item = $item[0];
}
// 计算竞争比(格式:招聘人数:审核通过人数
// 获取招聘人数审核通过人数
$zprs = isset($item['zprs']) ? intval($item['zprs']) : 0;
$bkrs = isset($item['bkrs']) ? intval($item['bkrs']) : 0;
$competitionRatio = $zprs > 0 && $bkrs > 0 ? $zprs . ':' . $bkrs : ($zprs > 0 ? $zprs . ':0' : '0:0');
// 计算竞争比格式1:比例保留2位小数
$competitionRatio = $this->calculateCompetitionRatio($zprs, $bkrs);
return [
'sbmc' => $item['sbmc'] ?? '', // 省份
@@ -301,7 +369,7 @@ class CrawlerService
'zwdm' => $item['zwdm'] ?? $zwdm, // 职位代码
'zprs' => $zprs, // 招聘人数
'bkrs' => $bkrs, // 审核通过人数
'competition_ratio' => $competitionRatio, // 竞争比(格式:招聘人数:审核通过人数)
'competition_ratio' => $competitionRatio, // 竞争比(格式:1:比例保留2位小数)
];
}