up
This commit is contained in:
@@ -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位小数)
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user