后端:删除购物车模块,合并到订单模块

后端:设计订单价格计算相关方法
This commit is contained in:
YunaiV
2019-04-09 23:39:38 +08:00
parent 6eda8734a6
commit 3e485c2d0f
32 changed files with 535 additions and 413 deletions

View File

@@ -0,0 +1,99 @@
package cn.iocoder.mall.order.api;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.order.api.bo.CartBO;
import cn.iocoder.mall.order.api.bo.CartItemBO;
import cn.iocoder.mall.order.api.bo.OrderCreateBO;
import org.springframework.lang.Nullable;
import java.util.List;
public interface CartService {
// ========== 购物车 Item 的逻辑 ==========
/**
* 添加商品至购物车
*
* @param userId 用户编号
* @param skuId 商品 SKU 编号
* @param quantity 数量
* @return 是否成功
*/
CommonResult<Boolean> add(Integer userId, Integer skuId, Integer quantity);
/**
* 购物车更新商品数量
*
* @param userId 用户编号
* @param skuId 商品 SKU 编号
* @param quantity 数量
* @return 是否成功
*/
CommonResult<Boolean> updateQuantity(Integer userId, Integer skuId, Integer quantity);
/**
* 购物车更新商品是否选中
*
* @param userId 用户编号
* @param skuId 商品 SKU 编号
* @return 是否成功
*/
CommonResult<Boolean> updateSelected(Integer userId, Integer skuId);
/**
* 购物车删除商品
*
* @param userId 用户编号
* @param skuIds 商品 SKU 编号的数组
*
* @return 是否成功
*/
CommonResult<Boolean> delete(Integer userId, List<Integer> skuIds);
/**
* 清空购物车
*
* @param userId 用户编号
* @return 是否成功
*/
CommonResult<Boolean> deleteAll(Integer userId);
/**
* 查询用户在购物车中的商品数量
*
* @param userId 用户编号
* @return 商品数量
*/
CommonResult<Integer> count(Integer userId, String nobody, Integer shopId);
/**
* 显示买家购物车中的商品列表,并根据 selected 进行过滤。
*
* @param userId 用户编号
* @param selected 是否选中。若为空,则不进行筛选
* @return 购物车中商品列表信息
*/
List<CartItemBO> list(Integer userId, @Nullable Boolean selected);
// ========== 购物车与订单相关的逻辑 ==========
/**
* 获得购物车明细
*
* TODO 芋艿,可能放在 Controller 更合适
*
* @param userId 用户编号
* @return 购物车明细
*/
CommonResult<CartBO> details(Integer userId);
/**
* 基于购物车创建订单
*
* @param userId 用户编号
* @return 订单信息
*/
CommonResult<OrderCreateBO> createOrder(Integer userId);
}

View File

@@ -1,10 +1,7 @@
package cn.iocoder.mall.order.api;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.order.api.bo.OrderCreateBO;
import cn.iocoder.mall.order.api.bo.OrderItemBO;
import cn.iocoder.mall.order.api.bo.OrderPageBO;
import cn.iocoder.mall.order.api.bo.OrderRecipientBO;
import cn.iocoder.mall.order.api.bo.*;
import cn.iocoder.mall.order.api.dto.*;
import java.util.List;
@@ -41,6 +38,14 @@ public interface OrderService {
*/
CommonResult<OrderRecipientBO> getOrderRecipientBO(Integer orderId);
/**
* 计算订单金额,返回计算结果
*
* @param calcOrderPriceDTO 计算订单金额 DTO
* @return 计算订单金额结果
*/
CalcOrderPriceBO calcOrderPrice(CalcOrderPriceDTO calcOrderPriceDTO);
/**
* 订单 - 创建
*

View File

@@ -0,0 +1,99 @@
package cn.iocoder.mall.order.api.bo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 计算订单价格结果 BO
*/
@Data
@Accessors(chain = true)
public class CalcOrderPriceBO {
/**
* 商品分组数组
*/
private List<ItemGroup> itemGroups;
/**
* 邮费信息
*/
private Postage postage;
/**
* 费用
*/
private Fee fee;
/**
* 商品分组
*
* 多个商品,参加同一个活动,从而形成分组。
*/
@Data
@Accessors(chain = true)
public static class ItemGroup {
// TODO 优惠活动
private Object activity;
/**
* 商品数组
*/
private List<Item> items;
}
@Data
@Accessors(chain = true)
public static class Item {
// TODO 信息要相当完整
}
/**
* 费用(合计)
*/
@Data
@Accessors(chain = true)
public static class Fee {
/**
* 总价
*/
private Integer originalTotal;
/**
* 优惠总价
*
* 注意,满多少元包邮,不算在优惠中。
*/
private Integer discountTotal;
/**
* 邮费
*/
private Integer postageTotal;
/**
* 最终价格
*
* 计算公式 = 总价 - 优惠总价 + 邮费
*/
private Integer presentTotal;
}
/**
* 邮费信息
*/
@Data
@Accessors(chain = true)
public static class Postage {
/**
* 需要满足多少钱,可以包邮。单位:分
*/
private Integer threshold;
}
}

View File

@@ -0,0 +1,24 @@
package cn.iocoder.mall.order.api.bo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 购物车明细 BO
*/
@Data
@Accessors(chain = true)
public class CartBO {
/**
* 商品分组数组
*/
private List<CartItemGroupBO> itemGroups;
/**
* 费用
*/
private FeeMessageBO fee;
}

View File

@@ -0,0 +1,15 @@
package cn.iocoder.mall.order.api.bo;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 购物车的商品信息 DO
*/
@Data
@Accessors(chain = true)
public class CartItemBO {
}

View File

@@ -0,0 +1,21 @@
package cn.iocoder.mall.order.api.bo;
import java.util.List;
/**
* 商品分组 BO
*
* 主要目的是,多个商品,
*/
public class CartItemGroupBO {
/**
* TODO 芋艿,活动
*/
private Object activity;
/**
* 商品数组
*/
private List<CartItemBO> items;
}

View File

@@ -0,0 +1,4 @@
package cn.iocoder.mall.order.api.bo;
public class FeeDetailBO {
}

View File

@@ -0,0 +1,26 @@
package cn.iocoder.mall.order.api.bo;
public class FeeMessageBO {
/**
* 总价
*/
private Integer originalTotal;
/**
* 优惠总价
*
* 注意,满多少元包邮,不算在优惠中。
*/
private Integer discountTotal;
/**
* 邮费
*/
private Integer postageTotal;
/**
* 最终价格
*
* 计算公式 = 总价 - 优惠总价 + 邮费
*/
private Integer presentTotal;
}

View File

@@ -0,0 +1,19 @@
package cn.iocoder.mall.order.api.bo;
import java.util.List;
/**
* 商家商品分组
*/
public class MerchantItemGroup {
/**
* 商品分组数组
*/
private List<CartItemGroupBO> itemGroups;
/**
* 运费详情
*/
private PostageDetailBO postageDetail;
}

View File

@@ -0,0 +1,14 @@
package cn.iocoder.mall.order.api.bo;
public class PostageDetailBO {
// "description": "有品甄选商品即有品配送和第三方商家发货的商品2018年1月1日起单笔订单满99元免运费不满99元收10元运费。",
// "leftTotal": "0.00",
// "merchantName": "有品配送",
// "postFee": "0.00",
// "postage": "10.00",
// "postageType": 0,
// "selCount": 14,
// "threshold": "99.00"
}

View File

@@ -0,0 +1,41 @@
package cn.iocoder.mall.order.api.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 计算订单价格 DTO
*/
@Data
@Accessors(chain = true)
public class CalcOrderPriceDTO {
/**
* 商品数组
*/
private List<Integer> items;
@Data
@Accessors(chain = true)
private static class Item {
/**
* SKU 编号
*/
private Integer skuId;
/**
* 数量
*/
private Integer quantity;
/**
* 是否选中
*
* 注意下,目前只有在购物车的时候,才可能出现该属性为 false 。其它情况下,都会为 true 为主。
*/
private Boolean selected;
}
}