Files
urbanLifeline/urbanLifelineServ/.bin/database/postgres/sql/createTableBidding.sql
2025-12-02 13:36:09 +08:00

265 lines
18 KiB
SQL
Raw 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.

-- =============================
-- 招投标智能体业务模块
-- 支持:招标文件管理、投标文件生成、评分分析、流程跟踪
-- =============================
CREATE SCHEMA IF NOT EXISTS bidding;
-- 招标项目表
DROP TABLE IF EXISTS bidding.tb_bidding_project CASCADE;
CREATE TABLE bidding.tb_bidding_project (
optsn VARCHAR(50) NOT NULL, -- 流水号
project_id VARCHAR(50) NOT NULL, -- 项目ID
project_no VARCHAR(100) NOT NULL, -- 项目编号
project_name VARCHAR(500) NOT NULL, -- 项目名称
project_type VARCHAR(50) NOT NULL, -- 项目类型public-公开招标/invitation-邀请招标/competitive_negotiation-竞争性谈判
industry VARCHAR(100), -- 所属行业
source_platform VARCHAR(100), -- 来源平台(如:政府采购网、企业官网等)
source_url VARCHAR(500), -- 来源URL
publish_date TIMESTAMPTZ, -- 发布日期
deadline TIMESTAMPTZ, -- 投标截止日期
opening_date TIMESTAMPTZ, -- 开标日期
budget_amount DECIMAL(18,2), -- 预算金额
currency VARCHAR(10) DEFAULT 'CNY', -- 货币单位
project_status VARCHAR(30) NOT NULL DEFAULT 'collecting', -- 项目状态collecting-收集中/analyzing-分析中/preparing-准备投标/submitted-已提交/opened-已开标/won-中标/lost-未中标/abandoned-放弃
winning_status VARCHAR(30), -- 中标状态pending-待定/won-中标/lost-未中标
winning_amount DECIMAL(18,2), -- 中标金额
client_name VARCHAR(255), -- 客户名称
client_contact VARCHAR(100), -- 客户联系方式
contact_person VARCHAR(100), -- 联系人
project_location VARCHAR(500), -- 项目地点
description TEXT, -- 项目描述
keywords TEXT[], -- 关键词数组
metadata JSONB DEFAULT NULL, -- 项目元数据
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
responsible_user VARCHAR(50), -- 负责人
team_members VARCHAR(50)[], -- 团队成员数组
creator VARCHAR(50) DEFAULT NULL, -- 创建者
updater VARCHAR(50) DEFAULT NULL, -- 更新者
create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
update_time TIMESTAMPTZ DEFAULT NULL, -- 更新时间
delete_time TIMESTAMPTZ DEFAULT NULL, -- 删除时间
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (project_id),
UNIQUE (optsn),
UNIQUE (project_no)
);
CREATE INDEX idx_project_status ON bidding.tb_bidding_project(project_status) WHERE deleted = false;
CREATE INDEX idx_project_deadline ON bidding.tb_bidding_project(deadline) WHERE deleted = false;
CREATE INDEX idx_project_dept ON bidding.tb_bidding_project(dept_path) WHERE deleted = false;
CREATE INDEX idx_project_responsible ON bidding.tb_bidding_project(responsible_user) WHERE deleted = false;
COMMENT ON TABLE bidding.tb_bidding_project IS '招标项目表';
COMMENT ON COLUMN bidding.tb_bidding_project.project_status IS '项目状态collecting/analyzing/preparing/submitted/opened/won/lost/abandoned';
-- 招标文件表
DROP TABLE IF EXISTS bidding.tb_bidding_document CASCADE;
CREATE TABLE bidding.tb_bidding_document (
optsn VARCHAR(50) NOT NULL, -- 流水号
doc_id VARCHAR(50) NOT NULL, -- 文档ID
project_id VARCHAR(50) NOT NULL, -- 所属项目ID
doc_type VARCHAR(50) NOT NULL, -- 文档类型tender-招标文件/technical-技术标/commercial-商务标/clarification-澄清文件/other-其他
doc_name VARCHAR(500) NOT NULL, -- 文档名称
file_id VARCHAR(50), -- 关联文件表ID
file_path VARCHAR(500), -- 文件路径
file_size BIGINT, -- 文件大小
mime_type VARCHAR(100), -- MIME类型
version VARCHAR(20) DEFAULT '1.0', -- 版本号
language VARCHAR(20) DEFAULT 'zh-CN', -- 语言
page_count INTEGER, -- 页数
parse_status VARCHAR(30) DEFAULT 'pending', -- 解析状态pending-待解析/parsing-解析中/completed-已完成/failed-失败
parse_result JSONB, -- 解析结果JSON格式提取的要素、表格、图纸等
extraction_data JSONB, -- 提取的结构化数据
ai_analysis TEXT, -- AI分析结果
upload_date TIMESTAMPTZ DEFAULT now(), -- 上传日期
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
creator VARCHAR(50) DEFAULT NULL, -- 创建者
updater VARCHAR(50) DEFAULT NULL, -- 更新者
create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
update_time TIMESTAMPTZ DEFAULT NULL, -- 更新时间
delete_time TIMESTAMPTZ DEFAULT NULL, -- 删除时间
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (doc_id),
UNIQUE (optsn),
FOREIGN KEY (project_id) REFERENCES bidding.tb_bidding_project(project_id)
);
CREATE INDEX idx_doc_project ON bidding.tb_bidding_document(project_id) WHERE deleted = false;
CREATE INDEX idx_doc_type ON bidding.tb_bidding_document(doc_type) WHERE deleted = false;
COMMENT ON TABLE bidding.tb_bidding_document IS '招标文件表';
COMMENT ON COLUMN bidding.tb_bidding_document.parse_status IS '解析状态pending/parsing/completed/failed';
-- 招标要素提取表
DROP TABLE IF EXISTS bidding.tb_bidding_requirement CASCADE;
CREATE TABLE bidding.tb_bidding_requirement (
optsn VARCHAR(50) NOT NULL, -- 流水号
req_id VARCHAR(50) NOT NULL, -- 要素ID
project_id VARCHAR(50) NOT NULL, -- 所属项目ID
doc_id VARCHAR(50), -- 来源文档ID
req_category VARCHAR(50) NOT NULL, -- 要素类别commercial-商务要素/technical-技术参数/veto-否决项/qualification-资质要求/delivery-交付要求/payment-付款条件/scoring-评分标准
req_name VARCHAR(255) NOT NULL, -- 要素名称
req_content TEXT NOT NULL, -- 要素内容
req_value VARCHAR(500), -- 要素值
is_mandatory BOOLEAN DEFAULT false, -- 是否必填
is_veto BOOLEAN DEFAULT false, -- 是否为否决项
priority INTEGER DEFAULT 0, -- 优先级
extraction_method VARCHAR(30) DEFAULT 'ai', -- 提取方式ai-AI提取/manual-人工录入
confidence_score DECIMAL(5,4), -- 置信度分数0-1
source_location JSONB, -- 来源位置(页码、段落等)
compliance_status VARCHAR(30), -- 合规状态compliant-符合/non_compliant-不符合/pending-待确认
response_content TEXT, -- 响应内容(我方的应答)
notes TEXT, -- 备注
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
creator VARCHAR(50) DEFAULT NULL, -- 创建者
updater VARCHAR(50) DEFAULT NULL, -- 更新者
create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
update_time TIMESTAMPTZ DEFAULT NULL, -- 更新时间
delete_time TIMESTAMPTZ DEFAULT NULL, -- 删除时间
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (req_id),
UNIQUE (optsn),
FOREIGN KEY (project_id) REFERENCES bidding.tb_bidding_project(project_id)
);
CREATE INDEX idx_req_project ON bidding.tb_bidding_requirement(project_id) WHERE deleted = false;
CREATE INDEX idx_req_category ON bidding.tb_bidding_requirement(req_category) WHERE deleted = false;
CREATE INDEX idx_req_veto ON bidding.tb_bidding_requirement(is_veto) WHERE deleted = false AND is_veto = true;
COMMENT ON TABLE bidding.tb_bidding_requirement IS '招标要素提取表';
COMMENT ON COLUMN bidding.tb_bidding_requirement.req_category IS '要素类别commercial/technical/veto/qualification/delivery/payment/scoring';
-- 投标文件生成表
DROP TABLE IF EXISTS bidding.tb_bid_response CASCADE;
CREATE TABLE bidding.tb_bid_response (
optsn VARCHAR(50) NOT NULL, -- 流水号
response_id VARCHAR(50) NOT NULL, -- 响应文件ID
project_id VARCHAR(50) NOT NULL, -- 所属项目ID
response_type VARCHAR(50) NOT NULL, -- 响应类型technical-技术标/commercial-商务标/comprehensive-综合标
doc_name VARCHAR(500) NOT NULL, -- 文档名称
outline TEXT, -- 文档大纲JSON格式
content TEXT, -- 文档内容
generation_method VARCHAR(30) DEFAULT 'ai', -- 生成方式ai-AI生成/template-模板生成/manual-人工编写
template_id VARCHAR(50), -- 使用的模板ID
ai_model VARCHAR(100), -- 使用的AI模型
generation_status VARCHAR(30) DEFAULT 'draft', -- 生成状态draft-草稿/reviewing-审核中/approved-已批准/rejected-已拒绝/submitted-已提交
file_id VARCHAR(50), -- 生成的文件ID
file_path VARCHAR(500), -- 文件路径
version VARCHAR(20) DEFAULT '1.0', -- 版本号
parent_version_id VARCHAR(50), -- 父版本ID
review_comments TEXT, -- 审核意见
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
creator VARCHAR(50) DEFAULT NULL, -- 创建者
updater VARCHAR(50) DEFAULT NULL, -- 更新者
create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
update_time TIMESTAMPTZ DEFAULT NULL, -- 更新时间
delete_time TIMESTAMPTZ DEFAULT NULL, -- 删除时间
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (response_id),
UNIQUE (optsn),
FOREIGN KEY (project_id) REFERENCES bidding.tb_bidding_project(project_id)
);
CREATE INDEX idx_response_project ON bidding.tb_bid_response(project_id) WHERE deleted = false;
CREATE INDEX idx_response_status ON bidding.tb_bid_response(generation_status) WHERE deleted = false;
COMMENT ON TABLE bidding.tb_bid_response IS '投标文件生成表';
COMMENT ON COLUMN bidding.tb_bid_response.generation_status IS '生成状态draft/reviewing/approved/rejected/submitted';
-- 评分规则表
DROP TABLE IF EXISTS bidding.tb_bidding_scoring_rule CASCADE;
CREATE TABLE bidding.tb_bidding_scoring_rule (
optsn VARCHAR(50) NOT NULL, -- 流水号
rule_id VARCHAR(50) NOT NULL, -- 规则ID
project_id VARCHAR(50) NOT NULL, -- 所属项目ID
rule_category VARCHAR(50) NOT NULL, -- 规则类别technical-技术分/commercial-商务分/price-价格分/credit-信誉分
rule_name VARCHAR(255) NOT NULL, -- 规则名称
rule_description TEXT, -- 规则描述
max_score DECIMAL(10,2) NOT NULL, -- 最高分值
weight DECIMAL(5,4), -- 权重0-1
scoring_method VARCHAR(50), -- 评分方法fixed-固定分值/range-区间评分/formula-公式计算
calculation_formula TEXT, -- 计算公式
evaluation_criteria TEXT, -- 评分标准
our_score DECIMAL(10,2), -- 我方得分(预估)
score_analysis TEXT, -- 得分分析
optimization_advice TEXT, -- 优化建议
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
creator VARCHAR(50) DEFAULT NULL, -- 创建者
updater VARCHAR(50) DEFAULT NULL, -- 更新者
create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
update_time TIMESTAMPTZ DEFAULT NULL, -- 更新时间
delete_time TIMESTAMPTZ DEFAULT NULL, -- 删除时间
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (rule_id),
UNIQUE (optsn),
FOREIGN KEY (project_id) REFERENCES bidding.tb_bidding_project(project_id)
);
CREATE INDEX idx_rule_project ON bidding.tb_bidding_scoring_rule(project_id) WHERE deleted = false;
COMMENT ON TABLE bidding.tb_bidding_scoring_rule IS '评分规则表';
-- 项目流程节点表
DROP TABLE IF EXISTS bidding.tb_bidding_process CASCADE;
CREATE TABLE bidding.tb_bidding_process (
optsn VARCHAR(50) NOT NULL, -- 流水号
process_id VARCHAR(50) NOT NULL, -- 流程节点ID
project_id VARCHAR(50) NOT NULL, -- 所属项目ID
node_name VARCHAR(255) NOT NULL, -- 节点名称
node_type VARCHAR(50) NOT NULL, -- 节点类型collection-文件收集/analysis-需求分析/preparation-文件准备/review-内部审核/submission-投标提交/opening-开标/result-结果通知
node_order INTEGER NOT NULL, -- 节点顺序
node_status VARCHAR(30) DEFAULT 'pending', -- 节点状态pending-待处理/in_progress-进行中/completed-已完成/skipped-已跳过
planned_start_time TIMESTAMPTZ, -- 计划开始时间
planned_end_time TIMESTAMPTZ, -- 计划结束时间
actual_start_time TIMESTAMPTZ, -- 实际开始时间
actual_end_time TIMESTAMPTZ, -- 实际结束时间
responsible_user VARCHAR(50), -- 负责人
participants VARCHAR(50)[], -- 参与人员数组
notes TEXT, -- 节点备注
attachments VARCHAR(50)[], -- 附件ID数组
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
creator VARCHAR(50) DEFAULT NULL, -- 创建者
updater VARCHAR(50) DEFAULT NULL, -- 更新者
create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
update_time TIMESTAMPTZ DEFAULT NULL, -- 更新时间
delete_time TIMESTAMPTZ DEFAULT NULL, -- 删除时间
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (process_id),
UNIQUE (optsn),
FOREIGN KEY (project_id) REFERENCES bidding.tb_bidding_project(project_id)
);
CREATE INDEX idx_process_project ON bidding.tb_bidding_process(project_id, node_order) WHERE deleted = false;
COMMENT ON TABLE bidding.tb_bidding_process IS '项目流程节点表';
COMMENT ON COLUMN bidding.tb_bidding_process.node_type IS '节点类型collection/analysis/preparation/review/submission/opening/result';
-- 投标模板表
DROP TABLE IF EXISTS bidding.tb_bid_template CASCADE;
CREATE TABLE bidding.tb_bid_template (
optsn VARCHAR(50) NOT NULL, -- 流水号
template_id VARCHAR(50) NOT NULL, -- 模板ID
template_name VARCHAR(255) NOT NULL, -- 模板名称
template_type VARCHAR(50) NOT NULL, -- 模板类型technical-技术标/commercial-商务标/comprehensive-综合标
industry VARCHAR(100), -- 适用行业
template_content TEXT, -- 模板内容
outline_structure JSONB, -- 大纲结构JSON格式
file_id VARCHAR(50), -- 模板文件ID
usage_count INTEGER DEFAULT 0, -- 使用次数
is_default BOOLEAN DEFAULT false, -- 是否默认模板
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
status VARCHAR(20) DEFAULT 'active', -- 状态active-激活/inactive-停用
creator VARCHAR(50) DEFAULT NULL, -- 创建者
updater VARCHAR(50) DEFAULT NULL, -- 更新者
create_time TIMESTAMPTZ NOT NULL DEFAULT now(), -- 创建时间
update_time TIMESTAMPTZ DEFAULT NULL, -- 更新时间
delete_time TIMESTAMPTZ DEFAULT NULL, -- 删除时间
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (template_id),
UNIQUE (optsn)
);
CREATE INDEX idx_template_type ON bidding.tb_bid_template(template_type) WHERE deleted = false;
COMMENT ON TABLE bidding.tb_bid_template IS '投标模板表';