一个国际物流订单的Web管理系统,技术栈有Spring Clould、MyBatisPlus、Redis、RabbitMQ、Karfka、Oracle数据库,前后端分离,分布式部署。我承担后端Java开发的职责,参与每一到两周的迭代版本开发和系统维护。
1) 实时生成报表。
系统中根据不同的统计维度,有多种数据报表。但最初版本这些报表由定时任务20分钟生成一次,客户抱怨时效性太差。后来我设计了实时报表更新功能,基于 RabbitMQ 实现事件多对多发布订阅机制,生产者订单模块的多种业务中触发事件,消费者多线程消费实时刷新报表,并确保报表和订单的最终一致性。
2) 多时区支持。
订单系统是面向全球客户的,我们希望不同时区用户登录系统查看一个订单时,看到的都是本地化时间。我们的方案是后端自动转换时区,在 Spring 框架中添加拦截器,对传参和响应中的时间字段做时区转换。我在这一功能中解决了一些特殊场景(比如按前端月份查询)的时区转换问题,推动方案最终上线使用。
3) 多语言支持
。订单系统是面向全球客户使用,需要支持多种语言。但实现上有大量的细节需要考虑,整个系统的数据在多地区互通,比如在英语界面录入的信息字段,在中文界面要显示成中文。信息种类可能是公司名称、系统字典、地名、第三方查询结果等,处理逻辑不尽相同。我负责这一颇具挑战性翻译需求,积极和多个团队沟通,使功能顺利上线。
4) 数据推送与接收
。订单业务经常需要和上下游业务部门对接,进行数据交互,我做了通用的推送和接收数据的框架,功能包括推送中的异常和重试、记录推送状态、记录日志、异常预警等,可以简化接入的开发工作。
5) PDF打印。
系统可以打印空海陆铁等各种运输方式的货物提单、账单,不同的页面布局有三十多种。我们使用 Jasper Studio 设计页面样式,在代码中传参调用,生成PDF文件供用户下载。