From 11c95afd1e44bcd3d70dbcf77e790596ec80a53e Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期二, 24 九月 2024 18:54:59 +0800
Subject: [PATCH] fix: 剔除加价限制条件
---
src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java | 144 +++++++++++++++++++++++++++++++++++-------------
1 files changed, 105 insertions(+), 39 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 ce2b9af..6e46180 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
@@ -29,6 +29,7 @@
import com.mzl.flower.service.coupon.CouponTemplateCustomerService;
import com.mzl.flower.service.coupon.CouponTemplateService2;
import com.mzl.flower.service.menber.MemberService;
+import com.mzl.flower.service.payment.RedisLockService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
@@ -40,6 +41,7 @@
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -76,6 +78,9 @@
@Autowired
private MemberService memberService;
+
+ @Autowired
+ private RedisLockService lockService;
@@ -225,7 +230,7 @@
// 判断当前的优惠券的用户类型是指定用户还是全部用户,如果是指定用户的情况下需要发布优惠券
if (StringUtils.isNotBlank(couponTemplateDO.getGetUserType())
&& StringUtils.isNotBlank(couponTemplateDO.getCategory())
- && couponTemplateDO.getGetUserType().equals(CouponGetUserTypeEnum.POINT.getType())
+ && couponTemplateDO.getGetUserType().equals(CouponGetUserTypeEnum.TARGET.getType())
&& couponTemplateDO.getCategory().equals(CouponCategoryEnum.USER.getStatus())
) {
@@ -236,7 +241,7 @@
// 根据发放后有效期来设置时间
if (couponTemplateDO.getUsageTimeNum() == null || couponTemplateDO.getUsageTimeNum() <= 0) {
- throw new IllegalArgumentException("使用时间数量必须为正整数");
+ throw new ValidationException("使用时间数量必须为正整数");
}
LocalDateTime currentTime = LocalDateTime.now();
couponTemplateDO.setUsageStartDate(currentTime);
@@ -259,6 +264,7 @@
List<CouponRecordDO> couponUsageDOList = couponTemplateCustomerDOList.stream().map(pointCustomRe -> {
CouponRecordDO couponRecordDO = new CouponRecordDO();
+
couponRecordDO.setId(IdUtil.simpleUUID());
couponRecordDO.setCouponId(pointCustomRe.getCouponId());
couponRecordDO.setCustomerId(pointCustomRe.getCustomId());
@@ -278,25 +284,41 @@
couponRecordDO.setCouponCode(couponTemplateDO.getCouponCode());
couponRecordDO.setCouponName(couponTemplateDO.getCouponName());
// 优惠券种类
- couponRecordDO.setCategory(couponTemplateDO.getGetUserType());
+ couponRecordDO.setCategory(couponTemplateDO.getCategory());
couponRecordDO.setMinOrderAmount(couponTemplateDO.getMinOrderAmount());
couponRecordDO.setCouponDiscountValue(couponTemplateDO.getCouponDiscountValue());
couponRecordDO.setGetType(couponTemplateDO.getGetType());
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.create(SecurityUtils.getUserId());
- return couponRecordDO;
- }).collect(Collectors.toList());
+ // 查看当前优惠券是不是已经存在,存在的话则不能添加,防止同一人员重复下发同一张指定的优惠券
+ if(!couponRecordService.checkUserCouponExists(pointCustomRe.getCouponId(),pointCustomRe.getCustomId())){
+ return couponRecordDO;
+ }else{
+ return null;
+ }
+
+ }).filter(Objects::nonNull).collect(Collectors.toList());
// 批量保存优惠券信息
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;
}
@@ -386,46 +408,90 @@
}
@Override
- public synchronized void exchangeCoupon(ExchangeCouponDTO dto) {
- dto.setNum(1);
+ public void exchangeCoupon(ExchangeCouponDTO dto) {
- final CouponTemplateDO couponTemplateDO = couponTemplateService.getById(dto.getCouponId());
- if(couponTemplateDO==null){
- throw new ValidationException("优惠券不存在");
+ String key="EXCHANGE_COUPON:"+dto.getCouponId()+":"+SecurityUtils.getUserId();
+ boolean lock = lockService.getObjectLock(key, "");
+ if(!lock){
+ throw new ValidationException("系统操作频繁,请稍后重试");
+ }
+ try {
+ dto.setNum(1);
+ final CouponTemplateDO couponTemplateDO = couponTemplateService.getById(dto.getCouponId());
+ 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()){
+ throw new ValidationException("积分不足");
+ }
+
+ CreateCouponRecordDTO recordDTO =new CreateCouponRecordDTO();
+ recordDTO.setCouponId(dto.getCouponId());
+ recordDTO.setUserId(SecurityUtils.getUserId());
+ Customer customer = customerMapper.selectOne(new LambdaQueryWrapper<Customer>()
+ .eq(Customer::getUserId, SecurityUtils.getUserId()));
+ if(customer == null){
+ throw new ValidationException("商户不存在");
+ }
+ 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);
+
+ //记录积分明细
+ CustomerPointDetail detail = new CustomerPointDetail();
+ detail.setUserId(customer.getUserId());
+ detail.setCustomerId(customer.getId());
+ detail.setPoint(couponTemplateDO.getPoint());
+ detail.setChangeType(Constants.POINT_CHANGE_TYPE.reduce.name());
+ detail.setType(Constants.POINT_TYPE.exchange.name());
+ detail.setRecordDate(LocalDate.now());
+ detail.setRemarks(couponTemplateDO.getCouponName());
+ detail.create(SecurityUtils.getUserId());
+ customerPointDetailMapper.insert(detail);
+ }finally {
+ lockService.releaseObjectLock(key,"");
}
- CustomerPoint cp = customerPointMapper.selectOne(new LambdaQueryWrapper<CustomerPoint>()
- .eq(CustomerPoint::getUserId, SecurityUtils.getUserId()));
- if(cp == null || (cp.getTotalPoint()-cp.getUsedPoint()-cp.getExpiredPoint()) < couponTemplateDO.getPoint() * dto.getNum()){
- throw new ValidationException("积分不足");
+ }
+
+ @Override
+ public CouponTemplateVO getHomeActivityEffectAlert(QueryActivityEffectCouponDTO 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;
+ }
}
- CreateCouponRecordDTO recordDTO =new CreateCouponRecordDTO();
- recordDTO.setCouponId(dto.getCouponId());
- recordDTO.setUserId(SecurityUtils.getUserId());
- Customer customer = customerMapper.selectOne(new LambdaQueryWrapper<Customer>()
- .eq(Customer::getUserId, SecurityUtils.getUserId()));
- if(customer == null){
- throw new ValidationException("商户不存在");
- }
- recordDTO.setCustomerId(customer.getId());
- couponRecordService.createCouponRecord(recordDTO);
+ return null;
+ }
- //更新积分汇总
- cp.setUsedPoint(cp.getUsedPoint()+couponTemplateDO.getPoint());
- customerPointMapper.updateById(cp);
+ @Override
+ public boolean expireActivityCouponTemplateAll() {
- //记录积分明细
- CustomerPointDetail detail = new CustomerPointDetail();
- detail.setUserId(customer.getUserId());
- detail.setCustomerId(customer.getId());
- detail.setPoint(couponTemplateDO.getPoint());
- detail.setChangeType(Constants.POINT_CHANGE_TYPE.reduce.name());
- detail.setType(Constants.POINT_TYPE.exchange.name());
- detail.setRecordDate(LocalDate.now());
- detail.setRemarks(couponTemplateDO.getCouponName());
- detail.create(SecurityUtils.getUserId());
- customerPointDetailMapper.insert(detail);
+ return couponTemplateMapperCustom.expireActivityCouponTemplateAll()>0;
}
@Override
--
Gitblit v1.9.3