后端:删除购物车模块,合并到订单模块
后端:设计订单价格计算相关方法
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
package cn.iocoder.mall.order.application.controller.users;
|
||||
|
||||
import cn.iocoder.common.framework.vo.CommonResult;
|
||||
import cn.iocoder.mall.order.api.CartService;
|
||||
import cn.iocoder.mall.order.api.OrderService;
|
||||
|
||||
public class UsersCartController {
|
||||
|
||||
// TODO 注入
|
||||
private CartService cartService;
|
||||
// TODO 注入
|
||||
private OrderService orderService;
|
||||
|
||||
public CommonResult<Object> confirmOrder() {
|
||||
// 查询购物车列表(选中的)
|
||||
// cartService.list(userId, true);
|
||||
// 查询确认订单信息的明细
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,7 +6,6 @@ import cn.iocoder.mall.order.api.bo.OrderCreateBO;
|
||||
import cn.iocoder.mall.order.api.bo.OrderPageBO;
|
||||
import cn.iocoder.mall.order.api.dto.OrderCreateDTO;
|
||||
import cn.iocoder.mall.order.api.dto.OrderQueryDTO;
|
||||
import cn.iocoder.mall.order.api.dto.OrderUserPageDTO;
|
||||
import cn.iocoder.mall.order.application.convert.OrderConvertAPP;
|
||||
import cn.iocoder.mall.order.application.po.user.OrderCreatePO;
|
||||
import cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder;
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package cn.iocoder.mall.order.application.vo;
|
||||
|
||||
public class FeeMessageVO {
|
||||
|
||||
/**
|
||||
* 总价
|
||||
*/
|
||||
private Integer originalTotal;
|
||||
/**
|
||||
* 优惠总价
|
||||
*
|
||||
* 注意,满多少元包邮,不算在优惠中。
|
||||
*/
|
||||
private Integer discountTotal;
|
||||
/**
|
||||
* 邮费
|
||||
*/
|
||||
private Integer postageTotal;
|
||||
/**
|
||||
* 最终价格
|
||||
*
|
||||
* 计算公式 = 总价 - 优惠总价 + 邮费
|
||||
*/
|
||||
private Integer presentTotal;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package cn.iocoder.mall.order.application.vo;
|
||||
|
||||
public class UsersCartItemVO {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package cn.iocoder.mall.order.application.vo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class UsersCartListVO {
|
||||
|
||||
private List<UsersCartItemVO> items;
|
||||
|
||||
private FeeMessageVO feeMessage;
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
/**
|
||||
* 订单 - 创建
|
||||
*
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package cn.iocoder.mall.order.api.bo;
|
||||
|
||||
public class FeeDetailBO {
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
package cn.iocoder.mall.order.biz.dataobject;
|
||||
|
||||
import cn.iocoder.common.framework.dataobject.BaseDO;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 购物车的商品信息
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class CartItemDO extends BaseDO {
|
||||
|
||||
// ========= 基础字段 BEGIN =========
|
||||
|
||||
/**
|
||||
* 编号,唯一自增。
|
||||
*/
|
||||
private Integer id;
|
||||
/**
|
||||
* 状态
|
||||
*
|
||||
* 1-正常
|
||||
* 2-主动删除
|
||||
* 3-下单删除
|
||||
*/
|
||||
private Integer status;
|
||||
/**
|
||||
* 商品在购物车中的删除时间
|
||||
*/
|
||||
private Date deleteTime;
|
||||
/**
|
||||
* 是否选中
|
||||
*/
|
||||
private Boolean selected;
|
||||
|
||||
// ========= 基础字段 END =========
|
||||
|
||||
// ========= 买家信息 BEGIN =========
|
||||
|
||||
/**
|
||||
* 用户编号
|
||||
*/
|
||||
private Integer userId;
|
||||
// /**
|
||||
// * 会话 key
|
||||
// */
|
||||
// private String nobody;
|
||||
|
||||
// ========= 买家信息 END =========
|
||||
|
||||
// ========= 商品信息 BEGIN =========
|
||||
|
||||
/**
|
||||
* 商品 SPU 编号
|
||||
*/
|
||||
private Integer spuId;
|
||||
/**
|
||||
* 商品 SKU 编号
|
||||
*/
|
||||
private Integer skuId;
|
||||
/**
|
||||
* 商品购买数量
|
||||
*/
|
||||
private Integer quantity;
|
||||
|
||||
// TODO 冗余字段
|
||||
|
||||
|
||||
// ========= 商品信息 END =========
|
||||
|
||||
// ========= 交易信息 BEGIN =========
|
||||
|
||||
/**
|
||||
* 订单编号
|
||||
*/
|
||||
private String orderId;
|
||||
/**
|
||||
* 订单创建时间
|
||||
*/
|
||||
private Date orderCreateTime;
|
||||
|
||||
// ========= 交易信息 BEGIN =========
|
||||
|
||||
// ========= 优惠信息 BEGIN =========
|
||||
|
||||
// /**
|
||||
// * 商品营销活动编号
|
||||
// */
|
||||
// private Integer activityId;
|
||||
// /**
|
||||
// * 商品营销活动类型
|
||||
// */
|
||||
// private Integer activityType;
|
||||
|
||||
// ========= 优惠信息 END =========
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user