You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
2.8 KiB
118 lines
2.8 KiB
/**
|
|
* Priority1 公开询价 RPA — 供 worker 与脚本共用
|
|
*/
|
|
import { runPriority1VisualChain } from "@/workers/rpa/priority1/visual-chain";
|
|
import type { Priority1DemoInput } from "@/workers/rpa/priority1/demo-input";
|
|
import type {
|
|
Priority1QuoteLine,
|
|
Priority1QuoteOutcome,
|
|
} from "@/workers/rpa/priority1/quote-extract";
|
|
import { PRIORITY1_MANUAL_FOLLOWUP_MESSAGE } from "@/workers/rpa/priority1/quote-extract";
|
|
|
|
export type Priority1RunQuoteResult = {
|
|
quotes: Priority1QuoteLine[];
|
|
ok: boolean;
|
|
quoteOutcome?: Priority1QuoteOutcome;
|
|
message?: string;
|
|
errorMessage?: string;
|
|
};
|
|
|
|
function mockPriority1Quotes(): Priority1QuoteLine[] {
|
|
return [
|
|
{
|
|
rank: 1,
|
|
carrier: "Mock Carrier A",
|
|
carrierCode: "MCA",
|
|
totalUsd: 428.5,
|
|
transitDays: 3,
|
|
deliveryDate: null,
|
|
expirationDate: null,
|
|
serviceLevel: "Standard",
|
|
quoteId: null,
|
|
caboUrl: null,
|
|
source: "visible-dom",
|
|
},
|
|
{
|
|
rank: 2,
|
|
carrier: "Mock Carrier B",
|
|
carrierCode: "MCB",
|
|
totalUsd: 512.0,
|
|
transitDays: 2,
|
|
deliveryDate: null,
|
|
expirationDate: null,
|
|
serviceLevel: "Standard",
|
|
quoteId: null,
|
|
caboUrl: null,
|
|
source: "visible-dom",
|
|
},
|
|
];
|
|
}
|
|
|
|
async function runProductionPriority1Rpa(
|
|
input: Priority1DemoInput,
|
|
): Promise<Priority1RunQuoteResult> {
|
|
if (process.env.RPA_DWELL_MS == null) {
|
|
process.env.RPA_DWELL_MS = "0";
|
|
}
|
|
if (process.env.RPA_SLOW_MO_MS == null) {
|
|
process.env.RPA_SLOW_MO_MS = "0";
|
|
}
|
|
if (process.env.RPA_QUOTE_POLL_MS == null) {
|
|
process.env.RPA_QUOTE_POLL_MS = "600";
|
|
}
|
|
|
|
const result = await runPriority1VisualChain({
|
|
demo: input,
|
|
caseId: `worker-${Date.now()}`,
|
|
workerFast: true,
|
|
});
|
|
|
|
if (!result.ok) {
|
|
return {
|
|
quotes: [],
|
|
ok: false,
|
|
quoteOutcome: result.quoteOutcome ?? "no_result",
|
|
errorMessage: result.error ?? "Priority1 RPA 执行失败",
|
|
};
|
|
}
|
|
|
|
if (result.quoteOutcome === "manual_followup") {
|
|
return {
|
|
quotes: [],
|
|
ok: true,
|
|
quoteOutcome: "manual_followup",
|
|
message: result.message ?? PRIORITY1_MANUAL_FOLLOWUP_MESSAGE,
|
|
};
|
|
}
|
|
|
|
if (result.quotes.length > 0) {
|
|
return {
|
|
quotes: result.quotes,
|
|
ok: true,
|
|
quoteOutcome: "instant_quote",
|
|
};
|
|
}
|
|
|
|
return {
|
|
quotes: [],
|
|
ok: false,
|
|
quoteOutcome: result.quoteOutcome ?? "no_result",
|
|
errorMessage: result.error ?? "Priority1 报价提取失败",
|
|
};
|
|
}
|
|
|
|
/** 按用户模拟参数在 Priority1 官网真实填表并抓取报价 */
|
|
export async function runPriority1QuoteRpa(
|
|
input: Priority1DemoInput,
|
|
): Promise<Priority1RunQuoteResult> {
|
|
if (process.env.RPA_MOCK_MODE === "true") {
|
|
return {
|
|
quotes: mockPriority1Quotes(),
|
|
ok: true,
|
|
quoteOutcome: "instant_quote",
|
|
};
|
|
}
|
|
|
|
return runProductionPriority1Rpa(input);
|
|
}
|