Commit d0a633ac by huluobin

coupon_fix

parent 8425031a
......@@ -10,36 +10,6 @@ import java.util.List;
public interface CouponService extends IService<Coupon> {
/**
* 获取统一卡券领取的张数
*
* @param couponId couponId
* @param customerId customerId
* @return count
*/
int countRelevanceNum(Integer couponId, Integer customerId);
/**
* 给用户发券 并且修改卡券已领取人数
*
* @param coupon 卡券类型
* @param record 卡券实体
* @return true
*/
int insertSelective(Coupon coupon, CouponCustomerRelevance record);
/**
* 查询是否领过对应卡券
*
* @param customerId 用户id
* @param couponIdList 卡券类型id
* @return
*/
List<CouponCustomerRelevance> selectMyNewCustomerCoupon(Integer customerId, List<Integer> couponIdList);
/**
* 是否新人
......@@ -58,7 +28,7 @@ public interface CouponService extends IService<Coupon> {
Coupon sendNewCustomerCouponXcx(Integer customerId);
/**
* 发券
* 统一发券接口
*
* @param couponId 卡券配置id
* @param customerId 用户id
......
......@@ -44,38 +44,38 @@ public class CouponCustomerRelevanceServiceImpl extends ServiceImpl<CouponCustom
private CouponMapper couponMapper;
@Resource
private MarketService marketService;
@Resource
private DiscountConfigMapper discountConfigMapper;
@Override
public List<CouponCustomerRelevance> getOrderCoupon(Integer currentCustomerId, Integer orderId) {
/*1、查询订单服务和订单*/
List<OrderServe> orderServeList = orderServeMapper.selectList(new LambdaQueryWrapper<OrderServe>().eq(OrderServe::getOrderId, orderId));
OrderManage orderManage = orderManageMapper.selectById(orderId);
return couponCustomerRelevanceMapper
.selectList(new LambdaQueryWrapper<CouponCustomerRelevance>()
.eq(CouponCustomerRelevance::getCustomerId, currentCustomerId)
//内部券
//只查询内部券
.eq(CouponCustomerRelevance::getSourceType, 0)
//卡券状态 正常
//只查询正常状态的卡券
.eq(CouponCustomerRelevance::getState, 1))
//
.stream()
//过滤所有可用在服务上的
//只返回可以使用的优惠券
.filter(couponCustomerRelevance -> {
//卡券作用的服务id
List<Integer> canUserServeIds = couponCustomerRelevanceMapper.queryCouponCustomerServeRelevance(couponCustomerRelevance.getCouponId());
List<Integer> freeCouponIds = discountConfigMapper.selectList(new LambdaQueryWrapper<>()).stream().map(DiscountConfig::getCouponId).filter(Objects::nonNull).collect(Collectors.toList());
canUserServeIds.retainAll(orderServeList.stream()
.map(OrderServe::getServeId)
.collect(Collectors.toList()));
return ListUtil.isNotEmpty(canUserServeIds);
//订单的服务id
List<Integer> orderServeIds = orderServeList.stream().map(OrderServe::getServeId).collect(Collectors.toList());
//retail
List<Integer> retainIds = ListUtil.retainAll(canUserServeIds, orderServeIds);
return ListUtil.isNotEmpty(retainIds);
})
.peek(couponCustomerRelevance -> {
//卡券作用的服务id (mybatis 缓存)
List<Integer> canUserServeIds = couponCustomerRelevanceMapper.queryCouponCustomerServeRelevance(couponCustomerRelevance.getCouponId());
//免单券
List<Integer> freeCouponIds = discountConfigMapper.selectList(new LambdaQueryWrapper<>()).stream().map(DiscountConfig::getCouponId).filter(Objects::nonNull).collect(Collectors.toList());
if (freeCouponIds.contains(couponCustomerRelevance.getCouponId())) {
canUserServeIds.retainAll(orderServeList.stream()
......@@ -92,11 +92,12 @@ public class CouponCustomerRelevanceServiceImpl extends ServiceImpl<CouponCustom
.map(OrderServe::getServeId)
.collect(Collectors.toList()));
}
//满足使用条件但是不满足冲突条件的卡券
couponCustomerRelevance.setCanBeUse(ListUtil.isNotEmpty(canUserServeIds));
})
//过滤可用
//返回校验通过的卡券
.filter(CouponCustomerRelevance::isValid)
//过滤达到可用金额
//返回到到使用金额条件的卡券
.filter(couponCustomerRelevance -> couponCustomerRelevance.getReachingAmount().compareTo(orderManage.getTotalPrice()) < 0)
.collect(Collectors.toList());
}
......
......@@ -487,18 +487,16 @@ public class MarketServiceImpl implements MarketService {
if (!total.setScale(2, BigDecimal.ROUND_HALF_UP).equals(BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_HALF_UP))) {
//卡券的总折扣金额
BigDecimal totalCouponDiscount = couponCustomerRelevance.getDiscountAmount();
// //折扣券
// if (couponCustomerRelevance.getType().equals(CouponCustomerRelevance.TYPE_DISCOUNT)) {
// totalCouponDiscount = orderManage.getTotalPaymentAmount().multiply(couponCustomerRelevance.getDiscountPercent());
// }
//折扣券
if (couponCustomerRelevance.getType().equals(CouponCustomerRelevance.TYPE_DISCOUNT)) {
totalCouponDiscount = orderManage.getTotalPaymentAmount().multiply(couponCustomerRelevance.getDiscountPercent());
}
//卡券总支付金额
BigDecimal totalCouponPay = couponCustomerRelevance.getPayAmount();
//计算参数(最后一个订单服务的折扣金额要用总折扣金额减 防止除法计算精度问题)
BigDecimal discountCalc = BigDecimal.ZERO;
//计算参数(最后一个订单服务的实际支付要用总实际支付金额减 防止除法计算精度问题)
BigDecimal payCalc = BigDecimal.ZERO;
for (OrderServe orderServe : canUserOrderServeList) {
//每个服务的内部券抵扣金额
......@@ -586,9 +584,13 @@ public class MarketServiceImpl implements MarketService {
.filter(couponCustomerRelevance -> couponCustomerRelevance.getType().equals(CouponCustomerRelevance.TYPE_DISCOUNT))
.collect(Collectors.toList());
discountInnerCouponCustomerRelevanceServiceList.forEach(couponCustomerRelevanceConsumer);
if (normalInnerCouponCustomerRelevanceServiceList.size() > 1) {
if (normalInnerCouponCustomerRelevanceServiceList.size() + discountInnerCouponCustomerRelevanceServiceList.size() > 1) {
throw new RRException("普通内部券只能用一张");
}
if (freeInnerCouponCustomerRelevanceServiceList.size() > 1) {
throw new RRException("免单券券只能用一张");
}
}
orderManageMapper.updateById(orderManage);
......@@ -685,6 +687,7 @@ public class MarketServiceImpl implements MarketService {
.filter(orderServe -> serveIds.contains(orderServe.getServeId()))
.filter(orderServe -> !orderServe.isActivity())
.filter(orderServe -> orderServe.getBindTimesCard() == 2)
.filter(orderServe -> orderServe.getBindInnerCoupon() == 2)
.filter(orderServe -> orderServe.getBindOuterCoupon() == 2)
.collect(Collectors.toList());
}
......
package com.gogirl.infrastructure.common.util;
import org.apache.commons.collections.ListUtils;
import java.util.Collection;
import java.util.Optional;
import java.util.function.Function;
......@@ -10,7 +12,7 @@ import java.util.stream.Collectors;
*
* @author Dxd
*/
public class ListUtil {
public class ListUtil extends ListUtils {
/**
* 校验集合是否为空
......
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