铜陵建设行业培训学校网站,wordpress 显示文章固定链接,绿色资源网,主机网站TOC
springboot219基于SpringBoot的网络海鲜市场系统的设计与实现
绪论
1.1 选题背景
当人们发现随着生产规模的不断扩大#xff0c;人为计算方面才是一个巨大的短板#xff0c;所以发明了各种计算设备#xff0c;从结绳记事#xff0c;到算筹#xff0c;以及算盘TOC
springboot219基于SpringBoot的网络海鲜市场系统的设计与实现
绪论
1.1 选题背景
当人们发现随着生产规模的不断扩大人为计算方面才是一个巨大的短板所以发明了各种计算设备从结绳记事到算筹以及算盘到如今的计算机都是在无法满足生产的前提下出现的。随着计算机的发展又出现了互联网技术。到现在为止互联网已经发展了几十年了在几十年的时间里就已经风靡世界。各行各业都发现了计算机的好处计算机刚开始是军用的后来在民用行业开始使用到互联网时代各种行业信息如井喷一般充斥着互联网信息产生和传播的速度不断的提高。针对互联网的优点结合互联网对传统行业信息处理技术进行升级是非常有必要的。本课题对于海鲜商品销售信息的管理方面开发一个网络海鲜市场系统在信息管理方面不至于混乱也能降低数据的出错率数据安全方面也有了保证该系统还有其他的优点比如优化信息处理流程降低信息泄露风险减少资金投入产出更高让管理人员的工作更有效率等。所以说网络海鲜市场系统是目前不可缺的对使用者相当的重要。
1.2 选题意义
如今的年代已经是步入信息社会了不仅信息更新速度频繁信息量也大在信息时代必须有相应的处理信息的方法如果还采用以前的结绳记事或者笔写纸记不仅是信息录入效率上赶不上节奏在信息检索的速度上更是让人无法承受。幸而当今社会上计算机技术发展的相当不错可以通过计算机在信息处理上面实现自动化或者半自动化的作业采用计算机技术能有效的提高信息录入以及信息检索的效率社会上相同行业之间本身就是效率高的淘汰效率低的既然采用计算机来替代手工记录必然是效率更高稳定性更强成本更低等诸多优点。针对于海鲜商品销售信息管理开发一个网络海鲜市场系统不仅可以实现现代化的信息管理也更符合现代化信息管理规范。
在实际的使用效果中网络海鲜市场系统的意义如下
第一点网络海鲜市场系统的出现就是为了提高工作人员的效率能够在规定时间完成工作任务。
第二点操作页面符合人体工程美学符合日常人为操作习惯使用友好。
第三点区别于传统用纸张记录提高了信息化水平。
第四点在信息处理方面极大的降低了人工处理成本。
1.3 研究内容
本文对系统的描述过程将按照绪论系统开发技术分析设计实现测试等环节进行展开介绍。
绪论本节内容主要展示研究该系统的背景和意义。
系统开发技术本节内容主要展示该系统开发中需要使用的技术和搭建的开发环境。
系统分析本节内容主要就是分析系统包括性能功能上的数据分析也包括可行性分析等内容。
系统设计本节内容主要就是根据系统分析的结果进行设计主要包括功能和数据库的设计。
系统实现本节内容主要就是通过程序编码对系统的功能进行实现同时也对需要介绍的功能进行界面运行效果的展示。
系统测试本节内容主要就是对系统的功能实现部分进行检测发现系统的错误并及时纠正让系统能够保证运行无误。
2 系统开发技术
对系统的开发需要做好准备工作其中安装开发的工具以及学习开发中需要运用的技术都是需要提前进行的本节内容就对开发中运用的工具还有技术进行阐述。
2.1 MySQL数据库
本设计用到的数据库就是MySQL数据库之所以用到这个数据库的原因很多。首先从满足功能需求上面来讲MySQL是符合的其次从学习程度来讲MySQL相比其他数据库不管是从安装还是使用上面来讲都比较简单最重要的是学习起来相当便捷比较容易入手再次MySQL数据库对电脑要求不高不管是什么样的电脑都可以安装MySQL数据库并且并不会对电脑性能造成过多的影响。所以就平常普普通通的电脑就可以作为开发用的电脑不需要进行额外的电脑升级。虽然自从MySQL数据库被Oracle数据库收购后有了一些闭源的风险但是使用者还是很多MySQL数据库目前的开发人员已经超过五百人了对数据库开发者来讲已经是一个很大的开发团队了。MySQL在使用上面来讲普通的增删改查操作已经可以满足大部分业务需求像一些数据导出导入以及一些函数都可以满足一些不同的需求最重要的是MySQL数据库可以创建索引可以大大的提高数据的查询效率当然物极必反如果因为索引好用而滥用索引弄得比数据库表还要多这样会造成MySQL数据库更新表数据时候的运行效率。总而言之MySQL数据库在本次设计的使用上是完全符合使用要求的。
2.2 IDEA简介
IDEA的诞生在Java集成开发工具行业正所谓平地起雷瞬间震动了整个Java开发行业。真的是每个人用过的都说好。IDEA之所以相比于其他比如MyEclipse或者Eclipse之类的Java开发工具来讲比较好原因首先在于设计方面。IDEA采用了所谓的人体工程学设计原理让使用IDEA的人员用了就忘记不了。软件打开首先要设置主题可以选择常规的白色或者暗色系列长时间的白色或者长时间的暗色会让开发人员的眼睛疲劳加重首先从这个细节就让程序开发人员备受青睐让程序员看着舒服然后再对一些常用性插件进行归类让程序的开发注重于提升生产效率而不是一味的让开发者找各种插件有时候插件之间的版本还会存在不兼容IDEA就把兼容的插件双手呈现如此贴心的IDEA怎么能让人不喜爱。所以选择IDEA用来开发本项目就理所当然的了。
2.3 Spring Boot框架
Spring是一个很好的框架但是发展到现在在使用上面已经诟病不断需要配置的越来越多配置大于开发让程序员用更多的精力去配置Spring有点本末倒置了。Spring Boot框架是为了解决Spring框架的缺点而生Spring框架好用是好用但是配置起来相当的繁琐Spring Boot则让简化了很多配置过程让开发变得更有趣也更有效率并且学过Spring框架的开发人员很容易理解Spring Boot框架没有用过框架的人员学习Spring Boot框架的速度也很快的Spring Boot得到了Java开发者的一致好评。
2.4 Vue框架
Vue框架的开发者是一个中国人区别于其他框架的最核心的概念就是渐进式框架Vue的出现让网页前端的开发变成了一种纯前端职业不需要在考虑后台数据类型以及业务逻辑只需要进行数据绑定即可大大的减少了前端开发工程师的学习难度。Vue是当前世界上最火的一种前段框架学习成本比较低只需要熟悉最基本的网页知识就可以理解相关知识并且有很好的免费教程进行学习有各个国家语言的教程尤其是因为是中国人开发的框架让中国的高级程序开发人员做了汉语教程。Vue框架发展之初就是高于IE8版本的所以说只要是当前的主流浏览器都支持Vue框架如果是很旧的那种电脑是不支持的必须安装支持HTML5的浏览器才可以访问用Vue发布的站点。
3 系统分析
对于网络海鲜市场系统开发设计到的流程有分析系统的功能设计系统的结构设计数据库编码以及测试其中在系统分析中所做的工作包括功能的确定性能的分析等。
3.1 可行性研究
网络海鲜市场系统开发实现分析需要从不同的角度来进行分析可行性比如从时间角度经济角度甚至操作角度。从不同的角度分析可行性会让网络海鲜市场系统开发具体化进而达到辩证开发的正确性。
3.1.1 经济可行性
从经济方面分析是第一要素没有经济的支持任何项目都如水中捞月无法实现。实现网络海鲜市场系统开发过程不需要额外的经济条件用本人现有的计算机就可以实现这方面不需要额外的支出。
3.1.2 时间可行性
网络海鲜市场系统设计主要作为毕业设计在题目确定之后答辩之前使用的项目对不同的开发进度上面都有时间的要求总不至于答辩完成后才能实现功能这个肯定不行所以从时间上来分析项目的工作量发现是可行的符合正常开发时间。
3.1.3 操作可行性
操作必须符合正常人的思维模式市面上有很多符合要求的程序正在使用中可以借鉴其他程序的操作流程变成符合本设计的操作流程在操作上面进行无缝衔接让使用者操作过程中不会感到迷茫。
从上面的角度来分析后续工作可以继续进展。
3.2 系统性能分析
性能分析是软件开发过程中必不可少的一个环节主要是为了降低软件在使用的过程中的容错率。通常来讲分析软件系统的性能一般从以下几个方面进行分析。
3.2.1 系统的安全性
系统开发出来就是让正常使用的那么在如今的互联网时代首先考虑的就是安全性的问题。如果系统的安全性不够那么使用价值就会降低。如果出现使用过程中丢失数据那么用户就不再信赖所以系统的安全性是第一要位只有安全性存在了才能考虑使用的问题总不至于今天用户注册明天用户账号泄露这些都是不友好的。所以账号一般在数据库里存储会通过MD5进行加密这样关键数据加密可以保证系统的安全性。
3.2.2 系统的易用性
安全性分析处理完毕才考虑易用性。一个软件设计得符合操作规范符合正常人类的理解逻辑那么在使用上面就会很舒服如果违背了这条原则安全性再高的软件也是设计失败的毕竟软件开发出来就是让人使用的这一点尤为重要。
3.2.3 系统的健壮性
系统设计易用不代表没有规则那么系统设计使用方面必须健壮必须符合软件处理逻辑。比如设计一个价格类的输入框用户需要输入价格那么可以设定输入框最多两位小数的纯数字输入如果用户不小心输入了其他字符那么就会友好的提示让用户修改正确只有输入符合规范的数据才能进行提交并且存储到数据库里。系统的健壮性就是这样越是规范越是健壮有助于用户理解还有助于程序使用。
3.3 系统流程分析
系统设计不是胡乱的设计必须符合软件设计思想具体的流程参考下图。系统设计的前期就是做各种分析功能的设计数据库的设计等等一切都设计好了逻辑上没有问题符合设计流程和设计规范才可以继续编码环节编码只是实现设计的一个环节而已。 图3.1系统开发流程图
用户是一切应用的基础只要牵扯到用户那么肯定需要用户进行注册只有这样才能让注册的用户进行使用。如果用户没有注册只能算是游客那么只能访问一些大众用户可以浏览的信息如果需要用户操作的部分是不允许访问的这样能极大的保证用户的权利。用户注册流程用下面的图来表示主要是先判断用户名只有用户名能用了才可以进行后面的信息注册。 图3.2 注册流程图
当需要用户登录的时候肯定是要验证的只有验证通过的用户才可以进行下一步操作用户登录成功代表着用户模块的功能对登录用户进行了开放。流程就是如下面的图所示。 图3.3 登录流程图
3.4 系统功能分析
在对设计的总体要求理解了之后就要把要求给具体化也就是功能化要尽量的把每个功能模块和模块之前的关系理清楚必须符合正常人的行为逻辑才可以并且尽量研究同类型的项目这样能避免走弯路最终才能得到设计的具体功能。
网络海鲜市场系统把操作该系统的用户群分为两类即管理员用户。
管理员对于网络海鲜市场系统操作的功能包括对商品资讯用户信息商品信息等进行增删改查同时可以回复用户对商品的评价以及管理商品订单和论坛帖子。其用例图如图3.4所示 图3.4 管理员用例图
用户对于网络海鲜市场系统操作的功能包括在前台购买商品管理收货地址管理购买的商品信息查看商品资讯管理购物车等。其用例图如图3.5所示 图3.5 用户用例图
4 系统设计
系统在设计的过程中必然要遵循一定的原则才可以胡乱设计是不可取的。首先用户在使用过程中能够直观感受到功能操作的便利性符合正常思维逻辑的操作这才是系统好用的一个开端给使用者第一印象就是这个系统设计的相当不错。
4.1 系统设计原则
系统遵循设计原则进行开发会有很多可以预料到的好处只要遵循了设计原则那么开发出来的系统必然是有质量保证的。
首先第一条原则就是安全性原则程序必须设定角色管理不同的角色有不同的功能模块不同的角色登录都需要输入相对应的账号和密码否则不允许进行操作相对应的权限。每个用户登录只能修改自己的密码不需要对别的账号进行密码或者其他资料的修改否则就违背了安全性原则的设定。
其次第二条原则就是易用性原则符合安全性只是功能的符合不代表操作就符合所以要设定易用性原则。易用性原则就是规定程序符合操作流程正常人的思维定向为基础在不违背程序运行逻辑定义的情况下必须使用简单操作规范让每个用户使用起来都能看到页面就能感知功能模块的作用短时间的就能使用程序达到易用效果。
再次第三条原则就是实用性原则实用性代表着花里胡哨的功能必须抛弃尽量符合数据处理的简洁性不仅需要这样进行设定还需要有预知性系统后期可能会出现的功能模块尽量要解耦与程序设定要模块化体现这样才能达到扩展性。
第四条原则就是准确性原则准确性原则的唯一定义就是准确包含数据输入格式的准确数据处理的准确以及数据存储的准确。程序里面关于数据准确才有存在的意义如果一堆不相干的数据存在是没有任何用处的甚至会产生各种问题所以必须要保证数据的准确性。
第五条原则是易维护原则易维护代表着程序运行必须是可控的状态如果不可控出现各种问题那么所有的工作都是空谈。程序开发中对于各种程序判定异常必须有统一的处理模式异常是程序开发中不可避免的但是可以对出现的异常进行抛出有助于程序异常处理的复盘只要每个异常都能定位准确那么代表程序设计是趋于完美的维护起来会更加的方便只要有助于程序维护的都必须给予支持。
4.2 功能模块设计
对管理员具体功能的设计结果将以图4.1所示的管理员功能结构图来进行体现。管理员对于网络海鲜市场系统操作的功能包括对商品资讯用户信息商品信息等进行增删改查同时可以回复用户对商品的评价以及管理商品订单和论坛帖子。 图4.1 管理员功能结构图
对用户具体功能的设计结果将以图4.2所示的用户功能结构图来进行体现。用户对于网络海鲜市场系统操作的功能包括在前台购买商品管理收货地址管理购买的商品信息查看商品资讯管理购物车等。 图4.2 用户功能结构图
4.3 数据库设计
用户通过系统的功能操作来进行数据交互包括数据的添加数据的更新数据的删除数据的查询等基本功能操作表面上虽然是操作系统界面提供的功能但是实际上系统的这些数据是在数据库当中进行访问与操作的。目前市场上可供选择的存储数据的数据库有很多除了简单版的Access之外还有SQL ServerDB2InformixMySQL等关系型数据库可供选择由于关系型数据库具有固定的表结构以及对数据一致性要求比较强所以相比没有固定表结构以及具有灵活的数据格式的非关系型数据库而言在程序配套数据库的选择中关系型数据库的使用率更高。本系统选择MySQL来存放数据其相关理论以及技术在经过了很长时间的发展之后变得非常成熟各大网络平台都公开分享其开发源码而且其对计算机的配置要求很低不需要过多内存进行安装很符合本系统对于数据库的选择要求。
4.3.1 数据库E-R图
本节需要对系统中存放在数据库中的数据进行充分分析对数据的实体实体特征联系等进行确定然后通过概念模型的表示方法即E-R图进行表达在E-R图绘制工具中选择椭圆菱形框矩形等形状表达实体属性实体间联系实体这些信息使用实线段将这些形状进行连接即可。初步完成E-R图之后需要进行检查及时进行有误数据的更改删除实体间存在的冗余联系删除E-R图中冗余的数据最终要展示一个内容准确的E-R图。
1商品包括的属性有商品照片商品库存商品原价等。其属性图如下。 图4.4 商品实体属性图
2商品订单包括的属性有购买数量订单类型支付类型等。其属性图如下。 图4.5 商品订单实体属性图
3管理员包括的属性有用户名角色等。其属性图如下。 图4.6 管理员实体属性图
4用户包括的属性有用户头像性别电子邮箱等。其属性图如下。 图4.7 用户实体属性图
5设计的各实体间关系E-R图如下。 图4.8 实体间关系E-R图
4.3.2 数据库表结构
在指定的数据库里面对数据表进行创建命名然后设计各个数据表的存储结构需要对该数据库的操作非常熟悉并且还需要学习并掌握一定的数据表设计方面的知识比如数据命名作为系统的开发人员为了避免程序运行产生乱码现象以及为了确保系统的正常运行在对数据表进行命名时一般都是采用英文名称同时在对数据表的字段进行编辑时也是采用英文的方式进行为了方便今后对数据表的设计内容进行更改或查看对一些比较重要的字段都会进行中文备注或者是使用中文进行字段描述。设计期间也需要对各个字段选择合适的数据类型以及设置匹配的取值范围当一张数据表设计完成之后还要对该表的主键进行标注就是为了确保该数据表的唯一性与独立性。
表4.1 收货地址表
字段注释类型空id (主键)主键int(20)否yonghu_id创建用户int(20)否address_name收货人varchar(200)否address_phone电话varchar(200)否address_dizhi地址varchar(200)否isdefault_types是否默认地址int(11)否insert_time添加时间timestamp否update_time修改时间timestamp否create_time创建时间timestamp否
表4.2 购物车表
字段注释类型空id (主键)主键int(11)否yonghu_id所属用户int(11)是haixian_id商品int(11)是buy_number购买数量int(11)是create_time添加时间timestamp是update_time更新时间timestamp是insert_time创建时间timestamp是
表4.3 论坛表
字段注释类型空id (主键)主键int(11)否forum_name帖子标题varchar(200)是yonghu_id用户int(11)是users_id管理员int(11)是forum_content发布内容text是super_ids父idint(11)是forum_state_types帖子状态int(11)是insert_time发帖时间timestamp是update_time修改时间timestamp是create_time创建时间timestamp是
表4.4 商品表
字段注释类型空id (主键)主键int(11)否haixian_name商品名称varchar(200)是haixian_photo商品照片varchar(200)是haixian_video视频演示varchar(200)是haixian_types商品类型int(11)是haixian_kucun_number商品库存int(11)是haixian_old_money商品原价decimal(10,2)是haixian_new_money现价decimal(10,2)是haixian_clicknum点击次数int(11)是shangxia_types是否上架int(11)是haixian_delete逻辑删除int(11)是haixian_content商品简介text是create_time创建时间timestamp是
表4.5 商品评价表
字段注释类型空id (主键)主键int(11)否haixian_id商品int(11)是yonghu_id用户int(11)是haixian_commentback_text评价内容text是insert_time评价时间timestamp是reply_text回复内容text是update_time回复时间timestamp是create_time创建时间timestamp是
表4.6 商品订单表
字段注释类型空id (主键)主键int(11)否haixian_order_uuid_number订单号varchar(200)是address_id收货地址int(11)是haixian_id商品int(11)是yonghu_id用户int(11)是buy_number购买数量int(11)是haixian_order_true_price实付价格decimal(10,2)是haixian_order_types订单类型int(11)是haixian_order_courier_name快递公司varchar(200)是haixian_order_courier_number快递单号varchar(200)是haixian_order_payment_types支付类型int(11)是insert_time订单创建时间timestamp是create_time创建时间timestamp是
表4.7 商品资讯表
字段注释类型空id (主键)主键int(11)否news_name资讯标题varchar(200)是news_types资讯类型int(11)是news_photo资讯图片varchar(200)是insert_time添加时间timestamp是news_content资讯详情text是create_time创建时间timestamp是
表4.8 管理员表
字段注释类型空id (主键)主键bigint(20)否username用户名varchar(100)否password密码varchar(100)否role角色varchar(100)是addtime新增时间timestamp否
表4.9 用户表
字段注释类型空id (主键)主键int(11)否username账户varchar(200)是password密码varchar(200)是yonghu_name用户姓名varchar(200)是yonghu_phone用户手机号varchar(200)是yonghu_id_number用户身份证号varchar(200)是yonghu_photo用户头像varchar(200)是sex_types性别int(11)是yonghu_email电子邮箱varchar(200)是new_money余额decimal(10,2)是create_time创建时间timestamp是 5 系统实现
下面主要是通过功能实现界面截图的形式并且运用文字来描述功能实现界面的内容。
5.1 管理员功能实现
5.1.1 论坛管理
该功能主要用于实现对论坛帖子基本信息的管理论坛管理界面的运行效果见图5.1。在此界面管理员不仅需要跟踪论坛帖子比如查看论坛帖子的回复删除论坛帖子的回复信息等修改论坛帖子的内容删除需要删除的论坛帖子信息等。 图5.1 论坛管理界面
5.1.2 商品管理
该功能主要用于实现对商品信息基本信息的管理商品管理界面的运行效果见图5.2。在此界面对商品的类型商品原价商品库存商品名称等信息都需要管理员负责添加和修改同时还需要对商品的库存进行管理比如增加商品的库存或者是对商品库存进行减少以及对销量不好的商品进行下架对新的商品进行上架等操作。 图5.2 商品管理界面
5.1.3 商品评价管理
该功能主要用于实现对商品评价基本信息的管理商品评价管理界面的运行效果见图5.3。在此界面商品的评价内容以及评价用户和评价的商品等信息都能让管理员查看同时管理员也能对评价商品的用户进行回复。 图5.3 商品评价管理界面
5.1.4 商品订单管理
该功能主要用于实现对商品订单基本信息的管理商品订单管理界面的运行效果见图5.4。在此界面管理员主要处理已经销售的商品信息即商品订单信息管理员需要对用户刚刚支付的商品订单进行及时发货以及对各个商品订单的更多的详细信息进行认真查看。 图5.4 商品订单管理界面
5.1.5 商品资讯管理
该功能主要用于实现对商品资讯基本信息的管理商品资讯管理界面的运行效果见图5.5。在此界面商品资讯的内容以及图片等信息都是管理员负责登记的信息也包括后期对商品资讯信息的针对性修改和删除等都是管理员负责的内容。 图5.5 商品资讯管理界面
5.2 用户功能实现
5.2.1 商品信息
商品信息界面的运行效果见图5.6。在此界面用户可以查看商品信息界面展示的商品相关视频以及通过对商品的相关介绍信息来了解商品用户如果有购买的需求可以通过立即购买功能立即下单。 图5.6 商品信息界面
5.2.2 确认下单
确认下单界面的运行效果见图5.7。在此界面用户不仅需要确认收货地址是否正确还需要确认需要购买的商品的数量以及商品信息是否正确最后查看实付金额信息然后进行下单。 图5.7 确认下单界面
5.2.3 商品订单
商品订单界面的运行效果见图5.8。在此界面展示的信息都是用户购买商品之后产生的信息用户不仅可以查看信息还可以根据自身实际情况对商品订单进行相应操作包括退款或评价等。 图5.8 商品订单界面
5.2.4 购物车
购物车界面的运行效果见图5.9。在此界面用户可以统一处理购物车里面的商品信息比如修改各个商品的购买数量可以增加购买数量也能减少购买数量或者是清理一些不需要购买的商品信息最后查看支付金额然后统一下单。 图5.9 购物车界面
5.2.5 在线论坛
在线论坛界面的运行效果见图5.10。在此界面用户对在线论坛展示的帖子进行查看每个论坛帖子都允许用户查看后提交评论信息。在在线论坛的界面用户点击右上角的发帖链接即可发布自己的帖子。 图5.10 在线论坛界面
系统
CartController.java package com.controller;import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;/*** 购物车* 后端接口* author* email
*/
RestController
Controller
RequestMapping(/cart)
public class CartController {private static final Logger logger LoggerFactory.getLogger(CartController.class);Autowiredprivate CartService cartService;Autowiredprivate TokenService tokenService;Autowiredprivate DictionaryService dictionaryService;//级联表serviceAutowiredprivate HaixianService haixianService;Autowiredprivate YonghuService yonghuService;/*** 后端列表*/RequestMapping(/page)public R page(RequestParam MapString, Object params, HttpServletRequest request){logger.debug(page方法:,,Controller:{},,params:{},this.getClass().getName(),JSONObject.toJSONString(params));String role String.valueOf(request.getSession().getAttribute(role));if(false)return R.error(511,永不会进入);else if(用户.equals(role))params.put(yonghuId,request.getSession().getAttribute(userId));if(params.get(orderBy)null || params.get(orderBy)){params.put(orderBy,id);}PageUtils page cartService.queryPage(params);//字典表数据转换ListCartView list (ListCartView)page.getList();for(CartView c:list){//修改对应字典表字段dictionaryService.dictionaryConvert(c, request);}return R.ok().put(data, page);}/*** 后端详情*/RequestMapping(/info/{id})public R info(PathVariable(id) Long id, HttpServletRequest request){logger.debug(info方法:,,Controller:{},,id:{},this.getClass().getName(),id);CartEntity cart cartService.selectById(id);if(cart !null){//entity转viewCartView view new CartView();BeanUtils.copyProperties( cart , view );//把实体数据重构到view中//级联表HaixianEntity haixian haixianService.selectById(cart.getHaixianId());if(haixian ! null){BeanUtils.copyProperties( haixian , view ,new String[]{ id, createTime, insertTime, updateTime});//把级联的数据添加到view中,并排除id和创建时间字段view.setHaixianId(haixian.getId());}//级联表YonghuEntity yonghu yonghuService.selectById(cart.getYonghuId());if(yonghu ! null){BeanUtils.copyProperties( yonghu , view ,new String[]{ id, createTime, insertTime, updateTime});//把级联的数据添加到view中,并排除id和创建时间字段view.setYonghuId(yonghu.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put(data, view);}else {return R.error(511,查不到数据);}}/*** 后端保存*/RequestMapping(/save)public R save(RequestBody CartEntity cart, HttpServletRequest request){logger.debug(save方法:,,Controller:{},,cart:{},this.getClass().getName(),cart.toString());String role String.valueOf(request.getSession().getAttribute(role));if(false)return R.error(511,永远不会进入);else if(用户.equals(role))cart.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute(userId))));WrapperCartEntity queryWrapper new EntityWrapperCartEntity().eq(yonghu_id, cart.getYonghuId()).eq(haixian_id, cart.getHaixianId()).eq(buy_number, cart.getBuyNumber());logger.info(sql语句:queryWrapper.getSqlSegment());CartEntity cartEntity cartService.selectOne(queryWrapper);if(cartEntitynull){cart.setCreateTime(new Date());cart.setInsertTime(new Date());cartService.insert(cart);return R.ok();}else {return R.error(511,商品已添加到购物车);}}/*** 后端修改*/RequestMapping(/update)public R update(RequestBody CartEntity cart, HttpServletRequest request){logger.debug(update方法:,,Controller:{},,cart:{},this.getClass().getName(),cart.toString());String role String.valueOf(request.getSession().getAttribute(role));
// if(false)
// return R.error(511,永远不会进入);
// else if(用户.equals(role))
// cart.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute(userId))));//根据字段查询是否有相同数据WrapperCartEntity queryWrapper new EntityWrapperCartEntity().notIn(id,cart.getId()).andNew().eq(yonghu_id, cart.getYonghuId()).eq(haixian_id, cart.getHaixianId()).eq(buy_number, cart.getBuyNumber());logger.info(sql语句:queryWrapper.getSqlSegment());CartEntity cartEntity cartService.selectOne(queryWrapper);cart.setUpdateTime(new Date());if(cartEntitynull){cartService.updateById(cart);//根据id更新return R.ok();}else {return R.error(511,表中有相同数据);}}/*** 删除*/RequestMapping(/delete)public R delete(RequestBody Integer[] ids){logger.debug(delete:,,Controller:{},,ids:{},this.getClass().getName(),ids.toString());cartService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 批量上传*/RequestMapping(/batchInsert)public R save( String fileName, HttpServletRequest request){logger.debug(batchInsert方法:,,Controller:{},,fileName:{},this.getClass().getName(),fileName);Integer yonghuId Integer.valueOf(String.valueOf(request.getSession().getAttribute(userId)));SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);try {ListCartEntity cartList new ArrayList();//上传的东西MapString, ListString seachFields new HashMap();//要查询的字段Date date new Date();int lastIndexOf fileName.lastIndexOf(.);if(lastIndexOf -1){return R.error(511,该文件没有后缀);}else{String suffix fileName.substring(lastIndexOf);if(!.xls.equals(suffix)){return R.error(511,只支持后缀为xls的excel文件);}else{URL resource this.getClass().getClassLoader().getResource(static/upload/ fileName);//获取文件路径File file new File(resource.getFile());if(!file.exists()){return R.error(511,找不到上传文件请联系管理员);}else{ListListString dataList PoiUtil.poiImport(file.getPath());//读取xls文件dataList.remove(0);//删除第一行因为第一行是提示for(ListString data:dataList){//循环CartEntity cartEntity new CartEntity();
// cartEntity.setYonghuId(Integer.valueOf(data.get(0))); //所属用户 要改的
// cartEntity.setHaixianId(Integer.valueOf(data.get(0))); //商品 要改的
// cartEntity.setBuyNumber(Integer.valueOf(data.get(0))); //购买数量 要改的
// cartEntity.setCreateTime(date);//时间
// cartEntity.setUpdateTime(sdf.parse(data.get(0))); //更新时间 要改的
// cartEntity.setInsertTime(date);//时间cartList.add(cartEntity);//把要查询是否重复的字段放入map中}//查询是否重复cartService.insertBatch(cartList);return R.ok();}}}}catch (Exception e){e.printStackTrace();return R.error(511,批量插入数据异常请联系管理员);}}/*** 前端列表*/IgnoreAuthRequestMapping(/list)public R list(RequestParam MapString, Object params, HttpServletRequest request){logger.debug(list方法:,,Controller:{},,params:{},this.getClass().getName(),JSONObject.toJSONString(params));// 没有指定排序字段就默认id倒序if(StringUtil.isEmpty(String.valueOf(params.get(orderBy)))){params.put(orderBy,id);}PageUtils page cartService.queryPage(params);//字典表数据转换ListCartView list (ListCartView)page.getList();for(CartView c:list)dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段return R.ok().put(data, page);}/*** 前端详情*/RequestMapping(/detail/{id})public R detail(PathVariable(id) Long id, HttpServletRequest request){logger.debug(detail方法:,,Controller:{},,id:{},this.getClass().getName(),id);CartEntity cart cartService.selectById(id);if(cart !null){//entity转viewCartView view new CartView();BeanUtils.copyProperties( cart , view );//把实体数据重构到view中//级联表HaixianEntity haixian haixianService.selectById(cart.getHaixianId());if(haixian ! null){BeanUtils.copyProperties( haixian , view ,new String[]{ id, createDate});//把级联的数据添加到view中,并排除id和创建时间字段view.setHaixianId(haixian.getId());}//级联表YonghuEntity yonghu yonghuService.selectById(cart.getYonghuId());if(yonghu ! null){BeanUtils.copyProperties( yonghu , view ,new String[]{ id, createDate});//把级联的数据添加到view中,并排除id和创建时间字段view.setYonghuId(yonghu.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put(data, view);}else {return R.error(511,查不到数据);}}/*** 前端保存*/RequestMapping(/add)public R add(RequestBody CartEntity cart, HttpServletRequest request){logger.debug(add方法:,,Controller:{},,cart:{},this.getClass().getName(),cart.toString());WrapperCartEntity queryWrapper new EntityWrapperCartEntity().eq(yonghu_id, cart.getYonghuId()).eq(haixian_id, cart.getHaixianId()).eq(buy_number, cart.getBuyNumber());logger.info(sql语句:queryWrapper.getSqlSegment());CartEntity cartEntity cartService.selectOne(queryWrapper);if(cartEntitynull){cart.setCreateTime(new Date());cart.setInsertTime(new Date());cartService.insert(cart);return R.ok();}else {return R.error(511,表中有相同数据);}}}
ConfigController.java package com.controller;import java.util.Arrays;
import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.service.ConfigService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;/*** 登录相关*/
RequestMapping(config)
RestController
public class ConfigController{Autowiredprivate ConfigService configService;/*** 列表*/RequestMapping(/page)public R page(RequestParam MapString, Object params,ConfigEntity config){EntityWrapperConfigEntity ew new EntityWrapperConfigEntity();PageUtils page configService.queryPage(params);return R.ok().put(data, page);}/*** 列表*/IgnoreAuthRequestMapping(/list)public R list(RequestParam MapString, Object params,ConfigEntity config){EntityWrapperConfigEntity ew new EntityWrapperConfigEntity();PageUtils page configService.queryPage(params);return R.ok().put(data, page);}/*** 信息*/RequestMapping(/info/{id})public R info(PathVariable(id) String id){ConfigEntity config configService.selectById(id);return R.ok().put(data, config);}/*** 详情*/IgnoreAuthRequestMapping(/detail/{id})public R detail(PathVariable(id) String id){ConfigEntity config configService.selectById(id);return R.ok().put(data, config);}/*** 根据name获取信息*/RequestMapping(/info)public R infoByName(RequestParam String name){ConfigEntity config configService.selectOne(new EntityWrapperConfigEntity().eq(name, faceFile));return R.ok().put(data, config);}/*** 保存*/PostMapping(/save)public R save(RequestBody ConfigEntity config){
// ValidatorUtils.validateEntity(config);configService.insert(config);return R.ok();}/*** 修改*/RequestMapping(/update)public R update(RequestBody ConfigEntity config){
// ValidatorUtils.validateEntity(config);configService.updateById(config);//全部更新return R.ok();}/*** 删除*/RequestMapping(/delete)public R delete(RequestBody Long[] ids){configService.deleteBatchIds(Arrays.asList(ids));return R.ok();}
}
StringUtil.java
package com.utils;public class StringUtil {public static boolean isEmpty(String s){if(snull || s.equals() || s.equals(null)){return true;}return false;}public static boolean isNotEmpty(String s){return !StringUtil.isEmpty(s);}
}
IndexAsideStatic.vue
templateel-aside classindex-aside height100vh width210pxdiv classindex-aside-inner menulist styleheight:100%div v-foritem in menuList :keyitem.roleName v-ifroleitem.roleName classmenulist-item styleheight:100%;broder:0;background-color:#F5F6FAdiv classmenulistImg stylebackgroundColor:#ff0000;padding:25px 0 v-iffalse menulistStyle verticalel-image v-ifhttp://codegen.caihongy.cn/20201021/cc7d45d9c8164b58b18351764eba9be1.jpg srchttp://codegen.caihongy.cn/20201021/cc7d45d9c8164b58b18351764eba9be1.jpg fitcover //divel-menu modevertical :unique-openedtrue classel-menu-demo styleheight:100%; background-color#F5F6FA text-color#4D5259 active-text-color#33CABB default-active0el-menu-item index(0).toString() :stylemenulistBorderBottom clickmenuHandler()i v-iftrue classel-icon-s-home /首页/el-menu-itemel-submenu :index(1).toString() :stylemenulistBorderBottomtemplate slottitlei v-iftrue classel-icon-user-solid /span个人中心/span/templateel-menu-item :index(1-1).toString() clickmenuHandler(updatePassword)修改密码/el-menu-itemel-menu-item :index(1-2).toString() clickmenuHandler(center)个人信息/el-menu-item/el-submenuel-submenu :stylemenulistBorderBottom v-for (menu,index) in item.backMenu :keymenu.menu :index(index2).toString()template slottitlei v-iftrue :classicons[index] /span{{ menu.menu }}/span/templateel-menu-item v-for (child,sort) in menu.child :keysort :index((index2)-sort).toString() clickmenuHandler(child.tableName){{ child.menu }}/el-menu-item/el-submenu/el-menu/div/div/el-aside
/template
script
import menu from /utils/menu
export default {data() {return {menuList: [],dynamicMenuRoutes: [],role: ,icons: [el-icon-s-cooperation,el-icon-s-order,el-icon-s-platform,el-icon-s-fold,el-icon-s-unfold,el-icon-s-operation,el-icon-s-promotion,el-icon-s-release,el-icon-s-ticket,el-icon-s-management,el-icon-s-open,el-icon-s-shop,el-icon-s-marketing,el-icon-s-flag,el-icon-s-comment,el-icon-s-finance,el-icon-s-claim,el-icon-s-custom,el-icon-s-opportunity,el-icon-s-data,el-icon-s-check,el-icon-s-grid,el-icon-menu,el-icon-chat-dot-square,el-icon-message,el-icon-postcard,el-icon-position,el-icon-microphone,el-icon-close-notification,el-icon-bangzhu,el-icon-time,el-icon-odometer,el-icon-crop,el-icon-aim,el-icon-switch-button,el-icon-full-screen,el-icon-copy-document,el-icon-mic,el-icon-stopwatch,],menulistStyle: vertical,menulistBorderBottom: {},}},mounted() {const menus menu.list()this.menuList menusthis.role this.$storage.get(role)},created(){setTimeout((){this.menulistStyleChange()},10)this.icons.sort((){return (0.5-Math.random())})this.lineBorder()},methods: {lineBorder() {let style verticallet w 1pxlet s solidlet c #cccif(style vertical) {this.menulistBorderBottom {borderBottomWidth: w,borderBottomStyle: s,borderBottomColor: c}} else {this.menulistBorderBottom {borderRightWidth: w,borderRightStyle: s,borderRightColor: c}}},menuHandler(name) {let router this.$routername /namerouter.push(name).catch(err err)},// 菜单setMenulistHoverColor(){let that thisthis.$nextTick((){document.querySelectorAll(.menulist .el-menu-item).forEach(el{el.addEventListener(mouseenter, e {e.stopPropagation()el.style.backgroundColor rgba(245, 247, 250, 1)})el.addEventListener(mouseleave, e {e.stopPropagation()el.style.backgroundColor #F5F6FA})el.addEventListener(focus, e {e.stopPropagation()el.style.backgroundColor rgba(245, 247, 250, 1)})})document.querySelectorAll(.menulist .el-submenu__title).forEach(el{el.addEventListener(mouseenter, e {e.stopPropagation()el.style.backgroundColor rgba(245, 247, 250, 1)})el.addEventListener(mouseleave, e {e.stopPropagation()el.style.backgroundColor #F5F6FA})})})},setMenulistIconColor() {this.$nextTick((){document.querySelectorAll(.menulist .el-submenu__title .el-submenu__icon-arrow).forEach(el{el.style.color rgba(153, 153, 153, 1)})})},menulistStyleChange() {this.setMenulistIconColor()this.setMenulistHoverColor()this.setMenulistStyleHeightChange()let str verticalif(horizontal str) {this.$nextTick((){document.querySelectorAll(.el-container .el-container).forEach(el{el.style.display blockel.style.paddingTop 60px // header 高度})document.querySelectorAll(.el-aside).forEach(el{el.style.width 100%el.style.height 60pxel.style.paddingTop 0})document.querySelectorAll(.index-aside .index-aside-inner).forEach(el{el.style.paddingTop 0})})}if(vertical str) {this.$nextTick((){document.querySelectorAll(.index-aside .index-aside-inner).forEach(el{el.style.paddingTop 60px})})}},setMenulistStyleHeightChange() {this.$nextTick((){document.querySelectorAll(.menulist-item.el-menu--horizontal.el-menu-item).forEach(el{el.style.height 60pxel.style.lineHeight 60px})document.querySelectorAll(.menulist-item.el-menu--horizontal.el-submenu.el-submenu__title).forEach(el{el.style.height 60pxel.style.lineHeight 60px})})},}
}
/script
style langscss scoped.index-aside {position: relative;overflow: hidden;.menulistImg {padding: 24px 0;box-sizing: border-box;.el-image {margin: 0 auto;width: 100px;height: 100px;border-radius: 100%;display: block;}}.index-aside-inner {height: 100%;margin-right: -17px;margin-bottom: -17px;overflow: scroll;overflow-x: hidden !important;padding-top: 60px;box-sizing: border-box;:focus {outline: none;}.el-menu {border: 0;}}}
/style