7.1 修复一些bug、补充功能

This commit is contained in:
zhangsan 2025-07-01 13:22:38 +08:00
parent bf96839cae
commit 16433ffdc2
4 changed files with 31 additions and 8 deletions

View File

@ -1,22 +1,30 @@
package edu.whut.domain.activity.service.discount; package edu.whut.domain.activity.service.discount;
import edu.whut.domain.activity.adapter.repository.IActivityRepository;
import edu.whut.domain.activity.model.valobj.DiscountTypeEnum; import edu.whut.domain.activity.model.valobj.DiscountTypeEnum;
import edu.whut.domain.activity.model.valobj.GroupBuyActivityDiscountVO; import edu.whut.domain.activity.model.valobj.GroupBuyActivityDiscountVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.math.BigDecimal; import java.math.BigDecimal;
/** /**
* 折扣计算服务抽象类 * 折扣计算服务抽象类
*/ */
@RequiredArgsConstructor
@Slf4j
public abstract class AbstractDiscountCalculateService implements IDiscountCalculateService { public abstract class AbstractDiscountCalculateService implements IDiscountCalculateService {
final protected IActivityRepository repository;
@Override @Override
public BigDecimal calculate(String userId, BigDecimal originalPrice, GroupBuyActivityDiscountVO.GroupBuyDiscount groupBuyDiscount) { public BigDecimal calculate(String userId, BigDecimal originalPrice, GroupBuyActivityDiscountVO.GroupBuyDiscount groupBuyDiscount) {
// 1. 人群标签过滤, 只有当 discountType = TAG 时才检查用户是否在标签范围内 // 1. 人群标签过滤, 只有当 discountType = TAG 时才检查用户是否在标签范围内
if (DiscountTypeEnum.TAG.equals(groupBuyDiscount.getDiscountType())){ if (DiscountTypeEnum.TAG.equals(groupBuyDiscount.getDiscountType())){
boolean isCrowdRange = filterTagId(userId, groupBuyDiscount.getTagId()); boolean isCrowdRange = filterTagId(userId, groupBuyDiscount.getTagId());
if (!isCrowdRange) return originalPrice; // 不在标签范围 无优惠 if (!isCrowdRange) {
log.info("折扣优惠计算拦截,用户不再优惠人群标签范围内 userId:{}", userId);
return originalPrice;
}
} }
// 2. 折扣优惠计算 // 2. 折扣优惠计算
return doCalculate(originalPrice, groupBuyDiscount); return doCalculate(originalPrice, groupBuyDiscount);
@ -24,8 +32,7 @@ public abstract class AbstractDiscountCalculateService implements IDiscountCalcu
// 人群过滤 - 限定人群优惠 // 人群过滤 - 限定人群优惠
private boolean filterTagId(String userId, String tagId) { private boolean filterTagId(String userId, String tagId) {
return repository.isTagCrowdRange(tagId, userId);
return true;
} }
//留给子类实现的抽象方法真正去算直减多少 / 满减多少 / N 元购 //留给子类实现的抽象方法真正去算直减多少 / 满减多少 / N 元购
protected abstract BigDecimal doCalculate(BigDecimal originalPrice, GroupBuyActivityDiscountVO.GroupBuyDiscount groupBuyDiscount); protected abstract BigDecimal doCalculate(BigDecimal originalPrice, GroupBuyActivityDiscountVO.GroupBuyDiscount groupBuyDiscount);

View File

@ -98,9 +98,9 @@ public class MarketNode extends AbstractGroupBuyMarketSupport<MarketProductEntit
} }
// 折扣价格 // 折扣价格
BigDecimal deductionPrice = discountCalculateService.calculate(requestParameter.getUserId(), skuVO.getOriginalPrice(), groupBuyDiscount); BigDecimal payPrice = discountCalculateService.calculate(requestParameter.getUserId(), skuVO.getOriginalPrice(), groupBuyDiscount);
//设置折扣价格到上下文中 dynamicContext.setDeductionPrice(skuVO.getOriginalPrice().subtract(payPrice));
dynamicContext.setDeductionPrice(deductionPrice); dynamicContext.setPayPrice(payPrice);
return router(requestParameter, dynamicContext); return router(requestParameter, dynamicContext);
} }

View File

@ -21,6 +21,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.Objects; import java.util.Objects;
@ -41,7 +42,7 @@ import java.util.Objects;
@RestController @RestController
@CrossOrigin("*") @CrossOrigin("*")
@RequiredArgsConstructor @RequiredArgsConstructor
@RequestMapping("/api/v1/gbm/trade/") @RequestMapping("/api/v1/gbm/trade")
public class MarketTradeController implements IMarketTradeService { public class MarketTradeController implements IMarketTradeService {
private final IIndexGroupBuyMarketService indexGroupBuyMarketService; private final IIndexGroupBuyMarketService indexGroupBuyMarketService;
@ -54,6 +55,7 @@ public class MarketTradeController implements IMarketTradeService {
* @param lockMarketPayOrderRequestDTO 请求参数 * @param lockMarketPayOrderRequestDTO 请求参数
* @return 统一响应结果 * @return 统一响应结果
*/ */
@PostMapping("/lock_market_pay_order")
@Override @Override
public Response<LockMarketPayOrderResponseDTO> lockMarketPayOrder(LockMarketPayOrderRequestDTO lockMarketPayOrderRequestDTO) { public Response<LockMarketPayOrderResponseDTO> lockMarketPayOrder(LockMarketPayOrderRequestDTO lockMarketPayOrderRequestDTO) {
try { try {
@ -108,6 +110,15 @@ public class MarketTradeController implements IMarketTradeService {
.goodsId(goodsId) .goodsId(goodsId)
.activityId(activityId) .activityId(activityId)
.build()); .build());
// 人群限定
if (!trialBalance.getIsVisible() || !trialBalance.getIsEnable()){
return Response.<LockMarketPayOrderResponseDTO>builder()
.code(ResponseCode.E0007.getCode())
.info(ResponseCode.E0007.getInfo())
.build();
}
//获取拼团活动配置信息 //获取拼团活动配置信息
GroupBuyActivityDiscountVO discountVO = trialBalance.getGroupBuyActivityDiscountVO(); GroupBuyActivityDiscountVO discountVO = trialBalance.getGroupBuyActivityDiscountVO();
@ -129,6 +140,7 @@ public class MarketTradeController implements IMarketTradeService {
.goodsName(trialBalance.getGoodsName()) .goodsName(trialBalance.getGoodsName())
.originalPrice(trialBalance.getOriginalPrice()) .originalPrice(trialBalance.getOriginalPrice())
.deductionPrice(trialBalance.getDeductionPrice()) .deductionPrice(trialBalance.getDeductionPrice())
.payPrice(trialBalance.getPayPrice())
.outTradeNo(outTradeNo) .outTradeNo(outTradeNo)
.build()); .build());

View File

@ -19,6 +19,10 @@ public enum ResponseCode {
E0004("E0004", "拼团活动切量拦截"), E0004("E0004", "拼团活动切量拦截"),
E0005("E0005", "拼团组队失败记录更新为0"), E0005("E0005", "拼团组队失败记录更新为0"),
E0006("E0006", "拼团组队完结,锁单量已达成"), E0006("E0006", "拼团组队完结,锁单量已达成"),
E0007("E0007", "拼团人群限定,不可参与"),
E0101("E0101", "拼团活动未生效"),
E0102("E0102", "不在拼团活动有效时间内"),
E0103("E0103", "当前用户参与此拼团次数已达上限"),
; ;
private String code; private String code;