# 六项机制(ROHS) 与 安监(slaj) 数据库合并分析报告 > 分析时间:2026-07-10 ## 一、总体概况 | 项目 | 数量 | |------|------| | ROHS SQL文件表总数 | 203 | | ROHS 真实业务表 | 174 | | ROHS 备份/MV/日志表(排除) | 29 | | 安监 slaj schema 表总数 | 3,234 | | **两库重叠表** | **72** | | **ROHS独有表(安监中不存在)** | **102** | | 安监独有表(ROHS中不存在) | 3,162 | ## 二、重叠表分析 ### 2.1 完全一致(28张)— 可直接兼容 这28张表字段名称和类型完全一致,仅存在 PostgreSQL 类型名写法差异(如 CHAR(32) vs BPCHAR、VARCHAR(100) vs VARCHAR、DECIMAL vs NUMERIC),这些在 PostgreSQL 中是同义词,不影响兼容性。 | ROHS表 | 安监表 | 列数 | |--------|--------|------| | ATT_ENG_CWS | att_eng_cws | 31 | | ATT_ENG_DIKE | att_eng_dike | 38 | | ATT_ENG_HYST | att_eng_hyst | 39 | | ATT_ENG_IRR | att_eng_irr | 42 | | ATT_ENG_OTHE | att_eng_othe | 30 | | ATT_ENG_PUST | att_eng_pust | 34 | | ATT_ENG_RES | att_eng_res | 42 | | ATT_ENG_SD | att_eng_sd | 31 | | ATT_ENG_WADI | att_eng_wadi | 34 | | ATT_ENG_WAGA | att_eng_waga | 33 | | ATT_MED_BASE | att_med_base | 22 | | ATT_ORG_UWAT_EXT | att_org_uwat_ext | 66 | | BIS_ACCI_EXP_REP | bis_acci_exp_rep | 8 | | BIS_ACCI_INVE | bis_acci_inve | 10 | | BIS_ACCI_PROG | bis_acci_prog | 7 | | BIS_ACCI_REC_REP | bis_acci_rec_rep | 10 | | BIS_ENG_SARE | bis_eng_sare | 24 | | BIS_HIDD_MAJ_VERI | bis_hidd_maj_veri | 11 | | BIS_HIDD_RECT_PROG | bis_hidd_rect_prog | 7 | | BIS_HIDD_REC_REP | bis_hidd_rec_rep | 10 | | BIS_MAJ_HIDD_SUP | bis_maj_hidd_sup | 13 | | HAZARD_SOURCE | hazard_source | 18 | | OBJ_SE | obj_se | 10 | | T_BUSI_PLAN_DISCLOSURE | t_busi_plan_disclosure | 11 | | T_DICT_MAJOR_BUILDING | t_dict_major_building | 13 | | T_DICT_MAJOR_COMMON | t_dict_major_common | 15 | | T_DICT_MAJOR_ED | t_dict_major_ed | 12 | | T_DICT_MAJOR_SOURCE | t_dict_major_source | 14 | ### 2.2 有差异需要处理(44张) 差异分为以下几类: #### A. STR_TO_DATE ↔ TO_DATE 列名差异(11张表) ROHS 使用 `STR_TO_DATE` 作为时间戳列,安监使用 `TO_DATE`。这是同一个字段的不同命名,合并时需统一。 涉及表:ATT_ENG_BASE、ATT_ORG_BASE、ATT_ORG_UWAT_BASE、OBJ_ACCI、OBJ_ENG、OBJ_HIDD、OBJ_TEND、REL_BIS_MED、REL_ENG_ORG、REL_ENG_ORG_UWAT、REL_PROJ_ORG、REL_TEND_ORG、REL_USER_TEND、T_BUSI_RISK_THRESHOLD #### B. TIMESTAMP ↔ DATE 类型差异(约15张表) ROHS 使用 `TIMESTAMP` 类型,安监使用 `DATE` 类型。这是精密度的差异: - TIMESTAMP 存储到秒/毫秒级别 - DATE 只存储到日期级别 涉及字段:START_DATE, COMP_DATE, CREATE_TIME, UPDATE_TIME, BORN_DATE 等 > **注意**:如果安监现有的数据没有时间部分,升级为 TIMESTAMP 是安全的(向下兼容)。 涉及表:ATT_ENG_BASE、ATT_PERS_BASE、ATT_PERS_EXT、OBJ_HAZARD、T_BUSI_CONTROL_MEASURE、T_BUSI_CONTROL_TERM、T_BUSI_HAZARD_ARCHIVE、T_BUSI_HAZARD_REPORT、T_BUSI_HAZARD_WARM、T_BUSI_HAZ_IDEN、T_BUSI_INSPECT_ITEM、T_BUSI_INSPECT_RECORD、T_BUSI_INSPECT_TASK、T_BUSI_INSPECT_TASK_ITEM、T_BUSI_RESP_PER #### C. SYS系统表 — 列名完全不同(4张表)⚠️ 高风险 ROHS 和安监的系统管理表使用了**完全不同的列命名规范**: | 表 | ROHS列数 | 安监列数 | 说明 | |----|---------|---------|------| | SYS_MENU | 26 | 20 | ROHS用 ID/NAME/CODE;安监用 MENU_ID/MENU_NAME/PERMS | | SYS_NOTICE | 13 | 10 | ROHS用 ID/TITLE/TYPE_ID;安监用 NOTICE_ID/NOTICE_TITLE/NOTICE_TYPE | | SYS_POST | 16 | 10 | ROHS用 ID/POST_RESP/DEP_ID;安监用 POST_ID/POST_SORT/STATUS | | SYS_ROLE | 17 | 14 | ROHS用 ID/NAME/CODE/VALID;安监用 ROLE_ID/ROLE_NAME/ROLE_KEY/STATUS | | SYS_USER | 34 | 20 | ROHS用 ID/NAME/LOGIN/CODE;安监用 USER_ID/USER_NAME/REAL_NAME | | SYS_ROLE_MENU | 2 | 2 | ROLE_ID: VARCHAR(40) vs INT8(BIGINT);MENU_ID: VARCHAR(40) vs INT8(BIGINT) | | SYS_USER_ROLE | 4 | 2 | ROHS多了 GROUP_MANAGER, SORT_NUM | > **⚠️ 这是最大的风险点**。ROHS 和 安监的 SYS_ 系统表实际上是两套完全不同的系统框架: > - ROHS 似乎基于若依(RuoYi)框架的旧版本(若依早期版本使用这些列名) > - 安监似乎基于若依(RuoYi)框架的新版本或自行改造版本 > > 这两套系统表**不能简单合并**,需要评估是否统一使用其中一套框架的系统表。 #### D. 其他列差异(约10张表) 这些表存在个别的列多/少差异: | 表 | 差异 | |----|------| | ATT_ORG_EXT | 安监多了 ACC_EMECONTA, ACC_EMECONTA_MPOH | | ATT_PERS_BASE | ROHS多了 MODIFIER, FROM_DATE, NODE_CODE;安监多了 COLL_TIME, UPD_TIME, REC_PERS | | ATT_PERS_EXT | ROHS多了 ORG_GUID;WORK_DATE: DECIMAL vs VARCHAR | | BIS_HIDD_INVE | 安监多了 ORG_MANAGE, HIDD_CONTENT | | BIS_HIDD_RECT_ACCE | ROHS多了 ACCEPT_ORG, ACCEPT_DATE, ACCEPT_OPINION, CURL_RESULT | | BIS_HIDD_RECT_IMPL | ROHS多了 RECT_DEPT | | OBJ_ACCI | ROHS多了 DATA_TYPE, HIDD_GUID, HAZ_GUID, ACCI_SITU, DATA_SIGN | | T_BUSI_CONPLAN_BASIC | ROHS多了 HAZ_GUID, ENG_GUID, EMER_TYPE, AREA_TYPE | | T_BUSI_HAZ_IDEN | ROHS多了 OTLCOL_QGW_TNYGTS;安监多了 HAZ_REMARK, ORG_PER, ORG_PHONE 等人员字段 | | T_BUSI_REGULAR_EVALU | 列名完全不一致(可能是不同的评估模块) | | T_BUSI_REVIEW_INFO | 列名完全不一致(可能是不同的评审模块) | | T_DICT_HIDD_ENG | 列名完全不一致(结构不同) | | ATT_ORG_BASE | AD_CODE: VARCHAR vs BPCHAR 类型不兼容 | ## 三、ROHS独有表(102张新表)— 需要在安监中新建 ### 3.1 按分类汇总 | 分类 | 数量 | 涉及的表 | |------|------|---------| | **业务类** (T_BUSI_) | 33 | ACCI_EVALUATE, ACCOUNT_RECORD, BD_TOTAL, CONT_MEAS, DRILL_EVA, DRILL_RECORD, ENG_PART, ENG_SAFE_EVALUATE, EVALUATE, GROUP_INFO, HARD_TOTAL, HIDD_EVALUATE, HIDD_TOTAL, HUIZONG_TOTAL, INSURE_INFO, INSURE_PRE, MEET_TOTAL, ORG_SAFE_EVALUATE, POSSIBLE_ACCIDENT, POSTRES, POSTRES_PERSON, SAFEORG_INFO, SIX_BOOST_MWR, SMS_RECORD, STR_PUNISH, SUPPLIES_RESERVE, TEAM_INFO, TRAIN_RECORD 等 | | **系统管理类** (SYS_) | 29 | APPLICATION, CODE, CODE_LINE, DATA_SOURCE, DEPARTMENT, DOCMENT/DOCUMENT, DOCUMENT_TYPE, LOGIN_LOG, MESSAGE_LOG, NOTICE_TYPE, OAUTH_CLIENT_DETAILS, OPERATE_LOG, ORGANIZATION, RESOURCE, ROLE_* (多个), ROUTE_CONFIG, SETTING, SOCIAL_DETAILS, SYSTEM_CONFIG, TABLES, TENANT, USER_CATEGORY, USER_NOTICE | | **关系类** (REL_) | 13 | DRILL_EVA, DRILL_SC, INSURE_TEND, JOB_ROLE, ORG_ZCPT, PERS_ZCPT, SYS_PERS, USER_APP, USER_APPOINT, USER_JOB, USER_ROLE, USER_ROLE_EXT | | **对象类** (OBJ_) | 9 | AD, BAAD, ORG_ZCPT, ROLE 等 | | **附件/属性类** (ATT_) | 7 | APP_BASE, JOB_BASE, ORG_DEP, PERSON_EXT, ROLE_BASE, USER_EXT | | **字典类** (T_DICT_) | 2 | SCOR_CERTI, SCOR_PUNISH | | **配置类** (T_CON_) | 2 | SAFE_ENU, SLAJ_LOG | | **SSO类** (T_SSO_) | 2 | USERROLE_SM3, USER_SM3 | | **其他** | 5 | BDMS_ATT_ENG_PUST, PPRTY_NOTICE_INFO, HARD_TOTAL, HIDD_STATISTICS, BIS_HIDD_REC_REP20250113 | ### 3.2 重点关注的六项机制业务表 这些是"六项机制"的特有业务表,应该是合并的核心目标: - **T_BUSI_SIX_BOOST_MWR** (32列) — 六项机制主表 - **T_BUSI_HIDD_TOTAL** (47列) — 隐患汇总 - **T_BUSI_HUIZONG_TOTAL** (19列) — 汇总表 - **T_BUSI_BD_TOTAL** (13列) — 北斗卫星汇总(?) - **T_BUSI_HARD_TOTAL** (35列) — 硬件汇总 - **T_BUSI_MEET_TOTAL** (19列) — 会议汇总 - **T_BUSI_CONT_MEAS** (21列) — 管控措施 - **T_BUSI_DATA_TYPE_LEVEL** (24列) — 数据类型级别 - **T_BUSI_DRILL_EVA** (10列) — 演练评估 - **T_BUSI_DRILL_RECORD** (16列) — 演练记录 - **T_BUSI_EVALUATE** (18列) — 评估 - **T_BUSI_HIDD_EVALUATE** (18列) — 隐患评估 - **T_BUSI_INSURE_INFO** (34列) — 保险信息 - **T_BUSI_INSURE_PRE** (16列) — 保险保费 - **T_BUSI_POSTRES** (9列) — 岗位职责 - **T_BUSI_POSTRES_PERSON** (10列) — 岗位人员 - **T_BUSI_ACCI_EVALUATE** (18列) — 事故评估 - **T_BUSI_ACCOUNT_RECORD** (10列) — 台账记录 - **T_BUSI_ENG_PART** (14列) — 工程参与 - **T_BUSI_ENG_SAFE_EVALUATE** (14列) — 工程安全评估 - **T_BUSI_ORG_SAFE_EVALUATE** (15列) — 单位安全评估 - **T_BUSI_POSSIBLE_ACCIDENT** (7列) — 可能事故 - **T_BUSI_STR_PUNISH** (12列) — 处罚 - **T_BUSI_SUPPLIES_RESERVE** (14列) — 物资储备 - **T_BUSI_TEAM_INFO** (11列) — 班组信息 - **T_BUSI_TRAIN_RECORD** (13列) — 培训记录 - **T_BUSI_SAFEORG_INFO** (8列) — 安评机构信息 - **T_BUSI_GROUP_INFO** (10列) — 分组信息 - **T_BUSI_SMS_RECORD** (4列) — 短信记录 ## 四、合并可行性评估 ### 4.1 可合并的部分 ✅ 1. **28张完全一致的表**:结构完全兼容,数据可直接迁移 2. **STR_TO_DATE/TO_DATE差异的表**:只需统一列名 3. **TIMESTAMP/DATE差异的表**:将 DATE 升级为 TIMESTAMP 即可(向下兼容) 4. **102张ROHS独有表**:直接在安监 schema 中执行 CREATE TABLE 即可 ### 4.2 需要谨慎处理的部分 ⚠️ 1. **SYS_ 系统表冲突**(重大风险): - ROHS 和安监使用完全不同的系统管理表结构 - 两套表分别维护各自的用户、菜单、角色、岗位等 - **建议**:保留安监现有 SYS_ 表不变,ROHS 的应用代码改为使用安监的 SYS_ 表体系 - 或者:将 ROHS 的 SYS_ 表作为独立的扩展表,不作为主表 2. **列结构不一致的业务表**(约10张): - 需要逐表分析业务逻辑,确认哪些列是需要保留的 - **推荐做法**:保留两边的列(取并集),缺失的列加 ALTER TABLE ADD COLUMN 3. **不同框架的表**: - T_BUSI_REGULAR_EVALU(定期评估)- 两库列结构完全不同 - T_BUSI_REVIEW_INFO(评审信息)- 两库列结构完全不同 - T_DICT_HIDD_ENG(隐患工程字典)- 两库列结构完全不同 - **建议**:这些可能是独立的业务模块,ROHS版本应该是新版本,建议用 ROHS 的表结构替换 ### 4.3 Schema 差异 - ROHS 使用 schema: **SLAJ_ROHS**(大写) - 安监使用 schema: **slaj**(小写) - PostgreSQL 中 schema 名区分大小写(双引号内) - 合并时建议统一使用 `slaj` schema,将 ROHS 的表移至 `slaj` 中 ## 五、合并路线图建议 ### 阶段一:低风险表迁移 1. 执行 28 张完全一致表的 DDL(结果已兼容,可跳过) 2. 创建 102 张 ROHS 独有表到安监 slaj schema ### 阶段二:差异表处理 1. 对 STR_TO_DATE/TO_DATE 差异的 14 张表,统一为 TO_DATE 2. 对 TIMESTAMP/DATE 差异的 15 张表,统一为 TIMESTAMP 3. 对列差异的 10 张业务表,取并集添加缺失列 ### 阶段三:系统表整合(需业务决策) 1. 决定 SYS_ 表的使用策略(两套并存 vs 统一) 2. 修改六项机制应用代码适配安监的 SYS_ 表 3. 迁移 SYS_ 相关的独有表 ### 阶段四:T_BUSI_REGULAR_EVALU / T_BUSI_REVIEW_INFO / T_DICT_HIDD_ENG 1. 分析业务逻辑,确认是否可以完全替换 2. 如需保留两边数据,需要进行数据迁移 ## 六、数据文件 分析过程中生成的中间文件: - `_rohs_tables.json` — ROHS SQL文件解析结果 - `_slaj_table_names.json` — 安监数据库所有表名 - `_db_overlap_cols.json` — 重叠表的安监列定义 - `_comparison_report.json` — 完整对比数据 - `_final_compare.js` — 最终对比脚本