From b6304a5ab83ce67d98032e3c91caf9b2aba10508 Mon Sep 17 00:00:00 2001 From: geekgeekrun Date: Sun, 20 Oct 2024 15:13:01 +0800 Subject: [PATCH] add the logic to save the record of manually mark boss inactive to db --- packages/sqlite-plugin/src/enums.ts | 2 +- .../src/main/flow/LAUNCH_BOSS_SITE/index.ts | 68 ++++++++++++++++++- .../Configuration/MarkAsNotSuitRecord.vue | 24 ++++++- 3 files changed, 88 insertions(+), 6 deletions(-) diff --git a/packages/sqlite-plugin/src/enums.ts b/packages/sqlite-plugin/src/enums.ts index 0e441e8..da32553 100644 --- a/packages/sqlite-plugin/src/enums.ts +++ b/packages/sqlite-plugin/src/enums.ts @@ -1,5 +1,5 @@ export enum MarkAsNotSuitReason { UNKNOWN = 0, BOSS_INACTIVE = 1, - OTHER = 2 + USER_MANUAL_OPERATION_WITH_UNKNOWN_REASON = 2 } \ No newline at end of file diff --git a/packages/ui/src/main/flow/LAUNCH_BOSS_SITE/index.ts b/packages/ui/src/main/flow/LAUNCH_BOSS_SITE/index.ts index 7d1d92a..29e2d37 100644 --- a/packages/ui/src/main/flow/LAUNCH_BOSS_SITE/index.ts +++ b/packages/ui/src/main/flow/LAUNCH_BOSS_SITE/index.ts @@ -1,14 +1,19 @@ import { app } from 'electron' import { initPuppeteer } from '@geekgeekrun/geek-auto-start-chat-with-boss/index.mjs' import extractZip from 'extract-zip' -import { readStorageFile } from '@geekgeekrun/geek-auto-start-chat-with-boss/runtime-file-utils.mjs' +import { + readStorageFile, + writeStorageFile +} from '@geekgeekrun/geek-auto-start-chat-with-boss/runtime-file-utils.mjs' import { setDomainLocalStorage } from '@geekgeekrun/utils/puppeteer/local-storage.mjs' import { saveJobInfoFromRecommendPage, - saveChatStartupRecord + saveChatStartupRecord, + saveMarkAsNotSuitRecord } from '@geekgeekrun/sqlite-plugin/dist/handlers' import { initDb } from '@geekgeekrun/sqlite-plugin' import { getPublicDbFilePath } from '@geekgeekrun/geek-auto-start-chat-with-boss/runtime-file-utils.mjs' +import { MarkAsNotSuitReason } from '@geekgeekrun/sqlite-plugin/dist/enums' import fs from 'node:fs' import os from 'node:os' @@ -68,11 +73,68 @@ const attachRequestsListener = async (target: Target) => { if (data.code === 0) { await saveJobInfoFromRecommendPage(await dbInitPromise, data.zpData) } + } else if ( + response.url().startsWith('https://www.zhipin.com/wapi/zpgeek/negativefeedback/reasons.json') + ) { + const rawReasonResData = (await response.json())?.zpData?.result ?? [] + const reasonCodeToTextMap = await readStorageFile( + 'job-not-suit-reason-code-to-text-cache.json' + ) + for (const it of rawReasonResData) { + reasonCodeToTextMap[it.code] = it.text?.content ?? '' + } + await writeStorageFile('job-not-suit-reason-code-to-text-cache.json', reasonCodeToTextMap) + } else if ( + page.url().startsWith('https://www.zhipin.com/web/geek/job-recommend') && + response.url().startsWith('https://www.zhipin.com/wapi/zpgeek/negativefeedback/save.json') + ) { + const currentJobData = await page.evaluate( + 'document.querySelector(".job-detail-box").__vue__.data' + ) + const requestBody = new URLSearchParams(response.request().postData()) + + const securityIdInRequest = requestBody.get("securityId") + const currentJobSecurityId = currentJobData?.securityId + + if (securityIdInRequest !== currentJobSecurityId) { + return + } + + const chosenCode = Number(requestBody.get('code')) + const currentUserInfo = await page.evaluate( + 'document.querySelector(".job-detail-box").__vue__.$store.state.userInfo' + ) + const reasonCodeToTextMap = await readStorageFile( + 'job-not-suit-reason-code-to-text-cache.json' + ) + + const markDetail = { + markFrom: ChatStartupFrom.ManuallyFromRecommendList, + extInfo: { + chosenReasonInUi: { + code: chosenCode, + text: reasonCodeToTextMap[chosenCode] + } + }, + markReason: MarkAsNotSuitReason.USER_MANUAL_OPERATION_WITH_UNKNOWN_REASON + } + if (reasonCodeToTextMap[chosenCode]?.includes('活跃度低')) { + markDetail.markReason = MarkAsNotSuitReason.BOSS_INACTIVE + markDetail.extInfo.bossActiveTimeDesc = currentJobData?.bossInfo.activeTimeDesc + } + await saveMarkAsNotSuitRecord( + await dbInitPromise, + currentJobData, + { + encryptUserId: currentUserInfo.encryptUserId + }, + markDetail + ) } else if ( page.url().startsWith('https://www.zhipin.com/web/geek/job-recommend') && response.url().startsWith('https://www.zhipin.com/wapi/zpgeek/friend/add.json') ) { - const request = (await response.request()).url() + const request = response.request().url() const url = new URL(request) const jobIdInAddFriendUrl = url.searchParams.get('jobId') diff --git a/packages/ui/src/renderer/src/page/Configuration/MarkAsNotSuitRecord.vue b/packages/ui/src/renderer/src/page/Configuration/MarkAsNotSuitRecord.vue index 484481f..416ee0e 100644 --- a/packages/ui/src/renderer/src/page/Configuration/MarkAsNotSuitRecord.vue +++ b/packages/ui/src/renderer/src/page/Configuration/MarkAsNotSuitRecord.vue @@ -22,7 +22,14 @@