人脸识别

dev
huwei 2026-07-29 14:50:55 +08:00
parent 4a512c35f9
commit 094b1ab5ad
26 changed files with 3160 additions and 42 deletions

View File

@ -0,0 +1,822 @@
-- =====================================================================
-- 线上数据库结构同步脚本 - 第一部分新增缺失表26张
-- 生成时间: 2026-07-29
-- 来源: 本地库 192.168.20.100:33080/safety-eval-service
-- 目标: 线上库 nlb-kd2xz70qhllfet2koj.cn-beijing.nlb.aliyuncsslb.com:33068/safety-eval-service
-- 说明: 全部使用 CREATE TABLE IF NOT EXISTS幂等、纯新增不影响已有数据。
-- 执行前请人工确认。本脚本不包含任何 DROP/删除操作。
-- =====================================================================
-- 1. 安评客户表
CREATE TABLE IF NOT EXISTS `eval_customer` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '评价机构id',
`customer_name` varchar(200) NOT NULL COMMENT '企业名称/客户名称',
`credit_code` varchar(18) DEFAULT NULL COMMENT '统一社会信用代码',
`district_code` varchar(32) DEFAULT NULL COMMENT '属地编码(重庆市区级,见 ChongqingDistrictEnum)',
`industry_code` varchar(64) DEFAULT NULL COMMENT '所属行业编码(见 IndustryEnum)',
`business_address` varchar(500) DEFAULT NULL COMMENT '经营地址',
`longitude` varchar(64) DEFAULT NULL COMMENT '经度(定位)',
`latitude` varchar(64) DEFAULT NULL COMMENT '纬度(定位)',
`enterprise_status_code` int DEFAULT NULL COMMENT '企业状态编码(见 EnterpriseStatusEnum)',
`principal_name` varchar(50) DEFAULT NULL COMMENT '主要负责人',
`principal_phone` varchar(20) DEFAULT NULL COMMENT '负责人电话',
`legal_representative` varchar(50) DEFAULT NULL COMMENT '法定代表人',
`legal_representative_phone` varchar(20) DEFAULT NULL COMMENT '法人电话',
`enterprise_scale_code` varchar(32) DEFAULT NULL COMMENT '企业规模编码(见 EnterpriseScaleEnum)',
`eval_expire_date` date DEFAULT NULL COMMENT '评价到期日',
`customer_status_code` int DEFAULT '1' COMMENT '客户状态编码(见 CustomerStatusEnum,1正常2停用)',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
KEY `idx_eval_customer_org` (`org_id`),
KEY `idx_eval_customer_credit` (`credit_code`),
KEY `idx_eval_customer_name` (`customer_name`),
KEY `idx_eval_customer_district` (`district_code`),
KEY `idx_eval_customer_industry` (`industry_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='安评客户表';
-- 2. 安评项目主表
CREATE TABLE IF NOT EXISTS `eval_project` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '评价机构id',
`customer_id` bigint NOT NULL COMMENT '被评价客户id(eval_customer.id)',
`project_no` varchar(64) NOT NULL COMMENT '项目编号(系统生成)',
`project_name` varchar(200) NOT NULL COMMENT '项目名称',
`eval_type_code` varchar(32) DEFAULT NULL COMMENT '评价类型编码(见EvalTypeEnum:PRE/ACCEPT/STATUS)',
`customer_contact_name` varchar(50) DEFAULT NULL COMMENT '客户负责人(手填)',
`customer_contact_phone` varchar(20) DEFAULT NULL COMMENT '联系电话(手填)',
`is_statutory` tinyint NOT NULL DEFAULT '0' COMMENT '是否法定项目 1是 0否',
`clock_in_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'NOT_CLOCKED_IN' COMMENT '人员打卡状态 未打卡 → NOT_CLOCKED_IN人员未到齐 → NOT_ALL_PRESENT正常 → NORMAL',
`district_code` varchar(32) DEFAULT NULL COMMENT '项目所在地编码(见ChongqingDistrictEnum)',
`plan_start_date` date DEFAULT NULL COMMENT '项目开始时间',
`plan_end_date` date DEFAULT NULL COMMENT '项目完成时间',
`customer_address` varchar(500) DEFAULT NULL COMMENT '客户所在地(手填)',
`longitude` varchar(32) DEFAULT NULL COMMENT '经度(手填)',
`latitude` varchar(32) DEFAULT NULL COMMENT '纬度(手填)',
`checkin_radius_meters` int DEFAULT NULL COMMENT '打卡有效范围(米,手填)',
`participants_json` json DEFAULT NULL COMMENT '参与人员JSON:[{"name":"名称","id":1}]',
`project_leader_name` varchar(50) DEFAULT NULL COMMENT '项目负责人(手填)',
`archive_flag` int NOT NULL DEFAULT '0' COMMENT '项目归档(1归档0未归档)',
`archive_date` datetime DEFAULT NULL COMMENT '项目归档时间',
`archive_transferor_name` varchar(255) DEFAULT NULL COMMENT '项目归档移交人',
`archive_archivist_name` varchar(255) DEFAULT NULL COMMENT '项目归档档案管理员',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
`project_node` varchar(600) NOT NULL DEFAULT '[{"type":"RISK_ANALYSIS","state":0},{"type":"BUSINESS_CONTRACT","state":0},{"type":"PROJECT_GROUP","state":0},{"type":"SITE_SURVEY","state":0},{"type":"REPORT_PREPARATION","state":0},{"type":"INTERNAL_REVIEW","state":0},{"type":"TECHNICAL_REVIEW","state":0},{"type":"PROCESS_CONTROL","state":0}]' COMMENT '项目节点完成进度',
`industry_code` varchar(64) DEFAULT NULL COMMENT '所属行业编码(见 IndustryEnum)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_eval_project_no` (`project_no`),
KEY `idx_eval_project_org` (`org_id`),
KEY `idx_eval_project_customer` (`customer_id`),
KEY `idx_eval_project_plan_start` (`plan_start_date`),
KEY `idx_eval_project_plan_end` (`plan_end_date`),
KEY `idx_eval_project_district` (`district_code`),
KEY `idx_eval_project_archive` (`archive_flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='安评项目主表';
-- 3. 01风险分析记录表
CREATE TABLE IF NOT EXISTS `eval_risk_analysis` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '机构id',
`project_id` bigint NOT NULL COMMENT '项目id',
`analysis_date` date DEFAULT NULL COMMENT '风险分析时间',
`controlled_no` varchar(64) DEFAULT NULL COMMENT '受控编号',
`project_name` varchar(200) DEFAULT NULL COMMENT '评价项目名称',
`eval_type_code` varchar(32) DEFAULT NULL COMMENT '评价类别编码(PRE/ACCEPT/STATUS)',
`industry_name` varchar(100) DEFAULT NULL COMMENT '所属行业(手填)',
`eval_scope` varchar(1000) DEFAULT NULL COMMENT '评价范围',
`in_biz_scope_flag` tinyint DEFAULT NULL COMMENT '是否在资质业务范围内(1是2否)',
`unit_overview` varchar(2000) DEFAULT NULL COMMENT '被评价单位基本概况',
`industry_risk_desc` varchar(2000) DEFAULT NULL COMMENT '项目行业风险特性分析',
`staff_match_code` int DEFAULT NULL COMMENT '人员专业构成是否满足(1满足2不满足)',
`need_expert_code` int DEFAULT NULL COMMENT '是否需要聘请专家(1需要2不需要)',
`expert_specialty` varchar(200) DEFAULT NULL COMMENT '需要专业(手填)',
`capability_code` int DEFAULT NULL COMMENT '是否有能力承担评价风险(1是2否)',
`capability_remark` varchar(500) DEFAULT NULL COMMENT '能力备注',
`feasible_code` int DEFAULT NULL COMMENT '项目可行性(1可行2不可行)',
`feasible_remark` varchar(500) DEFAULT NULL COMMENT '可行性备注',
`economic_code` int DEFAULT NULL COMMENT '经济性(1有经济效益2无经济效益)',
`risk_level_code` int DEFAULT NULL COMMENT '风险程度(1低度2中度3高度)',
`sign_contract_code` int DEFAULT NULL COMMENT '合同签订结论(1签合同2不签合同)',
`status_code` int DEFAULT NULL COMMENT '节点状态(1暂存2已完成)',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
`risk_file_url` text COMMENT '风险分析附件',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_eval_risk_project` (`project_id`),
KEY `idx_eval_risk_org` (`org_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='01风险分析记录表';
-- 4. 01风险分析参与人表
CREATE TABLE IF NOT EXISTS `eval_risk_participant` (
`id` bigint NOT NULL COMMENT '主键',
`risk_id` bigint NOT NULL COMMENT '风险分析id(eval_risk_analysis.id)',
`project_id` bigint NOT NULL COMMENT '项目id',
`personnel_id` bigint DEFAULT NULL COMMENT '人员id',
`personnel_name` varchar(50) DEFAULT NULL COMMENT '人员姓名',
`dept_name` varchar(100) DEFAULT NULL COMMENT '部门/岗位',
`opinion` varchar(500) DEFAULT NULL COMMENT '分析意见',
`sign_status_code` int DEFAULT NULL COMMENT '签字状态(1待签2已签)',
`sign_file_url` varchar(500) DEFAULT NULL COMMENT '签字图片地址',
`sort_order` int DEFAULT '0' COMMENT '排序',
PRIMARY KEY (`id`),
KEY `idx_eval_risk_part_rid` (`risk_id`),
KEY `idx_eval_risk_part_pid` (`project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='01风险分析参与人表';
-- 5. 02业务合同表
CREATE TABLE IF NOT EXISTS `eval_contract` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '机构id',
`project_id` bigint NOT NULL COMMENT '项目id',
`org_name` varchar(200) DEFAULT NULL COMMENT '机构名称',
`contract_no` varchar(64) DEFAULT NULL COMMENT '合同编号',
`project_name` varchar(200) DEFAULT NULL COMMENT '项目名称',
`project_intro` varchar(500) DEFAULT NULL COMMENT '项目简介',
`amount` varchar(64) DEFAULT NULL COMMENT '合同金额(万元,字符串)',
`project_type_code` varchar(32) DEFAULT NULL COMMENT '项目类型编码(NEW新建 RENEW续评 CHANGE变更)',
`risk_summary` varchar(500) DEFAULT NULL COMMENT '项目风险分析摘要',
`project_region` varchar(500) DEFAULT NULL COMMENT '项目所在地',
`project_address` varchar(500) DEFAULT NULL COMMENT '项目详细地址',
`contract_start_date` date DEFAULT NULL COMMENT '合同开始时间',
`contract_end_date` date DEFAULT NULL COMMENT '合同结束时间',
`eval_type_code` varchar(32) DEFAULT NULL COMMENT '评价类型编码(PRE/ACCEPT/STATUS)',
`toxic_flag` tinyint DEFAULT '2' COMMENT '是否生产剧毒化学品(1是2否)',
`precursor_flag` tinyint DEFAULT '2' COMMENT '是否生产易制毒化学品(1是2否)',
`cross_province_flag` tinyint DEFAULT '2' COMMENT '是否跨省建设项目(1是2否)',
`business_scope` varchar(500) DEFAULT NULL COMMENT '项目业务范围',
`enterprise_name` varchar(200) DEFAULT NULL COMMENT '企业名称',
`industry_category` varchar(200) DEFAULT NULL COMMENT '国民经济行业类别(手填)',
`office_address` varchar(500) DEFAULT NULL COMMENT '办公地址',
`credit_code` varchar(18) DEFAULT NULL COMMENT '统一社会信用代码',
`post_code` varchar(20) DEFAULT NULL COMMENT '邮政编码',
`enterprise_phone` varchar(50) DEFAULT NULL COMMENT '企业电话',
`fax` varchar(50) DEFAULT NULL COMMENT '传真',
`legal_person` varchar(50) DEFAULT NULL COMMENT '法人代表',
`contact_name` varchar(50) DEFAULT NULL COMMENT '联系人',
`contact_phone` varchar(50) DEFAULT NULL COMMENT '联系人电话',
`staff_count` int DEFAULT NULL COMMENT '职工人数',
`scan_file_url` text COMMENT '合同扫描件(URL文本,可多条由前端约定分隔/JSON)',
`status_code` int DEFAULT NULL COMMENT '节点状态(1暂存2已完成)',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_eval_contract_project` (`project_id`),
KEY `idx_eval_contract_org` (`org_id`),
KEY `idx_eval_contract_no` (`contract_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='02业务合同表';
-- 6. 03项目组成立表
CREATE TABLE IF NOT EXISTS `eval_team` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '机构id',
`project_id` bigint NOT NULL COMMENT '项目id',
`leader_personnel_id` bigint DEFAULT NULL COMMENT '项目负责人人员id',
`leader_name` varchar(50) DEFAULT NULL COMMENT '项目负责人姓名',
`control_personnel_id` bigint DEFAULT NULL COMMENT '过程控制负责人人员id',
`control_name` varchar(50) DEFAULT NULL COMMENT '过程控制负责人姓名',
`member_count` int DEFAULT NULL COMMENT '成员人数',
`status_code` int DEFAULT NULL COMMENT '节点状态(1未开始2进行中3已完成4退回)',
`status_name` varchar(50) DEFAULT NULL COMMENT '节点状态名称',
`finish_time` datetime DEFAULT NULL COMMENT '成立完成时间',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_eval_team_project` (`project_id`),
KEY `idx_eval_team_org` (`org_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='03项目组成立表';
-- 7. 安评项目成员表
CREATE TABLE IF NOT EXISTS `eval_project_member` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '机构id',
`project_id` bigint NOT NULL COMMENT '项目id',
`personnel_id` bigint NOT NULL COMMENT '人员id(逻辑关联org_personnel.id)',
`personnel_name` varchar(50) DEFAULT NULL COMMENT '人员姓名',
`dept_name` varchar(32) DEFAULT NULL COMMENT '部门名称',
`pos_name` varchar(32) DEFAULT NULL COMMENT '岗位',
`capacity` varchar(200) DEFAULT NULL COMMENT '人员能力',
`responsibility` varchar(600) DEFAULT NULL COMMENT '职责',
`role` text COMMENT '角色(数组[1,2])',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
`msg_send_state` int NOT NULL DEFAULT '0' COMMENT '0:未发送 1:已发',
PRIMARY KEY (`id`),
KEY `idx_eval_project_member_person` (`personnel_id`),
KEY `idx_eval_project_member_pid` (`project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='安评项目成员表';
-- 8. 安评项目资料表
CREATE TABLE IF NOT EXISTS `eval_project_doc` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '机构id',
`project_id` bigint NOT NULL COMMENT '项目id',
`project_no` varchar(64) NOT NULL COMMENT '项目编号(eval_project.project_no)',
`project_name` varchar(200) NOT NULL COMMENT '项目名称(eval_project.project_name)',
`customer_name` varchar(200) NOT NULL COMMENT '被评价客户企业名称(eval_customer.customer_name)',
`eval_type_code` varchar(32) DEFAULT NULL COMMENT '评价类型编码(eval_project.eval_type_code)',
`project_doc_url` json DEFAULT NULL COMMENT '资料上传地址',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
KEY `idx_eval_project_doc_pid` (`project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='安评项目资料表';
-- 9. 项目预警-归档前预警
CREATE TABLE IF NOT EXISTS `eval_project_process_waring` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint DEFAULT NULL COMMENT '评价机构id',
`project_id` bigint NOT NULL COMMENT '项目id',
`waring_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'normal' COMMENT '预警状态 normal:正常abnormal 异常',
`process_waring_status` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'normal' COMMENT '人员预警异常 normal:正常abnormal 异常',
`process_waring_msg` text,
`personnel_waring_status` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'normal' COMMENT '人员预警 normal:正常abnormal 异常',
`personnel_waring_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
KEY `idx_project_id` (`project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='项目预警-归档前预警';
-- 10. 项目预警-归档后预警
CREATE TABLE IF NOT EXISTS `eval_project_waring` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint DEFAULT NULL COMMENT '评价机构id',
`project_id` bigint NOT NULL COMMENT '项目id',
`archive_date` datetime NOT NULL COMMENT '项目归档时间',
`project_complete_time` datetime DEFAULT NULL COMMENT '项目完成时间',
`waring_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'non_warn' COMMENT '项目 预警 状态: non_warn 暂时不预警,first_waring 首次预警second_waring 二次预警emergency_waring 紧急预警,overdue_warning 逾期预警 ,end_warning 结束预警',
`waring_start_time` datetime NOT NULL COMMENT '预警开始时间',
`reassessment_date` datetime NOT NULL COMMENT '重新评估时间',
`cycle_date` tinyint NOT NULL COMMENT '周期年份',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
`project_node` varchar(600) NOT NULL DEFAULT '[{"type":"RISK_ANALYSIS","state":1},{"type":"BUSINESS_CONTRACT","state":1},{"type":"PROJECT_GROUP","state":1},{"type":"SITE_SURVEY","state":1},{"type":"REPORT_PREPARATION","state":1},{"type":"INTERNAL_REVIEW","state":1},{"type":"TECHNICAL_REVIEW","state":1},{"type":"PROCESS_CONTROL","state":1}]' COMMENT '项目节点完成进度',
`industry_code` varchar(64) DEFAULT NULL COMMENT '所属行业编码(见 IndustryEnum)',
PRIMARY KEY (`id`),
KEY `idx_project_id` (`project_id`),
KEY `idx_waring_start_time` (`waring_start_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='项目预警-归档后预警';
-- 11. 现场踏勘主表
CREATE TABLE IF NOT EXISTS `eval_survey` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '机构id',
`project_id` bigint NOT NULL COMMENT '项目id',
`personnel_id` bigint NOT NULL COMMENT '人员id(逻辑关联org_personnel.id)',
`personnel_name` varchar(50) DEFAULT NULL COMMENT '人员姓名',
`dept_name` varchar(32) DEFAULT NULL COMMENT '部门名称',
`pos_name` varchar(32) DEFAULT NULL COMMENT '岗位',
`capacity` varchar(200) DEFAULT NULL COMMENT '人员能力',
`role` text COMMENT '角色(数组[1,2])',
`face_state` int NOT NULL DEFAULT '0' COMMENT '人脸识别, 0-未通过, 1-通过',
`gps_state` int NOT NULL DEFAULT '0' COMMENT 'gps定位, 0-未通过, 1-通过',
`sing_in_time` datetime DEFAULT NULL COMMENT '签到时间',
`sign_out_time` datetime DEFAULT NULL COMMENT '签退时间',
`scene_url` varchar(1000) DEFAULT NULL COMMENT '现场图片',
`signature_url` varchar(1000) DEFAULT NULL COMMENT '签字图片',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
`longitude` varchar(64) DEFAULT NULL COMMENT '经度',
`latitude` varchar(64) DEFAULT NULL COMMENT '维度',
`content` varchar(500) DEFAULT NULL COMMENT '初勘内容',
PRIMARY KEY (`id`),
KEY `idx_eval_survey_org` (`org_id`),
KEY `idx_project_id` (`project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='现场踏勘主表';
-- 12. 踏勘附件表
CREATE TABLE IF NOT EXISTS `eval_survey_attach` (
`id` bigint NOT NULL COMMENT '主键',
`project_id` bigint NOT NULL COMMENT '项目id',
`attach_type_code` varchar(32) NOT NULL COMMENT '附件类型(从业告知,整改通知,企业整改,整改复查,现场检查表)',
`file_url` varchar(500) NOT NULL COMMENT '文件地址',
PRIMARY KEY (`id`),
KEY `idx_project_id` (`project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='踏勘附件表';
-- 13. 05报告编制稿表
CREATE TABLE IF NOT EXISTS `eval_report_draft` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '机构id',
`project_id` bigint NOT NULL COMMENT '项目id',
`draft_version_no` int DEFAULT '1' COMMENT '稿件版本号',
`template_code` varchar(64) DEFAULT NULL COMMENT '模板编码',
`template_name` varchar(100) DEFAULT NULL COMMENT '模板名称',
`content_url` varchar(500) DEFAULT NULL COMMENT '报告正文存储地址',
`hint_content` varchar(2000) DEFAULT NULL COMMENT '编写提示摘要',
`status_code` int DEFAULT NULL COMMENT '状态编码(1编辑中2已提交)',
`status_name` varchar(50) DEFAULT NULL COMMENT '状态名称',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
KEY `idx_eval_report_draft_pid` (`project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='05报告编制稿表';
-- 14. 06内部审核表
CREATE TABLE IF NOT EXISTS `eval_internal_review` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '机构id',
`project_id` bigint NOT NULL COMMENT '项目id',
`draft_id` bigint DEFAULT NULL COMMENT '关联报告稿id',
`reviewer_personnel_id` bigint DEFAULT NULL COMMENT '内审人人员id',
`reviewer_name` varchar(50) DEFAULT NULL COMMENT '内审人姓名',
`result_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT 'not_passed' COMMENT '审核结果 passed 通过not_passed 未通过',
`result_name` varchar(50) DEFAULT NULL COMMENT '审核结果名称',
`opinion_content` varchar(2000) DEFAULT NULL COMMENT '审核意见',
`review_time` datetime DEFAULT NULL COMMENT '审核时间',
`status_code` int DEFAULT NULL COMMENT '节点状态(1未开始2进行中3已完成4退回)',
`status_name` varchar(50) DEFAULT NULL COMMENT '节点状态名称',
`reviewer_signature_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '内审人独立签字',
`reviewer_signature_task_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'non_dispatched' COMMENT '审核签字任务状态 dispatched 下发non_dispatched 未下发 , completed 已完成',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_eval_internal_project` (`project_id`),
KEY `idx_eval_internal_org` (`org_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='06内部审核表';
-- 15. 07技术审核表
CREATE TABLE IF NOT EXISTS `eval_tech_review` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '机构id',
`project_id` bigint NOT NULL COMMENT '项目id',
`draft_id` bigint DEFAULT NULL COMMENT '关联报告稿id',
`reviewer_personnel_id` bigint DEFAULT NULL COMMENT '技审人人员id',
`reviewer_name` varchar(50) DEFAULT NULL COMMENT '技审人姓名',
`reviewer_signature_url` varchar(512) DEFAULT NULL COMMENT '技审人独立签字',
`reviewer_signature_task_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'non_dispatched' COMMENT '审核签字任务状态 dispatched 下发non_dispatched 未下发completed 已完成',
`result_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '审核结果 passed 通过not_passed 未通过',
`result_name` varchar(50) DEFAULT NULL COMMENT '审核结果名称',
`opinion_content` varchar(2000) DEFAULT NULL COMMENT '审核意见',
`review_time` datetime DEFAULT NULL COMMENT '审核时间',
`status_code` int DEFAULT NULL COMMENT '节点状态(1未开始2进行中3已完成4退回)',
`status_name` varchar(50) DEFAULT NULL COMMENT '节点状态名称',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_eval_tech_project` (`project_id`),
KEY `idx_eval_tech_org` (`org_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='07技术审核表';
-- 16. 08过程控制表
CREATE TABLE IF NOT EXISTS `eval_process_control` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '机构id',
`project_id` bigint NOT NULL COMMENT '项目id',
`controller_personnel_id` bigint DEFAULT NULL COMMENT '过程控制负责人人员id',
`controller_name` varchar(50) DEFAULT NULL COMMENT '过程控制负责人姓名',
`reviewer_signature_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '内审人独立签字',
`reviewer_signature_task_status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'non_dispatched' COMMENT '审核签字任务状态 dispatched 下发non_dispatched 未下发 , completed 已完成',
`precheck_pass_flag` tinyint DEFAULT '2' COMMENT '前7节点是否全部完成(1是2否)',
`result_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT 'not_passed' COMMENT '审核结果 passed 通过not_passed 未通过',
`result_name` varchar(50) DEFAULT NULL COMMENT '结论名称',
`opinion_content` varchar(2000) DEFAULT NULL COMMENT '过程控制意见',
`archive_flag` tinyint DEFAULT '2' COMMENT '是否归档(1是2否)',
`handover_form_url` varchar(500) DEFAULT NULL COMMENT '归档交接单URL',
`handover_form_status` varchar(32) DEFAULT 'not_create' COMMENT '归档交接单状态(not_create未生成,created已生成)',
`control_time` datetime DEFAULT NULL COMMENT '办理时间',
`status_code` int DEFAULT NULL COMMENT '节点状态(1未开始2进行中3已完成4退回)',
`status_name` varchar(50) DEFAULT NULL COMMENT '节点状态名称',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_eval_process_project` (`project_id`),
KEY `idx_eval_process_org` (`org_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='08过程控制表';
-- 17. 审核项表信息
CREATE TABLE IF NOT EXISTS `eval_review_item` (
`id` bigint NOT NULL,
`biz_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务类型 内审->eval_internal_review ; 技审->eval_tech_review;过程控制 eval_process_control',
`biz_id` bigint NOT NULL COMMENT '业务id',
`review_dimension_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '审核维度code',
`review_dimension_name` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '审核维度 名称',
`review_focus` varchar(512) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '审核重点',
`review_conclusion` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '结论 ,conform_to 符合not_conform_to 不符合',
`review_opinion` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '审核意见',
`org_id` bigint NOT NULL COMMENT '机构id',
`delete_enum` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
KEY `idx_biz_id` (`biz_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='审核项表信息';
-- 18. 项目签字表
CREATE TABLE IF NOT EXISTS `eval_sign_task` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '机构id',
`project_id` bigint NOT NULL COMMENT '项目id',
`node_code` varchar(32) DEFAULT NULL COMMENT '所属节点编码',
`biz_ref_id` bigint DEFAULT NULL COMMENT '业务单据id',
`signer_personnel_id` bigint DEFAULT NULL COMMENT '待签人员id',
`task_title` varchar(200) DEFAULT NULL COMMENT '签字任务标题',
`task_status_code` int DEFAULT '1' COMMENT '任务状态(1待签2已签3已作废)',
`issue_time` datetime DEFAULT NULL COMMENT '下发时间',
`signer_url` varchar(200) DEFAULT NULL COMMENT '签字图片',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
KEY `idx_eval_sign_task_pid` (`project_id`),
KEY `idx_eval_sign_task_signer` (`signer_personnel_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='项目签字表';
-- 19. 安评报告库主表
CREATE TABLE IF NOT EXISTS `eval_report` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '机构id',
`project_id` bigint DEFAULT NULL COMMENT '关联项目id(可空,历史报告)',
`customer_id` bigint DEFAULT NULL COMMENT '客户id',
`evaluated_unit_name` varchar(200) DEFAULT NULL COMMENT '被评价单位名称',
`report_no` varchar(64) DEFAULT NULL COMMENT '报告编号',
`report_name` varchar(200) NOT NULL COMMENT '报告名称',
`report_year` int DEFAULT NULL COMMENT '报告年度',
`eval_type_code` varchar(32) DEFAULT NULL COMMENT '评价类型编码',
`eval_type_name` varchar(50) DEFAULT NULL COMMENT '评价类型名称',
`industry_code` varchar(32) DEFAULT NULL COMMENT '所属行业编码',
`industry_name` varchar(50) DEFAULT NULL COMMENT '所属行业名称(危化/矿山/冶炼/工贸等)',
`business_scope` varchar(500) DEFAULT NULL COMMENT '业务范围',
`file_url` varchar(500) DEFAULT NULL COMMENT '主文件地址',
`file_name` varchar(200) DEFAULT NULL COMMENT '主文件名',
`public_flag` tinyint DEFAULT '2' COMMENT '是否公开(1是2否)',
`complete_flag` tinyint DEFAULT NULL COMMENT '资料是否完整(1是2否)',
`submit_flag` tinyint DEFAULT '2' COMMENT '是否已报送监管(1是2否)',
`report_status_code` int DEFAULT NULL COMMENT '报告状态编码(1已入库2抽查中3待整改4已复核)',
`report_status_name` varchar(50) DEFAULT NULL COMMENT '报告状态名称',
`archive_time` datetime DEFAULT NULL COMMENT '入库时间',
`issue_date` date DEFAULT NULL COMMENT '报告签发日期',
`page_count` int DEFAULT NULL COMMENT '报告页数',
`secret_level_code` varchar(32) DEFAULT NULL COMMENT '保密属性编码(NORMAL/TRADE_SECRET/PRIVACY/CLASSIFIED)',
`secret_level_name` varchar(50) DEFAULT NULL COMMENT '保密属性名称',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
KEY `idx_eval_report_org` (`org_id`),
KEY `idx_eval_report_project` (`project_id`),
KEY `idx_eval_report_year` (`report_year`),
KEY `idx_eval_report_no` (`report_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='安评报告库主表';
-- 20. 安评报告抽查表
CREATE TABLE IF NOT EXISTS `eval_report_spotcheck` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '机构id',
`report_id` bigint NOT NULL COMMENT '报告id',
`check_result_code` int DEFAULT NULL COMMENT '抽查结果编码(1合格2不合格)',
`check_result_name` varchar(50) DEFAULT NULL COMMENT '抽查结果名称',
`check_opinion` varchar(2000) DEFAULT NULL COMMENT '抽查意见',
`rectify_require` varchar(2000) DEFAULT NULL COMMENT '整改要求',
`rectify_feedback` varchar(2000) DEFAULT NULL COMMENT '整改反馈',
`review_result_code` int DEFAULT NULL COMMENT '复核结果编码(1通过2不通过)',
`review_result_name` varchar(50) DEFAULT NULL COMMENT '复核结果名称',
`checker_id` bigint DEFAULT NULL COMMENT '抽查人账号id',
`checker_name` varchar(50) DEFAULT NULL COMMENT '抽查人姓名',
`check_time` datetime DEFAULT NULL COMMENT '抽查时间',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
KEY `idx_eval_report_spotcheck_rid` (`report_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='安评报告抽查表';
-- 21. 监督检查告知表
CREATE TABLE IF NOT EXISTS `insp_notice` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '被检机构id',
`notice_no` varchar(64) NOT NULL COMMENT '告知编号',
`insp_type_code` varchar(32) DEFAULT NULL COMMENT '检查类型编码',
`insp_type_name` varchar(50) DEFAULT NULL COMMENT '检查类型名称',
`source_type_code` int DEFAULT NULL COMMENT '来源方式编码(1年度计划2专项安排3其他4风险预警)',
`source_type_name` varchar(50) DEFAULT NULL COMMENT '来源方式名称',
`source_ref_id` bigint DEFAULT NULL COMMENT '来源业务id(可选)',
`source_ref_no` varchar(64) DEFAULT NULL COMMENT '来源预警/业务编号(如W-PROJ-2026-009)',
`project_id` bigint DEFAULT NULL COMMENT '关联项目id',
`plan_insp_time` datetime DEFAULT NULL COMMENT '计划检查时间',
`leader_name` varchar(50) DEFAULT NULL COMMENT '检查组长',
`notice_content` varchar(2000) DEFAULT NULL COMMENT '告知内容',
`notice_urls` varchar(2000) DEFAULT NULL COMMENT '告知附件URL逗号分隔',
`status_code` int DEFAULT NULL COMMENT '状态编码(0待下发1已下发2已确认3已反馈4已办结)',
`status_name` varchar(50) DEFAULT NULL COMMENT '状态名称',
`confirm_flag` tinyint DEFAULT '2' COMMENT '机构是否确认(1是2否)',
`confirm_time` datetime DEFAULT NULL COMMENT '确认时间',
`send_time` datetime DEFAULT NULL COMMENT '下发时间',
`result_code` int DEFAULT NULL COMMENT '检查结果编码(1未发现问题/合格2责令整改/不合格3转入风险预警/限期整改)',
`result_name` varchar(50) DEFAULT NULL COMMENT '检查结果名称',
`result_content` varchar(2000) DEFAULT NULL COMMENT '结果说明',
`result_urls` varchar(2000) DEFAULT NULL COMMENT '结果附件',
`result_recorder_id` bigint DEFAULT NULL COMMENT '结果登记人账号id',
`result_recorder_name` varchar(50) DEFAULT NULL COMMENT '结果登记人姓名',
`result_time` datetime DEFAULT NULL COMMENT '结果登记时间',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_insp_notice_no` (`notice_no`),
KEY `idx_insp_notice_org` (`org_id`),
KEY `idx_insp_notice_status` (`status_code`),
KEY `idx_insp_notice_source` (`source_ref_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='监督检查告知表';
-- 22. 监督检查材料反馈表
CREATE TABLE IF NOT EXISTS `insp_notice_material` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '机构id',
`notice_id` bigint NOT NULL COMMENT '告知id',
`material_name` varchar(200) DEFAULT NULL COMMENT '材料名称',
`required_flag` tinyint DEFAULT '1' COMMENT '是否必需(1是2否)',
`upload_status_code` int DEFAULT NULL COMMENT '上传状态编码(1待上传2已上传)',
`upload_status_name` varchar(50) DEFAULT NULL COMMENT '上传状态名称',
`file_url` varchar(500) DEFAULT NULL COMMENT '反馈文件地址',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
KEY `idx_insp_notice_material_nid` (`notice_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='监督检查材料反馈表';
-- 23. 机构画像得分表
CREATE TABLE IF NOT EXISTS `org_profile_score` (
`id` bigint NOT NULL COMMENT '主键',
`org_id` bigint NOT NULL COMMENT '机构id',
`score_period` varchar(32) DEFAULT NULL COMMENT '评分周期(如2026Q3)',
`finish_project_count` int DEFAULT NULL COMMENT '完成项目数',
`on_time_rate` decimal(8,4) DEFAULT NULL COMMENT '按期完成率',
`spotcheck_pass_rate` decimal(8,4) DEFAULT NULL COMMENT '报告抽查合格率',
`open_issue_count` int DEFAULT NULL COMMENT '未闭环问题数',
`insp_count` int DEFAULT NULL COMMENT '监督检查次数',
`total_score` decimal(8,2) DEFAULT NULL COMMENT '综合得分',
`level_code` varchar(32) DEFAULT NULL COMMENT '等级编码',
`level_name` varchar(50) DEFAULT NULL COMMENT '等级名称',
`metric_json` varchar(4000) DEFAULT NULL COMMENT '分项指标JSON快照',
`calc_time` datetime DEFAULT NULL COMMENT '计算时间',
`delete_enum` varchar(32) DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
KEY `idx_org_profile_score_org` (`org_id`),
KEY `idx_org_profile_score_period` (`score_period`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='机构画像得分表';
-- 24. 资质现场核查
CREATE TABLE IF NOT EXISTS `qual_on_site_review` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`biz_type` varchar(64) DEFAULT NULL COMMENT '资质类型:add 新增 change:变更',
`biz_id` bigint DEFAULT NULL COMMENT '业务id',
`org_id` bigint NOT NULL COMMENT '受审查机构ID (关联机构表)',
`review_date_start` datetime NOT NULL COMMENT '现场审查开始时间',
`review_location` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '审查地点',
`review_members` varchar(512) DEFAULT NULL COMMENT '审查组成员名单',
`review_leader` varchar(64) DEFAULT NULL COMMENT '审查组长',
`material_requirements` text COMMENT '材料准备要求',
`supervisor_contact` varchar(64) DEFAULT NULL COMMENT '监管联系人姓名',
`contact_phone` varchar(32) DEFAULT NULL COMMENT '监管联系电话',
`status` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '1' COMMENT '现场审查状态(AGENCY_PENDING_CONFIRMATION机构待确认、AGENCY_CONFIRMED机构已确认、REVIEW_PASSED核查通过、REVIEW_FAILED核查不通过)',
`review_opinion` varchar(256) DEFAULT NULL COMMENT '核查意见',
`delete_enum` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
KEY `idx_review_date_start` (`review_date_start`),
KEY `idx_org_id` (`org_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2079776581237084163 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='资质现场核查';
-- 25. 资质现场核查-文件信息
CREATE TABLE IF NOT EXISTS `qual_on_site_review_file` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`qual_on_site_review_id` bigint NOT NULL COMMENT '资质现场核查id',
`name` varchar(128) NOT NULL COMMENT '文件名称',
`url` varchar(1024) NOT NULL COMMENT '文件url',
`org_id` bigint DEFAULT NULL COMMENT 'orgId',
`delete_enum` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '环境',
PRIMARY KEY (`id`),
KEY `idx_qual_on_site_review_id` (`qual_on_site_review_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2079842245578588163 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='资质现场核查-文件信息';
-- 26. 消息中心
CREATE TABLE IF NOT EXISTS `safety_message` (
`id` bigint NOT NULL COMMENT '主键',
`send_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '发送者姓名',
`send_id` bigint DEFAULT NULL COMMENT '发送者id',
`send_type` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '发送类型 ',
`send_content` text COLLATE utf8mb4_general_ci COMMENT '发送内容: json格式',
`receive_id` bigint DEFAULT NULL COMMENT '接收人id',
`send_state` tinyint(1) NOT NULL DEFAULT '0' COMMENT '发送状态 0-未读, 1-已读',
`delete_enum` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '删除标识true false',
`remarks` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
`create_name` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人姓名',
`update_name` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人姓名',
`tenant_id` bigint DEFAULT NULL COMMENT '租户id',
`version` int DEFAULT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',
`create_id` bigint DEFAULT NULL COMMENT '创建人id',
`update_id` bigint DEFAULT NULL COMMENT '修改人id',
`env` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '环境',
`org_id` bigint NOT NULL COMMENT '机构id',
PRIMARY KEY (`id`),
KEY `idx_receive_id` (`receive_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='消息中心';

View File

@ -0,0 +1,92 @@
-- =====================================================================
-- 线上数据库结构同步脚本 - 第二部分:共有表字段差异修正
-- 生成时间: 2026-07-29
-- 来源: 本地库 192.168.20.100:33080/safety-eval-service
-- 目标: 线上库 nlb-kd2xz70qhllfet2koj.cn-beijing.nlb.aliyuncsslb.com:33068/safety-eval-service
-- 说明:
-- [A区] 纯新增字段安全可直接执行MySQL 8.0 不支持 ADD COLUMN IF NOT EXISTS请勿重复执行
-- [B区] 字段类型/长度收窄项,存在数据截断风险,已全部注释,需人工确认后再放开执行。
-- [C区] 线上独有的表/字段,按规则禁止删除,仅记录,不生成 DROP 语句。
-- =====================================================================
-- =====================================================================
-- A区安全新增字段本地有、线上无
-- =====================================================================
-- A1. org_position 新增 GBS 角色关联字段3个
ALTER TABLE `org_position`
ADD COLUMN `gbs_role_id` bigint NULL COMMENT '关联GBS角色ID' AFTER `duty_desc`,
ADD COLUMN `gbs_role_code` varchar(64) NULL COMMENT '关联GBS角色编码' AFTER `gbs_role_id`,
ADD COLUMN `gbs_role_name` varchar(100) NULL COMMENT '关联GBS角色名称' AFTER `gbs_role_code`;
-- A2. org_personnel_cert 新增证书等级字段
ALTER TABLE `org_personnel_cert`
ADD COLUMN `cert_level` varchar(50) NULL COMMENT '证书等级(CertLevelEnum:SENIOR高级/MIDDLE中级/JUNIOR初级)' AFTER `cert_type_code`;
-- A3. qual_filing_personnel_cert 新增证书等级字段
ALTER TABLE `qual_filing_personnel_cert`
ADD COLUMN `cert_level` varchar(50) NULL COMMENT '证书等级(CertLevelEnum:SENIOR高级/MIDDLE中级/JUNIOR初级)' AFTER `cert_type_code`;
-- A4. qual_filing_personnel_cert_change 新增证书等级字段
ALTER TABLE `qual_filing_personnel_cert_change`
ADD COLUMN `cert_level` varchar(128) NULL COMMENT '证书等级(CertLevelEnum:SENIOR高级/MIDDLE中级/JUNIOR初级)' AFTER `cert_type_code`;
-- A5. wps_doc 新增项目id字段
ALTER TABLE `wps_doc`
ADD COLUMN `project_id` bigint NULL AFTER `pending_size`;
-- A6. wps_doc_version 新增项目id字段
ALTER TABLE `wps_doc_version`
ADD COLUMN `project_id` bigint NULL AFTER `update_time`;
-- =====================================================================
-- B区类型/长度收窄项(高风险,可能截断数据,默认注释,人工确认后执行)
-- 执行前请先用对应的检查 SQL 确认无超长数据!
-- =====================================================================
-- B1. org_equipment.industry_code 线上 varchar(100) → 本地 varchar(32)
-- 检查: SELECT COUNT(*) FROM org_equipment WHERE CHAR_LENGTH(industry_code) > 32;
-- ALTER TABLE `org_equipment` MODIFY COLUMN `industry_code` varchar(32) NULL COMMENT '所属行业编码';
-- B2. org_info.safety_industry_category_code 线上 varchar(1024) → 本地 varchar(32)
-- 检查: SELECT COUNT(*) FROM org_info WHERE CHAR_LENGTH(safety_industry_category_code) > 32;
-- ALTER TABLE `org_info` MODIFY COLUMN `safety_industry_category_code` varchar(32) NULL COMMENT '安全评价行业分类编码';
-- B3. org_personnel.proof_material_url 线上 varchar(5000) → 本地 varchar(2000)
-- 检查: SELECT COUNT(*) FROM org_personnel WHERE CHAR_LENGTH(proof_material_url) > 2000;
-- ALTER TABLE `org_personnel` MODIFY COLUMN `proof_material_url` varchar(2000) NULL COMMENT '证明材料地址';
-- B4. org_position.duty_desc 线上 varchar(600) → 本地 varchar(500)
-- 检查: SELECT COUNT(*) FROM org_position WHERE CHAR_LENGTH(duty_desc) > 500;
-- ALTER TABLE `org_position` MODIFY COLUMN `duty_desc` varchar(500) NULL COMMENT '岗位职责';
-- B5. org_position.remarks 线上 varchar(600) → 本地 varchar(255)
-- 检查: SELECT COUNT(*) FROM org_position WHERE CHAR_LENGTH(remarks) > 255;
-- ALTER TABLE `org_position` MODIFY COLUMN `remarks` varchar(255) NULL COMMENT '备注';
-- B6. qual_filing.business_scope 线上 varchar(1024) → 本地 varchar(1000)
-- 检查: SELECT COUNT(*) FROM qual_filing WHERE CHAR_LENGTH(business_scope) > 1000;
-- ALTER TABLE `qual_filing` MODIFY COLUMN `business_scope` varchar(1000) NULL COMMENT '业务范围';
-- B7. qual_filing.attachment_url 线上 text → 本地 varchar(500)
-- 检查: SELECT COUNT(*) FROM qual_filing WHERE CHAR_LENGTH(attachment_url) > 500;
-- ALTER TABLE `qual_filing` MODIFY COLUMN `attachment_url` varchar(500) NULL COMMENT '附件地址';
-- B8. qual_filing_change.business_scope 线上 varchar(1024) → 本地 varchar(1000)
-- 检查: SELECT COUNT(*) FROM qual_filing_change WHERE CHAR_LENGTH(business_scope) > 1000;
-- ALTER TABLE `qual_filing_change` MODIFY COLUMN `business_scope` varchar(1000) NULL COMMENT '业务范围';
-- B9. qual_filing_expert.certificate 线上 text → 本地 varchar(500)
-- 检查: SELECT COUNT(*) FROM qual_filing_expert WHERE CHAR_LENGTH(certificate) > 500;
-- ALTER TABLE `qual_filing_expert` MODIFY COLUMN `certificate` varchar(500) NULL COMMENT '证书';
-- =====================================================================
-- C区线上独有的表/字段(按规则禁止删除,仅记录备查,不提供 DROP 语句)
-- =====================================================================
-- C1. 表 qual_discipline_basic_majors :仅线上存在,本地无此表。
-- C2. org_equipment.instrument_type_code varchar(32) :仅线上存在(本地已移除)。
-- C3. org_personnel_cert.cert_type_name varchar(50) :仅线上存在(本地已改用 cert_level
-- C4. qual_filing_personnel_cert.cert_type_name varchar(50) :仅线上存在(本地已改用 cert_level
-- C5. qual_filing_personnel_cert_change.cert_type_name varchar(50) :仅线上存在(本地已改用 cert_level
-- 说明: cert_type_name 与新字段 cert_level 语义不同(类型名称 vs 等级),不建议自动迁移数据;
-- 如业务确认历史 cert_type_name 中存的是等级值,可人工执行迁移后再评估是否停用旧字段。

View File

@ -0,0 +1,82 @@
# 本地库与线上库结构差异分析报告
- 生成时间2026-07-29
- 本地库(基准):`192.168.20.100:33080` / `safety-eval-service`60 张表)
- 线上库(目标):`nlb-kd2xz70qhllfet2koj.cn-beijing.nlb.aliyuncsslb.com:33068` / `safety-eval-service`35 张表)
- 对比方式MySQL MCP 直连两库,基于 `information_schema.COLUMNS` 逐表逐字段比对(字段名/类型/长度/可空/默认值)
## 一、表级差异
### 1.1 本地有、线上缺失的表26 张)→ 需在线上新建
| 分类 | 表名 |
|---|---|
| 安评项目20张 | `eval_customer`、`eval_project`、`eval_risk_analysis`、`eval_risk_participant`、`eval_contract`、`eval_team`、`eval_project_member`、`eval_project_doc`、`eval_project_process_waring`、`eval_project_waring`、`eval_survey`、`eval_survey_attach`、`eval_report_draft`、`eval_internal_review`、`eval_tech_review`、`eval_process_control`、`eval_review_item`、`eval_sign_task`、`eval_report`、`eval_report_spotcheck` |
| 监督检查2张 | `insp_notice`、`insp_notice_material` |
| 机构画像1张 | `org_profile_score` |
| 资质现场核查2张 | `qual_on_site_review`、`qual_on_site_review_file` |
| 消息中心1张 | `safety_message` |
### 1.2 线上有、本地没有的表1 张)→ 按规则不删除,仅记录
- `qual_discipline_basic_majors`(本地对应表疑为 `basic_discipline_major`,请人工确认是否为改名迁移)
### 1.3 两边都存在且结构完全一致的表25 张)
`account`、`basic_discipline_major`、`filestorage`、`gen_table`、`gen_table_column`、`industry_professional_standards`、`new_flyway_schema_history`、`org_business_scope_device_ref`、`org_department`、`org_personnel_change`、`org_qualification`、`org_resign_apply`、`qual_filing_change_detail`、`qual_filing_commitment`、`qual_filing_commitment_change`、`qual_filing_equipment`、`qual_filing_equipment_change`、`qual_filing_material`、`qual_filing_material_change`、`qual_filing_review`、`qual_filing_personnel`、`qual_filing_personnel_change` 等(其中 `qual_filing_personnel`、`qual_filing_personnel_change` 经逐字段复核确认一致)。
## 二、共有表的字段差异12 张有差异)
### 2.1 本地新增字段(线上缺失,需 ADD COLUMN安全
| 表 | 字段 | 类型 | 说明 |
|---|---|---|---|
| `org_position` | `gbs_role_id` | bigint | 关联GBS角色ID |
| `org_position` | `gbs_role_code` | varchar(64) | 关联GBS角色编码 |
| `org_position` | `gbs_role_name` | varchar(100) | 关联GBS角色名称 |
| `org_personnel_cert` | `cert_level` | varchar(50) | 证书等级 |
| `qual_filing_personnel_cert` | `cert_level` | varchar(50) | 证书等级 |
| `qual_filing_personnel_cert_change` | `cert_level` | varchar(128) | 证书等级 |
| `wps_doc` | `project_id` | bigint | 项目id |
| `wps_doc_version` | `project_id` | bigint | 项目id |
### 2.2 字段类型/长度不一致(线上比本地"宽",改窄有截断风险,脚本中已注释)
| 表 | 字段 | 线上 | 本地 | 风险 |
|---|---|---|---|---|
| `org_equipment` | `industry_code` | varchar(100) | varchar(32) | 收窄截断 |
| `org_info` | `safety_industry_category_code` | varchar(1024) | varchar(32) | 收窄截断 |
| `org_personnel` | `proof_material_url` | varchar(5000) | varchar(2000) | 收窄截断 |
| `org_position` | `duty_desc` | varchar(600) | varchar(500) | 收窄截断 |
| `org_position` | `remarks` | varchar(600) | varchar(255) | 收窄截断 |
| `qual_filing` | `business_scope` | varchar(1024) | varchar(1000) | 收窄截断 |
| `qual_filing` | `attachment_url` | text | varchar(500) | 收窄截断 |
| `qual_filing_change` | `business_scope` | varchar(1024) | varchar(1000) | 收窄截断 |
| `qual_filing_expert` | `certificate` | text | varchar(500) | 收窄截断 |
### 2.3 线上独有字段(本地已移除/改名,按规则不删除,仅记录)
| 表 | 线上独有字段 | 说明 |
|---|---|---|
| `org_equipment` | `instrument_type_code` varchar(32) | 本地已移除 |
| `org_personnel_cert` | `cert_type_name` varchar(50) | 本地改用 `cert_level` |
| `qual_filing_personnel_cert` | `cert_type_name` varchar(50) | 本地改用 `cert_level` |
| `qual_filing_personnel_cert_change` | `cert_type_name` varchar(50) | 本地改用 `cert_level` |
## 三、更新脚本文件(需人工确认后执行)
| 文件 | 内容 | 风险 |
|---|---|---|
| `20260729_prod_update_part1_create_tables.sql` | 新建 26 张缺失表(`CREATE TABLE IF NOT EXISTS`,幂等) | 无(纯新增) |
| `20260729_prod_update_part2_alter_tables.sql` A区 | 8 个安全新增字段 | 低(纯新增,勿重复执行) |
| `20260729_prod_update_part2_alter_tables.sql` B区 | 9 个长度收窄 MODIFY已全部注释 | 高截断风险附检查SQL |
| `20260729_prod_update_part2_alter_tables.sql` C区 | 线上独有表/字段记录 | 不执行任何 DROP |
## 四、执行建议
1. 先备份线上库:`mysqldump --no-data`(结构)+ 涉及表的数据备份。
2. 执行 part1建表幂等可重跑
3. 执行 part2 A区新增字段只执行一次
4. B区逐条先跑注释中的检查 SQL确认 `COUNT(*)=0` 再放开对应 MODIFY任何一条有数据超长则不要执行该条。
5. C区不执行任何操作`qual_discipline_basic_majors` 是否废弃请业务侧确认。
6. 全程未包含任何 `DROP TABLE` / `DROP COLUMN` / `DELETE` 语句。

View File

@ -0,0 +1,14 @@
数据库
库名safety-eval-service
本地:
host: 192.168.20.100
port: 33080
username: root
password: Mysql@zcloud33080
秦安安全线上:
nlb-kd2xz70qhllfet2koj.cn-beijing.nlb.aliyuncsslb.com
33068
root
5tS3owZ7w8Uk1egv

View File

@ -0,0 +1,212 @@
openapi: 3.0.3
info:
title: 人员信息-人脸接口 API
description: |
基于 `OrgPersonnel` 的人脸相关接口,包含:
- **更新人员原始人像地址**:保存人脸比对基准图 URL。
- **人脸比对**:传入待比对图片 base64服务端从人员「原始人像地址」下载并转 base64再调用底层人脸比对能力返回相似度。
## 接口一览
| 接口 | 说明 |
|------|------|
| `POST /safetyEval/org-personnel/update-origin-face` | 更新人员原始人像地址(基准图) |
| `POST /safetyEval/org-personnel/compare-face` | 人脸比对,传入图片 base64 与原始人像比对,返回相似度 |
## 错误码
| 错误码 | 说明 |
|--------|------|
| 01-05-004 | 原始人像地址为空(比对时人员未设置 originFaceUrl |
| 01-05-005 | 待比对图片 base64 为空 |
| 01-05-006 | 人脸比对失败(底层调用异常) |
**Apifox 导入**:项目设置 → 导入数据 → OpenAPI → 选择本文件。
统一前缀:`/safetyEval/org-personnel`
成功:`success=true` 且 `code="0"`
version: 1.0.0
contact:
name: safety-eval-service
servers:
- url: http://localhost:8095
description: 本地开发
- url: http://192.168.20.100:30140
description: 测试网关100
tags:
- name: 人员信息-人脸接口
description: 原始人像地址维护与人脸比对
paths:
/safetyEval/org-personnel/update-origin-face:
post:
tags: [人员信息-人脸接口]
summary: 更新人员原始人像地址
description: |
保存人员的「原始人像地址originFaceUrl作为后续人脸比对的基准图。
仅更新该字段,不影响其他人员信息。
operationId: orgPersonnelUpdateOriginFace
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrgPersonnelUpdateOriginFaceCmd'
example:
id: 10001
originFaceUrl: "https://oss.example.com/face/10001.jpg"
responses:
'200':
description: 成功(返回更新后的人员信息)
content:
application/json:
schema:
$ref: '#/components/schemas/SingleResponseOrgPersonnelCO'
example:
success: true
code: "0"
message: "success"
errMessage: null
data:
id: 10001
userName: "张三"
originFaceUrl: "https://oss.example.com/face/10001.jpg"
/safetyEval/org-personnel/compare-face:
post:
tags: [人员信息-人脸接口]
summary: 人脸比对
description: |
传入待比对图片 base64imageBase64与人员 IDpersonnelId
服务端从人员「原始人像地址originFaceUrl」下载并转为 base64
再调用底层人脸比对能力返回两张人脸的相似度0~1越大越相似
operationId: orgPersonnelCompareFace
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrgPersonnelCompareFaceCmd'
example:
personnelId: 10001
imageBase64: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAABAAEBAREA/8QAFAABAAAAAAAAAAAAAAAAAAAAA//EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAD8AfwD/2Q=="
responses:
'200':
description: 成功返回相似度0~1
content:
application/json:
schema:
$ref: '#/components/schemas/SingleResponseBigDecimal'
example:
success: true
code: "0"
message: "success"
errMessage: null
data: 0.92
components:
schemas:
SingleResponseBase:
type: object
properties:
success: { type: boolean, example: true }
code: { type: string, example: "0" }
message: { type: string }
errMessage: { type: string }
OrgPersonnelUpdateOriginFaceCmd:
type: object
required: [id]
properties:
id:
type: integer
format: int64
description: 人员ID
example: 10001
originFaceUrl:
type: string
description: 原始人像地址(人脸比对基准图)
example: "https://oss.example.com/face/10001.jpg"
OrgPersonnelCompareFaceCmd:
type: object
required: [personnelId, imageBase64]
properties:
personnelId:
type: integer
format: int64
description: 人员ID
example: 10001
imageBase64:
type: string
description: 待比对人脸图片 base64
example: "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
OrgPersonnelCO:
type: object
properties:
id: { type: integer, format: int64 }
deptId: { type: integer, format: int64 }
postId: { type: integer, format: int64 }
userName: { type: string }
account: { type: string }
genderCode: { type: integer, format: int32 }
genderName: { type: string }
birthDate: { type: string, format: date }
joinWorkDate: { type: string, format: date }
idCardNo: { type: string }
currentAddress: { type: string }
officeAddress: { type: string }
educationCode: { type: string }
educationName: { type: string }
graduateSchool: { type: string }
major: { type: string }
basicDisciplineMajorId: { type: integer, format: int64 }
employmentStatusCode: { type: integer, format: int32 }
employmentStatusName: { type: string }
personTypeCode: { type: string }
personTypeName: { type: string }
qualScope: { type: string }
professionalLevelCode: { type: string }
professionalLevelName: { type: string }
evaluatorCertNo: { type: string }
educationTypeCode: { type: string }
educationTypeName: { type: string }
educationLevelCode: { type: string }
educationLevelName: { type: string }
titleCode: { type: string }
registerEngineerFlag: { type: integer, format: int32 }
publications: { type: string }
abilityDeclaration: { type: string }
workExperience: { type: string }
proofMaterialUrl: { type: string }
originFaceUrl: { type: string, description: 原始人像地址(人脸比对基准图) }
technicalDirectorFlag: { type: boolean }
processControlLeaderFlag: { type: boolean }
deptName: { type: string }
postName: { type: string }
certNames: { type: string }
changeCount: { type: integer, format: int32 }
resignApplyId: { type: integer, format: int64 }
resignAuditStatus: { type: integer, format: int32 }
tenantId: { type: integer, format: int64 }
SingleResponseOrgPersonnelCO:
allOf:
- $ref: '#/components/schemas/SingleResponseBase'
- type: object
properties:
data:
$ref: '#/components/schemas/OrgPersonnelCO'
SingleResponseBigDecimal:
allOf:
- $ref: '#/components/schemas/SingleResponseBase'
- type: object
properties:
data:
type: number
format: double
description: 人脸相似度0~1越大越相似
example: 0.92

View File

@ -11,6 +11,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
/**
* Controller
@ -60,4 +61,16 @@ public class OrgPersonnelController {
public SingleResponse<Void> resetPassword(@ApiParam("主键ID") @RequestBody Req<Long> req) {
return orgPersonnelApi.resetPassword(req.getData());
}
@ApiOperation("更新人员原始人像地址")
@PostMapping("/update-origin-face")
public SingleResponse<OrgPersonnelCO> updateOriginFace(@RequestBody OrgPersonnelUpdateOriginFaceCmd cmd) {
return orgPersonnelApi.updateOriginFace(cmd);
}
@ApiOperation("人脸比对传入待比对图片base64与人员原始人像比对")
@PostMapping("/compare-face")
public SingleResponse<BigDecimal> compareFace(@RequestBody OrgPersonnelCompareFaceCmd cmd) {
return orgPersonnelApi.compareFace(cmd);
}
}

View File

@ -15,6 +15,7 @@ import org.qinan.safetyeval.domain.entity.OrgPersonnelEntity;
import org.qinan.safetyeval.domain.entity.OrgPositionEntity;
import org.qinan.safetyeval.domain.exception.BizException;
import org.qinan.safetyeval.domain.exception.ErrorCode;
import org.qinan.safetyeval.domain.gateway.FaceCompareGateway;
import org.qinan.safetyeval.domain.gateway.OrgResignApplyGateway;
import org.qinan.safetyeval.domain.query.OrgPersonnelQuery;
import org.qinan.safetyeval.domain.query.PageResult;
@ -32,6 +33,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
@ -66,6 +68,9 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi {
@Autowired(required = false)
private OrgPositionDomainService orgPositionDomainService;
@Autowired(required = false)
private FaceCompareGateway faceCompareGateway;
@Value("${def.password:a123456}")
private String defPassword;
@Value("${def.publicKey:0402df2195296d4062ac85ad766994d73e871b887e18efb9a9a06b4cebc72372869b7da6c347c129dee2b46a0f279ff066b01c76208c2a052af75977c722a2ccee}")
@ -231,4 +236,27 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi {
orgPersonnelViewEnricher.enrichPersonnel(co);
}
}
@Override
public SingleResponse<OrgPersonnelCO> updateOriginFace(OrgPersonnelUpdateOriginFaceCmd cmd) {
OrgPersonnelEntity existing = orgPersonnelDomainService.get(cmd.getId());
if (existing == null) {
throw new BizException(ErrorCode.ORG_PERSONNEL_NOT_FOUND);
}
existing.setOriginFaceUrl(cmd.getOriginFaceUrl());
OrgPersonnelEntity result = orgPersonnelDomainService.modify(existing);
OrgPersonnelCO co = orgPersonnelConvertor.toCO(result);
enrich(co);
return SingleResponse.success(co);
}
@Override
public SingleResponse<BigDecimal> compareFace(OrgPersonnelCompareFaceCmd cmd) {
OrgPersonnelEntity entity = orgPersonnelDomainService.get(cmd.getPersonnelId());
if (entity == null) {
throw new BizException(ErrorCode.ORG_PERSONNEL_NOT_FOUND);
}
BigDecimal score = faceCompareGateway.compare(entity.getOriginFaceUrl(), cmd.getImageBase64());
return SingleResponse.success(score);
}
}

View File

@ -4,8 +4,12 @@ import org.qinan.safetyeval.client.co.OrgPersonnelCO;
import org.qinan.safetyeval.client.dto.PageResponse;
import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.OrgPersonnelAddCmd;
import org.qinan.safetyeval.client.dto.OrgPersonnelCompareFaceCmd;
import org.qinan.safetyeval.client.dto.OrgPersonnelModifyCmd;
import org.qinan.safetyeval.client.dto.OrgPersonnelPageQuery;
import org.qinan.safetyeval.client.dto.OrgPersonnelUpdateOriginFaceCmd;
import java.math.BigDecimal;
/**
* Client
@ -25,4 +29,8 @@ public interface OrgPersonnelApi {
PageResponse<OrgPersonnelCO> page(OrgPersonnelPageQuery query);
SingleResponse<Void> resetPassword(Long id);
SingleResponse<OrgPersonnelCO> updateOriginFace(OrgPersonnelUpdateOriginFaceCmd cmd);
SingleResponse<BigDecimal> compareFace(OrgPersonnelCompareFaceCmd cmd);
}

View File

@ -117,6 +117,9 @@ public class OrgPersonnelCO {
@ApiModelProperty(value = "证明材料附件地址")
private String proofMaterialUrl;
@ApiModelProperty(value = "原始人像地址(人脸比对基准图)")
private String originFaceUrl;
@ApiModelProperty(value = "是否技术负责人")
private Boolean technicalDirectorFlag;

View File

@ -0,0 +1,20 @@
package org.qinan.safetyeval.client.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
*
*/
@Data
public class OrgPersonnelCompareFaceCmd {
@ApiModelProperty(value = "人员ID", required = true)
private Long personnelId;
@NotBlank(message = "待比对图片base64不能为空")
@ApiModelProperty(value = "待比对人脸图片 base64", required = true)
private String imageBase64;
}

View File

@ -0,0 +1,20 @@
package org.qinan.safetyeval.client.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
*
*/
@Data
public class OrgPersonnelUpdateOriginFaceCmd {
@NotNull(message = "人员ID不能为空")
@ApiModelProperty(value = "人员ID", required = true)
private Long id;
@ApiModelProperty(value = "原始人像地址(人脸比对基准图)")
private String originFaceUrl;
}

View File

@ -120,6 +120,9 @@ public class OrgPersonnelEntity {
/** 申报专业能力证明材料(多个逗号分隔) */
private String proofMaterialUrl;
/** 原始人像地址(人脸比对基准图) */
private String originFaceUrl;
/** 是否技术负责人 */
private Boolean technicalDirectorFlag;

View File

@ -25,6 +25,10 @@ public enum ErrorCode {
ORG_PERSONNEL_NOT_FOUND("01-05-001", "人员信息不存在"),
ORG_PERSONNEL_ACCOUNT_EXISTS("01-05-002", "账号已存在"),
ORG_PERSONNEL_IDCARDNO_EXISTS("01-05-003", "身份证已存在"),
// ---- 人员人脸比对 ----
ORG_PERSONNEL_FACE_ORIGIN_EMPTY("01-05-004", "人员未配置原始人像,无法比对"),
ORG_PERSONNEL_FACE_COMPARE_EMPTY("01-05-005", "待比对图片不能为空"),
ORG_PERSONNEL_FACE_COMPARE_FAILED("01-05-006", "人脸比对失败"),
// ---- 人员证书 ----
ORG_PERSONNEL_CERT_NOT_FOUND("01-06-001", "人员证书不存在"),

View File

@ -0,0 +1,21 @@
package org.qinan.safetyeval.domain.gateway;
import java.math.BigDecimal;
/**
*
* <p>
*
* </p>
*/
public interface FaceCompareGateway {
/**
*
*
* @param originFaceUrl
* @param compareImageBase64 base64
* @return 0~100
*/
BigDecimal compare(String originFaceUrl, String compareImageBase64);
}

View File

@ -1,5 +1,7 @@
package org.qinan.safetyeval.infrastructure.dataobject;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@ -52,6 +54,10 @@ public class OrgPersonnelDO {
private String abilityDeclaration;
private String workExperience;
private String proofMaterialUrl;
@TableField(value = "origin_face_url", updateStrategy = FieldStrategy.NOT_NULL)
private String originFaceUrl;
private Boolean technicalDirectorFlag;
private Boolean processControlLeaderFlag;

View File

@ -0,0 +1,39 @@
package org.qinan.safetyeval.infrastructure.gatewayimpl;
import org.qinan.safetyeval.domain.exception.BizException;
import org.qinan.safetyeval.domain.exception.ErrorCode;
import org.qinan.safetyeval.domain.gateway.FaceCompareGateway;
import org.qinan.safetyeval.infrastructure.utils.FaceUtil;
import org.qinan.safetyeval.infrastructure.utils.ImageBase64Util;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
/**
*
* <p>
* base64 {@link FaceUtil}
* </p>
*/
@Service
public class FaceCompareGatewayImpl implements FaceCompareGateway {
@Override
public BigDecimal compare(String originFaceUrl, String compareImageBase64) {
if (originFaceUrl == null || originFaceUrl.trim().isEmpty()) {
throw new BizException(ErrorCode.ORG_PERSONNEL_FACE_ORIGIN_EMPTY);
}
if (compareImageBase64 == null || compareImageBase64.trim().isEmpty()) {
throw new BizException(ErrorCode.ORG_PERSONNEL_FACE_COMPARE_EMPTY);
}
String originBase64 = ImageBase64Util.urlToBase64(originFaceUrl);
try {
Float confidence = FaceUtil.compareFace(compareImageBase64, originBase64);
return BigDecimal.valueOf(confidence == null ? 0f : confidence);
} catch (BizException e) {
throw e;
} catch (Exception e) {
throw new BizException(ErrorCode.ORG_PERSONNEL_FACE_COMPARE_FAILED);
}
}
}

View File

@ -0,0 +1,45 @@
package org.qinan.safetyeval.infrastructure.utils;
import com.aliyun.facebody20191230.Client;
import com.aliyun.facebody20191230.models.CompareFaceRequest;
import com.aliyun.facebody20191230.models.CompareFaceResponse;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
/**
*
* <p>
* SDK
* </p>
*/
public class FaceUtil {
private static final String ACCESS_KEY_ID = "LTAI5tDrmQvhtSDPHApBSL56";
private static final String ACCESS_KEY_SECRET = "Fy68zvuMcBGh9eyNXmWhOZNAOzww40";
private static final String ENDPOINT = "facebody.cn-shanghai.aliyuncs.com";
public static Client createClient() throws Exception {
Config config = new Config()
.setAccessKeyId(ACCESS_KEY_ID)
.setAccessKeySecret(ACCESS_KEY_SECRET);
config.endpoint = ENDPOINT;
return new Client(config);
}
/**
*
*
* @param data1 1 base64
* @param data2 2 base64
* @return 0~100
*/
public static Float compareFace(String data1, String data2) throws Exception {
Client client = createClient();
CompareFaceRequest request = new CompareFaceRequest()
.setImageDataA(data1)
.setImageDataB(data2);
RuntimeOptions runtime = new RuntimeOptions();
CompareFaceResponse response = client.compareFaceWithOptions(request, runtime);
return response.getBody().getData().getConfidence();
}
}

View File

@ -0,0 +1,60 @@
package org.qinan.safetyeval.infrastructure.utils;
import org.qinan.safetyeval.domain.exception.BizException;
import org.qinan.safetyeval.domain.exception.ErrorCode;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;
/**
* base64 data:
*/
public class ImageBase64Util {
private static final int CONNECT_TIMEOUT_MILLIS = 10000;
private static final int READ_TIMEOUT_MILLIS = 10000;
private static final int MAX_BYTES = 10 * 1024 * 1024;
public static String urlToBase64(String imageUrl) {
if (imageUrl == null || imageUrl.trim().isEmpty()) {
throw new BizException(ErrorCode.ORG_PERSONNEL_FACE_ORIGIN_EMPTY);
}
HttpURLConnection connection = null;
try {
URL url = new URL(imageUrl);
connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(CONNECT_TIMEOUT_MILLIS);
connection.setReadTimeout(READ_TIMEOUT_MILLIS);
connection.setRequestMethod("GET");
connection.setInstanceFollowRedirects(true);
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
throw new BizException(ErrorCode.FILE_DOWNLOAD_FAILED);
}
try (InputStream in = connection.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream()) {
byte[] buffer = new byte[8192];
int len;
int total = 0;
while ((len = in.read(buffer)) != -1) {
total += len;
if (total > MAX_BYTES) {
throw new BizException(ErrorCode.FILE_DOWNLOAD_FAILED);
}
out.write(buffer, 0, len);
}
return Base64.getEncoder().encodeToString(out.toByteArray());
}
} catch (BizException e) {
throw e;
} catch (Exception e) {
throw new BizException(ErrorCode.FILE_DOWNLOAD_FAILED);
} finally {
if (connection != null) {
connection.disconnect();
}
}
}
}

View File

@ -1,4 +1,4 @@
<!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-rspack.2 Frontend_Env[production] Build_Date[2026/7/17 11:48:56] App_Identifier[safetyEval]"><meta charset="UTF-8"/><meta name="renderer" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"/><meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><title>--</title><script>(function () {
<!doctype html><html lang="zh"><head data-built-info="@cqsjjb/scripts@2.0.0-rspack.1 Frontend_Env[production] Build_Date[2026/7/29 09:19:40] App_Identifier[safetyEval]"><meta charset="UTF-8"/><meta name="renderer" content="webkit"/><meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1"/><meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"><title>--</title><script>(function () {
const APP_ENV = {
antd: {
'ant-prefix': 'micro-temp',
@ -89,4 +89,4 @@
},
}
}</script><script defer="defer" src="/safetyEval/static/js/323.82ddd87cde984d87.js"></script><script defer="defer" src="/safetyEval/static/js/121.ae75e71830bf4ae0.js"></script><script defer="defer" src="/safetyEval/static/js/647.ef28d2f331caf857.js"></script><script defer="defer" src="/safetyEval/static/js/main.947340ae241ce8fb.js"></script><link href="/safetyEval/static/css/main.afb99f19e98f2011.css" rel="stylesheet"></head><body><noscript>此网页需要开启JavaScript功能。</noscript><div id="root" style="width: 100%; height: 100%; position: relative;overflow-y: auto"></div><script type="text/javascript">/* @cqsjjb/script 输出当前应用基本信息 */console.log("%c@cqsjjb/scripts@2.0.0-rspack.2 Frontend_Env[production] Build_Date[2026/7/17 11:48:56] App_Identifier[safetyEval] Frontend_Branch[dev_1.0.1] Backend_Branch[dev]", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body></html>
}</script><script defer="defer" src="/safetyEval/static/js/338.1b66d6d63e1b5322.js"></script><script defer="defer" src="/safetyEval/static/js/121.ae75e71830bf4ae0.js"></script><script defer="defer" src="/safetyEval/static/js/289.7986b98192d94918.js"></script><script defer="defer" src="/safetyEval/static/js/main.dd7ecb5f742e3668.js"></script><link href="/safetyEval/static/css/main.fd0f74d150393310.css" rel="stylesheet"></head><body><noscript>此网页需要开启JavaScript功能。</noscript><div id="root" style="width: 100%; height: 100%; position: relative;overflow-y: auto"></div><script type="text/javascript">/* @cqsjjb/script 输出当前应用基本信息 */console.log("%c@cqsjjb/scripts@2.0.0-rspack.1 Frontend_Env[production] Build_Date[2026/7/29 09:19:40] App_Identifier[safetyEval] Frontend_Branch[dev] Backend_Branch[dev]", "color: #1890ff; border-radius: 2px; padding: 0 4px; border: 1px solid #1890ff; background: #f9fcff")</script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -31,6 +31,7 @@
"antd": "^5.29.2",
"dayjs": "^1.11.7",
"echarts": "^6.1.0",
"history": "^4.10.1",
"lodash-es": "^4.17.21",
"react": "^18.2.0",
"react-dom": "^18.2.0",