review 拼团、秒杀活动的实现

This commit is contained in:
YunaiV
2023-07-26 19:09:47 +08:00
parent e2ed0b7afb
commit b84f7825c5
46 changed files with 197 additions and 147 deletions

View File

@@ -21,13 +21,15 @@ public class TradeOrderDeliveryReqVO {
@NotNull(message = "发货类型不能为空")
private Integer type;
// TODO @puhui999还是要校验下
@Schema(description = "发货物流公司编号", example = "1")
private Long logisticsId;
@Schema(description = "发货物流单号", example = "SF123456789")
private String logisticsNo;
// TODO 订单项商品单独发货
// TODO 订单项商品单独发货;不做单独发
@Schema(description = "发货订单项", example = "[1,2,3]")
@NotNull(message = "发货订单项不能为空")

View File

@@ -108,13 +108,17 @@ public class AppTradeOrderController {
// 全部
orderCount.put("allCount", tradeOrderService.getOrderCount(getLoginUserId(), null, null));
// 待付款(未支付)
orderCount.put("unpaidCount", tradeOrderService.getOrderCount(getLoginUserId(), TradeOrderStatusEnum.UNPAID.getStatus(), null));
orderCount.put("unpaidCount", tradeOrderService.getOrderCount(getLoginUserId(),
TradeOrderStatusEnum.UNPAID.getStatus(), null));
// 待发货
orderCount.put("undeliveredCount", tradeOrderService.getOrderCount(getLoginUserId(), TradeOrderStatusEnum.UNDELIVERED.getStatus(), null));
orderCount.put("undeliveredCount", tradeOrderService.getOrderCount(getLoginUserId(),
TradeOrderStatusEnum.UNDELIVERED.getStatus(), null));
// 待收货
orderCount.put("deliveredCount", tradeOrderService.getOrderCount(getLoginUserId(), TradeOrderStatusEnum.DELIVERED.getStatus(), null));
orderCount.put("deliveredCount", tradeOrderService.getOrderCount(getLoginUserId(),
TradeOrderStatusEnum.DELIVERED.getStatus(), null));
// 待评价
orderCount.put("uncommentedCount", tradeOrderService.getOrderCount(getLoginUserId(), TradeOrderStatusEnum.COMPLETED.getStatus(), false));
orderCount.put("uncommentedCount", tradeOrderService.getOrderCount(getLoginUserId(),
TradeOrderStatusEnum.COMPLETED.getStatus(), false));
return success(orderCount);
}

View File

@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
// TODO @puhui999:
/**
* 交易订单发货记录 DO
*

View File

@@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Mapper;
import java.util.List;
// TODO @puhui999应该去掉啦
/**
* 交易订单发货记录 Mapper
*

View File

@@ -180,8 +180,7 @@ public interface TradeOrderService {
TradeOrderDO getOrderByIdAndUserId(Long orderId, Long loginUserId);
/**
* 创建订单项评论
* 创建交易订单项的评价
* 创建订单项评论
*
* @param createReqVO 创建请求
* @return 得到评价 id

View File

@@ -178,7 +178,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
MemberUserRespDTO user = memberUserApi.getUser(userId);
// TODO 拼团一次应该只能选择一种规格的商品
combinationApi.createRecord(TradeOrderConvert.INSTANCE.convert(order, orderItems.get(0), createReqVO, user)
.setStatus(CombinationRecordStatusEnum.NOT_PAY.getStatus()));
.setStatus(CombinationRecordStatusEnum.WAITING.getStatus()));
}
// TODO 秒杀扣减库存是下单就扣除还是等待订单支付成功再扣除
if (ObjectUtil.equal(TradeOrderTypeEnum.SECKILL.getType(), order.getType())) {
@@ -204,23 +204,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
return address;
}
/**
* 校验活动返回订单类型
*
* @param createReqVO 请求参数
* @return 订单类型
*/
private Integer validateActivity(AppTradeOrderCreateReqVO createReqVO) {
if (createReqVO.getSeckillActivityId() != null) {
return TradeOrderTypeEnum.SECKILL.getType();
}
if (createReqVO.getCombinationActivityId() != null) {
return TradeOrderTypeEnum.COMBINATION.getType();
}
// TODO 砍价敬请期待
return TradeOrderTypeEnum.NORMAL.getType();
}
private TradeOrderDO createTradeOrder(Long userId, String clientIp, AppTradeOrderCreateReqVO createReqVO,
TradePriceCalculateRespBO calculateRespBO) {
// 用户选择物流配送的时候才需要填写收货地址
@@ -246,6 +229,23 @@ public class TradeOrderServiceImpl implements TradeOrderService {
return order;
}
/**
* 校验活动,并返回订单类型
*
* @param createReqVO 请求参数
* @return 订单类型
*/
private Integer validateActivity(AppTradeOrderCreateReqVO createReqVO) {
if (createReqVO.getSeckillActivityId() != null) {
return TradeOrderTypeEnum.SECKILL.getType();
}
if (createReqVO.getCombinationActivityId() != null) {
return TradeOrderTypeEnum.COMBINATION.getType();
}
// TODO 砍价敬请期待
return TradeOrderTypeEnum.NORMAL.getType();
}
private List<TradeOrderItemDO> createTradeOrderItems(TradeOrderDO tradeOrderDO, TradePriceCalculateRespBO calculateRespBO) {
List<TradeOrderItemDO> orderItems = TradeOrderConvert.INSTANCE.convertList(tradeOrderDO, calculateRespBO);
tradeOrderItemMapper.insertBatch(orderItems);
@@ -314,7 +314,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
// 1、拼团活动
if (ObjectUtil.equal(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) {
// 更新拼团状态 TODO puhui999订单支付失败或订单支付过期删除这条拼团记录
combinationApi.updateRecordStatusAndStartTime(order.getUserId(), order.getId(), CombinationRecordStatusEnum.ONGOING.getStatus());
combinationApi.updateRecordStatusAndStartTime(order.getUserId(), order.getId(), CombinationRecordStatusEnum.IN_PROGRESS.getStatus());
}
// TODO 芋艿:发送订单变化的消息
@@ -422,6 +422,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
orderDeliveryMapper.insertBatch(deliveryDOs);
// TODO 芋艿:发送订单变化的消息
// TODO @puhui999可以抽个 message 包,里面是 Order 所有的 message类似工作流的
// 发送站内信
// 1、构造消息
Map<String, Object> msgMap = new HashMap<>();
@@ -684,24 +685,26 @@ public class TradeOrderServiceImpl implements TradeOrderService {
@Override
public Long createOrderItemComment(AppTradeOrderItemCommentCreateReqVO createReqVO) {
Long loginUserId = getLoginUserId();
// 先通过订单项 ID 查询订单项是否存在
TradeOrderItemDO orderItemDO = getOrderItemByIdAndUserId(createReqVO.getOrderItemId(), loginUserId);
if (orderItemDO == null) {
// 先通过订单项 ID查询订单项是否存在
TradeOrderItemDO orderItem = getOrderItemByIdAndUserId(createReqVO.getOrderItemId(), loginUserId);
if (orderItem == null) {
throw exception(ORDER_ITEM_NOT_FOUND);
}
// 校验订单
TradeOrderDO orderDO = getOrderByIdAndUserId(orderItemDO.getOrderId(), loginUserId);
if (orderDO == null) {
TradeOrderDO order = getOrderByIdAndUserId(orderItem.getOrderId(), loginUserId);
if (order == null) {
throw exception(ORDER_NOT_FOUND);
}
if (ObjectUtil.notEqual(orderDO.getStatus(), TradeOrderStatusEnum.COMPLETED.getStatus())) {
if (ObjectUtil.notEqual(order.getStatus(), TradeOrderStatusEnum.COMPLETED.getStatus())) {
throw exception(ORDER_COMMENT_FAIL_STATUS_NOT_COMPLETED);
}
if (ObjectUtil.notEqual(orderDO.getCommentStatus(), Boolean.FALSE)) {
if (ObjectUtil.notEqual(order.getCommentStatus(), Boolean.FALSE)) {
throw exception(ORDER_COMMENT_STATUS_NOT_FALSE);
}
// TODO @puhui999是不是评论完要更新 status、commentStatus另外是不是上面 order 可以不校验,直接只判断 orderItem 就够;
// 对于 order 来说,就是评论完,把 order 更新完合理的 status 等字段。
ProductCommentCreateReqDTO productCommentCreateReqDTO = TradeOrderConvert.INSTANCE.convert04(createReqVO, orderItemDO);
ProductCommentCreateReqDTO productCommentCreateReqDTO = TradeOrderConvert.INSTANCE.convert04(createReqVO, orderItem);
return productCommentApi.createComment(productCommentCreateReqDTO);
}

View File

@@ -21,7 +21,7 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.PRICE_CALCULATE_PAY_PRICE_ILLEGAL;
import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.PRICE_CALCULATE_PAY_PRICE_ILLEGAL;
/**
* 价格计算 Service 实现类