Commit d0a633ac by huluobin

coupon_fix

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