新客立减 金额问题

This commit is contained in:
2025-12-10 15:27:26 +08:00
parent 2cfe13cd99
commit 6ff5436128

View File

@@ -65,7 +65,7 @@ public class MkShopConsumeDiscountRecordServiceImpl extends ServiceImpl<MkShopCo
// 随机金额概率加起来是100 // 随机金额概率加起来是100
List<MkConsumeDiscountRandom> randomList = consumeDiscountVO.getRandomDiscountList(); List<MkConsumeDiscountRandom> randomList = consumeDiscountVO.getRandomDiscountList();
if ("RANDOM".equals(consumeDiscountVO.getDiscountType()) && (randomList == null || randomList.isEmpty()) ){ if ("RANDOM".equals(consumeDiscountVO.getDiscountType()) && (randomList == null || randomList.isEmpty())) {
throw new CzgException("随机立减配置错误"); throw new CzgException("随机立减配置错误");
} }
ShopUser shopUser = shopUserService.getShopUserInfo(shopId, userId); ShopUser shopUser = shopUserService.getShopUserInfo(shopId, userId);
@@ -84,8 +84,8 @@ public class MkShopConsumeDiscountRecordServiceImpl extends ServiceImpl<MkShopCo
@Override @Override
public void useDiscount(Long shopUserId, Long orderId, BigDecimal amount) { public void useDiscount(Long shopUserId, Long orderId, BigDecimal amount) {
AssertUtil.isTrue( shopUserId == null || orderId == null || amount == null, "参数不能为空"); AssertUtil.isTrue(shopUserId == null || orderId == null || amount == null, "参数不能为空");
ShopUser shopUser = shopUserService.getById(shopUserId); // ShopUser shopUser = shopUserService.getById(shopUserId);
MkShopConsumeDiscountRecord discountRecord = getOne(new QueryWrapper() MkShopConsumeDiscountRecord discountRecord = getOne(new QueryWrapper()
.eq(MkShopConsumeDiscountRecord::getShopUserId, shopUserId)); .eq(MkShopConsumeDiscountRecord::getShopUserId, shopUserId));
@@ -139,8 +139,17 @@ public class MkShopConsumeDiscountRecordServiceImpl extends ServiceImpl<MkShopCo
.eq(MkShopConsumeDiscountRecord::getIsUse, 0) .eq(MkShopConsumeDiscountRecord::getIsUse, 0)
.eq(MkShopConsumeDiscountRecord::getShopUserId, shopUser.getId())); .eq(MkShopConsumeDiscountRecord::getShopUserId, shopUser.getId()));
if (discountRecord != null) { if (discountRecord != null) {
boolean isUp = false;
if (consumeDiscountVO.getUpdateTime() != null && consumeDiscountVO.getUpdateTime().isBefore(discountRecord.getUpdateTime())) {
BigDecimal deductionAmount = deductionAmount(consumeDiscountVO);
discountRecord.setAmount(deductionAmount);
isUp = true;
}
if (discountRecord.getOrderId() == null && orderId != null) { if (discountRecord.getOrderId() == null && orderId != null) {
discountRecord.setOrderId(orderId); discountRecord.setOrderId(orderId);
isUp = true;
}
if (isUp) {
updateById(discountRecord); updateById(discountRecord);
} }
return discountRecord; return discountRecord;
@@ -152,11 +161,24 @@ public class MkShopConsumeDiscountRecordServiceImpl extends ServiceImpl<MkShopCo
shopConsumeDiscountRecord.setOrderId(orderId); shopConsumeDiscountRecord.setOrderId(orderId);
shopConsumeDiscountRecord.setConsumeDiscountId(consumeDiscountVO.getId()); shopConsumeDiscountRecord.setConsumeDiscountId(consumeDiscountVO.getId());
// 固定金额 BigDecimal deductionAmount = deductionAmount(consumeDiscountVO);
if (TableValueConstant.ConsumeDiscount.DiscountType.FIXED.getCode().equals(consumeDiscountVO.getDiscountType())) { if (deductionAmount.compareTo(BigDecimal.ZERO) == 0) {
shopConsumeDiscountRecord.setAmount(consumeDiscountVO.getDiscountAmount()); return null;
}
shopConsumeDiscountRecord.setAmount(deductionAmount);
save(shopConsumeDiscountRecord); save(shopConsumeDiscountRecord);
return shopConsumeDiscountRecord; return shopConsumeDiscountRecord;
} catch (Exception e) {
log.info(e.getMessage());
return null;
}
}
private BigDecimal deductionAmount(MkConsumeDiscountVO consumeDiscountVO) {
// 固定金额
if (TableValueConstant.ConsumeDiscount.DiscountType.FIXED.getCode().equals(consumeDiscountVO.getDiscountType())) {
return consumeDiscountVO.getDiscountAmount();
} }
// 随机金额概率加起来是100 // 随机金额概率加起来是100
@@ -173,17 +195,9 @@ public class MkShopConsumeDiscountRecordServiceImpl extends ServiceImpl<MkShopCo
int prob = item.getProbability().intValue(); int prob = item.getProbability().intValue();
current += prob; current += prob;
if (rand <= current) { if (rand <= current) {
shopConsumeDiscountRecord.setAmount(item.getAmount()); return item.getAmount();
save(shopConsumeDiscountRecord);
return shopConsumeDiscountRecord;
} }
} }
return BigDecimal.ZERO;
throw new CzgException("随机立减计算失败");
} catch (Exception e) {
log.info(e.getMessage());
return null;
} }
}
} }