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.

73 lines
2.8 KiB

import type { QuoteRequest } from "@/modules/providers/quote-provider";
import { isRpaAddressMockMode } from "@/lib/rpa/address-mode";
import { isRpaHumanSubmitStrict, isRpaVisualRushMode } from "@/lib/rpa/env";
import { assertRPAContext } from "@/workers/rpa/kernel/context-validator";
import type { RPAContext } from "@/workers/rpa/kernel/context";
import { runKernelSubStep } from "@/workers/rpa/kernel/step-guard";
import {
assertBothAddressesLocked,
settleAddressFieldsForCargo,
waitForCargoCommittedState,
} from "@/workers/rpa/cargo-lock";
import { fillCargoInDrawer } from "@/workers/rpa/fill-cargo-in-drawer";
/**
* Kernel 货物填表:动态 drawer 填写 + commit 闸门
*/
export async function fillCargoStep(
ctx: RPAContext,
req: QuoteRequest,
options?: { skipAddressLock?: boolean },
): Promise<void> {
assertRPAContext(ctx, "fillCargoStep");
const rush = isRpaVisualRushMode();
const humanStrict = isRpaHumanSubmitStrict();
const rushShortcuts = rush && !humanStrict;
const widgetSelector = ctx.selectors.resolve("RPA_SELECTOR_QUOTE_WIDGET");
if (!rushShortcuts) {
await runKernelSubStep("fillCargo", "settleAddressFieldsForCargo", () =>
settleAddressFieldsForCargo(ctx.page, widgetSelector),
);
} else {
console.log("[rpa] visual-rush: 跳过 fillCargo 前地址 settle");
}
if (!isRpaAddressMockMode() && !options?.skipAddressLock && !rushShortcuts) {
await assertBothAddressesLocked(ctx.page, widgetSelector);
} else if (rushShortcuts) {
console.log("[rpa] visual-rush: 跳过 fillCargo 双地址锁定闸门");
} else if (options?.skipAddressLock) {
console.log("[rpa] axel-place-prefetch: 跳过 fillCargo 双地址锁定闸门");
} else {
console.log("[rpa] address-mock: 跳过 fillCargo 双地址锁定闸门");
}
const { expected, landingPopoverFilled } = await runKernelSubStep(
"fillCargo",
"fillCargoInDrawer",
() =>
fillCargoInDrawer(ctx.page, widgetSelector, {
palletCount: req.palletCount,
weightLbPerPallet: req.weightLb,
dimsIn: req.dimsIn,
}),
);
if ((landingPopoverFilled || rush) && rushShortcuts) {
console.log("[rpa] visual-rush: 跳过 waitForCargoCommittedState");
} else if (landingPopoverFilled && humanStrict) {
console.log("[rpa] human-submit-strict: landing 已填,等待 cargo commit");
await runKernelSubStep("fillCargo", "waitForCargoCommittedState", () =>
waitForCargoCommittedState(ctx.page, widgetSelector, expected),
);
} else if (landingPopoverFilled) {
console.log("[rpa] fillCargo: landing 视觉已填,跳过 widget 摘要闸门");
} else {
await runKernelSubStep("fillCargo", "waitForCargoCommittedState", () =>
waitForCargoCommittedState(ctx.page, widgetSelector, expected),
);
}
}