qxy 3 місяців тому
батько
коміт
94cc571e98

+ 27 - 11
alien-store/src/main/java/shop/alien/store/service/impl/LifeCouponServiceImpl.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 import shop.alien.entity.result.R;
@@ -22,10 +23,7 @@ import shop.alien.util.common.UniqueRandomNumGenerator;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.time.DayOfWeek;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.time.format.TextStyle;
 import java.util.*;
@@ -227,7 +225,9 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
         return resultMap;
     }
 
+
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Map<String, String> newCouponVerify(String storeId, String quanCode) {
         Map<String, String> resultMap = new HashMap<>();
         OrderCouponMiddle orderCouponMiddle = orderCouponMiddleMapper.selectOne(new LambdaQueryWrapper<OrderCouponMiddle>().eq(OrderCouponMiddle::getCouponCode, quanCode));
@@ -238,6 +238,15 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
                 orderCouponMiddle.setStatus(2);
                 orderCouponMiddle.setUsedTime(new Date());
                 orderCouponMiddleMapper.updateById(orderCouponMiddle);
+                //通过订单id查询中间表 如果该订单下所有劵都为已核销状态更改订单表状态为已核销
+                List<OrderCouponMiddle> couponMiddleList = orderCouponMiddleMapper.selectList(new LambdaQueryWrapper<OrderCouponMiddle>()
+                        .eq(OrderCouponMiddle::getOrderId,lifeUserOrder.getId()));
+                boolean isExist =  couponMiddleList.stream()
+                        .allMatch(str -> str.getStatus()==2);
+                if(isExist){
+                    lifeUserOrder.setStatus(2);
+                    lifeUserOrderMapper.updateById(lifeUserOrder);
+                }
                 // TODO 抽成比例应该从商户里取
                 BigDecimal amounts = new BigDecimal(lifeUserOrder.getFinalPrice()).multiply(new BigDecimal(100));
                 BigDecimal commission = amounts.multiply(new BigDecimal(0.04)).setScale(0, RoundingMode.HALF_UP);
@@ -528,10 +537,17 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
                 return R.fail("该劵不在有效期内");
             }
         } else if (lifeCoupon.getExpirationType().equals("2")) {//类型为:2 指定时间段
-            LocalDate localStartDate = lifeCoupon.getStartDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
-            LocalDate localEndDate = lifeCoupon.getEndDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+            String[] strings = lifeCoupon.getValidityPeriod() .split(",");
+            long start = Long.parseLong(strings[0]);
+            long end = Long.parseLong(strings[1]);
+            LocalDate startDate = Instant.ofEpochMilli(start)
+                    .atZone(ZoneId.systemDefault())
+                    .toLocalDate();
+            LocalDate endDate = Instant.ofEpochMilli(end)
+                    .atZone(ZoneId.systemDefault())
+                    .toLocalDate();
             LocalDate nowDate = LocalDate.now(); // 获取当前时间
-            if (nowDate.isAfter(localEndDate) || nowDate.isBefore(localStartDate)) {
+            if (nowDate.isAfter(endDate) || nowDate.isBefore(startDate)) {
                 return R.fail("该劵不在有效期内");
             }
         }
@@ -542,7 +558,7 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
             LocalDate nowDate = LocalDate.now(); // 获取当前时间
             DayOfWeek dayOfWeek = nowDate.getDayOfWeek();
             String week = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINA);
-            String beforeSemicolon = lifeCoupon.getUnusedDate().split(";")[0];
+            String beforeSemicolon = lifeCoupon.getUnavaiLableDate().split(";")[0];
             if (!StringUtils.isEmpty(beforeSemicolon)) {
                 List<String> collectUnavailableDate = Arrays.stream(beforeSemicolon.split(",")).map(String::trim).collect(Collectors.toList());
                 boolean isExist = collectUnavailableDate.stream().anyMatch(s -> s.equals(week));
@@ -552,9 +568,9 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
             }
 
             //判断当前日期是否在不可用节日
-            String[] strings = lifeCoupon.getUnusedDate().split(";");
+            String[] strings = lifeCoupon.getUnavaiLableDate().split(";");
             if (strings.length > 1) {
-                String afterSemicolon = lifeCoupon.getUnusedDate().split(";")[1];
+                String afterSemicolon = lifeCoupon.getUnavaiLableDate().split(";")[1];
                 List<String> collectUnavailableDate = Arrays.stream(afterSemicolon.split(",")).map(String::trim).collect(Collectors.toList());
                 List<EssentialHolidayComparison> essentialHolidayComparisons = essentialHolidayComparisonMapper.
                         selectList(new LambdaQueryWrapper<EssentialHolidayComparison>().in(EssentialHolidayComparison::getId, collectUnavailableDate));
@@ -567,7 +583,7 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
         }
         //判断当前日期是否在自定义不可用日期内
         if (lifeCoupon.getUnusedType().equals("3")) {
-            String[] customDate = lifeCoupon.getUnusedDate().split(";");
+            String[] customDate = lifeCoupon.getUnavaiLableDate().split(";");
             boolean isExist = isCurrentDateInAnyRange(customDate);
             if (isExist) {
                 return R.fail("该劵在不可用日期内");