基于微信小程序的家政服务平台的实现_第1页
基于微信小程序的家政服务平台的实现_第2页
基于微信小程序的家政服务平台的实现_第3页
基于微信小程序的家政服务平台的实现_第4页
基于微信小程序的家政服务平台的实现_第5页
已阅读5页,还剩98页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于微信小程序的家政服务平台的实现RealizationofHousekeepingServicePlatformBasedonWeChatMiniProgram摘要随着中国市场经济的不断发展,人口老龄化的加剧,社会对家庭服务市场的需求越来越大。但是,传统的线下家庭服务往往遇到瓶颈,逐渐跟不上时代的发展趋势,满足不了用户的需求。此外,随着互联网的飞速发展以及越来越多人拥有如手机、平板等移动设备,伴随着微信的快速发展,已经成为现代人不可缺少的社交工具。几乎所有行业都希望接入互联网,形成O2O模式,也就是我们熟知的线上对线下的模式。此外,使用B2B2C模式,即公司对公司、再由公司推到个人,也在发挥巨大的作用。如阿里巴巴、美团等等。利用互联网高效便捷地为用户提供便利,解决国内家政行业面临的瓶颈问题是大势所趋。因此,建立一个透明、公开、平等、高效运行的家政服务平台势在必行。关键字:微信小程序网络平台家政服务透明化

AbstractWiththecontinuousdevelopmentofChina'smarketeconomyandtheagingofthepopulation,thesociety'sdemandforthefamilyservicemarketisincreasing.However,traditionalofflinefamilyservicesoftenencounterbottlenecks,andgraduallyfailtokeepupwiththedevelopmenttrendofthetimes,andcannotmeettheneedsofusers.WiththerapiddevelopmentoftheInternetandmoreandmorepeopleownmobiledevicessuchasmobilephonesandtablets.WeChathasbecomeanindispensablesocialtoolformodernpeoplebecauseoftherapiddevelopmentoftheInternet.AlmostallindustrieswanttoaccesstheInternettoformanO2Omodel,whichiswhatweknowasanonline-to-offlinemodel.Inaddition,theB2B2Cmodel,thatis,company-to-companyandthencompany-to-personpromotion,hasalsoplayedahugerole,suchasAlibabaGroupandsoon.ItisthegeneraltrendtousetheInternettoefficientlyandconvenientlyprovideconveniencetousersandsolvethebottleneckproblemsfacedbythedomestichousekeepingindustry.Therefore,tobuildatransparent,openandefficienthomemakingserviceplatformisveryimperative.Keywords:MiniProgramPlatformHousekeepingTransparency

目录第一章绪论 绪论1.1课题背景与意义由2018年中国老年健康研究报告的研究数据显示,中国人口老龄化问题日益严重。年轻人经常需要上班,甚至加班,因此,家庭的卫生状况以及是否有小孩都将面临无人照料的困境。所以以保姆中介市场为代表的家政服务越来越受到广大家庭的认同。随着中国经济的发展,每座城市生活节奏的飞速提升,家政服务市场的扩张速度十分迅猛,家政服务在每个城市中越来越普遍。伴随着上述的问题,家政服务市场的需求也变得日趋明显。但近几年在家政市场发生的各种事故,如杭州纵火案等,使不少人担心家政企业对自身财产和生命的保障,对家政行业的发展也产生了很大的影响。线下家政服务机构的良莠不齐,给用人单位的选择带来不便。因此,随着互联网的发展,人们越来越迫切地需要一个能够提供透明的企业信息和价格的家政服务平台,以及目标明确的从业者管理机制。家政服务平台,是将家政公司与雇主两者结合起来的一种方式,雇主可以通过家政服务平台,进行横向的对比,包括选择适合自己的价格、优势、劣势等,物美价廉的家政服务公司,为雇主提供最大的便利,提高雇主的家庭生活质量。其次,优胜劣汰,家政公司还可以通过用户反馈对从业人员实行考评管理,营造一种良好的市场氛围。对互联网来说,是近十年科技发展的产物,几乎家家户户都能上网,每个人都有手机或者手机,随时随地上网已经成了家常便饭。将互联网的便利与家政服务平台相结合,既能方便雇主对家政服务的选择,又能给传统的线下行业带来全新的机遇,从而打开家政服务新的市场。因此,基于互联网的家政服务平台是未来几年甚至几十年的主流发展趋势。1.2研究现状“家政服务人员”这个职业现在已经非常常见了,这个职业最开始是由中国劳动和社会保障部在2000年确定的。家政服务也开始走上了一条“专业化”的发展道路。家政行业的出现,使中国社会家庭幸福程度大大提高。根据统计,家庭佣工的分类主要有“职业保姆”、“涉外保姆”、“高级保姆”、“育儿早管”、“育儿早管”、“幼儿育儿服务”、“家教外教”、“水电维修”、“管道疏通”、“清洁”、“搬家服务”等,各类家政服务正深入社会的每一个家庭。由中国家庭服务行业在2019年的研究数据表明,目前中国约有3000万家庭需要家政服务,这个数据占到了总调查人数的15%。由此可见,家政行业的社会需求十分的明显,发展前景十分光明。根据市民的反馈,目前家政市场的乱象也比较明显,如临时加价、退货无果、甚至抢劫、盗窃等。家政市场越来越需要一个合适的解决方案,以约束家政服务行业的服务效果,从而达到双赢的局面。1.3论文研究的主要内容以家政服务为核心的发展理念是本课题的研究目标。这次家政服务平台的设计与实现,将形成一个三方平台,将作为第三方平台进行监管,实时监督家政服务公司的服务内容,并实时接受用户的反馈和建议,一旦发生用户的投诉或不满情况,第三方平台将积极开展调查,如确实发现用户的举报行为,该从业人员将无法在本平台上执行接单,其对应的家政公司也会收到警告,一旦积累到一定的次数,该服务公司也会退出本平台,并发出通知,其他雇主将该公司的情况告知,建立一个透明化的服务平台。本论文研究的主要内容:(1)分析线上家政服务平台的现状以及研究的意义,确定研究的目的;(2)研究SpringBoot、Vue、微信小程序开发技术,MVC、前后端分离的设计模式以及MySQL数据库、Redis高速缓存等相关技术;(3)详细分析家政服务平台的功能需求,并进行具体的需求分析;(4)研究家政服务平台的总体设计方案,包括总体架构和基于典型三层结构(视图、模型和控制)的设计和使用微信小程序这一最新的开发技术;(5)对完成的家政服务平台进行测试。在测试中发现其中的问题,不断的解决问题,完善平台的功能;(6)试发布项目,测试其运行稳定性。

相关开发环境和技术的简介2.1开发环境介绍2.1.1开发环境开发工具:IntelliJIDEA2019.2.3x64、微信开发者工具、VisualStudioCode数据库:MySQL8.0.18数据库操作工具:NavicatPremium12服务器操作工具:Xshell62.1.2开发技术SpringBoot-2.1.9.RELEASEMyBatisPlus-3.2.0Vue-Cli3MySQL-8.0.18Java11NodeJs微信小程序开发2.1.3部署环境技术DockerNginx2.1.4系统配置开发环境配置:Windows10操作系统,16G内存,硬盘1T+256G,CPU2.6GHz部署环境配置:腾讯云服务器(Linux操作系统1核2GB2Mbps)2.2相关技术介绍家政服务平台在设计与开发的工程中,使用了多种技术,包括Java、Vue、SQL等等。本节我将对上述所涉及到的技术做简单的介绍说明。2.2.1Java作为一种广泛使用的语言,Java具有跨平台和面向对象两大特点。他在当前社会中的开发被广泛的运用,是当前十分火爆的开发技术之一。20世纪90年代初,将网络计算的功能扩展到日常生活是一个激进的设想。1991年,Sun一小部分名为“GreenTeam”的工程师认为,下一步的重点是数字消费设备和计算机的结合。在JamesGosling的带领下,这个团队日以继夜地工作,最终创造出了一种能彻底改变世界的编程语言Java。Java语言是基于C++语言进行开发的并进行了改进,也继承了面向对象的技术核心,淘汰了部分过时的容易出错的代码。简言之,Java是一款多平台、高效的、面向对象的开发语言。Java11在2018年9月25日发布,是一个长期支持的版本,带来了很多新功能,比如LocalVar,HttpClient,ListAPI,等等。本次家政服务平台的实现也是基于Java11进行开发的。2.2.2SpringBootSpring是基于Java平台的应该框架,它是完全开源的,并且拥有控制反转这一重大的功能。同时,Web应用也采用Spring作为Java企业版平台构建的技术支持。目前Spring已经在Java世界中被广泛运用,基本上已经替代了JavaBeans模型。SpringBoot是Spring家族中的一部分,其使用配置方式的方法,从而搭建Spring运行环境,用配置替代原始Spring的搭建方式,使得用户可以以最小模块的形式进行SpringBoot项目的开发,而完成这件事情也只需要很少的配置文件就可以完成。其主要功能是:建立独立的Spring应用程式无需像传统Web项目部署WAR包,可以直接使用自带的Tomcat组件自动配置Spring所需要的配置文件为简化Maven配置提供自定义的“入门”项目对象模型(POM)很方便的提供如指标等生产准备,方便的检查和外部化的配置几乎不需要代码生成和XML配置2.2.3MyBatis-PlusMyBatis是一款完全适合于Spring开发的工具,其优点是简化了传统JDBC的方式,只要一行SQL语句就可以对数据库进行操作,同时也可以很方便的生成动态的SQL语句。MyBatis-Plus是由国内开发团队开发的对MyBatis的增强工具,简称为MP。MP对MyBatis没有做出任何的修改,只是在MyBatis的基础上,增加了基本的增删改查的操作、分页、全局拦截插件等等的功能。从而为开发者简化了开发的流程,避免了重复的工作,从而把时间完全留在业务的开发上,提高了开发者的效率。2.2.4VueVue跟Spring一样是一个开发框架,区别是Vue是基于JavaScript的。从下到上是Vue的设计特点。其核心只关注与三层结构中的视图层。Vue基于npm的方式可以非常方便的将第三方代码库融合进来。简言之,Vue是一款十分高效的单页面应用工具引擎。2.2.5微信小程序微信小程序是由腾讯公司设计开发的一种全新的连接用户与服务的方式,其用户量十分庞大,绝大多数中国人已经开始使用微信,而且越来越多外国人也开始接触并使用微信。而微信小程序可以以视作在另外一个操作系统上运行的移动端软件,为用户提供了轻量化的程序,用户无需下载软件就可以体验到传统APP上才有的功能。微信小程序的开发者可以利用微信官方提供应用开发框架和丰富的组件和API服务,开发具有原生APP体验。2.3本章小结本章主要介绍了本次在家政服务平台的开发编码过程中所使用到框架和技术,在系统构建的过程中对所需要使用的技术理论基础进行了充分的研究和分析,为接下来的开发打下坚实的基础,也为我们的系统进一步的开发做了技术上的阐述。

需求分析3.1编写目的家政服务平台的需求分析主要是提出系统应该具备的功能模块,以及我们期望达到的目标。通过对用户需求的理解,需求分析确定了家政服务平台的功能和非功能需求。功能需求指的是系统的主要功能和完成的目的。而提供除了业务之外的功能就是非功能需求了。除此之外,包括其他与功能需求无关的需求则是针对系统的质量特性进行描述的。它包含了相关的标准,需要对系统的质量特性进行描述,包括一些性能要求、安全要求、可维护性要求和其他要求。系统开发的重要内容是系统相关需求分析,是进行系统设计和开发的基础。也为系统后期测试提供了重要依据和基础,因此,系统后期维护的说明文档就是需求分析的目的所在。3.2总体需求经相关调查得知,传统的家政服务平台是雇主前往线下家政服务机构,询问价格后机构会派遣工作人员上门服务,而雇主往往对工作人员的具体情况和服务态度一无所知,因此雇主也只能“踩着石头过河”,有时还会因为这种情况导致最终获得的服务效果不佳,有时甚至导致家庭财物失窃,亲人生命安全受到威胁等严重情况发生。而且,雇主需要花一定的时间到线下找家政机构了解服务情况和价格,即使是比较多家机构,往往也会浪费雇主的时间。综合以上情况,本次设计的家政服务平台的总体需求是提高用户选择家政服务的时间效率,对比家政服务的价格,对家政服务进行监控,节省雇主的宝贵时间,降低服务过程中的危险因素,保证服务质量,利用互联网的优势将家政服务态度和价格透明化公开,给用户带来最大的便利,并带来高质量的选择。3.3功能性需求根据调查得到家政服务平台的具体需求,具体情况如下:前台(微信小程序端):用户注册登录,用户通过微信授权,发起登录,并输入其手机号码,用户信息将在后台保存,然后完成登录。登录成功后,即可进行预约服务等操作。用户对家政服务功能的需求查询:用户可以通过不同的分类,查询相应的家政服务,在家政服务中查询相应的机构信息、评价、价格等,服务筛选也可以通过距离、地点等信息进行。对所感兴趣的服务还可以进行收集,方便查询。用户对家政预约的需求:用户查询了家政服务后,如果需要的话,用户可以通过小程序端进行下单预约,选择了预约联系人和联系方式后,家政公司就会有专人电联用户,确定具体上门时间和注意事项。用户完成订单并做出评价的需要:家政公司服务完成后,用户可以通过微信小程序对家政公司的服务成果、态度、员工等进行评价,并将评分计入家政公司的评分中,在服务细节中公开展示,方便其他用户进行查询。用户学习家庭生活提示的需求:用户可以通过机构或平台发布的文章,学习一些家庭清洁的小技巧,更好的学习家庭生活服务。用户获得优惠的需求:用户可获得优惠券,在下单时减免部分金额,提供部分优惠。后台(Web管理端):管理员登录功能:管理员通过输入用户名、密码、验证码后,后端进行校验,验证通过即可进入管理端,不同的管理员将会拥有不同的权限,从而可以操作不同的功能。家政公司管理功能:平台方可对家政公司进行管理,包括新公司入驻、违规公司封禁等,通过审核公司即可进行操作,在平台发布服务等。家政公司可以在这一职能下增加自己的内部组织,对自己的内部组织进行管理。管理员管理功能:平台方可以通过此功能管理系统管理员,也可以管理家政公司的人员,一旦出现违规情况,将给予封杀并取消该员工的工作资格。家政公司方可以执行诸如员工的添加和删除等操作。订单查询管理功能:家政公司可以在此对相应的订单进行查询,并在此对客户进行联系、服务评估等操作。平台方可跟踪订单情况,保证家政服务公司的服务质量。服务管理功能:家政服务公司可以在这里发布服务或下架服务。通过这一功能,平台方监控家政公司发布的服务是否符合平台运行规则,并及时发现异常并进行处理。分类管理功能:平台方可以通过此功能对微信小程序进行分类管理。文章管理功能:平台方和部分家政公司可以使用此功能发布文章,提供家居清洁等有效指南。小程序用户管理:平台可通过此功能查询已注册用户列表,如有用户恶意操作或违法行为发生,平台可及时进行处理,确保平台正常运行。系统管理功能:平台可以对管理系统的权限、菜单等进行管理,从而可以对整个家庭服务平台进行灵活的管理。优惠券管理:平台方可以管理优惠券的发布,提供一部分优惠活动。数据展示功能:提供平台数据的展示,方便地了解每日的运行情况。

3.4非功能性需求非功能需求是业务之外的需求,非业务需求也决定用户的使用体验、包括了系统总体的稳定性。下面列出了一些更重要的非功能性需求。1.界面美观需求这一需求主要描述了对系统外观的期望,要求系统实现符合规范的外观。家政服务平台应具备简洁、庄重、简约、精致的界面,给人一种专业而又不失精致的体验,也要充分符合家政服务的气氛。对于后台管理来说就需要有专业的感觉了。可参考其他管理学上的设计风格。2.易操作性需求易操作性将使系统的使用变得更加简单,对于家政服务经理来说,可以实现“一见钟情”地使用本系统。与花大量时间和精力熟悉系统操作相比,让家政公司管理人员快速掌握操作系统更好。对于微信小程序用户来说,小程序需要清楚地显示服务、订单、个人信息等内容,以方便用户选择和比较。3.安全性需求安全性是家政服务平台的关键,系统必须具有消除潜在风险的能力,并对风险有一定的承压能力。家政服务平台不仅要保证微信小程序端用户资料的安全性,还要保证后台管理模块家政机构信息和从业人员信息的安全性,防止造成安全事故的发生。3.5本章小结系统开发过程中的需求分析尤为重要,对用户的需求要有全面的了解,对用户存在的问题要有透彻的理解。本章主要介绍了家政服务平台的一些基本情况,这一点在本系统的设计中占有重要地位,本章将为后面的家政服务平台的详细设计提供完整的文档支持。

系统的总体设计4.1系统边界设计图SEQ图\*ARABIC1系统边界设计图家政服务平台的总体边界设计如图1所示,整个家政服务平台分成后台管理平台和前台微信小程序平台两部分,作为第三方,系统管理员拥有整个平台的功能权限,公司管理员作为商户方进入平台,会赋予一部分的系统管理权限和平台管理权限,其公司内部的员工则拥有查看服务和订单的权限,可以对公司的订单业务进行精细化处理。用户则使用微信小程序端进行下单、评价等操作。

4.2系统业务流程4.2.1总体业务流程图图SEQ图\*ARABIC2系统总体业务流程图

4.2.2查看文章流程图图SEQ图\*ARABIC3系统文章业务流程图4.2.3登录流程图图SEQ图\*ARABIC4系统登录业务流程图

4.2.4支付流程图图SEQ图\*ARABIC5系统支付业务流程图

4.3系统数据流图4.3.1顶层数据流图图SEQ图\*ARABIC6系统顶层数据流图4.3.2中层数据流图图SEQ图\*ARABIC7系统中层数据流图

4.3.3底层数据流图(1)底层用户登录数据流图图SEQ图\*ARABIC8系统底层用户登录数据流图(2)底层文章数据流图图SEQ图\*ARABIC9系统底层文章数据流图

(3)底层服务数据流图图SEQ图\*ARABIC10系统底层服务查询数据流图(4)底层订单查询数据流图图SEQ图\*ARABIC11系统底层订单查询数据流图

(5)底层预约服务数据流图图SEQ图\*ARABIC12系统底层预约服务数据流图(6)底层商家数据流图图SEQ图\*ARABIC13系统底层商家信息数据流图

(7)底层优惠券数据流图图SEQ图\*ARABIC14系统底层优惠券数据流图

4.4总体软件实现架构描述4.4.1层次结构图SEQ图\*ARABIC15层次结构图家政平台的软件层次结构如图15所示,用户通过操控UI界面的内容进行系统的管理和小程序的操作,用户点击某一个按钮后,前端请求api接口,api接口调用后端的Controller层是视图控制层,其通过直接调用Service层(业务逻辑层)对业务进行处理,处理过程中如果需要调用到数据,则需要调用Dao层(数据访问层)对数据进行查询。最后通过原路径将数据返回到视图层,视图层将数据封装成Json格式返回到前端,前端则根据后端返回的接口进行页面的渲染,完成整个的数据交互。

4.4.2技术架构图SEQ图\*ARABIC16技术架构图家政平台的技术架构如图16所示,主要采用的是前后端分离模式进行设计,前端使用目前比较流行的Vue框架和微信小程序框架进行设计;后端使用目前比较流行和稳定的SpringBoot和MyBatis框架进行设计,数据库分别使用了传统数据库MySQL和高性能缓冲数据库Redis。这样一来,整个系统前后端分离,可以提高整体运行的性能,也可以方便的进行修改,是当前比较流行的软件框架。4.5系统的开发模式设计本平台的实现主要采用瀑布模式,瀑布模式是家政服务平台实现的开发模式,其核心思想是按工序完成问题,把功能的实现和设计分离开,使用结构化分析的方法,完成软件的开发,并遵循软件生命周期自上而下、相互衔接的顺序。

4.6总体模块结构 图SEQ图\*ARABIC17总体模块结构图

4.7子模块设计家政平台的模块主要由后台系统模块、后台平台模块、后台小程序模块、后台数据模块和微信小程序模块5个模块组成。4.7.1系统管理模块图SEQ图\*ARABIC18系统管理模块示意图4.7.2平台管理模块图SEQ图\*ARABIC19平台管理模块示意图

4.7.3小程序管理模块图SEQ图\*ARABIC20小程序管理模块示意图4.7.4数据模块图SEQ图\*ARABIC21数据模块示意图

4.7.5微信小程序模块图SEQ图\*ARABIC22小程序模块示意图4.8数据库的设计 4.8.1地址表address索引名字段索引类型索引方法注释index_addressIdNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述ididvarchar(32)varchar32NOmobile手机号varchar(11)varchar11YESname联系人varchar(32)varchar32YESprovince省份varchar(10)varchar10YESarea地区varchar(10)varchar10YEScity城市varchar(10)varchar10YESdetail详情varchar(10)varchar10YESis_default是否默认tinyint(1)tinyintNOcreate_by创建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create创建时间datetimedatetimeNOgmt_modified修改时间datetimedatetimeYESis_deleted是否删除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本号int(11)intNO4.8.2文章表article索引名字段索引类型索引方法注释index_articleIdNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述ididvarchar(32)varchar32NOtitle标题varchar(255)varchar255YESauthor作者varchar(64)varchar64YESauthor_avatar_uri作者头像urivarchar(255)varchar255YEScomment_disabled是否可以评论tinyint(1)tinyintYEScontent内容varchar(1024)varchar1024YEScontent_short描述varchar(255)varchar255YESimage_uri图片urivarchar(255)varchar255YESimportance重要程度smallint(6)smallintYESsource_uri源地址varchar(255)varchar255YESappreciate点赞数smallint(255)smallintYESattention点击数smallint(255)smallintYESforward转发数smallint(255)smallintYESstatus状态smallint(6)smallintYEScreate_by创建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create创建时间datetimedatetimeNOgmt_modified修改时间datetimedatetimeYESis_deleted是否删除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本号int(11)intNO

4.8.3文章点赞表article_appreciate索引名字段索引类型索引方法注释idx_articlearticle_idNORMALBTREEidx_useruser_idNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述article_id文章idvarchar(32)varchar32NOuser_id用户idvarchar(32)varchar32NO4.8.4分类表category索引名字段索引类型索引方法注释idx_categoryidNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述ididvarchar(32)varchar32NOcolor颜色varchar(32)varchar32YESicon图标varchar(255)varchar255YESname名称varchar(64)varchar64YEScreate_by创建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create创建时间datetimedatetimeNOgmt_modified修改时间datetimedatetimeYESis_deleted是否删除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本号int(11)intNO4.8.5优惠券表coupon索引名字段索引类型索引方法注释idx_couponidNORMALBTREE

字段列名名称数据类型字段类型长度是否为空描述ididvarchar(32)varchar32NOcolor颜色varchar(256)varchar256YESdetail详情varchar(256)varchar256YESdiscount_value优惠价格decimal(10,2)decimalYESname优惠券名称varchar(64)varchar64YESunit单位varchar(32)varchar32YESuse_limit_type_name使用限制varchar(32)varchar32YESvalidity使用时间datetimedatetimeYEScreate_by创建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create创建时间datetimedatetimeNOgmt_modified修改时间datetimedatetimeYESis_deleted是否删除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本号int(11)intNO4.8.6评论表evaluate索引名字段索引类型索引方法注释idx_evaluateidNORMALBTREEidx_good_idgood_idNORMALBTREEidx_order_idorder_idNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述ididvarchar(32)varchar32NOdept_point公司评分smallint(6)smallintYESdetail详情varchar(1024)varchar1024YESenvironment_point环境评分smallint(6)smallintYESgood_id服务idvarchar(32)varchar32YESorder_id订单idvarchar(32)varchar32YESworker_point员工评分smallint(6)smallintYEScreate_by创建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create创建时间datetimedatetimeNOgmt_modified修改时间datetimedatetimeYESis_deleted是否删除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本号int(11)intNO4.8.7反馈表feedback索引名字段索引类型索引方法注释idx_feedbackidNORMALBTREEidx_order_idorder_idNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述ididvarchar(32)varchar32NOachievement完成情况tinyint(4)tinyintYESfeedback备注varchar(255)varchar255YESnotice通知varchar(255)varchar255YESorder_id订单idvarchar(32)varchar32NOcreate_by创建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create创建时间datetimedatetimeNOgmt_modified修改时间datetimedatetimeYESis_deleted是否删除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本号int(11)intNO4.8.8服务表good索引名字段索引类型索引方法注释idx_goodidNORMALBTREEidx_category_idcategory_idNORMALBTREEidx_dept_iddept_idNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述ididvarchar(32)varchar32NOcategory_id分类idvarchar(32)varchar32YESdept_id公司idvarchar(32)varchar32YESdetail详情varchar(1024)varchar1024YESimage_uri图片连接varchar(255)varchar255YESname服务名varchar(64)varchar64YESprice价格decimal(5,1)decimalYESunit单位varchar(32)varchar32YEScreate_by创建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create创建时间datetimedatetimeNOgmt_modified修改时间datetimedatetimeYESis_deleted是否删除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本号int(11)intNO4.8.9足迹表good_access索引名字段索引类型索引方法注释idx_good_idgood_idNORMALBTREEidx_user_iduser_idNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述good_id服务idvarchar(32)varchar32NOuser_id用户idvarchar(32)varchar32NO4.8.10收藏表good_love索引名字段索引类型索引方法注释idx_good_idgood_idNORMALBTREEidx_user_iduser_idNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述good_id服务idvarchar(32)varchar32NOuser_id用户idvarchar(32)varchar32NO4.8.11轮播图表rotation索引名字段索引类型索引方法注释idx_rotation_ididNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述ididvarchar(32)varchar32NOurl图片urlvarchar(255)varchar255YEScreate_by创建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create创建时间datetimedatetimeNOgmt_modified修改时间datetimedatetimeYESis_deleted是否删除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本号int(11)intNO4.8.12公司&部门表sys_dept索引名字段索引类型索引方法注释idx_deptidNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述ididvarchar(32)varchar32NOaddress地址varchar(255)varchar255YESavatar头像urlvarchar(255)varchar255YESlat纬度decimal(7,4)decimalYES地址计算的纬度lng经度decimal(7,4)decimalYES地址计算经度name部门名称varchar(50)varchar50YESparent_id父idvarchar(32)varchar32NO一级部门为0legal企业法人varchar(50)varchar50YESemail邮箱varchar(50)varchar50YEStel联系电话varchar(20)varchar50YESlicense营业执照varchar(255)varchar255YEScreate_by创建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create创建时间datetimedatetimeNOgmt_modified修改时间datetimedatetimeYESis_deleted是否删除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本号int(11)intNO4.8.13日志表sys_log索引名字段索引类型索引方法注释Idx_logidNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述ididvarchar(32)varchar32NOipIP地址varchar(64)varchar64YESmethod请求方法varchar(200)varchar200YESoperation用户操作varchar(50)varchar50YESparams请求参数varchar(5000)varchar5000YEStime执行时长bigint(20)bigintYES毫秒username用户名varchar(50)varchar50YEScreate_by创建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create创建时间datetimedatetimeNOgmt_modified修改时间datetimedatetimeYESis_deleted是否删除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本号int(11)intNO

4.8.14菜单表sys_menu索引名字段索引类型索引方法注释idx_sys_menu_ididNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述ididvarchar(32)varchar32NOcomponent组件varchar(256)varchar256YEShidden是否隐藏tinyint(1)tinyintYES0否,1是icon图标varchar(32)varchar32YESname名称varchar(32)varchar32YESparent_id父菜单IDvarchar(32)varchar32YES一级菜单为nullpath路径varchar(255)varchar255YESperms授权varchar(500)varchar500YES多个用逗号分隔redirect重定向地址varchar(255)varchar255YEScreate_by创建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create创建时间datetimedatetimeNOgmt_modified修改时间datetimedatetimeYESis_deleted是否删除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本号int(11)intNO4.8.15角色表sys_role索引名字段索引类型索引方法注释idx_sys_role_ididNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述ididvarchar(32)varchar32NOdept_id公司idvarchar(32)varchar32YESremark备注varchar(256)varchar256YESrole_name角色名称varchar(32)varchar32YEScreate_by创建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create创建时间datetimedatetimeNOgmt_modified修改时间datetimedatetimeYESis_deleted是否删除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本号int(11)intNO4.8.16角色菜单表sys_role_menu索引名字段索引类型索引方法注释idx_menu_idmenu_idNORMALBTREEidx_role_idrole_idNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述menu_id菜单idvarchar(32)varchar32NOrole_id角色idvarchar(32)varchar32NO4.8.17管理员表sys_user索引名字段索引类型索引方法注释idx_sys_user_ididNORMALBTREEidx_usernameusernameNORMALBTREEidx_dept_iddept_idNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述ididvarchar(32)varchar32NOavatar头像varchar(100)varchar100YESdept_id公司idvarchar(32)varchar32YESemail邮箱varchar(32)varchar32YESgmt_login上次登录时间datetimedatetimeYESlast_login_ip上次登录ipvarchar(32)varchar32YESmobile联系电话varchar(16)varchar16YESpassword密码varchar(64)varchar64YESusername用户名varchar(32)varchar32NOcreate_by创建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create创建时间datetimedatetimeNOgmt_modified修改时间datetimedatetimeYESis_deleted是否删除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本号int(11)intNO4.8.18用户角色表sys_user_role索引名字段索引类型索引方法注释idx_user_iduser_idNORMALBTREEidx_role_idrole_idNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述user_id用户idvarchar(32)varchar32NOrole_id角色idvarchar(32)varchar32NO4.8.18用户token表sys_user_token索引名字段索引类型索引方法注释idx_tokenTokenUNIQUEBTREEidx_user_iduser_idNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述expire_time过期时间datetimedatetimeYEStokentokenvarchar(100)varchar100NOupdate_time更新时间datetimedatetimeYESuser_id用户idvarchar(100)varchar100NO4.8.19订单表t_order索引名字段索引类型索引方法注释idx_orderidNORMALBTREEidx_dept_iddept_idNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述ididvarchar(32)varchar32NOaddress地址varchar(32)varchar32YEScontact联系人varchar(32)varchar32YESdept_id公司idvarchar(32)varchar32YESdiscount_price优惠价格decimal(5,1)decimalYESgmt_pay支付时间datetimedatetimeYESgood_id服务idvarchar(32)varchar32YESimage_uri服务图片varchar(255)varchar255YESis_comment是否评论tinyint(1)tinyintYES1是0否mobile联系电话varchar(11)varchar11YESname联系人varchar(128)varchar128YESpayment支付方式tinyint(4)tinyintYESprice价格decimal(5,1)decimalYESremark备注varchar(1024)varchar1024YESstatus状态tinyint(4)tinyintYEScreate_by创建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create创建时间datetimedatetimeNOgmt_modified修改时间datetimedatetimeYESis_deleted是否删除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本号int(11)intNO4.8.20用户优惠券表user_coupon索引名字段索引类型索引方法注释idx_user_iduseridNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述coupon_id优惠券idvarchar(32)varchar32NOorder_id订单idvarchar(32)varchar32YESuse_time使用时间datetimedatetimeYESuser_id用户idvarchar(32)varchar32NO4.8.21微信用户表wechat_user索引名字段索引类型索引方法注释idx_wechat_user_ididNORMALBTREEidx_wechat_user_openidopenidNORMALBTREE字段列名名称数据类型字段类型长度是否为空描述ididvarchar(32)varchar32NOavatar_url头像urlvarchar(255)varchar255YEScity国家varchar(32)varchar32YEScountry城市varchar(32)varchar32YESgender性别tinyint(4)tinyintYES0未知1男2女gmt_login上次登录时间datetimedatetimeYESlanguage语言varchar(32)varchar32YESlast_login_ip上次登录ipvarchar(32)varchar32YESmobile手机号varchar(11)varchar11YESnickname昵称varchar(32)varchar32YESopenidopenidvarchar(32)varchar32YESprovince省份varchar(32)varchar32YESsession_keysession_keyvarchar(32)varchar32YESunionidunionidvarchar(32)varchar32YEScreate_by创建人varchar(32)varchar32NOlast_modified_by修改人varchar(32)varchar32YESgmt_create创建时间datetimedatetimeNOgmt_modified修改时间datetimedatetimeYESis_deleted是否删除tinyint(1)tinyintNOsort_no排序int(11)intNOversion版本号int(11)intNO4.9本章小结 本章主要是说明家政服务平台的总体设计,对系统进行总体模块进行划分,大概描述系统开发的总体内容情况,为接下来详细设计奠定基础。系统的详细设计5.1项目结构5.1.1目录结构图SEQ图\*ARABIC23后端目录结构项目使用了Maven进行托管,采用父子包的形式进行搭建,最外层的pom.xml对项目引用的jar包版本进行管理,common包是基本工具类,entity包是实体类,dao包是数据访问层的类,service包是业务处理类,web-api是后台管理系统的前端控制器类,wx-api是微信小程序的前端控制器类。common模块图SEQ图\*ARABIC24commom结构common包中,annotaion是注解的配置类,exception是存放自定义异常的处理类的包,utils是存放工具类的包,xss是存放防攻击类的包,Constant是一些常量类。

web-api模块图SEQ图\*ARABIC25web-api结构web-api模块中,aspect是存放切面类的包,config是存放配置类的包,controller是存放前端控制器类的包,oauth2是存放shiro登录类的包,utils是存放工具类的包,WebApiApplication是SpringBoot项目的启动类。wx-api模块图SEQ图\*ARABIC26wx-api结构wx-api模块中,annotaion和config是存放配置文件的包,utils中是整个项目所需要使用的工具,controller中的类是前端访问的唯一途径。

前端Vue模块图SEQ图\*ARABIC27前端Vue目录结构前端Vue模块中,public是index.html和图标的包,src中,api是存放封装了请求api的包,assets是存放了图片的包,components是存放了一部分公用模块的包,directive和utils是存放了工具类的包,icons是存放了系统图标库的包,layout是存放了布局的包,route是存放了路由的包,store是存放了本地缓存的包,styles是存放了部分样式的包,vendor是存放了excle表格导出使用的工具类的包,views是存放了页面的包,App.vue是项目的根路径,main.js是基本的js类,permission.js是权限管理类,settings.js是设置管理类。微信小程序模块图SEQ图\*ARABIC28微信小程序结构微信小程序模块中,colorui是存放前端样式的基础包,images是静态的图片,pages是全部的小程序页面,utils是所有使用到的工具;app.js、app.json、app.wxss是主文件的包,project.config.json是项目配置文件的包。5.2部件详细设计5.2.1统一结果返回(1)结果类RpublicclassRextendsHashMap<String,Object>{publicR(){put("code",200);}publicstaticRerror(){returnerror(500,"未知异常,请联系管理员");}publicstaticRok(Stringmsg){Rr=newR();r.put("msg",msg);returnr;}}创建类R,继承HashMap,生成error方法和ok方法,提供两个返回结果。5.2.2系统日志注解(2)自定义注解类Log@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceLog{ Stringvalue()default"";}创建@interface类,即注解类Log,使用@Target注解指定在何处写入注释的合法位置,这里使用的是ElementType.METHOD,即方法声明;这里将@Retention的策略设置为RUNTIME,则在项目整体运行的过程中会一直存在Log类,从而全局都可使用。@Document则是说明Log类是可以JavaDoc进行记录的,可以保留文档。在Log类中设置了一个属性value,通过这个熟悉可以设置方法的描述。(3)系统日志切面处理类LogAspect使用Spring的面向切面的编程思想,进行日志的记录,并保存的数据库中。@Pointcut("@annotation(mon.annotation.Log)")publicvoidlogPointCut(){}使用@Pointcut确认其切点的切入方向。@Around("logPointCut()")publicObjectaround(ProceedingJoinPointpoint)throwsThrowable{//开始时间LongbeginTime=System.currentTimeMillis();//执行方法Objectresult=ceed();//执行时长(毫秒)Longtime=System.currentTimeMillis()-beginTime;saveSysLog(point,time);returnresult;}在切点处理方法中,先通过System.currentTimeMillis获取方法开始执行的时间,然后调用ceed继续执行方法,执行结束后通过再次获取当前系统时间,减去起始时间,得到执行时长,然后通过调用saveSysLog方法将日志保存到数据库中。5.2.3自定义异常(1)自定义异常类RRExceptionpublicclassRRExceptionextendsRuntimeException{privateStringmsg;privateintcode=500;RRException是继承了RuntimeExcetion的实现类,其中包括code和msg属性,分别为返回代码和消息。(2)统一异常处理类RRExceptionHandler@RestControllerAdvicepublicclassRRExceptionHandler{创建异常类RRExceptionHandler,使用Spring中的@RestControllerAdvice注解进行配置,设置其全局处理异常类的功能。@ExceptionHandler(RRException.class)publicRhandleRRException(RRExceptione){Rr=newR();r.put("code",e.getCode());r.put("msg",e.getMsg());returnr;}在Spring中,@ExceptionHandler可以全局捕获异常,然后根据自定义进行处理。本类还分别处理DuplicateKeyException(重复数据异常)、AuthorizationException(权限验证失败异常)、NullPointerException(空指针异常)和Exception(其他异常)。

5.2.4获取请求IP(1)IP工具类IPUtilspublicstaticStringgetIpAddr(HttpServletRequestrequest)创建静态方法类getIpAddr,方法参数为HttpServletRequest,使用request.getRemoteAddr()获取请求的IP地址。如果使用了Nginx等反向代理软件,则不能通过request.getRemoteAddr()获取IP地址,因此需要使用request.getHeader("x-forwarded-for")、request.getHeader("Proxy-Client-IP")、request.getHeader("WL-Proxy-Client-IP")、request.getHeader("HTTP_CLIENT_IP")、request.getHeader("HTTP_X_FORWARDED_FOR")获取IP地址。由于多层方向代理使用X-Forwarded-For可能存在多个IP地址,因此如果想获取最开始请求的地址就需要用到ip.substring(0,ip.indexOf(","))来获取第一个有效的IP地址。5.2.5生成Token(1)Token生成类TokenGeneratorpublicstaticStringgenerateValue(){returngenerateValue(UUIDUtils.uuidStr());}创建Token生成类,使用UUID的形式先生成UUID字符串,然后再调用generateValue(Stringparam)方法对UUID字符串进行处理。MessageDigestalgorithm=MessageDigest.getInstance("MD5");algorithm.reset();algorithm.update(param.getBytes());byte[]messageDigest=algorithm.digest();returntoHexString(messageDigest);使用secutity包中的MessageDigest方法对uuid进行处理,然后再对结果进行Hex处理。5.2.6公共实体(1)公共实体类BaseEntity项目数据库中共有8个公共的实体,分别是id、create_by(创建人)、last_modified_by(最后修改人)、gmt_modified(最后修改时间)、gmt_create(创建时间)、sort(排序)、is_deleted(逻辑删除标志)、version(版本号)。创建公共实体类,将其他实体类继承此类,即可获得这8个属性。其中,id是使用由Twitter开源的分布式id生成算法,称之为雪花(SnowFlake)算法,其根据机器码和时间戳等,生成的是全局唯一的long类型的数据id。创建人(createBy)、创建时间(gmtCreate)使用MyBatisPlus提供的注解@TableField(fill=FieldFill.INSERT)进行设置,然后在使用插入语句时,会自动将这两个字段插入到sql语句中,保存到数据库。修改人(lastModifiedBy)、修改时间(gmtModified)与上面描述类似。排序(sortNo)是将数据进行排序。删除标志(isDeleted)是将数据进行逻辑删除,如果该数据以及删除,则将该字段设置为1,在查询时会将这个字段带入查询条件,只查询该字段为0的字段。版本号(version)是给每条数据加上乐观锁,防止数据的误读、脏读,保证数据的安全。5.2.7Shiro权限认证(1)ShiroApacheShiro是一个Java安全框架,市面上还有SpringSecurity等类似的框架。Shiro可以对会话进行安全管理,包括认证和授权等等。(2)OAuth2Filter使用OAuth2Filter对每条请求连接进行拦截过滤,通过请求头中的token属性获取请求的token字符串,从而对用户权限做出校验。@OverrideprotectedbooleanonAccessDenied(ServletRequestservletRequest,ServletResponseservletResponse)throwsException{Stringtoken=getRequestToken((HttpServletRequest)servletRequest);if(StringUtils.isBlank(token)){HttpServletResponsehttpServletResponse=(HttpServletResponse)servletResponse;Stringjson=newGson().toJson(R.error(500,"invalidtoken"));httpServletResponse.getWriter().print(json);returnfalse;}returnexecuteLogin(servletRequest,servletResponse);}如果拿到的token为空,则返回登录失败,如果不为空,则调用executeLogin方法对token进行校验,鉴权。(3)OAuth2Realm@OverrideprotectedAuthorizationInfodoGetAuthorizationInfo(PrincipalCollectionprincipalCollection){SysUsersysUser=(SysUser)principalCollection.getPrimaryPrincipal();StringuserId=sysUser.getId();//获取用户权限列表Set<String>permsSet=shiroService.getUserPermissions(userId);SimpleAuthorizationInfoinfo=newSimpleAuthorizationInfo();info.setStringPermissions(permsSet);returninfo;}该方法会在授权(验证权限)时调用,其主要思想是在Shiro的用户信息类PrincipalCollection中获取用户信息实体,从而获取对应的用户id,通过用户id去数据库中查询用户的权限列表,并将权限列表保存到用户认证信息中。@OverrideprotectedAuthenticationInfodoGetAuthenticationInfo(AuthenticationTokenauthenticationToken)throwsAuthenticationException{StringaccessToken=(String)authenticationToken.getPrincipal();SysUserTokensysUserToken=shiroService.queryByToken(accessToken);if(sysUserToken==null||sysUserToken.getExpireTime().isAfter(LocalDateTime.now())==false){thrownewIncorrectCredentialsException("token失效,请重新登录");}SysUsersysUser=shiroService.queryUser(sysUserToken.getUserId());SimpleAuthenticationInfoinfo=newSimpleAuthenticationInfo(sysUser,accessToken,getName());returninfo;}上述方法会在认证时调用,该方法会从Shiro提供的AuthenticationToken类中获取用户信息,拿到请求的accessToken,通过token去查询对应用户信息,将信息保存到Shiro提供的SimpleAuthenticationInfo类中。(4)OAuth2Token该类实现了AuthenticationToken接口,其中定义了一个属性token,并重写了getPrincipal和getCredentials方法,使其返回token属性。(5)ShiroUtils这个类是自定义的Shiro工具类,定义了方法,可以直接从Shiro的库中拿到如用户id、用户信息、权限等操作。(6)BaseControllerpu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论