Commit fda2520d by 吕明尚

修改计算订单价格,增加用户钱包计算

parent 5f97e321
......@@ -36,5 +36,21 @@ public class ComputedOrderPriceResponse implements Serializable {
@ApiModelProperty(value = "折扣比例")
private BigDecimal discountRatio;
//使用时长
@ApiModelProperty(value = "使用时长")
private BigDecimal duration;
//剩余时长
@ApiModelProperty(value = "剩余时长")
private BigDecimal remainingDuration;
//使用余额
@ApiModelProperty(value = "使用余额")
private BigDecimal balance;
//剩余余额
@ApiModelProperty(value = "剩余余额")
private BigDecimal remainingBalance;
}
......@@ -149,6 +149,9 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
@Autowired
private ActivityService activityService;
@Autowired
private ConsumerWalletService consumerWalletService;
private final static Long FIVE = 5L;
......@@ -1851,12 +1854,15 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
}
private ComputedOrderPriceResponse computedPrice(OrderComputedPriceRequest request, SConsumer user) {
BigDecimal timeLong = DateUtils.differentHour(request.getPreStartDate(), request.getPreEndDate());
// 计算各种价格
ComputedOrderPriceResponse priceResponse = new ComputedOrderPriceResponse();
Activity activity;
ConsumerMember consumerMember = null;
ConsumerWallet consumerWallet = null;
LambdaQueryWrapper<Activity> queryWrapper = new LambdaQueryWrapper<>();
if (ObjectUtil.isNotEmpty(user)) {
consumerWallet = consumerWalletService.getOne(new LambdaQueryWrapper<ConsumerWallet>().eq(ConsumerWallet::getConsumerId, user.getId()));
consumerMember = consumerMemberService.getOne(new LambdaQueryWrapper<ConsumerMember>().eq(ConsumerMember::getConsumerId, user.getId()));
if (ObjectUtil.isNotEmpty(consumerMember)) {
queryWrapper.eq(Activity::getIsOpen, YesNoEnum.yes.getIndex());
......@@ -1877,6 +1883,7 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
activity = activityService.getOne(queryWrapper);
totalFee = getBigDecimal(request, activity, payPrice, user);
}
totalFee = getBigDecimal(consumerWallet, timeLong, priceResponse, totalFee, room);
} else {
SPack byId = packService.getById(roomLabel.getPackId());
if (!ObjectUtils.isEmpty(byId) && byId.getIsOpen().equals(YesNoEnum.yes.getIndex())) {
......@@ -1887,6 +1894,7 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
activity = activityService.getOne(queryWrapper);
totalFee = getBigDecimal(request, activity, payPrice, user);
}
totalFee = getBigDecimal(consumerWallet, timeLong, priceResponse, totalFee, byId);
} else {
payPrice = totalPrice;
request.setBuyType(BuyTypeEnum.TIME.getCode());
......@@ -1895,9 +1903,11 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
activity = activityService.getOne(queryWrapper);
totalFee = getBigDecimal(request, activity, payPrice, user);
}
totalFee = getBigDecimal(consumerWallet, timeLong, priceResponse, totalFee, room);
}
}
} else if (!ObjectUtils.isEmpty(request.getPackId())) {
SPack byId = packService.getById(request.getPackId());
payPrice = computeTotalPrice(request.getPackId(), totalPrice);
request.setBuyType(BuyTypeEnum.PACK.getCode());
if (ObjectUtil.isNotEmpty(consumerMember)) {
......@@ -1905,9 +1915,10 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
activity = activityService.getOne(queryWrapper);
totalFee = getBigDecimal(request, activity, payPrice, user);
}
totalFee = getBigDecimal(consumerWallet, timeLong, priceResponse, totalFee, byId);
}
priceResponse.setTotalFee(payPrice);
if (totalFee.compareTo(new BigDecimal(0)) == 0) {
if (ObjectUtil.isEmpty(consumerWallet) && totalFee.compareTo(new BigDecimal(0)) == 0) {
priceResponse.setPayFee(payPrice);
} else {
priceResponse.setPayFee(totalFee);
......@@ -1915,11 +1926,6 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
// 计算优惠券金额
if (ObjectUtil.isNull(request.getCouponId()) || request.getCouponId() <= 0) {
priceResponse.setCouponFee(BigDecimal.ZERO);
if (totalFee.compareTo(new BigDecimal(0)) == 0) {
priceResponse.setPayFee(payPrice);
} else {
priceResponse.setPayFee(totalFee);
}
priceResponse.setDiscountFee(priceResponse.getTotalFee().subtract(priceResponse.getPayFee()));
priceResponse.setDiscountRatio(priceResponse.getDiscountFee().divide(priceResponse.getTotalFee()).multiply(new BigDecimal(100)));
if (ObjectUtil.isNotEmpty(consumerMember)) {
......@@ -1945,6 +1951,52 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
return priceResponse;
}
private BigDecimal getBigDecimal(ConsumerWallet consumerWallet, BigDecimal timeLong, ComputedOrderPriceResponse priceResponse, BigDecimal totalFee, SRoom room) {
if (ObjectUtil.isNotEmpty(consumerWallet)) {
if (consumerWallet.getRemainingDuration().compareTo(timeLong) >= 0) {
priceResponse.setDuration(timeLong);
priceResponse.setRemainingDuration(consumerWallet.getRemainingDuration().subtract(timeLong));
totalFee = new BigDecimal(0);
} else if (consumerWallet.getRemainingDuration().compareTo(timeLong) < 0) {
priceResponse.setDuration(consumerWallet.getRemainingDuration());
priceResponse.setRemainingDuration(new BigDecimal(0));
BigDecimal remainingBalance = timeLong.subtract(consumerWallet.getRemainingDuration()).multiply(room.getPrice());
if (consumerWallet.getBalance().compareTo(remainingBalance) >= 0) {
priceResponse.setBalance(remainingBalance);
priceResponse.setRemainingBalance(consumerWallet.getBalance().subtract(remainingBalance));
totalFee = new BigDecimal(0);
} else if (consumerWallet.getBalance().compareTo(remainingBalance) < 0) {
priceResponse.setBalance(remainingBalance.subtract(consumerWallet.getBalance()));
priceResponse.setTotalFee(remainingBalance.subtract(consumerWallet.getBalance()));
priceResponse.setPayFee(remainingBalance.subtract(consumerWallet.getBalance()));
totalFee = remainingBalance.subtract(consumerWallet.getBalance());
}
}
}
return totalFee;
}
private BigDecimal getBigDecimal(ConsumerWallet consumerWallet, BigDecimal timeLong, ComputedOrderPriceResponse priceResponse, BigDecimal totalFee, SPack byId) {
if (ObjectUtil.isNotEmpty(consumerWallet)) {
if (consumerWallet.getRemainingDuration().compareTo(timeLong) >= 0) {
priceResponse.setDuration(timeLong);
priceResponse.setRemainingDuration(consumerWallet.getRemainingDuration().subtract(timeLong));
totalFee = new BigDecimal(0);
} else if (consumerWallet.getRemainingDuration().compareTo(timeLong) < 0) {
if (consumerWallet.getBalance().compareTo(byId.getPrice()) >= 0) {
priceResponse.setBalance(byId.getPrice());
priceResponse.setRemainingBalance(consumerWallet.getBalance().subtract(byId.getPrice()));
totalFee = new BigDecimal(0);
} else if (consumerWallet.getBalance().compareTo(byId.getPrice()) < 0) {
priceResponse.setBalance(consumerWallet.getBalance());
priceResponse.setRemainingBalance(new BigDecimal(0));
totalFee = byId.getPrice().subtract(consumerWallet.getBalance());
}
}
}
return totalFee;
}
private BigDecimal getBigDecimal(OrderComputedPriceRequest request, Activity activity, BigDecimal payPrice, SConsumer user) {
if (ObjectUtil.isNotEmpty(activity) && ObjectUtil.isNotEmpty(user)) {
CronParser cronParser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment