列车售票系统设计方案

一、项目简介

  该系统是一个类似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":"",                   
        }    
    ]
}

 

五、依赖视图

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

 

 

 

六、执行视图

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

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

购票

 

 

改签

 

七、实现视图

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

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

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

 八、部署视图

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

 

 

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

用户表

字段名 字段类型 字段描述
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

posted @ 2020-12-30 13:00  k&x  阅读(682)  评论(0编辑  收藏  举报