diff --git a/packages/geek-auto-start-chat-with-boss/combineCalculator.mjs b/packages/geek-auto-start-chat-with-boss/combineCalculator.mjs index 726066a..f379072 100644 --- a/packages/geek-auto-start-chat-with-boss/combineCalculator.mjs +++ b/packages/geek-auto-start-chat-with-boss/combineCalculator.mjs @@ -124,3 +124,17 @@ export function checkAnyCombineBossRecommendFilterHasCondition(value) { return !!value[k]?.length }) } + +export function formatStaticCombineFilters(staticCombineRecommendJobFilterConditions) { + const result = staticCombineRecommendJobFilterConditions.map((condition) => { + return { + salaryList: condition.salary ? [condition.salary] : [], + experienceList: condition.experience ? [condition.experience] : [], + degreeList: condition.degree ? [condition.degree] : [], + scaleList: condition.scale ? [condition.scale] : [], + industryList: condition.industry ? [condition.industry] : [] + } + }) + result.unshift(null) + return result +} diff --git a/packages/geek-auto-start-chat-with-boss/default-config-file/boss.json b/packages/geek-auto-start-chat-with-boss/default-config-file/boss.json index 86602cd..72c9c97 100644 --- a/packages/geek-auto-start-chat-with-boss/default-config-file/boss.json +++ b/packages/geek-auto-start-chat-with-boss/default-config-file/boss.json @@ -1,4 +1,5 @@ { + "combineRecommendJobFilterType": 1, "anyCombineRecommendJobFilter": { "salaryList": [], "experienceList": [], @@ -6,6 +7,7 @@ "scaleList": [], "industryList": [] }, + "staticCombineRecommendJobFilterConditions": [], "isSkipEmptyConditionForCombineRecommendJobFilter": false, "expectJobRegExpStr": "", "jobNotMatchStrategy": 1, diff --git a/packages/geek-auto-start-chat-with-boss/index.mjs b/packages/geek-auto-start-chat-with-boss/index.mjs index d9b4a6a..6ecf855 100644 --- a/packages/geek-auto-start-chat-with-boss/index.mjs +++ b/packages/geek-auto-start-chat-with-boss/index.mjs @@ -15,12 +15,21 @@ import { readConfigFile, writeStorageFile, ensureConfigFileExist, readStorageFil import { calculateTotalCombinations, combineFiltersWithConstraintsGenerator, - checkAnyCombineBossRecommendFilterHasCondition + checkAnyCombineBossRecommendFilterHasCondition, + formatStaticCombineFilters, } from './combineCalculator.mjs' 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 { ChatStartupFrom } from '@geekgeekrun/sqlite-plugin/dist/entity/ChatStartupLog' -import { MarkAsNotSuitReason, MarkAsNotSuitOp, StrategyScopeOptionWhenMarkJobNotMatch, SalaryCalculateWay, JobDetailRegExpMatchLogic, JobSource } from '@geekgeekrun/sqlite-plugin/dist/enums' +import { + MarkAsNotSuitReason, + MarkAsNotSuitOp, + StrategyScopeOptionWhenMarkJobNotMatch, + SalaryCalculateWay, + JobDetailRegExpMatchLogic, + JobSource, + CombineRecommendJobFilterType +} from '@geekgeekrun/sqlite-plugin/dist/enums' import { activeDescList, RECOMMEND_JOB_ENTRY_SELECTOR, @@ -85,8 +94,10 @@ const bossCookies = readStorageFile('boss-cookies.json') const bossLocalStorage = readStorageFile('boss-local-storage.json') const targetCompanyList = readConfigFile('target-company-list.json').filter(it => !!it.trim()); +const combineRecommendJobFilterType = readConfigFile('boss.json').combineRecommendJobFilterType ?? CombineRecommendJobFilterType.ANY_COMBINE const anyCombineRecommendJobFilter = readConfigFile('boss.json').anyCombineRecommendJobFilter +const staticCombineRecommendJobFilterConditions = readConfigFile('boss.json').staticCombineRecommendJobFilterConditions ?? [] let isSkipEmptyConditionForCombineRecommendJobFilter = readConfigFile('boss.json').isSkipEmptyConditionForCombineRecommendJobFilter if (!checkAnyCombineBossRecommendFilterHasCondition(anyCombineRecommendJobFilter)) { isSkipEmptyConditionForCombineRecommendJobFilter = false @@ -662,11 +673,13 @@ async function toRecommendPage (hooks) { } } + const filterConditions = + combineRecommendJobFilterType === CombineRecommendJobFilterType.STATIC_COMBINE + ? formatStaticCombineFilters(staticCombineRecommendJobFilterConditions) + : combineFiltersWithConstraintsGenerator(anyCombineRecommendJobFilter) let expectJobList iterateFilterCondition: for ( - const filterCondition of combineFiltersWithConstraintsGenerator( - anyCombineRecommendJobFilter - ) + const filterCondition of filterConditions ) { findInCurrentFilterCondition: while(true) { await sleepWithRandomDelay(2500) @@ -691,11 +704,17 @@ async function toRecommendPage (hooks) { break } } - if ( - isSkipEmptyConditionForCombineRecommendJobFilter && - Object.keys(filterCondition).length && - Object.keys(filterCondition).every(k => !filterCondition[k]?.length) + ( + combineRecommendJobFilterType === CombineRecommendJobFilterType.STATIC_COMBINE && filterCondition === null + ) + || + ( + combineRecommendJobFilterType === CombineRecommendJobFilterType.ANY_COMBINE && + isSkipEmptyConditionForCombineRecommendJobFilter && + Object.keys(filterCondition).length && + Object.keys(filterCondition).every(k => !filterCondition[k]?.length) + ) ) { sleep(4000) continue iterateFilterCondition diff --git a/packages/sqlite-plugin/src/enums.ts b/packages/sqlite-plugin/src/enums.ts index ca74232..d70ab1e 100644 --- a/packages/sqlite-plugin/src/enums.ts +++ b/packages/sqlite-plugin/src/enums.ts @@ -34,3 +34,8 @@ export enum JobSource { recommend = 2, search = 3, } + +export enum CombineRecommendJobFilterType { + ANY_COMBINE = 1, + STATIC_COMBINE = 2, +} \ No newline at end of file diff --git a/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts b/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts index c055eb1..a3f78b3 100644 --- a/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts +++ b/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts @@ -159,6 +159,13 @@ export default function initIpc() { if (hasOwn(payload, 'jobSourceList')) { bossConfig.jobSourceList = payload.jobSourceList } + if (hasOwn(payload, 'combineRecommendJobFilterType')) { + bossConfig.combineRecommendJobFilterType = payload.combineRecommendJobFilterType + } + if (hasOwn(payload, 'staticCombineRecommendJobFilterConditions')) { + bossConfig.staticCombineRecommendJobFilterConditions = + payload.staticCombineRecommendJobFilterConditions + } promiseArr.push(writeConfigFile('boss.json', bossConfig)) diff --git a/packages/ui/src/renderer/src/features/StaticCombineBossRecommendFilter/index.vue b/packages/ui/src/renderer/src/features/StaticCombineBossRecommendFilter/index.vue new file mode 100644 index 0000000..f28b135 --- /dev/null +++ b/packages/ui/src/renderer/src/features/StaticCombineBossRecommendFilter/index.vue @@ -0,0 +1,224 @@ + + + + + diff --git a/packages/ui/src/renderer/src/page/MainLayout/GeekAutoStartChatWithBoss/index.vue b/packages/ui/src/renderer/src/page/MainLayout/GeekAutoStartChatWithBoss/index.vue index d03754c..9643994 100644 --- a/packages/ui/src/renderer/src/page/MainLayout/GeekAutoStartChatWithBoss/index.vue +++ b/packages/ui/src/renderer/src/page/MainLayout/GeekAutoStartChatWithBoss/index.vue @@ -49,60 +49,91 @@ /> - -
- 你希望Boss直聘为你展示什么样的职位? - - - 这个配置是如何工作的? +
+
+ 你希望Boss直聘为你筛选出什么样的职位? + - + + 这个配置是如何工作的? + +
+
+
+
筛选条件遍历方式
+ + {{ op.name }} + +
+
+ +
+
+ +
+ + 跳过初始空条件,直接使用设置的条件查找职位 + + + 跳过初始空条件,直接使用设置的条件查找职位 + +
+
+
+
+ 当前组合条件数:{{ + currentAnyCombineRecommendJobFilterCombinationCount.toLocaleString() + }} + 不建议选择太多组合条件 - + 否则将在当前职位中尝试太多筛选条件,不能及时进入下一个职位,且会增加命中风控的概率 +
- - - - 跳过初始空条件,直接使用设置的条件查找职位 - - - 跳过初始空条件,直接使用设置的条件查找职位 - - -
- 当前组合条件数:{{ - currentAnyCombineRecommendJobFilterCombinationCount.toLocaleString() - }} - 不建议选择太多组合条件 - - 否则将在当前职位中尝试太多筛选条件,不能及时进入下一个职位,且会增加命中风控的概率 -