Browse Source

fixed 优惠券使用问题修复

fushengqian 1 year ago
parent
commit
c144a1feed

+ 9 - 5
fuint-application/src/main/java/com/fuint/common/service/impl/OpenGiftServiceImpl.java

@@ -230,10 +230,6 @@ public class OpenGiftServiceImpl extends ServiceImpl<MtOpenGiftMapper, MtOpenGif
         if (gradeId == null || gradeId.compareTo(0) <= 0) {
             return false;
         }
-        Map<String, Object> params = new HashMap<>();
-        params.put("grade_id", gradeId.toString());
-        params.put("status", StatusEnum.ENABLED.getKey());
-
         MtUser user = mtUserMapper.selectById(userId);
         if (user == null) {
             throw new BusinessCheckException("会员状态异常");
@@ -244,7 +240,7 @@ public class OpenGiftServiceImpl extends ServiceImpl<MtOpenGiftMapper, MtOpenGif
         MtUserGrade oldGrade = userGradeService.queryUserGradeById(user.getMerchantId(), Integer.parseInt(user.getGradeId()), user.getId());
         MtUserGrade gradeInfo = userGradeService.queryUserGradeById(user.getMerchantId(), gradeId, user.getId());
         // 设置有效期
-        if (gradeInfo.getValidDay() > 0) {
+        if (gradeInfo.getValidDay() >= 0) {
             user.setStartTime(new Date());
             Date endDate = new Date();
             Calendar calendar = new GregorianCalendar();
@@ -252,6 +248,10 @@ public class OpenGiftServiceImpl extends ServiceImpl<MtOpenGiftMapper, MtOpenGif
             calendar.add(calendar.DATE, gradeInfo.getValidDay());
             endDate = calendar.getTime();
             user.setEndTime(endDate);
+            if (gradeInfo.getValidDay() == 0) {
+                user.setStartTime(null);
+                user.setEndTime(null);
+            }
         }
         user.setGradeId(gradeId.toString());
         user.setUpdateTime(new Date());
@@ -260,6 +260,10 @@ public class OpenGiftServiceImpl extends ServiceImpl<MtOpenGiftMapper, MtOpenGif
         if (!isNewMember && oldGrade != null && oldGrade.getGrade() >= gradeInfo.getGrade()) {
             return false;
         }
+        Map<String, Object> params = new HashMap<>();
+        params.put("grade_id", gradeId.toString());
+        params.put("status", StatusEnum.ENABLED.getKey());
+        params.put("merchant_id", user.getMerchantId());
         List<MtOpenGift> openGiftList = mtOpenGiftMapper.selectByMap(params);
         if (openGiftList.size() > 0) {
             Integer totalPoint = 0;

+ 49 - 0
fuint-application/src/main/java/com/fuint/common/service/impl/OrderServiceImpl.java

@@ -39,6 +39,7 @@ import weixin.popular.util.JsonUtil;
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 订单接口实现类
@@ -72,6 +73,8 @@ public class OrderServiceImpl extends ServiceImpl<MtOrderMapper, MtOrder> implem
 
     private MtUserGradeMapper mtUserGradeMapper;
 
+    private MtCouponGoodsMapper mtCouponGoodsMapper;
+
     /**
      * 系统设置服务接口
      * */
@@ -426,6 +429,30 @@ public class OrderServiceImpl extends ServiceImpl<MtOrderMapper, MtOrder> implem
 
             // 购物使用了卡券
             if (mtOrder.getCouponId() > 0) {
+                // 查询是否适用商品
+                MtUserCoupon userCoupon = mtUserCouponMapper.selectById(mtOrder.getCouponId());
+                if (userCoupon != null) {
+                    MtCoupon couponInfo = couponService.queryCouponById(userCoupon.getCouponId());
+                    if (couponInfo.getApplyGoods() != null && couponInfo.getApplyGoods().equals(ApplyGoodsEnum.PARK_GOODS.getKey())) {
+                        List<MtCouponGoods> couponGoodsList = mtCouponGoodsMapper.getCouponGoods(couponInfo.getId());
+                        if (couponGoodsList != null && couponGoodsList.size() > 0 && cartList.size() > 0) {
+                            List<Integer> applyGoodsIds = new ArrayList<>();
+                            List<Integer> goodsIds = new ArrayList<>();
+                            for (MtCouponGoods mtCouponGoods : couponGoodsList) {
+                                 applyGoodsIds.add(mtCouponGoods.getGoodsId());
+                            }
+                            for (MtCart mtCart : cartList) {
+                                 goodsIds.add(mtCart.getGoodsId());
+                            }
+                            List<Integer> intersection = applyGoodsIds.stream()
+                                    .filter(goodsIds::contains)
+                                    .collect(Collectors.toList());
+                            if (intersection.size() == 0) {
+                                throw new BusinessCheckException("该卡券不适用于购买的商品列表");
+                            }
+                        }
+                    }
+                }
                 updateOrder(mtOrder);
                 String useCode = couponService.useCoupon(mtOrder.getCouponId(), mtOrder.getUserId(), mtOrder.getStoreId(), mtOrder.getId(), mtOrder.getDiscount(), "购物使用卡券");
                 // 卡券使用失败
@@ -1918,6 +1945,28 @@ public class OrderServiceImpl extends ServiceImpl<MtOrderMapper, MtOrder> implem
                             couponDto.setStatus(UserCouponStatusEnum.UNUSED.getKey());
                         }
                     }
+                    // 适用商品
+                    if (userCoupon != null) {
+                        if (couponInfo.getApplyGoods() != null && couponInfo.getApplyGoods().equals(ApplyGoodsEnum.PARK_GOODS.getKey())) {
+                            List<MtCouponGoods> couponGoodsList = mtCouponGoodsMapper.getCouponGoods(couponInfo.getId());
+                            if (couponGoodsList != null && couponGoodsList.size() > 0 && cartList.size() > 0) {
+                                List<Integer> applyGoodsIds = new ArrayList<>();
+                                List<Integer> goodsIds = new ArrayList<>();
+                                for (MtCouponGoods mtCouponGoods : couponGoodsList) {
+                                    applyGoodsIds.add(mtCouponGoods.getGoodsId());
+                                }
+                                for (MtCart mtCart : cartList) {
+                                    goodsIds.add(mtCart.getGoodsId());
+                                }
+                                List<Integer> intersection = applyGoodsIds.stream()
+                                        .filter(goodsIds::contains)
+                                        .collect(Collectors.toList());
+                                if (intersection.size() == 0) {
+                                    couponDto.setStatus(UserCouponStatusEnum.DISABLE.getKey());
+                                }
+                            }
+                        }
+                    }
                     if (couponInfo.getExpireType().equals(CouponExpireTypeEnum.FIX.getKey())) {
                         couponDto.setEffectiveDate(DateUtil.formatDate(couponInfo.getBeginTime(), "yyyy.MM.dd HH:mm") + "~" + DateUtil.formatDate(couponInfo.getEndTime(), "yyyy.MM.dd HH:mm"));
                     }