哎呀现在程序员这个行业真是越来越不好做了,被AI冲击,再加上经济下行,企业裁员,只能在家搞点副业,挣点外快。这不接了一个私活,给客户做一个出行大数据平台,这一单搞了1个大不溜,耗时1个月左右,大家觉得怎么样呢?
一、项目背景
帮助客户实现出行票务高效管理、出行数据可视化分析,辅助优化出行决策,同时通过技术变现获取额外收益。
二、需求分析
1. 市场需求
数据管理需求:集中管理火车票、飞机票订单,涵盖车次 / 航班、价格、时间、座位等细节。
分析决策需求:通过可视化看板,分析出行目的地分布、出行方式偏好、年度里程趋势,为出行规划提供数据支持。
2. 功能需求清单
类别 功能描述
基础管理 用户信息维护、票务订单增删改查,支持改签、退票状态管理。
可视化分析 基于地图展示出行城市分布,通过图表呈现出行方式占比、年度里程变化趋势。
数据统计 计算总里程、总消费金额,统计去过的城市数量,支持多维度数据聚合分析。
三、页面设计
1. 核心页面规划
(1)数据看板首页
关键指标区:展示总里程(kilometers汇总)、总消费(ticket_price+fuel_surcharge汇总)、去过的城市数量。
地图可视化:通过高德地图(AMap)标注出发城市(from_city)与到达城市(to_city),点击城市可查看该城市出行记录。
统计图表区:
出行方式统计环形图(基于train_plane、train_type字段)。
年度出行里程柱状图(按create_time分组统计kilometers)。
(2)票务管理页面
查询功能:支持按订单编号(order_number)、用户 ID(user_id)、出行时间(train_departure_time/plane_arrived_time)筛选订单。
操作功能:新增订单(录入 user_ticket 表字段)、编辑订单详情、标记改签 / 退票状态(更新 ticket_changes 字段)。
(3)用户管理页面
展示用户基本信息(user_id、user_name、id_card)。
关联用户出行记录,点击用户可查看其历史订单。
2. 交互设计细节
图表联动:点击环形图中的 “高铁” 区域,下方表格实时过滤展示所有高铁订单。
地图交互:城市标记闪烁提示新订单,悬停显示该城市出行次数。
四、架构设计
1. 技术架构分层
- 前端层 Vue3 + Element-Plus + ECharts + AMap,实现页面渲染与交互。
- 服务层 SpringBoot,处理业务逻辑(如订单计算、数据统计),提供 RESTful 接口。
- 数据层 MySQL 存储数据,MyBatis-Plus实现数据库操作,利用索引优化查询效率。
- 部署层 前端通过 Nginx 部署静态资源,后端服务容器化(Docker),支持弹性扩展。
2. 后端服务模块划分
- 用户服务:处理用户信息增删改查,关联用户与出行记录。
- 票务服务:订单创建、查询、更新,计算订单金额(含票价ticket_price、燃油附加费 fuel_surcharge)。
- 统计服务:聚合计算总里程、总消费,生成可视化分析数据。
3.数据库设计
CREATE TABLE `user_ticket` (
`id` bigint(40) NOT NULL AUTO_INCREMENT,
`user_id` bigint(40) DEFAULT NULL COMMENT '用户ID',
`user_name` varchar(20) DEFAULT NULL COMMENT '购票人',
`train_departure_time` datetime DEFAULT NULL COMMENT '发车时间',
`train_departure_city` varchar(20) DEFAULT NULL COMMENT '始发站',
`train_departure_city_lng_lat` varchar(50) DEFAULT NULL COMMENT '始发站经纬度',
`plane_arrived_time` datetime DEFAULT NULL COMMENT '飞机到达时间',
`train_arrival_city` varchar(20) DEFAULT NULL COMMENT '到达站',
`train_arrival_city_lng_lat` varchar(50) DEFAULT NULL COMMENT '到达站经纬度',
`train_number` varchar(20) DEFAULT NULL COMMENT '车次',
`train_type` tinyint(5) DEFAULT NULL COMMENT '火车类型(1高铁,2普快,3直达,4特快)',
`ticket_type` tinyint(5) DEFAULT NULL COMMENT '车票类型(1硬座,2硬卧,3软卧,4一等座,5二等座,6商务座)',
`ticket_carriage` varchar(20) DEFAULT NULL COMMENT '车厢号',
`ticket_seat` varchar(20) DEFAULT NULL COMMENT '座位号',
`train_berth` tinyint(5) DEFAULT NULL COMMENT '铺位(1上铺,2中铺,3下铺)',
`ticket_price` decimal(8,2) DEFAULT '0.00' COMMENT '车票价格',
`order_number` varchar(20) DEFAULT NULL COMMENT '订单编号'