基于微信公众平台的巴士购票系统的设计与实现

基于微信公众平台的巴士购票系统的设计与实现

ID:35181765

大小:3.26 MB

页数:59页

时间:2019-03-21

上传者:U-56225
基于微信公众平台的巴士购票系统的设计与实现_第1页
基于微信公众平台的巴士购票系统的设计与实现_第2页
基于微信公众平台的巴士购票系统的设计与实现_第3页
基于微信公众平台的巴士购票系统的设计与实现_第4页
基于微信公众平台的巴士购票系统的设计与实现_第5页
资源描述:

《基于微信公众平台的巴士购票系统的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

:分类号;TP311.5单位代码;10183研究生学号!20US3H439密级:公开戀吉林大学硕古学位论文专他聲位()基于微信公众平台的田±购票系统的设计与实现TheImementndDesinofBusBookins化mplaggSyBasedonWechatPublicPlatform作者姓名:邓帅类别:工程硕丈领域(方向):软件工程指导教师;陈思国劇教授培养单位:软件学院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:创建人的IDcreate_date:创建日期update_by:更新人IDupdate_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){ListsiteList=siteService.getSiteList();//查询站点列表model.addAttribute("siteList",siteList);//增加站点列表参数model.addAttribute("route",route);//增加空实体类参数if("0".equals(parentId)){//parentId=0表//示是路线组}路线组录入界面如图5.2所示:图5.2路线组录入界面27 当用户录入路线后,点击“保存”按钮即可进行保存,但是保存时有一些条件需要进行后台判断,例如:起点终点不可相同、路线组不可重复,当保存失败时,系统会调用addMessage增加失败原因的消息,并返回列表界面。2)路线列表当用户点击“路线管理”按钮时,系统调用RouteController中的list方法,list方法中调用RouteService的find方法查询出数据库中所有的路线列表,并展示到页面上。路线列表界面如图5.3所示:图5.3路线列表界面RouteService中find方法为此功能的核心方法。此外,一方面由于本系统采用标记删除的方式,在此功能模块不应该查询出已经标记删除的记录,另一方面本系统提供各种条件查询,路线的查询条件有“起始站点”和“终止站点”两个,所以后台需要进一步过滤。Find方法的核心代码如下所示:publicPagefind(Pagepage,Routeroute,StringparentId){Listselection=newArrayList();ListselectionArgs=newArrayList();CacheInfoci=newCacheInfo();ci.setColumns(newString[]{"a.id"});ci.setTable("Route");if(StringUtils.isNotEmpty(route.getBegSiteName())){...}//起始站筛选条件if(StringUtils.isNotEmpty(route.getEndSiteName())){...}//终止站筛选条件if(null!=route.getStatus()&&2!=route.getStatus()){...}//状态筛选条件selection.add("a.parentId=?");28 selectionArgs.add(parentId);selection.add("a."+Route.FIELD_DEL_FLAG+"=?");//选出未逻辑删除记录selectionArgs.add("0");page=routeDao.getObjpage(ci);//返回页面实体类returnpage;}3)子路线功能一个路线可能有多个区间,例如:有一趟车是从长春的吉林大学发往吉林的东北电力大学,途径长春理工大学、铁路学院,那么这趟路线可能会包含吉林大学-长春理工大学、吉林大学-铁路学院等子路线。管理员可以使用本功能在一趟路线组下增加子路线。管理员也可以根据需要启用或者停用某条子路线。添加子路线功能的实现和添加路线组功能实现的原理基本相同,不同点在于,增加子路线时,需要录入时间差,即起始发车时间到该子路线起始点之间的时间差,并且一个路线组至少包含组路线“起始点-终止点”的路线。路线列表界面如图5.4所示:图5.4路线列表界面管理员点击“启/停”按钮时,可以更改这条路线的状态,路线的启用停用其实是改变这条路线状态(status)字段,0表示无效,1表示有效。一旦一条路线停止启用时,用户在微信端将无法搜索到该条路线。路线启用停用的核心代码如下所示:@RequiresPermissions("route:route:edit")@RequestMapping(value="qyty")publicStringqyty(StringparentId,Routeroute,RedirectAttributes29 redirectAttributes){route.setStatus(route.getStatus().intValue()==1?0:1);//状态取反routeService.saveByStatus(route);//保存路线redirectAttributes.addAttribute("parentId",parentId);addMessage(redirectAttributes,"操作成功");//增加消息return"redirect:"+Global.getAdminPath()+"/route/?repage";//页面重定向}4)班次管理本功能模块可以对班次进行增、删、改、查,还可以查看班次座位预定情况。班次列表功能与路线列表功能相同,通过调用find函数对某路线的班次进行查询,并将查询结果展示到页面中。新增班次时,需要录入班次日期、发车时间、车辆信息。新增班次如图5.5所示:图5.5新增班次图新增班次中,点击“选择常用车辆信息”按钮,可以选择系统中现有的车辆信息,这些信息可以自动填充到名称、型号、车牌号、司机、联系电话字段中。点击“选择常用车辆信息”按钮后,先查询所有车辆信息,并利用jquery自带插件jBox弹出提示窗口,车辆选择界面如图5.6所示:30 图5.6车辆选择界面查询并弹出车辆信息的前端代码如下所示:functionselBus(){top.$.jBox("iframe:${ctx}/bus/selBus",{title:"选择车辆信息",width:700,height:400,buttons:{'确定':true,'关闭':false},submit:function(v,h,f){if(v==true){varbusName=...varbusModel=......if(""==busSeats){//判断是否已经选择车辆alert("请选择车辆信息!");returnfalse;}else{//如果已经选择了车辆则自动填充数据$("#busName").val(busName);$("#busModel").val(busModel);......31 returntrue;}}}});}5)取消班次当取消班次时,系统会先判断该班次是否有付款订单,如果没有付款订单,那么可以直接退款,如果有已付款订单,那么需要先取消所有订单并将用户支付的金额全额退还给用户,最后删除该班次。具体函数实现如下所示:a.清除未完成订单获取所有未订单,并将所有未完成订单删除,然后再获取所有座位列表,删除左右已选座位,具体实现过程如下所示:ListunpayOrders=unpayOrderService.getUnfinishedOrdersByLinid(id);Listseats=null;if(null!=unpayOrders&&unpayOrders.size()>0){for(UnpayOrderunpayOrder:unpayOrders){//删除订单unpayOrder.setDelFlag(1);unpayOrderService.save(unpayOrder);//保存状态/***删除订单需要同步解除已锁定的座位*///获取订单的座位列表seats=orderSeatService.getSeatsByUnpayOrderId(unpayOrder.getId());if(null!=seats){for(OrderSeatos:seats){//删除座位seat_detailService.refundSeatsInOrder(os.getSeatNum(),unpayOrder.getLineId());orderSeatService.delete(os.getId());}}Seatseat=seatService.getSeatByLineId(id);if(null!=seat){//删除seat主表seatService.delete(seat.getId());}}}32 b.订单全额退款。订单全额退款流程如下:获取已付款订单1...N:Listorders=orderService.getOrdersBylineId(id);根据订单获取座位信息:Seats=orderSeatService.getSeatsByUnpayOrderId(order.getUnpayOrderId());将所有座位删除:seat_detailService.refundSeatsInOrder(seat.getSeatNum(),order.getLineId());orderSeatService.delete(seat.getId());新建一条退款记录并保存到数据库中:bounce=newBounce();bounceService.save(bounce);计算第N个订单的退款金额和总金额:total_fee=(newBigDecimal(unpayOrder.getTempprice().toString()).multiply(newBigDecimal(100))).intValue();refund_fee=(newBigDecimal(order.getEndprice().toString()).multiply(newBigDecimal(100))).intValue();调用微信的退款接口,本系统实现退款接口的函数是WeixinManger的refund函数。bounceResult=WeixinManager.refund(request,bounce.getId(),order.getUnpayOrderId(),""+total_fee,""+refund_fee);微信公众号提供的退款接口需要的参数如表5.10所示:33 表5.11退款接口参数表参数名含义举例appid服务号id-mch_id微信支付商户号-abcdefghijklmnopqrstunonce_str自定义的随机字符串vwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789out_trade_no退款单号654232out_refund_no订单号123456total_fee总金额1refund_fee退款金额1op_user_id与mch_id相同-我们用这些参数实例化一个XML,并作为HTTP请求的参数传递给指定的URLURL:https://api.mch.weixin.qq.com/secapi/pay/refundHTTP请求头如图5.7所示图5.7HTTP请求头当向退款url发送请求后,我们可以获得一个字符串类型的返回值,我们可以根据返回值判断结果,返回值与结果对应如表5.11所示:表5.12退款返回值解析表参数名含义SUCCESS成功SYSTEMERROR系统超时INVALID_TRANSACTIONID无效transaction_idPARAM_ERROR参数错误APPID_NOT_EXISTAPPID不存在34 MCHID_NOT_EXISTMCHID不存在APPID_MCHID_NOT_MATCHappid和mch_id不匹配REQUIRE_POST_METHOD未使用post传递参数SIGNERROR签名错误XML_FORMAT_ERRORXML格式错误c)解除优惠券锁定if(StringUtils.isNotEmpty(order.getCouponId())){CouponDetailcouponDetail=couponDetailService.get(order.getCouponId());couponService.refund(couponDetail.getCouponid());couponDetailService.refund(order.getCouponId());}d)删除预支付订单if("success".equals(closeStatus)){unpayOrder.setCloseStatus(1);}else{unpayOrder.setCloseStatus(0);unpayOrder.setCloseStatusRemark(closeStatus);}unpayOrderService.save(unpayOrder);e)发送退票短信flag=SMSManager.sendRefundSms(order.getPhone(),order.getLineDate(),order.getHour(),order.getMinute(),order.getBegSiteName(),order.getEndSiteName());35 if(flag){order.setSmsRefund(1);}else{order.setSmsRefund(0);}5.2.3微信购票1)选择车次功能首先要进行选择出发点、终止点和发车时间。购票起始页面如图5.8所示:图5.8订票页面点击“起点”按钮,我们先查询现在所有的路线,并筛选出所有起点的出发城市,然后点击城市后会筛选出所有该城市出发站点。核心代码如下:ListrouteList=routeService.getAllRoute();//获取所有路线Setset=newHashSet();Sitesite=null;for(Routeroute:routeList){site=siteService.get(route.getBegSiteId());set.add(site.getArea());}model.addAttribute("areas",set);return"modules/"+"/weixin/route/begarea";36 }用户点击某个城市后,显示出该城市所有出发点。确定好发车起点、重点和时间后,点击查询按钮,即可查出所有符合条件的车次并展示给用户,查询车次核心代码如下所示:Routeroute=routeService.getRoutByBeginEnd(begSiteId,endSiteId);//获取路线Routezu=routeService.get(route.getParentId());//获取路线组Listlines=lineService.getLinesByDateAndZu(selDate,zu.getId());//根据日期以及路线组获取班次列表if(nowDate.getTime()>=lineDate.getTime());//判断创建时间跟现在的时间差,过期变灰不可选num=seatService.getLeftTicket(line.getId());//判断是否满座2)选座功能用户选择完车次后,可以进行选座,选座时先在后台查询已订座位,在用户界面生成座位图,已选座位设置为灰色(不可选)。选座功能实现如下所示:StringBufferm=newStringBuffer();//初始化座位表if(StringUtils.isNotEmpty(lineid)){//根据班次查询已订座位号selection.add("a.lineId=?");selectionArgs.add(lineid);}for(Seat_details:l){m.append(s.getSeatnumber()).append("|");//座位表号格式为:01_A|01_B...}生成座位表后,将座位字符串传递给前段,前段根据已订座位生成座位表,如图5.9所示:37 图5.9座位图选完座位后进行填写订单,填写订单页面如图5.10所示:图5.10订单填写页面3)支付功能用户在提交订单后,可以退订单进行付款,付款时需要调用微信接口,支付流程及核心代码如下:1.获取创建时间DatecreateDate=unpayOrder.getCreateDate();2.判断创建时间跟现在的时间差38 cal2.setTime(createDate);l=cal1.getTimeInMillis()-cal2.getTimeInMillis();3.如果时间超过了最大时间,删除订单不可支付if(second>(Integer.parseInt(Global.getConfig("order_max_time"))*60))4.调用统一支付接口,提交并支付https://api.mch.weixin.qq.com/pay/unifiedorder5.调用支付回调函数,根据支付接口返回值对订单进行设置,返回值如表5.13所示:表5.13微信支付返回结果表参数名含义SUCCESS成功NOAUTH商户无此接口权限NOTENOUGH余额不足ORDERPAID商户订单已支付ORDERCLOSED订单已关闭SYSTEMERROR系统错误APPID_NOT_EXISTAPPIDAPPID不存在MCHID_NOT_EXISTMCHIDMCHID不存在APPID_MCHID_NOT_MATCHappid和mch_id不匹配LACK_PARAMS缺少必要的请求参数OUT_TRADE_NO_USED商户订单号重复SIGNERROR参数签名结果不正确XML_FORMAT_ERRORXML格式错误REQUIRE_POST_METHOD请使用post方法POST_DATA_EMPTYpost数据为空NOT_UTF8编码格式错误支付成功后订单变为已乘坐订单,如图5.11所示:39 图5.11已支付订单40 第六章系统的测试与运行本章介绍了本系统的运行过程,对管理站点、开通路线、购票等功能进行了测试。首先登录系统,进入管理员界面,依次点击“路线管理->站点管理->站点添加”按钮,进行新增站点,选择区域“长春”,名称输入“东北师范大学(净月校区)”,备注中输入“博硕路新天地超市弘叶宾馆门公交站左侧”,点击“保存”按钮,完成站点录入,如图6.1所示:图6.1站点录入界面保存成功后,刚刚录入的数据将出现在站点列表中,如图6.2所示:图6.2站点列表页面每个功能模块新增记录后,都会相应的出现在列表中,本功能只展示一次,以后不再展示。路线管理首先需要增加一个“组”,一个组应包括这条路线的起点、终点、价格和备注,除了起点和终点之外,管理员可以在路线列表中增加子路线,如图6.3所示:41 图6.3路线组及组路线列表图增加好路线之后,需要先开通一个班次,才可以正常选票。进入班次列表页面可以对这个路线的班次进行管理,班次输入界面如图6.4所示:图6.4班次增加界面增加完班次后就可以进行选票了。使用手机进入微信,并进入微信公众号,点击“购票”按钮开始购票,整个购票流程为:选择起点->选择目的地->查询班次->选择班次->输入购票信息->进行选座->提交信息->付款。购票流程测试如图6.5-12所示:42 图6.5预定票界面图6.6选择出发城市页面图6.7班次查询页面图6.8填写订票信息页面43 图6.9选座页面图6.10待支付订单页面图6.11支付页面图6.12已支付订单通过测试,本系统的核心功能已经完成,并可以正常投入使用。44 第七章总结与展望7.1总结基于微信公众平台的巴士购票系统实现了用户通过微信公众平台进行在线购票功能,一方面解决了巴士的车次和发车时间不灵活,无法根据坐车人数进行随时调整,资源错配等问题;一方面可以更灵活的设置站点,使用户乘坐巴士更为方便。基于微信公众平台的巴士购票系统采用了B/S构架,采用了HTML作为前端展示,微信公众号作为用户接口,Java作为服务器端处理业务逻辑和与数据库交互,数据库选用MySQL实现,系统构架成熟稳定,功能已顺利实现。系统主要模块有:站点管理、路线管理、班次管理、一键退票、路线一键退票查询/班次一键退票查询、车辆管理、待支付订单管理、已失效订单管理、未完成订单管理、已完成订单管理、已退款记录管理、优惠券管理、注册功能、微信端订票功能、个人信息维护功能、个人订单查询功能、优惠券查询功能等。7.2展望在本系统实现过程中,仍然存在一些可以改进地方:1)现在订票、退票采用短信通知的方式,现在很多用户对短信的逐渐减少,另一方面,短信通知也需要一定的费用,当人员数增加到一定数量时,也是一笔营运费用。现在微信公众平台提供模板消息接口,可以考虑将用户的订票、退票消息使用模板消息进行通知。2)现在本公众号活动、消息发布是采用公众号自带的消息功能,后期自己实现消息发布接口,后天进行图文混排的消息发布,使管理员使用更加方便。总之,通过对本课题的选题、可行性研究、技术选择、概要设计等工作,已经完全实现巴士在线订票功能,通过使用本系统的测试,也达到了预期的效果。45 参考文献d[1]张遒妹.数据流分析的功能[J].微型电脑应用,1996,8:25-31[2]RalphR.Young.EffectiveRequirementsPractices[M],America:Addison-Wesley,2004,6-92[3]邓绯.无纸化考试系统研究与设计[D].[学位论文].成都:西南交通大学,2005.[4]王家华.软件工程[M].沈阳:东北大学出版社,2001,46-49[5]Java入门经典[M].人民邮电出版社,2012,第一版.[6]面向对象技术在电气控制仿真组件中的应用-内江科技-2011年第1期(32)[7]Flex3.0程序开发技术详解[M].北京:清华大学出版社,2011,第一版.[8]数据库原理与应用[M].电子工业出版社,2010,第一版[9]王珊、张孝.数据库技术与应用[M].北京:清华大学出版社,2005.9.3-4[10]于小川.数据库原理与应用[M],.北京:人民邮电出版社,2005.24-26.[11]向华.Web功能测试技术研究[J].软件导刊,2006.10.[12]岳晓红.对Web系统测试技术的探讨[J].陇东学院学报(自然科学版),2006.16:17-19[13]耿彩凤,王越.网络测试中的Web测试[J].辽宁大学学报(自然科学版),2005.32:272-274[14]杨志,关昕,马力,Web系统性能测试实施过程[J].计算机工程与设计,2007.28:2284-2290.[15]丁月华,王方丽.基于Web软件的性能测试[J].计算机与数字工程,2006.34[16]李康荣,贾迪,张瑶.基于Web系统测试的应用研究[J].中国测试技术,2006.32:114-116[17]蔡长安,王盈英.C_S和B_S的模式的比较和选择[J].渭南师范学院报,2006.546 [18]陈欣.MIS系统开发中C_S与B_S模式结合的探讨[J].西北电力技术,2005.3[19]赵剑锋.地方政府招商引资工作存在的问题及对策研究[D].硕士学位论文,2012[20]刘雪梅.服务器端软件性能分析和诊断方法研究[D].硕士学位论文,2010[21]高国忠.基于J2EE和MVC模式的企业信息管理系统的设计与实现[D].硕士学位论文,200547 作者简介及在学期间所取得的科研成果作者:邓帅性别:女民族:汉出生年月日:1986年6月25日籍贯:吉林省长春市学位:工学学士学历:大学本科工作单位:吉林省专用通信局工作简历:本人邓帅,现为吉林省专用通信局工程师,2009年毕业于北华大学电子信息科学与技术专业,工学学士。2009年—2012年在吉林省武警总队通信处从事卫星站通信工作,2012年至今就职于吉林省专用通信局。在部队从事卫星通信工作期间,曾多次指挥并执行重要通信保障任务,配合各个地区,各个站型联合作战,出色完成大小军事演习、演练任务一百余场,所在站型荣立集体荣誉一等功3次,集体荣誉二等功5次,集体荣誉三等功3次。曾多次组织通信专业大练兵,大比武,每周给通信站战士授课,讲解通信知识,不断提高通信战士的专业技能水平和处理应急突发事件的能力。在武警吉林总队内部刊物中参编关于提高通信执勤作战能力材料5篇。在吉林省专用通信局工作后,多次参加设备厂家组织的各项专业技能培训,在培训考核中均取得优异成绩,特别是在交换机S1240人机操作命令培训考核中取得第一名2次,第二名2次。2015年到北京中南海电信局进行参观学习,同年就本局测量台现状与上海新泰厂家进行研讨,顺利完成了测量台的升级改造。目前,吉林省专用通信局测量台与中南海电信局测量台同步,障碍排除的准确性、防监听等测试技术在全国处于领先位置。48 致谢时光荏苒,岁月如梭,三年的研究生时光已接近尾声。从工作岗位再次回到亲切熟悉的校园,我非常兴奋,浓厚的学习氛围,舒适的学习环境,有一种久别重逢的欣喜。三年的研究生学习生活中,我的收获太多太多,不仅丰富了我的知识储备,开阔了我的思路,增长了见识,加强了我的专业技能水平,还结交了各行各业的良师益友,在我的生活工作中给予了很多的帮助。我先要感谢陈思国老师,在陈思国老师的悉心指导与耐心帮助下完成的。陈思国教授学识渊博,思想深邃,视野雄阔,平易近人,教学态度严谨,对待工作一丝不苟。陈思国教授平时工作非常繁忙,他对待每一位学生都非常认真负责,他从百忙之中抽出时间,从论文选题开始就细心对我进行指导,帮我理清思路,给我宝贵建议,为我指明方向。论文初步完成后又不厌其烦的帮我进行指导与反复修改,从论文结构层次到论文内容的审核,从论文整体脉络主线再到论文部分细节内容的修改,一直到后期的论文格式调整,这篇论文的完成过程中的每个阶段和各个环节都倾注了陈思国教授大量的心血,我衷心的感谢陈思国教授的指导与帮助,非常庆幸自己能遇到这样一位好导师在论文完成期间对我不吝教诲。感谢所有抽出时间阅读我的论文的专家、学者、老师们,由于我水平有限,论文中难有不足之处,还请各位专家、学者、老师们指正、不吝赐教,谢谢!49

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭