基于Springboot+vue前后端分离商城项目基本开发手册——接口设计【四】

本文详细介绍了基于Springboot+Vue的商城项目接口设计,涵盖购物车、订单确认、提交订单和支付流程。购物车设计涉及商品、SKU、店铺和用户关联;订单设计包括确认订单的地址选择、价格计算,以及支付环节的订单提交和支付回调。接口设计注重解耦和安全性,使用事件驱动进行模块间交互,并通过数据库乐观锁防止超卖。
摘要由CSDN通过智能技术生成

必读

购物车的设计

订单设计-确认订单

订单设计-提交订单

订单设计-支付

 

这里只有几点说明:

  1. 这里写的是接口设计,如果你整个接口的接口文档,只需要启动api这个项目,然后访问 http://localhost:8086/doc.html

  2. 这里写的是如何设计,我们就不水接口文档几十页了好吧。

  3. 我们说了数据库基于b2b2c其实接口也是基于b2b2c,所以你才会在很多的接口的当中看到很多的shop_id

  4. b2b2c和b2c的接口设计,很多情况下,也就是多了一个shop_id而已。

 

购物车的设计

建议阅读前,先阅读《商城表设计-购物车》相关文档

我们的购物车只有一个表:tz_basket 非常简单,但是关联了非常多的表。比如:

  • 购物车有商品,关联商品表
  • 每个商品都有sku,关联sku表
  • 一个购物车有多个店铺的商品,关联店铺表
  • 一个购物车肯定是和用户有关的,关联用户表

我们对商品进行添加,修改,其实都很简单,最为让人难以理解的是如何将这些字段进行组合,关联满减满折等一系列的活动。

我们先来看下是如何获取商品信息的

    @PostMapping("/info")
    @ApiOperation(value = "获取用户购物车信息", notes = "获取用户购物车信息,参数为用户选中的活动项数组,以购物车id为key")
    public ResponseEntity<List<ShopCartDto>> info(@RequestBody Map<Long, ShopCartParam> basketIdShopCartParamMap) {
        String userId = SecurityUtils.getUser().getUserId();

        // 更新购物车信息,
        if (MapUtil.isNotEmpty(basketIdShopCartParamMap)) {
            basketService.updateBasketByShopCartParam(userId, basketIdShopCartParamMap);
        }

        // 拿到购物车的所有item
        List<ShopCartItemDto> shopCartItems = basketService.getShopCartItems(userId);
        return ResponseEntity.ok(basketService.getShopCarts(shopCartItems));

    }

这里面传了一个参数:Map<Long, ShopCartParam> basketIdShopCartParamMap 这里是当用户改变了某件商品的满减满折活动时,重新改变满减满折信息以后计算加个的一个方法。当然在开源是没有这个满减模块的,只有思路,具体实现需要靠自己了。

我们继续往下看,这里面basketService.getShopCartItems(userId)使用的直接是从数据库中获取的数据,而真正对满减满折、店铺等进行排列组合的,在于basketService.getShopCarts(shopCartItems) 这个方法。

我们进到getShopCarts方法内部,可以查看到一行代码applicationContext.publishEvent(new ShopCartEvent(shopCart, shopCartItemDtoList));,这里使用的事件的模式。这个事件的主要作用是用于对模块之间的解耦,比如我们清楚的知道当购物车需要计算价格的时候,需要满减模块的配合,进行“装饰”。最后将装饰回来的东西,返回给前端。

我们现在看看购物车返回的数据ResponseEntity<List<ShopCartDto>>,我们清楚一个购物车是分多个店铺的,每一个店铺就是一个ShopCartDto,我们看下这个bean

@Data
public class ShopCartDto implements Serializable {

   @ApiModelProperty(value = "店铺ID", required = true)
   private Long shopId;

   @ApiModelProperty(value = "店铺名称", required = true)
   private String shopName;

   @ApiModelProperty(value = "购物车满减活动携带的商品", required = true)
   private List<ShopCartItemDiscountDto> shopCartItemDiscounts;

}

其实一个店铺下面是有多个商品的,但是根据京东的划分,每当有满减之类的活动时,满减活动的商品总是要归到一类的,所以,每个店铺下面是多个满减活动(List<ShopCartItemDiscountDto>),满减活动下面是多个商品(购物项List<ShopCartItemDto>),到此你就能明白了ShopCartItemDiscountDto 里面的ChooseDiscountItemDto 是什么东西了,这个是选中的满减项。

public class ShopCartItemDiscountDto implements Serializable {

    @ApiModelProperty(value = "已选满减项", required = true)
    private ChooseDiscountItemDto chooseDiscountItemDto;

    @ApiModelProperty(value = "商品列表")
    private List<ShopCartItemDto> shopCartItems;
}

我们再留意ShopCartItemDto 这个bean ,发现还有这个东西:

@ApiModelProperty("参与满减活动列表")
private List<DiscountDto> discounts = new ArrayList<>();

其实购物车的每个购物项,都是有很多个满减的活动的,可以自主选择满减活动,然后进行组合,生成新的优惠。而在这选择新的活动类型时ÿ

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个完整的外卖系统,包括手机端,后台管理,api 基于spring boot和vue前后端分离的外卖系统 包含完整的手机端,后台管理功能 技术选型 核心框架:Spring Boot 数据库层:Spring data jpa/Spring data mongodb 数据库连接池:Druid 缓存:Ehcache 端:Vue.js 数据库:mysql5.5以上,Mongodb4.0(不要使用最新版4.2) 模块 flash-waimai-mobile 手机端站点 flash-waimai-manage后台管理系统 flash-waimai-api java接口服务 flash-waimai-core 底层核心模块 flash-waimai-generate 代码生成模块 快速开始 数据存储采用了mysql和mongodb,其中基础管理配置功能数据使用mysql,业务数据使用mongodb存储。 创建mysql数据库 CREATE DATABASE IF NOT EXISTS waimai DEFAULT CHARSET utf8 COLLATE utf8_general_ci; CREATE USER 'waimai'@'%' IDENTIFIED BY 'waimai123'; GRANT ALL privileges ON waimai.* TO 'waimai'@'%'; flush privileges; mysql数据库创建好了之后,启动flash-waimai-api服务,会自动初始化数据,无需开发人员自己手动初始化数据 安装mongodb并创建数据库:flash-waimai 使用mongorestore命令 导入mongodb数据,由于测试数据量较大,打包放在了百度云盘:链接:https://pan.baidu.com/s/1mfO7yckFL7lMb_O0BPsviw 提取码:apgd 下载后将文件解压到d:\elm,如下命令导入数据: mongorestore.exe -d flash-waimai d:\\elm 下载项目测试数据的图片(商家和食品图片):链接:https://pan.baidu.com/s/1rvZDspoapWa6rEq2D_5kzw 提取码:urzw ,将图片存放到t_sys_cfg表中system.file.upload.path配置的目录下 启动管理平台:进入flash-waimai-manage目录:运行 npm install --registry=https://registry.npm.taobao.org运行npm run dev启动成功后访问 http://localhost:9528 ,登录,用户名密码:admin/admin 启动手机端:进入flash-waimai-mobile目录:运行 npm install --registry=https://registry.npm.taobao.org运行npm run local启动成功后访问 http://localhost:8000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值