版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE5绪论21世纪的互联网技术迅猛发展,他已经悄然声息的影响人们的消费观念和消费方式。越来越多的人追随时代的步加入到了网上购物的队伍当中。电子商务平台迅速壮大。本章主要概括了电子商务系统的研究的目的意义、国内外研究现状以及本系统说明书的结构等内容。设计目的和意义随着人们的消费观念和消费方式的转变,电子商务这一领域逐渐进入了人们的视野。网上购物给人们带来了方便、快捷、安全的购物和交易,逐渐成为了主流的消费方式,为跨越时间和空间的经营模式提供了可能。1.1.1设计目的现在越来越多的人选择网上购物,尤其是年轻人居多。人们的生活水平逐渐提高,生活节奏加快,在全民上网的大环境下,网上购物的普及,电子商务平台也得到了极大地发展,已经成为目前经济发展的中流砥柱。有了电子商务系统作为平台,人们可以足不出户就可以购买自己心仪的商品,省时间、安全性高、选择的多样化等优势已经逐渐取代了传统的消费方式,厂商也可以降低自己的成本,扩大自己的销售范围。是绝大部分销售中小型企业不可缺少的一部分。因此,选择了开发此电子商务系统。1.1.2设计意义 电子商务系统平台的出现,对很多中小型企业有着极大的促进作用,完善基础管理经营管理现代化。实现了企业产品及形象宣传,实现在线交易、经营管理思想和商务模式的转变,电子商务系统使管理趋向流程化,避免一些误操作造成不必要的损失,提高交易效率,节约成本,尤其提高了有业务的广度,更加的适应了目前的快节奏生活。1.2国内外现状在全球的角度看来,电子商务平台的发展并不平衡,呈现出美国、欧盟、亚洲“三足鼎立”的局面,美国是世界最早发展电子商务的国家,同时也是电子商务发展最为成熟的国家,一直引领全球电子商务的发展,是全球电子商务成熟发达地区。欧盟电子商务的发展起步较美国晚,但发展速度较快,成为全球电子商务较为领先的地区。亚洲作为电子商务的新秀,市场潜力较大,但是近年的发展速度和所占份额并不理想,是全球电子商务的持续发展地区。1.2.1国内发展现状国内电子商务在将近10年的发展中逐渐被社会人士所接受,网上购物平台有着巨大的商业前景,吸引着越来越多的企业对其进行研究开发,在国内出现了典型的块状式分布,主要集中在沿海等较为发达地区,中北部处于快速发展,而西部则较为落后。随着发展环境的不断完善,经济的飞速发展,网上购物将有着持续发展的动力和保障。将逐步普及到各中小型企业当中,甚至会实现全民网购的状况。目前在国内只能说是处于起步发展阶段,有着巨大的发展空间,将创造出极大的经济效益,推动经济的发展。因为网上购物为人们的购物节省了大量的时间,提供了多种多样的购物选择,以及支付等安全方面得到了强有力的保障,良好的用户体验等很多优势,让人们更好的完成自己的需求,享受互联网发展所带来的便捷,被广大社会人士所接受。1.2.2国外发展现状在国外,一些较为发达国家起步较早,网上购物已经成为主流的消费方式,选择也更加多样化,用户体验等方面也更加完美。在国家的政策上得到了大力的支持,在美国,电子商务平台占据着非常大的市场份额,成为了主要零售方式之一。电子商务平台的发展已经趋于成熟,在技术方面已经较为全面,基础设施也比较先进,有着强有力的背后支撑,处于遥遥领先的地位。一些欧洲国家紧随其后,发展速度迅猛。欧美国家占据着全球将近七成的份额,日韩等亚洲国家发展也极为迅速不容小觑,其市场份额今年来持续递增,有着很大的发展潜力。1.3设计说明书结构本论文的结构如下:第一章是对当下网上购物平台的电子商务系统的设计的目的与意义,国内外发展现状进行了简单的分析论述。第二章重点对本系统的技术、经济、操作的可行性分析,前台后台的技术需求分析,以及系统对软件硬件的需求分析的论述。第三章对系统架构、结构、流程的设计,数据库的概要逻辑设计进行分析说明。第四章阐述了每个模块的详细设计和业务流程。第五章对部分模块的测试过程以及结果进行展示。第2章需求分析2.1可行性分析本系统使用目前较为主流的分布式架构、SpringBoot框架、并部署在安全性高的Linux系统,开发工具也非常廉价,并对系统进行了很大程度的优化,对硬件要求不高,并方便于后期维护。在低成本的同时带来了巨大的经济收益。对比大部分类似网站具有很大的优势,所以在经济可行性方面毫无问题。本系统的开发是基于Java的,是目前最主流的编程语言,掌握人数多。模块构成清晰易懂,非常方便后期的维护工作。涉及到的技术目前都较为主流,而且已经趋于成熟,网站界面也简单明了,方便用户操作,功能较为全面,更通过市场主流的网上购物平台分析对比,在操作方面是可行的。2.2业务需求分析本电子商务系统主要针对各中小企业以及广大消费者所开发的购物平台,因此有供应商与购物者两种用户,实现两者之间的业务功能。2.3.1供应商业务需求分析对于供应商需要实现的需求主要为网站的首页浏览、对商品的查询、对商品的上架下架以及价格调整,维护类目、商品、库存单元、广告位等信息。订单的后台服务,负责确认订单是否付款成功,SSO单点登录等功能,供应商的用例分析图如图2-1所示:2.3.2消费者业务需求分析对于购物者需要实现的需求主要为首页商品的展示,包含了商品分类、搜索栏、商品广告位。商品的分类查询,根据首页的商品类目进行查询。全文搜索,通过搜索栏填入的关键字进行搜索,并列表展示。商品详情查询,商品的详细信息展示。将商品添加到购物车,将有购买意向的商品临时存放。结算将购物车中勾选的商品初始化成要填写的订单。支付功能,下单后,用户点击支付,负责对接第三方支付系统。SSO单点登录功能。购物者的用例分析图如图2-2所示:2.3技术需求分析本系统采用面向服务分布式架构,原来所有的controller、service接口、service实现都在一个工程,通过Spring的ioc就可以实现互相调用。每一个实现服务的消费端和提供端分离。注册中心采用zookeeper,Dubbo实现订阅发布服务功能,dubbo本身并不是一个服务软件。它其实就是一个jar包能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。Dubbo架构图如图2-1所示:图2-1Dubbo架构图全文搜索引擎目前主流的索引技术就是倒排索引的方式。首先每个记录保存数据时,都不会直接存入数据库。系统先会对数据进行分词,然后以倒排索引结构保存。Elasticsearch为用户提供按关键字查询的全文搜索功能,Elasticsearch本身自带的中文分词,就是单纯把中文一个字一个字的分开,根本没有词汇的概念。但是实际应用中,用户都是以词汇为条件,进行查询匹配的,如果能够把文章以词汇为单位切分开,那么与用户的查询条件能够更贴切的匹配上,查询速度也更加快速。FastDFS是一个由C语言实现的开源轻量级分布式文件系统,作者余庆(happyfish100),支持Linux、FreeBSD、AID等Unix系统,解决了大数据存储和读写负载均衡等问题,适合存储4KB~500MB之间的小文件,如图片网站、短视频网站、文档、app下载站等,UC、京东、支付宝、迅雷、酷狗等都有使用。该软件作者是余庆个人独立开发的。图片服务器在linux,nginx做反向代理。FastDFS上传下载流程如图2-2所示:图2-2FastDFS上传下载流程图Thymeleaf的主要目标是提供一个优雅和高度可维护的创建模板的方式。为了实现这一点,它建立在自然模板的概念上,将其逻辑注入到模板文件中,不会影响模板被用作设计原型。这改善了设计的沟通,弥合了设计和开发团队之间的差距。Thymeleaf没有使用自定义的标签或语法,所有的模板语言都是扩展了标准H5标签的属性,Thymeleaf模版技术在功能开发中的结构图如图2-3所示:图2-3Thymeleaf结构图Mysql数据库具有体积小、成本低、存储读取速度快、开放源码等优势。其功能性可以完全支撑本系统的后台数据存储。因此本系统首选的主要关系型数据库使Mysql。考虑到该页面是被用户高频访问的,所以性能需要优化。一般一个系统最大的性能瓶颈,就是数据库的io操作。从数据库入手也是调优性价比最高的切入点。一般分为两个层面,一是提高数据库sql本身的性能,二是尽量避免直接查询数据库。提高数据库本身的性能首先是优化sql,包括:使用索引,减少不必要的大表关联次数,控制查询字段的行数和列数。另外当数据量巨大是可以考虑分库分表,以减轻单点压力。缓存可以理解是数据库的一道保护伞,任何请求只要能在缓存中命中,都不会直接访问数据库。而缓存的处理性能是数据库10-100倍。本系统使用Redis作为缓存系统进行优化。Redis非关系型数据库的结构图如图2-4所示:图2-4Redis数据库结构图2.4系统运行环境需求分析由于本系统采用分布式架构且具有一定的复杂性,需要软件内存8G以上,硬件内存500G以上。建议处理器为i5及以上,屏幕分辨率以及显卡等其他配置要求极低。开发工具为IDEA、SQLyog、Vmare、RedisDesktopManager、XFTP5、SwitchHost、Xshell、notepad++、Google等。本系统采用Windows10的64为操作系统、采用Linux中的CentOS-7-x86操作系统。JDK版本为1.8,Tomcat版本为8.5.24.使用关系型数据库Mysql5.5.27、非关系型数据库Redis3.2.8。注册中心使用Zookeeper3.4.11,检测中心使用Dubbo2.6.0。分布式文件系统采用FastDFS5.05,反向代理工具使用Njinx1.12.2,全文检索工具使用Elasticsearch5.6.4,Kibana5.6.4。本地工具采用Maven3.5.0版本。第3章概要设计3.1系统架构设计随着架构不断增大,服务节点越来越多。服务之间的调用和依赖关系也越来越复杂,需要有一个统一的中心来调度、路由、管理所有的服务,基于这个中心构建的这个星型架构就是目前最主流的SOA分布式架构。系统架构图如图3-1所示:图3-1系统架构图3.2系统功能模块设计本电子商务购物平台分为用户单点登录、商品详情、商品检索、商品管理、购物车、支付、订单管理七大功能模块,其中支付模块又分为支付信息、跳转支付平台模块,购物车模块分为添加、展示商品列表、合并购物车、变更订单状态模块,商品管理模块分为商品的查询分类信息、属性添加、属性查询、属性编辑模块,商品详情模块分为商品的详情查询、跳转兄弟页面模块,商品检索模块分为首页分类、列表展示、可选属性模块。各个模块的基本功能如下所示:SSO单点登录功能:用户点击页面上的登录按钮,弹出登录页面,进行消费者或者供应商登录。商品详情功能:以购物者的角度展现一个sku的详细信息,实现点击购买、放入购物车、切换颜色等功能。商品检索功能:购物者在主页进行商品的检索,通过关键字、属性值、分类Id、页码查询,提供可选择的属性列表。商品管理功能:供应商可以对编辑商品的详细属性信息,编辑商品的销售信息,为spu添加sku。购物车功能:存储记录购物者所选的商品、随时更新购物车信息、决定购买时,跳转到结算页面。订单管理功能:在购物车页面中,点击去结算,在登陆状态下,跳转到订单页面,填写订单信息,生成订单。支付功能:购物者在填写订单信息后,点击立即购买,网页跳转到支付宝收银页面。系统的功能模块框架图如图3-2所示:3.3系统流程设计在本系统的设计中,登录网站后,直接显示商城的页面,并可以在非登录状态下进行商品的分类查询、全文检索、显示商品详情、添加购物车功能,页面中有专门供用户登录的模块,登录失败则重新返回登录窗口。登陆后,购物者可以进行下单支付功能,供应商可以进行对商品的管理以及订单的后台服务功能。系统流程图如图3-3所示:图3-3系统流程图3.4数据库设计1.用信息户表(t_user)表3-1用户信息表字段数据类型中文字段备注IDint(8)主键自增2.商品信息表(spu_info)表3-2商品信息表字段数据类型中文字段备注IDint(8)主键自增3.库存单元信息表(sku_info)表3-3库存单元信息表字段数据类型中文字段备注IDint(8)主键自增4.spu销售属性表(spu_sale_atter)表3-4spu销售属性表字段数据类型中文字段备注IDint(8)主键自增库存单元图片表(sku_image)库存单元图片表(sku_image)主要属性有商品id、图片名称、图片路径、商品图片id、是否默认图片等属性。具体如表3-5所示:表3-5库存单元图片表字段数据类型中文字段备注IDint(8)主键自增sku_idint(8)商品idimg_namevarchar(30)图片名称img_urlvarchar(30)图片路径spu_img_idint(8)商品图片idis_defaultvarchar(30)是否默认图片1是0否sku销售属性值表(sku_sale_attr_value)sku销售属性值表(sku_sale_attr_value)主要属性有库存单元id、销售属性id、销售属性名称、销售属性值id、销售属性值名称等属性。具体如表3-6所示:表3-6sku销售属性值表字段数据类型中文字段备注IDint(8)主键自增sku_idint(8)库存单元idsale_attr_idint(8)销售属性idsale_attr_namevarchar(30)销售属性名称sale_attr_value_idint(8)销售属性值idsale_attr_value_namevarchar(30)销售属性值名称7.购物车信息表(cart_Info)购物车信息表(cart_Info)主要属性有用户id、skuid、放入购物车时价格、数量、图片链接、sku名称等属性。具体如表3-7所示:表3-7购物车信息表字段数据类型中文字段备注IDint(8)主键自增user_idint(8)用户idsku_idint(8)skuidcart_pricevarchar(30)放入购物车时价格sku_numint(8)数量img_urlvarchar(30)图片链接sku_namevarchar(30)sku名称8.订单信息表(order_Info)订单信息表(order_Info)主要属性有收货人名称、收货人电话、收货地址、总金额、订单状态(用户)、用户Id、支付方式、订单状态(后台)、第三方支付编号、创建时间等属性。具体如表3-8所示:表3-8订单信息表字段数据类型中文字段备注IDint(8)主键自增consigneevarchar(30)收货人名称consignee_telvarchar(30)收货人电话deliveryAddressvarchar(30)收货地址total_amountvarchar(30)总金额order_statusint(2)订单状态(用户)1是0否userIdint(8)用户Idpayment_wayint(8)支付方式orderCommentint(2)订单状态(后台)1已交易0未交易out_trade_noint(8)第三方支付编号1支付宝2微信create_timevarchar(30)创建时间9.支付信息表(payment_info)支付信息表(payment_info)主要属性有对外交易编号、订单编号、订单金额、交易内容、支付状态、创建时间等属性。具体如表3-9所示:表3-9支付信息表字段数据类型中文字段备注IDint(8)主键自增out_trade_noint(8)对外交易编号alipay_trade_noint(8)订单编号total_amountint(8)订单金额subjectvarchar(30)交易内容payment_statusint(8)支付状态1已交易0未交易create_timevarchar(30)创建时间详细设计与实现本章详细阐述的各个模块所实现功能的详细设计,分析业务的处理流程、展示各个模块的操作页面、涉及到的技术的介绍。4.1单点登录模块设计登录展示页面如图4-1所示,将用户身份信息独立管理,以便于更好的分布式管理。用接收的用户名密码核对后台数据库将用户信息加载到写入redis,redis中有该用户视为登录状态。用userId+当前用户登录ip地址+密钥生成token,重定向用户到之前的来源地址,同时把token作为参数附上。当业务模块某个页面要检查当前用户是否登录时,提交到认证中心,认证中心进行检查校验,返回登录状态、用户Id和用户名称。利用密钥和IP检验token是否正确,并获得里面的userId,用userId检查Redis中是否有用户信息,如果有,登录成功状态返回,如果没有,登录失败状态返回。图4-1登录页面主要实现的代码如下,实现用户信息缓存。publicStringuserKey_prefix="user:";
publicStringuserinfoKey_suffix=":info";
publicintuserKey_timeOut=60*60*24;@Override
publicUserInfologin(UserInfouserInfo){
Stringpassword=DigestUtils.md5DigestAsHex(userInfo.getPasswd().getBytes());
userInfo.setPasswd(password);
UserInfoinfo=userInfoMapper.selectOne(userInfo);
if(info!=null){
//获得到redis,将用户存储到redis中
Jedisjedis=redisUtil.getJedis();
jedis.setex(userKey_prefix+info.getId()+userinfoKey_suffix,userKey_timeOut,JSON.toJSONString(info));
jedis.close();
returninfo;
}
returnnull;
}4.2商品详情模块设计商品详情页面如图4-2所示,商品详情页,简单说就是以购物者的角度展现一个sku的详情信息。这个页面不同于传统的crud的详情页,使用者并不是管理员,需要对信息进行查删改查,取而代之的是点击购买、放入购物车、切换颜色等等。使用Thymeleaf模版技术导入页面资源,实现SkuInfo接口,实现类为getSkuInfo,添加控制器,获取商品信息,根据商品id查找商品信息,图片信息并在页面显示,使用sql查询出sku对应spu的销售属性,sql列出所有该spu的销售属性和属性值,并关联某skuid如果能关联上is_check设为1,否则设为0。在对应的实体类中SpuSaleAttrValue添加属性字段。标识出本商品对应的销售属性点击其他销售属性值的组合,跳转到另外的sku页面。从页面中获得得所有选中的销售属性进行组合,比如:“属性值1|属性值2|属性值3”用这个字符串匹配一个对照表,来获得skuId。并进行跳转,后台要生成一个“属性值1|属性值2|属性值3:skuId”的一个json串以提供页面进行匹配。需要从后台数据库查询出该spu下的所有skuId和属性值关联关系。然后加工成如上的Json串,用该json串,跟前台匹配。图4-2商品详情页面主要实现的代码如下,实现查询spu信息。SELECTsa.id,sa.spu_id,sa.sale_attr_name,sa.sale_attr_id,sv.idsale_attr_value_id,sv.sale_attr_value_name,skv.sku_id,IF(skv.sku_idISNOTNULL,1,0)is_checkedFROMspu_sale_attrsaINNERJOINspu_sale_attr_valuesvONsa.spu_id=sv.spu_idANDsa.sale_attr_id=sv.sale_attr_idLEFTJOINsku_sale_attr_valueskvONskv.sale_attr_id=sa.sale_attr_idANDskv.sale_attr_value_id=sv.idANDskv.sku_id=18WHEREsa.spu_id=45ORDERBYsv.sale_attr_id,sv.id4.3商品检索模块设计商品检索页面如图4-3所示,利用elasticSearch技术开发电商的搜索列表功能,拷贝静态文件到resources目录下,手工建立static和templates目录,为商品检索模块添加静态页面。elasticSearch存储数据是以json格式保存的,那么如果一个javabean的结构刚好跟要求的json格式吻合,我们就可以直接把javaBean序列化为json保持到elasticSearch中,所以制作一个与elasticSearch中json格式一致的javabean,编写DSL语句,从es中取得数据JestClient客户端包,提供了一组builder工具。这个工具可以比较方便的帮程序员组合复杂的查询Json。根据关键字、属性值、分类Id、页码查询sku列表,提供可供选择的属性列表,这个列表有两种情况,如果是通过首页的3级分类点击进入的,要按照分类Id查询对应的属性和属性值列表,如果是直接用搜索栏输入文字进入的,要根据sku的查询结果涉及的属性值列表,从结果中取出平台属性值列表。点击属性时,要把上次查询的内容也带上,即带上历史参数,使用迭代器遍历列表中商品的属性,将查询结果与选中属性相比较,如果一致,则返回属性和属性值列表,如果不一致,则无对应商品。图4-2商品详情页面主要实现的代码如下,实现可供选择的属性列表。//根据查询的结果返回属性和属性值列表
@Reference
ListServicelistService;
@Reference
privateManageServicemanageService;
@RequestMapping("list.html")
publicStringgetList(SkuLsParamsskuLsParams,Modelmodel){
SkuLsResultskuLsResult=listService.search(skuLsParams);
//获取sku属性值列表
List<SkuLsInfo>skuLsInfoList=skuLsResult.getSkuLsInfoList();
model.addAttribute("skuLsInfoList",skuLsInfoList);
//从结果中取出平台属性值列表
List<String>attrValueIdList=skuLsResult.getAttrValueIdList();
List<BaseAttrInfo>attrList=manageService.getAttrList(attrValueIdList);
model.addAttribute("attrList",attrList);
//returnJSON.toJSONString(search);
return"list";
}4.4商品管理模块设计商品检索页面如图4-4所示,SPU(StandardProductUnit):标准化产品单元。是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。SKU=StockKeepingUnit(库存量单位)。即库存进出计量的基本单元,可以是以件,盒,托盘等为单位。SKU这是对于大型连锁超市DC(配送中心)物流管理的一个必要的方法。现在已经被引申为产品统一编号的简称,每种产品均对应有唯一的SKU号。本项目把商品的基本信息进行三级分类,销售属性是商品详情页右边,可以通过销售属性来定位一组spu下的哪款sku。可以让当前的商品详情页,跳转到自己的“兄弟”商品。平台属性是之前分类下面,辅助搜索的,类似于条件的属性。销售属性与平台属性各自独立。一个SPU会决定一个商品都有哪些销售属性,而某个商品有什么平台属性,由他的3级分类决定。同一个SPU下的SKU可以共用一些资源。同一种商品,大部分图片都是共用的只有因为颜色尺寸等,很少的差别。一般来说商品图片都是在新增SPU时上传的,在新增SKU时从该SPU已上传的图片中选择。而海报几乎是所有SPU下的SKU都一样。使用fastdfs技术进行图片的上传,自己通过源码方式编译,打好jar包,安装到本地仓库。直接用idea直接把这个源码作为模块导入工程,把pom.xml中的版本改成1.27,执行install。在商品管理模块就可以直接使用这个坐标。从后台查询数据库绑定表格控件,根据商品id获取商品图片表中的所有图片列表,用ajax根据商品id查询销售属性及销售属性值的列表数据。然后通过js把数据展开成html,变为多下拉菜单,生成图片列表以供用户选择。设置商品id为自增,添加商品以及商品属性时,将数据插入到商品以及商品各种属性的表中。图4-4商品详情页面主要实现的代码如下,实现商品的添加。@Override
publicvoidsaveSkuInfo(SkuInfoskuInfo){
//sku_info
if(skuInfo.getId()==null||skuInfo.getId().length()==0){
//设置id为自增
skuInfo.setId(null);
skuInfoMapper.insertSelective(skuInfo);
}else{
skuInfoMapper.updateByPrimaryKeySelective(skuInfo);
}
//insert
List<SkuImage>skuImageList=skuInfo.getSkuImageList();
if(skuImageList!=null&&skuImageList.size()>0){
for(SkuImageimage:skuImageList){
/*""区别null*/
if(image.getId()!=null&&image.getId().length()==0){
image.setId(null);
}
//skuId必须赋值
image.setSkuId(skuInfo.getId());
skuImageMapper.insertSelective(image);
}
}
}4.5购物车模块设计购物车模块要能存储顾客所选的的商品,记录下所选商品,还要能随时更新,未登录状态也可以存入购物车,当用户决定购买时,用户可以选择决定购买的商品进入结算页面。添加购物车:根据skuId查询出商品详情skuInfo,把skuInfo信息对应保存到购物车[购物车的实体类],然后返回成功页面。先检查该用户的购物车里是否已经有该商品,如果有商品,只要把对应商品的数量增加上去就可以,同时更新缓存,如果没有该商品,则把对应商品插入到购物车中,同时插入缓存。获得参数:skuId、skuNum,判断该用户是否登录,用userId判断,如果登录则调用后台的service的业务方法,如果未登录,要把购物车信息暂存到cookie中,利用cookie保存购物车。查询出来在cookie中的购物车,反序列化成列表。通过循环比较有没有该商品,如果有,增加数量,如果没有,增加商品,然后把列表反序列化,利用CookieUtil保存到cookie中。展示购物车列表:判断用户是否登录,登录了从redis中,redis中没有,从数据库中取,redis中取出来要进行反序列化,如果redis中没有要从数据库中查询,要连带把最新的价格也取出来,默认要显示最新价格而不是当时放入购物车的价格,加载入缓存时设定失效时间,保证和用户信息的失效时间一致,从数据库中查询,其中cart_price表中可能是旧值,所以需要关联sku_info表信息,key都是同一个,值会产生重复覆盖。合并购物车;由于加入购物车时,用户可能存在登录和未登录两种情况,登录前在cookie中保存了一部分购物车信息,如果用户登录了,那么对应的要把cookie中的购物车合并到数据库中,并且刷新缓存。用数据库中的购物车列表与传递过来的cookie里的购物车列表循环匹配,能匹配上的数量相加,匹配不上的插入到数据库中,最后重新加载缓存。购物车页面如图4-5所示:图4-5购物车页面主要实现的代码如下,实现展示购物车列表。@RequestMapping("cartList")
@LoginRequie(autoRedirect=false)
publicStringcartList(HttpServletRequestrequest,HttpServletResponseresponse){
//判断用户是否登录,登录了从redis中,redis中没有,从数据库中取
//没有登录,从cookie中取得
StringuserId=(String)request.getAttribute("userId");
if(userId!=null){
//从redis中取得,或者从数据库中
List<CartInfo>cartList=cartService.getCartList(userId);
request.setAttribute("cartList",cartList);
}else{
List<CartInfo>cartList=cartCookieHandler.getCartList(request);
request.setAttribute("cartList",cartList);
}
return"cartList";
}4.6订单模块设计订单展示页面如图4-6所示,订单业务在整个电商平台中处于核心位置,也是比较复杂的一块业务。是把“物”变为“钱”的一个中转站。购物车点击计算按钮,结算必须要登录结算页面获得redis中的key,获取用户信息和购物车选择的商品列表,结算的时候,需要将信息添加到订单明细表中,下订单时,设置创建时间,设置失效时间,生成第三方支付编号等信息,将订单信息保存到订单信息表中,保存完,保存以后把购物车中的商品删除,重定向到支付页面。为了跳转到支付页面使用。支付会根据订单id进行支付。图4-6订单页面主要实现的代码如下,实现保存订单信息。@Service
publicclassOrderServiceImplimplementsOrderService{
@Autowired
privateOrderInfoMapperorderInfoMapper;
@Autowired
privateOrderDetailMapperorderDetailMapper;
publicStringsaveOrder(OrderInfoorderInfo){
//设置创建时间
orderInfo.setCreateTime(newDate());
//设置失效时间
Calendarcalendar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年综合测试(决策能力)考题及答案
- 2025年中职模具设计与制造(模具制造)试题及答案
- 2025-2026年高一地理(海洋地理)下学期期末检测卷
- 2025年大学大四(国际贸易)跨国公司管理试题及答案
- 2025年中职社会工作(社区服务实务)试题及答案
- 2026年珠宝首饰设计与工艺(珠宝设计)考题及答案
- 大学(测绘工程)地形测量实操2026年综合测试题及答案
- 2026年职业病防治(职业健康)考题及答案
- 2025年大学大二(应用物理学)电磁学综合测试试题及答案
- 2025年高职食品加工工艺(食品保鲜技术)试题及答案
- 财务顾问服务协议合同
- 国家开放大学《社会工作概论#》补修课形考答案
- 前列腺术后尿控功能康复策略
- 2025年浙江红船干部学院、中共嘉兴市委党校公开选聘事业人员2人考试参考题库附答案解析
- 美容机构的课程
- 路面工程安全专项施工方案
- 2025重庆市环卫集团有限公司招聘27人笔试历年参考题库附带答案详解
- 2025年二十届四中全会知识测试题库(含答案)
- GB/T 42062-2022医疗器械风险管理对医疗器械的应用
- 中小学生励志主题班会课件《我的未来不是梦》
- 幼儿园户外体育游戏观察记录
评论
0/150
提交评论