From f2728ef322de546ef885e21ea99183bfc7b18f24 Mon Sep 17 00:00:00 2001
From: 陶杰 <1378534974@qq.com>
Date: 星期一, 09 十二月 2024 18:08:06 +0800
Subject: [PATCH] 1.payment_time > 17:00:00 为第二天
---
src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java | 95 ++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 88 insertions(+), 7 deletions(-)
diff --git a/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java b/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java
index f5d61b6..b09c467 100644
--- a/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java
+++ b/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java
@@ -40,6 +40,7 @@
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
+import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -241,7 +242,7 @@
// 根据发放后有效期来设置时间
if (couponTemplateDO.getUsageTimeNum() == null || couponTemplateDO.getUsageTimeNum() <= 0) {
- throw new IllegalArgumentException("使用时间数量必须为正整数");
+ throw new ValidationException("使用时间数量必须为正整数");
}
LocalDateTime currentTime = LocalDateTime.now();
couponTemplateDO.setUsageStartDate(currentTime);
@@ -264,6 +265,7 @@
List<CouponRecordDO> couponUsageDOList = couponTemplateCustomerDOList.stream().map(pointCustomRe -> {
CouponRecordDO couponRecordDO = new CouponRecordDO();
+
couponRecordDO.setId(IdUtil.simpleUUID());
couponRecordDO.setCouponId(pointCustomRe.getCouponId());
couponRecordDO.setCustomerId(pointCustomRe.getCustomId());
@@ -290,7 +292,9 @@
couponRecordDO.setCouponDiscountType(couponTemplateDO.getCouponDiscountType());
couponRecordDO.setGetUserType(couponTemplateDO.getGetUserType());
couponRecordDO.setPoint(couponTemplateDO.getPoint());
- couponRecordDO.setMemberId(couponRecordDO.getMemberId());
+ couponRecordDO.setMemberId(couponTemplateDO.getMemberId());
+ couponRecordDO.setImageUrl(couponTemplateDO.getImageUrl());
+ couponRecordDO.setCouponDescription(couponTemplateDO.getCouponDescription());
// 创建相关信息
couponRecordDO.create(SecurityUtils.getUserId());
@@ -308,6 +312,15 @@
couponRecordService.saveBatch(couponUsageDOList);
}
}
+
+ // 如果是活动优惠券且领取渠道是Home类型的,那么只能设置当前优惠券为激活状态,其他优惠券是激活状态的设置为下架状态
+ if (StringUtils.isNotBlank(couponTemplateDO.getCategory()) && couponTemplateDO.getCategory().equals(CouponCategoryEnum.ACTIVITY.getStatus())
+ && StringUtils.isNotBlank(couponTemplateDO.getGetType()) && couponTemplateDO.getGetType().equals(CouponGetTypeEnum.HOME.getType())
+ ) {
+
+ couponTemplateMapperCustom.expireHomeActivityCouponTemplate();
+ }
+
return baseMapper.updateById(couponTemplateDO) > 0;
}
@@ -410,7 +423,9 @@
if(couponTemplateDO==null){
throw new ValidationException("优惠券不存在");
}
-
+ if(couponTemplateDO.getCouponAmount()<=0 ){
+ throw new ValidationException("优惠券已兑换完");
+ }
CustomerPoint cp = customerPointMapper.selectOne(new LambdaQueryWrapper<CustomerPoint>()
.eq(CustomerPoint::getUserId, SecurityUtils.getUserId()));
if(cp == null || (cp.getTotalPoint()-cp.getUsedPoint()-cp.getExpiredPoint()- cp.getExpiredPoint()) < couponTemplateDO.getPoint() * dto.getNum()){
@@ -428,6 +443,10 @@
recordDTO.setCustomerId(customer.getId());
couponRecordService.createCouponRecord(recordDTO);
+// //更新优惠券数量
+// couponTemplateDO.setCouponAmount(couponTemplateDO.getCouponAmount()-dto.getNum());
+// couponTemplateService.updateById(couponTemplateDO);
+
//更新积分汇总
cp.setUsedPoint(cp.getUsedPoint()+couponTemplateDO.getPoint());
customerPointMapper.updateById(cp);
@@ -443,8 +462,6 @@
detail.setRemarks(couponTemplateDO.getCouponName());
detail.create(SecurityUtils.getUserId());
customerPointDetailMapper.insert(detail);
- }catch (Exception e){
- throw new ValidationException("兑换失败");
}finally {
lockService.releaseObjectLock(key,"");
}
@@ -452,9 +469,73 @@
}
@Override
- public List<CouponTemplateVO> getActivityEffectList(QueryActivityEffectCouponDTO dto) {
+ public CouponTemplateVO getHomeActivityEffectAlert(QueryActivityEffectCouponDTO dto) {
- return couponTemplateMapperCustom.getActivityEffectList(dto);
+ // 存在用户是空的情况
+ final CouponTemplateVO homeActivityEffectAlert = couponTemplateMapperCustom.getHomeActivityEffectAlert(dto);
+ if(null!=homeActivityEffectAlert ){
+ if(StringUtils.isNotBlank(SecurityUtils.getUserId()) ){
+ // 查看当前已经领取了几张
+ final Integer getCnt = couponRecordService.getUserGainCouponRecordAmountByUserId(homeActivityEffectAlert.getId(), SecurityUtils.getUserId());
+ // 如果当前领取的数量小于限制领取的数量的时候,可以再次领取
+ if(null!=homeActivityEffectAlert.getGetLimit() && null!=getCnt
+ && homeActivityEffectAlert.getGetLimit().compareTo(getCnt)>0){
+ return homeActivityEffectAlert;
+ }
+ }else{
+ return homeActivityEffectAlert;
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public boolean expireActivityCouponTemplateAll() {
+
+ return couponTemplateMapperCustom.expireActivityCouponTemplateAll()>0;
+ }
+
+ @Override
+ public List<CouponTemplateVO> getActivityEffectListWithMine(QueryActivityEffectCouponDTO dto) {
+ // 1.点击领取,优惠券状态变成灰色+已领取(根据web端优惠券限领次数判断)
+ //2.把已领取的优惠券按照领取时间排列到最下面
+ List<CouponTemplateVO> list= couponTemplateMapperCustom.getActivityEffectListWithMine(dto);
+
+ // 将列表分为已经领取和未领取的,根据getYetFlag来判断,下面的所有操作都要判空
+ if(CollectionUtils.isNotEmpty(list)){
+ // 遍历列表,查看当前的优惠券是否已经达到领取次数,如果是则为true,不是为false
+ list.forEach(item->{
+ if (item != null) {
+ item.setGetYetFlag(false);
+ if (null != item.getGetNum() && null != item.getGetLimit() && item.getGetNum() >= item.getGetLimit()) {
+ item.setGetYetFlag(true);
+ }
+ }
+ });
+ List<CouponTemplateVO> getYetList = list.stream().filter(item->item.getGetYetFlag()).collect(Collectors.toList());
+ List<CouponTemplateVO> getNotYetList = list.stream().filter(item->!item.getGetYetFlag()).collect(Collectors.toList());
+ list.clear();
+ if(CollectionUtils.isNotEmpty(getNotYetList)){
+ // 将未领取的根据create_time 倒序排序
+ getNotYetList.sort(Comparator.comparing(CouponTemplateVO::getCreateTime).reversed());
+ // 将未领取和已领取的合并成新list返回
+ list.addAll(getNotYetList);
+ }
+ if(CollectionUtils.isNotEmpty(getYetList)){
+ // 将已经领取的根据recordCreateTime 时间正序排
+ getYetList.sort(Comparator.comparing(CouponTemplateVO::getRecordCreateTime));
+ list.addAll(getYetList);
+ }
+ return list;
+ }
+
+ return new ArrayList<>();
+ }
+
+ @Override
+ public List<CouponTemplateVO> getActivityEffectList(QueryActivityEffectCouponDTO dto) {
+ return couponTemplateMapperCustom.getActivityEffectListWithMine(dto);
}
}
--
Gitblit v1.9.3