Skip to content

工程基础管理 · 数据库设计文档 ​

文档版本:1.10 | 最近核对日期:2026-11-04

字段中文含义参考 2026-11-02 开发库、生产库只读回读的字段注释及原有业务资料;历史物理结构、核验日期和设计差异仍以各表原记录为准。

企业身份与业务角色分离(2026-10-13):已有业主企业也可承担项目设计、监理或施工角色,直接复用同一 SYS_DEPT.DEPT_ID,禁止为了让选项出现而另建同名参建企业。项目三类参建字段允许 deptType=1/2 的 company/branch/joint_venture 企业节点,拒绝 group 容器和 dept 部门。候选接口与保存校验使用同一范围,名称兼容解析包含两种体系的企业;同名不能唯一匹配时必须重新按 ID 选择。该范围适用于项目参建主体及全局联合体成员/牵头企业,不扩大其他模块的共享组织校验。

项目参建主体混选现行契约(2026-10-13 修正) ​

设计、监理、施工字段直接选择已建档企业或全局联合体,允许同一角色同时选择一个联合体及两家独立企业。沿用 ParticipantConsortiumPicker.vue 的企业/联合体选择布局;选择身份为 type + id,企业为 UNIT,联合体为 CONSORTIUM,名称仅作显示。联合体不展开成成员企业,不根据名称逗号推断组成,不以同名企业替代联合体。建设单位仍为业主组织多选,所属公司仍单选。

独立“关联联合体”按钮、弹窗及项目关系 API 下线。全局联合体档案与成员维护继续保留;旧项目联合体表只保留历史记录,不清空、不删除,不再作为项目参建主体现行来源。企业兼任业主及施工等角色时复用同一组织 ID,候选企业允许 deptType=1/2 的 company/branch/joint_venture,排除集团容器、部门及项目部。

三类权威集合为 designParticipants/superviseParticipants/constructParticipants,每项 {type,id,name};空数组明确解除该角色全部引用。后端按类型验证存在性、启用状态及主体类型,从档案生成名称快照,在项目保存事务中整体替换对应角色的有序引用。前端保留 Long ID 原始值,不转 Number;相同数字 ID 的企业和联合体是不同主体。

旧三类 *UnitIds 仅保留独立选择的 UNIT 项,不含联合体成员;旧名称字段是混合主体名称快照;旧单 *UnitId 仅在集合恰有一个 UNIT 且无联合体时保留,其余置空。建设 buildUnitIds 继续使用业主 CSV 集合。被现行参建集合引用的企业/联合体不得删除;联合体被引用后组成变更受保护,名称调整不得更换主体身份。

验收例:选择联合体 C + 企业 A/B 后保存,重开仍回显三项且 C 未变成成员或企业;删除 A 后仅保留 C/B;全部清空后不残留旧单 ID 或名称;企业与联合体同 ID 时能分别回显;非法 type、失效主体或伪造名称不得绕过后端校验;引用中的主体删除和联合体组成变更应被阻止。

联合体成员企业角色复用与本轮迁移边界 ​

全局联合体正常新增、编辑的成员与牵头单位候选,以及后端成员校验,统一允许业主及参建两体系中启用、未删除的企业:deptType=1/2 且 orgType=company/branch/joint_venture;排除集团容器、部门和项目部。不能因企业当前为业主而重复建档为参建单位。联合体仍须至少两个不同成员,牵头单位须属于成员集合;被项目引用后组成冻结及删除引用保护保持有效。

验收例:微电园施工联合体选择“重庆建工第九建设有限公司”与已有业主“重庆对外建设(集团)有限公司”,应复用两企业原 ID,可正常建档和回显;仅一个成员、牵头不在成员中、停用或部门节点仍拒绝保存。

本轮仅重做设计、监理、施工主体分组,保留当前 111 处建设单位信息,不按老源建设字段数量清空。老平台附件为 100 + 26 共 126 条,三类非空角色字段分别为设计 33、监理 39、施工 39,合计 111 个角色字段。迁移按项目身份和修剪首尾空白的 CODE 核对(其中两个源 CODE 带 CRLF),不按项目名称合并,四组同名项目保持各自独立身份。数量与具体落库结果须由本轮数据库回读验证。

设计背景:系统处于未正式上线阶段。经实测核查,下游所有业务表(工程变更、手续、质安、渣土、运营、投资等)当前全部为 0 行,无在途业务单据回填负担。

重要建表与迁移原则:

  1. 既有存量表就地 ALTER,严禁 DROP 重建与反向收窄:BIZ_SITE_MASTER(存量 931 条真实工点)与 BIZ_PROJECT 采用 ALTER TABLE ... ADD COLUMN 扩充/补齐字段,绝不整表 DROP;既有长文本字段(如 SITUATION TEXT)完全保留原库物理精度,严禁收窄;确保 931 条基础工点主数据零丢失、零截断;
  2. 新表纯净创建:BIZ_LINE、BIZ_BID_SECTION、BIZ_BID_MAJOR、BIZ_BID_SITE_SCOPE、BIZ_UNIT_PROJECT、BIZ_SUB_PROJECT、BIZ_USER_DATA_SCOPE、BIZ_MAJOR_DICT 采用全新 CREATE TABLE;
  3. 参建单位与业主单位规范关联(已建单位精准映射,缺失参建单位自动建档):彻底解决历史业务单位纯文本游离的问题。项目现采用完整单位 ID 集合(引用 SYS_DEPT.DEPT_ID)+ 官方名称快照;项目保存只校验已建档选项,禁止自动建档。其他实体与历史迁移按各自章节维护。经核实,两家核心业主二级公司在 SYS_DEPT 中均已创建完备(原重庆市铁路(集团)有限公司更名为重庆交通建设管理有限公司,DEPT_ID=101;原重庆市轨道交通(集团)有限公司/重庆市轨道集团有限公司更名为重庆轨道交通运营有限公司,DEPT_ID=2083453529837531162),存量迁移时直接通过映射绑定标准外键,无需重复新建;缺失的 23 家纯乙方参建单位(施工、监理、设计)自动建档并挂接至“参建单位”根节点(2199000000000100013);其它未在组织架构中建档的特殊线路运营公司保留原文字描述,ID 预留为空;
  4. 线路分期与延线独立建模(契合工程建设期次管理):全面支持工程分期与延线作为独立业务管理对象(如 15号线一期 L15-01、15号线二期 L15-02、15号线西延 L15-XY、15号线东延 L15-DY、4号线西延 L04-XY、5号线北延 L05-BY、6号线东延 L06-DY、18号线北延 L18-BY、江跳线二期 L-JT-02 等全网共 31 条独立运营/在建/规划分期),LINE_CODE 统一采用 L{线号}-{期数/延线后缀},独立维护全称、简称、建设状态(规划/在建/运营)、起讫站、总里程与沿线工点划归;
  5. 存量 861 个旧单位工程节点分类处理原则:
    • 实测 861 个旧 SITE 节点中:427 个挂在 BID 标段下,434 个挂在 LINE 线下;旧节点中 SITE_MASTER_ID 100% 存在且有效(861/861);
    • 427 个标段下节点:通过可靠外键 n.SITE_MASTER_ID = s.SITE_MASTER_ID 精确关联,标段所含各专业(主+协同)均在工点下笛卡尔积展开生成单位工程实体,主键由独立序列 SEQ_BIZ_UNIT_PROJECT 生成,杜绝 ID 碰撞并继承工程状态;
    • 434 个线下节点:属于线路规划层直接站位节点(尚未划分标段),在 PBS 空间资产维度已由 BIZ_SITE_MASTER 完整收录,不强行作为无标段孤儿写入单位工程,待后续创建标段时正向关联。
  6. DM8 CASE 函数索引方案:全面采用 CASE WHEN DEL_FLAG='0' THEN 字段 END 函数唯一索引(实测验证可行),彻底解决软删除防重问题;
  7. DM8 SQL 纯净兼容与防溢出约束:全面废除 PostgreSQL 专有的 CROSS JOIN LATERAL 语法,改用 DM8 标准 CTE 展开;主键严禁基于雪花 ID 进行乘法运算(防止超过 BIGINT 上限 9.22×10^18),统一改用独立序列 SEQ_BIZ_BID_MAJOR.NEXTVAL;单位工程编码采用 {线路}-{标段}-{工点}-{专业} 统一国标规范;
  8. 执行顺序严格前置保障:专业字典数据初始化前置于存量迁移之前执行,确保存量涵盖专业推导与单位工程生成时字典关联 100% 命中,绝不产生 0 行空数据。

1. 实体关系图(ER 图) ​


2. 表清单与总体用途 ​

序号表名中文名称所属维度建表模式用途说明
1BIZ_LINE线路主数据表PBS 空间核全新建表维护轨道交通物理线路空间主数据及分期(纯粹物理实体,与 CBS/OBS 彻底解耦)
2BIZ_SITE_MASTER物理工点主数据表PBS 空间核就地 ALTER维护全生命周期终身唯一的 931 条真实工点(保留全部既有物理字段,实测 24 列 = 19 个业务/状态列 + 5 个审计列,严禁 DROP)
3BIZ_PROJECT建设项目主数据表CBS 商务核就地 ALTER维护发改委批复立项项目(四类单位完整 CSV ID 集合 + 名称快照,所属公司单选,保留既有业务字段)
4BIZ_BID_SECTION标段主数据表CBS 商务核全新建表维护施工/监理标段(强关联总包单位与监理单位 ID,下沉存量标段)
5BIZ_BID_MAJOR标段涵盖专业关联表CBS 商务核全新建表支撑标段“单专业或多专业统包”配置(1个标段关联1至多个专业)
6BIZ_BID_SITE_SCOPE标段管辖工点关系表CBS-PBS 关联全新建表记录指定工点型标段所负责的车站与区间明细(存量 427 个标段节点关系推导归入)
7BIZ_UNIT_PROJECT单位工程表WBS 质量核全新建表标段 × 工点 × 专业 矩阵展开生成的法定验收单位工程实体(存量 427 个节点平滑归入)
8BIZ_SUB_PROJECT分部工程表WBS 质量核全新建表单位工程下的国标分部工程明细(地基基础、主体结构等)
9BIZ_USER_ENGINEERING_CONFIG用户工程授权配置根表权限体系全新建表用户工程授权根记录,带 revision 乐观锁版本
10BIZ_USER_ENGINEERING_LINE用户线路工程授权表权限体系全新建表线路授权记录(FULL_LINE 整线 / RESTRICTED 受限)
11BIZ_USER_ENGINEERING_PAIR用户标段工点授权明细表权限体系全新建表RESTRICTED 模式下的有效标段工点组合明细
12BIZ_MAJOR_DICT行业标准专业字典表基础字典全新建表维护轨道交通 29 项规范专业分类(支持大类-专业两级分级与综合大类)

3. 全量字段矩阵 ​

3.1 BIZ_LINE(线路主数据表 - 全新建表 + 分期粒度扩展) ​

序号字段名中文含义逻辑类型物理类型(DM8)长度/精度可空默认值约束/索引核心说明
1LINE_ID线路IDBIGINTBIGINT20否—PK是雪花算法大整数主键,实体类字段 lineId
2LINE_CODE线路编码VARCHARVARCHAR(64)64否—UK(函数)是如 L15-1、L15-2、LINE-04
3LINE_NAME线路全称VARCHARVARCHAR(200)200否——是如 重庆轨道交通15号线一期、重庆轨道交通15号线二期
4SHORT_NAME线路简称VARCHARVARCHAR(100)100是NULL—是ALTER新增,如 15号线一期、15号线二期
5LINE_STAGE建设分期VARCHARVARCHAR(64)64是'一期'—是如 一期、二期、全线
6COLOR_HEX标识颜色VARCHARVARCHAR(32)32是'#007ACC'—否16进制颜色码
7TOTAL_LENGTH_KM线路里程(公里)DECIMALDECIMAL(10,3)10,3是NULL—是线路总里程,保留3位小数(单位:km)
8START_STATION起点站VARCHARVARCHAR(100)100是NULL—是ALTER新增,如 九曲河东站、曾家站
9END_STATION终点站VARCHARVARCHAR(100)100是NULL—是ALTER新增,如 两江影视城站、九曲河东站
10ORIGIN_DESTINATION起止站点说明VARCHARVARCHAR(200)200是NULL—否起止站点说明文本
11SERVICE_AREA服务区域VARCHARVARCHAR(200)200是NULL—否服务区划,如下沉自存量服务区域
12STATION_COUNT车站数量INTINT10是0—是沿线车站总数统计快照(座)
13BIZ_STATUS建设状态VARCHARVARCHAR(32)32是'1'—是对齐系统字典 biz_status:'0' 规划 / '1' 在建 / '2' 运营 / '3' 大修改造
14STATUS启用状态CHARCHAR(1)1否'0'—是ALTER新增,系统启停状态:'0' 正常 / '1' 停用
15ORDER_NUM显示排序INTINT10否0—否排序权重
16REMARK备注说明VARCHARVARCHAR(2000)2000是NULL—否ALTER新增,线路分期工程说明与规划备注
17DEL_FLAG删除标志CHARCHAR(1)1否'0'—否0正常 1已删除
18CREATE_BY创建人BIGINTBIGINT20是NULL—否审计字段
19CREATE_TIME创建时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
20UPDATE_BY更新人BIGINTBIGINT20是NULL—否审计字段
21UPDATE_TIME更新时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
22CREATE_DEPT创建部门BIGINTBIGINT20是NULL—否组织归属

3.2 BIZ_SITE_MASTER(物理工点主数据表 - 就地 ALTER,保留 931 条存量行) ​

序号字段名中文含义逻辑类型物理类型(DM8)长度/精度可空默认值约束/索引核心说明
1SITE_MASTER_ID工点主键IDBIGINTBIGINT20否—PK是既有雪花大整数主键,实体类字段 siteMasterId
2PROJECT_ID所属项目IDBIGINTBIGINT20是NULLIDX否既有字段,关联 BIZ_PROJECT.PROJECT_ID
3LINE_ID所属主线路IDBIGINTBIGINT20否—IDX是既有字段,直接对齐 BIZ_LINE.LINE_ID
4STATION_CODE工点编码VARCHARVARCHAR(256)256否—UK(函数)是既有物理列,同线路下工点代号(如 18-05)
5STATION_NAME工点全称VARCHARVARCHAR(400)400否——是既有物理列,如 重庆西站、现代制造区-复盛区间
6SHORT_NAME简称VARCHARVARCHAR(200)200是NULL—否既有物理列,如 西站
7STATION_INDEX沿线里程排序INTINT10是0—否既有字段,沿线路走向从头到尾排列序号
8SITE_TYPE工点类型VARCHARVARCHAR(128)128否——是既有字典 biz_site_type:CZ/QJ/TCC/ZBDS/CLJD/QL/QZD/CLD/CRCX 完整 9 类
9LNG经度DECIMALDECIMAL(22)22是NULL—否既有字段,GIS 坐标经度(实际库为 DECIMAL(22),不收窄)
10LAT纬度DECIMALDECIMAL(22)22是NULL—否既有字段,GIS 坐标纬度(实际库为 DECIMAL(22),不收窄)
11IS_TRANSFER是否换乘站CHARCHAR(4)4是'0'—否既有物理列,1是 0否
12TRANSFER_LINES换乘线路名称VARCHARVARCHAR(500)500是NULL—否ALTER新增,如 5号线,环线
13IS_HUB是否综合枢纽CHARCHAR(4)4是'0'—否既有物理列(实际为 CHAR(4)),业务逻辑仅存 '0'/'1'
14STRUCT_TYPE结构形式VARCHARVARCHAR(64)64是NULL—否ALTER新增,地下三层岛式 / 高架侧式 / 盾构区间等
15TOTAL_AREA建筑面积(㎡)DECIMALDECIMAL(22,2)22,2是NULL—否既有物理列,车站总建筑面积
16ENTRANCE_COUNT出入口数量INTINT10是0—否既有字段,规划出入口总数
17COMPOSITION组成部分VARCHARVARCHAR(2000)2000是NULL—否既有字段,就地安全扩容至2000
18SITUATION工点概况TEXTTEXT2GB是NULL—否既有物理列,实测存量最大2616字符,保留TEXT严禁收窄
19PLAN_IMAGE总平面规划图VARCHARVARCHAR(2000)2000是NULL—否既有物理列,图纸附件 URL
20STATUS启用状态CHARCHAR(1)1否'0'—否既有字段,0正常 1停用
21DEL_FLAG删除标志CHARCHAR(1)1否'0'—否既有字段,0正常 1已删除
22CREATE_BY创建人BIGINTBIGINT20是NULL—否既有审计字段
23CREATE_TIME创建时间TIMESTAMPTIMESTAMP—是NULL—否既有审计字段
24UPDATE_BY更新人BIGINTBIGINT20是NULL—否既有审计字段
25UPDATE_TIME更新时间TIMESTAMPTIMESTAMP—是NULL—否既有审计字段
26CREATE_DEPT创建部门BIGINTBIGINT20是NULL—否既有组织字段

3.2.1 BIZ_SITE_MASTER 既有物理字段设计口径 vs 实际库结构差异对照表 ​

根据平台软件交付规范与数据库设计特别检查要求,记录设计口径标准值与现有开发库实际物理结构差异。核心保护原则:实施阶段严禁执行收窄操作,完全保留实际库物理宽度以防数据截断:

字段名设计推荐规范现有库实际物理类型差异类型处置原则与说明
STATION_CODEVARCHAR(64)VARCHAR(256)实际更宽保持实际列宽度 VARCHAR(256),不作收窄
STATION_NAMEVARCHAR(200)VARCHAR(400)实际更宽保持实际列宽度 VARCHAR(400),不作收窄
SHORT_NAMEVARCHAR(100)VARCHAR(200)实际更宽保持实际列宽度 VARCHAR(200),不作收窄
SITE_TYPEVARCHAR(32)VARCHAR(128)实际更宽保持实际列宽度 VARCHAR(128),不作收窄
PLAN_IMAGEVARCHAR(500)VARCHAR(2000)设计窄于实际严禁收窄!实际附件 URL 支持长路径,保持 VARCHAR(2000) 避免截断
TOTAL_AREADECIMAL(14,2)DECIMAL(22,2)实际更宽保持实际列精度 DECIMAL(22,2)
SITUATIONVARCHAR(4000)TEXT实际更大严禁收窄!实际为 TEXT(最大2GB),存量最大2616字符,无需亦禁止收窄
IS_TRANSFERCHAR(1)CHAR(4)实际更宽保持实际列定义 CHAR(4),业务逻辑仅存储 '0'/'1'
IS_HUBCHAR(1)CHAR(4)实际更宽保持实际列定义 CHAR(4),业务逻辑仅存储 '0'/'1'
LNG(经度)DECIMAL(12,6)DECIMAL(22)实际更宽保持实际列精度 DECIMAL(22),不作收窄;坐标精度由写入值控制
LAT(纬度)DECIMAL(12,6)DECIMAL(22)实际更宽保持实际列精度 DECIMAL(22),不作收窄;坐标精度由写入值控制
COMPOSITIONVARCHAR(2000)VARCHAR(1020)设计宽于实际本次 §5 执行 MODIFY COMPOSITION VARCHAR(2000) 扩容;扩容不改数据,属安全操作

3.3 BIZ_PROJECT(建设项目主数据表 - 保留既有字段,扩展完整单位集合) ​

序号字段名中文含义逻辑类型物理类型(DM8)长度/精度可空默认值约束/索引核心说明
1PROJECT_ID项目IDBIGINTBIGINT20否—PK是既有雪花算法大整数主键
2PROJECT_NAME建设项目全称VARCHARVARCHAR(400)400否—UK(函数)是既有字段,如 重庆轨道交通15号线一期工程建设项目
3SHORT_NAME简称VARCHARVARCHAR(200)200是NULL—否既有字段(实际 VARCHAR(200),不收窄)
4PROJECT_CODE批复文号/立项编码VARCHARVARCHAR(200)200是NULL—是既有字段,发改委立项批复文号(实际 VARCHAR(200))
5ORDER_NUM显示排序INTINT10否0—否既有字段
6STATUS启用状态CHARCHAR(1)1否'0'—否既有字段,0正常 1停用
7BUILD_UNIT_ID建设单位IDBIGINTBIGINT20是NULLIDX否单项兼容 ID;仅一个建设单位时关联 SYS_DEPT.DEPT_ID,多项/清空为 NULL
8BUILD_UNIT建设单位名称VARCHARVARCHAR(1500)1500是NULL—是官方全称快照,按完整集合生成,禁止任意文本;UTF-8 不超过 1500 字节
9DESIGN_UNIT_ID设计单位IDBIGINTBIGINT20是NULLIDX否单项兼容 ID;仅一项时关联 SYS_DEPT.DEPT_ID,多项/清空为 NULL
10DESIGN_UNIT设计单位名称VARCHARVARCHAR(1500)1500是NULL—否官方全称快照,按完整集合生成,禁止任意文本;UTF-8 不超过 1500 字节
11SUPERVISE_UNIT_ID监理单位IDBIGINTBIGINT20是NULLIDX否单项兼容 ID;仅一项时关联 SYS_DEPT.DEPT_ID,多项/清空为 NULL
12SUPERVISE_UNIT监理单位名称VARCHARVARCHAR(1500)1500是NULL—否官方全称快照,按完整集合生成,禁止任意文本;UTF-8 不超过 1500 字节
13CONSTRUCT_UNIT_ID施工单位IDBIGINTBIGINT20是NULLIDX否单项兼容 ID;仅一项时关联 SYS_DEPT.DEPT_ID,多项/清空为 NULL
14CONSTRUCT_UNIT施工单位名称VARCHARVARCHAR(1500)1500是NULL—否官方全称快照,按完整集合生成,禁止任意文本;UTF-8 不超过 1500 字节
15PLAN_START_DATE计划开工日期DATEDATE—是NULL—否既有字段
16PLAN_END_DATE计划竣工日期DATEDATE—是NULL—否既有字段
17REAL_START_DATE实际开工日期DATEDATE—是NULL—否既有字段
18REAL_END_DATE实际竣工日期DATEDATE—是NULL—否既有字段
19PROJECT_TYPE工程类型VARCHARVARCHAR(128)128是NULL—是既有字段,轨道交通/城市更新等(实际 VARCHAR(128))
20PROJECT_STATUS工程建设状态VARCHARVARCHAR(128)128是NULL—是既有字段,规划/在建/完工/试运行(实际 VARCHAR(128))
21BUILD_PLAN规划批次VARCHARVARCHAR(1020)1020是NULL—是既有字段,安全保留实际长度 1020
22IS_STATISTICS是否入统CHARCHAR(1)1是'0'—否既有字段,1是 0否
23IS_IMPORTANT是否重点工程CHARCHAR(1)1是'0'—否既有字段,1是 0否
24INTRO项目简介TEXTTEXT2GB是NULL—否既有物理列为 TEXT(实测),严禁收窄为 VARCHAR
25PROJECT_LINE_LENGTH线路总长(公里)DECIMALDECIMAL(22)22是NULL—否既有字段(实际 DECIMAL(22))
26INVEST_AMOUNT批复总概算(万元)DECIMALDECIMAL(22)22是NULL—是既有字段(实际 DECIMAL(22))
27BELONG_COMPANY_ID所属项目分公司IDBIGINTBIGINT20是NULLIDX是ALTER新增,关联 SYS_DEPT.DEPT_ID
28BELONG_COMPANY所属项目分公司名VARCHARVARCHAR(1020)1020是NULL—是既有字段,安全保留实际长度 1020
29DEL_FLAG删除标志CHARCHAR(1)1否'0'—否既有字段,0正常 1已删除
30CREATE_BY创建人BIGINTBIGINT20是NULL—否既有审计字段
31CREATE_TIME创建时间TIMESTAMPTIMESTAMP—是NULL—否既有审计字段
32UPDATE_BY更新人BIGINTBIGINT20是NULL—否既有审计字段
33UPDATE_TIME更新时间TIMESTAMPTIMESTAMP—是NULL—否既有审计字段
34CREATE_DEPT创建部门BIGINTBIGINT20是NULL—否既有组织字段
35BUILD_UNIT_IDS建设单位完整集合VARCHARVARCHAR(1500)1500是NULL逻辑引用是有序去重 CSV SYS_DEPT.DEPT_ID;空集合清空引用,保存逐项校验
36DESIGN_UNIT_IDS设计单位完整集合VARCHARVARCHAR(1500)1500是NULL逻辑引用是有序去重 CSV SYS_DEPT.DEPT_ID;空集合清空引用,保存逐项校验
37SUPERVISE_UNIT_IDS监理单位完整集合VARCHARVARCHAR(1500)1500是NULL逻辑引用是有序去重 CSV SYS_DEPT.DEPT_ID;空集合清空引用,保存逐项校验
38CONSTRUCT_UNIT_IDS施工单位完整集合VARCHARVARCHAR(1500)1500是NULL逻辑引用是有序去重 CSV SYS_DEPT.DEPT_ID;空集合清空引用,保存逐项校验

3.4 BIZ_BID_SECTION(标段主数据表 - 全新建表 + 参建主体负责人扩充) ​

序号字段名中文含义逻辑类型物理类型(DM8)长度/精度可空默认值约束/索引核心说明
1BID_ID标段IDBIGINTBIGINT20否—PK是雪花算法大整数主键(承接存量 35 个 BID 节点 ID)
2PROJECT_ID单关联兼容项目IDBIGINTBIGINT20是NULLIDX是仅唯一项目关联时保留;权威集合为 BIZ_BID_PROJECT_REL
3LINE_ID所属线路IDBIGINTBIGINT20否—IDX是关联 BIZ_LINE.LINE_ID
4BID_CODE标段编码VARCHARVARCHAR(100)100否—UK(函数)是如 CQ15TJ01、CQ15GD01
5BID_NAME标段全称VARCHARVARCHAR(200)200否——是如 土建施工01标、供电系统工程标
6COVERAGE_MODE管辖范围模式VARCHARVARCHAR(32)32否'SPECIFIED'—是SPECIFIED指定工点(分站型) / FULL_LINE全线统包覆盖
7BID_CATEGORY标段专业大类VARCHARVARCHAR(64)64是NULL—是下沉自 NODE_INFO.BID_CATEGORY(土建/机电/系统弱电等)
8BID_TYPE标段招标类型VARCHARVARCHAR(64)64是NULL—是施工标段、设备系统标、监理标段、勘察标段、设计标段、勘察设计标段、综合统包标
9DESIGN_UNIT_ID设计单位IDBIGINTBIGINT20是NULLIDX是ALTER新增,关联 SYS_DEPT.DEPT_ID
10DESIGN_UNIT_NAME设计单位名称VARCHARVARCHAR(200)200是NULL—是ALTER新增,设计企业名称快照
11DESIGN_LEADER_ID设计单位负责人IDBIGINTBIGINT20是NULL—是ALTER新增,设计负责人用户ID
12DESIGN_LEADER_NAME设计单位负责人姓名VARCHARVARCHAR(100)100是NULL—是ALTER新增,设计负责人姓名快照
13DESIGN_LEADER_PHONE设计单位负责人电话VARCHARVARCHAR(32)32是NULL—否ALTER新增,设计负责人联系电话
14CONSTRUCT_UNIT_ID施工单位IDBIGINTBIGINT20是NULLIDX是ALTER新增,关联 SYS_DEPT.DEPT_ID(同总包ID)
15CONSTRUCT_UNIT_NAME施工单位名称VARCHARVARCHAR(200)200是NULL—是ALTER新增,施工总包单位快照
16CONSTRUCT_LEADER_ID施工单位负责人IDBIGINTBIGINT20是NULL—是ALTER新增,施工项目经理/负责人用户ID
17CONSTRUCT_LEADER_NAME施工单位负责人姓名VARCHARVARCHAR(100)100是NULL—是ALTER新增,施工负责人姓名快照
18CONSTRUCT_LEADER_PHONE施工单位负责人电话VARCHARVARCHAR(32)32是NULL—否ALTER新增,施工负责人联系电话
19GENERAL_CONTRACT_UNIT_ID施工总包单位IDBIGINTBIGINT20是NULLIDX是关联 SYS_DEPT.DEPT_ID(同施工单位ID,兼容存量)
20GENERAL_CONTRACT_UNIT_NAME施工总包单位名称VARCHARVARCHAR(200)200是NULL—是施工总包单位名称快照(同施工单位名称)
21SUPERVISE_UNIT_ID监理单位IDBIGINTBIGINT20是NULLIDX是关联 SYS_DEPT.DEPT_ID
22SUPERVISE_UNIT_NAME监理单位名称VARCHARVARCHAR(200)200是NULL—是监理企业快照名称
23SUPERVISE_LEADER_ID监理单位负责人IDBIGINTBIGINT20是NULL—是ALTER新增,总监理工程师/负责人用户ID
24SUPERVISE_LEADER_NAME监理单位负责人姓名VARCHARVARCHAR(100)100是NULL—是ALTER新增,监理负责人姓名快照
25SUPERVISE_LEADER_PHONE监理单位负责人电话VARCHARVARCHAR(32)32是NULL—否ALTER新增,监理负责人联系电话
26CONTRACT_AMOUNT中标合同额(万元)DECIMALDECIMAL(16,2)16,2是NULL—是标段中标签约总金额(单位:万元)
27START_DATE计划开工日期DATEDATE—是NULL—否计划开工日期
28END_DATE计划竣工日期DATEDATE—是NULL—否计划竣工日期
29BIZ_STATUS施工状态VARCHARVARCHAR(32)32是'PREPARE'—是PREPARE准备中 / CONSTRUCT施工中 / ACCEPT验收中 / COMPLETED已完工
30DEL_FLAG删除标志CHARCHAR(1)1否'0'—否0正常 1已删除
31CREATE_BY创建人BIGINTBIGINT20是NULL—否审计字段
32CREATE_TIME创建时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
33UPDATE_BY更新人BIGINTBIGINT20是NULL—否审计字段
34UPDATE_TIME更新时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
35CREATE_DEPT创建部门BIGINTBIGINT20是NULL—否组织归属

3.5 BIZ_BID_MAJOR(标段涵盖专业明细表 - 全新建表) ​

序号字段名中文含义逻辑类型物理类型(DM8)长度/精度可空默认值约束/索引核心说明
1ID主键IDBIGINTBIGINT20否—PK是雪花算法独立主键(严禁直接复用 BID_ID)
2BID_ID标段IDBIGINTBIGINT20否—UK(函数)是关联 BIZ_BID_SECTION.BID_ID
3MAJOR_CODE专业编码VARCHARVARCHAR(64)64否—UK(函数)是关联标准专业代码 (如 MEP-INTE, SYS-SIG)
4MAJOR_NAME专业名称VARCHARVARCHAR(100)100否——是专业中文名称快照
5IS_PRIMARY是否牵头/主专业CHARCHAR(1)1否'0'—是1是 0否 (多专业标指定1个主要专业)
6DEL_FLAG删除标志CHARCHAR(1)1否'0'—否0正常 1已删除
7CREATE_BY创建人BIGINTBIGINT20是NULL—否审计字段
8CREATE_TIME创建时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
9UPDATE_BY更新人BIGINTBIGINT20是NULL—否审计字段
10UPDATE_TIME更新时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
11CREATE_DEPT创建部门BIGINTBIGINT20是NULL—否组织归属

3.6 BIZ_BID_SITE_SCOPE(标段管辖工点明细表 - 全新建表) ​

序号字段名中文含义逻辑类型物理类型(DM8)长度/精度可空默认值约束/索引核心说明
1ID主键IDBIGINTBIGINT20否—PK是雪花算法主键
2BID_ID标段IDBIGINTBIGINT20否—UK(函数)是关联 BIZ_BID_SECTION.BID_ID
3SITE_ID工点IDBIGINTBIGINT20否—UK(函数)是关联 BIZ_SITE_MASTER.SITE_MASTER_ID
4DEL_FLAG删除标志CHARCHAR(1)1否'0'—否0正常 1已删除
5CREATE_BY创建人BIGINTBIGINT20是NULL—否审计字段
6CREATE_TIME创建时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
7UPDATE_BY更新人BIGINTBIGINT20是NULL—否审计字段
8UPDATE_TIME更新时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
9CREATE_DEPT创建部门BIGINTBIGINT20是NULL—否组织归属

3.7 BIZ_UNIT_PROJECT(单位工程表 - 全新建表) ​

序号字段名中文含义逻辑类型物理类型(DM8)长度/精度可空默认值约束/索引核心说明
1UNIT_PROJECT_ID单位工程IDBIGINTBIGINT20否—PK是主键ID(存量初始化由序列 SEQ_BIZ_UNIT_PROJECT START WITH 3000000000000000001 生成,运行时由平台雪花算法生成)
2BID_ID所属标段IDBIGINTBIGINT20否—UK(函数)是关联 BIZ_BID_SECTION.BID_ID
3SITE_ID所在物理工点IDBIGINTBIGINT20否—UK(函数)是关联 BIZ_SITE_MASTER.SITE_MASTER_ID
4LINE_ID线路IDBIGINTBIGINT20否—IDX是冗余线路ID加速汇总
5UNIT_PROJECT_CODE单位工程编码VARCHARVARCHAR(100)100否——是规范生成:UP_{bidCode}_{stationCode}_{majorCode}
6UNIT_PROJECT_NAME单位工程名称VARCHARVARCHAR(300)300否——是规范命名:{工点名称} {标准专业名称}工程
7MAJOR_CODE专业代码VARCHARVARCHAR(64)64否—UK(函数)是关联标准专业 (如 SYS-SIG, MEP-INTE)
8MAJOR_NAME专业名称VARCHARVARCHAR(100)100否——是专业名称快照(严格从标准字典获取)
9GB_CODE国标分类代码VARCHARVARCHAR(64)64是NULL—否GB 50299 专业分类代码
10ACCEPT_STATUS验收状态VARCHARVARCHAR(32)32否'PENDING'—是继承原节点 BIZ_STATUS:PENDING/CHECKING/PASSED
11DEL_FLAG删除标志CHARCHAR(1)1否'0'—否0正常 1已删除
12CREATE_BY创建人BIGINTBIGINT20是NULL—否审计字段
13CREATE_TIME创建时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
14UPDATE_BY更新人BIGINTBIGINT20是NULL—否审计字段
15UPDATE_TIME更新时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
16CREATE_DEPT创建部门BIGINTBIGINT20是NULL—否组织归属

主键序列与平台雪花 ID 体系设计说明:

  • 纯 SQL 批量迁移阶段:由于脱离 Java 运行环境无法调用后端雪花算法,存量脚本采用高位段独立序列(SEQ_SYS_DEPT_MIGRATE START WITH 2199000000000200001、SEQ_BIZ_UNIT_PROJECT START WITH 3000000000000000001)生成 19 位唯一主键,与雪花 ID 空间天然隔离,绝无碰撞风险;
  • 系统正式上线运行阶段:所有新增业务实体均统一由后端平台雪花 ID 生成器(IdWorker)自动生成,两阶段职责清晰、平滑过渡。

3.8 BIZ_SUB_PROJECT(分部工程表 - 全新建表) ​

序号字段名中文含义逻辑类型物理类型(DM8)长度/精度可空默认值约束/索引核心说明
1SUB_PROJECT_ID分部工程IDBIGINTBIGINT20否—PK是雪花算法主键
2UNIT_PROJECT_ID所属单位工程IDBIGINTBIGINT20否—IDX是关联 BIZ_UNIT_PROJECT.UNIT_PROJECT_ID
3SUB_PROJECT_CODE分部工程编码VARCHARVARCHAR(100)100否——是如 0101
4SUB_PROJECT_NAME分部工程名称VARCHARVARCHAR(200)200否——是如 地基与基础、主体结构、通风与防排烟
5GB_CODE国标代码VARCHARVARCHAR(64)64是NULL—否GB 50299 标准分类码
6ORDER_NUM排序序号INTINT10否0—否排序权重
7DEL_FLAG删除标志CHARCHAR(1)1否'0'—否0正常 1已删除
8CREATE_BY创建人BIGINTBIGINT20是NULL—否审计字段
9CREATE_TIME创建时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
10UPDATE_BY更新人BIGINTBIGINT20是NULL—否审计字段
11UPDATE_TIME更新时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
12CREATE_DEPT创建部门BIGINTBIGINT20是NULL—否组织归属

3.9 BIZ_USER_ENGINEERING_CONFIG(用户工程授权配置根表 - 全新建表) ​

序号字段名中文含义逻辑类型物理类型(DM8)长度/精度可空默认值约束/索引核心说明
1CONFIG_ID配置IDBIGINTBIGINT20否—PK是雪花算法主键
2USER_ID用户IDBIGINTBIGINT20否—UK是关联 SYS_USER.USER_ID
3REVISION乐观锁版本号BIGINTBIGINT20否0CHECK(>=0)是初始为0,写操作递增
4CREATE_DEPT创建部门BIGINTBIGINT20是NULL—否组织归属
5CREATE_BY创建人BIGINTBIGINT20是NULL—否审计字段
6CREATE_TIME创建时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
7UPDATE_BY更新人BIGINTBIGINT20是NULL—否审计字段
8UPDATE_TIME更新时间TIMESTAMPTIMESTAMP—是NULL—否审计字段

3.10 BIZ_USER_ENGINEERING_LINE(用户线路工程授权表 - 全新建表) ​

序号字段名中文含义逻辑类型物理类型(DM8)长度/精度可空默认值约束/索引核心说明
1GRANT_ID授权IDBIGINTBIGINT20否—PK是雪花算法主键
2CONFIG_ID配置根IDBIGINTBIGINT20否—FK是关联 BIZ_USER_ENGINEERING_CONFIG.CONFIG_ID
3LINE_ID线路IDBIGINTBIGINT20否—UK(CONFIG_ID, LINE_ID)是关联 BIZ_LINE.LINE_ID
4SCOPE_MODE授权模式VARCHARVARCHAR(12)12否—CHECK(FULL_LINE, RESTRICTED)是FULL_LINE整线 / RESTRICTED受限
5CREATE_DEPT创建部门BIGINTBIGINT20是NULL—否组织归属
6CREATE_BY创建人BIGINTBIGINT20是NULL—否审计字段
7CREATE_TIME创建时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
8UPDATE_BY更新人BIGINTBIGINT20是NULL—否审计字段
9UPDATE_TIME更新时间TIMESTAMPTIMESTAMP—是NULL—否审计字段

3.11 BIZ_USER_ENGINEERING_PAIR(用户标段工点授权明细表 - 全新建表) ​

序号字段名中文含义逻辑类型物理类型(DM8)长度/精度可空默认值约束/索引核心说明
1PAIR_ID明细IDBIGINTBIGINT20否—PK是雪花算法主键
2GRANT_ID线路授权IDBIGINTBIGINT20否—FK, UK(GRANT_ID, BID_ID, SITE_ID)是关联 BIZ_USER_ENGINEERING_LINE.GRANT_ID
3BID_ID标段IDBIGINTBIGINT20否—UK是关联 BIZ_BID_SECTION.BID_ID
4SITE_ID工点IDBIGINTBIGINT20否—UK, IDX(SITE_ID, GRANT_ID)是关联 BIZ_SITE_MASTER.SITE_MASTER_ID
5CREATE_DEPT创建部门BIGINTBIGINT20是NULL—否组织归属
6CREATE_BY创建人BIGINTBIGINT20是NULL—否审计字段
7CREATE_TIME创建时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
8UPDATE_BY更新人BIGINTBIGINT20是NULL—否审计字段
9UPDATE_TIME更新时间TIMESTAMPTIMESTAMP—是NULL—否审计字段

3.10 BIZ_MAJOR_DICT(行业标准专业字典表 - 全新建表) ​

序号字段名中文含义逻辑类型物理类型(DM8)长度/精度可空默认值约束/索引核心说明
1ID主键IDVARCHARVARCHAR(64)64否—PK是业务主键标识
2MAJOR_CODE行业标准编码VARCHARVARCHAR(64)64否—UK(函数)是规范两级专业代码 (如 SYS-SIG, MEP-INTE)
3MAJOR_NAME专业中文名称VARCHARVARCHAR(100)100否——是如 信号系统, 风水电综合系统
4CATEGORY_CODE专业大类代码VARCHARVARCHAR(32)32否——是CIV/MEP/SYS/POW/INT
5CATEGORY_NAME专业大类名称VARCHARVARCHAR(64)64否——是土建工程专业/机电系统专业/弱电系统专业/供电系统专业/联调综合专业
6ORIGIN_CODE原内部标识对照VARCHARVARCHAR(64)64是NULL—否存量映射 (如 XH, 99FSD, JZ)
7ORDER_NUM排序序号INTINT10否0—否显示顺序
8CATEGORY所属大类VARCHARVARCHAR(64)64是NULL—是规范大类 (土建工程专业/机电系统专业/弱电系统专业/供电系统专业/联调综合专业)
9PARENT_CODE父级专业代码VARCHARVARCHAR(64)64是NULL—否顶级为 NULL
10STATUS状态CHARCHAR(1)1否'0'—是0正常 1已停用
11REMARK标准描述说明VARCHARVARCHAR(500)500是NULL—否规范验收覆盖与标准描述说明
12DEL_FLAG删除标志CHARCHAR(1)1否'0'—否0正常 1已删除
13CREATE_BY创建人BIGINTBIGINT20是NULL—否审计字段
14CREATE_TIME创建时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
15UPDATE_BY更新人BIGINTBIGINT20是NULL—否审计字段
16UPDATE_TIME更新时间TIMESTAMPTIMESTAMP—是NULL—否审计字段
17CREATE_DEPT创建部门BIGINTBIGINT20是NULL—否组织归属

3.11 SYS_UNIT_PROJECT_DEPT(参建单位项目部子表 - 全量) ​

序号字段名中文含义逻辑类型物理类型长度可空默认值约束/索引核心说明
1ID主键BIGINTBIGINT—否—PK是平台雪花生成
2UNIT_ID所属参建单位BIGINTBIGINT—否—索引 IDX_SYS_UPD_UNIT是外键关联 SYS_DEPT.DEPT_ID
3PROJECT_DEPT_NAME项目部名称StringVARCHAR2100否——是同单位未删除名称唯一由 Service 校验
4ADDRESS项目部地址StringVARCHAR2255否——是驻地项目部现场地址
5MANAGER_NAME项目部负责人StringVARCHAR250否——是项目经理/负责人姓名
6PHONE项目部联系电话StringVARCHAR2100否——是支持手机/座机
7DEL_FLAG逻辑删除StringCHAR1否'0'—否平台逻辑删除(0 正常)
8CREATE_DEPT创建部门BIGINTBIGINT—是—审计否平台自动填充
9CREATE_BY创建人BIGINTBIGINT—是—审计否平台自动填充
10CREATE_TIME创建时间TIMESTAMPTIMESTAMP精度 6是—审计否平台自动填充
11UPDATE_BY更新人BIGINTBIGINT—是—审计否平台自动填充
12UPDATE_TIME更新时间TIMESTAMPTIMESTAMP精度 6是—审计否平台自动填充

3.12 BIZ_CONSORTIUM(全局联合体档案 - 全量) ​

序号字段名中文含义逻辑类型物理类型长度可空默认值约束/索引核心说明
1ID主键BIGINTBIGINT—否—PK是平台雪花生成
2CONSORTIUM_NAME联合体名称StringVARCHAR2200否—函数唯一索引是软删档案不占用名称,未删除内全局唯一
3LEAD_UNIT_ID牵头单位BIGINTBIGINT—否—索引是外键引用 SYS_DEPT.DEPT_ID(必须属于成员)
4STATUS状态StringCHAR1否'0'—否0 正常、1 停用
5REMARK备注StringVARCHAR2500是——否用户输入
6DEL_FLAG逻辑删除StringCHAR1否'0'—否0 正常、1 删除
7CREATE_DEPT创建部门BIGINTBIGINT—是—审计否平台自动填充
8CREATE_BY创建人BIGINTBIGINT—是—审计否平台自动填充
9CREATE_TIME创建时间TIMESTAMPTIMESTAMP精度 6是—审计否平台自动填充
10UPDATE_BY更新人BIGINTBIGINT—是—审计否平台自动填充
11UPDATE_TIME更新时间TIMESTAMPTIMESTAMP精度 6是—审计否平台自动填充

3.13 BIZ_CONSORTIUM_MEMBER(联合体成员 - 全量) ​

序号字段名中文含义逻辑类型物理类型长度可空默认值约束/索引核心说明
1ID主键BIGINTBIGINT—否—PK否平台雪花生成
2CONSORTIUM_ID所属联合体BIGINTBIGINT—否—联合唯一首列是逻辑外键 BIZ_CONSORTIUM.ID
3DEPT_ID成员单位BIGINTBIGINT—否—联合唯一第二列是外键引用 SYS_DEPT.DEPT_ID
4CREATE_DEPT创建部门BIGINTBIGINT—是—审计否平台自动填充
5CREATE_BY创建人BIGINTBIGINT—是—审计否平台自动填充
6CREATE_TIME创建时间TIMESTAMPTIMESTAMP精度 6是—审计否平台自动填充
7UPDATE_BY更新人BIGINTBIGINT—是—审计否平台自动填充
8UPDATE_TIME更新时间TIMESTAMPTIMESTAMP精度 6是—审计否平台自动填充

3.14 BIZ_PROJECT_CONSORTIUM_REL(旧项目独立关系 - 历史保留) ​

序号字段名中文含义逻辑类型物理类型长度可空默认值约束/索引核心说明
1ID主键BIGINTBIGINT—否—PK否平台雪花生成
2PROJECT_ID业务项目BIGINTBIGINT—否—联合唯一首列是逻辑外键 BIZ_PROJECT.PROJECT_ID
3CONSORTIUM_ID联合体档案BIGINTBIGINT—否—联合唯一第二列是逻辑外键 BIZ_CONSORTIUM.ID
4CREATE_DEPT创建部门BIGINTBIGINT—是—审计否平台自动填充
5CREATE_BY创建人BIGINTBIGINT—是—审计否平台自动填充
6CREATE_TIME创建时间TIMESTAMPTIMESTAMP精度 6是—审计否平台自动填充
7UPDATE_BY更新人BIGINTBIGINT—是—审计否平台自动填充
8UPDATE_TIME更新时间TIMESTAMPTIMESTAMP精度 6是—审计否平台自动填充

4. 关键索引与唯一性约束清单(采用 DM8 CASE 函数索引方案) ​

4.0 数据库脚本实施执行顺序总览(必须严格按序执行) ​

为确保数据物理完整性、杜绝外键孤儿与依赖缺失,数据库实施脚本必须严格按照以下顺序执行。特别是第 6 节专业字典初始化必须在第 7 节存量主数据清洗之前执行完毕,否则 7.4 节标段涵盖专业推导时关联字典将匹配不到数据导致单位工程落空:

执行阶段对应章节核心操作与脚本内容前置依赖条件关键保障目标
第一阶段第 4 节(建表与索引)8 张新表创建 (CREATE TABLE) 及 CASE 函数唯一索引、主键序列无建立双核四维新实体物理结构与防重索引
第二阶段第 5 节(既有表 ALTER)BIZ_SITE_MASTER 与 BIZ_PROJECT 就地扩容加列 (ALTER)第一阶段保护 931 条真实工点,严禁 DROP 与反向收窄
第三阶段第 6 节(专业字典初始化)BIZ_MAJOR_DICT 预置 29 项标准专业分类数据 (MERGE)第一阶段建表存量迁移的核心前置依赖,确保后续专业名称 100% 命中
第四阶段第 7 节(存量主数据清洗)7.0 参建单位自动建档与核心业主/运营单位组织映射 (INSERT SYS_DEPT)
7.1 线路分期与延线独立建线 (INSERT BIZ_LINE;历史候选脚本为归并 23 条主线,已废止)
7.2 工点主数据对齐与主线外键重定向 (UPDATE BIZ_SITE_MASTER)
7.3 标段主数据下沉提取 (INSERT BIZ_BID_SECTION)
7.4 标段专业推导与多专业笛卡尔积落库单位工程 (INSERT BIZ_UNIT_PROJECT)
第二、三阶段完成存量资产主数据清洗、单位精确映射与法定单位工程全量展开
第五阶段第 8 节(废弃表安全退场)10 张真实存在的旧工程树与旧权限表安全清理与归档第四阶段验证完毕彻底清理旧表体系

实测证明,DM8 数据库不支持 Postgres 风格的 WHERE DEL_FLAG = '0' 条件唯一索引语法。

为彻底杜绝传统 (COL, DEL_FLAG) 联合索引在“删除记录后再建同名记录、再次删除时两行 DEL_FLAG='1' 发生唯一约束冲突”的软删除陷阱,本架构在 DM8 中全面采用基于 CASE 表达式的函数唯一索引(Function-based Unique Index)(实测执行成功):

  • 原理:当 DEL_FLAG = '0'(有效数据)时,CASE 表达式返回真实业务值;当 DEL_FLAG = '1'(软删除数据)时,CASE 表达式返回 NULL。在 SQL 规范与 DM8 实现中,唯一索引允许多个 NULL 共存,因此已删除记录完全不占唯一名额,未删除记录受到严格唯一约束。
sql
-- 1. 线路编码唯一索引 (仅未删除有效)
CREATE UNIQUE INDEX UK_BIZ_LINE_CODE ON BIZ_LINE(
    CASE WHEN DEL_FLAG = '0' THEN LINE_CODE END
);

-- 2. 同线路下工点唯一 (仅未删除有效)
-- 唯一键取 STATION_NAME 而非 STATION_CODE,原因与实测数据见本节末"工点唯一键选型说明"。
CREATE UNIQUE INDEX UK_BIZ_SITE_CODE ON BIZ_SITE_MASTER(
    CASE WHEN DEL_FLAG = '0' THEN LINE_ID END,
    CASE WHEN DEL_FLAG = '0' THEN STATION_NAME END
);

-- 3. 建设项目名称唯一 (仅未删除有效)
CREATE UNIQUE INDEX UK_BIZ_PROJECT_NAME ON BIZ_PROJECT(
    CASE WHEN DEL_FLAG = '0' THEN PROJECT_NAME END
);

-- 4. 旧单项目模型曾规划的标段编码唯一索引(仅历史设计,不是当前开发库 DDL)
-- 2026-10-14 经项目 MCP 回读,BIZ_BID_SECTION 当前唯一索引为 BID_ID 主键,
-- 未发现 BID_CODE 唯一索引。当前编码冲突由 BidProjectService 在事务中锁定项目/线路后校验,
-- 不应执行下面的旧模型索引;多项目关系无法由 PROJECT_ID 单列唯一键正确表达。

-- 5. 标段涵盖专业唯一索引 (同一标段下专业不重复, 仅未删除有效)
CREATE UNIQUE INDEX UK_BID_MAJOR ON BIZ_BID_MAJOR(
    CASE WHEN DEL_FLAG = '0' THEN BID_ID END,
    CASE WHEN DEL_FLAG = '0' THEN MAJOR_CODE END
);

-- 6. 标段-工点指定管辖唯一 (同一标段下工点不重复, 仅未删除有效)
CREATE UNIQUE INDEX UK_BID_SITE_REL ON BIZ_BID_SITE_SCOPE(
    CASE WHEN DEL_FLAG = '0' THEN BID_ID END,
    CASE WHEN DEL_FLAG = '0' THEN SITE_ID END
);

-- 7. 单位工程核心唯一索引 (标段×工点×专业 唯一, 仅未删除有效)
CREATE UNIQUE INDEX UK_UNIT_PROJECT ON BIZ_UNIT_PROJECT(
    CASE WHEN DEL_FLAG = '0' THEN BID_ID END,
    CASE WHEN DEL_FLAG = '0' THEN SITE_ID END,
    CASE WHEN DEL_FLAG = '0' THEN MAJOR_CODE END
);

-- 8. 用户数据权限唯一索引 (用户×维度×目标 唯一, 仅未删除有效)
CREATE UNIQUE INDEX UK_USER_DATA_SCOPE ON BIZ_USER_DATA_SCOPE(
    CASE WHEN DEL_FLAG = '0' THEN USER_ID END,
    CASE WHEN DEL_FLAG = '0' THEN SCOPE_TYPE END,
    CASE WHEN DEL_FLAG = '0' THEN TARGET_ID END
);

-- 9. 专业代码唯一索引 (仅未删除有效)
CREATE UNIQUE INDEX UK_BIZ_MAJOR_CODE ON BIZ_MAJOR_DICT(
    CASE WHEN DEL_FLAG = '0' THEN MAJOR_CODE END
);

4.1 工点唯一键选型说明(STATION_CODE 归并重号,2026-10-10 实测) ​

存量 861 条有效工点按物理主线归并后,STATION_CODE 重号而 STATION_NAME 不重号:

归并线路工点行数不同 STATION_CODE重号行数不同 STATION_NAME重名行数
L15(15号线 一期+二期+东延+西延)824537820
L05(5号线 + 5号线北延)735716730
L04(4号线 + 4号线西延)523715520
L09(9号线 一期+二期+新桥段)715615710
L06(6号线 + 6号线东延)10289131020
合计960
  • 重号不是重复记录:同一 STATION_CODE 下是两个不同的物理工点,SITE_MASTER_ID 与站名都不同。例:4-01 在 4 号线下为“黑石子站”、在 4 号线西延下为“宏帆停车场及出入段线”。
  • 根因:STATION_CODE 由各分期节点各自独立编号,只在原分期节点内唯一,归并到同一条物理线路后必然重号。
  • 处置(采用最保守方案,不改写存量数据):
    1. 唯一键改为 (LINE_ID, STATION_NAME)——实测 18 条归并线路全部无重名,可直接建索引;
    2. 存量 STATION_CODE 一律保留原值不改写,语义降级为“原分期节点内的编号”,在归并线路内不保证唯一;
    3. 因此 §7.2 的 UPDATE BIZ_SITE_MASTER SET LINE_ID = ... 不会再撞唯一索引;
    4. 若业务要求“同一线路内工点编码唯一”,须先确认编码重排规则(按线路走向重新编号,或保留分期后缀),作为独立变更另行执行;本次不做。
  • 该决定同步修正 requirements.md §5.1 原“station_code 在同一线路内全局唯一”的表述为“同一线路内工点名称唯一;工点编码沿用原分期编号”。

5. 既有表 ALTER 扩展脚本(就地加列保护 931 条存量数据) ​

sql
-- 1. BIZ_SITE_MASTER 表就地扩容与加列 (严禁 DROP,严禁对 TEXT 等大字段反向收窄)
-- 说明:SITUATION 字段原物理类型为 TEXT(最大 2GB),存量最大仅 2616 字符,完全满足存储需求,坚决不作收窄以杜绝截断风险
ALTER TABLE BIZ_SITE_MASTER MODIFY COMPOSITION VARCHAR(2000);
ALTER TABLE BIZ_SITE_MASTER ADD COLUMN IF NOT EXISTS TRANSFER_LINES VARCHAR(500);
ALTER TABLE BIZ_SITE_MASTER ADD COLUMN IF NOT EXISTS STRUCT_TYPE VARCHAR(64);

-- 2. BIZ_PROJECT 表就地加列(只加列,不做任何收窄)
-- 实测 BIZ_PROJECT 现有 29 列,其中 INTRO 实际为 TEXT、BUILD_PLAN/BELONG_COMPANY 实际为 VARCHAR(1020)。
-- 原脚本的 MODIFY INTRO VARCHAR(4000)、MODIFY BUILD_PLAN VARCHAR(1000)、MODIFY BELONG_COMPANY VARCHAR(1000)
-- 属反向收窄(TEXT→VARCHAR、1020→1000),违反本文件“严禁反向收窄”原则,已删除;
-- 该表当前 0 行虽不会截断,但保留收窄语句会在后续有数据时造成风险。
ALTER TABLE BIZ_PROJECT ADD COLUMN IF NOT EXISTS BUILD_UNIT_ID BIGINT;
ALTER TABLE BIZ_PROJECT ADD COLUMN IF NOT EXISTS DESIGN_UNIT_ID BIGINT;
ALTER TABLE BIZ_PROJECT ADD COLUMN IF NOT EXISTS SUPERVISE_UNIT_ID BIGINT;
ALTER TABLE BIZ_PROJECT ADD COLUMN IF NOT EXISTS CONSTRUCT_UNIT_ID BIGINT;
ALTER TABLE BIZ_PROJECT ADD COLUMN IF NOT EXISTS BELONG_COMPANY_ID BIGINT;
-- 2026-10-13 项目四类完整单位引用集合,名称快照列保持现有 VARCHAR(1500)
ALTER TABLE BIZ_PROJECT ADD COLUMN IF NOT EXISTS BUILD_UNIT_IDS VARCHAR(1500);
ALTER TABLE BIZ_PROJECT ADD COLUMN IF NOT EXISTS DESIGN_UNIT_IDS VARCHAR(1500);
ALTER TABLE BIZ_PROJECT ADD COLUMN IF NOT EXISTS SUPERVISE_UNIT_IDS VARCHAR(1500);
ALTER TABLE BIZ_PROJECT ADD COLUMN IF NOT EXISTS CONSTRUCT_UNIT_IDS VARCHAR(1500);

6. 行业标准专业字典初始化脚本(29 项行业标准分类,含大类及跨系统综合,存量迁移前置依赖) ​

关键执行顺序保障:本初始化脚本必须在执行存量标段涵盖专业推导(第 7.4 节)之前执行,确保通过 JOIN BIZ_MAJOR_DICT 正确匹配获取各专业的中文名称(MAJOR_NAME)与大类名称,避免出现数据落空为 0 行的问题。

条数口径:本脚本共 29 条(大类 5 个:CIV 7 条、MEP 10 条、SYS 8 条、POW 3 条、INT 1 条),与 requirements.md §5.2 专业编码表逐条一致。执行后校验 SELECT COUNT(*) FROM BIZ_MAJOR_DICT WHERE DEL_FLAG='0' 应为 29;新增 CIV-INTE(土建综合)、MEP-TOTAL(大机电系统综合,含机电+弱电+供电)、SYS-INTE(弱电系统集成综合)、POW-INTE(供电系统综合)4 项大类与跨系统综合类别,从源头上收敛工点多专业笛卡尔积展开导致的单位工程膨胀。

sql
MERGE INTO BIZ_MAJOR_DICT dest
USING (
    -- 1. CIV 站前土建装饰类 (7 项)
    SELECT '26' AS ID, 'CIV-INTE' AS MAJOR_CODE, '土建综合' AS MAJOR_NAME, 'CIV' AS CATEGORY_CODE, '土建装饰' AS CATEGORY_NAME, '99TJ' AS ORIGIN_CODE, 5 AS ORDER_NUM FROM DUAL UNION ALL
    SELECT '1', 'CIV-ARCH', '建筑与主体结构', 'CIV', '土建装饰', 'JZ', 10 FROM DUAL UNION ALL
    SELECT '2', 'CIV-DECO', '建筑装饰装修', 'CIV', '土建装饰', 'ZSZX', 20 FROM DUAL UNION ALL
    SELECT '3', 'CIV-SIGN', '导向标识系统', 'CIV', '土建装饰', 'DXBS', 30 FROM DUAL UNION ALL
    SELECT '4', 'CIV-SITE', '室外附属工程', 'CIV', '土建装饰', 'SWGC', 40 FROM DUAL UNION ALL
    SELECT '5', 'CIV-SWTF', '室外通风工程', 'CIV', '土建装饰', 'SWTF', 50 FROM DUAL UNION ALL
    SELECT '6', 'CIV-SWPS', '室外给排水工程', 'CIV', '土建装饰', 'SWJPS', 60 FROM DUAL UNION ALL

    -- 2. MEP 站后机电设备类 (10 项)
    SELECT '27', 'MEP-TOTAL', '大机电系统综合', 'MEP', '机电设备', '99DJD', 65 FROM DUAL UNION ALL
    SELECT '7', 'MEP-INTE', '风水电综合系统', 'MEP', '机电设备', '99FSD', 70 FROM DUAL UNION ALL
    SELECT '8', 'MEP-HVAC', '通风空调系统', 'MEP', '机电设备', 'TF', 80 FROM DUAL UNION ALL
    SELECT '9', 'MEP-WSD', '建筑给排水系统', 'MEP', '机电设备', 'JPS', 90 FROM DUAL UNION ALL
    SELECT '10', 'MEP-POW', '动力照明系统', 'MEP', '机电设备', 'DZ', 100 FROM DUAL UNION ALL
    SELECT '11', 'MEP-BRAC', '综合支吊架', 'MEP', '机电设备', 'ZHJDJ', 110 FROM DUAL UNION ALL
    SELECT '12', 'MEP-ELEV', '自动扶梯与人行步道', 'MEP', '机电设备', 'ZDFT', 120 FROM DUAL UNION ALL
    SELECT '13', 'MEP-PSD', '站台门系统', 'MEP', '机电设备', 'ZTM', 130 FROM DUAL UNION ALL
    SELECT '14', 'MEP-FES', '气体灭火系统', 'MEP', '机电设备', 'QM', 140 FROM DUAL UNION ALL
    SELECT '15', 'MEP-DEP', '车辆基地工艺设备', 'MEP', '机电设备', 'CCGY', 150 FROM DUAL UNION ALL

    -- 3. SYS 弱电与智能系统类 (8 项)
    SELECT '28', 'SYS-INTE', '弱电系统集成综合', 'SYS', '弱电系统', '99RD', 155 FROM DUAL UNION ALL
    SELECT '16', 'SYS-SIG', '信号系统', 'SYS', '弱电系统', 'XH', 160 FROM DUAL UNION ALL
    SELECT '17', 'SYS-COM', '通信系统', 'SYS', '弱电系统', 'TX', 170 FROM DUAL UNION ALL
    SELECT '18', 'SYS-AFC', '自动售检票系统', 'SYS', '弱电系统', 'AFC', 180 FROM DUAL UNION ALL
    SELECT '19', 'SYS-ISCS', '综合监控系统', 'SYS', '弱电系统', 'ZHJK', 190 FROM DUAL UNION ALL
    SELECT '20', 'SYS-BAS', '环境与设备监控系统', 'SYS', '弱电系统', 'BAS', 200 FROM DUAL UNION ALL
    SELECT '21', 'SYS-FAS', '火灾自动报警系统', 'SYS', '弱电系统', 'FAS', 210 FROM DUAL UNION ALL
    SELECT '22', 'SYS-SEC', '安防与门禁系统', 'SYS', '弱电系统', 'AF', 220 FROM DUAL UNION ALL

    -- 4. POW 供电与牵引动力类 (3 项)
    SELECT '29', 'POW-INTE', '供电系统综合', 'POW', '供电系统', '99GD', 225 FROM DUAL UNION ALL
    SELECT '23', 'POW-SUB', '供电设备系统', 'POW', '供电系统', 'GDSB', 230 FROM DUAL UNION ALL
    SELECT '24', 'POW-LINE', '供电线路系统', 'POW', '供电系统', 'GDXL', 240 FROM DUAL UNION ALL

    -- 5. INT 综合调试集成类 (1 项)
    SELECT '25', 'INT-COMM', '系统综合联调', 'INT', '系统联调', 'XT', 250 FROM DUAL
) src
ON (dest.MAJOR_CODE = src.MAJOR_CODE)
WHEN MATCHED THEN
    UPDATE SET dest.MAJOR_NAME = src.MAJOR_NAME, dest.CATEGORY_CODE = src.CATEGORY_CODE, dest.CATEGORY_NAME = src.CATEGORY_NAME, dest.ORDER_NUM = src.ORDER_NUM
WHEN NOT MATCHED THEN
    INSERT (ID, MAJOR_CODE, MAJOR_NAME, CATEGORY_CODE, CATEGORY_NAME, ORIGIN_CODE, ORDER_NUM, DEL_FLAG)
    VALUES (src.ID, src.MAJOR_CODE, src.MAJOR_NAME, src.CATEGORY_CODE, src.CATEGORY_NAME, src.ORIGIN_CODE, src.ORDER_NUM, '0');

7. 存量主数据完整清洗与推导迁移方案(含参建单位自动建档) ​

历史方案说明(2026-10-12 口径修订):本章节记载的「线路归并收敛至 23 条物理主线、工点 LINE_ID 重定向到归并主线」属于早期一次性迁移的候选方案,已被现行基线取代。现行基线为线路按建设期次/延线独立管理(见本文档「重要建表与迁移原则」第 4 条及需求分析),即 LINE_ID 直接表达具体工程建设期次(如 15号线一期、15号线二期),不再执行物理主线归并。

因此:

  • 本章 7.1 节「线路归并收敛至 23 条主线」、7.2 节「工点 LINE_ID 重定向到归并主线」、§4.1「归并重号」及 §7.4.1「线路 23 条」等描述与校验数量,仅作历史来源追溯,不代表当前数据基线;
  • 现行有效线路以 BIZ_LINE 实库为准(当前 Dev 有效线路 30 条,另含历史逻辑删除记录),迁移映射与校验数量应按「分期独立」重新核对后再执行;
  • 本章其余存量资产清洗(参建单位映射、标段下沉、专业字典、单位工程展开)逻辑仍然有效。

7.0 参建单位自动建档与业主/运营单位组织机构映射对照台账 ​

在清洗线路、标段与项目之前,针对存量涉及的业主单位、运营单位与乙方参建单位(施工、监理、设计)明确主数据处理与清洗规则:

1. 业主建设单位与运营单位处理策略(已建单位精准映射,未建单位保留文本) ​

存量主数据中填报的业主单位(BUILD_UNIT)与运营公司(OPERATING_COMPANY)存在改制更名与历史文本口径差异。经与当前系统组织架构(SYS_DEPT)实际核对:

  • 重庆交通建设管理有限公司(系统已建,ID: 101):原存量文本中的“重庆市铁路(集团)有限公司”、“重庆市铁路(集团)有限公司”是改制前历史名称,当前实体已在系统组织树中规范建档(DEPT_ID=101, PARENT_ID=100, ORG_TYPE='company')。清洗时无需新建,直接映射关联该 DEPT_ID 并将名称规范更新为当前标准企业全称;
  • 重庆轨道交通运营有限公司(系统已建,ID: 2083453529837531162):原存量文本中的“重庆市轨道交通(集团)有限公司”、“重庆市轨道集团有限公司”、“重庆市轨道交通(集团)有限公司”及“重庆交通开投轨道运营有限公司”是历史不同阶段的表述,当前实体已在系统组织树中规范建档(DEPT_ID=2083453529837531162, PARENT_ID=100, ORG_TYPE='company')。清洗时无需新建,直接映射关联该 DEPT_ID 并将名称规范更新为当前标准企业全称;
  • 未建档特殊运营公司:对于“重庆轨道九号线建设运营有限公司”、“重庆轨道四号线建设运营有限公司”、“重庆轨道十八号线建设运营有限公司”及分部描述(“运营一公司”、“运营二公司”),因暂未在集团统一组织架构中建档,严格遵循业务指示保留原文本字段描述,外键 ID 预留为空(NULL),后续待组织树完善时再统一关联。

2. 存量业主建设单位与运营单位改制重组映射对照台账 ​

序号历史存量文本记录当前标准单位全称 (DEPT_NAME)系统部门 ID (DEPT_ID)上级部门 ID (PARENT_ID)组织属性 (ORG_TYPE)业务定位说明处理策略
1重庆市铁路(集团)有限公司 / 重庆市铁路(集团)有限公司重庆交通建设管理有限公司101100 (开投集团)company核心业主建管主体 (如 15号线、27号线)映射至系统已建部门,绑定 ID: 101
2重庆市轨道交通(集团)有限公司 / 重庆市轨道集团有限公司 / 重庆市轨道交通(集团)有限公司 / 重庆交通开投轨道运营有限公司重庆轨道交通运营有限公司2083453529837531162100 (开投集团)company核心业主运营与建管主体 (如 4/6/7/17/18/24号线及环线/3/5/10号线)映射至系统已建部门,绑定 ID: 2083453529837531162
3重庆轨道九号线建设运营有限公司重庆轨道九号线建设运营有限公司NULL——PPP/特许经营项目线路单位遵循指示保留原文字描述,ID 设为 NULL
4重庆轨道四号线建设运营有限公司重庆轨道四号线建设运营有限公司NULL——PPP/特许经营项目线路单位遵循指示保留原文字描述,ID 设为 NULL
5重庆轨道十八号线建设运营有限公司重庆轨道十八号线建设运营有限公司NULL——PPP/特许经营项目线路单位遵循指示保留原文字描述,ID 设为 NULL
6运营一公司 / 运营二公司运营一公司 / 运营二公司NULL——历史运营分部口径遵循指示保留原文字描述,ID 设为 NULL

3. 参建单位处理策略(23 家纯乙方施工/监理/设计自动建档) ​

  • 从 BIZ_PROJECT_NODE_INFO 中去重提取施工单位(CONSTRUCT_UNIT)、监理单位(SUPERVISE_UNIT)、设计单位(DESIGN_UNIT);
  • 组织树规范挂接:存量缺失的 23 家参建单位统一挂载在现有“参建单位”根分组(PARENT_ID=2199000000000100013)下。注意区分根节点自身与新建子单位的属性:参建单位根节点 2199000000000100013 自身为 ORG_TYPE='group'、ANCESTORS='0'、PARENT_ID=0;下述属性是新建子单位取值——ANCESTORS='0,2199000000000100013'、ORG_TYPE='company'、DEPT_TYPE='2'、STATUS='0';
  • 过滤脏数据:剔除历史测试字符串(如 '2199000000000100001' 与 '哈哈'),清理名称换行符;
  • 主键生成:采用 19 位独立大整数序列 SEQ_SYS_DEPT_MIGRATE START WITH 2199000000000200001。
sql
-- 1. 幂等创建预清洗主键序列 (起始值位于独立大整数安全区间)
BEGIN
    EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_SYS_DEPT_MIGRATE START WITH 2199000000000200001 INCREMENT BY 1';
EXCEPTION
    WHEN OTHERS THEN NULL;
END;

-- 2. 批量将缺失的乙方参建单位档案规范插入 SYS_DEPT (统一挂载至参建单位根节点)
INSERT INTO SYS_DEPT (
    DEPT_ID, PARENT_ID, ANCESTORS, DEPT_NAME, ORDER_NUM, 
    STATUS, DEL_FLAG, DEPT_TYPE, ORG_TYPE, CREATE_TIME
)
SELECT 
    SEQ_SYS_DEPT_MIGRATE.NEXTVAL AS DEPT_ID,
    2199000000000100013 AS PARENT_ID,
    '0,2199000000000100013' AS ANCESTORS,
    u.UNIT_NAME AS DEPT_NAME,
    0 AS ORDER_NUM,
    '0' AS STATUS,
    '0' AS DEL_FLAG,
    '2' AS DEPT_TYPE,
    'company' AS ORG_TYPE,
    SYSDATE AS CREATE_TIME
FROM (
    SELECT DISTINCT TRIM(REPLACE(REPLACE(UNIT_NAME, CHR(10), ' '), CHR(13), ' ')) AS UNIT_NAME FROM (
        SELECT CONSTRUCT_UNIT AS UNIT_NAME FROM BIZ_PROJECT_NODE_INFO WHERE CONSTRUCT_UNIT IS NOT NULL
        UNION
        SELECT SUPERVISE_UNIT AS UNIT_NAME FROM BIZ_PROJECT_NODE_INFO WHERE SUPERVISE_UNIT IS NOT NULL
        UNION
        SELECT DESIGN_UNIT AS UNIT_NAME FROM BIZ_PROJECT_NODE_INFO WHERE DESIGN_UNIT IS NOT NULL
    ) t
    WHERE t.UNIT_NAME IS NOT NULL 
      AND TRIM(t.UNIT_NAME) <> ''
      AND t.UNIT_NAME NOT IN ('2199000000000100001', '哈哈')
) u
WHERE NOT EXISTS (
    SELECT 1 FROM SYS_DEPT d WHERE d.DEPT_NAME = u.UNIT_NAME AND d.DEL_FLAG = '0'
);

附:存量清洗待自动建档的 23 家参建单位档案台账(纯乙方施工/监理/设计) ​

序号抽取企业/联合体全称快照归属根节点分类 (DEPT_TYPE)专业类型说明
1中建二局、中铁十八局、中建五局参建单位 (ID:2199000000000100013)2 (参建单位)施工总承包联合体
2中国铁建股份有限公司、中国水利水电第四工程局参建单位 (ID:2199000000000100013)2 (参建单位)施工总承包联合体
3中国中铁股份有限公司联合体参建单位 (ID:2199000000000100013)2 (参建单位)施工总承包联合体
4中国建筑股份有限公司联合体参建单位 (ID:2199000000000100013)2 (参建单位)施工总承包联合体
5中国电力建设股份有限公司联合体参建单位 (ID:2199000000000100013)2 (参建单位)施工总承包联合体
6中国建筑第八工程局有限公司参建单位 (ID:2199000000000100013)2 (参建单位)施工总承包单位
7中铁第一勘察设计院集团有限公司、重庆市轨道交通设计研究院有限责任公司参建单位 (ID:2199000000000100013)2 (参建单位)总体总包设计联合体
8上海市隧道工程轨道交通设计研究院、中铁二院工程集团有限责任公司参建单位 (ID:2199000000000100013)2 (参建单位)设计联合体
9北京城建设计发展集团股份有限公司、中铁第六勘察设计院集团有限公司参建单位 (ID:2199000000000100013)2 (参建单位)设计联合体
10中铁一院、广州华申监理联合体,中铁华铁、智通建设监理联合体参建单位 (ID:2199000000000100013)2 (参建单位)监理联合体
11中铁二院/重庆公诚监理联合体、北京中铁诚业/重庆联盛参建单位 (ID:2199000000000100013)2 (参建单位)监理联合体
12天津新亚太工程建设监理有限公司;浙江江南工程管理股份有限公司、上海建浩工程顾问有限公司(联合体)参建单位 (ID:2199000000000100013)2 (参建单位)监理联合体
13河南长城铁路工程建设咨询有限公司(牵头人)、西恒工程咨询集团有限公司参建单位 (ID:2199000000000100013)2 (参建单位)监理联合体
14浙江江南工程管理股份有限公司·四川省城市建设工程咨询集团有限公司(联合体)参建单位 (ID:2199000000000100013)2 (参建单位)监理联合体
15铁四院、同致诚监理联合体,四川铁科、中煤科工监理联合体参建单位 (ID:2199000000000100013)2 (参建单位)监理联合体
16兰州交大工程咨询有限公司、湖南长顺项目管理有限公司(联合体)参建单位 (ID:2199000000000100013)2 (参建单位)监理联合体
17中国交建股份有限公司、中交路建南方公司等联合体参建单位 (ID:2199000000000100013)2 (参建单位)总承包联合体
18中国电力建设股份有限公司、中国水利水电第四工程局等联合体参建单位 (ID:2199000000000100013)2 (参建单位)总承包联合体
19重庆轨道院参建单位 (ID:2199000000000100013)2 (参建单位)设计单位
20北京城建设计发展集团股份有限公司、中铁第四/第六勘察设计院联合体参建单位 (ID:2199000000000100013)2 (参建单位)总体总包设计联合体
21京城建设计发展集团股份有限公司等联合体参建单位 (ID:2199000000000100013)2 (参建单位)设计联合体
22中国交通建设股份有限公司等联合体参建单位 (ID:2199000000000100013)2 (参建单位)总承包联合体
23中国中铁/中国建筑等联合体参建单位 (ID:2199000000000100013)2 (参建单位)总承包联合体

7.1 线路主数据分期与延线独立建线(规范编码,精确绑定工点与参建主体) ​

原工程树中存在 33 个线路分期节点。在工程建设管理平台中,线路的业务管理粒度为工程建设主线与分期/延线(例如:15号线一期与二期为两条独立线路,4号线西延、5号线北延、6号线东延、18号线北延作为独立工程延线建线,全网共维护 28 条分期主线与延线)。 线路编码采用统一规范:

  • 主线/全线:L01、L02、L03、L04、L05、L06、L09、L10、L26、L27、L28、L-LOOP、L-GB、L-JT、L-BT、L-BSYB、L-CQDZ;
  • 工程分期:两位线号加两位期数,如 L07-01、L15-01、L15-02、L17-01、L18-01、L19-01、L24-01;
  • 工程延线:线号加延线简称,如 L04-XY(西延)、L05-BY(北延)、L06-DY(东延)、L18-BY(北延)。 工点与标段按实际建设界面准确归属于对应的分期线路或延线线路。线路本身不挂接企业法人与组织单位(BIZ_LINE 实测 22 列中不含 BUILD_UNIT_ID/BUILD_UNIT_NAME/OPERATING_COMPANY_ID/OPERATING_COMPANY_NAME),业主与运营主体统一在建设项目与参建主体侧表达:

历史脚本说明(2026-10-13):以下 SQL 为早期「按物理主线归并 23 条线路」的候选脚本,已被现行「分期独立建线」基线取代,仅作历史来源追溯,禁止执行。该脚本仍向 BIZ_LINE 写入 BUILD_UNIT_ID/BUILD_UNIT_NAME/OPERATING_COMPANY_ID/OPERATING_COMPANY_NAME 四个已不存在的列,直接执行会因「无法解析的成员访问表达式」报错;其归并逻辑也与本节的分期独立口径冲突。现行线路迁移以 BIZ_LINE 实库为准,按分期独立核对后再执行。

sql
-- 1. 创建线路临时映射表 (记录原节点 ID 映射到归并后的主线路 ID)
CREATE TABLE TMP_LINE_MAP (
    OLD_NODE_ID BIGINT NOT NULL,
    NEW_LINE_ID BIGINT NOT NULL,
    LINE_CODE VARCHAR(64) NOT NULL
);

-- 2. 插入映射关系并执行归并迁移至 BIZ_LINE
WITH raw_lines AS (
    SELECT 
        n.NODE_ID,
        n.NODE_NAME,
        n.ORDER_NUM,
        info.LINE_STAGE,
        info.LINE_COLOR,
        info.LINE_LENGTH,
        info.ORIGIN_DESTINATION,
        info.SERVICE_AREA,
        info.BUILD_UNIT,
        info.OPERATING_COMPANY,
        CASE 
            WHEN n.NODE_NAME LIKE '%10号线%' THEN '10号线'
            WHEN n.NODE_NAME LIKE '%15号线%' THEN '15号线'
            WHEN n.NODE_NAME LIKE '%17号线%' THEN '17号线'
            WHEN n.NODE_NAME LIKE '%18号线%' THEN '18号线'
            WHEN n.NODE_NAME LIKE '%19号线%' THEN '19号线'
            WHEN n.NODE_NAME LIKE '%1号线%' THEN '1号线'
            WHEN n.NODE_NAME LIKE '%24号线%' THEN '24号线'
            WHEN n.NODE_NAME LIKE '%26号线%' THEN '26号线'
            WHEN n.NODE_NAME LIKE '%27号线%' THEN '27号线'
            WHEN n.NODE_NAME LIKE '%28号线%' THEN '28号线'
            WHEN n.NODE_NAME LIKE '%2号线%' THEN '2号线'
            WHEN n.NODE_NAME LIKE '%3号线%' THEN '3号线'
            WHEN n.NODE_NAME LIKE '%4号线%' THEN '4号线'
            WHEN n.NODE_NAME LIKE '%5号线%' THEN '5号线'
            WHEN n.NODE_NAME LIKE '%6号线%' THEN '6号线'
            WHEN n.NODE_NAME LIKE '%7号线%' THEN '7号线'
            WHEN n.NODE_NAME LIKE '%9号线%' THEN '9号线'
            WHEN n.NODE_NAME LIKE '%国博线%' THEN '国博线'
            WHEN n.NODE_NAME LIKE '%江跳线%' THEN '江跳线'
            WHEN n.NODE_NAME LIKE '%环线%' THEN '环线'
            WHEN n.NODE_NAME LIKE '%璧山云巴%' THEN '璧山云巴'
            WHEN n.NODE_NAME LIKE '%璧铜线%' THEN '璧铜线'
            WHEN n.NODE_NAME LIKE '%重庆东站%' THEN '重庆东站'
            ELSE '测试线路'
        END AS MERGED_NAME,
        CASE 
            WHEN n.NODE_NAME LIKE '%10号线%' THEN 'L10'
            WHEN n.NODE_NAME LIKE '%15号线%' THEN 'L15'
            WHEN n.NODE_NAME LIKE '%17号线%' THEN 'L17'
            WHEN n.NODE_NAME LIKE '%18号线%' THEN 'L18'
            WHEN n.NODE_NAME LIKE '%19号线%' THEN 'L19'
            WHEN n.NODE_NAME LIKE '%1号线%' THEN 'L01'
            WHEN n.NODE_NAME LIKE '%24号线%' THEN 'L24'
            WHEN n.NODE_NAME LIKE '%26号线%' THEN 'L26'
            WHEN n.NODE_NAME LIKE '%27号线%' THEN 'L27'
            WHEN n.NODE_NAME LIKE '%28号线%' THEN 'L28'
            WHEN n.NODE_NAME LIKE '%2号线%' THEN 'L02'
            WHEN n.NODE_NAME LIKE '%3号线%' THEN 'L03'
            WHEN n.NODE_NAME LIKE '%4号线%' THEN 'L04'
            WHEN n.NODE_NAME LIKE '%5号线%' THEN 'L05'
            WHEN n.NODE_NAME LIKE '%6号线%' THEN 'L06'
            WHEN n.NODE_NAME LIKE '%7号线%' THEN 'L07'
            WHEN n.NODE_NAME LIKE '%9号线%' THEN 'L09'
            WHEN n.NODE_NAME LIKE '%国博线%' THEN 'L-GB'
            WHEN n.NODE_NAME LIKE '%江跳线%' THEN 'L-JT'
            WHEN n.NODE_NAME LIKE '%环线%' THEN 'L-LOOP'
            WHEN n.NODE_NAME LIKE '%璧山云巴%' THEN 'L-BSYB'
            WHEN n.NODE_NAME LIKE '%璧铜线%' THEN 'L-BT'
            WHEN n.NODE_NAME LIKE '%重庆东站%' THEN 'L-CQDZ'
            ELSE 'L-TEST'
        END AS MERGED_CODE
    FROM BIZ_PROJECT_NODE n
    LEFT JOIN BIZ_PROJECT_NODE_INFO info ON n.NODE_ID = info.NODE_ID
    WHERE n.NODE_TYPE = 'LINE' AND n.DEL_FLAG = '0'
)
INSERT INTO TMP_LINE_MAP (OLD_NODE_ID, NEW_LINE_ID, LINE_CODE)
SELECT 
    r.NODE_ID AS OLD_NODE_ID,
    first_v.FIRST_ID AS NEW_LINE_ID,
    r.MERGED_CODE AS LINE_CODE
FROM raw_lines r
JOIN (
    SELECT MERGED_CODE, MIN(NODE_ID) AS FIRST_ID
    FROM raw_lines
    GROUP BY MERGED_CODE
) first_v ON r.MERGED_CODE = first_v.MERGED_CODE;

-- 3. 归并写入 BIZ_LINE 表 (收敛至 23 条真实物理主线路,保留业主/运营原文字描述)
INSERT INTO BIZ_LINE (
    LINE_ID, LINE_CODE, LINE_NAME, LINE_STAGE, COLOR_HEX,
    TOTAL_LENGTH_KM, ORIGIN_DESTINATION, SERVICE_AREA, 
    BUILD_UNIT_ID, BUILD_UNIT_NAME,
    OPERATING_COMPANY_ID, OPERATING_COMPANY_NAME,
    STATION_COUNT, BIZ_STATUS, ORDER_NUM, DEL_FLAG,
    CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, CREATE_DEPT
)
SELECT 
    m.NEW_LINE_ID AS LINE_ID,
    m.LINE_CODE,
    MAX(r.MERGED_NAME) AS LINE_NAME,
    COALESCE(LISTAGG(DISTINCT NULLIF(NULLIF(r.LINE_STAGE, '不分期'), ''), ',') WITHIN GROUP (ORDER BY r.NODE_ID), '全线') AS LINE_STAGE,
    COALESCE(MAX(r.LINE_COLOR), '#007ACC') AS COLOR_HEX,
    SUM(COALESCE(r.LINE_LENGTH, 0)) AS TOTAL_LENGTH_KM,
    MAX(r.ORIGIN_DESTINATION) AS ORIGIN_DESTINATION,
    MAX(r.SERVICE_AREA) AS SERVICE_AREA,
    CASE 
        WHEN MAX(r.BUILD_UNIT) LIKE '%铁路%集团%' THEN 101
        WHEN MAX(r.BUILD_UNIT) LIKE '%轨道%集团%' OR MAX(r.BUILD_UNIT) LIKE '%轨道交通%集团%' THEN 2083453529837531162
        ELSE NULL 
    END AS BUILD_UNIT_ID,
    CASE 
        WHEN MAX(r.BUILD_UNIT) LIKE '%铁路%集团%' THEN '重庆交通建设管理有限公司'
        WHEN MAX(r.BUILD_UNIT) LIKE '%轨道%集团%' OR MAX(r.BUILD_UNIT) LIKE '%轨道交通%集团%' THEN '重庆轨道交通运营有限公司'
        ELSE MAX(r.BUILD_UNIT) 
    END AS BUILD_UNIT_NAME,
    CASE 
        WHEN MAX(r.OPERATING_COMPANY) LIKE '%铁路%集团%' THEN 101
        WHEN MAX(r.OPERATING_COMPANY) LIKE '%轨道%集团%' OR MAX(r.OPERATING_COMPANY) LIKE '%轨道交通%集团%' OR MAX(r.OPERATING_COMPANY) LIKE '%开投轨道运营%' THEN 2083453529837531162
        ELSE NULL 
    END AS OPERATING_COMPANY_ID,
    CASE 
        WHEN MAX(r.OPERATING_COMPANY) LIKE '%铁路%集团%' THEN '重庆交通建设管理有限公司'
        WHEN MAX(r.OPERATING_COMPANY) LIKE '%轨道%集团%' OR MAX(r.OPERATING_COMPANY) LIKE '%轨道交通%集团%' OR MAX(r.OPERATING_COMPANY) LIKE '%开投轨道运营%' THEN '重庆轨道交通运营有限公司'
        ELSE MAX(r.OPERATING_COMPANY) 
    END AS OPERATING_COMPANY_NAME,
    0 AS STATION_COUNT,
    'CONSTRUCT' AS BIZ_STATUS,
    MIN(COALESCE(r.ORDER_NUM, 0)) AS ORDER_NUM,
    '0' AS DEL_FLAG,
    MIN(r.CREATE_BY), MIN(r.CREATE_TIME), MIN(r.UPDATE_BY), MIN(r.UPDATE_TIME), MIN(r.CREATE_DEPT)
FROM TMP_LINE_MAP m
JOIN (
    SELECT 
        n.NODE_ID, n.ORDER_NUM, n.CREATE_BY, n.CREATE_TIME, n.UPDATE_BY, n.UPDATE_TIME, n.CREATE_DEPT,
        info.LINE_STAGE, info.LINE_COLOR, info.LINE_LENGTH, info.ORIGIN_DESTINATION, info.SERVICE_AREA,
        info.BUILD_UNIT, info.OPERATING_COMPANY,
        CASE 
            WHEN n.NODE_NAME LIKE '%10号线%' THEN '10号线'
            WHEN n.NODE_NAME LIKE '%15号线%' THEN '15号线'
            WHEN n.NODE_NAME LIKE '%17号线%' THEN '17号线'
            WHEN n.NODE_NAME LIKE '%18号线%' THEN '18号线'
            WHEN n.NODE_NAME LIKE '%19号线%' THEN '19号线'
            WHEN n.NODE_NAME LIKE '%1号线%' THEN '1号线'
            WHEN n.NODE_NAME LIKE '%24号线%' THEN '24号线'
            WHEN n.NODE_NAME LIKE '%26号线%' THEN '26号线'
            WHEN n.NODE_NAME LIKE '%27号线%' THEN '27号线'
            WHEN n.NODE_NAME LIKE '%28号线%' THEN '28号线'
            WHEN n.NODE_NAME LIKE '%2号线%' THEN '2号线'
            WHEN n.NODE_NAME LIKE '%3号线%' THEN '3号线'
            WHEN n.NODE_NAME LIKE '%4号线%' THEN '4号线'
            WHEN n.NODE_NAME LIKE '%5号线%' THEN '5号线'
            WHEN n.NODE_NAME LIKE '%6号线%' THEN '6号线'
            WHEN n.NODE_NAME LIKE '%7号线%' THEN '7号线'
            WHEN n.NODE_NAME LIKE '%9号线%' THEN '9号线'
            WHEN n.NODE_NAME LIKE '%国博线%' THEN '国博线'
            WHEN n.NODE_NAME LIKE '%江跳线%' THEN '江跳线'
            WHEN n.NODE_NAME LIKE '%环线%' THEN '环线'
            WHEN n.NODE_NAME LIKE '%璧山云巴%' THEN '璧山云巴'
            WHEN n.NODE_NAME LIKE '%璧铜线%' THEN '璧铜线'
            WHEN n.NODE_NAME LIKE '%重庆东站%' THEN '重庆东站'
            ELSE '测试线路'
        END AS MERGED_NAME
    FROM BIZ_PROJECT_NODE n
    LEFT JOIN BIZ_PROJECT_NODE_INFO info ON n.NODE_ID = info.NODE_ID
    WHERE n.NODE_TYPE = 'LINE' AND n.DEL_FLAG = '0'
) r ON m.OLD_NODE_ID = r.NODE_ID
GROUP BY m.NEW_LINE_ID, m.LINE_CODE;

7.2 工点主数据线路外键重定向对齐 ​

通过临时映射表,将原属于分期节点(如属于 15号线二期)的工点,其 LINE_ID 统一重定向到归并后的主线路 ID(例如重庆西站与全线 82 个工点全部统一挂在 L15 15号线下):

sql
UPDATE BIZ_SITE_MASTER s
SET s.LINE_ID = (SELECT m.NEW_LINE_ID FROM TMP_LINE_MAP m WHERE m.OLD_NODE_ID = s.LINE_ID)
WHERE EXISTS (SELECT 1 FROM TMP_LINE_MAP m WHERE m.OLD_NODE_ID = s.LINE_ID);

覆盖度与冲突说明(2026-10-10 实测):

  • 存量 920 条有效工点的 LINE_ID 全部指向 NODE_TYPE='LINE' 的旧节点(920/920,无 NULL、无其他类型),因此本步骤对全部有效工点生效,不存在漏重定向的记录;
  • 归并后会出现 96 组 (LINE_ID, STATION_CODE) 重号,但 §4 的唯一键已取 (LINE_ID, STATION_NAME),本 UPDATE 不会违反唯一约束;重号的成因、分布与处置见 §4.1。

7.3 标段主数据下沉提取(重定向线路 ID,PROJECT_ID 置空避免悬空外键) ​

sql
INSERT INTO BIZ_BID_SECTION (
    BID_ID, PROJECT_ID, LINE_ID, BID_CODE, BID_NAME,
    COVERAGE_MODE, BID_CATEGORY, BID_TYPE,
    GENERAL_CONTRACT_UNIT_ID, GENERAL_CONTRACT_UNIT_NAME,
    SUPERVISE_UNIT_ID, SUPERVISE_UNIT_NAME,
    START_DATE, END_DATE, BIZ_STATUS, DEL_FLAG,
    CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, CREATE_DEPT
)
SELECT 
    n.NODE_ID AS BID_ID,
    NULL AS PROJECT_ID, -- 存量 BIZ_PROJECT 当前为 0 行,避免悬空外键;待后续在建设项目管理中正式立项后关联合同
    COALESCE(m.NEW_LINE_ID, n.PARENT_ID) AS LINE_ID,
    COALESCE(n.NODE_CODE, 'BID_' || n.NODE_ID) AS BID_CODE,
    n.NODE_NAME AS BID_NAME,
    'SPECIFIED' AS COVERAGE_MODE,
    info.BID_CATEGORY,
    info.BID_TYPE,
    d_const.DEPT_ID AS GENERAL_CONTRACT_UNIT_ID,
    info.CONSTRUCT_UNIT AS GENERAL_CONTRACT_UNIT_NAME,
    d_sup.DEPT_ID AS SUPERVISE_UNIT_ID,
    info.SUPERVISE_UNIT AS SUPERVISE_UNIT_NAME,
    info.PLAN_START_DATE AS START_DATE,
    info.PLAN_END_DATE AS END_DATE,
    'CONSTRUCT' AS BIZ_STATUS,
    '0' AS DEL_FLAG,
    n.CREATE_BY, n.CREATE_TIME, n.UPDATE_BY, n.UPDATE_TIME, n.CREATE_DEPT
FROM BIZ_PROJECT_NODE n
LEFT JOIN BIZ_PROJECT_NODE p ON n.PARENT_ID = p.NODE_ID
LEFT JOIN TMP_LINE_MAP m ON m.OLD_NODE_ID = (CASE WHEN p.NODE_TYPE = 'PACKAGE' THEN p.PARENT_ID ELSE n.PARENT_ID END)
LEFT JOIN BIZ_PROJECT_NODE_INFO info ON n.NODE_ID = info.NODE_ID
LEFT JOIN SYS_DEPT d_const ON d_const.DEPT_NAME = info.CONSTRUCT_UNIT AND d_const.DEL_FLAG = '0'
LEFT JOIN SYS_DEPT d_sup ON d_sup.DEPT_NAME = info.SUPERVISE_UNIT AND d_sup.DEL_FLAG = '0'
WHERE n.NODE_TYPE = 'BID' AND n.DEL_FLAG = '0';

存量标段管辖模式说明:存量 35 个标段一律写为 COVERAGE_MODE='SPECIFIED',即按 §7.4 推导出的实际管辖工点清单逐条落 BIZ_BID_SITE_SCOPE,不把任何存量标段自动识别为 FULL_LINE。原因是存量数据没有"全线统包"的结构化标记,只能从标段专业类型推测,属推断事实。因此:

  • 存量标段(含信号、供电等实际为全线统包的标段)迁移后按"指定工点型"运行,后续新增工点不会自动级联补齐单位工程(§3.2 级联机制只对 FULL_LINE 生效);
  • 业务需在“工程标段管理”页面把这些标段改为 FULL_LINE,改后由 §3.2 机制补齐后续新增工点的单位工程;
  • 是否在迁移脚本中按 BID_CATEGORY/BID_TYPE 预判 FULL_LINE 属业务决策,本次不做,避免按推测改写标段管辖语义。

7.4 存量单位工程节点推导归入(BID-SITE 精确外键关联与单位工程落库) ​

sql
-- 1. 推导标段管辖工点明细表 BIZ_BID_SITE_SCOPE (427 个父级为 BID 的节点)
INSERT INTO BIZ_BID_SITE_SCOPE (ID, BID_ID, SITE_ID, DEL_FLAG, CREATE_TIME)
SELECT 
    n.NODE_ID AS ID,
    n.PARENT_ID AS BID_ID,
    n.SITE_MASTER_ID AS SITE_ID,
    '0' AS DEL_FLAG,
    n.CREATE_TIME
FROM BIZ_PROJECT_NODE n
WHERE n.NODE_TYPE = 'SITE' 
  AND n.DEL_FLAG = '0'
  AND EXISTS (SELECT 1 FROM BIZ_BID_SECTION b WHERE b.BID_ID = n.PARENT_ID);

-- 2. 推导标段涵盖专业 BIZ_BID_MAJOR (使用幂等序列生成主键防溢出,废除 LATERAL 改用 CTE,支持多专业统包标段展开)
-- 【次要专业推导说明】:以下针对机电复合标段(BID_CATEGORY='JD' 且未指定细分弱电系统)默认扩展建筑装饰专业(CIV-DECO),
-- 属于存量无结构化字典关联时的数据初始化推断规则;上线后由业务方/工程部在前端“标段涵盖专业”界面进行最终核对与灵活维护调整。
BEGIN
    EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_BIZ_BID_MAJOR START WITH 100001 INCREMENT BY 1';
    -- 起始值 100001 与平台雪花 ID 区间(约 1.76×10^18 / 2.08×10^18)相距极远,无碰撞风险;
    -- 本表仅约 40 行,无需占用大整数安全区间。运行期新增由后端雪花 ID 生成。
EXCEPTION
    WHEN OTHERS THEN NULL;
END;

WITH bid_majors_expanded AS (
    -- (1) 单专业标段与按 BID_TYPE 精准映射的系统专业
    SELECT 
        b.BID_ID,
        CASE 
            WHEN b.BID_TYPE = 'GD' THEN 'POW-SUB'
            WHEN b.BID_TYPE = 'XH' THEN 'SYS-SIG'
            WHEN b.BID_TYPE = 'TX' THEN 'SYS-COM'
            WHEN b.BID_TYPE = 'ZHJK' THEN 'SYS-ISCS'
            WHEN b.BID_TYPE = 'AFC' THEN 'SYS-AFC'
            WHEN b.BID_TYPE = 'ZTM' THEN 'MEP-PSD'
            WHEN b.BID_TYPE = 'DFT' THEN 'MEP-ELEV'
            WHEN b.BID_TYPE = 'CCGY' THEN 'MEP-DEP'
            WHEN b.BID_CATEGORY = 'TJ' OR b.BID_CATEGORY LIKE '%土建%' THEN 'CIV-ARCH'
            WHEN b.BID_CATEGORY = 'JD' OR b.BID_CATEGORY LIKE '%机电%' THEN 'MEP-INTE'
            ELSE 'CIV-ARCH'
        END AS MAJOR_CODE,
        '1' AS IS_PRIMARY
    FROM BIZ_BID_SECTION b

    UNION ALL

    -- (2) 多专业统包复合标段 (如机电-01标~05标) 扩展建筑装饰专业
    SELECT 
        b.BID_ID,
        'CIV-DECO' AS MAJOR_CODE,
        '0' AS IS_PRIMARY
    FROM BIZ_BID_SECTION b
    WHERE b.BID_CATEGORY = 'JD' AND (b.BID_TYPE IS NULL OR b.BID_TYPE = '')
)
INSERT INTO BIZ_BID_MAJOR (ID, BID_ID, MAJOR_CODE, MAJOR_NAME, IS_PRIMARY, DEL_FLAG, CREATE_TIME)
SELECT 
    SEQ_BIZ_BID_MAJOR.NEXTVAL AS ID,
    e.BID_ID,
    e.MAJOR_CODE,
    m.MAJOR_NAME,
    e.IS_PRIMARY,
    '0' AS DEL_FLAG,
    SYSDATE
FROM bid_majors_expanded e
JOIN BIZ_MAJOR_DICT m ON m.MAJOR_CODE = e.MAJOR_CODE;

-- 3. 平滑落库法定单位工程 BIZ_UNIT_PROJECT (遵循国标规范命名: {线路}-{标段}-{工点}-{专业})
-- 幂等创建单位工程序列 (杜绝多专业展开时复用 n.NODE_ID 导致的主键冲突)
BEGIN
    EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_BIZ_UNIT_PROJECT START WITH 3000000000000000001 INCREMENT BY 1';
EXCEPTION
    WHEN OTHERS THEN NULL;
END;

INSERT INTO BIZ_UNIT_PROJECT (
    UNIT_PROJECT_ID, BID_ID, SITE_ID, LINE_ID,
    UNIT_PROJECT_CODE, UNIT_PROJECT_NAME,
    MAJOR_CODE, MAJOR_NAME, ACCEPT_STATUS, DEL_FLAG,
    CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, CREATE_DEPT
)
SELECT 
    SEQ_BIZ_UNIT_PROJECT.NEXTVAL AS UNIT_PROJECT_ID,
    n.PARENT_ID AS BID_ID,
    s.SITE_MASTER_ID AS SITE_ID,
    b.LINE_ID,
    l.LINE_CODE || '-' || b.BID_CODE || '-' || s.STATION_CODE || '-' || bm.MAJOR_CODE AS UNIT_PROJECT_CODE,
    s.STATION_NAME || ' ' || bm.MAJOR_NAME || '工程' AS UNIT_PROJECT_NAME,
    bm.MAJOR_CODE,
    bm.MAJOR_NAME,
    CASE 
        WHEN n.BIZ_STATUS = 'PASSED' THEN 'PASSED'
        WHEN n.BIZ_STATUS = 'CHECKING' THEN 'CHECKING'
        ELSE 'PENDING'
    END AS ACCEPT_STATUS,
    '0' AS DEL_FLAG,
    n.CREATE_BY, n.CREATE_TIME, n.UPDATE_BY, n.UPDATE_TIME, n.CREATE_DEPT
FROM BIZ_PROJECT_NODE n
JOIN BIZ_SITE_MASTER s ON n.SITE_MASTER_ID = s.SITE_MASTER_ID
JOIN BIZ_BID_SECTION b ON n.PARENT_ID = b.BID_ID
JOIN BIZ_LINE l ON b.LINE_ID = l.LINE_ID
JOIN BIZ_BID_MAJOR bm ON b.BID_ID = bm.BID_ID
WHERE n.NODE_TYPE = 'SITE' 
  AND n.DEL_FLAG = '0';

-- 4. 清理临时映射表
DROP TABLE TMP_LINE_MAP;

7.4.1 迁移目标行数(用于执行后逐表校验) ​

目标表预期行数口径
BIZ_LINE2333 个 LINE 节点按物理主线归并
BIZ_BID_SECTION35有效 BID 节点
BIZ_BID_SITE_SCOPE427父级为 BID 的有效 SITE 节点
BIZ_BID_MAJOR4035 个标段各 1 个主专业 + 5 个机电复合标段(BID_CATEGORY='JD' 且 BID_TYPE 为空)各追加 1 个 CIV-DECO
BIZ_UNIT_PROJECT484逐标段 工点数 × 专业数 求和(427 个节点展开后为 484)
BIZ_MAJOR_DICT29§6 脚本 MERGE 的专业条数
SYS_DEPT 新增参建单位23§7.0 从 BIZ_PROJECT_NODE_INFO 去重提取的乙方单位

434 个父级为 LINE 的 SITE 节点不生成单位工程(无标段归属),其工点已由 BIZ_SITE_MASTER 完整收录;待后续创建标段时正向关联。执行后按上表逐表 COUNT(*) 回读,任一不符即视为迁移异常。

7.4.2 单位工程编码消歧规则 ​

UNIT_PROJECT_CODE 按 {LINE_CODE}-{BID_CODE}-{STATION_CODE}-{MAJOR_CODE} 生成。由于 §4.1 所述 STATION_CODE 在归并线路内可能重号,编码文本在同一线路内可能重复,故补充消歧规则:

  • 生成编码时,若同一线路内该 STATION_CODE 不唯一,则改用 {LINE_CODE}-{BID_CODE}-{STATION_CODE}-{SEQ}-{MAJOR_CODE},其中 SEQ 为该工点在重号组内按 SITE_MASTER_ID 升序的两位序号(01、02…);
  • 单位工程的唯一性不依赖编码文本,由 UK_UNIT_PROJECT(BID_ID, SITE_ID, MAJOR_CODE) 保证;UNIT_PROJECT_CODE 只作展示与人工核对用;
  • 迁移脚本需按上述规则生成编码,确保编码文本全局不重复(可通过 COUNT(*) 与 COUNT(DISTINCT UNIT_PROJECT_CODE) 相等校验)。

7.5 下游业务表外键改造清单(2026-10-10 按真实列名核对) ​

存量下游业务表全部 0 行(已逐表回读确认),因此外键改造只做结构变更、无需数据回填。下表按真实列名列出改造动作;PROJECT_NODE_ID、*_NODE_ID、UNIT_NODE_ID 一律退场,改为指向新主数据的标准外键。

7.5.1 携带旧工程树引用、必须改造的表(19 张) ​

实施状态(2026-10-11 已完成):19 张表的下游 ALTER(新增 BID_ID/SITE_ID/LINE_ID/UNIT_PROJECT_ID 列)已全部执行并回读确认;代码已全部切换至新外键(旧树 API/Service/页面退场);PROJECT_NODE_ID/UNIT_NODE_ID/SITE_NODE_ID/LINE_NODE_ID/BID_NODE_ID 共 15 个旧树列已按用户授权物理删除(*_NODE_NAME/*_NODE_PATH 保留为派生快照列)。

#真实表名现存旧树列改造动作
1BIZ_ENGINEERING_CHANGEPROJECT_NODE_ID、NODE_RECORD_JSON、LINE_NAME增 BID_ID、SITE_ID、UNIT_PROJECT_ID、LINE_ID;删 PROJECT_NODE_ID;NODE_RECORD_JSON 改为标段/工点/单位工程路径快照;LINE_NAME 保留为快照
2BIZ_ENGINEERING_PROCEDURE_UNITUNIT_NODE_ID、BID_ID(已有)增 UNIT_PROJECT_ID、SITE_ID;删 UNIT_NODE_ID;BID_ID 语义改为 BIZ_BID_SECTION.BID_ID
3BIZ_ENGINEERING_PROCEDURE_PROGRESSUNIT_NODE_ID增 UNIT_PROJECT_ID;删 UNIT_NODE_ID
4BIZ_ENGINEERING_PROCEDURE_RESULTUNIT_NODE_ID增 UNIT_PROJECT_ID;删 UNIT_NODE_ID
5BIZ_ENGINEERING_PROCEDURE_STAGE_UNITUNIT_NODE_ID增 UNIT_PROJECT_ID;删 UNIT_NODE_ID
6BIZ_BIDDING_TENDER_DOCUMENTPROJECT_NODE_ID、LINE_NAME增 PROJECT_ID、BID_ID;删 PROJECT_NODE_ID
7BIZ_BIDDING_SUBORDINATE_TENDERPROJECT_NODE_ID、LINE_NAME同上
8BIZ_BIDDING_PROJECT_APPROVALPROJECT_NODE_ID、LINE_NAME同上
9BIZ_BIDDING_EVALUATIONPROJECT_NODE_ID、LINE_NAME同上
10BIZ_BIDDING_FILE_REVIEWPROJECT_NODE_ID、LINE_NAME同上
11BIZ_BIDDING_ACTIVITY_LOGPROJECT_NODE_ID增 PROJECT_ID、BID_ID;删 PROJECT_NODE_ID
12BIZ_CZW_SLAG_LEDGERLINE_NODE_ID/_NAME/_PATH、BID_NODE_ID/_NAME/_PATH增 LINE_ID、BID_ID、SITE_ID;删 *_NODE_ID;*_NODE_NAME/*_NODE_PATH 保留为快照
13BIZ_OPERATION_DOCK_TRANSFERLINE_ID(指向旧树)、LINE_NAMELINE_ID 语义改为 BIZ_LINE.LINE_ID;增 SITE_ID
14BIZ_OPERATION_DOCK_PROBLEMLINE_ID(同上)、LINE_NAME同上
15BIM_MODEL_ASSETSITE_NODE_ID增 SITE_ID;删 SITE_NODE_ID;DISCIPLINE_CODE 与 BIZ_MAJOR_DICT.MAJOR_CODE 对齐
17BIZ_PROJECT_ENGINEERING_SCOPENODE_ID整表退场(见 §8)
18BIZ_USER_PROJECT_SCOPENODE_ID整表退场(见 §8)
19BIZ_PROJECT_SCOPE_TEMPLATE_ITEMNODE_ID整表退场(见 §8)

招投标其余表(BIZ_BIDDING_AWARD、BID_OPENING、PUBLIC_NOTICE、EVALUATION_BIDDER、CLARIFICATION_BATCH、LISTING_VERSION)实测不含 PROJECT_NODE_ID,通过上级单据关联,不改造。

7.5.2 已具备标准外键、仅需语义对齐的表(5 张) ​

#真实表名现有列动作
1BIZ_QUALITY_RECORDLINE_ID、BID_ID、SITE_ID、DIVISION_ID三维外键已具备,ID 语义对齐新主数据;增 UNIT_PROJECT_ID 以对齐单位工程台账;DIVISION_ID(分部)语义待核对
2BIZ_QUALITY_CATALOGSITE_ID确认指向 BIZ_SITE_MASTER;补 LINE_ID 以支持线路维度过滤
3BIZ_ENGINEERING_PROCEDURELINE_ID、BID_CATEGORY确认 LINE_ID 语义;BID_CATEGORY 与 BIZ_BID_SECTION.BID_CATEGORY 对齐
4BIZ_INVEST_PLAN_ITEMLINE_ID、LINE_NAME、PROJECT_ID确认 LINE_ID 语义对齐 BIZ_LINE
5BIZ_CZW_SLAG_LEDGER_PLANSITE_ID、SITE_NAME该 SITE_ID 指消纳场(BIZ_CZW_DISPOSAL_SITE),不是工点;不改名、不参与工点过滤

7.5.3 明确不改造的表 ​

  • 安质环 BIZ_SQE_* 七张表(ACCIDENT、ASSESSMENT、MONTHLY_SUPERVISION、RECTIFICATION_REPLY、TARGET、TARGET_UNIT、WORK_PLAN):实测均无 line/bid/site/node 列。按业务地图 · 权限模型现行基线,安质环为“有意不过滤”,本方案不新增标段/工点过滤;如需按标段/工点隔离,属新建维度,须另行立项并同步该基线表。
  • 规划管理 BIZ_PLANNING_*:CURRENT_NODE_CODE/NODE_CODE/NODE_NAME 是流程节点编码,不是工程树节点,不改造。
  • 工程投资 BIZ_INVEST_PLAN/BIZ_INVEST_IMPLEMENTATION/BIZ_INVEST_ISSUE*:其 CURRENT_NODE_CODE/NODE_NAME 同为流程节点,不改造。
  • 造价单位 BIZ_COST_UNIT*、公文相关表:无工程树引用。
  • 联合体资料:全局档案与成员表保留;旧项目联合体相关表保留历史,不再作为现行参建引用来源,现行引用见 BIZ_PROJECT_PARTICIPANT。

7.5.4 改造顺序 ​

与 §7.1—§7.4 主数据迁移同批次执行,顺序为:建表与索引(§4)→ 既有表 ALTER(§5)→ 专业字典初始化(§6)→ 主数据迁移(§7.0—§7.4)→ 下游表 ALTER(本节) → 旧表退场(§8)。每张表 ALTER 后回读列结构确认;下游表均为 0 行,无需数据回填与一致性校验。


8. 真实废弃表清单与安全退场顺序(共 10 张表) ​

在完成上述存量数据清洗和验证后,按依赖逆序归档并废除真实存在的 10 张旧表:

执行授权提示:DROP TABLE 属共享对象的破坏性 DDL,按仓库协作规则需要用户对具体表清单明确授权后才能执行,不得由实施方自行决定。本节的清单是方案建议,实施时必须先取得授权,执行前逐表核对环境、对象与引用情况,执行后回读确认;建议先 RENAME 归档(如 _BAK_20261010 后缀)并观察一个验证周期后再物理删除。

序号废除表名真实存在性原用途废除原因与承接关系实施状态 (2026-10-10)
1BIZ_PROJECT_NODE_INFO曾存在旧工程节点扩展信息表45项属性全量下沉至 BIZ_LINE 与 BIZ_BID_SECTION已物理删除 (DROP CASCADE)
2BIZ_PROJECT_NODE曾存在旧工程树主表(968行)主数据解耦为 BIZ_LINE、BIZ_BID_SECTION、BIZ_UNIT_PROJECT已物理删除 (DROP CASCADE)
3BIZ_BID_COVERAGE_EXCLUSION曾存在标段排除工点例外表新架构由笛卡尔积自然控制,无需排除补丁已物理删除 (DROP CASCADE)
4BIZ_BID_COVERAGE_RULE曾存在标段覆盖规则表由 BIZ_BID_SECTION.COVERAGE_MODE 和 BIZ_BID_MAJOR 替代已物理删除 (DROP CASCADE)
5BIZ_USER_PROJECT_SCOPE曾存在旧用户工程范围表由极简 BIZ_USER_DATA_SCOPE 全面替代已物理删除 (DROP CASCADE)
6BIZ_PROJECT_ENGINEERING_SCOPE曾存在旧工程范围关联表废弃旧工程树体系已物理删除 (DROP CASCADE)
7BIZ_PROJECT_USER_SCOPE曾存在旧用户项目关联表废弃旧树体系已物理删除 (DROP CASCADE)
8BIZ_PROJECT_SCOPE_TEMPLATE曾存在旧范围模板表废弃繁复的模板授权机制已物理删除 (DROP CASCADE)
9BIZ_PROJECT_SCOPE_TEMPLATE_ITEM曾存在旧范围模板明细表废弃旧模板体系已物理删除 (DROP CASCADE)
10BIZ_PROJECT_SCOPE_TEMPLATE_USER曾存在旧范围模板用户表废弃旧模板体系已物理删除 (DROP CASCADE)

退场执行证据:2026-10-10 获得用户明确授权(方案 B)后,通过 DM8 驱动按依赖逆序逐表执行 DROP TABLE CASCADE 并 COMMIT。执行后回读 ALL_TABLES WHERE OWNER='DIGITAL_CONSTRUCTION' 确认以上 10 张旧表已 100% 物理清除。


9. 技术债与命名约定(随本方案一并收口) ​

本方案是工程基础与工程数据权限的一次结构重构,下列平台级遗留随本次实施一并处理或明确定性。状态为 2026-10-10 代码核对结果,未核对项已注明。

9.1 超管双 ID 硬编码收敛 ​

  • 现状:SystemConstants.java:63-91 定义 SUPER_ADMIN_USER_ID=1761100000000000001、LEGACY_SUPER_ADMIN_USER_ID=1、SUPER_ADMIN_ROLE_ID、LEGACY_SUPER_ADMIN_ROLE_ID 并提供超管判定入口;ProjectScopeServiceImpl.java:366-367 仍直接引用两个用户 ID 常量拼装候选集。
  • 处理:本方案退场 ProjectScopeServiceImpl 的工程树授权逻辑后,删除该处直接引用;超管判定统一走 SystemConstants 的单一入口,业务代码不直接引用 ID 常量。本方案新增的数据权限切面同样只调用该入口。

9.2 权限刷新异常处理 ​

  • SaPermissionImpl.refreshLoginUserPermission 已于 2026-09-30 补 log.warn,并保留“刷新失败保留失效标记、下次请求按最新数据重试”的降级语义(已实施)。
  • 同文件 isPermissionStale(:113-115)与 getPermissionService(:126-128)仍为静默降级(分别返回 false / null),属有意容错;建议至少补 debug 级日志,便于排查 Redis 不可用与容器启动期问题。

9.3 首页接口权限定性 ​

  • HomepageController 的 /business/homepage/todo-summary(HomepageController.java:42)仅要求登录态,无 @SaCheckPermission。
  • 定性为设计如此:聚合数据已按当前登录人裁剪,接口不返回他人数据,不新增权限码。结论记录于本模块文档;后续若新增跨人聚合字段须重新评估授权。

9.4 字典 biz_node_type 残留值 ​

  • 开发库 SYS_DICT_DATA 中 biz_node_type 现存 LINE/PACKAGE/BID/SITE/PROJECT 五个值。本方案退场折叠工程树后,PACKAGE、PROJECT 不再有对应节点类型;LINE/BID/SITE 也不再作为节点类型使用(线路、标段、工点各自成为独立主数据表)。
  • 处理:实施完成后确认无引用即停用该字典或整组下线,列入数据清理批次;停用属数据操作,按项目 MCP 执行并回读。

9.5 Scope 一族命名约定 ​

本方案落地后,范围与权限相关的载体收敛如下:

概念载体状态
用户数据范围授权BIZ_USER_DATA_SCOPE本方案新建,唯一的数据权限载体
标段 / 工点 / 线路授权BIZ_USER_DATA_SCOPE.SCOPE_TYPE 的 BID/SITE/LINE本方案新建
标段管辖工点范围BIZ_BID_SITE_SCOPE本方案新建(业务范围,非权限)
用户工程范围(旧)BIZ_USER_PROJECT_SCOPE本方案退场
项目用户关联(旧)BIZ_PROJECT_USER_SCOPE本方案退场
项目工程范围(旧)BIZ_PROJECT_ENGINEERING_SCOPE本方案退场
工程范围模板(旧)BIZ_PROJECT_SCOPE_TEMPLATE 三表本方案退场

约定:

  1. 上述旧四张表退场后,权限侧只保留 BIZ_USER_DATA_SCOPE,不再新增以 Scope 结尾的近义表名;
  2. 数据权限切面的注解不沿用 @DataScope 命名——该名称与 2026-09-29 已整体移除的 @DataPermission / DataScopeType 机制近似,易被误读为旧机制回归。详细设计 §4.2 的注解名按 @EngDataScope(工程数据范围)执行,切面类 ProjectBidSiteScopeAspect 名称保留;
  3. 同一业务含义只允许一个名称;禁止再出现“用户工程范围 / 项目用户范围 / 项目工程范围 / 范围模板”这类互相近似的并列命名。

10. 变更记录 ​

版本日期变更内容变更原因确认人
v1.02026-10-10完成全新双核四维解耦架构数据库设计初稿彻底替代旧折叠工程树结构AI Pair Designer
v1.12026-10-10规范统一权限码为 business:<资源>:<动作>;增加 CASE WHEN DEL_FLAG='0' THEN ... 函数条件唯一索引方案解决 DM8 不支持标准 WHERE 条件唯一索引问题AI Pair Designer / 用户审核中
v1.22026-10-10增加参建单位与业主单位外键强关联 (SYS_DEPT.DEPT_ID) 与缺少自动建档机制;补充 32 家待清洗企业台账解决企业仅存文本无关联问题AI Pair Designer / 用户审核中
v1.32026-10-10解决线路分期归并(收敛至23条主线);废除 LATERAL 改用 CTE;序列防溢出根除 LINE_CODE 冲突与 DM8 语法不兼容AI Pair Designer / 用户审核中
v1.42026-10-10多专业标段在工点下全量展开生成单位工程;主键采用独立序列 SEQ_BIZ_UNIT_PROJECT满足多专业统包标段法定验收实体展开需求AI Pair Designer / 用户审核中
v1.52026-10-10规范 6.0 自动建档挂接至集团(100)与参建单位(2199000000000100013)根节点;补齐 ANCESTORS 与 ORG_TYPE对齐既有组织架构树规范AI Pair Designer / 用户审核中
v1.62026-10-10① 增加执行顺序总览,将专业字典初始化前置为第 6 节(存量迁移前置依赖,根除 0 行缺陷);② 删除第 5 节 SITUATION 反向收窄操作,保留实际 TEXT 物理列;③ 按实际物理列更新 3.2 字段矩阵,并补齐设计 vs 实际差异对照表;④ 将轨道交通/铁路集团 3 家企业校准为业主分类(挂接100);⑤ 补充多专业次要专业推导业务确认说明;⑥ 同步单位工程主键序列与雪花 ID 体系设计说明响应实施前最后把关审核意见,确保脚本执行顺序与数据物理完整性 100% 具备可执行性AI Pair Designer / 用户审核中
v1.72026-10-10补充核心业主与运营单位改制重组映射台账:明确重庆市铁路(集团)对应已建的重庆交通建设管理有限公司(DEPT_ID=101)、重庆市轨道交通(集团)对应已建的重庆轨道交通运营有限公司(DEPT_ID=2083453529837531162),未建档特殊运营公司保留文本、ID 置空;7.0 节改为按业主/运营/参建三类分别给出处理策略响应业务方关于改制更名与已建单位直接复用的指示AI Pair Designer / 用户审核中
v1.82026-10-10新增第 9 节“技术债与命名约定”:超管双 ID 收敛、权限刷新异常处理现状、首页接口权限定性、字典 biz_node_type 残留值清理、Scope 一族命名对照与命名规则(切面注解改 @EngDataScope,不沿用已移除机制的 @DataScope);原第 9 节变更记录顺延为第 10 节承接 2026-09-30 权限治理方案稿中仍然有效的平台级遗留项,避免其随方案稿删除而失档待用户确认
v1.92026-10-10按开发库实测与真实列名复核修正:① §4 工点唯一键由 (LINE_ID, STATION_CODE) 改为 (LINE_ID, STATION_NAME) 并新增 §4.1 说明 96 组归并重号的成因与处置,使 §7.2 重定向不再撞唯一索引;② 新增 §7.4.1 迁移目标行数(线路 23/标段 35/管辖工点 427/标段专业 40/单位工程 484/字典 25)与 §7.4.2 单位工程编码消歧规则;③ 新增 §7.5 下游业务表外键改造清单(19 张需改造 + 5 张语义对齐 + 不改造范围),替换原错列的模块级清单;④ 删除 §5 对 BIZ_PROJECT 的三处反向收窄(INTRO 实际为 TEXT 却被改 VARCHAR(4000) 等),并按实际列修正 §3.3 字段类型;⑤ §3.2/§3.2.1 修正 IS_HUB/LNG/LAT 等实际类型与“22 项字段”口径;⑥ §7.0/§7.2 澄清参建单位根节点与子单位属性区别、补重定向覆盖度说明;⑦ §7.3 补存量标段 COVERAGE_MODE 说明;⑧ §8 补 DROP 需明确授权的执行提示;⑨ 专业字典口径统一为 25 项承接 2026-10-10 开发库回读结论,消除方案与真实结构、真实数据的不一致,使脚本与清单可直接执行待用户确认
v2.12026-10-11扩充 §6 行业标准专业字典 BIZ_MAJOR_DICT 初始化脚本至 29 项(大类 5 个:CIV 7 项、MEP 10 项、SYS 8 项、POW 3 项、INT 1 项),新增 4 项综合性专业类别:CIV-INTE(土建综合)、MEP-TOTAL(大机电系统综合,含机电+弱电+供电)、SYS-INTE(弱电系统集成综合)、POW-INTE(供电系统综合);同步更新 §2 表目录、§3.11 阶段路线图与 §7.4.1 迁移目标行数校验指标(字典行数由 25 改为 29)响应用户业务指示,支撑土建总包、站后大机电系统总包等统包标段模式,从源头避免笛卡尔积展开导致的单位工程膨胀已确认

项目参建主体引用增量表 BIZ_PROJECT_PARTICIPANT ​

物理列类型可空约束与含义
PROJECT_IDBIGINT否项目 ID;复合主键第 1 列
PARTICIPANT_ROLEVARCHAR(20)否DESIGN/SUPERVISE/CONSTRUCT;复合主键第 2 列
SUBJECT_TYPEVARCHAR(20)否UNIT/CONSORTIUM;复合主键第 3 列
SUBJECT_IDBIGINT否企业 SYS_DEPT.DEPT_ID 或联合体 BIZ_CONSORTIUM.ID;复合主键第 4 列
ORDER_NUMINT否同角色选择顺序

复合主键为四个身份列,服务端事务校验跨表引用。旧三类参建 CSV 仅为独立 UNIT 项的兼容投影,不展开联合体成员。旧项目联合体表保留历史,不执行 DROP/TRUNCATE,不再写入现行关联。用户提供的两分页 126 条资料作为本轮分组复核来源;上一轮摊平数量不能证明联合体分组正确,实际执行与回读见本轮测试报告。

项目候选权限与存量分组计划补充 ​

项目角色只凭项目 query/add/edit 任一权限读取项目专用企业/联合体候选,不要求单位或联合体管理菜单权限;项目查询直接返回联合体牵头/成员名称的只读投影,详情不另外请求联合体档案。此投影仅服务项目选择和详情,不能借项目权限修改联合体档案。

2026-10-14 开发库已按源数据分组完成迁移:126 个项目 × 3 角色 = 378 个角色范围,其中 111 个非空角色字段,实际保存 175 项混合主体(127 UNIT + 48 CONSORTIUM),新增 22 个联合体及 70 条成员关系;回读共 49 个有效联合体、145 条成员关系。用户已确认其中 19 种原资料未明确牵头的组合暂按原首成员登记,备注保留牵头待核对,不解释为已确认实际牵头。实际写入、页面回归与组织身份纠正见最新测试报告。

2026-10-14 企业身份与组织归属精确治理 ​

对象实际变更字段结果与边界
原枢纽档案 2199000000000600036SYS_DEPT.DEL_FLAG、UPDATE_TIME与资源公司 2083453529837531163 同一主体;引用迁移后逻辑删除重复档案,不物理删除历史记录
13 个项目建设引用BIZ_PROJECT.BUILD_UNIT_IDS、BUILD_UNIT_ID、BUILD_UNIT、UPDATE_TIME12 项单企业引用及 1 项学院+枢纽多选只替换枢纽身份与现名;原集合顺序、其他企业和所属公司不改
通远 2199000000000600051SYS_DEPT.PARENT_ID、ANCESTORS、UPDATE_TIME父级资源公司,祖级 0,100,2083453529837531163;保留 dept_type=1/org_type=company。依据历史体系归属,当前股权及存续沿革待核对
渝西 2199000000000600042SYS_DEPT.PARENT_ID、ANCESTORS、ORG_TYPE、UPDATE_TIME父级交通建设 101,祖级 0,100,101,分类 joint_venture;项目建设角色和企业 ID 保留
本任务临时项目 2110047346210955264BIZ_PROJECT.DEL_FLAG、UPDATE_TIME;精确关系清理页面清空保存及数据库回读后软删;参建关系已为 0,未删除其他项目或共享档案

执行前扫描开发库 450 个 ID/集合字段及组织子节点。枢纽旧 ID 仅在上述 13 个项目建设字段引用,无其他模块引用;资源公司的 2 个既有已删岗位不迁移。三个待调整组织均无子节点。通过项目 MCP 的一个带旧值校验与行锁的匿名事务块执行,不新增业务 SQL 文件,不修改受保护配置。回读旧枢纽项目/参建关系/联合体成员/牵头引用均为 0,有效项目恢复 126、有建设单位项目 111,混合主体仍为 175。SYS_DEPT 无 REMARK 列,待核对沿革只记录业务文档,不臆造字段。

江跳线运营公司分类精确纠正(2026-10-14) ​

SYS_DEPT.DEPT_ID=2109011604266926081(重庆江跳线轨道交通运营管理有限公司)仅将 ORG_TYPE 从 company 改为 joint_venture,同时维护 UPDATE_TIME,精确影响 1 行。保留 DEPT_TYPE=1、PARENT_ID=100、ANCESTORS=0,100、启用状态和稳定 ID;集团下节点在此表示参股企业,不能解释为一级直属全资公司。当前改组后直接归属待核对,不猜测挂交通建设或轨道运营;不与江跳二期及重庆轨道江跳建设运营等不同主体合并。执行前全库 450 个 ID/集合字段与子节点扫描仅命中该企业自身,无业务、岗位、用户绑定或子节点,无项目引用需要迁移。带企业名、旧类型、父级及状态条件更新后回读一致。

标段—建设项目多对多关系增量(2026-10-14) ​

物理列类型可空约束与含义
BIZ_BID_PROJECT_REL.BID_IDBIGINT否标段身份;复合主键第1列
BIZ_BID_PROJECT_REL.PROJECT_IDBIGINT否建设项目身份;复合主键第2列

复合主键 (BID_ID, PROJECT_ID),不添加主项目、状态或审计继承字段。旧 BIZ_BID_SECTION.PROJECT_ID 为单关联兼容投影:恰好一个关系时保留,零/多关系置 NULL。共同项目内编码唯一由关系范围和项目锁下后端校验实现;不能继续用旧 PROJECT_ID 单列唯一规则限制多项目合同。BIZ_UNIT_PROJECT.BID_ID 不改变,不增加项目字段,不复制429单位工程。

迁移范围:全库既有有效旧单项目关联回填关系;15号线31标段的原PROJECT_ID全部悬空,本任务按原description明确证据及用户确认范围计划处理为13项单期、8项系统标双期、10项未知清悬空留空待核。原graph一期土建11标在当前标段中缺失,不擅自建标段;其余无关悬空关系不扩展治理。实际DDL、影响行数、关系数量及回读以本轮测试证据为准,本节不预判执行通过。

多项目关系实际建表与15号线迁移(2026-10-14) ​

通过项目 MCP 在开发库建立 BIZ_BID_PROJECT_REL,两列均为 BIGINT NOT NULL,复合主键 (BID_ID, PROJECT_ID);BID_ID 外键指向 BIZ_BID_SECTION.BID_ID,PROJECT_ID 外键指向 BIZ_PROJECT.PROJECT_ID;新增项目索引 IDX_BID_PROJECT_REL_PROJECT(PROJECT_ID)。表无金额副本、无主项目字段、不复用单列 BaseMapper 按 ID 操作。关系由标段保存事务按集合替换,删除标段时同步清理。

建表后仅回填有效标段的有效旧项目关联,实际0条(当前31标段均指向不存在的历史项目)。随后按锁定项目及标段、旧值精确匹配的一个原子事务调整15号线31个标段,新增39条关系,并更新兼容 BIZ_BID_SECTION.PROJECT_ID:单项目23行存唯一项目ID,跨期8行置NULL;其余商务字段、工点、单位工程和授权均不改。匿名块只返回末条语句影响数1,总影响31标段/39关系通过前后逐对象回读确认。

关联集合标段编码(前缀均为CQ15)数量依据
一期 PJ0641(2110000000000000025)TJ01、TJ02、TJ03、TJ04、TJ05、TJ06、TJ07、TJ08、TJ09、JD01、JD02、JD0312老源土建描述;住建及承建方公开土建5/9标;机电1/2标所辖车站区间均在一期,机电3标仅九曲河主所且环评明示一期
二期 PJ0642(2110000000000000017)TJ12、TJ13、TJ14、TJ15、TJ16、TJ17、TJ18、TJ19、TJ-CLJD、JD04、JD0511老源土建描述;政府明示土建16/19;车辆基地为张家湾,公开招标明示二期;机电4/5标管辖范围位于二期(欢乐谷至九曲河东边界区间属于二期,不把边界终点误当一期合同)
一期及二期AFC01、DFT01、GD01、GY01、JK01、TX01、XH01、ZTM018当前合同范围含两期车站、区间或两期场段;机电总包公告明确覆盖一期与二期,不能按“全线”二字或一个工点推断所有合同都跨期

来源:老平台两页126条中的一期/二期项目UUID及图节点 description;官方土建05施工信息、承建方一期土建5/9标说明、政府二期土建16标及范围、政府二期土建19铺轨范围、一期环评主所与停车场、两期站点及场段的业主资料、张家湾车辆段二期招标、两期机电总包招标范围。机电子标合同期别根据已维护管辖范围与官方分期交叉确认,是本轮证据推导,不把总包公告当作逐个JD编号的明示。

回读:一期筛选20个唯一标段,二期筛选19个唯一标段,两者交集为8个同ID标段;合并去重仍为31,不是39个合同。旧悬空项目ID引用0。429个单位工程、431条标段工点关系及1条BID授权的逐行完整快照在迁移前后完全一致。两列关系不会扩大BID授权,也不把跨期合同总金额分别复制到项目金额账。

参建单位与联合体历史对象 ​

2026-10-12 的开发库结构清理记录显示,早期项目内联合体维护使用的 BIZ_PROJECT_CONSORTIUM 与 BIZ_PROJECT_CONSORTIUM_MEMBER 在删除前均为空,执行后回读不存在。当前联合体档案和成员分别由 BIZ_CONSORTIUM、BIZ_CONSORTIUM_MEMBER 维护,项目当前参建主体关系使用 BIZ_PROJECT_PARTICIPANT;历史 BIZ_PROJECT_CONSORTIUM_REL 不作为当前项目参建主体来源。上述为当时结构记录,当前实际库以纳管入口回读为准。