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.
chajia/scripts/batch-quote-verify.ts

146 lines
3.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/env tsx
/**
* 批量随机美国地址对报价测试(直连 axel API
*/
import { fetchAxelQuote } from "@/lib/axel/client";
const CASES = [
{
id: "A",
origin: "3131 Western Ave, Seattle, WA 98126",
dest: "123 Main St, Los Angeles, CA 90001",
pallets: 2,
weightLb: 500,
lengthIn: 48,
widthIn: 40,
heightIn: 45,
},
{
id: "B",
origin: "233 S Wacker Dr, Chicago, IL 60606",
dest: "1500 Marilla St, Dallas, TX 75201",
pallets: 3,
weightLb: 1200,
lengthIn: 48,
widthIn: 40,
heightIn: 48,
},
{
id: "C",
origin: "350 5th Ave, New York, NY 10118",
dest: "191 Peachtree St NE, Atlanta, GA 30303",
pallets: 1,
weightLb: 350,
lengthIn: 40,
widthIn: 48,
heightIn: 40,
},
{
id: "D",
origin: "1701 Broadway, Denver, CO 80290",
dest: "200 W Washington St, Phoenix, AZ 85003",
pallets: 4,
weightLb: 2000,
lengthIn: 48,
widthIn: 40,
heightIn: 50,
},
{
id: "E",
origin: "1 Faneuil Hall Sq, Boston, MA 02109",
dest: "701 Brickell Ave, Miami, FL 33131",
pallets: 2,
weightLb: 800,
lengthIn: 48,
widthIn: 40,
heightIn: 45,
},
{
id: "F",
origin: "1120 NW Couch St, Portland, OR 97209",
dest: "1600 Smith St, Houston, TX 77002",
pallets: 5,
weightLb: 3500,
lengthIn: 48,
widthIn: 48,
heightIn: 55,
},
{
id: "G",
origin: "3131 Western Ave, Seattle, WA",
dest: "7000 NW 52nd St, Miami, FL",
pallets: 4,
weightLb: 723,
lengthIn: 48,
widthIn: 40,
heightIn: 45,
},
{
id: "H",
origin: "5678 Industrial Blvd, Austin, TX 78744",
dest: "8900 E Hampden Ave, Denver, CO 80231",
pallets: 2,
weightLb: 650,
lengthIn: 48,
widthIn: 40,
heightIn: 42,
},
] as const;
async function main() {
const results: unknown[] = [];
for (const c of CASES) {
process.stderr.write(`[batch] 正在询价 ${c.id}...\n`);
try {
const r = await fetchAxelQuote({
origin: c.origin,
dest: c.dest,
pallets: c.pallets,
weightLb: c.weightLb,
lengthIn: c.lengthIn,
widthIn: c.widthIn,
heightIn: c.heightIn,
});
results.push({
caseId: c.id,
input: {
origin: c.origin,
dest: c.dest,
cargo: {
pallets: c.pallets,
weightLb: c.weightLb,
dimsIn: { l: c.lengthIn, w: c.widthIn, h: c.heightIn },
},
},
selectedOrigin: {
placeId: r.origin.placeId,
description: r.origin.description,
},
selectedDest: {
placeId: r.dest.placeId,
description: r.dest.description,
},
quotes: r.items.map((item) => ({
serviceLevel: item.serviceLevel,
rateOption: item.rateOption,
carrier: item.carrier,
transitDays: item.transitDays,
rawTotal: item.rawTotal,
rawFreight: item.rawFreight,
surcharges: item.surcharges,
})),
ratesSummary: r.ratesSummary,
});
} catch (err) {
results.push({
caseId: c.id,
input: c,
error: err instanceof Error ? err.message : String(err),
});
}
}
console.log(JSON.stringify({ generatedAt: new Date().toISOString(), cases: results }, null, 2));
}
main();