一、项目简介

  该系统是一个类似12306的在线列车售票系统,主要实现用户注册、登录、查询、购票、退票、改签等功能。

二、系统架构

  项目整体采用微服务架构,根据功能进行拆分,大致分为以下几个服务模块:

    用户服务:用户注册、登录、个人信息维护等功能

    查询服务:用于接收并处理用户查询站点、余票等请求

    购票服务:用于接收并处理购票请求,考虑到购票请求并发度较高,所以单独作为一个模块

    退改服务:用于接收并处理退票、改签相关请求

    订单服务:用于接收并处理订单创建、订单查询等相关请求

    支付服务:用于处理用户支付、退款等相关请求

    票池:为了提高系统性能,设计专门的数据结构管理车票,购票、退票等请求与票池进行交互。

  对于每个微服务而言,其内部架构使用了MVC架构。

  •   Model是指数据模型,是对客观事物的抽象。 
  •   View是指视图,也就是呈现给用户的一个界面,是model的具体表现形式,也是收集用户输入的地方。
  •   Contorller指控制器,主要负责与model和view打交道。

三、分解视图

  分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构(breakdown structure)特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。

火车预订系统体系架构 火车订票系统设计_火车预订系统体系架构

 

四、接口API

登录:

{
    "username":"",
    "password":""
}

  返回

{
    "code":"", // 消息代码
    "msg": "", // 消息
    "data":{
        "token":""
    }
}

查询余票:

{
    "startCity":"",
    "endCity":"",
    "date":"",
    "type":""
}

  返回

{
    "code":"",
    "msg":"",
    "data":{
        "list": [
           {
               "train_number":"", 
                "start_station":"",
                "end_station":"",
                "start_time":"", 
                "arrival_time":"",
                "start_station_type":"", 
                "end_station_type":"",
                "train_type":"", 
                "business_seats_number":"", 
                "first_seats_number":"",
                "second_seats_number":"", 
                "no_seats_number":"",
                "hard_seats_number":"", 
                "hard_berth_number":"",
                "soft_berth_number":"",
                "senior_soft_berth_number":"",
           }     
        ]
    }
}

购票:

{
    "trainId":"",
    "startCity":"",
    "endCity":"",
    "date":"",
    "list":[
        {
            "passengerName":"",
            "idcard":"",
            "seatType":"",                   
        }    
    ]
}

 

五、依赖视图

依赖视图展现了软件模块之间的依赖关系。

 

火车预订系统体系架构 火车订票系统设计_字段类型_02

 

 

六、执行视图

  执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。执行实体可以最终分解到软件的基本元素和软件的基本结构,因而与软件代码具有比较直接的映射关系。在设计与实现过程中,我们一般将执行视图转换为伪代码之后,再进一步转换为实现代码。

  项目中我负责的模块为购票和改签,以这两个模块为例。

购票

 

火车预订系统体系架构 火车订票系统设计_火车预订系统体系架构_03

火车预订系统体系架构 火车订票系统设计_字段类型_04

 

改签

火车预订系统体系架构 火车订票系统设计_火车预订系统体系架构_05

 

七、实现视图

  实现视图是描述软件架构与源文件之间的映射关系。实现视图有助于码农在海量源代码文件中找到具体的某个软件单元的实现。实现视图与软件架构的静态结构之间映射关系越是对应的一致性高,越有利于软件的维护。

由于本项目我们小组只负责后端,前端有另外的小组完成,所以此处只包含了后端的源代码目录文件结构。

火车预订系统体系架构 火车订票系统设计_火车预订系统体系架构_06

项目使用微服务架构,每个服务的RPC目录结构和Server目录结构类似。

 八、部署视图

  部署视图是将执行实体和计算机资源建立映射关系。这里的执行实体的粒度要与所部署的计算机资源相匹配,比如以进程作为执行实体那么对应的计算机资源就是主机,这时应该描述进程对应主机所组成的网络拓扑结构,这样可以清晰地呈现进程间的网络通信和部署环境的网络结构特点。

火车预订系统体系架构 火车订票系统设计_字段_07

 

 

九、数据库和核心数据结构设计

用户表

字段名

字段类型

字段描述

id

int

用户id

username

varchar

用户名

password

varchar

密码

name

varchar

姓名

sex

varchar

性别

birthday

datetime

出生日期

telephone

varchar

手机号

email

varchar

邮箱

address

varchar

地址

identification_type

varchar

证件类型

identification_number

varchar

证件号

 

 乘车人表

字段名

字段类型

字段描述

id

int

乘车人id

name

varchar

乘车人姓名

identification_type

varchar

证件类型

identification_number

varchar

证件号码

passenger_type

varchar

乘客类型(成人、学生等)

 

 用户_乘车人表

字段名

字段类型

字段描述

id

int

用户_乘车人表id

passengerid

int

乘车人id

userid

int

用户id

 

 列车表

字段名

字段类型

字段描述

id

int

列车id

traintypeid

int

列车类型id

trainNumber

int

列车编号

start_stationid

int

始发站id

dest_stationid

int

终点站id

starttime

datetime

发车时间

arrivetime

datetime

到达时间

 

 列车类型表

字段名

字段类型

字段描述

id

int

列车类型表id

trainType

string

列车类型(动车、火车等)

 

 车厢表

字段名

字段类型

字段描述

id

int

车厢id

carriageType

varchar

车厢类型

seatnumber

int

座位数量

 

 列车_车厢表

字段名

字段类型

字段描述

id

int

列车_车厢表id

trainid

int

列车id

carriageid

int

车厢id

carriagenumber

int

车厢编号,用于表示该车厢是列车的几号车厢

 

 车站表

字段名

字段类型

字段描述

id

int

车站id

stationname

varchar

车站名称

 

 列车_车站表

字段名

字段类型

字段描述

id

int

列车_车站表id

stationid

int

车站id

trainid

int

列车id

arrivetime

datetime

列车到达时间

starttime

datetime

列车发车时间

 

 车票表

字段名

字段类型

字段描述

id

int

车票id

trainid

int

该车票对应的列车id

start_stationid

int

车票出发站id

dest_stationid

int

车票目的站id

starttime

datetime

开车时间

carriageid

int

车厢id

seat

int

座位号

passengerid

int

乘车人id

ticketstatus

varchar

车票状态

 订单表

字段名

字段类型

字段描述

id

int

订单id

userid

int

创建该订单的用户id

ticketid

int

订单购买的车票id

amountmoney

float

订单金额

createtime

datetime

创建时间

paytime

datetime

支付时间

orderstatus

varchar

订单状态(未支付、已支付..)

十、运行环境及技术选型

  主要技术:

    Gin:Go语言轻量级Web框架    

    gRPC:基于Protobuf的跨语言RPC框架,用于不同微服务之间的交互

    Redis:用于存储热点数据,提高系统响应速度

  开发、运行环境:

    开发语言:Golang

    开发系统:Windows、Mac

    开发工具:GoLand、VScode

    数据库:Redis、Mysql

    部署环境:Ubuntu+Docker