版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于SpringBoot的校园物品交易平台的设计与实现目录1绪论 11.1课题研究的背景和意义 11.2课题研究内容 11.3论文组织结构 21.4本章小结 22相关技术介绍 22.1.1Java 22.1.2SpringBoot框架 32.1.3Vue.js 32.1.4MySQL 42.2开发工具 52.3本章小结 53系统分析 63.1可行性分析 63.1.1技术可行性 63.1.2操作可行性 63.1.3经济可行性 63.2功能性分析 63.2.1主要功能模块分析 63.2.2管理员功能分析 113.2.3用户模块分析 123.3非功能性分析 133.3.1稳定性需求 133.3.2安全性需求 143.3.3高并发需求 143.3.4可扩展性需求 143.4本章小结 144系统设计 144.1系统总体设计 144.2系统详细设计 154.2.1用户模块 154.2.2闲置物品模块 164.2.3评论回复模块 174.2.4购买记录模块 184.3数据库设计 194.3.1概念结构设计 194.3.2数据库表设计 214.4本章小结 235系统实现 235.1用户管理功能 245.2商品管理功能 255.3商品评论回复功能 275.4权限控制功能 295.5本章小结 306系统测试 306.1测试目的 306.2测试方法 306.3系统功能模块测试 306.4本章小结 31结束语 32参考文献 33PAGE5绪论课题研究的背景和意义随着我国经济的快速发展,对人才需求的不断扩大,大学生的数量在不断增加,消费水平也在日益提高。而随着学生购买能力的提高,必然促使学生用品更新换代的速度加快,大学生在大学期间也会购买一些闲置物品,尤其在毕业季大学校园每年都会掀起一场二手商品买卖的风潮。由于大学生们毕业离校和宿舍调换,大学校园都会产生许多的闲置物品,又不能及时很好的处理掉,以至于在毕业的时候托运麻烦而扔掉,造成了极大的浪费[1]。国内现有的阿里巴巴旗下的“咸鱼”和腾讯旗下的“转转”等二手商品交易平台又是面向大众的,针对于大学生服务的二手交易平台却少之又少,使得这些二手商品无法得到充分利用。国外的Zaarly是一个移动设备上的关于个人对个人的需求对接平台,Fribi是结合社交的移动二手交易平台,EggDrop是基于地图帮助用户探索身边的二手物品交易的平台,也有Listia这种旧物赠送平台的网站,定位于社区型旧物赠送平台,至于专门针对校园的二手交易网并不多。因此开发一款毕业生物品交易平台是很有必要的。以往每年到毕业季校园内也会有线下的跳蚤市场来处理这些闲置物品,但受天气、校园空间限制、学生时间限制,需要一直在摊位守着,时间比较集中紧迫,收效不大,只有较少的闲置物品能被再次利用,还可能会产生大量的垃圾,无法及时的满足学生的个人需求。大学生具有收入单一,消费多样化,消费观念开放等特点,并且大多数二手物品都是学生自身所需要的,交易的物品具有共性,所以导致了买卖二手物品的需求很高。大学生在大学期间是有需求且持有较为信任的态度去购买一些闲置物品,目前学生大多数通过社交平台、熟人介绍等进行买卖二手物品,因此研究本课题加快二手商品的流转,同时也为那些需要二手商品的同学提供价格低廉、实用的物品,使得毕业季大家能够更加环保、充分的利用资源、减少浪费,可以24小时不受限制的挑选或售卖闲置物品,对毕业季校园二手经济具有非常重要的现实意义[2]。课题研究内容本课题所设计的毕业季物品交易系统,实现对闲置物品的在线交易功能[3],种类包括了电子产品、二手图书、日常用品、衣帽服饰、交通出行及其它闲置物品;点击产品,进入详情页,可以查看产品的详细信息。用户注册后完善个人信息,可以对产品进行评论讨论,也可以与商品售卖者在线沟通,系统会保存两者的聊天记录信息;如果用户对该产品感兴趣,可以点击收藏该商品,在收藏管理界面可以查看用户收藏的所有商品,用户还可以在个人中心中查看订单信息;可以进行闲置物品的发布上架,可以修改商品的信息,也可以下架其在售的闲置物品;系统开发过程中需要考虑用户群体的使用体验,尽量保证用户操作的便捷性,利于上手,界面要简洁明了,体验感要好。本系统中用户的关键性信息要进行加密存储,采用MyBatis中Cache二级缓存来应对可能出现的用户同时大量访问网站时对系统数据库所带来的压力,各个模块功能之间紧密协同配合[4]。论文组织结构本论文分为六个章节来讲解该毕业生物品交易系统,章节结构如下:第一章:本章主要讲解每年大量高校毕业生毕业季所产生大量的闲置物品无法及时处理。分析本课题的背景和意义,以及对课题研究内容的分析。第二章:本章主要介绍了《基于SpringBoot的毕业生物品交易系统》中所使用的相关技术和开发工具,包括SpringBoot架构,Vue等应用技术。第三章:本章主要进行系统的需求性分析,从技术可行性、操作可行性、经济可行性、社会可行性、功能性需求、非功能性需求、面向对象这些方面对系统进行需求分析。第四章:本章主要进行概要设计、详细功能设计、数据库设计三大方面进行系统设计,从概要设计方面对系统进行了总体模块图设计。从用户模块、商品模块、评论回复模块、售出记录模块四大模块进行流程图设计。根据具体功能对数据库进行了设计,包括数据库概念设计和数据表结构设计。第五章:本章主要进行系统实现的部分功能的核心编码实现,从用户管理功能、商品管理功能、售出记录功能、权限控制功能四个功能进行了系统核心编码的实现逻辑,展示了部分功能实现界面。第六章:本章主要对系统的部分功能进行分析测试,对系统的部分功能模块进行黑盒测试。本章小结本章节介绍了每年大量高校毕业生毕业季所产生大量的闲置物品无法及时处理,通过分析国内外现有的平台及对主要处理闲置物品的方式进行了总结,对线上处理毕业季大量的闲置物品的技术服务和前景进行了展望和分析,进一步明确本课题的研究方向和内容。相关技术介绍JavaJava是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程
。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点
。Java可以编写桌面应用程序、Web应用程序[5]、分布式系统和嵌入式系统应用程序等。Java分为三个体系:JavaSE(J2SE)(Java2PlatformStandardEdition,java平台标准版)JavaEE(J2EE)(Java2Platform,EnterpriseEdition,java平台企业版)JavaME(J2ME)(Java2PlatformMicroEdition,java平台微型版)。本课题采用JavaEE[6]的知识体系来完成该Web程序。SpringBoot框架在使用传统的Spring去做JavaEE(JavaEnterpriseEdition)开发中,大量的XML文件存在于项目之中,导致JavaEE项目变得慢慢笨重起来,,繁琐的配置和整合第三方框架的配置,导致了开发和部署效率的降低。SpringBoot并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具[7]。同时它集成了大量常用的第三方库配置,SpringBoot应用中这些第三方库几乎可以是零配置的开箱即用(out-of-the-box),大部分的SpringBoot应用都只需要非常少量的配置代码(基于Java的配置),开发者能够更加专注于业务逻辑。因为SpringBoot是伴随着Spring4.0而生的,boot是引导的意思,也就是它的作用其实就是在于帮助开发者快速的搭建Spring框架,因此SpringBoot继承了Spring优秀的基因,在Spring中开发更为方便快捷。Vue.jsVue.js是一个渐进的JavaScript框架,用于开发交互式Web界面,是用于简化Web开发的著名框架之一。Vue的核心库只关注视图层,并且非常容易学习,也非常容易与其他库或已有项目整合。Vue完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。Vue.js还提供了MVVM数据绑定和一个可组合的组件系统,具有简单、灵活的API,其目标是通过尽可能简单的API实现响应式的数据绑定和可组合的视图组件[8]。Vue.js的特点:(1)轻量级的框架Vue.js能够自动追踪依赖的模板表达式和计算属性,提供MVVM数据绑定和一个可组合的组件系统,具有简单、灵活的API,使读者更加容易理解,能够更快上手。(2)双向数据绑定声明式渲染是数据双向绑定的主要体现,同样也是Vue.js的核心,它允许采用简洁的模板语法将数据声明式渲染整合进DOM。(3)指令Vue.js与页面进行交互,主要就是通过内置指令来完成的,指令的作用是当其表达式的值改变时相应地将某些行为应用到DOM上。(4)组件化组件(Component)是Vue.js最强大的功能之一[9]。组件可以扩展HTML元素,封装可重用的代码。(5)客户端路由Vue-router是Vue.js官方的路由插件,与Vue.js深度集成,用于构建单页面应用。Vue单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来,传统的页面是通过超链接实现页面的切换和跳转的。(6)状态管理状态管理实际就是一个单向的数据流,State驱动View的渲染,而用户对View进行操作产生Action,使State产生变化,从而使View重新渲染,形成一个单独的组件。图2-1Vue的双向数据绑定原理图MySQLMySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库[10]。MySQL是应用最广泛的开源关系数据库,是许多常见网站、应用程序和商业产品使用的主要关系数据存储。MySQL支持多线程、多种数据存储引擎、在线DDL变动等功能。特别是在数据架构上,它还支持动态程序,因此具备很高的灵活性,MySQL数据库适用于各种使用案例,包括任务关键型应用程序、动态网站以及用于软件、硬件和设备的嵌入式数据库。图2-2MySQL架构图开发工具IDEA全称IntelliJIDEA,是Java语言开发的集成环境,IntelliJIDEA在业界被公认为最好的Java开发工具之一,IDEA相对于Eclipse来说最大的优点就是更加智能,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn、github等)、JUnit、CVS整合、代码分析、创新的GUI设计等方面的功能可以说是超常的。拥有更好的项目管理方式,更高的开发效率,强大的整合能力:比如Git、Maven、Spring等支持。IntelliJIDEA是跨平台的,可以适用于Windows,OSX和Linux。本章小结本章节介绍了《基于SpringBoot的毕业生物品交易系统》开发过程中所用到的开发技术及开发工具,对当下流行的SpringBoot、Vue[11]等技术特点进行了大概介绍。系统分析可行性分析在每年大量高校毕业生毕业季所产生大量的闲置物品无法及时处理,现有处理模式具有很大局限性的当下,针对该课题,必须要对在线的毕业生物品交易方式的可行性进行探索,从技术可行性、操作可行性、经济可行性三个方面,来对本课题进行可行性研究。技术可行性本课题系统使用当下流行的SpringBoot架构,前端部分页面使用Thymeleaf模板引擎渲染数据,部分页面使用Vue.js作为页面渲染,JavaScript进行前后端的数据交互,MySQL进行系统数据的存储,实现难度适中,具备完善的技术层次支撑开发该系统。操作可行性 对于互联网几乎普及的当下,上网浏览网页以及网络购物变得非常普遍,用户可以很容易的浏览网站,寻找自己喜欢的商品,用户操作简便,操作可行性较为完善。经济可行性(1)开发阶段:在该阶段只需要适当的人力物力就可以开发完成,相关技术及开发工具是免费使用的,开发成本很低。(2)使用阶段:在使用本系统时会产生一定量的验证码费用,该费用由对应验证码提供商阿里云SMS收费,使用成本较低。综上分析,本系统在开发阶段及使用阶段的成本较低,具有良好的经济可行性。功能性分析主要功能模块分析本毕业生物品交易平台主要分为三种角色,一是普通用户,二是管理员用户,三是超级管理员用户。普通用户可以浏览网站,查看最新商品及自己喜欢的商品,可以对商品进行评价及购买,用户还可以在完善自己的信息后发布商品进行商品的售卖,提供一个既是买方也可以是卖方的平台,用户注册时使用手机号进行注册,忘记密码时或更换手机号时都需要提供短信验证码进行验证。管理员可以对用户进行管理,进行审核用户发布的商品信息,也可以发布系统新闻供用户查看,删除已发布的新闻通知。超级管理员可以修改用户权限,添加新的管理员。购买方还可以收藏感兴趣的商品进行保存,用户购买商品后会进行购买记录的汇总。用户在非登录状态和登录状态拥有很大不同的功能,登录后既可以作为买方也可以成为卖方,登录后可以进行收藏商品、购买商品、发布商品、删除发布的商品、查看消息通知、查看售出记录等功能。管理员主要进行用户发布商品的审核、查看所有用户名单、发布新闻、删除新闻等。超级管理员在可以修改用户的权限,变更其角色,添加管理员等。下面以普通用户,管理员和超级管理员为用例对象,先分析系统总体用例图,通过分析系统总体用例图中各个模块之间的关系,介绍各个模块的主要功能,进而能够更加清晰系统设计开发流程模块功能,再分别以管理员登录用例、新闻用例、管理员商品用例、超级管理员用例、用户商品用例、用户收藏商品用例、用户购买记录用例、用户订单用例八个方面进行用例的参与者、前置条件、基本事件流、异常事件流、后置条件的详细分析。系统总体用例图如图3-1所示:图STYLEREF1\s3–SEQ图\*ARABIC\s11系统总体用例图管理员功能分析系统管理员分为普通管理员和超级管理员,管理员可以对用户发布的闲置物品进行审核,可以选择审核通过或审核不通过,即违规状态,将闲置物品打回给用户重新上传,也可以浏览其它所有的商品信息。超级管理员可以查看所有的用户信息,可以将普通用户设置为管理员,也可以将管理员设置为普通用户,还可以封禁用户。管理员可以管理系统的新闻模块,新闻模块是受管理员操作的,管理员可以在后台发布想发布的新闻内容,新闻中有发布者的信息,确保如果发布不合规的新闻可以找到发布者,而且只能是发布新闻的管理员可以修改新闻信息,首页默认展示最新发布的三条新闻,用户可以在首页浏览这些新闻信息。系统管理员的用例关系设计如图3-2所示:图3-2系统管理员用例图用户模块分析用户初次进行注册后,会跳转到完善信息界面,用户完善个人信息后,可以在个人中心进行如下功能模块:商品模块:发布闲置物品,修改已发布的闲置物品,展示自己已发布的闲置物品,查看待审核的闲置物品、已下架的闲置物品,也可以删除对应的闲置物品,点击可以查看闲置物品的详情信息。发布闲置物品后管理员会进行审核,闲置物品合规的会通过审核,不合规的会被标记为违规闲置物品不允许在系统中展示出来。首页默认分类展示部分闲置物品,用户也可以分类别按价格查找感兴趣的闲置物品。评论回复模块:闲置物品下方提供评论功能,用户在登录状态可以在闲置物品下方进行评论或回复评论。收藏模块:若用户对某个闲置物品感兴趣可以点击收藏按钮进行收藏,在个人中心界面可以查看收藏的闲置物品列表或者取消收藏的闲置物品,点击收藏的闲置物品可以查看闲置物品的详情信息。消息模块:用户发布闲置物品后的审核信息、对用户发布的闲置物品下的评论回复信息、闲置物品售出的信息都会以消息通知的形式发送给用户供用户及时查看相关信息。售出记录模块:系统不提供在线购买功能,双方可以进行线上沟通后线下交易,卖家手动将已售出的闲置物品进行下架,售出信息会保存在售出记录中供用户查看。个人信息模块:用户可以查看自己的个人信息,可以修改个人信息。系统用户的用例关系设计如图3-3所示:图3-3系统用户用例图核心用例描述用户登录网站默认存在一个超级管理员用户,其余的用户都需要进行注册后才能使用,管理员由超级管理员设置,所有用户进行相应操作时都需要进行进行登录。下面以用户登录用例进行分析,用户进入登录界面后输入账号和密码进行登录验证,登录成功后会跳转到平台首页,登录失败后会提示相应的登录失败原因,需重新登录。用户登录的用例描述如表3-1所示:表3-1用户登录用例名称:用户登录用例标识符User_login参与者:网站用户用例说明:用户登录系统前置条件:用户已经注册成功为网站的用户基本事件流:(1)用户打开毕业生物品交易平台的首页(2)用户点击进入登录页面(3)用户输入账号和密码,然后点击登录其他事件流:无异常事件流:如果登录验证失败,则会弹出登录失败的原因后置条件:用户登录成功后会跳转到网站首页,用户可以正常操作其余功能注释:无管理员审核商品网站普通用户发布闲置的物品后需要经过管理员审核通过后才能展示在平台上,以管理员审核商品为例,管理员登录进入管理员界面后查看商品列表,选择待审核的商品,管理员可以查看待审核的商品详情,选择进行通过审核或不通过审核,商品不通过会以违规商品的状态返回给用户的商品状态里。管理员审核商品的用例描述如下表3-2所示:表3-2管理员审核商品用例名称:管理员审核商品用例标识符Admin_review参与者:管理员用例说明:管理员审核商品前置条件:管理员成功登录进管理员界面基本事件流:(1)管理员查看商品列表里的待审核状态的商品(2)管理员查看待审核商品的详情信息(3)管理员选择该商品通过审核或不通过审核其他事件流:无异常事件流:如果管理员操作失败,会弹出操作失败的提醒后置条件:管理员审核通过的商品会展示在平台中,未通过则会打回给用户查看注释:无用户筛选商品网站用户可以在商品清单界面通过各种筛选条件选择商品,登录后还可以筛选只看自己学校商品及看非本校的商品。以用户在商品清单界面筛选商品为例,用户未登录时可以根据商品的价格高低、价格范围、商品类别进行筛选,用户登录后还可以按照区域进行筛选查找商品。用户筛选商品的用例描述如下表3-3所示:表3-3用户筛选商品用例名称:用户筛选商品用例标识符User_screening参与者:普通用户用例说明:网站普通用户筛选商品前置条件:用户登录后处于物品清单界面基本事件流:(1)用户按照物品类别查找商品(2)用户按照物品价格选择进行查找商品(3)用户按照区域查找商品其他事件流:无异常事件流:若查找失败,会弹出系统错误后置条件:展示出按照指定条件查找的商品注释:无用户操作售出记录用户将正常售卖的商品设置为已售后系统会将其信息保存在售出记录中,用户可以查看或者删除售出记录。以用户操作售出记录为例,用户登录后在个人管理界面可以查看售出记录,用户也可以选择删除售出记录。用户操作售出记录的用例描述如下表3-4所示:表3-4用户操作售出记录用例名称:用户操作售出记录用例标识符User_action参与者:网站用户用例说明:用户操作售出记录前置条件:用户成功登录后基本事件流:(1)用户点击进入个人管理界面(2)用户选择售出记录菜单查看售出记录(3)用户可以选择是否删除售出记录其他事件流:无异常事件流:页面弹出提示框“删除失败”后置条件:售出记录列表刷新并显示新的售出记录数据注释:无非功能性分析在一个系统设计中,光光分析功能性分析是不够的,还需要分析系统所需要的非功能性需求分析,以此来更加的完善服务于用户。稳定性需求对于系统的运行,稳定性至关重要,要确保系统能够长期稳定的运行,出现问题也能够及时解决,预留一部分解决方案,防止出现系统崩溃。安全性需求对于一个系统而言,必须考虑系统的安全性,数据库对用户的密码信息都进行了MD5加盐加密,对于系统操作都进行了不同的判断,根据对应的权限来执行对应的操作。高并发需求系统应考虑部分可能存在的高并发情况,对数据库访问密集的业务场景中都使用了缓存来缓解系统的压力[12],来使系统尽量流畅的运行。可扩展性需求随着系统运行时间的增长,用户量会不断的增长,可能会催生新的业务功能,部分系统业务功能会进行改变,因为需要考虑系统的可扩展性需求。本章小结本章节首先从技术可行性、操作可行性、经济可行性、社会可行性进行可行性分析,又从功能性需求分析及非功能性需求分析来进行系统的分析,最后针对系统总体用例图对系统各个用例进行用例分析。系统设计系统总体设计本系统作为一个毕业生物品交易平台的web网站,采用B/S架构,系统主要分为表现层、业务逻辑层、数据访问层。表现层作为与用户交互的界面,要考虑美观性和易操作性,业务逻辑层与表现层使用Ajax进行异步数据交互,主要通过json数据格式进行数据的交互,根据数据返回值的不同展示不同的页面效果,业务逻辑相关功能模块主要分为商品模块、评论回复模块、权限控制模块、用户模块、售出记录模块、在线聊天模块。其中用户模块以手机号为唯一真实数据凭证,包括用户的注册、登录、角色控制等,角色控制由角色id及权限id控制,通过查找用户的角色信息,再根据角色信息查找拥有的相应权限,商品模块主要为发布商品、审核商品、修改商品、售卖商品、分类查看商品等,根据角色不同用户拥有不同的商品操作权限,评论回复模块在商品详情界面下方给用户提供评论和回复的功能,点击评论及回复中用户的头像信息可以跳转到用户个人主页中,用户可以在个人中心购买记录中查看或删除自己购买过商品的购买记录,订单管理展示的是用户所售出商品的订单信息,也有其余模块相互之间配合完善整体的系统架构。系统整体功能架构图如图4-1所示:图4-1系统整体功能模块图系统详细设计用户模块用户模块主要包括注册时的信息绑定,用户个人信息的查看及修改,注册后默认角色为普通用户,可以进行商品的购买及售卖,查看新闻信息及进行聊天,但是变更为管理员后可以审核用户发布的商品,发布新闻等操作,系统默认内置一个超级管理员,可以更改用户的角色信息等功能。此处以用户角色授权为例,默认注册后为普通用户,会将用户角色id存入数据库中,角色信息对应的权限信息不可更改,通过赋予用户不同的角色拥有不同的权限,用户进行登录时,会先判断该账户是否存在,如果账号未注册则跳转到注册操作,注册后进行完善个人信息,若为已注册用户则进行登录操作,登录后通过Shiro进行角色授权操作,查询用户对应的角色后返回登录授权结果,前端通过角色信息可以提供给用户不同的操作界面,以此达到根据用户角色不同提供不同的系统权限功能。具体过程如流程图4-2所示。图4-2用户角色授权流程图闲置物品模块用户模块主要包括闲置物品的购买、发布、修改、审核等功能,不同角色可以执行不同的功能,闲置物品详情界面展示了闲置物品的所有信息,包括图片及商品简介等,用户可以收藏闲置物品信息,也可以对闲置物品进行评论及回复,供他人了解更多的闲置物品信息,可以购买闲置物品或者点击感兴趣发起聊天功能与卖家沟通。系统首页默认按分类展示一定数量的商品,首页下面也会展示一定量最新发布闲置物品,在闲置物品清单界面可以按照类别及价格排序等查看不同种类的所有闲置物品信息,用户可以查看其详情信息。此处以发布审核闲置物品为例,用户登录后获取到角色权限,普通用户可以在个人中心的发布闲置物品页面发布闲置物品,填写闲置物品的标题、简介、售价、类别等,上传闲置物品的照片和视频即可发布闲置物品,闲置物品发布后进入审核阶段,管理员审核通过后即可在系统闲置物品中显示,审核不通过则不能出现在系统闲置物品里。具体过程如流程图4-3所示。图4-3发布审核商品流程图评论回复模块在闲置物品详情界面下方,提供用户评论回复功能,感兴趣或者已购买的用户可以对闲置物品进行评论及回复。用户进行评论回复前会判断用户是否已登录,如果未登录则提醒前往登录后再评论回复,登陆后用户可以在闲置物品详情下进行评论,评论数据库保存评论者id、闲置物品发布者id、评论内容、评论时间等信息,评论闲置物品后会推送通知给闲置物品拥有者,评论后会刷新闲置物品下方评论,评论显示用户头像信息,点击头像可以跳转到个人主页,可以对评论进行回复,回复会保存闲置物品id、被回复者id、回复者id、闲置物品发布者id、回复内容、回复时间等信息,评论和回复根据评论id进行数据关联,删除评论后也会删除评论对应下所有的回复。此处以用户进行评论为例,用户在登录状态下进行评论,系统提示评论成功后会给闲置物品发布者发布一条评论通知,提醒闲置物品发布者查看,下面是流程图分析,具体过程如流程图4-4所示。图4-4发布评论流程图购买记录模块购买记录模块是保存用户已经购买过的商品信息,用户可以随时查看自己购买过的商品或删除自己购买过商品的记录。此处以添加购买记录为例,用户在浏览商品详情信息时可以选购自己感兴趣的商品添加至购物车,此时用户选购的商品信息及选购的数量、价格等保存在购物车中,用户在购物车选择要购买的商品开始进行结算,用户结算成功后系统会判断是否购买成功,当用户购买成功后系统将购买的商品信息,包括商品名、商品单价、商品数量、订单金额、购买时间、购买者的ID等存入购买记录中,如用户购买失败则会不保存用户的购买记录。具体过程如流程图4-5所示。图4-5添加购买记录流程图数据库设计数据库是系统中最重要的部分之一,设计好完善合理的数据库能够对系统的运行起到重要的作用,从数据库的需求分析,完善各模块之间数据库信息,到数据库各表之间的联系建立,针对某些表可能访问压力大需要进行缓存数据等都要进行分析[13]。概念结构设计概念模型的最常用模型是实体-联系模型(Entity-RelationshipModel,简称E-R模型),E-R模型中,数据的结构被表示为“实体-联系”图。(E-R图)图中有三个主要的元素类型:实体集,属性和联系。E-R图遵循三条设计原则:相对原则、一致原则、简单原则。数据库概念设计是程序开发中必不可少的重要环节,下面从用户实体、商品实体、商品评论实体、商品评论回复实体进行概要设计。(1)用户信息实体属性表:用户实体类包括的属性有用户id、真实姓名、用户密码、手机号、用户头像、地区、注册时间、用户状态。用户实体类属性图如图4-6所示。图4-6用户实体属性图(2)商品实体属性表:商品实体类包括的属性有商品id、商品名、商品描述、视频、商品数量、售价、是否包邮、供货地址、发布时间、修改时间、下架时间、商品状态、浏览量、商品类别、简介图、用户id。商品实体类属性图如图4-7所示。图4-7商品实体属性图(3)商品评论实体属性表:商品评论实体类包括的属性有评论id、商品id、评论者id、商品发布者id、评论内容、评论时间、评论状态。商品评论实体类属性图如图4-8所示。图4-8商品评论实体属性图(4)商品评论回复实体属性表:商品评论回复实体类包括的属性有回复id、评论id、商品id、被回复用户id、商品发布者id、回复内容、回复者id、回复时间、回复状态。商品评论回复实体类属性图如图4-9所示。图4-9商品评论回复实体属性图数据库表设计(1)用户信息表用户信息表是用来存储用户个人信息的,包括用户id(gyf_userid)、真实姓名(gyf_username)、用户密码(gyf_password)、手机号(gyf_mobilephone)、用户头像(gyf_uimage)、地区(gyf_userarea)、注册时间(gyf_createtime)、用户状态(gyf_userstatus),其中用户id是根据系统时间+随机数组成的19位ID数,确保id不会重复,用户密码采用MD5加盐的方式进行加密处理,但用户信息表不作为登录使用。用户信息表结构如表4-1所示:表4-1用户信息表(User_info)字段名字段类型字段长度能否为空是否主键字段描述gyf_useridvarchar64否是用户idgyf_usernamevarchar255是否用户真实姓名gyf_passwordvarchar255否否用户密码gyf_mobilephonevarchar255否否用户手机号gyf_uimagevarchar255是否用户头像gyf_userareavarchar255是否用户地区gyf_userstatusint10否否1正常0封号gyf_createtimetimestamp0否否用户注册时间(2)商品信息表商品信息表是用来存储发布的商品信息,包括商品id(gyf_commid)、商品名称(gyf_commname)、商品描述(gyf_commdesc)、视频(gyf_videourl)、商品数量(gyf_commnumber)、售价(gyf_price)、是否包邮(gyf_freeship)、供货地址(gyf_suppaddress)、发布时间(gyf_createtime)、修改时间(gyf_updatetime)、下架时间(gyf_endtime)、商品状态(gyf_commstatus)、浏览量(gyf_rednumber)、商品类别(gyf_category)、简介图(gyf_image)、用户id(gyf_userid)。商品信息表结构如表4-2所示:表4-2商品信息表(commodity)字段名字段类型字段长度能否为空是否主键字段描述gyf_commidvarchar64否是商品的idgyf_commnamevarchar255否否商品的名称gyf_commdescvarchar255否否商品的简介gyf_videourlvarchar255否否商品视频地址gyf_commnumberint10否否商品的数量gyf_pricedecimal55否否商品的售价gyf_freeshipvarchar64否否是否包邮gyf_suppaddressvarchar255否否供货地址gyf_createtimetimestamp0否否发布时间gyf_updatetimetimestamp0否否修改时间gyf_endtimetimestamp0否否下架时间gyf_commstatusint10否否商品的状态gyf_rednumberint10是否商品的浏览量gyf_categoryvarchar255否否商品的类别gyf_imagevarchar255否否简介图地址gyf_useridvarchar64否否用户id(3)商品评论信息表商品评论信息表是用来存储已注册用户对商品的评论信息,用户登录后才能够进行商品的评论,包括评论id(gyf_cid)、商品id(gyf_commid)、评论者id(gyf_cuserid)、商品发布者id(gyf_spuserid)、评论内容(gyf_content)、评论时间(gyf_commtime)、评论状态(gyf_commstatus)。其中id均为19位随机ID数,评论时间默认系统当前时间,商品评论信息表的结构如表4-3所示:表4-3商品评论信息表(comment)字段名字段类型字段长度能否为空是否主键字段描述gyf_cidvarchar64否是评论idgyf_commidvarchar64否否商品的idgyf_cuseridvarchar64否否评论者的idgyf_spuseridvarchar64否否商品发布者idgyf_contentvarchar255否否用户评论内容gyf_commtimetimestamp0否否评论时间gyf_commstatusint10否否评论状态(4)商品评论回复信息表商品评论回复信息表是用来存储已注册用户对商品的评论回复的信息,具体包括回复id(gyf_rid)、评论id(gyf_cid)、商品id(gyf_commid)、被回复用户id(gyf_cuserid)、商品发布者id(gyf_spuserid)、回复内容(gyf_recontent)、回复者id(gyf_ruserid)、回复时间(gyf_replytime)、回复状态(gyf_repstatus)。商品评论信息表的结构如表4-4所示:表4-4商品评论回复信息表(reply)字段名字段类型字段长度能否为空是否主键字段描述gyf_ridvarchar64否是回复idgyf_cidvarchar64否否评论idgyf_commidvarchar64否否商品idgyf_cuseridvarchar64否否被回复用户idgyf_spuseridvarchar64否否商品发布者idgyf_recontentvarchar255否否回复内容gyf_ruseridvarchar64否否回复者idgyf_replytimetimestamp0否否回复时间gyf_repstatusint10否否回复状态本章小结本章首先从系统概要设计进行分析,创建了系统总功能模块图,又对具体功能的模块进行了描述及流程图的设计,最后根据系统功能,对数据库进行了概念设计,创建E-R图,对数据库关键表进行了具体的表结构设计,对系统设计中的模块设计及数据库设计进行了进一步完善。系统实现毕业生物品交易系统中功能模块过多,因此以关键的用户模块、商品模块、评论模块、权限控制模块进行系统实现的介绍。用户管理功能系统用户分为普通用户、管理员、超级管理员三种用户,本系统内置一名超级管理员,管理员是由超级管理员设置的,普通用户是注册网站的用户;为了方便用户注册使用该网站,注册时使用手机号进行注册,用户需要输入获取的短信验证码进行注册,用户的手机号具有唯一性,注册时会判断该手机号是否已被注册,若忘记密码可以通过手机号发送短信验证码重置密码,数据库存储用户密码是会进行MD5加盐加密进行存储,用户可以在个人中心中修改自己的个人信息。系统管理员可以查看所有用户列表,超级管理员可以设置用户的角色。这里给出用户注册、重置密码、更换手机号时发送短信验证码模块的代码,部分核心代码如下:@ResponseBody
@PostMapping("/user/sendresetpwd")
publicResultVosendresetpwd(HttpServletRequestrequest)throwsIOException{
JSONObjectjson=JsonReader.receivePost(request);
finalStringmobilephone=json.getString("mobilephone");
Integertype=json.getInt("type");
Loginlogin=newLogin();
if(type!=1){
returnnewResultVo(false,StatusCode.ACCESSERROR,"违规操作");
}
if(!JustPhone.justPhone(mobilephone)){//判断输入的手机号格式是否正确
returnnewResultVo(false,StatusCode.ERROR,"请输入正确格式的手机号");
}
//查询手机号是否存在
login.setMobilephone(mobilephone);
LoginuserIsExist=loginService.userLogin(login);
if(StringUtils.isEmpty(userIsExist)){//用户账号不存在
returnnewResultVo(false,StatusCode.LOGINERROR,"该用户不存在");
}
Stringcode=GetCode.phonecode();
Integerresult=newSmsUtil().SendMsg(mobilephone,code,type);//发送验证码
if(result==1){//发送成功
phonecodemap2.put(mobilephone,code);//放入map集合进行对比
/*
finalTimertimer=newTimer();
timer.schedule(newTimerTask(){
@Override
publicvoidrun(){
phonecodemap2.remove(phoneNum);
timer.cancel();
}
},5*60*1000);
*/
//执行定时任务
ScheduledExecutorServiceexecutorService=newScheduledThreadPoolExecutor(1,
newBasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon(true).build());
executorService.scheduleAtFixedRate(newRunnable(){
@Override
publicvoidrun(){
phonecodemap2.remove(mobilephone);
((ScheduledThreadPoolExecutor)executorService).remove(this::run);
}
},5*60*1000,5*60*1000,TimeUnit.HOURS);
returnnewResultVo(true,StatusCode.SMS,"验证码发送成功");
}elseif(result==2){
returnnewResultVo(false,StatusCode.ERROR,"请输入正确格式的手机号");
}
returnnewResultVo(false,StatusCode.REMOTEERROR,"验证码发送失败");
}用户个人中心中个人信息包括基本资料、修改密码、更换手机号三个功能,其中更换手机号需要输入要更换的手机号,获取短信验证码确认更换,更换成功后会提醒更换成功,个人中心更换手机号界面如图5-1所示:图5-1个人中心更换手机号图商品管理功能商品模块包括用户发布商品,用户修改商品、用户删除已发布的商品、管理员审核发布的商品等功能,系统主页分类展示最新的8条商品,店铺清单界面包含了所有的商品信息,这里以商品发布过程中保存商品的图片和视频信息为例。用户发布商品时需要上传商品的一张主图、三张附图,上传拍摄的商品视频,填写发布的商品信息时若觉得图片不合适可以随时删除图片重新上传,上传的商品视频可以进行播放预览,系统将商品主图及视频存储在商品表中,将附属图存储在商品详情图片表中,部分核心代码如下:/**
*上传视频和主图
*/
@PostMapping("/relgoods/video")
@ResponseBody
publicJSONObjectrelgoodsvideo(@RequestParam(value="file",required=false)MultipartFilefile)throwsIOException{
JSONObjectres=newJSONObject();
JSONObjectresUrl=newJSONObject();
Stringfilename=UUID.randomUUID().toString().replaceAll("-","");
Stringext=FilenameUtils.getExtension(file.getOriginalFilename());
Stringfilenames=filename+"."+ext;
Stringpathname="D:\\campusshops\\file\\"+filenames;
file.transferTo(newFile(pathname));
resUrl.put("src","/pic/"+filenames);
res.put("msg","");
res.put("code",0);
res.put("data",resUrl);
returnres;
}
/**
*上传其他图片
*/
@PostMapping(value="/relgoods/images")
@ResponseBody
publicJSONObjectrelgoodsimages(@RequestParam(value="file",required=false)MultipartFile[]file)throwsIOException{
JSONObjectres=newJSONObject();
JSONObjectresUrl=newJSONObject();
List<String>imageurls=newArrayList<>();
for(MultipartFilefiles:file){
Stringfilename=UUID.randomUUID().toString().replaceAll("-","");
Stringext=FilenameUtils.getExtension(files.getOriginalFilename());
Stringfilenames=filename+"."+ext;
Stringpathname="D:\\campusshops\\file\\"+filenames;
files.transferTo(newFile(pathname));
imageurls.add("/pic/"+filenames);
res.put("msg","");
res.put("code",0);
}
resUrl.put("src",imageurls);
res.put("data",resUrl);
returnres;
}个人中心商品管理界面如图5-2所示:图5-2商品管理图商品评论回复功能商品评论模块在商品详情界面下方提供用户对商品的评论及回复供其他用户参考,用户填写评论信息内容后点击提交,前端获取商品ID、商品发布者ID、评论内容传入后端系统,后端从session中获取登录用户的ID信息,将这些信息存入评论回复表中,部分核心代码如下:/**
*评论
*1.前端传入:商品id(commid)、商品发布者id(spuserid)、评论内容(content)
*2.session获取:评论者id(cuserid)
*3.过滤评论内容后,插入评论
*/
@ResponseBody
@PostMapping("/comment/insert")
publicResultVoinsertcomment(@RequestBodyCommentcomment,HttpSessionsession){
Stringcuserid=(String)session.getAttribute("userid");
Stringcontent=comment.getContent();
if(StringUtils.isEmpty(cuserid)){
returnnewResultVo(false,StatusCode.ACCESSERROR,"请登录后再评论");
}
content=content.replace("<","<");
content=content.replace(">",">");
content=content.replace("'","\"");
comment.setCid(KeyUtil.genUniqueKey()).setCuserid(cuserid).setContent(content);
/**插入评论*/
Integeri=commentService.insertComment(comment);
if(i==1){
returnnewResultVo(true,StatusCode.OK,"评论成功");
}
returnnewResultVo(false,StatusCode.ERROR,"评论失败");
}在商品详情界面下方展示该商品所有的评论和回复信息,展示用户的头像信息、用户评论回复的日期、用户评论回复的内容,部分核心代码如下:/**
*查询商品下的评论和回复
**/
@ResponseBody
@GetMapping("/comment/query/{commid}")
publicResultVoqueryCommentReply(@PathVariable("commid")Stringcommid){
/**查询评论*/
List<Comment>commentsList=commentService.queryComments(commid);
for(Commentcomment:commentsList){
/**查询对应评论下的回复*/
List<Reply>repliesList=replyService.queryReply(comment.getCid());
for(Replyreply:repliesList){
/**查询回复者的昵称和头像信息*/
UserInforuser=userInfoService.queryPartInfo(reply.getRuserid());
/**查询被回复者的昵称信息*/
UserInfocuser=userInfoService.queryPartInfo(reply.getCuserid());
/**添加回复中涉及到的用户昵称及头像信息*/
reply.setRusername(ruser.getUsername()).setRuimage(ruser.getUimage()).setCusername(cuser.getUsername());
}
/**查询评论者的昵称和头像信息*/
UserInfouserInfo=userInfoService.queryPartInfo(comment.getCuserid());
/**添加评论下的回复及评论者昵称和头像信息*/
comment.setReplyLsit(repliesList).setCusername(userInfo.getUsername()).setCuimage(userInfo.getUimage());
}
returnnewResultVo(true,StatusCode.OK,"查询评论回复成功",commentsList);
}商品详情下方评论回复界面,用户点击商品进入商品详情界面会自动刷新并加载商品的评论及回复,商品评论回复界面如图5-2所示:图5-3商品评论回复图权限控制功能系统中分为普通用户、管理员、超级管理员三种角色,系统部分界面通过Thymeleaf集成Shiro[14]进行访问控制,拥有对应权限的角色可以访问对应的界面,这些都需要权限模块进行权限控制,权限控制采用Shiro进行控制,用户登录时先执行shiro判断逻辑,判断用户手机号和密码进行登录,登录后执行授权逻辑,给用户进行角色授权,部分核心代码如下:/**
*执行授权逻辑
*只要访问加上授权的资源都会调用改方法
**/
@Override
protectedAuthorizationInfodoGetAuthorizationInfo(PrincipalCollectionprincipalCollection){
//给资源进行授权
SimpleAuthorizationInfoinfo=newSimpleAuthorizationInfo();
//到数据库查询当前用户的授权的字符串
Subjectsubject=SecurityUtils.getSubject();
UserInfouserInfo=(UserInfo)subject.getPrincipal();
IntegerpermId=userRoleService.LookUserRoleId(userInfo.getUserid());
List<String>userPerms=userPermsService.LookPermsByUserid(permId);
info.addStringPermissions(userPerms);
returninfo;
}
/**
*执行认证逻辑
*只要使用subject.login(token)就会调用该方法
**/
@Override
protectedAuthenticationInfodoGetAuthenticationInfo(AuthenticationTokenauthenticationToken)throwsAuthenticationException{
//编写shiro判断逻辑,判断用户手机号和密码
//1、判断手机号
UsernamePasswordTokentoken=(UsernamePasswordToken)authenticationToken;
Loginlogin=newLogin();
login.setMobilephone(token.getUsername());
LoginLogin1=loginService.userLogin(login);
if(Login1==null){
//用户不存在
returnnull;//shiro底层抛出UnknownAccountException
}
//2、判断密码三个参数:1、返回给subject.login(token);方法的参数2、数据库中的密码3、shiro的名字
returnnewSimpleAuthenticationInfo(Login1,Login1.getPassword(),"");
}本章小结本章节对系统部分功能进行编码实现,主要对用户管理模块、商品管理模块、商品评论回复模块、权限控制模块四个模块进行部分功能的核心编码的实现,展示了部分模块运行界面。系统测试测试目的系统测试是开发项目中必不可少的一项功能,系统的功能在根据需求进行开发后,必须经过系统测试,测试通过满足需求并
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 蚌埠经济技术职业学院《会计实训》2025-2026学年期末试卷
- 长春医学高等专科学校《管理逻辑学》2025-2026学年期末试卷
- 皖北卫生职业学院《进出口贸易实务》2025-2026学年期末试卷
- 钒铁浸滤工岗前标准化考核试卷含答案
- 文化传媒公司工作总结报告
- 重冶备料工岗前评优考核试卷含答案
- 桥梁工风险评估强化考核试卷含答案
- 机械手表装配工安全风险知识考核试卷含答案
- 投资测绘未来-践行创新引领行业发展
- 衰弱老年病人的识别与护理全周期管理指南
- 2025年郑州巩义市金桥融资担保有限公司公开招聘3名笔试历年备考题库附带答案详解
- 2026年宣传部遴选公务员笔试试题含答案(宣传文化岗)
- 三一集团在线测试题库
- 四年级下册语文,第1单元和第2单元的小测试的卷子
- 中建集团海外市场开拓战略规划
- GB/T 338-2025工业用甲醇
- 财政部人社部就业补助资金管理办法2026版解读
- 吸塑厂生产安全管理制度
- 2025年医学影像复试题目及答案
- 无人机应用于施工巡检方案
- 洁净区化学品安全培训
评论
0/150
提交评论