微信机器人的设计和实现.docx
- 文档编号:29891501
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:45
- 大小:1.65MB
微信机器人的设计和实现.docx
《微信机器人的设计和实现.docx》由会员分享,可在线阅读,更多相关《微信机器人的设计和实现.docx(45页珍藏版)》请在冰豆网上搜索。
微信机器人的设计和实现
闽江学院
本科毕业论文(设计)
题目基于微信公众平台Web应用-
微信机器人的设计与实现
学生姓名彭秋源
学号5127101361
系别软件学院
年级2012
专业软件工程
指导教师肖建飞
职称讲师
完成日期2014.4.25
闽江学院毕业论文(设计)诚信声明书
本人郑重声明:
兹提交的毕业论文(设计)《基于微信公众平台的Web应用-微信机器人的设计与实现》,是本人在指导老师肖建飞的指导下独立研究、撰写的成果;论文(设计)未剽窃、抄袭他人的学术观点、思想和成果,未篡改研究数据,论文(设计)中所引用的文字、研究成果均已在论文(设计)中以明确的方式标明;在毕业论文(设计)工作过程中,本人恪守学术规范,遵守学校有关规定,依法享有和承担由此论文(设计)产生的权利和责任。
声明人(签名):
2014年月日
摘要
微信智能机器人是运行于微信公众平台并基于HTML5的WEBAPP(网页第三方程序),“微信公众号+APP页+社会化CRM系统+基于SpringMVC3.0Restful”的模式开发将成为未来个人app的趋势。
在此设计主要是基于SpringMVC3.0Restful为机器人的“智能回复”以及“微餐厅”模块实现信息化处理提供方案,本文从课题背景意义、SpringMVC3.0Restful介绍、系统需求分析、概要设计和详细设计对整个系统的开发进行了描述。
本系统采用B/S结构,以SpringMVC3.0Restful+Hibernate +Linux服务器作为基础,使用MySQL数据库及Hibernate 、nginx负载均衡、jetty服务器等技术进行开发。
应用包含“智能机器人”基本信息的回复,以及“微餐厅”的点菜,查询,更新,结账,主页,在线预订,购物车,关于餐厅,我的订单,退出等功能。
系统使用方面灵活,实现了基本点餐流程中的功能。
关键词:
SpringMVC3.0Restful;Hibernate ;nginx负载均衡;jetty服务器;maven项目管理工具
Abstract
MicroMessenger intelligentrobotisrunningonMicroMessenger publicplatformandHTML5-basedWEBAPP(webthirdpartyprograms),"MicroMessenger publicnumber+APPpage+SocialCRMsystem+SpringMVC3.0Restfulbased"modeldevelopmentwillbecomeapersonalappfuturetrends.InthisdesignismainlybasedonSpringMVC3.0Restfulrobot"smartreply"and"micro-restaurant"moduleprovidesinformationprocessingsolutions,thisarticlefromthebackgroundtasksignificance,SpringMVC3.0Restfulintroduction,systemrequirementsanalysis,preliminarydesignanddetailedonthedevelopmentofthedesignofthesystemdescribed.ThesystemusesB/SstructuretoSpringMVC3.0Restful+Hibernate+LinuxserverasabasisfortheuseoftheMySQLdatabaseandHibernate,nginxloadbalancing,jettyservertechnologydevelopment.Applicationsinclude"smartrobot"restorebasicinformation,aswellas"micro-restaurant"alacarte,query,update,checkout,home,onlinebooking,shoppingcart,ontherestaurant,myorder,exitandotherfunctions.Theuseofaflexiblesystemtoachievethebasicorderingprocessfunctions.
Keywords:
Automaticreply;smartrestaurant;SpringMVC3.0Restful;Hibernate;nginxloadbalancing;jettyserver;mavenprojectmanagementtools
1绪论
1.1课题背景
App为主的移动互联网时代正在被崛起的微信公众平台代替,微信公众账号慢慢地挑战移动App地位。
微信的海内外用户已近超过了3亿,这个数字也在不断的增加,所以它也成为移动互联网时代新的宝藏。
从2011年腾讯公司推出微信公众平台的首个版本到现在海内外用户突破3亿,两年不到的时间微信就做到了。
再次同时,现在期待已久的微信公众平台也在2012年上线了,时至今日各种围绕着微信公众平台的内应用和服务发展迅速,平台的生态圈也已经具有了很大哦规模。
新的社会化媒体如微信、易信、weibo给传统获取信息的方式带来颠覆性改变。
随着微信公众平台的开放和商业化建设,可以看到了越来越的资源和领域之间进行着生态链的整合。
对于微信公众平台来说自媒体和企业应用市场将是今后发展的一个重要方向,越来越多的创新性企业进入微信公众平台。
1.2课题意义
基于公众平台开发的智能机器人使用开放自定义菜单功能,是用户的移动客户端和服务器之间有了更好的交互。
现在看来,通过开放出来的接口和自定义菜单的功能开放,微信公众帐号已经慢慢地有了APP的雏形。
随着微信公众平台的功能不断开放,评论、好友关联关系接口等等,将得到一个更加丰富和完善的微信意识形态。
在管理微信公众平台的时候会体会到他的短周期、低成本和简单方便的操作,但是如果从零开始去开发一个移动APP,首先要考虑的就是移动应用需要覆盖安卓和苹果这个两个平台,开发成本就不言而喻了,加上无底洞的推广成本,微信公众平台的优势就体现的淋漓尽致了,比如简单的形态,庞大的用户基数,可以非常有效地、低成本地迅速找到目标受众。
1.3需求分析
1.3.1功能性需求分析
设计是通过软件开发和软件工程的理论和方法,并结合学习专家系统知识,去完成基于微信公众平台开发的专家系统智能机器人,此专家系统注重解决的问题是用户通过系统提示输入相关信息得到需要的结果,在这里后台在使用专家系统的设计思想的时候,着重研究了通过用户的具体操作步骤,返回更加精确的信息,提高专家系统设计软件在移动互联网时代,给用户提供的全新的体验。
1、智能回复部分
个人信息、学院信息,用户可以根据服务器返回的提示信息,进行对象的动作,获取相应的消息
2、微餐厅部分
1)点菜,查询,更新,结账,主页,在线预订,购物车,关于餐厅,我的订单,退出
2)用户点击微餐厅后,显示主菜单页面,用户可以查看菜单
3)用户可以进入在线预订页面填写订单信息进行用餐的在线预订
4)用户可以在购物车中找到刚刚在线预订的信息,并且选择支付
5)用户可以通过点击关于餐厅,查看餐厅的基本信息
6)用户可以通过点击客户端上的我的订单,进行查看订单的基本信息
1.3.2性能需求分析
通常条件下,大数据量将使平台性能下降,系统响应速度变慢。
可以通过以下几种方式提高平台的整体性能。
(一)动静分离与数据缓存
通常情况下网站的性能往往会影响访问数据库的性能,导致数据的加载慢用户体验大幅的下降,而用户在访问移动互联网时,超过九成的用户操作只是为了读取信息。
因此在做性能优化的时候可以考虑将内容固定的页面生成静态HTML页面。
当用户需要访问时,可以直接读取保存的HTML静态文件,不必要和数据库进行交互。
这样,就可以大幅度提高网站的性能。
网页、图片、文件等,可以去选择CDN内容分发网络的方式进行发布,从而用户提高网站访问速度。
数据的修改这里使用了memcache,作为系统的缓存。
(二)合理规划网络环境
对用网络环境的规划,通常需要根据用户量和用户的行为去进行分析,从而计算出需要的网络带宽。
针对不同的用户群体,选择合理的地点。
如果区域特点明显,就需要搭建镜像。
(三)使用负载均衡
在这里次项目的部署在linux服务器上,使用了nginx作为负载均衡,从而达到服务器资源的充分使用。
(四)数据库
通常情况下不会让前端用户的行为直接操作数据库而是在中间加上缓存cache,但是网站性能的瓶颈很大程度上就是受数据库性能的影响。
数据库分表分库:
在同一张表里通常需要降低数据库的I/O的次数来提高性能;随着数据库中数据条目的不断增加,查询的效率和性能往往会低下时,横向分表策略,可以在单个表中减少数据条目的数量。
充分利用索引:
建立查询索引,如图1-1。
图1-1索引
(五)安全性需求
在移动互联网的时代,后台网站往往是暴露在互联网环境中的,安全问题面临这个非常大的挑战大。
此系统使用了springsecurity框架以及身份验证oauth,来加强系统的服务器、数据传输、数据存储等方面的访问安全性。
2相关技术
2.1平台总体设计原则
*代码的重用:
SpringFramework最为核心的设计目标就是实现代码的复用,可以使编码成本大大降低,从而避免了重复的劳动。
*层次划分明确:
在整个框架中每一个模块的设计相互独立,降低代码之间的耦合性。
部件细化,高类聚、低耦合。
*高效、安全、延展性强
2.1.1Spring框架介绍
Spring是一个优秀的开源框架,致力于解决企业级别应用程序的开发复杂性而创建的框架。
其层次分明的分层架构就是spring框架的主要优势之一,spring的分层架构随意使用任意一个组件,同时为javaEE企业级应用程序的开发提供集成的框架。
Spring框架是一个用7个定义完成的模块组成的分层架构。
基本模块构建在SpringCore之上,SpringCore又定义了创建、配置和管理bean如图2-1所示:
图2-1Spring系统框架
核心容器:
核心容器提供Spring系统框架的功能都是由SpringCore提供的。
BeanFactory是SpringCore的主要组件,主要由工厂模式的实现。
应用程序的依赖性规范和基本配置与实际的代码程序分开,是因为BeanFactory使用了控制反转模式。
Spring上下文:
Spring上下文是一个配置文件,主要是把上下文信息提供给Spring框架。
这些信息包括一些服务服务,例如Email、国际化语言、校验和调度等等。
SpringAOP:
把面向方面的编程功能集成到了Spring框架,就是SpringAOP的主要特性,SpringAOP通过一些简单的配置去管理特性。
通常可以使Spring框架管理的任何对象都去支持SpringAOP,而且他提供了事务管理服务在应用程序里。
使用SpringAOP,可以将事务管理集成到应用程序中,而不去依赖EJB组件。
SpringDAO:
异常层次结构用来管理异常处理以及不同的数据库供应商抛出的一些错误消息,而异常层次结构是用JDBCDAO的抽象层提供的,直接简化了错误处理,极大地降低了异常代码编写的数量。
SpringORM:
iBatis、JDO、Hibernate他们和Spring框架一起使用,都去遵从Spring的事务管理和Dao的异常层次结构,从而提供了ORM的对象关系工具。
SpringWeb模块:
通常应用程序上下文模块之上是建立的Web模块,主要是为了为基于Web的应用程序提供了必须的上下文。
同时SpringWeb模块还简化将请求参数绑定到对象的工作。
SpringMVC框架:
已经融合在SpringWebFlow里面的SpringMVC属于SpringFrameWork的后续产品,而Spring框架提供了构建Web应用程序的全功能MVC模块。
SpringMVC分离了控制器、模型对象以及处理程序对象的角色,从而使它们更容易进行定制
2.1.2后台设计
(1)Web
Framework:
MVC框架、同时使用了SpringMVC3.0Restful的风格
JavascriptLibrary:
前段大量用jquery,在这里Framework的出现是为了解决一个问题,关系数据库的数据与对象的mapping关系
CSSFramework:
使用了TwitterBootstrap,简便的布局能力和基本的页面美化
图2-2后台设计的部分展示
(2)WebService
RestfulService:
这里后台直接使用SpringMVC架构更简单,大量使用spring注解。
如果追求极致的性能标,直接写Servlet也可以。
下例是service实现类使用spring注解
@Service("storeService")
@Transactional(readOnly=true)
publicclassStoreServiceImplimplementsStoreService{
@Resource(name="storeDao")
privateStoreDaostoreDao;
@Resource(name="parlorDao")
privateParlorDaoparlorDao;
@Resource(name="gtableDao")
privateGtableDaogtableDao;
@Override
@Transactional(readOnly=false,propagation=Propagation.REQUIRED)
publicbooleanGtableSave(Gtablegtable){
gtable.setCrtDate(newDate());
gtable.setUpDate(newDate());
gtable.setStatus(Gtable.STATUS_VALID);
gtableDao.save(gtable);
returntrue;
}
}
(3)DateBase
数据库设计的一般性原则:
用项目中的实体类和表做关联映射,不去建立任何的外键,是为了方便数据的操作以及维护。
为了便日后管理通常在表名前面添加前缀。
如有几十个表,他们之间的联系比较紧密,就可以使用相同的前缀。
表名小写。
下例子为系统设计的一个实体类,用实体类来对表进行映射关联,表名设计为t_store
@Entity
@Table(name="t_store")
publicclassStoreextendsBaseEntry{
privatestaticfinallongserialVersionUID=1L;
/**
*店铺id
*/
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
privateIntegershopId;
/**
*租户id
*/
@Column(name="uid")
privateStringuid;
/**
*店铺编号
*/
@Column(name="t_shop_number")
privateStringshopNumber;
/**
*店铺名称
*/
@Column(name="t_name")
privateStringname;
/**
*包厢
*/
@OneToMany(fetch=FetchType.LAZY,targetEntity=Gtable.class,cascade={
CascadeType.PERSIST,CascadeType.REMOVE,CascadeType.MERGE})
@JoinColumns(value={@JoinColumn(name="t_shop_number",referencedColumnName="t_shop_number",updatable=false)})
privateList
}
图2-3映射关联
(4)Test
UnitTest:
使用JUnit作为测试框架。
AssertJ 是目前最好的Assert语句库。
使用JUnit用于后台的service的测试使用,使用注解@Test
@ContextConfiguration(locations={"classpath:
/application.xml"})
publicclassCateringTestextendsAbstractTransactionalJUnit4SpringContextTests{
@Resource(name="classService")
privateClassServiceclassService;
@Resource(name="ordermealService")
privateOrdermealServiceordermealService;
@Test
publicvoidtest1(){
System.out.println(ordermealService.orderCount("11144111"));
}
publicvoidtest(){
List
for(inti=0;i System.out.println(series.get(i).getKinds().get(0).getName()); } } } (5)DevelopmentEnvironment 使用jdk6,版本不是特别好 使用jetty作为web服务器,而不是tomcat,非常好的嵌入式版本,通常在做集成测试的时候不需要部署项目直接就可以开跑。 开发时直接自己在代码里启动了,省下打包拷贝War文件的时间。 使用maven作为自己的项目管理工具。 Linuxcenos作为服务器 Nginx作为负载均衡,下面将详细介绍 Mvncleaninstall–Dmaven.test.skip=true Mvncleanjetty: run Mvncleanpackage–Dmaven.test.skip=true 2.2开发环境的介绍 2.2.1部署环境 (1)项部署linux下,打war包。 Mvncleaninstall–Dmaven.test.skip=true Mvncleanjetty: run Mvncleanpackage–Dmaven.test.skip=true 图2-4项目打成war包 上传项目到服务器,解压Jar–xvfsaas-1.0.0.war Scptarget/saas-1.0.0.warwww@192.168.1.43: /home/www/wexin/webapps/root 图2-5上传打包项目到服务器 (2)web服务器jetty在linux下的配置,配置使用8080端口,使用jetty做servlet容器。 New> Arg> Call> (3)Linux服务器防火墙的管理,开放8080端口,需要切换到root权限。 Vi/etc/sysyconfig/iptables Serviceiptablesrestart -ARH-Firewall-1-INPUT-mstate--stateNEW-mtcp-ptcp--dport8080-jACCEPT -ARH-Firewall-1-INPUT-mstate--stateNEW-mtcp-ptcp--dport2121-jACCEPT -ARH-Firewall-1-INPUT-mstate--stateNEW-mtcp-ptcp--dport1886-jACCEPT -ARH-Firewall-1-INPUT-mstate--stateNEW-mtcp-ptcp--dport8886-jACCEPT -ARH-Firewall-1-INPUT-mstate--stateNEW-mtcp-ptcp--dport554-jACCEPT Serviceiptablesrestart平滑重启 (4)nginx负载均衡,代理端口和反向代理,后台项目部署在服务器上使用的代理端口。 Proxy_passhttp: //weixin http{ upstreamweixin{ server192.168.1.43: 8080; } server{ listen80; server_name; access_loglogs/asone_imac.access.log; error_loglogs/asone_imac.error.loginfo; client_body_buffer_size128k; proxy_connect_timeout600; proxy_read_timeout600; proxy_send_timeout600; proxy_buffer_size256k; proxy_buffers8256k; prox
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机器人 设计 实现