Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序)
Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序)
说明:在实际的业务场景中(无论是TO B还是TO C)不管是休闲食品、餐饮、水果、日用百货、母婴等高频购买行业,还是其他行业,“再来一单”都能够大大缩短买家再次下单的流程,促进转化。
于是就有了针对生鲜电商平台的“再来一单”功能,买家只要在订单列表、订单详情或者支付成功中点击“再来一单”,就可以把订单中的商品再次加入购物车,方便快捷,高效.
上面的话可以总结出来"再来一单“以下几个信息.
1. 再来一单的功能在订单列表或者订单详细里面,或者在支付成功里面存在.
2. 用户点击"再来一单"是把商品加入购物车
3. 目的是通过加入购物车这个快捷的方法来促进用户再次下单,方便与快捷.
那么简约的流程图为:

对此基本流程图,我有了以下的思考:
什么是再来一单?
2. 为什么要做再来一单?
3. 怎么做在来一单?业务逻辑如何判断与处理呢?
4. 最终的代码与实战如何呢?
1. 什么是再来一单呢?
说明:再来一单是根据人类的惯性以及惰性,对已经购买了的产品希望再次方便的下单的一个过程。
2. 为什么要做再来一单?
说明:方便,快捷的服务用户,无论是TOB 还是TOC的用户群体,再来一单有一个非常快捷与高效的功能点击,在促进购买力方面有非常显著的特点与点击量.
3. 怎么做再来一单呢? 业务逻辑如何判断与处理呢?
说明:通过上面分析,我们发现再来一单的功能有如下几个特点:
1. 再来一单的功能在订单列表或者订单详细里面,或者在支付成功里面存在.
2. 用户点击"再来一单"是把商品加入购物车
3. 目的是通过加入购物车这个快捷的方法来促进用户再次下单,方便与快捷.
由于”再来一单“存在任何订单里面,可能有些时间比较长的历史订单,再点击加入购物车以及跳转到购物车的页面中的时候,会出现商品已经下架,商品
价格已经变动等等情况,那么这个时候业务应该如何进行判断与处理呢?
先看下基本的流程图:

其实最核心的判断是三点:
1. 判断商品是否下架。下架的商品简单粗暴的解决,不显示。或者加入购物车的时候,显示商品下架。
2. 判断商品价格是否有改动,不管是否有改动,都需要去获取最新的价格.,这里可以做得比较好的就是把原来的价格进行比较,说明是降价与涨价.
3. 判断是否商品还有库存,没有库存也可以加到商品缺少库存的提醒中,但是不可用作为提交订单的依据。
4. 最终的代码与实战如何呢?
/**
* 再来一单
* @param userId
* @param orderId
*/
@Override
public void copyOrderToCart(Integer userId, Integer orderId) throws ServiceException
{
List<OrderGoods> orderGoodsList = orderGoodsService.getListOrderGoodsByOrderId(orderId); if(CollectionUtils.isEmpty(orderGoodsList))
{
throw new ServiceException(ServiceExceptionCode.PARAM_INVALID.getCode(), "再来一单商品列表不能为空");
} List<Cart> resultCartList = new ArrayList<Cart>();
for(OrderGoods orderGoods : orderGoodsList)
{
//判断商品是否可以购买
Goods goods = goodsService.findById(orderGoods.getGoodsId()); //对象不为空,而且商品在售
if (goods != null && goods.getOnSale())
{
//判断购物车中是否存在此规格商品
Cart existCart = queryExist(goods.getId(), userId);
if (existCart == null)
{
//取得规格的信息,判断规格库存
Cart cart = new Cart();
cart.setUserId(userId);
cart.setGoodsId(orderGoods.getGoodsId());
cart.setGoodsSn(orderGoods.getGoodsSn());
cart.setGoodsName(orderGoods.getGoodsName());
cart.setPicUrl(orderGoods.getPicUrl());
cart.setChecked(true);
cart.setNumber(orderGoods.getNumber());
cart.setPrice(orderGoods.getPrice());
cart.setAddTime(LocalDateTime.now());
cart.setUpdateTime(LocalDateTime.now());
cart.setDeleted(false);
resultCartList.add(cart);
} else
{
//取得商品的库存
int num = existCart.getNumber() + orderGoods.getNumber();
if (num <= orderGoods.getNumber())
{
//如果库存够,更新购物车
existCart.setNumber(num);
cartMapper.updateCart(existCart);
}
}
}
} if(CollectionUtils.isNotEmpty(resultCartList))
{
//批量新增加
cartMapper.batchAddCart(resultCartList);
}
}
相关规则总结如下:
1、买家端小程序订单列表和详情符合条件的订单增加“再来一单”,支持一键把订单中的商品加入购物车;
2、目前支持再来一单的商品为实物商品类型的普通订单,周期购、拼团等营销活动订单不支持;
3、“再来一单”按钮位置根据对应订单状态,根据各操作按钮优先等级排列;
4、点击“再来一单”,把当前订单中的商品批量加入购物车,商品规格、数量、商品留言等信息取当前订单的设置;
5、如果原来购物车中已经有相同商品,“再来一单”不对原商品做删除,在数量上会叠加;
6、点击再来一单时,商品价格、规格信息可能已经发生变更,点击“再来一单”,重新校验,所有营销活动的价格计算目前仅支持限时折扣、自定义会员价、会员折扣;
7、点击再来一单时,如果商品留言字段有增减,会重新校验,不符合条件的商品会提示不支持再来一单;
8、多件商品批量再来一单,如果有部分商品不支持,则会把支持的商品加入购物车,不支持的给出提示。
共同学习QQ群:793305035
Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序)的更多相关文章
- Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析
Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析 生鲜电商搜索引擎的特点 众所周知,标准的搜索引擎主要分成三个大的部分,第一步是爬虫系统,第二步是数据分析,第三步才 ...
- Java开源生鲜电商平台-财务系统模块的设计与架构(源码可下载)
Java开源生鲜电商平台-财务系统模块的设计与架构(源码可下载) 前言:任何一个平台也好,系统也好,挣钱养活团队这个是无可厚非的,那么对于一个生鲜B2B平台盈利模式( 查看:http://www.cn ...
- Java生鲜电商平台-电商虚拟币的充值与消费思考
Java生鲜电商平台-电商虚拟币的充值与消费思考 项目背景 最近由于项目业务原因,需要为系统设计虚拟币的充值及消费功能.公司内已经有成熟的支付网关服务,所以重点变成了如何设计项目内虚拟币的充值流程,让 ...
- Java生鲜电商平台-电商起送价的深入思考与实战
Java生鲜电商平台-电商起送价的深入思考与实战 说明:在生鲜电商中,起送价是一个非常普遍的话题,今天我们就用实战来告诉大家,如何设置起送价,如何编写起送价的代码,以及如何同步起送价. 在开始题目之前 ...
- Java生鲜电商平台-电商系统性能指标
Java生鲜电商平台-电商系统性能指标 1.响应时间和吞吐量 根据应用程序的响应时间可以知道程序完成传输数据所用的时间.也可以从HTTP请求级别,或者成为数据库级别来看.对那些缓慢的查询你需要做一些优 ...
- Java生鲜电商平台-电商数据运营统计与分析
Java生鲜电商平台-电商数据运营统计与分析 今天分享将会分为以下几个方面来阐述: 1. 作为运营我们需要统计与分析的几个核心数据是什么? 2. 核心数据对业务的指导价值在哪里呢? 3. 作为产品PM ...
- Java生鲜电商平台-电商订单系统全解析
Java生鲜电商平台-电商订单系统全解析 说明:Java生鲜电商平台-电商订单系统全解析主要讲解OMS的内容,设计,开发,架构等知识. 今天分享将会分为以下三个环节来阐述: 1.订单系统的介绍 2.订 ...
- Java生鲜电商平台-电商会员体系系统的架构设计与源码解析
Java生鲜电商平台-电商会员体系系统的架构设计与源码解析 说明:Java生鲜电商平台中会员体系作为电商平台的基础设施,重要性不容忽视.我去年整理过生鲜电商中的会员系统,但是比较粗,现在做一个最好的整 ...
- Java生鲜电商平台-电商支付流程架构实战
Java生鲜电商平台-电商支付流程架构实战 说明:我一直秉承的就是接地气的业务架构实战.我的文章都有一个这样的核心. 1. 业务场景 2. 解决问题. 3.代码实现. 4.代码重构. 5.总结与复盘. ...
随机推荐
- 创建SpringMVC项目过程
1.导入对应jar包 <properties> <spring.version>5.0.2.RELEASE</spring.version> </proper ...
- Golang 使用Protocol Buffer 案例
目录 1. 前言 2. Protobuf 简介 2.1 Protobuf 优点 2.2 Protobuf 缺点 2.3 Protobuf Golang 安装使用 3. Protobuf 通讯案例 3. ...
- Deepin环境下启动Pycharm没有启动图标解决办法
小伙伴们在deepin下运行pycharm时,是不是需要通过sh文件启动? 下面告诉大家如何将pycharm图标放在桌面上: 1.在桌面打开终端,输入命令: sudo gedit /usr/share ...
- XCTF---easyjava的WriteUp
一.题目来源 题目来源:XCTF题库安卓区easyjava 题目下载链接:下载地址 二.解题过程 1.将该apk安装进夜神模拟器中,发现有一个输入框和一个按钮,随便输入信息,点 ...
- 数据结构 4 时间复杂度、B-树 B+树 具体应用与理解
前言 面试中,经常会问到有关于MYSQL 索引的相关概念,我们之前也都学过有关树的概念.以及二叉树.二叉查找树.红黑树等.这一节,来关注经常是数据库索引中使用的B-树 在说这些之前,我们需要了解时间复 ...
- Fortify Audit Workbench 笔记 Cross-Site Scripting-Persistent
Cross-Site Scripting: Persistent Abstract 向 Web 浏览器发送非法数据会导致浏览器执行恶意代码. Explanation Cross-Site Script ...
- java中的对象 方法 引用 等一些抽象的概念是什么意思呢?
2020-03-14 最近这一段时间有点忙,好久都没有更新博客了,之后我会一直坚持下去的,和大家一同进步的. 这段时间一直在学java,相信刚开始学习java的小白,刚开始接触那么些抽象的概念一定和我 ...
- flask 密码加密 视频资料
https://www.bilibili.com/video/av53870541/?p=33 通过在数据模型中定义函数来实现加密 from werkzeug.security import gene ...
- C++结构体和类的区别总结及各自优缺点
结构体在栈里.而类在堆里. 结构体为值类型.而类是引用类型 结构体不能被继承,而类可以. 结构体无构造函数 类可以定义虚函数,而结构体不行. 结构在数据参数方面效率更高,简单数组的应用中成本很低.而类 ...
- ES6 第七节 ES6中新增的数组知识(1)
目录 ES6 第七节 ES6中新增的数组知识(1) 第七节 ES6中新增的数组知识(1) JSON数组格式转换 Array.of()方法: find()实例方法: ES6 第七节 ES6中新增的数组知 ...