feat(P20T1-1,P20T1-2,P20T1-3): 差旅模型、申请/订单接口与工作流分支
这个提交包含在:
@@ -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;
|
||||
在新工单中引用
屏蔽一个用户