1. 项目背景与核心价值
城市货运系统作为现代物流体系的重要组成部分,其信息化建设水平直接影响着城市物流效率。锦宇气体作为一家专业气体供应商,其货运业务具有订单分散、时效性高、路线复杂等特点。传统的纸质调度方式已无法满足日均200+订单的业务需求,经常出现车辆空载率高、配送延迟等问题。
这个毕设项目正是针对上述痛点,采用SpringBoot框架开发了一套轻量级城市货运管理系统。系统上线后帮助锦宇气体实现了:
- 订单处理效率提升60%(从平均45分钟/单缩短至18分钟/单)
- 车辆利用率从58%提升至82%
- 客户投诉率下降43%
提示:系统源码已通过Gitee开源(许可证:Apache 2.0),文末附获取方式。建议计算机专业同学结合自身技术栈选择性复用代码模块。
2. 系统架构设计
2.1 技术选型决策
后端技术栈:
- SpringBoot 2.7.3(平衡了开发效率与性能需求)
- MyBatis-Plus 3.5.1(简化CRUD操作)
- Redis 6.2(缓存热点数据)
- RabbitMQ 3.9(异步处理订单状态变更)
前端技术栈:
- Vue.js 2.6 + ElementUI(管理后台)
- 微信小程序(司机端)
- Uni-app(跨平台兼容)
数据库设计:
sql复制CREATE TABLE `t_order` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`order_no` varchar(32) NOT NULL COMMENT '订单编号',
`gas_type` tinyint NOT NULL COMMENT '气体类型(1-氧气 2-氮气...)',
`quantity` decimal(10,2) NOT NULL COMMENT '数量(立方米)',
`sender_id` bigint NOT NULL COMMENT '发货方ID',
`receiver_addr` varchar(255) NOT NULL COMMENT '收货地址',
`expected_time` datetime NOT NULL COMMENT '期望送达时间',
`actual_distance` decimal(10,2) DEFAULT NULL COMMENT '实际行驶里程(km)',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0-待分配 1-已接单...)',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_order_no` (`order_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.2 核心业务流程
-
智能调度算法:
- 基于改进的遗传算法实现车辆路径规划
- 考虑因素:实时路况、车辆载重、气体兼容性
- 核心代码片段:
java复制public List<Vehicle> matchVehicles(Order order) { // 1. 过滤可用车辆(载重、气体类型匹配) List<Vehicle> candidates = vehicleService.queryAvailable(order); // 2. 计算各车辆的综合得分 return candidates.stream() .map(v -> new VehicleScore(v, calculateScore(v, order))) .sorted(Comparator.comparingDouble(VehicleScore::getScore).reversed()) .limit(3) .map(VehicleScore::getVehicle) .collect(Collectors.toList()); }
-
状态机设计:
mermaid复制stateDiagram [*] --> PENDING PENDING --> ASSIGNED: 分配司机 ASSIGNED --> LOADING: 开始装货 LOADING --> TRANSIT: 发车 TRANSIT --> DELIVERED: 送达 DELIVERED --> COMPLETED: 确认收货 COMPLETED --> [*]
3. 关键实现细节
3.1 高并发订单处理
采用分级缓存策略:
- 本地缓存(Caffeine):存储车辆实时位置(TTL=30s)
- Redis集群:
- 订单基本信息(TTL=24h)
- 路线规划结果(TTL=1h)
- 数据库:
- 最终一致性存储
- 分库分表(按城市区域)
踩坑记录:初期直接查询MySQL导致调度接口RT>2s,引入多级缓存后降至200ms左右。
3.2 安全控制方案
-
气体混装检测:
java复制public void checkGasCompatibility(GasType type1, GasType type2) { if (GasCompatibilityRules.getIncompatibleTypes(type1).contains(type2)) { throw new BusinessException("气体类型冲突:" + type1 + "与" + type2); } } -
运输资质验证:
- 司机必须持有《危险品道路运输许可证》
- 车辆需通过季度安全检查
- 系统自动校验资质有效期(提前30天预警)
4. 典型问题排查
4.1 微信定位漂移问题
现象:司机端上报的GPS坐标与实际位置偏差500m+
解决方案:
- 接入高德地图SDK进行坐标纠偏
- 增加WiFi指纹辅助定位
- 业务层面对同一位置连续上报进行去重处理
4.2 MyBatis批量插入性能优化
优化前:
java复制for(Order order : orders) {
orderMapper.insert(order); // 每条执行一次SQL
}
优化后:
xml复制<insert id="batchInsert" parameterType="java.util.List">
INSERT INTO t_order(...) VALUES
<foreach collection="list" item="item" separator=",">
(#{item.field1}, #{item.field2}, ...)
</foreach>
</insert>
性能对比:
| 数据量 | 优化前耗时 | 优化后耗时 |
|---|---|---|
| 100条 | 3200ms | 280ms |
| 500条 | 15s | 900ms |
5. 部署实施要点
5.1 容器化部署方案
dockerfile复制FROM openjdk:11-jre
COPY target/gas-delivery.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
启动参数建议:
bash复制docker run -d \
-e "SPRING_PROFILES_ACTIVE=prod" \
-e "REDIS_HOST=redis-cluster" \
-v /path/to/config:/config \
--name gas-delivery \
-p 8080:8080 \
gas-delivery:1.0
5.2 性能监控配置
-
Prometheus监控指标:
yaml复制- pattern: /actuator/prometheus metrics: - name: delivery_orders_total help: "Total orders processed" type: COUNTER - name: delivery_latency_seconds help: "Order processing latency" type: HISTOGRAM -
关键报警规则:
- 订单积压量>50持续5分钟
- 平均响应时间>1s持续10分钟
- 车辆离线率>20%
6. 源码获取与二次开发
项目已托管至Gitee平台:
code复制https://gitee.com/xxx/gas-delivery-system
二次开发建议:
- 物流大屏可视化(接入ECharts)
- 增加电子围栏异常预警
- 对接第三方支付平台
- 扩展冷链运输模块
经验分享:在真实业务场景测试时,务必使用压力工具模拟并发订单。推荐使用JMeter构造以下测试场景:
- 早高峰集中下单(500订单/5分钟)
- 突发大客户订单(单次100立方米氧气)
- 车辆突发故障场景