feat(P18B-1,P18B-2): 新增资产流转模型与受控接口

这个提交包含在:
2026-03-07 23:20:34 +08:00
父节点 1b2527eee0
当前提交 946a357f8b
共修改 8 个文件,包含 1276 行新增和 7 行删除
@@ -0,0 +1,113 @@
-- CreateEnum
CREATE TYPE "InventoryCheckScopeType" AS ENUM ('all', 'legal_entity', 'cost_center', 'location');
-- CreateEnum
CREATE TYPE "InventoryCheckStatus" AS ENUM ('draft', 'counting', 'completed');
-- CreateEnum
CREATE TYPE "InventoryCheckResult" AS ENUM ('matched', 'missing', 'extra', 'damaged');
-- CreateTable
CREATE TABLE "asset_assignments" (
"id" UUID NOT NULL,
"asset_id" UUID NOT NULL,
"employee_id" UUID NOT NULL,
"assigned_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"returned_at" TIMESTAMP(3),
"note" TEXT,
CONSTRAINT "asset_assignments_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "asset_transfers" (
"id" UUID NOT NULL,
"asset_id" UUID NOT NULL,
"from_employee_id" UUID,
"to_employee_id" UUID,
"from_location" TEXT,
"to_location" TEXT,
"transferred_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"note" TEXT,
CONSTRAINT "asset_transfers_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "inventory_checks" (
"id" UUID NOT NULL,
"check_no" TEXT NOT NULL,
"scope_type" "InventoryCheckScopeType" NOT NULL,
"scope_ref_id" VARCHAR(200),
"status" "InventoryCheckStatus" NOT NULL DEFAULT 'draft',
"started_at" TIMESTAMP(3),
"completed_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 "inventory_checks_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "inventory_check_items" (
"id" UUID NOT NULL,
"inventory_check_id" UUID NOT NULL,
"asset_id" UUID NOT NULL,
"result" "InventoryCheckResult" NOT NULL,
"note" TEXT,
CONSTRAINT "inventory_check_items_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE INDEX "idx_asset_assignments_asset_open" ON "asset_assignments"("asset_id", "returned_at");
-- CreateIndex
CREATE INDEX "idx_asset_assignments_employee_open" ON "asset_assignments"("employee_id", "returned_at");
-- CreateIndex
CREATE INDEX "idx_asset_transfers_asset_time" ON "asset_transfers"("asset_id", "transferred_at");
-- CreateIndex
CREATE INDEX "idx_asset_transfers_from_employee" ON "asset_transfers"("from_employee_id");
-- CreateIndex
CREATE INDEX "idx_asset_transfers_to_employee" ON "asset_transfers"("to_employee_id");
-- CreateIndex
CREATE UNIQUE INDEX "inventory_checks_check_no_key" ON "inventory_checks"("check_no");
-- CreateIndex
CREATE INDEX "idx_inventory_checks_status_created" ON "inventory_checks"("status", "created_at");
-- CreateIndex
CREATE INDEX "idx_inventory_checks_scope" ON "inventory_checks"("scope_type", "scope_ref_id");
-- CreateIndex
CREATE INDEX "idx_inventory_check_items_asset" ON "inventory_check_items"("asset_id");
-- CreateIndex
CREATE UNIQUE INDEX "inventory_check_asset_ux" ON "inventory_check_items"("inventory_check_id", "asset_id");
-- AddForeignKey
ALTER TABLE "asset_assignments" ADD CONSTRAINT "asset_assignments_asset_id_fkey" FOREIGN KEY ("asset_id") REFERENCES "asset_cards"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "asset_assignments" ADD CONSTRAINT "asset_assignments_employee_id_fkey" FOREIGN KEY ("employee_id") REFERENCES "employees"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "asset_transfers" ADD CONSTRAINT "asset_transfers_asset_id_fkey" FOREIGN KEY ("asset_id") REFERENCES "asset_cards"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "asset_transfers" ADD CONSTRAINT "asset_transfers_from_employee_id_fkey" FOREIGN KEY ("from_employee_id") REFERENCES "employees"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "asset_transfers" ADD CONSTRAINT "asset_transfers_to_employee_id_fkey" FOREIGN KEY ("to_employee_id") REFERENCES "employees"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "inventory_check_items" ADD CONSTRAINT "inventory_check_items_inventory_check_id_fkey" FOREIGN KEY ("inventory_check_id") REFERENCES "inventory_checks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "inventory_check_items" ADD CONSTRAINT "inventory_check_items_asset_id_fkey" FOREIGN KEY ("asset_id") REFERENCES "asset_cards"("id") ON DELETE RESTRICT ON UPDATE CASCADE;