83 lines
3.9 KiB
PL/PgSQL
83 lines
3.9 KiB
PL/PgSQL
-- 合同起草功能数据库迁移脚本
|
||
-- 创建时间: 2025-01-04
|
||
|
||
-- 1. 创建起草合同表
|
||
CREATE TABLE IF NOT EXISTS drafted_contracts (
|
||
id SERIAL PRIMARY KEY,
|
||
template_id INTEGER NOT NULL,
|
||
file_path TEXT NOT NULL,
|
||
title TEXT NOT NULL,
|
||
placeholder_values JSONB DEFAULT '{}'::jsonb,
|
||
status TEXT DEFAULT 'draft' CHECK (status IN ('draft', 'completed', 'archived')),
|
||
created_by INTEGER,
|
||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
||
|
||
CONSTRAINT fk_template
|
||
FOREIGN KEY (template_id)
|
||
REFERENCES contract_templates(id)
|
||
ON DELETE CASCADE,
|
||
|
||
CONSTRAINT fk_created_by
|
||
FOREIGN KEY (created_by)
|
||
REFERENCES auth.users(id)
|
||
ON DELETE SET NULL
|
||
);
|
||
|
||
-- 2. 创建索引优化查询性能
|
||
CREATE INDEX idx_drafted_contracts_template_id ON drafted_contracts(template_id);
|
||
CREATE INDEX idx_drafted_contracts_created_by ON drafted_contracts(created_by);
|
||
CREATE INDEX idx_drafted_contracts_status ON drafted_contracts(status);
|
||
CREATE INDEX idx_drafted_contracts_created_at ON drafted_contracts(created_at DESC);
|
||
|
||
-- 3. 创建更新时间触发器
|
||
CREATE OR REPLACE FUNCTION update_drafted_contracts_updated_at()
|
||
RETURNS TRIGGER AS $$
|
||
BEGIN
|
||
NEW.updated_at = NOW();
|
||
RETURN NEW;
|
||
END;
|
||
$$ LANGUAGE plpgsql;
|
||
|
||
CREATE TRIGGER trigger_update_drafted_contracts_updated_at
|
||
BEFORE UPDATE ON drafted_contracts
|
||
FOR EACH ROW
|
||
EXECUTE FUNCTION update_drafted_contracts_updated_at();
|
||
|
||
-- 4. 添加注释
|
||
COMMENT ON TABLE drafted_contracts IS '起草的合同记录';
|
||
COMMENT ON COLUMN drafted_contracts.id IS '主键ID';
|
||
COMMENT ON COLUMN drafted_contracts.template_id IS '关联的合同模板ID';
|
||
COMMENT ON COLUMN drafted_contracts.file_path IS '起草后的文件路径(MinIO)';
|
||
COMMENT ON COLUMN drafted_contracts.title IS '合同标题';
|
||
COMMENT ON COLUMN drafted_contracts.placeholder_values IS '占位符填充值(JSON格式)';
|
||
COMMENT ON COLUMN drafted_contracts.status IS '状态:draft-草稿,completed-已完成,archived-已归档';
|
||
COMMENT ON COLUMN drafted_contracts.created_by IS '创建人用户ID';
|
||
COMMENT ON COLUMN drafted_contracts.created_at IS '创建时间';
|
||
COMMENT ON COLUMN drafted_contracts.updated_at IS '更新时间';
|
||
|
||
-- 5. 为 contract_templates 表添加占位符配置字段
|
||
ALTER TABLE contract_templates
|
||
ADD COLUMN IF NOT EXISTS placeholder_schema JSONB DEFAULT NULL;
|
||
|
||
COMMENT ON COLUMN contract_templates.placeholder_schema IS '占位符配置Schema(JSON格式)';
|
||
|
||
-- 6. 示例:为测试模板添加占位符配置(可选,根据实际情况调整)
|
||
-- UPDATE contract_templates
|
||
-- SET placeholder_schema = '{
|
||
-- "fields": [
|
||
-- {"key": "甲方名称", "label": "甲方名称", "type": "text", "required": true, "group": "甲方信息"},
|
||
-- {"key": "甲方地址", "label": "甲方地址", "type": "text", "required": true, "group": "甲方信息"},
|
||
-- {"key": "甲方法定代表人", "label": "法定代表人", "type": "text", "required": true, "group": "甲方信息"},
|
||
-- {"key": "甲方联系电话", "label": "联系电话", "type": "tel", "required": true, "group": "甲方信息"},
|
||
-- {"key": "乙方名称", "label": "乙方名称", "type": "text", "required": true, "group": "乙方信息"},
|
||
-- {"key": "乙方地址", "label": "乙方地址", "type": "text", "required": true, "group": "乙方信息"},
|
||
-- {"key": "乙方法定代表人", "label": "法定代表人", "type": "text", "required": true, "group": "乙方信息"},
|
||
-- {"key": "乙方联系电话", "label": "联系电话", "type": "tel", "required": true, "group": "乙方信息"},
|
||
-- {"key": "合同金额", "label": "合同金额(元)", "type": "number", "required": true, "group": "合同条款"},
|
||
-- {"key": "签订日期", "label": "签订日期", "type": "date", "required": true, "group": "合同条款"},
|
||
-- {"key": "合同编号", "label": "合同编号", "type": "text", "required": false, "group": "基本信息"}
|
||
-- ]
|
||
-- }'::jsonb
|
||
-- WHERE id = 1;
|