feat(P20T1-1,P20T1-2,P20T1-3): 差旅模型、申请/订单接口与工作流分支

这个提交包含在:
2026-03-10 19:58:46 +08:00
父节点 427ae2db53
当前提交 7b78945112
共修改 19 个文件,包含 2266 行新增和 59 行删除
@@ -0,0 +1,120 @@
-- AlterEnum
ALTER TYPE "DocumentCategoryEntityType" ADD VALUE IF NOT EXISTS 'travel_request';
-- CreateEnum
CREATE TYPE "TravelRequestStatus" AS ENUM ('draft', 'reviewing', 'approved', 'rejected');
-- CreateEnum
CREATE TYPE "TravelTripType" AS ENUM ('domestic', 'international');
-- CreateEnum
CREATE TYPE "TravelSegmentRole" AS ENUM ('outbound', 'return', 'connection');
-- CreateEnum
CREATE TYPE "TravelTransportType" AS ENUM ('flight', 'train', 'car', 'bus', 'other');
-- AlterTable
ALTER TABLE "travel_orders" ADD COLUMN "travel_request_id" UUID;
-- AlterTable
ALTER TABLE "workflow_instances" ADD COLUMN "travel_request_id" UUID;
-- CreateTable
CREATE TABLE "travel_requests" (
"id" UUID NOT NULL,
"request_no" TEXT,
"applicant_employee_id" UUID NOT NULL,
"submitter_id" UUID,
"department_id" UUID NOT NULL,
"legal_entity_id" UUID NOT NULL,
"cost_center_id" UUID NOT NULL,
"budget_pool_id" UUID,
"purpose" TEXT NOT NULL,
"trip_type" "TravelTripType" NOT NULL,
"start_date" DATE NOT NULL,
"end_date" DATE NOT NULL,
"estimated_amount" DECIMAL(14,2) NOT NULL,
"status" "TravelRequestStatus" NOT NULL DEFAULT 'draft',
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"created_by" UUID,
"updated_at" TIMESTAMP(3) NOT NULL,
"updated_by" UUID,
CONSTRAINT "travel_requests_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "travel_request_segments" (
"id" UUID NOT NULL,
"travel_request_id" UUID NOT NULL,
"sort_order" INTEGER NOT NULL,
"segment_role" "TravelSegmentRole" NOT NULL,
"transport_type" "TravelTransportType" NOT NULL,
"from_city" TEXT NOT NULL,
"to_city" TEXT NOT NULL,
"depart_at" TIMESTAMP(3) NOT NULL,
"arrive_at" TIMESTAMP(3) NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"created_by" UUID,
"updated_at" TIMESTAMP(3) NOT NULL,
"updated_by" UUID,
CONSTRAINT "travel_request_segments_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "travel_requests_request_no_key" ON "travel_requests"("request_no");
-- CreateIndex
CREATE INDEX "idx_travel_requests_applicant_start" ON "travel_requests"("applicant_employee_id", "start_date");
-- CreateIndex
CREATE INDEX "idx_travel_requests_submitter" ON "travel_requests"("submitter_id");
-- CreateIndex
CREATE INDEX "idx_travel_requests_department_status" ON "travel_requests"("department_id", "status");
-- CreateIndex
CREATE INDEX "idx_travel_requests_legal_cost_center" ON "travel_requests"("legal_entity_id", "cost_center_id");
-- CreateIndex
CREATE INDEX "idx_travel_requests_budget_pool" ON "travel_requests"("budget_pool_id");
-- CreateIndex
CREATE INDEX "idx_travel_requests_status" ON "travel_requests"("status");
-- CreateIndex
CREATE INDEX "idx_travel_request_segments_request_sort" ON "travel_request_segments"("travel_request_id", "sort_order");
-- CreateIndex
CREATE INDEX "travel_orders_travel_request_id_idx" ON "travel_orders"("travel_request_id");
-- CreateIndex
CREATE INDEX "workflow_instances_travel_request_id_idx" ON "workflow_instances"("travel_request_id");
-- AddForeignKey
ALTER TABLE "travel_requests" ADD CONSTRAINT "travel_requests_applicant_employee_id_fkey" FOREIGN KEY ("applicant_employee_id") REFERENCES "employees"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "travel_requests" ADD CONSTRAINT "travel_requests_submitter_id_fkey" FOREIGN KEY ("submitter_id") REFERENCES "employees"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "travel_requests" ADD CONSTRAINT "travel_requests_department_id_fkey" FOREIGN KEY ("department_id") REFERENCES "departments"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "travel_requests" ADD CONSTRAINT "travel_requests_legal_entity_id_fkey" FOREIGN KEY ("legal_entity_id") REFERENCES "legal_entities"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "travel_requests" ADD CONSTRAINT "travel_requests_cost_center_id_fkey" FOREIGN KEY ("cost_center_id") REFERENCES "cost_centers"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "travel_requests" ADD CONSTRAINT "travel_requests_budget_pool_id_fkey" FOREIGN KEY ("budget_pool_id") REFERENCES "budget_pools"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "travel_request_segments" ADD CONSTRAINT "travel_request_segments_travel_request_id_fkey" FOREIGN KEY ("travel_request_id") REFERENCES "travel_requests"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "travel_orders" ADD CONSTRAINT "travel_orders_travel_request_id_fkey" FOREIGN KEY ("travel_request_id") REFERENCES "travel_requests"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "workflow_instances" ADD CONSTRAINT "workflow_instances_travel_request_id_fkey" FOREIGN KEY ("travel_request_id") REFERENCES "travel_requests"("id") ON DELETE CASCADE ON UPDATE CASCADE;