feat(P19ERP1-1,P19ERP1-2): 新增ERP主数据同步模型与服务

这个提交包含在:
2026-03-08 16:28:56 +08:00
父节点 b45b8f2945
当前提交 a1b1d7cfc9
共修改 10 个文件,包含 1167 行新增和 94 行删除
@@ -0,0 +1,50 @@
-- CreateTable
CREATE TABLE "integration_bindings" (
"id" UUID NOT NULL,
"provider" VARCHAR(32) NOT NULL,
"entity_type" VARCHAR(32) NOT NULL,
"local_id" UUID NOT NULL,
"external_id" VARCHAR(128),
"external_code" VARCHAR(128),
"last_synced_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"created_by" UUID,
"updated_at" TIMESTAMP(3) NOT NULL,
"updated_by" UUID,
CONSTRAINT "integration_bindings_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "integration_sync_states" (
"id" UUID NOT NULL,
"provider" VARCHAR(32) NOT NULL,
"resource_type" VARCHAR(32) NOT NULL,
"status" VARCHAR(16) NOT NULL DEFAULT 'idle',
"last_result" JSONB,
"last_error" TEXT,
"last_started_at" TIMESTAMP(3),
"last_finished_at" TIMESTAMP(3),
"last_success_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"created_by" UUID,
"updated_at" TIMESTAMP(3) NOT NULL,
"updated_by" UUID,
CONSTRAINT "integration_sync_states_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE INDEX "idx_integration_bindings_provider_entity_external_code" ON "integration_bindings"("provider", "entity_type", "external_code");
-- CreateIndex
CREATE UNIQUE INDEX "integration_bindings_provider_entity_local_ux" ON "integration_bindings"("provider", "entity_type", "local_id");
-- CreateIndex
CREATE UNIQUE INDEX "integration_bindings_provider_entity_external_id_ux" ON "integration_bindings"("provider", "entity_type", "external_id");
-- CreateIndex
CREATE INDEX "idx_integration_sync_states_provider_status" ON "integration_sync_states"("provider", "status");
-- CreateIndex
CREATE UNIQUE INDEX "integration_sync_states_provider_resource_ux" ON "integration_sync_states"("provider", "resource_type");
+41
查看文件
@@ -1205,6 +1205,47 @@ model IntegrationOutbox {
@@map("integration_outbox")
}
model IntegrationBinding {
id String @id @default(uuid()) @db.Uuid
provider String @db.VarChar(32)
entity_type String @db.VarChar(32)
local_id String @db.Uuid
external_id String? @db.VarChar(128)
external_code String? @db.VarChar(128)
last_synced_at DateTime?
created_at DateTime @default(now())
created_by String? @db.Uuid
updated_at DateTime @updatedAt
updated_by String? @db.Uuid
@@unique([provider, entity_type, local_id], map: "integration_bindings_provider_entity_local_ux")
@@unique([provider, entity_type, external_id], map: "integration_bindings_provider_entity_external_id_ux")
@@index([provider, entity_type, external_code], map: "idx_integration_bindings_provider_entity_external_code")
@@map("integration_bindings")
}
model IntegrationSyncState {
id String @id @default(uuid()) @db.Uuid
provider String @db.VarChar(32)
resource_type String @db.VarChar(32)
status String @default("idle") @db.VarChar(16)
last_result Json?
last_error String?
last_started_at DateTime?
last_finished_at DateTime?
last_success_at DateTime?
created_at DateTime @default(now())
created_by String? @db.Uuid
updated_at DateTime @updatedAt
updated_by String? @db.Uuid
@@unique([provider, resource_type], map: "integration_sync_states_provider_resource_ux")
@@index([provider, status], map: "idx_integration_sync_states_provider_status")
@@map("integration_sync_states")
}
model TravelOrder {
id String @id @default(uuid()) @db.Uuid
source String @default("manual") @db.VarChar(32)