mirror of
https://github.com/geekgeekrun/geekgeekrun.git
synced 2026-09-07 16:37:06 +08:00
add filter logic of job work exp in script
This commit is contained in:
@@ -16,7 +16,7 @@ import { calculateTotalCombinations, combineFiltersWithConstraintsGenerator } fr
|
|||||||
import { default as jobFilterConditions } from './internal-config/job-filter-conditions-20241002.json'
|
import { default as jobFilterConditions } from './internal-config/job-filter-conditions-20241002.json'
|
||||||
import { default as rawIndustryFilterExemption } from './internal-config/job-filter-industry-filter-exemption-20241002.json'
|
import { default as rawIndustryFilterExemption } from './internal-config/job-filter-industry-filter-exemption-20241002.json'
|
||||||
import { ChatStartupFrom } from '@geekgeekrun/sqlite-plugin/dist/entity/ChatStartupLog'
|
import { ChatStartupFrom } from '@geekgeekrun/sqlite-plugin/dist/entity/ChatStartupLog'
|
||||||
import { MarkAsNotSuitReason, MarkAsNotSuitOp, StrategyScopeOptionWhenMarkJobNotMatch } from '@geekgeekrun/sqlite-plugin/dist/enums'
|
import { MarkAsNotSuitReason, MarkAsNotSuitOp, StrategyScopeOptionWhenMarkJobNotMatch, SalaryCalculateWay } from '@geekgeekrun/sqlite-plugin/dist/enums'
|
||||||
import { activeDescList } from './constant.mjs'
|
import { activeDescList } from './constant.mjs'
|
||||||
|
|
||||||
const jobFilterConditionsMapByCode = {}
|
const jobFilterConditionsMapByCode = {}
|
||||||
@@ -86,6 +86,19 @@ const expectCityList = readConfigFile('boss.json').expectCityList ?? []
|
|||||||
|
|
||||||
const strategyScopeOptionWhenMarkJobCityNotMatch = readConfigFile('boss.json').strategyScopeOptionWhenMarkJobCityNotMatch ?? StrategyScopeOptionWhenMarkJobNotMatch.ONLY_COMPANY_MATCHED_JOB
|
const strategyScopeOptionWhenMarkJobCityNotMatch = readConfigFile('boss.json').strategyScopeOptionWhenMarkJobCityNotMatch ?? StrategyScopeOptionWhenMarkJobNotMatch.ONLY_COMPANY_MATCHED_JOB
|
||||||
|
|
||||||
|
// salary
|
||||||
|
const expectSalaryLow = parseFloat(readConfigFile('boss.json').expectSalaryLow) || null
|
||||||
|
const expectSalaryHigh = parseFloat(readConfigFile('boss.json').expectSalaryHigh) || null
|
||||||
|
const expectSalaryCalculateWay = readConfigFile('boss.json').expectSalaryCalculateWay ?? SalaryCalculateWay.MONTH_SALARY
|
||||||
|
const expectSalaryNotMatchStrategy = readConfigFile('boss.json').expectSalaryCalculateWay ?? MarkAsNotSuitOp.NO_OP
|
||||||
|
const isSalaryFilterEnabled = expectSalaryLow || expectSalaryHigh
|
||||||
|
const strategyScopeOptionWhenMarkSalaryNotMatch = readConfigFile('boss.json').strategyScopeOptionWhenMarkSalaryNotMatch ?? StrategyScopeOptionWhenMarkJobNotMatch.ONLY_COMPANY_MATCHED_JOB
|
||||||
|
|
||||||
|
// work exp
|
||||||
|
const expectWorkExpList = readConfigFile('boss.json').expectWorkExpList ?? []
|
||||||
|
const expectWorkExpNotMatchStrategy = readConfigFile('boss.json').expectWorkExpNotMatchStrategy ?? MarkAsNotSuitOp.NO_OP
|
||||||
|
const strategyScopeOptionWhenMarkJobWorkExpNotMatch = readConfigFile('boss.json').strategyScopeOptionWhenMarkJobWorkExpNotMatch ?? StrategyScopeOptionWhenMarkJobNotMatch.ONLY_COMPANY_MATCHED_JOB
|
||||||
|
|
||||||
const markAsNotActiveSelectedTimeRange = (() => {
|
const markAsNotActiveSelectedTimeRange = (() => {
|
||||||
let n = readConfigFile('boss.json').markAsNotActiveSelectedTimeRange
|
let n = readConfigFile('boss.json').markAsNotActiveSelectedTimeRange
|
||||||
if (
|
if (
|
||||||
@@ -189,19 +202,15 @@ async function markJobAsNotSuitInRecommendPage (reasonCode) {
|
|||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
case MarkAsNotSuitReason.JOB_WORK_EXP_NOT_SUIT:
|
||||||
case MarkAsNotSuitReason.JOB_CITY_NOT_SUIT: {
|
case MarkAsNotSuitReason.JOB_CITY_NOT_SUIT: {
|
||||||
const bossNotActiveOptionProxy = await chooseReasonDialogProxy.$(`.zp-type-item[title$="城市"]`)
|
const opProxy = (await chooseReasonDialogProxy.$(`.zp-type-item[title$="城市"]`))
|
||||||
if (bossNotActiveOptionProxy) {
|
?? (await chooseReasonDialogProxy.$(`.zp-type-item[title="同城距离远"]`))
|
||||||
await bossNotActiveOptionProxy.click()
|
?? (await chooseReasonDialogProxy.$(`.zp-type-item[title="公司不感兴趣"]`))
|
||||||
|
?? (await chooseReasonDialogProxy.$(`.zp-type-item[title="面试过/入职过"]`))
|
||||||
|
if (opProxy) {
|
||||||
|
await opProxy.click()
|
||||||
isOptionChosen = true
|
isOptionChosen = true
|
||||||
} else {
|
|
||||||
const fallbackOptionProxy = (await chooseReasonDialogProxy.$(`.zp-type-item[title="同城距离远"]`))
|
|
||||||
?? (await chooseReasonDialogProxy.$(`.zp-type-item[title="公司不感兴趣"]`))
|
|
||||||
?? (await chooseReasonDialogProxy.$(`.zp-type-item[title="面试过/入职过"]`))
|
|
||||||
if (fallbackOptionProxy) {
|
|
||||||
await fallbackOptionProxy.click()
|
|
||||||
isOptionChosen = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -571,7 +580,7 @@ async function toRecommendPage (hooks) {
|
|||||||
:
|
:
|
||||||
true
|
true
|
||||||
) || (
|
) || (
|
||||||
// enter job detail to mark as not suit
|
// enter job detail to mark as not suit for city filter
|
||||||
(
|
(
|
||||||
Array.isArray(expectCityList) &&
|
Array.isArray(expectCityList) &&
|
||||||
expectCityList.length &&
|
expectCityList.length &&
|
||||||
@@ -581,6 +590,17 @@ async function toRecommendPage (hooks) {
|
|||||||
].includes(expectCityNotMatchStrategy) &&
|
].includes(expectCityNotMatchStrategy) &&
|
||||||
strategyScopeOptionWhenMarkJobCityNotMatch === StrategyScopeOptionWhenMarkJobNotMatch.ALL_JOB
|
strategyScopeOptionWhenMarkJobCityNotMatch === StrategyScopeOptionWhenMarkJobNotMatch.ALL_JOB
|
||||||
) ? !expectCityList.includes(it.cityName) : false
|
) ? !expectCityList.includes(it.cityName) : false
|
||||||
|
) || (
|
||||||
|
// enter job detail to mark as not suit for work exp filter
|
||||||
|
(
|
||||||
|
Array.isArray(expectWorkExpList) &&
|
||||||
|
expectWorkExpList.length &&
|
||||||
|
[
|
||||||
|
MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS,
|
||||||
|
MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL
|
||||||
|
].includes(expectWorkExpNotMatchStrategy) &&
|
||||||
|
strategyScopeOptionWhenMarkJobWorkExpNotMatch === StrategyScopeOptionWhenMarkJobNotMatch.ALL_JOB
|
||||||
|
) ? !expectWorkExpList.includes(it.jobExperience) : false
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
@@ -747,6 +767,43 @@ async function toRecommendPage (hooks) {
|
|||||||
}
|
}
|
||||||
continue continueFind
|
continue continueFind
|
||||||
}
|
}
|
||||||
|
if (
|
||||||
|
(Array.isArray(expectWorkExpList) && expectWorkExpList.length) && !expectWorkExpList.includes(selectedJobData.jobExperience)
|
||||||
|
) {
|
||||||
|
blockJobNotSuit.add(targetJobData.jobInfo.encryptId)
|
||||||
|
if (expectWorkExpNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS) {
|
||||||
|
try {
|
||||||
|
const { chosenReasonInUi } = await markJobAsNotSuitInRecommendPage(MarkAsNotSuitReason.JOB_WORK_EXP_NOT_SUIT)
|
||||||
|
await hooks.jobMarkedAsNotSuit.promise(
|
||||||
|
targetJobData,
|
||||||
|
{
|
||||||
|
markFrom: ChatStartupFrom.AutoFromRecommendList,
|
||||||
|
markReason: MarkAsNotSuitReason.JOB_WORK_EXP_NOT_SUIT,
|
||||||
|
extInfo: {
|
||||||
|
chosenReasonInUi
|
||||||
|
},
|
||||||
|
markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_BOSS
|
||||||
|
}
|
||||||
|
)
|
||||||
|
} catch {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (expectWorkExpNotMatchStrategy === MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL) {
|
||||||
|
try {
|
||||||
|
await hooks.jobMarkedAsNotSuit.promise(
|
||||||
|
targetJobData,
|
||||||
|
{
|
||||||
|
markFrom: ChatStartupFrom.AutoFromRecommendList,
|
||||||
|
markReason: MarkAsNotSuitReason.JOB_WORK_EXP_NOT_SUIT,
|
||||||
|
extInfo: null,
|
||||||
|
markOp: MarkAsNotSuitOp.MARK_AS_NOT_SUIT_ON_LOCAL
|
||||||
|
}
|
||||||
|
)
|
||||||
|
} catch {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue continueFind
|
||||||
|
}
|
||||||
if (
|
if (
|
||||||
!testIfJobTitleOrDescriptionSuit(targetJobData.jobInfo)
|
!testIfJobTitleOrDescriptionSuit(targetJobData.jobInfo)
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ export enum MarkAsNotSuitReason {
|
|||||||
USER_MANUAL_OPERATION_WITH_UNKNOWN_REASON = 2,
|
USER_MANUAL_OPERATION_WITH_UNKNOWN_REASON = 2,
|
||||||
JOB_NOT_SUIT = 3,
|
JOB_NOT_SUIT = 3,
|
||||||
JOB_CITY_NOT_SUIT = 4,
|
JOB_CITY_NOT_SUIT = 4,
|
||||||
|
JOB_WORK_EXP_NOT_SUIT = 5,
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum MarkAsNotSuitOp {
|
export enum MarkAsNotSuitOp {
|
||||||
|
|||||||
@@ -42,6 +42,10 @@
|
|||||||
<strong>{{ markReasonTopicMap[row.markReason] }}</strong>
|
<strong>{{ markReasonTopicMap[row.markReason] }}</strong>
|
||||||
<pre class="m-0 of-auto">{{ formatMarkReason(row) }}</pre>
|
<pre class="m-0 of-auto">{{ formatMarkReason(row) }}</pre>
|
||||||
</template>
|
</template>
|
||||||
|
<template v-if="row.markReason === MarkAsNotSuitReason.JOB_WORK_EXP_NOT_SUIT">
|
||||||
|
<strong>{{ markReasonTopicMap[row.markReason] }}</strong>
|
||||||
|
<pre class="m-0 of-auto">{{ formatMarkReason(row) }}</pre>
|
||||||
|
</template>
|
||||||
</template>
|
</template>
|
||||||
</ElTableColumn>
|
</ElTableColumn>
|
||||||
<ElTableColumn prop="experienceName" label="工作经验" />
|
<ElTableColumn prop="experienceName" label="工作经验" />
|
||||||
@@ -209,7 +213,8 @@ const markReasonTopicMap = {
|
|||||||
[MarkAsNotSuitReason.BOSS_INACTIVE]: 'Boss不活跃',
|
[MarkAsNotSuitReason.BOSS_INACTIVE]: 'Boss不活跃',
|
||||||
[MarkAsNotSuitReason.USER_MANUAL_OPERATION_WITH_UNKNOWN_REASON]: '手动标记不合适',
|
[MarkAsNotSuitReason.USER_MANUAL_OPERATION_WITH_UNKNOWN_REASON]: '手动标记不合适',
|
||||||
[MarkAsNotSuitReason.JOB_NOT_SUIT]: '职位不合适',
|
[MarkAsNotSuitReason.JOB_NOT_SUIT]: '职位不合适',
|
||||||
[MarkAsNotSuitReason.JOB_CITY_NOT_SUIT]: '工作地不合适'
|
[MarkAsNotSuitReason.JOB_CITY_NOT_SUIT]: '工作地不合适',
|
||||||
|
[MarkAsNotSuitReason.JOB_WORK_EXP_NOT_SUIT]: '工作经验不合适'
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatMarkReason(row: VMarkAsNotSuitLog) {
|
function formatMarkReason(row: VMarkAsNotSuitLog) {
|
||||||
@@ -241,6 +246,7 @@ function formatMarkReason(row: VMarkAsNotSuitLog) {
|
|||||||
.filter(Boolean)
|
.filter(Boolean)
|
||||||
.join('\n')
|
.join('\n')
|
||||||
}
|
}
|
||||||
|
case MarkAsNotSuitReason.JOB_WORK_EXP_NOT_SUIT:
|
||||||
case MarkAsNotSuitReason.JOB_CITY_NOT_SUIT: {
|
case MarkAsNotSuitReason.JOB_CITY_NOT_SUIT: {
|
||||||
const extInfo = (() => {
|
const extInfo = (() => {
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user