gongzuming
2024-09-11 20983e788f1635ebee477569fe7394eec5c0e423
优化
已修改1个文件
90 ■■■■■ 文件已修改
src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
@@ -77,6 +78,9 @@
    @Autowired
    private MemberService memberService;
    @Autowired
    private RedisLockService lockService;
@@ -393,46 +397,58 @@
    }
    @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("优惠券不存在");
            }
            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);
            //更新积分汇总
            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);
        }catch (Exception e){
            throw new ValidationException("兑换失败");
        }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("积分不足");
        }
        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);
        //更新积分汇总
        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);
    }
    @Override