背景:该项目是一个 Excel 数据导入、分析、联表查询与导出的 Web 平台,满足业务人员将不同来源 Excel 表格集中管理、筛选分析、关联匹配、合并导出的需求。
目标:构建轻量级自包含平台,让非技术人员在浏览器中完成 Excel 上传导入(自动去重)、数据浏览筛选、分组统计、两表关联查询(INNER/LEFT/RIGHT/FULL JOIN)、结果导出、多表合并导出。
功能模块:共五大模块。(1)认证安全:登录验证码(Java Graphics2D 绘制 3 位数字图片)、Session 认证、白名单过滤、5 次失败锁定。(2)Excel 导入:支持 .xlsx/.xls,MD5 去重,EasyExcel 流式解析,每 2000 行批量写入,全空行自动跳过,.xls 异常时降级 JExcel。(3)数据分析:500 条/页浏览、列筛选(含智能统计如最大最小值求和)、分组统计、列拖拽排序、列隐藏恢复、行删除。(4)联表查询:四步流程(选表→配字段→预估风险→执行 JOIN),风险检测覆盖笛卡尔积、膨胀系数、去重值重叠度,结果 10 万行硬截断保护,内存缓存 30 分钟自动过期。(5)导出:当前批次导出、筛选后明细导出、联表结果导出、多表合并导出,EasyExcel 带样式和冻结首行。前端共五个页面:login.html、index.html(主框架+侧边栏菜单+退出登录)、excel-import.html、excel-merge.html、excel-multi-join.html。
业务流程:导入流程为上传→MD5 查重→建批次→逐行解析→批量写入→完成统计。联表查询为选表→配关联字段→预估行数并校验风险→执行 JOIN(HashMap 键索引匹配)→缓存结果→分页展示筛选。数据分析采用 FilterStep 管道模型,每步操作记录为步骤对象,后端按顺序执行管道实现筛选分组的正确叠加。
架构:分层架构。MySQL 三表(批次/表头/数据行 30 列扁平存储);MyBatis 数据层;Service 层采用门面模式,ExcelServiceImpl 统一入口协调六个子 Service(批次 CRUD、导入、筛选分组、联表查询、导出);Controller 层 AuthController + BasicController;前端 DataTableComponent 通用表格组件通过桥接文件零侵入集成。
设计思路:门面模式使子 Service 职责单一;联表结果用 ConcurrentHashMap 缓存,守护线程每 5 分钟清理过期数据;安全上 LoginFilter 白名单 + Session 校验,登录后销毁旧 Session 防 Fixation,失败 5 次锁定账户,验证码消费即删防重放。
技术栈:后端 Spring Boot 2.6 + MyBatis + MySQL + Druid + EasyExcel + JExcelApi + Jackson;前端原生 JS + Bootstrap 5 + SortableJS + SheetJS。Java 1.8,端口 52099。
难点与解决:(1).xls 文件 POI 限制:捕获异常自动降级 JExcel 读取。(2)联表笛卡尔积:预估阶段三级风险预警 + 10 万行硬截断 + 定时清理缓存。(3)筛选分组状态链:FilterStep 管道模型,后端按序执行。(4)列智能类型识别:逐级判断身份证→电话→日期→数值,80% 阈值防误判。(5)表格组件复用:配置驱动 + 桥接模式覆盖旧函数。(6)自定义列映射:前端传 headersJson,后端构建 HashMap 映射写入。(7)Session 安全:白名单过滤 + 防 Fixation + 防暴力破解 + 禁持久化。