mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2025-01-18 19:20:05 +08:00
【代码评审】商城:积分商城的下单流程
This commit is contained in:
parent
ce367d99a9
commit
e604cba3bf
@ -73,12 +73,11 @@ public class AppPointActivityController {
|
||||
|
||||
// 2. 拼接数据
|
||||
List<PointProductDO> products = pointActivityService.getPointProductListByActivityIds(Collections.singletonList(id));
|
||||
AppPointActivityDetailRespVO respVO = BeanUtils.toBean(activity, AppPointActivityDetailRespVO.class);
|
||||
// 设置 product 信息
|
||||
respVO.setProducts(BeanUtils.toBean(products, AppPointActivityDetailRespVO.Product.class));
|
||||
PointProductDO minProduct = getMinPropertyObj(products, PointProductDO::getPoint);
|
||||
PointProductDO minProduct = getMinObject(products, PointProductDO::getPoint);
|
||||
assert minProduct != null;
|
||||
respVO.setPoint(minProduct.getPoint()).setPrice(minProduct.getPrice());
|
||||
AppPointActivityDetailRespVO respVO = BeanUtils.toBean(activity, AppPointActivityDetailRespVO.class)
|
||||
.setProducts(BeanUtils.toBean(products, AppPointActivityDetailRespVO.Product.class))
|
||||
.setPoint(minProduct.getPoint()).setPrice(minProduct.getPrice());
|
||||
return success(respVO);
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,7 @@ public class AppPointActivityDetailRespVO {
|
||||
@Schema(description = "商品信息数组", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private List<Product> products;
|
||||
|
||||
//======================= 显示所需兑换积分最少的 sku 信息 =======================
|
||||
//======================= 显示所需兑换积分最少的 SKU 信息 =======================
|
||||
|
||||
@Schema(description = "兑换积分", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Integer point;
|
||||
|
@ -116,7 +116,7 @@ public interface TradeOrderQueryService {
|
||||
* @param activityId 活动编号
|
||||
* @return 秒杀商品数量
|
||||
*/
|
||||
int getActivityProductCount(Long userId, Long activityId);
|
||||
int getSeckillProductCount(Long userId, Long activityId);
|
||||
|
||||
// =================== Order Item ===================
|
||||
|
||||
|
@ -174,7 +174,7 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getActivityProductCount(Long userId, Long activityId) {
|
||||
public int getSeckillProductCount(Long userId, Long activityId) {
|
||||
// 获得订单列表
|
||||
List<TradeOrderDO> orders = tradeOrderMapper.selectListByUserIdAndSeckillActivityId(userId, activityId);
|
||||
orders.removeIf(order -> TradeOrderStatusEnum.isCanceled(order.getStatus())); // 过滤掉【已取消】的订单
|
||||
|
@ -69,7 +69,8 @@ public class TradePriceServiceImpl implements TradePriceService {
|
||||
.buildCalculateResp(calculateReqBO, spuList, skuList);
|
||||
priceCalculators.forEach(calculator -> calculator.calculate(calculateReqBO, calculateRespBO));
|
||||
// 2.2 如果最终支付金额小于等于 0,则抛出业务异常
|
||||
if (calculateReqBO.getPointActivityId() == null && calculateRespBO.getPrice().getPayPrice() <= 0) {
|
||||
if (calculateReqBO.getPointActivityId() == null // 积分订单,允许支付金额为 0
|
||||
&& calculateRespBO.getPrice().getPayPrice() <= 0) {
|
||||
log.error("[calculatePrice][价格计算不正确,请求 calculateReqDTO({}),结果 priceCalculate({})]",
|
||||
calculateReqBO, calculateRespBO);
|
||||
throw exception(PRICE_CALCULATE_PAY_PRICE_ILLEGAL);
|
||||
|
@ -84,7 +84,7 @@ public class TradePointActivityPriceCalculator implements TradePriceCalculator {
|
||||
// 1. 校验是否可以参与积分商城活动
|
||||
PointValidateJoinRespDTO pointValidateJoinRespDTO = pointActivityApi.validateJoinPointActivity(activityId, skuId, count);
|
||||
// 2. 校验总限购数量,目前只有 trade 有具体下单的数据,需要交给 trade 价格计算使用
|
||||
int activityProductCount = tradeOrderQueryService.getActivityProductCount(userId, activityId);
|
||||
int activityProductCount = tradeOrderQueryService.getSeckillProductCount(userId, activityId);
|
||||
if (activityProductCount + count > pointValidateJoinRespDTO.getCount()) {
|
||||
throw exception(PRICE_CALCULATE_POINT_TOTAL_LIMIT_COUNT);
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ public class TradeSeckillActivityPriceCalculator implements TradePriceCalculator
|
||||
// 1. 校验是否可以参与秒杀
|
||||
SeckillValidateJoinRespDTO seckillActivity = seckillActivityApi.validateJoinSeckill(activityId, skuId, count);
|
||||
// 2. 校验总限购数量,目前只有 trade 有具体下单的数据,需要交给 trade 价格计算使用
|
||||
int seckillProductCount = tradeOrderQueryService.getActivityProductCount(userId, activityId);
|
||||
int seckillProductCount = tradeOrderQueryService.getSeckillProductCount(userId, activityId);
|
||||
if (seckillProductCount + count > seckillActivity.getTotalLimitCount()) {
|
||||
throw exception(PRICE_CALCULATE_SECKILL_TOTAL_LIMIT_COUNT);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user