优化快手 Cloud 主链路状态机
This commit is contained in:
@@ -19,6 +19,7 @@ import {
|
||||
} from "../../notification/domain-notifications.js";
|
||||
import { createHttpError } from "../../../utils/http.js";
|
||||
import { nowIso } from "../../../utils/time.js";
|
||||
import { TASK_STATUS, normalizeTaskStatus } from "../../../domain/task-status.js";
|
||||
import {
|
||||
KUAISHOU_CLOUD_FIXED_VN_KEY,
|
||||
isKuaishouCloudBindUrlFresh,
|
||||
@@ -126,9 +127,9 @@ export async function prepareKuaishouCloudFulfillmentTask(
|
||||
|
||||
let readyTask = task;
|
||||
|
||||
if (String(task.task_status || "").trim() !== "waiting_binding") {
|
||||
if (normalizeTaskStatus(task.task_status) !== TASK_STATUS.WAITING_BINDING) {
|
||||
readyTask = (await updateTask(task.id, {
|
||||
task_status: "waiting_binding",
|
||||
task_status: TASK_STATUS.WAITING_BINDING,
|
||||
claim_token: claimLinkState.token || task.claim_token || "",
|
||||
claim_expires_at:
|
||||
claimLinkState.expiredAt || getTaskClaimExpiresAt(task),
|
||||
@@ -314,7 +315,7 @@ export async function prepareKuaishouCloudFulfillmentTask(
|
||||
};
|
||||
|
||||
const updatedTask = await updateTask(task.id, {
|
||||
task_status: "waiting_binding",
|
||||
task_status: TASK_STATUS.WAITING_BINDING,
|
||||
user_action_status: "pending_claim",
|
||||
claim_token: claimLinkState.token || task.claim_token || "",
|
||||
claim_expires_at: claimLinkState.expiredAt || getTaskClaimExpiresAt(task),
|
||||
@@ -462,16 +463,16 @@ export async function refreshKuaishouCloudTaskBindUrl(
|
||||
bindProbeStatus: "pending",
|
||||
bindProbeMessage: "",
|
||||
roleName:
|
||||
String(task.task_status || "").trim() === "role_confirmed"
|
||||
normalizeTaskStatus(task.task_status) === TASK_STATUS.ROLE_CONFIRMED
|
||||
? flow.binding.roleName
|
||||
: "",
|
||||
roleId:
|
||||
String(task.task_status || "").trim() === "role_confirmed"
|
||||
normalizeTaskStatus(task.task_status) === TASK_STATUS.ROLE_CONFIRMED
|
||||
? flow.binding.roleId
|
||||
: "",
|
||||
},
|
||||
role:
|
||||
String(task.task_status || "").trim() === "role_confirmed"
|
||||
normalizeTaskStatus(task.task_status) === TASK_STATUS.ROLE_CONFIRMED
|
||||
? flow.role
|
||||
: {
|
||||
status: "pending",
|
||||
@@ -488,17 +489,17 @@ export async function refreshKuaishouCloudTaskBindUrl(
|
||||
options.claimLinkState || (await ensureTaskClaimLink(task));
|
||||
const updatedTask = await updateTask(task.id, {
|
||||
task_status:
|
||||
String(task.task_status || "").trim() === "role_confirmed"
|
||||
normalizeTaskStatus(task.task_status) === TASK_STATUS.ROLE_CONFIRMED
|
||||
? task.task_status
|
||||
: "waiting_binding",
|
||||
: TASK_STATUS.WAITING_BINDING,
|
||||
claim_token: claimLinkState.token || task.claim_token || "",
|
||||
claim_expires_at: claimLinkState.expiredAt || getTaskClaimExpiresAt(task),
|
||||
role_id:
|
||||
String(task.task_status || "").trim() === "role_confirmed"
|
||||
normalizeTaskStatus(task.task_status) === TASK_STATUS.ROLE_CONFIRMED
|
||||
? task.role_id
|
||||
: "",
|
||||
role_name:
|
||||
String(task.task_status || "").trim() === "role_confirmed"
|
||||
normalizeTaskStatus(task.task_status) === TASK_STATUS.ROLE_CONFIRMED
|
||||
? task.role_name
|
||||
: "",
|
||||
last_error: "",
|
||||
@@ -665,7 +666,7 @@ async function markKuaishouCloudBindUrlRefreshFailed(
|
||||
};
|
||||
|
||||
const updatedTask = await updateTask(task.id, {
|
||||
task_status: "pending_binding_prepare",
|
||||
task_status: TASK_STATUS.PENDING_BINDING_PREPARE,
|
||||
role_id: "",
|
||||
role_name: "",
|
||||
last_error: `绑定链接过期,旧号码已退还,新链接准备失败:${errorMessage}`,
|
||||
|
||||
@@ -3,6 +3,7 @@ import { createTaskEvent } from "../../../repositories/task-event-repo.js";
|
||||
import { updateTask } from "../../../repositories/task-repo.js";
|
||||
import { createHttpError } from "../../../utils/http.js";
|
||||
import { nowIso } from "../../../utils/time.js";
|
||||
import { TASK_STATUS, normalizeTaskStatus, type TaskStatus } from "../../../domain/task-status.js";
|
||||
import { notifyKuaishouCloudConsumeFailed } from "../../notification/domain-notifications.js";
|
||||
import { useCloudtentaclesSku } from "../../platforms/cloudtentacles/catalog-service.js";
|
||||
import { backCloudtentaclesVirtualNumber } from "../../platforms/cloudtentacles/virtual-number-service.js";
|
||||
@@ -78,7 +79,7 @@ export async function dispatchKuaishouCloudFulfillmentTask(
|
||||
|
||||
if (
|
||||
flow.dispatch.status === "success" &&
|
||||
String(task.task_status || "").trim() === "dispatched_pending_return"
|
||||
normalizeTaskStatus(task.task_status) === TASK_STATUS.DISPATCHED_PENDING_RETURN
|
||||
) {
|
||||
return { task, flow };
|
||||
}
|
||||
@@ -163,7 +164,7 @@ export async function dispatchKuaishouCloudFulfillmentTask(
|
||||
};
|
||||
|
||||
let updatedTask = await updateTask(task.id, {
|
||||
task_status: "dispatched_pending_return",
|
||||
task_status: TASK_STATUS.DISPATCHED_PENDING_RETURN,
|
||||
delivery_status: "delivered",
|
||||
result_code: "kuaishou_cloud_dispatched",
|
||||
result_message: dispatchSummary,
|
||||
@@ -285,11 +286,10 @@ export async function returnKuaishouCloudFulfillmentTask(
|
||||
});
|
||||
}
|
||||
|
||||
const taskStatus = normalizeTaskStatus(task.task_status);
|
||||
if (
|
||||
flow.returnNumber.status === "success" &&
|
||||
["completed", "manual_review"].includes(
|
||||
String(task.task_status || "").trim()
|
||||
)
|
||||
(taskStatus === TASK_STATUS.COMPLETED || taskStatus === TASK_STATUS.MANUAL_REVIEW)
|
||||
) {
|
||||
return { task, flow };
|
||||
}
|
||||
@@ -316,7 +316,7 @@ export async function returnKuaishouCloudFulfillmentTask(
|
||||
let consumeStatus = "pending";
|
||||
let consumeErrorMessage = "";
|
||||
let consumedAt = null;
|
||||
let nextTaskStatus = "completed";
|
||||
let nextTaskStatus: TaskStatus = TASK_STATUS.COMPLETED;
|
||||
let nextResultCode = "kuaishou_cloud_completed";
|
||||
let nextResultMessage = "cloudtentacles 发货、退号并完成快手核销";
|
||||
|
||||
@@ -369,7 +369,7 @@ export async function returnKuaishouCloudFulfillmentTask(
|
||||
}
|
||||
|
||||
if (consumeStatus !== "success") {
|
||||
nextTaskStatus = "manual_review";
|
||||
nextTaskStatus = TASK_STATUS.MANUAL_REVIEW;
|
||||
nextResultCode = "kuaishou_cloud_consume_failed";
|
||||
nextResultMessage =
|
||||
consumeErrorMessage || "号码已退还,但快手核销未完成,请人工处理";
|
||||
|
||||
Reference in New Issue
Block a user