Files
2025-12-05 00:09:32 +08:00

83 lines
3.9 KiB
PL/PgSQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 合同起草功能数据库迁移脚本
-- 创建时间: 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 '占位符配置SchemaJSON格式)';
-- 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;