产品订单微服务系统
创建于 2025 年 10 月 28 日
项目介绍
这是一个把”销售订单—SN 序列号—License 授权—测试报告”整条设备出厂链路拆成微服务的产品管理系统。项目没有从零造轮子,而是在若依微服务版 RuoYi-Cloud 3.6.6 的标准底座上做业务扩展:网关、认证中心、系统管理、代码生成、定时任务等基础设施全部复用,新增的业务则落在独立的 ruoyi-esong 聚合模块下,按职责拆成四个可独立部署、独立扩展的微服务——esong-orders(销售订单)、esong-sn(设备序列号)、esong-licenses(设备授权)、esong-reports(测试报告)。这种”标准框架打底、业务横向切分”的做法,是微服务改造里成本最低、收益最直观的一条路径。
从数据上看,链路是贯通的:销售订单记录设备类型与型号明细(如”行车记录仪 / EBC210、EBC211、EBC212”),SN 服务按订单批量生成设备序列号,License 服务再基于 SN 批量签发激活码,测试报告则以 SN 为纽带记录每台设备的测试结论与明细项,最终可以按 SN 把多份测试报告合并导出一个 PDF。数据库侧通过 sales_order、device_sn、device_license、test_report 四组表关联,业务侧则由各服务通过 Feign 接口跨服务协作。
项目架构
工程是标准的若依微服务多模块 Maven 结构,端口规划清晰:网关 ruoyi-gateway [8080]、认证中心 ruoyi-auth [9200]、系统服务 ruoyi-system [9201]、监控中心 ruoyi-visual-monitor [9100],前端 ruoyi-ui [80];四个业务服务的端口与配置则统一托管在 Nacos 配置中心(ESONG_GROUP 组),本地 bootstrap.yml 只负责指向 Nacos,例如 esong-orders 的配置注释里就写明”端口设置修改到 nacos 配置文档”。
基础设施选型与若依微服务版保持一致:
- 注册中心 / 配置中心:Nacos,服务发现走
spring.cloud.nacos.discovery,配置走spring.cloud.nacos.config,网关与认证服务还挂载共享配置application-dev.yml; - 认证与安全:Spring Cloud Gateway 网关承载统一入口,
AuthFilter校验 JWT 并将用户信息透传到下游服务,ruoyi-auth认证中心负责登录签发 token,Redis 缓存登录态与验证码; - 流量控制:Sentinel 网关流控,
bootstrap.yml中配置eager: true取消控制台懒加载,并将网关流控规则持久化到 Nacos(sentinel-ruoyi-gateway,rule-type: gw-flow); - 分布式事务:引入
ruoyi-common-seata模块,为跨服务写操作预留 Seata 分布式事务能力; - 部署:
docker/下提供docker-compose.yml(nginx、nacos、mysql、redis、ruoyi 服务编排),bin/下为各服务准备了 Windows 启动脚本。
服务间协作最典型的例子是字典数据的远程调用:订单服务与 SN 服务都通过 ruoyi-api-system 暴露的 Feign 接口 RemoteDictService 查询设备型号字典,调用时携带内部请求头 SecurityConstants.INNER 标识内部调用:
R<List<SysDictData>> response = remoteDictService.selectDictDataByType(dictType, SecurityConstants.INNER);
EquipmentServiceImpl 中预置了三类设备的字典类型映射(order_device_type_xcjly 行车记录仪、order_device_type_kcdzb 可穿戴装备、order_device_type_aiyj AI 硬件),型号列表完全由系统模块的字典数据驱动——这是微服务间”数据不落本地、接口按需拉取”的典型实践。
核心功能
- 销售订单管理(esong-orders):
SalesOrderController提供列表、详情、新增、修改、删除与 Excel 导出全套接口,权限点如esong:orders:list/add/edit/remove通过@RequiresPermissions声明。新增与修改均调用checkOrderNoUnique校验订单号唯一;删除逻辑里藏着一条业务约束——订单已生成 SN 号时抛ServiceException("该订单已生成SN号,不可删除")禁止删除。订单主表与明细表在SalesOrderServiceImpl中通过@Transactional联动维护,修改时先删明细再批量重插。 - SN 序列号生成(esong-sn):
generateSnCodes实现了可读性很好的编码规则——[类型码(1)][型号码(2)][生产日期码(2)][流水号(5)] => 10位纯数字。类型码由静态映射决定(行车记录仪/车载相机→1,可穿戴/穿戴相机→2,AI 硬件→3),型号码根据字典dictSort排序值换算成 2 位编码,生产日期码以BASE_YEAR = 2025为基准按月偏移,流水号按前缀取当月最大值MAX_MONTH_SEQUENCE = 99999递增,并在插入前做容量校验。生成入口在DeviceSnController的/device-sn/generate,同时支持 Excel 模板导入(importData+importTemplate)。 - License 授权(esong-licenses):以 SN 为主键签发激活码,
generateActivationCode用 UUID 去横线取 16 位 + SN 后 6 位 + 4 位激活天数拼成激活码;新增与批量导入前都通过selectDeviceLicenseBySnCode检查是否已授权,配合device_license表上UNIQUE KEY idx_sn_code双重防重。批量导入(importData)支持指定激活时长、记录来源 Excel 文件名,逐条处理并汇总”成功/跳过/失败”统计。 - 测试报告管理(esong-reports):
TestReportController除标准 CRUD 外,按 SN 查询报告(/test-report/sn/{snCode}),并基于 iText 实现三种 PDF 导出——单份报告导出(exportPdf)、按 SN 合并全部报告(exportPdfBySn)、批量打包 ZIP(exportPdfZip),文件名统一为”SN + 时间戳”格式。 - 前端配套(ruoyi-ui):Vue 2 + Element UI 的页面与后端服务一一对应——
views/order/sales(销售订单)、views/sn(SN 管理,含订单号/SN/型号检索与”是否重复”筛选、批量生成入口)、views/licenses、views/reports/test,按钮级权限标识(如esong:sn:generate)与后端@RequiresPermissions严格对齐。
功能截图
暂无运行截图。
快速上手
项目要求 JDK 1.8 + Maven。部署链路分三层:先执行 sql/ 下的初始化脚本——ry-cloud.sql(若依基础库)、ry-esong.sql(业务库,含四组业务表及示例数据)、ry-config.sql(Nacos 配置库)与 ry-seata.sql(Seata 事务表);再启动基础设施 Nacos、Redis、MySQL(本地地址均为 127.0.0.1:8848 等,与各服务 bootstrap.yml 一致);最后按依赖顺序启动服务:网关 ruoyi-gateway → 认证 ruoyi-auth → 系统 ruoyi-system → 四个业务服务(EsongOrdersApplication、EsongSnApplication、EsongLicensesApplication、EsongReportsApplication)。业务服务的端口、数据源等配置不在本地,需在 Nacos 控制台 ESONG_GROUP 组下预先创建,仓库 nacos-config/ 目录提供了配置导出包可直接导入。
前端进入 ruoyi-ui 执行 npm install && npm run dev,默认 admin/admin123 登录。有 Docker 环境时可直接使用 docker/ 下的 docker-compose.yml 编排整套中间件与服务,bin/ 目录还准备了各服务的 Windows 启动脚本便于日常开发。
总结
这个项目的看点不在于框架本身——RuoYi-Cloud 提供的网关、认证、Nacos 治理都是成熟能力,而在于”业务如何被合理地切成微服务”。四个业务服务恰好对应四个独立的业务生命周期:订单是源头,SN 是设备身份,License 是商业授权,报告是质量证据,彼此通过订单号/SN 码弱耦合,通过 Feign 接口协作而非共享数据库直查,这让每个服务都可以独立迭代、独立扩容,甚至独立发版。
实现上也有不少值得回味的细节:SN 的 10 位编码把设备类型、型号、生产月份压缩进一串数字,还考虑了每月 99999 的上限与容量预检;订单删除时校验”已生成 SN 不可删”体现了跨服务的数据一致性意识;License 导入返回”成功 N 条、跳过 M 条、错误明细”的统计式反馈,明显是从真实使用场景打磨出来的。从 SQL 里的示例数据(2025-10-29 至 2025-10-30 的测试记录)可以看出项目已在本地完整跑通,若依内置的代码生成、定时任务、服务监控等能力仍可继续为这个产品线扩展更多环节。