1. 项目背景与目标
本项目以黄石市人大代表与公民之间的民生问题征集与处理为核心,旨在
通过互联网技术搭建一个集“公民建议通道”“人大履职平台”“建议征
集渠道”“建议进度查询”于一体的综合性系统。
o 背景:民生问题与人民群众生活密切相关,传统线下渠道存在效率低、反
馈慢、透明度不足等问题。黄石市作为人口超 240 万的城市,亟需现代化
工具提升民主治理效率。
o 目标:通过系统化设计,实现公民建议的便捷提交、人大代表高效处理、
流程透明化及结果可视化,推动“人民当家作主”的民主实践。
2. 研究内容与创新点
o 核心模块:公民建议通道、人大履职平台、建议征集渠道、建议进度查
询。
o 创新设计:
多渠道征集:公民可通过直接提交建议或参与人大发起的热门话题
建言献策。
自动化办公:集成工作流技术,实现任务分配、超时归还、进度追
踪的自动化管理。
安全与合规:对敏感内容(如隐私信息、违规输入)进行智能检
测,并通过人机验证保障系统安全性。
数据可视化:通过动态图表展示建议分类、处理进度及人大代表履
职情况,提升决策科学性。
1. 工作流闭环设计:最初发现建议处理常因任务堆积超时,我基于 Activiti 设计了自动分配 - 超时回收的流程。但落地时遇到两个技术卡点:
- 官方框架启动时报 “数据库字段缺失”,查看日志发现 Activiti 7.1.0 的 bug(少了 ACT_GE_BYTEARRAY 的 REV_和 NAME_字段),我直接写了 SQL 脚本补全字段,并封装成初始化函数集成到项目的 CI 流程中,确保部署时自动执行;
- 流程节点状态同步需要实时更新 UI,我用 Pinia 的 watchEffect 监听流程实例 ID,结合 WebSocket 推送,实现了状态变更 300ms 内刷新界面,最终建议处理效率提升 40%。
2. SSE 流式输出优化:为解决 “刷新丢失消息” 和 “token 浪费”,我设计了两层方案:
- 前端用「指针退避算法」:每次接收消息时记录当前位置(如第 120 个字符),刷新后通过 EventSource 的 lastEventId 重连,从断点续传,这里其实是利用了 SSE 协议的 id 字段特性;
- 缓存策略上,对社区模块的重复请求,用 Axios 拦截器实现 ETag+Last-Modified 协商缓存,非更新时直接返回 304,经测试 token 消耗减少 60%,接口响应速度提升 200ms。
3. 性能优化落地:首屏从 3.5 秒压到 1.2 秒的具体操作:
- 资源层面:用 Vite 的 splitChunks 拆包,把 node_modules 单独打包,配合 rollup-plugin-visualizer 分析,剔除了 3 个未使用的第三方库;
- 渲染层面:首页非关键组件(如统计图表)用 IntersectionObserver 实现懒加载,LCP(最大内容绘制)时间从 2.1 秒降到 0.8 秒;
- 可以共享屏幕看实际效果,比如这里的流程节点动画,是用 requestAnimationFrame 做的平滑过渡,比 CSS 动画性能提升 30%。