《基于微信公众平台的巴士购票系统的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
:分类号;TP311.5单位代码;10183研究生学号!20US3H439密级:公开戀吉林大学硕古学位论文专他聲位()基于微信公众平台的田±购票系统的设计与实现TheImementndDesinofBusBookins化mplaggSyBasedonWechatPublicPlatform作者姓名:邓帅类别:工程硕丈领域(方向):软件工程指导教师;陈思国劇教授培养单位:软件学院2016年12月 基于微信公众平台的巴士购票系统的设计与实现TheImplementandDesignofBusBookingSystemBasedonWechatPublicPlatform作者姓名:邓帅领域(方向):软件工程指导教师:陈思国副教授学位类别:在职工程硕士答辩日期:2016年11月20日 未经本论文作者的书面授权,巧法收存和保管本论文书面版本、电子版本的任何单位和个人,均不得对本论文的全部或部分内容进行任何形式的复制、修改、发行、出租、改编等有碍作者著作权的商业性使用(但纯学术性使用不在此限)。否则,应承担侵权的法律责任。吉林大学硕古学位论文原创性声明本人郑重声明:所,是本人在指导教师的指导下呈交的硕±学位论文,独立进行研究王作所取得的成果。除文中已经注明引用的内容外,本论文不包含任何其他个人或集体己经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体,均己在文中明确方式标明。本人完全意识到本声明的法律结果由本人承担。学位论文作者签名:.日期:2016年/文月日/ 摘要基于微信公众平台的巴士购票系统的设计与实现现有的巴士运营方式多为线下运营:巴士站每日固定发车时间和车次,通过窗口售票。乘客乘车需要掌握巴士的运营路线、班次和发车时间,然后到窗口买票进行乘坐。现有的巴士运营模式下,车次和发车时间固定,无法根据坐车人员的多少进行调整,这就造成了在闲时资源浪费,忙时资源短缺的情况。尤其随着O2O的深入发展,这种运营模式的弊端更加暴露。随着计算机科学的发展和移动技的成熟。手机已经成为我们日常生活的重要组成部分。随着各种APP投入市场,手机可使用的功能也越来越多,如:社交、地图、餐饮、住宿等。微信就是在这样一个大环境下产生的社交软件,现在,微信已经覆盖了90%以上的智能手机用户,可见影响之广。基于微信公众平台的巴士购票系统实现了用户可以线上进行车次查询、订购、选座等功能。一方面用户可以足不出户进行查询、订购车票、线上支付,也可以根据自己的需要及时退票、换乘,极大方便了用户;另一方面运营方可以减少甚至取消售票窗口,减少运营成本,还可以根据用户需要进行开设、取消、暂停班次,合理配置资源,提高企业的利润。本系统采用B/S框架,后台使用HTML5进行页面展示,前端使用腾讯提供的微信服务号作为用户接口,页面部分采用HTML5进行展示。服务器语言使用JAVA,数据库采用MySQL。I 本文先对现阶段主流巴士运行方式和网上订票方式进行介绍,对基于微信公众平台的巴士购票系统进行需求分析,根据需求分析得出的系统要面进行系统的整体构架设计,根据需求分析得出的功能点进行详细设计,然后实现本系统,再对系统进行测试分析,最后进行总结和展望。关键字:在线购票;微信公众平台;o2o;HTML5II AbstractTheImplementandDesignofBusBookingSystemBasedonWechatPublicPlatformTheexistingbusoperationmodeformultilineoperation:busstationfixeddailydeparturetimeandtrainticket,throughthewindow.Passengersneedtomasterthebustravelroute,frequencyanddeparturetime,andthentothewindowtobuyatickettoride.Undertheexistingbusoperationmode,tripsanddeparturetimefixed,couldn'tmakeadjustmentaccordingtothecar,whichresultedinthewasteresourcesinleisure,busywhenashortageofresources.EspeciallywiththefurtherdevelopmentofO2O,thedisadvantagesofthismodeofoperationaremoreexposed.Withthedevelopmentofcomputerscienceandthematurityofmobiletechnology.Mobilephoneshavebecomeanimportantpartofourdailylife.WithavarietyofAPPintothemarket,theuseofmobilephonescanbeusedmoreandmore,suchas:social,maps,catering,accommodation,etc..WeChatisinsuchalargeenvironmentgeneratedsocialsoftware,andnow,WeChathascoveredmorethan90%ofthesmartphoneusers,canbeseeninawiderangeofinfluence.Basedonmicrochannelplatformforpublicbusticketingsystemtoachievetheuserlinetripsinquiries,ordering,waitforafunction.Ontheonehand,userscanhomesinquiries,orderingtickets,onlinepayment,canalsoaccordingtotheirneedfortimelyrefund,transfer,agreatconveniencetotheusers;ontheotherhandtheoperationcanreduceorevencanceltheticketwindow,andreducetheoperationcost,canalsoaccordingtotheneedsoftheuserareopened,cancel,suspendflights,therationalallocationofresources,improvetheenterprise'sprofits.ThissystemusestheB/Sframework,thebackstageusesHTML5tocarryonthepagedisplay,thefrontendusestheWeChatservicenumberwhichtheTencentprovidesastheuserinterface,thepagepartusestheHTML5tocarryonthedemonstration.ServerlanguageusingJAVA,databaseusingMySQL.Firstlythecurrentmainstreambusoperationmodeandonlinebookingmethodareintroduced,andthenbasedonthemicrochannelplatformforpublicbusticketingi systemneedsanalysis,accordingtothedemandanalysis,theoveralldesignanddetaileddesignofthesystem,andrealizethesystem,finally,thesystemistestedandanalyzed,finallycarriesonthesummary.Keywords:onlineticketing;WeChatpublicplatform;o2o;HTML5ii 目录第一章绪论.............................................11.1研究背景..........................................11.2本文的研究目标与意义..............................11.3本文工作介绍......................................2第二章需求分析..........................................32.1技术可行性分析....................................32.2经济可行性分析....................................32.3功能性需求分析....................................4第三章关键技术介绍......................................73.1SpringMVC........................................73.2权限控制框架Shiro................................83.3JPA...............................................83.4MemCached.........................................93.5微信公众平台.....................................103.6本章小结.........................................11第四章概要设计.........................................124.1微信端...........................................124.1.1手机号绑定功能..............................124.1.2购票........................................134.1.3选座........................................14i 4.1.4订单支付....................................154.1.5退款........................................154.1.6优惠券使用..................................164.1.7个人信息....................................174.1.8其他功能....................................184.2后台管理端.......................................184.2.1站点管理....................................184.2.2路线管理....................................184.2.3班次管理....................................184.2.4座位管理....................................194.2.5路线、车次取消..............................194.2.6一键退票管理................................194.2.7订单管理....................................204.2.8优惠券管理..................................20第五章详细设计与实现...................................215.1数据库设计.......................................215.1.1数据库详细设计..............................215.1.2数据字典....................................255.2系统的实现.......................................265.2.1工程构架及目录..............................265.2.2路线管理的实现..............................275.2.3微信购票....................................36ii 第六章系统的测试与运行.................................41第七章总结与展望.......................................457.1总结.............................................457.2展望.............................................45参考文献................................................46作者简介及在学期间所取得的科研成果......................48致谢................................................49iii 第一章绪论1.1研究背景随着计算机科学的发展和移动技的成熟。手机已经成为我们日常生活的重要组成部分。随着各种APP投入市场,手机可使用的功能也越来越多,如:社交、地图、餐饮、住宿等。微信就是在这样一个大环境下产生的社交软件,现在,微信已经覆盖了90%以上的智能手机用户,可见影响之广。此外,随着移动技术的发展,各种O2O电商层出不穷,小到餐饮、服装、家政、娱乐,大到汽车、楼盘、拍卖,无处不有O2O的影子。由于微信有着用户占有率高、用户粘性大、接口成熟、推广成本低的特点,所以越来越多的企业在微信上建立自己的服务平台。1.2本文的研究目标与意义现有的巴士运营方式多为线下运营:巴士站每日固定发车时间和车次,通过窗口售票。乘客乘车需要掌握巴士的运营路线、班次和发车时间,然后到窗口买票进行乘坐。现有的巴士运营模式下,车次和发车时间固定,无法根据坐车人员的多少进行调整,这就造成了在闲时资源浪费,忙时资源短缺的情况。尤其随着O2O的深入发展,这种运营模式的弊端更加暴露。基于微信公众平台的巴士购票系统实现了用户可以线上进行车次查询、订购、选座等功能。一方面用户可以足不出户进行查询、订购车票、线上支付,也可以根据自己的需要及时退票、换乘,极大方便了用户;另一方面本运营方可以减少甚至取消售票窗口,减少运营成本,还可以根据用户需要进行开设、取消、暂停班次,合理配置资源,提高企业的利润。本文实现目标:一是实现用户基于微信公众号注册、在线订票、选座、维护个人信息、查询路线和班次、支付、退票等功能;二是后台实现路线管理、车次管理、退票管理、车辆管理、站点管理、优惠券管理等功能。1 1.3本文工作介绍本文主要工作内容如下:1)第一章介绍了本课题的研究背景、研究目标及意义,通过研究认为本课题的实现可以解决现有巴士资源浪费、供需匹配错位的情况,一方面可以节约资源,一方面可以提高收益。2)第二章对本系统进行了需求分析,分别进行了技术可行性分析、经济可行性分析、功能性需求分析和性能分析。通过需求分析,确立了本课题的可行性,通过多方面考量,保证本课题可以实现并且有一定社会价值。3)第三章介绍了本文使用到的关键技术,包括MVC框架SpringMVC、权限控制框架Shiro、数据库技术JPA、高速访问技术Memcached、模板框架技术Freemarker。通过将这些技术和现有主流其他技术进行对比,发现这些技术更适合本课题,为实现本课题奠定了技术基础。4)第四章对整个系统进行了概要设计,并给出每个功能模块的流程图,微信端功能包括:手机绑定功能、购票模块、选作功能、订单支付功能、退款功能、优惠券使用功能、个人信息维护功能;后台管理端包括:路线管理、站点管理、车次管理、退票管理、车辆管理、订单管理、优惠券管理等功能。通过这一章的描述,使本课题的功能构架更为明确。5)第五章为实现部分,即对第四章的概要设计中的模块进行实现。给出了具体实现本课题的过程,并给出核心代码。6)第六章为测试部分。本章对系统进行了整体的功能测试,并对测试过程中发现的问题进行分析讨论。7)第七章对整篇文章进行总结,并对现有系统的不足之处进行展望。2 第二章需求分析本章主要对基于公众平台的巴士购票系统进行需求分析,分别进行了技术可行性分析、功经济可行性分析、功能性需求分析和性能需求分析。现阶段,大部分巴士的车票需要到汽车站购买,汽车站巴士的车次和发车时间固定,无法根据坐车人员的多少进行调整,这就造成了在闲时资源浪费,忙时资源短缺的情况。基于微信公众平台的在线订票系统通过线下与线上结合,可是实现资源的合理配置,有着巨大的社会潜在需求。2.1技术可行性分析本系统基于微信公众号进行开发,用户通过微信公众号访问系统的核心功能,系统利用微信公众号提供接口与用户进行交互。一方面方便用户使用,一方面由于微信公众号的接口都已经十分成熟,降低了开发难度,减少了系统出现BUG了几率。系统后台采用HTML5作为前端展示和用户交互界面,JAVA语言进行后台的逻辑处理。现在Web技术已经非常成熟,微信公众号也的本质也是Web应用,也有很多成功案例。通过对在线巴士订票系统的功能进行分析和设计,结合现有技术进行对基于微信公众平台的巴士购票系统开发在技术上是可行的。2.2经济可行性分析本系统使用MySQL作为数据库,MySQL是一个开源数据库,用户可以根据自己的需要定制和裁剪功能,而且现在各个IT公司推出了免费的MYSQL专用管理工具;tomcat作为Web服务器,微信公众号作为用户接口,这两种平台也都是免费的,节省运营成本。通过分析,使用本系统进行在线订购巴士车票,能够有效的节约资源,降低巴士运维成本,提高巴士运营效率。3 2.3功能性需求分析通过对整个巴士运营流程进行分析,结合一些现有在线订票系统功能,提出本系统应该实现如表2.1所示表2.1系统主要实现功能功能描述站点管理每趟巴士至少有两个站点,即起始站和终止站。本功能用于管理员在后台管理站点。路线管理管理员可以在后台增加路线,管理员可以设置路线的停靠站点,一条路线的各个车次的价钱、停靠站点均相同,只是开车时间不同。班次管理每条路线有不同的车次。例如有一条吉林大学->东北电力大学路线,可能一天分别有8点、9点、10点开车的车次。车次也可以设置为启用或者停用。班次应该包括开车时间、车型、车牌、座位数、司机联系电话,用户在订票时可以看到相关信息。一键退票虽然巴士对环境的要求不高,但是一旦遇到大雨、大雪、冰雹、路面结冰等天气,可能有些班次无法开车。当用户已经付款了,让用户自己去退款,会降低用户体验,所以系统应提供一键退款功能。当因为某种原因无法开车时,使用该功能进行批量退票。一键退票又分为路线一键退票和班次一键退票,其功能相似。路线一键退当使用一键退票后,正常情况下,系统会自动退回相应的金额票查询/班次给用户,但是由于使用第三方的微信支付,调用微信退款接口一键退票查无法保证100%成功,所以需要查询一键退票是否成功,若未成询功,需要进入商户平台进行手动退票。车辆管理车辆管理主要是提供管理管理车辆信息的功能。作为一个运营巴士的公司,巴士信息会经常变动,管理员通过这个功能维护巴士信息,其中包括名称、型号、座位数、车牌号、司机名称、电话。所有的车辆信息和班次中的车辆信息关联。4 待支付订单本模块提供待支付订单管理功能。待支付订单指的是已经提交管理了的订单(即已经选择完车次,填写好信息、选完作为并提交的订单),该模块可以看到订单的路线、车次、订单人姓名、电话、下单微信、下单时间等功能。未支付的订单有效期为15分钟,如果超过了有效期,那么将自动清除。已失效订单如“待支付订单管理”中所介绍,未支付的订单将在15分钟之管理内失效,失效的订单在这个模块可以看到,具体可以看到的信息同“待支付订单管理”模块。未完成订单当用户下完单并付款,但是车次还未发出,这种订单叫做“未管理完成订单”,管理员在此模块可以看到这类订单,只有这类订单可以进行退款。已完成订单用户支付后,并乘坐过的订单,叫做已完成订单。管理员在此管理模块可以看到这类订单,具体内容有发车日期、起点、终点、联系人、下单时间、最后操作时间、下单微信、单张票价、订单座位数、订单最终价格。已退款记录管理员在此模块查看所有退款的记录,信息包括:发车日期、管理起点、终点、联系人(电话)、退票座位号、退款金额、退款比例、退单时间、退单微信。优惠券管理有时为了推广或给用户福利,需要向用户分发一些优惠券,促进用户使用本系统订票。本模块根据需要,管理员可以添加优惠券,优惠券信息包括:优惠券名、使用区间、优惠金额等信息。管理员可以再管理页面查看优惠券具体使用情况。注册功能首次使用订票系统的用户应进行手机注册微信端订票用户通过选择出发站点、终止站点和时间查询并选择需要乘坐功能的车次,用户可以根据自己的需要进行座位选择,填写好所有乘坐信息后即可提交订单,提交订单后定位处于未支付状态,用户需要支付相应的金额,否则订单将在15分钟之后自动取消。个人信息维用户通过微信公众好维护个人信息,包括电话、姓名、昵称等护功能5 个人订单查用户可以通过微信公众好查询自己未支付订单、未乘坐订单、询功能已乘坐订单、退款记录。在未乘坐订单中,用户可以进行退票。优惠券查询用户可以查询自己有的优惠券,分为可用优惠券和历史优惠券。功能历史优惠券包括已用过的和过期的。6 第三章关键技术介绍本章阐述了本系统使用的关键技术,其中包括介绍了SpringMVC、权限控制框架Shrio、数据库映射技术JPA、高速缓存技术MemCached、Freemarker模版技术以及微信公众平台;分别对他们进行了简单的介绍,并阐述了这些技术的优点,以及本文使用这些技术的主要原因。3.1SpringMVCSpringMVC框架提供了构建Web的全功能MVC模块,它通过模型-视[3]图-控制器模式将持久层、业务逻辑层和展示层分离。在这点来看,SpringMVC与Struts2在Web应用构架作用上非常相似,但是从技术细节上来看,这两种技术存在非常大的差别。[4]1)SpringMVC与Struts2拦截粒度的粗细不同。SpringMVC在函数层面上进行拦截,SpringMVC中每一个URL对应一个控制器中的函数,所以这个函数可以单独享有HTTP请求的上下文,所以它很容易实现REST标准;相比之下Struts2的拦截粒度是类,那么这个类的所有方法共享这个类的属性,导致无法使用注解表示其所属方法。2)由于第一点差别,SpringMVC各处理请求函数之间基本是相互独立的,又单独使用HTTPRequest和HTTPResponse,变量之间不共享数据,这样时程序更加的清晰。[5]3)SpringMVC比Struts2更加安全。Struts2的数据与Action绑定,这样做的缺点就是如果Action中有set方法,很可能将HTTP请求传递的参数覆盖,这种设计在程序员编写程序时有可能由于人为产生错误,而且这种错误难以发现;SpringMVC的操作对象大部分是一个实例,而创建实例的代价很低,又不会覆盖现有参数。通过SpringMVC和Struts2的对比,可以看出SpringMVC更适合本系统,尤其是SpringMVC是基于注解的,可以实现“零配置”,这更有利于实现本系统。7 3.2权限控制框架ShiroShiro是一个用Java语言实现的框架,通过一个简单易用的API提供身份验[5]证和授权。由于Shiro提供具有诸多不同数据源的身份验证,以及EnterpriseSessionManagement,所以是实现单点登录(SSO)的理想之选—大型企业内的一个理想特性,因为在大型企业内,用户需要在一天内经常登录到并使用不同系[6]统。这些数据源包括JDBC、LDAP、Kerberos和Microsoft®ActiveDirectory®DirectoryServices(ADDS)。Shiro的Session对象允许无需HttpSession即可使用一个用户会话,通过使用一个通用的Session对象,即便该代码没有在一个Web应用程序中运行,仍可以使用相同的代码。Shiro并不依赖应用服务器或Web应用服务器会话管理,我们甚至可以在命令行环境中使用Shiro。使用Shiro的API编写的代码可以构建连接到LDAP服务器的命令行应用程序并且与web应用程序内用来访问LDAP服务器的代码相同。3.3JPAJPA(JavaPersistenceApi),由EJB3.0软件专家组开发,作为JSR-220[7]实现的一部分,它的使用范围非常广泛,它不仅可以用于EJB3.0,还可以应用在Web应用和桌面应用中。JPA通过JDK5.0或XML描述对象与数据库关系表之间的映射关系,并将运行期的实体对象持久化到数据库中。JPA有以下优势:1)标准化。JPA是JavaEE标准之一,所以符合JPA标准的框架都应该提供相同的访问API,通过使用这些标准的API,用户在开发不同应用时[9]选择不同的框架,只要这个框架是基于JPA标准,那么用户就可以快速的从一个框架移植到另外一个框架中,而且只需要修改很少的代码,增加了应用的可移植性和灵活性,实现代码的复用。2)对容器级特性的支持。JPA框架中支持大数据集、事务、并发等容器级事务,这使得JPA超越了简单持久化框架的局限,在企业应用发挥更大的[10]作用。8 3)简单易用,集成方便。现在有很多复杂的编程模型,用户使用起来十分繁琐并且容易出错,JPA的最重要目的之一就是使编程模型更加的简单易用。JPA框架中,用户只需要使用Entity进行注视,就可以没有约束和限制的创建实体;由于基于JPA的框架都实现了标准化的API,这些框架及其接口非常简单,即使是新手也十分容易掌握;此外,由于JPA是基于非入侵式原则设计,所以其他框架很容易与其集成。4)高性能的查询能力。JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是HibernateHQL的等价物。JPA使用自己定义的查询语言JPQL(JavaPersistenceQueryLanguage),它是的操作对象不是数据库中的表,而是一个实体,这个实体与数据库中的某一个表相对应,简单说,JPQL就是操作POJO,所以更为直观、简单。JPQL除了支持对POJO简单的增删改查之外,还支持各种高级查询,如表链接、包含、排序等。5)支持面向对象的高级特性。JPA更加全面的支持面向对象,它可以支持类之间的继承、多态和类之间的复杂关系,通过使用这些高级特性开发者可以更轻松的访问关系数据库,不需要自己编写代码操作数据库的持久化。3.4MemCachedMemCached是一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问的网站访问速度提升效果十分[12]显著。MemCached的工作原理是在内存里维护一个哈希表,它以“键-值”对的方式存储信息,这些信息可以是临时存储的数值、字符串,也可以是视频、音频等大文件,因为这些信息存储在内存中,所以访问速度很快。MemCached的工作流程如下:系统先在Memcached表中是否有要查询的记录,如果有,那么得到这条数据;如果没在表中,系统将访问数据库,然后把查到的数据返回,同时将数据存储到表中;由于一个表的存储空间也是有限的,所以当表存满后,采用LRU算法进行淘汰。9 3.5微信公众平台[13]微信公众平台,简称weChat,目前微信活跃用户已经是亿级。对普通用户来说,微信是一个强大的社交软件;对于企业或者组织来说,微信是一个巨大的交互平台。微信有活跃用户保有量多、用户粘性大、接口开放、维护简单等特点,现在很多企业基于微信公众号开发他们的网上商城,既可以降低开发费用,又可以降低推广成本。现在微信公众平台推出了微信服务号、微信订阅号和微信企业号,不同类型的公众号的侧重点和功能不同:1)微信服务号它是为用户提供服务。它的级别与微信好友相同,用户收到服务号推送的消息后,消息会显示在用户的聊天列表中,每个服务号每个月可以给用户推送4条信息,服务号也可以申请自定义菜单。2)微信订阅号它是为用户提供信息。每个用户的聊天列表中有一个聊天文件夹叫“订阅号”,在这个文件夹中是用户所有已订阅的“订阅号”推送的消息,订阅号每天可以向用户群发1条消息,这条消息会出现在“订阅号”文件夹中。在用户的通讯录中,也有“订阅号”这个文件夹,所有的订阅号都在这个文件夹中。3)微信企业号它是专门为企业、组织等提供的平台。现在微信企业号多用于学校、机关、企业等机构,这些机构使用微信企业号进行信息共享、协同交流,如果进行深度开发,还可以做成私有云和内部社交软件。通过对本系统潜在用户进行调研,结合现有资料,本系统最后选用微信服务号。由于巴士消息推送可能会影响到用户订票、乘坐、退票,对实时性有一定的要求,服务号推送的消息可以推送到用户微信的消息界面,而不是在“订阅号”栏目中,用户更容易关注到信息。10 3.6本章小结本章通过介绍了巴士购票系统的核心技术,并介绍了这些主流技术的优势,并通过对比阐述了选择这些技术的原因。接下来本文将基于这些核心技术对系统的概要设计和具体实现进行描述。11 第四章概要设计本章主要描述对系统的总体进行设计,本系统以微信公众平台为基础,使用微信提供的公众平台接口和商户平台接口,实现车票的在线预订、支付功能。本系统主要分为两个部分的工作,一部分是微信端的面向用户的开发,另一部分是后台管理系统的开发,其中微信端主要包括购票模块、个人信息维护模块和最近活动模块;后台管理系统主要包括路线管理、订单管理和数据字典管理模块。系统的总体功能如图4.1所示:表4.1系统功能模块图4.1微信端微信端主要是向用户展示各种信息。用户通过微信公众号对已开通路线、班次、时间、票价等进行查询,用户还可以在微信端对个人的注册信息进行修改,查看当前的优惠活动等。4.1.1手机号绑定功能每个微信号都有一个唯一的openid,当用户第一次使用本系统时,公众号会将该用户微信的openid传给系统,如果系统判断这个微信未绑定手机号,会提示绑定手机号,绑定成功后,用户才可以正常使用公众号。每个微信只能绑定一次手机号,下次再使用公众号时,系统可以自动识别并登陆。绑定手机号流程图如下所示:12 图4.2手机绑定流程图4.1.2购票用户可以通过微信公众号查询已经开通的路线。第一步:先选择始发城市(如长春、吉林、四平),再选择这个城市中已经开通的发车点(如始发城市选择长春,那么长春的发车点可能有东北师范大学,吉林大学南校区,长春理工大学)。第二步:选择下车城市和下车点,系统将自动筛选出用户可以选择的下车点。第三步:选择发车时间。第四步:查询出所有符合条件的班次,用户选择其中一个班次。第五步:录入基本信息,并选择座位。第六步:提交订单。用户提交订单后并没有付款,用户可以再待付款订单模块中查询未支付订单,支付后才正式完成订票。为了防止有人恶意刷票,系统设定了用户同时只能有一个未支付订单,且该订单只在15分钟之内有效,系统也将为用户锁定座位15分钟,过了15分钟系统将自动清除未支付订单,并解除座位锁定。选票的流程如图4.3所示:13 图4.3购票流程图4.1.3选座用户可以根据需要选择指定的座位,选座模块的基本思路是:在订单编辑页面,用户先选择这次购票的数量,然后进行选票,系统会根据该车次当前的车票预订情况生成座位图,座位图分为可选和不可选两种,用户选择可选的座位后保存订单,系统会将用户选择的座位锁定。由于该公众号同时会有多人操作,很可能产生多人同时选择一个坐位的情况,那么系统将以提交订单时间为准,将坐位分配给第一个提交订单的用户。坐位选择功能的流程图如下所示:14 图4.4选座流程图与订单一样,系统为用户保留15分钟座位,如果15分钟之内订单没有付款,那么该坐位将被解除锁定。4.1.4订单支付用户在提交订单之后,并没有真正的完成订单,用户需要支付车费,用户支付车费主要调用微信的支付接口。系统通过调用微信支付接口,将用户信息和订单相关信息传递给公众号,微信支付成功后,用户可凭借电子车票乘车。当用户支付成功后,管理员可以通过后台看到用户的支付情况,也商户平台看到用户的支付情况。4.1.5退款当用户由于某种原因无法乘坐巴士时,用户可以选择退票。为了防止一些用户恶意退票,系统退票的设计思路是:每天可以两次5分钟以内100%金额退票,此外,5分钟以内80%退票,开车前4个小时以内60%金额退票,开车前2小时40%金额退票,开车前2小时,不允许退票。如果用户有特殊情况,可以直接联系工作人员,工作人员可以再商户平台进行退票。退票流程图如图4.5所示:15 图4.5退票流程图首选用户在已支付的订单中选择要退票的订单,然后选择要退票的座位,系统调用微信的退款接口,退票成功后退回的车费在一定时间内退回到退款用户的账户内。由于退款功能需要调用微信的退款接口,该接口的调用有可能由于一些原因失败,一旦退款失败,用户可以联系管理员,管理员在后台可以进行手动退款。4.1.6优惠券使用用户在进行购票时,可以选择使用优惠券,每个优惠券有一些使用条件,如:只能在指定路线使用、具有使用期限、使用金额上限等。用户在提交订单之后,支付订单之前,可以选择需要使用的优惠券,在优惠券列表中选择需要使用的优惠券,确定选择使用的优惠券后,订单会显示出使用优惠券后的价格,订单一单支付(包括取消)支付,优惠券就不可取消。订单支付成功后,优惠券失效。优惠券使用流程图下图所示:16 图4.6优惠券使用流程图4.1.7个人信息用户在使用手机注册后,直接跳转到个人页面。个人页面包括的内容有个人信息、订单、优惠券、坐车等功能。个人信息功能就是用户可以继续对个人信息进行修改,包括手机、姓名、昵称、邮箱等。在用户进行维护个人信息时系统会对修改的信息进行验证,保证数据的正确性。订单功能是用户可以查询订单,包括未支付订单、未乘坐订单、已乘坐订单和退款记录。未支付订单为已经选择好车次、座位并提交的订单,这种订单会锁定座位,并且为用户保留15分钟订单,如果订单超过15分钟仍未支付,那么系统将会自动取消该订单并释放锁定座位;未乘坐订单表示用户已经支付过车费,但是还没有进行乘坐,当用户乘坐该车次后,此类订单将转换为“已乘坐”订单;已乘坐订单表示用户已经支付,并已经乘坐了的车次,即表示交易完成的订单;退款订单表示由于天气、道路、人员不足等原因系统管理员取消的订单,当遇到这类情况时,系统将自动退款给用户。优惠券功能为用户可以在此看到自己的优惠券。此外,在个人信息模块中,还有乘车协议和快速问答功能。个人信息功能分解图如下所示:17 图4.7个人信息功能分解图4.1.8其他功能除了上述功能之外,管理员可以通过微信公众号提供的后台对菜单进行维护。可以抢红包活动、扫码赠送活动、消息通知、推送等。4.2后台管理端管理端为管理员提供后台管理功能,主要的功能包括登陆、站点管理、路线管理、一键退票管理、车辆管理、订单管理、优惠券管理等功能。其中路线管理中又有路线列表管理和班次管理功能。4.2.1站点管理每个路线或者车次都有自己停靠的站点,管理员通过站点管理模块对站点进行管理。每个站点包含所在区域、站点名称和备注字段。4.2.2路线管理当运营方想开通某个路线时,管理员通过本模块对路线进行管理。一个路线至少包含一个起点和一个终点,这个“起点-终点”的组合成为一个“路线组”,在这个路线组之间可以任意增加子路线,各个站点均可上车或者下车。一趟车到各个站点的时间不同,导致各个站点的上车时间也不同,所以在录入站点的同时,需要录入发车点到此站点的时间差,以方便用户节约等车时间。路线管理流程图。4.2.3班次管理一个条路线一天可能会发多个班次,不同班次的发车时间也不相同,不同的日期也可能会发出不同班次的巴士,本功能模块提供管理员对班次进行管理。18 管理员新增班次的时候需要录入班次日期、发车时间、车辆信息、备注等信息,车辆名称、型号、座位、车牌号司机、电话等信息在选择车辆之后将自动填充,节约录入时间和降低录入错误的可能性。4.2.4座位管理用户订购车票后,管理员在后台可以看到某个车次具体的订票细节。订票细节应该包括车次号、订单号、选座人、座位号、状态等。该功能不仅可以让管理员或者运营人员对车票的订购情况一目了然,也方便运营方对数据进行进一步分析。4.2.5路线、车次取消在路线管理和班次管理中均提供一键退票功能。因为巴士的发车会受到天气、道路、人数等多方面的影响,一些班次难免在一些特殊情况下无法发车,这时就需要取消班次或者路线。如果某一班次有人已有人购票,管理员取消班次时系统会将所有已经付款的订单取消,并将已支付金额退回用户微信或者银行卡中;如果某一班次或者路线无人购票,那么将会直接取消该路线或者班次。路线、班次取消流程图如下所示:图4.8取消路线、班次流程图4.2.6一键退票管理一键退票管理模块提供退票状态查询功能,当管理员进行路线取消之后,当管理员取消路线或者班次时,正常情况下,系统会自动退回相应的金额给用户,但是由于使用第三方的微信支付,调用微信退款接口无法保证100%成功,所以需要查询一键退票是否成功,若未成功,需要进入商户平台进行手动退票。19 4.2.7订单管理管理员可以使用订单管理模块对所有订单进行查询。所有订单是指未付款订单、已付款订单和已退票订单。其中未付款订单又分为待支付订单和未支付订单,待支付订单是指已经下订单,但是未付款且下单时间未超过15分钟的订单;已失效订单指的是未付款且已经超过15分钟的订单。已支付订单包括未完成订单和已完成订单,未完成订单是已经预定并付款订单;已完成订单表示已经乘坐的订单。已退款订单就是退款记录。管理员不可对订单进行操作,只能查询。4.2.8优惠券管理管理员通过本功能增加优惠券,增加优惠券时应录入的字段有优惠券名称、优惠额度、生效时间、过期时间、总数、备注等。当开展一些活动时,管理可以通过这个功能向用户分发优惠券,分发优惠券具体流程图如下所示:图4.9优惠券分发流程图20 第五章详细设计与实现本章主要介绍本系统的详细设计和实现过程,包括数据结构详细设计和系统的实现两部分。其中数据库详细设计包括数据字典和数据库表两部分,数据库表对应系统的各个实体类,是存储用户、车次等信息的主要载体;数据字典是一些常用但是变化较少的字段,这些字段可以固定的写在数据库中,方便调用,减少开发工作量。5.1数据库设计本系统中,所有数据库表都有一些共有字段,共有的字段提前介绍,以后不再赘述。所有都有且仅有一个主键“id”,表中没有物理外键,即所有的表之间的链接都是逻辑关联。系统表有均有create_by,create_date,update_by,update_date,remarks,del_flag字段。create_by:创建人的IDcreate_date:创建日期update_by:更新人IDupdate_date:更新日期remarks:注释del_flag:删除标记。系统采用标记删除方式,即用户在执行“删除”操作时,设置数据库中相应的记录del_flag,不删除记录,这么做的好处是在用户误删的情况下,可以恢复删除记录。5.1.1数据库详细设计本系统核心表包括:账户表、车辆表、优惠券表、优惠券详情表、路线表、订单表、订单退款表、订单座位表、支付表、班次表、座位表、座位详细表、站点表和未支付订单表。下面将给出核心表的主要字段及含义,如5.1所说,公有字段将不再赘述。用户信息表用于存放各种用户信息,也是判断是否在本系统注册过的凭证,只有在系统注册过的微信号,才可以进行购票和参加各种活动。用户表具体结构21 如表5.1所示:表5.1用户信息表字段名类型含义openidVarchar微信唯一标识phoneVarchar电话号bounce_numInt退款记录last_bounce_dateDatetime最后退款时间nicknameVarchar昵称nameVarchar姓名birthdayVarchar出生日期sexVarchar性别emailVarchar电子邮箱车辆表用户存放车辆信息,管理员在增加本次时,不用再录入巴士信息,可以直接在此表中选择。巴士车辆表如表5.2所示:表5.2巴士车辆表字段名类型含义nameVarchar车辆名称modelVarchar巴士类型seatsInt座位数plate_numberVarchar车牌号driverVarchar驾驶员phoneVarchar电话优惠券存放有所有优惠券信息,优惠券有两个表,一个是wx_coupon,存放的是优惠券的基本信息,如过期时间、优惠金额等,一个是wx_coupon_detail,这个表存放的是每个具体优惠券详细信息。wx_coupon_detail与wx_coupon通过wx_coupon的id关联。这两个表具体如表5.3和5.4所示22 表5.3优惠券组表字段名类型含义nameVarchar优惠券名称cmoneyInt优惠金额start_timeVarchar生效时间deadlineVarchar失效时间creceivedVarchar领取数量表5.4优惠券详情表字段名类型含义nameVarchar优惠券名称couponidInt优惠组idorderidVarchar订单idstateVarchar状态used_timeVarchar使用时间received_timeVarchar获取时间user_nameVarchar使用人cmoneyInt优惠金额openidVarchar微信唯一标识deadlineVarchar截止时间路线表wx_route是本系统核心内容,在此表中存放与路线以及子路线,具体表结构如表5.5所示:表5.5路线表字段名类型含义beg_site_idVarchar起始站点idbeg_site_nameVarchar起始站点名称end_site_idVarchar终止站点idend_site_nameVarchar终止站点名称statusInt状态beg_site_areaVarchar开始地区23 end_site_areaVarchar终止地区parent_idVarchar父路线idpriceInt价格diff_minuteInt时间差订单模块中,需要使用到wx_order、wx_order_bounce、wx_order_bounce_record、wx_order_seat、wx_unpay_order共5个表。wx_order记录已经支付订单,包括完成、未完成、已退款记录;wx_order_bounce、wx_order_bounce_record共同记录退款记录;wx_order_seat记录订单座位;wx_unpay_order记录为支付订单。由于表字段过多,下面只给出最关键的wx_order表结果,如表5.6所示:表5.8订单表字段名类型含义unpay_order_idVarchar未支付订单idcontactVarchar联系人phoneVarchar联系人电话lineIdVarchar班次idbegSiteIdVarchar起始站点idbegSiteAreaVarchar起点城市begSiteNameVarchar起点站点名称endSiteIdVarchar终止站点idendSiteAreaVarchar终点城市endSiteNameInt终点名称路线id,,路线可以单独routeIdVarchar设置价格lineDateVarchar发车日期hourInt发车小时minuteInt发车分钟weekInt星期opriceInt原价格,未使用优惠券前24 ticketsVarchar购买的票数couponIdVarchar优惠券idendpriceInt最终价格,使用优惠券后支付方式1=在线支付payTypeVarchar2=其他支付openidVarchar微信唯一标识是否已完成0未完成1isFinishInt已完成2已退款perpriceInt一张票的价格退票张数,1:退了一张bounceNumInt(一半),2:退了两张3退了三张...5.1.2数据字典本系统使用的数据字典为地区名称,由于本系统使用范围暂时是吉林省,所以暂时只记录了吉林省的相关城市名称。具体城市数据字典如表5.9所示:表5.9省内系统地区表键值标签类型描述排序changc长春area地区1jil吉林area地区2sip四平area地区3songy松原area地区4baic白城area地区5liaoy辽源area地区6tongh通化area地区7bais白山area地区8yanb延边area地区925 5.2系统的实现本节主要描述各个模块的具体实现过程,并给出一些核心代码。由于本系统实现的模块较多,本节将重点介绍以下模块,包括:路线管理、退款管理、微信端订票功能。5.2.1工程构架及目录系统采用MVC模式,服务端以Spring为核心,包括控制层、服务层和持久层,其中持久层又包括数据库操作类和实体类文件。具体目录结构如图5.1所示:图5.1系统文件目录结构如上图所示,每一个模块都有自己单独的目录,每个模块中均包含dao(持久层)、entity(实体类)、service(服务层)、web(控制层)。持久层只与数据库交互;每一个实体类都对应数据库中一个表,实体类中的属性对应数据库表中的一个字段;服务层用来实现业务逻辑,并通过调用持久层实现数据的持久化;控制层用来解析浏览器的请求,并分发请求给对应的函数。另外,目录中一个目录为”weixin”,该目录下的类是处理微信端页面请求的控制器,该目录下的控制器也会调用相应的service。由于每个后台功能都有列表页面、表单页面,而且各个模块之间实现方式类似,所以若无特殊内容,这两个功能只介绍一次,以后26 不再重复介绍。5.2.2路线管理的实现路线管理管理的核心就是增加路线,并且能对路线进行增删改查。新增路线时要先添加一个路线组,然后在中增加各个子路线。1)增加路线组用户点击“添加组”按钮时,进入添加组页面,用户需要录入的字段有起点、终点、票价和备注。其中起点和终点是两个不同的站点,当用户点击“添加组”按钮时,系统会调用RouteController类的form方法请求,并在数据库查询出所有的站点信息,在前端页面以下拉列表的方式展示给用户。在点击按钮的同时,系统会实例化一个Route类以保存路线的信息,form函数查询站点方法及页面展示的核心代码如下所示:@RequiresPermissions("route:route:view")@RequestMapping(value="form")publicStringform(StringparentId,Routeroute,Modelmodel){List
此文档下载收益归作者所有