票据通(TicketFlow)是一套面向差旅报销场景的智能票据整理系统,包含用户端和管理端两套 Web 应用,定位为"一人发起、多人收集、自动校验、一键出件"。
1、业务背景:单位/学校差旅报销普遍存在"一名带队人、多名出行人、一张报销单"结构,票据种类多(高铁、机票、打车、住宿、报名费等),收集靠微信/邮箱回传,核对靠人工,易缺件、易漏检、有合规风险、出件排版低效。项目旨在将"收集—校验—整理—出件"全链路线上化,并建立"免费+增值"商业闭环。
2、核心业务闭环:任务拥有者创建整理单并发布,生成带有效期和次数限制的收集码;出行人凭码进入并绑定账号上传票据与佐证材料;系统先做内容安全自动审核(通过/拦截/待审),再做计费额度校验,随后模拟 OCR 识别并进行可插拔规则包校验(差旅闭环、出发地一致性、飞机vs高铁价格、多源核对、缺支付截图、金额不一致、发票重复等),输出通过/警告/失败三级并自动生成说明草稿;异常闭环后关闭上传,选择整理模板一键生成签字就绪 PDF,免费版带水印、会员/整理包无水印。
3、商业化:上传收集永久免费,付费责任归任务拥有者;提供月/年会员、单次/大额整理包,配套套餐配置、模拟支付、订单、退款与权益联动。模板市场沉淀整理模板与说明模板,支持复用分享。
4、管理端承担平台运营:任务与上传码管理、内容安全人工审核、订单退款、会员开通、套餐与免费额度配置、整理包发放、用户管理、模板/FAQ/反馈维护,并可对违规任务封禁、违规用户计次留痕、审核记录 CSV 导出。
票据通(TicketFlow)采用前后端分离 + 双前端工程架构,由用户端、管理端两套 Vue 3 应用与 SpringBoot 后端组成,独立完成全部设计与开发。
1、架构设计:技术栈为 Vue 3 + Element Plus + Pinia + Vue Router + Vite;后端设计为 Spring Boot 3 + Spring Security/JWT + MyBatis-Plus + MySQL 8 + Redis + OSS + iText,采用 Controller→Service→Mapper 三层架构,按业务域拆分为认证、任务、收集码、票据、校验、审核、计费、模板、PDF、统计等模块。
2、核心抽象:状态机驱动业务(任务 7 态、审核 3 态、订单 3 态、校验 4 级);可插拔校验规则包;套餐与免费额度配置单一数据源;内容安全优先;计费职责分离。前端自研 token 化设计系统,实现"报销单搬进网页"视觉与用户端夜间模式。
3、量化成果:2 个前端工程,56 个 Vue 组件 + 22 个 JS 模块,约 1.1 万行代码;26 个业务页面;15 类数据实体;8 个校验规则包;27 敏感词 + 17 引流词 + 6 模糊词;4 个计费套餐 + 免费额度;11 个内置模板;3 段式签字就绪 PDF,水印/无水印分级。
4、负责模块:独立完成需求梳理、架构设计、双工程开发与数据层实现。包括:双端架构与设计系统;用户端整理单全生命周期与收集码准入机制;8个可插拔规则包与三级校验;商业化模块(会员中心、整理包购买链路、付费墙、计费校验集中化);内容安全三态自动审核;管理端运营(工作台、套餐在线编辑、会员/额度/订单/用户/模板/FAQ/反馈管理、CSV 导出);性能优化(消除列表 N+1)。
5、难点与解决:
用户任务内身份因任务而异——全局仅 sys/user 两级,任务内身份动态判定;
审核中断状态机——记录 prevStatus 恢复;
自动三态 + 人工复核闭环;
计费归属与防滥用——上传免费、责任归拥有者;
列表 N+1——单次聚合统计;
规则可插拔且结果稳定——收敛为 runCheck 纯函数;
Element Plus 版本差异与字段口径归一化;
出件前合规兜底——有未审/违规项拒绝生成 PDF