
电商项目
文章平均质量分 92
pziwang
云中台java项目,信息学奥赛辅导
展开
-
02防止恶意刷单
2.防止恶意刷单在生产场景下,很有可能会存在某些用户恶意刷单的情况出现。这样的操作对于系统而言,会导致业务出错、脏数据、后端访问压力大等问题的出现。一般要解决这个问题的话,需要前端进行控制,同时后端也需要进行控制。后端实现可以通过Redis incrde 原子性递增来进行解决。2.1 更新秒杀服务下单2.2 防重方法实现//防止重复提交private String preventRe...原创 2020-03-15 21:59:59 · 3297 阅读 · 0 评论 -
1.秒杀异步下单
1.秒杀异步下单用户在下单的时候,需要基于JWT令牌信息进行登陆人信息认证,确定当前订单是属于谁的。针对秒杀的特殊业务场景,仅仅依靠对象缓存或者页面静态化等技术去解决服务端压力还是远远不够。对于数据库压力还是很大,所以需要异步下单,异步是最好的解决办法,但会带来一些额外的程序上的复杂性。1.1 秒杀服务-下单实现1)将tokenDecode工具类放入秒杀服务并声明Bean2)更新秒杀服务...原创 2020-03-15 21:58:48 · 1770 阅读 · 0 评论 -
04加载秒杀商品实现
3.4 加载秒杀商品实现当前已经完成了秒杀时间段菜单的显示,那么当用户在切换不同的时间段的时候,需要按照用户所选择的时间去显示相对应时间段下的秒杀商品3.4.1 秒杀服务-查询秒杀商品列表@RestController@RequestMapping("/seckillgoods")public class SecKillGoodsController { @Autowired...原创 2020-03-15 21:55:43 · 215 阅读 · 0 评论 -
03秒杀商品-首页
3.秒杀商品-首页秒杀商品首页会显示处于秒杀中以及未开始秒杀的商品。3.1 秒杀首页实现分析秒杀首页需要显示不同时间段的秒杀商品信息,然后当用户选择不同的时间段,查询该时间段下的秒杀商品,实现过程分为两大过程:1) 加载时间菜单2)加载时间菜单下秒杀商品信息3.1.1 加载时间菜单分析每2个小时就会切换一次抢购活动,所以商品发布的时候,我们将时间定格在2小时内抢购,每次发布商品...原创 2020-03-14 22:06:46 · 261 阅读 · 0 评论 -
02秒杀商品存入缓存
2.秒杀商品存入缓存秒杀商品由B端存入Mysql,设置定时任务,每隔一段时间就从Mysql中将符合条件的数据从Mysql中查询出来并存入缓存中,redis以Hash类型进行数据存储。2.1 秒杀服务搭建1)新建服务changgou_service_seckill2)添加依赖信息,详情如下: <dependencies> <dependency>...原创 2020-03-14 22:03:19 · 579 阅读 · 2 评论 -
1.秒杀业务分析
1.秒杀业务分析1 秒杀业务分析1.1 需求分析所谓“秒杀”,就是网络卖家发布一些超低价格的商品,所有买家在同一时间网上抢购的一种销售方式。通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动。由于商品价格低廉,往往一上架就被抢购一空,有时只用一秒钟。秒杀商品通常有两种限制:库存限制、时间限制。需求:(1)秒杀频道首页列出秒杀商品(4)点击立即抢购实现秒杀下单,下单时扣减库存。当...原创 2020-03-14 22:01:22 · 740 阅读 · 0 评论 -
03确认收货与自动收货
3.确认收货与自动收货3.1自动收货3.1.1需求分析与实现思路当物流公司将货物送到了用户收货地址之后,需要用户点击确认收货,当用户点击了确认收货之后,会修改订单状态为已完成3.1.2 代码实现(1)OrderController新增方法/*** 确认收货* @param orderId 订单号* @param operator 操作者* @return*/@PutMapp...原创 2020-03-13 23:47:32 · 4440 阅读 · 0 评论 -
02订单批量发货
2.订单批量发货2.1 批量发货业务逻辑2.1.1 需求分析实现批量发货的业务逻辑2.1.2 代码实现(1)OrderController新增方法@PostMapping("/batchSend") public Result batchSend(@RequestBody List<Order> orders){ orderService.batc...原创 2020-03-13 23:45:28 · 852 阅读 · 0 评论 -
1.超时未支付订单处理
1.超时未支付订单处理1.1 需求分析超过限定时间并未支付的订单,我们需要进行超时订单的处理:先调用微信支付api,查询该订单的支付状态。如果未支付调用关闭订单的api,并修改订单状态为已关闭,并回滚库存数。如果该订单已经支付,则做补偿操作(修改订单状态和记录)。1.2 实现思路如何获取超过限定时间的订单?我们可以使用延迟消息队列(死信队列)来实现。所谓延迟消息队列,就是消息的生产者发送的...原创 2020-03-12 23:56:55 · 7486 阅读 · 0 评论 -
04推送支付通知
4.推送支付通知4.1 需求分析当用户完成扫码支付后,跳转到支付成功页面4.2 服务端推送方案我们需要将支付的结果通知前端页面,其实就是我们通过所说的服务器端推送,主要有三种实现方案(1)Ajax 短轮询 Ajax 轮询主要通过页面端的 JS 定时异步刷新任务来实现数据的加载如果我们使用ajax短轮询方式,需要后端提供方法,通过调用微信支付接口实现根据订单号查询支付状态的方法(参见查询...原创 2020-03-10 22:41:52 · 1755 阅读 · 0 评论 -
03支付回调逻辑处理
3.支付回调逻辑处理3.1 需求分析在完成支付后,修改订单状态为已支付,并记录订单日志。3.2 实现思路(1)接受微信支付平台的回调信息(xml)<xml><appid><![CDATA[wx8397f8696b538317]]></appid><bank_type><![CDATA[CFT]]></bank...原创 2020-03-10 22:40:49 · 1318 阅读 · 0 评论 -
02微信支付二维码
2.微信支付二维码2.1 需求分析用户在提交订单后,如果是选择支付方式为微信支付,那应该跳转到微信支付二维码页面,用户扫描二维码可以进行支付,金额与订单金额相同。2.2 实现思路前端页面向后端传递订单号,后端根据订单号查询订单,检查是否为当前用户的未支付订单,如果是则根据订单号和金额生成支付url返给前端,前端得到支付url生成支付二维码。2.3 代码实现2.3.1 提交订单跳转支付...原创 2020-03-09 23:45:27 · 2186 阅读 · 0 评论 -
1.微信支付快速入门
1.微信支付快速入门1.1 微信支付申请(了解)第一步:注册公众号(类型须为:服务号)请根据营业执照类型选择以下主体注册:个体工商户| 企业/公司| 政府| 媒体| 其他类型。第二步:认证公众号公众号认证后才可申请微信支付,认证费:300元/次。第三步:提交资料申请微信支付登录公众平台,点击左侧菜单【微信支付】,开始填写资料等待审核,审核时间为1-5个工作日内。第四步:开户成功,登...原创 2020-02-15 22:29:21 · 991 阅读 · 0 评论 -
03基于消息队列实现分布式事务控制
3.基于消息队列实现分布式事务3.1 准备工作3.1.1 changgou_order库新增数据表DROP TABLE IF EXISTS `tb_task`;CREATE TABLE `tb_task` (`id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '任务id',`create_time` datetime DEFAULT NUL...原创 2020-02-15 22:28:07 · 371 阅读 · 0 评论 -
02基于Seata实现分布式事务
2.基于Seata实现分布式事务2.1 Seata简介Seata(原名Fescar) 是阿里18年开源的分布式事务的框架。Fescar的开源对分布式事务框架领域影响很大。作为开源大户,Fescar来自阿里的GTS,经历了好几次双十一的考验,一经开源便颇受关注。后来Fescar改名为Seata。Fescar虽然是二阶段提交协议的分布式事务,但是其解决了XA的一些缺点:单点问题:同步阻塞:...原创 2020-02-15 22:26:56 · 456 阅读 · 0 评论 -
01.分布式事务解决方案
1.分布式事务解决方案刚才我们编写的扣减库存与保存订单是在两个服务中存在的,如果扣减库存后订单保存失败了是不会回滚的,这样就会造成数据不一致的情况,这其实就是我们所说的分布式事务的问题,接下来我们1.1 本地事务与分布式事务1.1.1 事务数据库事务(简称:事务,Transaction)是指数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。事务拥有以下四个特性,习惯上被称为...原创 2020-02-14 23:55:09 · 544 阅读 · 0 评论 -
2.下单
2.下单2.1 业务分析点击提交订单的时候,会立即创建订单数据,创建订单数据会将数据存入到2张表中,分别是订单表和订单明细表,此处还需要修改商品对应的库存数量。订单表结构如下:CREATE TABLE `tb_order` (`id` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '订单id',`total_num` int(11) DE...原创 2020-02-14 23:50:14 · 1204 阅读 · 0 评论 -
1.订单结算页
1.订单结算页1.1收件地址分析用户从购物车页面点击结算,跳转到订单结算页,结算页需要加载用户对应的收件地址,如下图:表结构:CREATE TABLE `tb_address` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(50) DEFAULT NULL COMMENT '用户名',`provinceid` va...原创 2020-02-13 23:41:23 · 669 阅读 · 0 评论 -
03购物车渲染
3.购物车渲染如上图所示,用户每次将商品加入购物车,或者点击购物车列表的时候,先经过订单购物车后端渲染服务,再通过feign调用购物车订单微服务来实现购物车的操作,例如:加入购物车、购物车列表。3.1购物车渲染服务搭建在changgou_web中搭建订单购物车微服务工程 changgou_web_order ,该工程主要实现购物车和订单的渲染操作。(1) pom.xml依赖<de...原创 2020-02-13 23:32:19 · 499 阅读 · 0 评论 -
02购物车
2.购物车购物车分为用户登录购物车和未登录购物车操作,国内知名电商京东用户登录和不登录都可以操作购物车,如果用户不登录,操作购物车可以将数据存储到Cookie,用户登录后购物车数据可以存储到Redis中,再将之前未登录加入的购物车合并到Redis中即可。淘宝天猫则采用了另外一种实现方案,用户要想将商品加入购物车,必须先登录才能操作购物车。我们今天实现的购物车是天猫解决方案,即用户必须先登录才能...原创 2020-02-13 23:28:26 · 613 阅读 · 0 评论 -
01SpringSecurity权限控制
1.SpringSecurity权限控制用户每次访问微服务的时候,先去oauth2.0服务登录,登录后再访问微服务网关,微服务网关将请求转发给其他微服务处理。由于我们项目使用了微服务,任何用户都有可能使用任意微服务,此时我们需要控制相关权限,例如:普通用户角色不能使用用户的删除操作,只有管理员才可以使用,那么这个时候就需要使用到SpringSecurity的权限控制功能了。1.1角色权限加...原创 2020-02-13 23:23:22 · 385 阅读 · 0 评论 -
07自定义登录页面
7.自定义登录页面7.1 认证服务添加依赖 <!--thymeleaf--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymelea...原创 2020-02-13 23:21:46 · 854 阅读 · 0 评论 -
06认证服务对接网关
6.认证服务对接网关6.1 新建网关工程changgou_gateway_webchanggou_gateway添加依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-s...原创 2020-02-13 23:20:24 · 1480 阅读 · 0 评论 -
05认证开发
5.认证开发5.1 需求分析功能流程图如下:执行流程:1、用户登录,请求认证服务2、认证服务认证通过,生成jwt令牌,将jwt令牌及相关信息写入Redis,并且将身份令牌写入cookie3、用户访问资源页面,带着cookie到网关4、网关从cookie获取token,并查询Redis校验token,如果token不存在则拒绝访问,否则放行5、用户退出,请求认证服务,清除redis...原创 2020-02-13 23:19:30 · 160 阅读 · 0 评论 -
04oauth2.0入门
4.Oauth2.0入门4.1准备工作搭建认证服务器之前,先在用户系统表结构中增加如下表结构:CREATE TABLE `oauth_client_details` (`client_id` varchar(48) NOT NULL COMMENT '客户端ID,主要用于标识对应的应用',`resource_ids` varchar(256) DEFAULT NULL,`clien...原创 2020-02-12 23:49:50 · 330 阅读 · 0 评论 -
03Jwt令牌回顾
3.Jwt令牌回顾JSON Web Token(JWT)是一个开放的行业标准(RFC 7519),它定义了一种简介的、自包含的协议格式,用于 在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任。JWT可以使用HMAC算法或使用RSA的公 钥/私钥对来签名,防止被篡改。官网:https://jwt.io/标准:https://tools.ietf.org/html/rfc751...原创 2020-02-12 23:43:51 · 810 阅读 · 0 评论 -
02认证解决方案
2.认证解决方案2.1 单点登录技术方案Java中有很多用户认证的框架都可以实现单点登录:1、Apache Shiro.2、CAS3、Spring security2.2 第三方登录技术方案2.2.1 Oauth2认证流程第三方认证技术方案最主要是解决认证协议的通用标准问题,因为要实现跨系统认证,各系统之间要遵循一定的 接口协议。 OAUTH协议为用户资源的授权提供了一个安全的...原创 2020-02-12 23:41:45 · 519 阅读 · 0 评论 -
01用户认证分析
1.用户认证分析上面流程图描述了用户要操作的各个微服务,用户查看个人信息需要访问客户微服务,下单需要访问订单微服务,秒杀抢购商品需要访问秒杀微服务。每个服务都需要认证用户的身份,身份认证成功后,需要识别用户的角色然后授权访问对应的功能。1.1 单点登录用户访问的项目中,至少有3个微服务需要识别用户身份,如果用户访问每个微服务都登录一次就太麻烦了,为了提高用户的体验,我们需要实现让用户在一个...原创 2020-02-12 23:39:28 · 429 阅读 · 0 评论 -
05畅购商品详情页
5.畅购商品详情页5.1需求分析当系统审核完成商品,需要将商品详情页进行展示,那么采用静态页面生成的方式生成,并部署到高性能的web服务器中进行访问是比较合适的。所以,开发流程如下图所示:此处MQ我们使用Rabbitmq即可。执行步骤解释:系统管理员(商家运维人员)修改或者审核商品的时候, 会更改数据库中商品上架状态并发送商品id给rabbitMq中的上架交换器上架交换器会将商品id发...原创 2020-02-11 22:53:20 · 1320 阅读 · 0 评论 -
04搜索页面渲染
4.搜索页面渲染4.1搜索分析搜索页面要显示的内容主要分为3块。1)搜索的数据结果2)筛选出的数据搜索条件3)用户已经勾选的数据条件4.2搜索实现搜索的业务流程如上图,用户每次搜索的时候,先经过搜索业务工程,搜索业务工程调用搜索微服务工程。4.2.1搜索工程搭建(1)引入依赖在changgou-service_search工程中的pom.xml中引入如下依赖:<de...原创 2020-02-11 22:50:10 · 620 阅读 · 0 评论 -
03Thymeleaf语法
3.Thymeleaf基本语法(1)th:action定义后台控制器路径,类似 标签的action属性。例如:<form th:action="@{/test/hello}" > <input th:type="text" th:name="id"> <button>提交</button></form>(2)th:ea...原创 2020-02-11 22:46:18 · 524 阅读 · 0 评论 -
02Springboot整合Thymeleaf
2.Springboot整合thymeleaf使用springboot 来集成使用Thymeleaf可以大大减少单纯使用thymleaf的代码量,所以我们接下来使用springboot集成使用thymeleaf.创建一个springboot项目添加thymeleaf的起步依赖添加spring web的起步依赖编写html使用thymelea的语法获取变量对应后台传递的值...原创 2020-02-11 22:42:39 · 134 阅读 · 0 评论 -
01Thymeleaf介绍
1. thymeleaf介绍thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发。它是一个开源的Java库,基于Apache License 2.0许可,由Daniel Fernández创建,该作者还是Java加密库Jasypt的作者。Thymeleaf提供了一个用于整合Spring MVC的可选模块,在应用开发中,你可以使用Thymele...原创 2020-02-11 22:42:10 · 653 阅读 · 0 评论 -
05高亮显示
5.高亮显示5.1高亮分析高亮显示是指根据商品关键字搜索商品的时候,显示的页面对关键字给定了特殊样式,让它显示更加突出,如上图商品搜索中,关键字编程了红色,其实就是给定了红色样式。5.2高亮搜索实现步骤分析将之前的搜索换掉,换成高亮搜索,我们需要做3个步骤:1.指定高亮域,也就是设置哪个域需要高亮显示设置高亮域的时候,需要指定前缀和后缀,也就是关键词用什么html标签包裹,再给该标...原创 2020-02-11 00:12:35 · 843 阅读 · 0 评论 -
04搜索排序
4.搜索排序4.1排序分析排序这里总共有根据价格排序、根据评价排序、根据新品排序、根据销量排序,排序要想实现非常简单,只需要告知排序的域以及排序方式即可实现。价格排序:只需要根据价格高低排序即可,降序价格高->低,升序价格低->高评价排序:评价分为好评、中评、差评,可以在数据库中设计3个列,用来记录好评、中评、差评的量,每次排序的时候,好评的比例来排序,当然还要有条数限制,评...原创 2020-02-11 00:11:33 · 216 阅读 · 1 评论 -
03搜索分页
3.搜索分页3.1分页分析页面需要实现分页搜索,所以我们后台每次查询的时候,需要实现分页。用户页面每次会传入当前页和每页查询多少条数据,当然如果不传入每页显示多少条数据,默认查询30条即可。3.2分页实现分页使用PageRequest.of( pageNo- 1, pageSize);实现,第1个参数表示第N页,从0开始,第2个参数表示每页显示多少条,实现代码如下:package co...原创 2020-02-11 00:10:51 · 1321 阅读 · 0 评论 -
02条件筛选
2.条件筛选用户有可能会根据分类搜索、品牌搜索,还有可能根据规格搜索,以及价格搜索和排序操作。根据分类和品牌搜索的时候,可以直接根据指定域搜索,而规格搜索的域数据是不确定的,价格是一个区间搜索,所以我们可以分为三段实现,先实现分类、品牌搜素,再实现规格搜索,然后实现价格区间搜索。2.1品牌筛选2.1.1需求分析页面每次向后台传入对应的分类和品牌,后台据分类和品牌进行条件过滤即可。2.1...原创 2020-02-11 00:09:06 · 284 阅读 · 0 评论 -
01根据关键字查询
1.根据关键字查询(1) changgou_service_search项目创建SearchService接口public interface SearchService{ /** *全文检索 *@param paramMap 查询参数 *@return */ public Map search(Map<String,String> ...原创 2020-02-11 00:06:58 · 276 阅读 · 0 评论 -
04商品下架 索引库删除数据
4.商品下架索引库删除数据4.1 需求分析商品下架后将商品从索引库中移除。4.2 实现思路与商品上架的实现思路非常类似。(1)在数据监控微服务中监控tb_spu表的数据,当tb_spu发生更改且is_marketable为0时,表示商品下架,将spu的id发送到rabbitmq。(2)在rabbitmq管理后台创建商品下架交换器(fanout)。使用分列模式的交换器是考虑商品下架会有很...原创 2020-02-08 22:43:31 · 586 阅读 · 0 评论 -
03商品上架索引库导入数据
3.商品上架索引库导入数据3.1 需求分析商品上架将商品的sku列表导入或更新索引库。3.2 实现思路(1)在数据监控微服务中监控tb_spu表的数据,当tb_spu发生更改且is_marketable为1时,表示商品上架,将spu的id发送到rabbitmq。(2)在rabbitmq管理后台创建商品上架交换器(fanout)。使用分列模式的交换器是考虑商品上架会有很多种逻辑需要处理,导...原创 2020-02-08 22:42:49 · 675 阅读 · 1 评论