• Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序)


    Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序)

    说明:在实际的业务场景中(无论是TO B还是TO C)不管是休闲食品、餐饮、水果、日用百货、母婴等高频购买行业,还是其他行业,“再来一单”都能够大大缩短买家再次下单的流程,促进转化。

    于是就有了针对生鲜电商平台的“再来一单”功能,买家只要在订单列表、订单详情或者支付成功中点击“再来一单”,就可以把订单中的商品再次加入购物车,方便快捷,高效.

             

             上面的话可以总结出来"再来一单“以下几个信息.

             1. 再来一单的功能在订单列表或者订单详细里面,或者在支付成功里面存在.

             2. 用户点击"再来一单"是把商品加入购物车

             3. 目的是通过加入购物车这个快捷的方法来促进用户再次下单,方便与快捷.  

        

             那么简约的流程图为: 

          

    对此基本流程图,我有了以下的思考:

    1. 什么是再来一单?

             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

             

     

  • 相关阅读:
    前端面试常考知识点---CSS
    vue中的适配:px2rem
    判断DOM元素是否出现再浏览器窗口中
    前端构建:3类13种热门工具的选型参考
    webpack4 中的最新 React全家桶实战使用配置指南!
    [C++] 自动关闭右下角弹窗
    Java RandomAccessFile用法(转载)
    Java Annotation详解(二): 反射和Annotation
    Java Annotation详解(一): 理解和使用Annotation
    Java反射机制(五):使用反射增强简单工厂设计模式
  • 原文地址:https://www.cnblogs.com/jurendage/p/12627953.html
Copyright © 2020-2023  润新知