“ 实践是检验真理的唯一标准”
01.需求介绍
Excel导入文件后存入到源数据表中,再根据规则表中配置的规则开始治理数据,将治理的数据存入治理数据表中. 源数据通过不同规则生成不同格式的数据,支持同一个文件源数据多次治理
02.需求分析
-
源数据表中可以保存Excel文件中所有数据, 且支持所有不同数据列的数据
-
规则表, 配置数据处理规则, 需设计规则管理, 规则跟数据列有关系, 可以增加列, 可以删除列
-
治理的数据是由Excel源数据和治理规则来决定的
-
一个Excel可以包含多个sheet,每个sheet可以是不同格式列的数据
-
一个sheet可以对应多个治理规则
-
同一个文件/同一个治理规则生成的数据总和也要满足 治理规则
03.重点分析
-
源数据表中可以存储不同数据列的数据, 这里需要设计一个 文件数据列和表字段的映射表, 源数据表只存储数据, 可以定义固定列名,如:column1,column2,column3, 再将列名与文件中的列名一一对应
-
一个文件对应多个sheet, 源数据/治理数据 跟sheet直接关系, 跟文件间接关系
-
治理后的数据可以增加/删除源数据映射表的映射关系, 所以治理后的数据有自己单独的 字段和列名映射表
04.优化点
-
文件导入时, 读取文件内容时需要考虑效率
-
文件导入时, 源数据入库时需要考虑效率
-
根据规则处理数据时, 注意代码格式, 方便后期增加新规则代码
-
治理数据入库时, 需要考虑存储效率
04.表设计
-
文件表
CREATE TABLE `import_file` (
`id` int(12) NOT NULL AUTO_INCREMENT COMMENT '主键',
`file_name` varchar(255) DEFAULT NULL COMMENT '文件名称',
`file_path` varchar(255) DEFAULT NULL COMMENT '文件路径',
`import_status` tinyint(2) DEFAULT '1' COMMENT '导入状态(1导入中 2导入完成 3导入失败)',
`file_size` bigint(20) DEFAULT '0' COMMENT '文件大小',
`file_md5` varchar(255) DEFAULT NULL COMMENT '文件md5',
`suffix` varchar(20) DEFAULT NULL COMMENT '文件后缀',
`import_msg` varchar(500) DEFAULT NULL COMMENT '导入备注',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COMMENT='导入文件记录';
-
sheet表
CREATE TABLE `sheet_info` (
`id` int(12) NOT NULL COMMENT '主键',
`file_id` int(20) DEFAULT NULL COMMENT '文件id',
`file_name` varchar(255) DEFAULT NULL COMMENT '文件名称',
`sheet_idx` tinyint(6) DEFAULT NULL COMMENT 'sheet序号',
`sheet_name` varchar(255) DEFAULT NULL COMMENT 'sheet名称',
`total` int(12) DEFAULT '0' COMMENT '总条数',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
源数据表(只支持50个字段)
CREATE TABLE `source_data` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`file_id` int(12) DEFAULT NULL COMMENT '文件id',
`sheet_id` int(12) DEFAULT NULL COMMENT 'sheet的id',
`sheet_name` varchar(255) DEFAULT NULL COMMENT 'sheet名称',
`column1` varchar(255) DEFAULT '' COMMENT '字段1',
`column2` varchar(255) DEFAULT '' COMMENT '字段2',
`column3` varchar(255) DEFAULT '' COMMENT '字段3',
`column4` varchar(255) DEFAULT '' COMMENT '字段4',
`column5` varchar(255) DEFAULT '' COMMENT '字段5',
`column6` varchar(255) DEFAULT '' COMMENT '字段6',
`column7` varchar(255) DEFAULT '' COMMENT '字段7',
`column8` varchar(255) DEFAULT '' COMMENT '字段8',
`column9` varchar(255) DEFAULT '' COMMENT '字段9',
`column10` varchar(255) DEFAULT '' COMMENT '字段10',
`column11` varchar(255) DEFAULT '' COMMENT '字段11',
`column12` varchar(255) DEFAULT '' COMMENT '字段12',
`column13` varchar(255) DEFAULT '' COMMENT '字段13',
`column14` varchar(255) DEFAULT '' COMMENT '字段14',
`column15` varchar(255) DEFAULT '' COMMENT '字段15',
`column16` varchar(255) DEFAULT '' COMMENT '字段16',
`column17` varchar(255) DEFAULT '' COMMENT '字段17',
`column18` varchar(255) DEFAULT '' COMMENT '字段18',
`column19` varchar(255) DEFAULT '' COMMENT '字段19',
`column20` varchar(255) DEFAULT '' COMMENT '字段20',
`column21` varchar(255) DEFAULT '' COMMENT '字段21',
`column22` varchar(255) DEFAULT '' COMMENT '字段22',
`column23` varchar(255) DEFAULT '' COMMENT '字段23',
`column24` varchar(255) DEFAULT '' COMMENT '字段24',
`column25` varchar(255) DEFAULT '' COMMENT '字段25',
`column26` varchar(255) DEFAULT '' COMMENT '字段26',
`column27` varchar(255) DEFAULT '' COMMENT '字段27',
`column28` varchar(255) DEFAULT '' COMMENT '字段28',
`column29` varchar(255) DEFAULT '' COMMENT '字段29',
`column30` varchar(255) DEFAULT '' COMMENT '字段30',
`column31` varchar(255) DEFAULT '' COMMENT '字段31',
`column32` varchar(255) DEFAULT '' COMMENT '字段32',
`column33` varchar(255) DEFAULT '' COMMENT '字段33',
`column34` varchar(255) DEFAULT '' COMMENT '字段34',
`column35` varchar(255) DEFAULT '' COMMENT '字段35',
`column36` varchar(255) DEFAULT '' COMMENT '字段36',
`column37` varchar(255) DEFAULT '' COMMENT '字段37',
`column38` varchar(255) DEFAULT '' COMMENT '字段38',
`column39` varchar(255) DEFAULT '' COMMENT '字段39',
`column40` varchar(255) DEFAULT '' COMMENT '字段40',
`column41` varchar(255) DEFAULT '' COMMENT '字段41',
`column42` varchar(255) DEFAULT '' COMMENT '字段42',
`column43` varchar(255) DEFAULT '' COMMENT '字段43',
`column44` varchar(255) DEFAULT '' COMMENT '字段44',
`column45` varchar(255) DEFAULT '' COMMENT '字段45',
`column46` varchar(255) DEFAULT '' COMMENT '字段46',
`column47` varchar(255) DEFAULT '' COMMENT '字段47',
`column48` varchar(255) DEFAULT '' COMMENT '字段48',
`column49` varchar(255) DEFAULT '' COMMENT '字段49',
`column50` varchar(255) DEFAULT '' COMMENT '字段50',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=422628 DEFAULT CHARSET=utf8mb4 COMMENT='原文件数据';
-
字段/文件头映射表
CREATE TABLE `header_info` (
`id` int(12) NOT NULL AUTO_INCREMENT,
`header_no` varchar(20) DEFAULT NULL COMMENT '文件头模版编号',
`header_name` varchar(255) DEFAULT NULL COMMENT '文件头模版名称',
`file_id` int(12) DEFAULT NULL COMMENT '文件id',
`sheet_id` int(12) DEFAULT NULL COMMENT 'sheet的id',
`sheet_name` varchar(255) DEFAULT NULL COMMENT 'sheet名称',
`data_type` varchar(20) DEFAULT 'source' COMMENT '数据类型:source源数据,govern治理数据',
`cols_idx` tinyint(6) DEFAULT NULL COMMENT '列序号',
`cols_name` varchar(255) DEFAULT NULL COMMENT '列名',
`column_name` varchar(255) DEFAULT NULL COMMENT '库字段名称',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=608 DEFAULT CHARSET=utf8mb4 COMMENT='导入文件头模板';
-
治理规则表
CREATE TABLE `govern_rule` (
`id` int(12) NOT NULL AUTO_INCREMENT COMMENT '主键',
`header_no` varchar(20) DEFAULT NULL COMMENT '头映射编号',
`header_name` varchar(255) DEFAULT NULL COMMENT '头映射名称',
`rule_no` varchar(20) DEFAULT NULL COMMENT '规则编号',
`rule_type` varchar(20) DEFAULT NULL COMMENT '规则类型',
`rule_content` varchar(1024) DEFAULT NULL COMMENT '规则内容集合',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COMMENT='治理规则';
-
治理记录表
CREATE TABLE `govern_record` (
`id` int(12) NOT NULL AUTO_INCREMENT COMMENT '主键',
`file_id` int(12) DEFAULT NULL COMMENT '文件id',
`sheet_id` int(12) DEFAULT NULL COMMENT 'sheet序号',
`sheet_name` varchar(255) DEFAULT NULL COMMENT 'sheet名称',
`rule_no` varchar(20) DEFAULT NULL COMMENT '规则编号',
`header_no` varchar(20) DEFAULT NULL COMMENT '头映射编号',
`header_name` varchar(255) DEFAULT NULL COMMENT '头映射名称',
`total_num` int(10) DEFAULT NULL COMMENT '总数量',
`success_num` int(10) DEFAULT '0' COMMENT '成功数量',
`error_num` int(10) DEFAULT '0' COMMENT '错误数量',
`filtration_num` int(10) DEFAULT '0' COMMENT '筛选掉的数量',
`message` text COMMENT '备注',
`govern_status` tinyint(2) DEFAULT '1' COMMENT '治理状态(1治理中 2治理完成 3治理失败)',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8mb4 COMMENT='治理记录';
-
治理数据表
CREATE TABLE `govern_data` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`file_id` int(12) DEFAULT NULL COMMENT '文件id',
`sheet_id` int(12) DEFAULT NULL COMMENT 'sheet序号',
`sheet_name` varchar(255) DEFAULT NULL COMMENT 'sheet名称',
`rule_no` varchar(255) DEFAULT NULL COMMENT '规则编号',
`header_no` varchar(20) DEFAULT NULL COMMENT '头映射编号',
`header_name` varchar(255) DEFAULT NULL COMMENT '头映射名称',
`source_id` bigint(20) DEFAULT NULL COMMENT '源数据id',
`column1` varchar(255) DEFAULT '' COMMENT '字段1',
`column2` varchar(255) DEFAULT '' COMMENT '字段2',
`column3` varchar(255) DEFAULT '' COMMENT '字段3',
`column4` varchar(255) DEFAULT '' COMMENT '字段4',
`column5` varchar(255) DEFAULT '' COMMENT '字段5',
`column6` varchar(255) DEFAULT '' COMMENT '字段6',
`column7` varchar(255) DEFAULT '' COMMENT '字段7',
`column8` varchar(255) DEFAULT '' COMMENT '字段8',
`column9` varchar(255) DEFAULT '' COMMENT '字段9',
`column10` varchar(255) DEFAULT '' COMMENT '字段10',
`column11` varchar(255) DEFAULT '' COMMENT '字段11',
`column12` varchar(255) DEFAULT '' COMMENT '字段12',
`column13` varchar(255) DEFAULT '' COMMENT '字段13',
`column14` varchar(255) DEFAULT '' COMMENT '字段14',
`column15` varchar(255) DEFAULT '' COMMENT '字段15',
`column16` varchar(255) DEFAULT '' COMMENT '字段16',
`column17` varchar(255) DEFAULT '' COMMENT '字段17',
`column18` varchar(255) DEFAULT '' COMMENT '字段18',
`column19` varchar(255) DEFAULT '' COMMENT '字段19',
`column20` varchar(255) DEFAULT '' COMMENT '字段20',
`column21` varchar(255) DEFAULT '' COMMENT '字段21',
`column22` varchar(255) DEFAULT '' COMMENT '字段22',
`column23` varchar(255) DEFAULT '' COMMENT '字段23',
`column24` varchar(255) DEFAULT '' COMMENT '字段24',
`column25` varchar(255) DEFAULT '' COMMENT '字段25',
`column26` varchar(255) DEFAULT '' COMMENT '字段26',
`column27` varchar(255) DEFAULT '' COMMENT '字段27',
`column28` varchar(255) DEFAULT '' COMMENT '字段28',
`column29` varchar(255) DEFAULT '' COMMENT '字段29',
`column30` varchar(255) DEFAULT '' COMMENT '字段30',
`column31` varchar(255) DEFAULT '' COMMENT '字段31',
`column32` varchar(255) DEFAULT '' COMMENT '字段32',
`column33` varchar(255) DEFAULT '' COMMENT '字段33',
`column34` varchar(255) DEFAULT '' COMMENT '字段34',
`column35` varchar(255) DEFAULT '' COMMENT '字段35',
`column36` varchar(255) DEFAULT '' COMMENT '字段36',
`column37` varchar(255) DEFAULT '' COMMENT '字段37',
`column38` varchar(255) DEFAULT '' COMMENT '字段38',
`column39` varchar(255) DEFAULT '' COMMENT '字段39',
`column40` varchar(255) DEFAULT '' COMMENT '字段40',
`column41` varchar(255) DEFAULT '' COMMENT '字段41',
`column42` varchar(255) DEFAULT '' COMMENT '字段42',
`column43` varchar(255) DEFAULT '' COMMENT '字段43',
`column44` varchar(255) DEFAULT '' COMMENT '字段44',
`column45` varchar(255) DEFAULT '' COMMENT '字段45',
`column46` varchar(255) DEFAULT '' COMMENT '字段46',
`column47` varchar(255) DEFAULT '' COMMENT '字段47',
`column48` varchar(255) DEFAULT '' COMMENT '字段48',
`column49` varchar(255) DEFAULT '' COMMENT '字段49',
`column50` varchar(255) DEFAULT '' COMMENT '字段50',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
KEY `idx_sheet_header` (`sheet_id`,`header_no`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=609235 DEFAULT CHARSET=utf8mb4 COMMENT='之后后数据';
--- 后续增加代码编写部分