From f249c277d066e151a84b766a6b82c3bbdbe1326b Mon Sep 17 00:00:00 2001 From: 陶杰 <1378534974@qq.com> Date: 星期二, 03 九月 2024 13:24:01 +0800 Subject: [PATCH] 1.优惠券-所有修改方法dto自传id 2.优惠券-积分-批量接口改成post方法 3.优惠券-定时任务-会员优惠券每月一号凌晨未使用自动过期 4.优惠券-优惠券下单接口 --- src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java | 26 ++++++++ /dev/null | 15 ----- src/main/java/com/mzl/flower/web/v2/coupon/CouponRecordController.java | 4 + src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateController.java | 4 + src/main/java/com/mzl/flower/schedule/ScheduleService.java | 7 ++ src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java | 59 +++++++++++++++++++ src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateActivyController.java | 4 + src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateVipController.java | 3 src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java | 29 ++++++++- src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplatePointController.java | 15 ++-- src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateUserController.java | 9 -- 11 files changed, 139 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/mzl/flower/schedule/ScheduleService.java b/src/main/java/com/mzl/flower/schedule/ScheduleService.java index 2a0c3f6..75f9e07 100644 --- a/src/main/java/com/mzl/flower/schedule/ScheduleService.java +++ b/src/main/java/com/mzl/flower/schedule/ScheduleService.java @@ -197,4 +197,11 @@ log.info("会员优惠券结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); } + @Scheduled(cron = "0 30 0 1 * ?") + public void expiredVipCouponRecordList() { + log.info("会员优惠券过期开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + couponRecordService.expiredCouponRecordByListCurMonth(); + log.info("会员优惠券过期结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + } + } diff --git a/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java b/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java index bc3a84e..accb4a5 100644 --- a/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java +++ b/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java @@ -75,5 +75,31 @@ boolean checkCurMonVipCouponExists(String couponId, Long customId, LocalDateTime startDateTime,LocalDateTime endDateTime); + /** + * 优惠券使用 + * @param couponId + * @param orderId + * @return + */ + boolean useCoupon(String couponId,String orderId); + + /** + * 优惠券退单 + * @param couponId + * @param orderId + * @return + */ + boolean cancelCouponUsage(String couponId,String orderId); + + /** + * 根据订单号查找优惠券信息 + * @param orderId + * @return + */ + List<CouponRecordDO> getCouponListByOrderId(String orderId) ; + + + CouponRecordDO getCouponByOrderId(String orderId) ; + } diff --git a/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java b/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java index 71f0bc9..18e029a 100644 --- a/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java +++ b/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java @@ -249,6 +249,7 @@ public boolean grantVipCouponRecordList() { try{ + LocalDateTime now = LocalDateTime.now(); LocalDateTime firstDayStart = now.with(TemporalAdjusters.firstDayOfMonth()).withHour(0).withMinute(0).withSecond(0).withNano(0); LocalDateTime lastDayEnd = now.with(TemporalAdjusters.lastDayOfMonth()).withHour(23).withMinute(59).withSecond(59).withNano(0); @@ -424,4 +425,62 @@ return baseMapper.selectCount(queryWrapper)>0; } + + @Transactional + @Override + public boolean useCoupon(String couponId, String orderId) { + // 优惠券为空 + if(StringUtils.isBlank(couponId)){ + throw new IllegalArgumentException("无效的优惠券"); + } + // 验证优惠券存在且有效 + final CouponRecordDO couponRecordDO = baseMapper.selectById(couponId); + if(null==couponRecordDO || StringUtils.isBlank(couponRecordDO.getOrderId()) ){ + throw new IllegalArgumentException("无效的优惠券"); + } + if(couponRecordDO.getStatus().equals(CouponUsedStatusEnum.USED.getType())){ + throw new IllegalArgumentException("优惠券已经被使用"); + } + if(couponRecordDO.getStatus().equals(CouponUsedStatusEnum.EXPIRED.getType()) || LocalDateTime.now().isAfter(couponRecordDO.getEffectiveEnd())){ + throw new IllegalArgumentException("优惠券已过期"); + } + if(StringUtils.isBlank(orderId)){ + throw new IllegalArgumentException("订单id不能为空"); + } + + // 优惠券使用操作 + couponRecordDO.setStatus(CouponUsedStatusEnum.USED.getType()); + couponRecordDO.setUsedTime(LocalDateTime.now()); + couponRecordDO.setOrderId(orderId); + + return baseMapper.updateById(couponRecordDO)>0; + } + + @Transactional + @Override + public boolean cancelCouponUsage(String couponId, String orderId) { + // 查询订单使用的优惠券 + final CouponRecordDO couponRecordDO = getCouponByOrderId(orderId); + // TODO + + return false; + } + + @Override + public List<CouponRecordDO> getCouponListByOrderId(String orderId) { + QueryWrapper<CouponRecordDO> queryWrapper=new QueryWrapper<>(); + queryWrapper.lambda().eq(CouponRecordDO::getDeleted,TrueOrFalseEnum.FALSE.isFlag()) + .eq(CouponRecordDO::getOrderId,orderId); + + return baseMapper.selectList(queryWrapper); + } + + @Override + public CouponRecordDO getCouponByOrderId(String orderId) { + final List<CouponRecordDO> couponRecordDOList = getCouponListByOrderId(orderId); + if(CollectionUtils.isNotEmpty(couponRecordDOList)){ + return couponRecordDOList.get(0); + } + return null; + } } diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponRecordController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponRecordController.java index 9cd7758..e7cdb4f 100644 --- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponRecordController.java +++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponRecordController.java @@ -66,7 +66,9 @@ @PutMapping("/{id}") @ApiOperation(value = "修改", notes = "修改") - public ResponseEntity<ReturnDataDTO> update(@Validated @RequestBody CreateCouponRecordDTO dto) { + public ResponseEntity<ReturnDataDTO> update(@PathVariable String id,@Validated @RequestBody CreateCouponRecordDTO dto) { + + dto.setId(id); CouponRecordDO couponRecordDO= couponRecordService.getById(dto.getId()); if(null==couponRecordDO){ diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateActivyController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateActivyController.java index b0d20bc..9b7109e 100644 --- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateActivyController.java +++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateActivyController.java @@ -65,8 +65,10 @@ @PutMapping("/{id}") @ApiOperation(value = "修改", notes = "修改") - public ResponseEntity<ReturnDataDTO> update(@Validated @RequestBody CreateCouponTemplateActivyDTO dto) { + public ResponseEntity<ReturnDataDTO> update(@PathVariable String id,@Validated @RequestBody CreateCouponTemplateActivyDTO dto) { + // 手动设置id值 + dto.setId(id); // 信息验证 valid(dto); diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java index 5faa3c9..7658080 100644 --- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java +++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java @@ -5,11 +5,14 @@ import com.mzl.flower.base.BaseController; import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; +import com.mzl.flower.config.exception.ValidationException; import com.mzl.flower.config.security.SecurityUtils; +import com.mzl.flower.dto.request.coupon.CreateCouponRecordDTO; import com.mzl.flower.dto.request.coupon.QueryActivityEffectCouponDTO; import com.mzl.flower.dto.request.coupon.QueryMineCouponRecordDTO; import com.mzl.flower.dto.response.coupon.CouponTemplateAppVO; import com.mzl.flower.dto.response.coupon.CouponTemplateVO; +import com.mzl.flower.entity.coupon.CouponTemplateDO; import com.mzl.flower.enums.CouponCategoryEnum; import com.mzl.flower.enums.CouponGetTypeEnum; import com.mzl.flower.enums.CouponStatusEnum; @@ -19,12 +22,11 @@ import com.mzl.flower.utils.ConverterUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** @@ -113,5 +115,26 @@ } + @PostMapping("/receive") + @ApiOperation(value = "优惠券领取", notes = "优惠券领取") + public ResponseEntity<ReturnDataDTO> create(@Validated @RequestBody CreateCouponRecordDTO dto) { + + final CouponTemplateDO couponTemplateDO = couponTemplateService.getById(dto.getCouponId()); + if(null==couponTemplateDO){ + throw new ValidationException("优惠券不存在"); + } + + if(StringUtils.isNotBlank(couponTemplateDO.getStatus()) && couponTemplateDO.getStatus().equals(CouponStatusEnum.INACTIVE.getStatus())){ + throw new ValidationException("优惠券还未发布"); + } + if(StringUtils.isNotBlank(couponTemplateDO.getStatus()) && couponTemplateDO.getStatus().equals(CouponStatusEnum.EXPIRED.getStatus())){ + throw new ValidationException("优惠券已下架"); + } + + + couponRecordService.createCouponRecord(dto); + return returnData(R.SUCCESS.getCode(), null); + } + } diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateController.java index 2ab7890..aa89964 100644 --- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateController.java +++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateController.java @@ -46,8 +46,10 @@ @PutMapping("/{id}") @ApiOperation(value = "修改", notes = "修改") - public ResponseEntity<ReturnDataDTO> update(@Validated @RequestBody CreateCouponTemplateDTO dto) { + public ResponseEntity<ReturnDataDTO> update(@PathVariable String id,@Validated @RequestBody CreateCouponTemplateDTO dto) { + // 手动设置id值 + dto.setId(id); CouponTemplateDO couponTemplateDO= couponTemplateService.getById(dto.getId()); if(null==couponTemplateDO){ throw new ValidationException("优惠券不存在"); diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateCustomerController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateCustomerController.java deleted file mode 100644 index 8e02b37..0000000 --- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateCustomerController.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mzl.flower.web.v2.coupon; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** -* @author @TaoJie -* @since 2024-08-24 -*/ -@RestController -@RequestMapping("/v2/coupon-template-point-custom-re") -public class CouponTemplateCustomerController { - - -} diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplatePointController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplatePointController.java index 4b51ad0..9817a86 100644 --- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplatePointController.java +++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplatePointController.java @@ -65,8 +65,9 @@ @PutMapping("/{id}") @ApiOperation(value = "修改", notes = "修改") - public ResponseEntity<ReturnDataDTO> update(@Validated @RequestBody CreateCouponTemplatePointDTO dto) { + public ResponseEntity<ReturnDataDTO> update(@PathVariable String id,@Validated @RequestBody CreateCouponTemplatePointDTO dto) { // 信息校验 + dto.setId(id); valid(dto); CouponTemplateDO couponTemplateDO = couponTemplateService.getById(dto.getId()); @@ -153,9 +154,9 @@ return returnData(R.SUCCESS.getCode(), null); } - @PutMapping("/batch/expire") + @PostMapping("/batch/expire") @ApiOperation(value = "批量下架", notes = "批量下架") - public ResponseEntity<ReturnDataDTO> expireBatch(BatchCouponTemplateDTO dto) { + public ResponseEntity<ReturnDataDTO> expireBatch(@RequestBody BatchCouponTemplateDTO dto) { couponTemplateService.expireBatchCouponTemplate(dto); @@ -165,9 +166,9 @@ - @PutMapping("/batch/active") + @PostMapping("/batch/active") @ApiOperation(value = "批量发布", notes = "批量发布") - public ResponseEntity<ReturnDataDTO> activeBatch(BatchCouponTemplateDTO dto) { + public ResponseEntity<ReturnDataDTO> activeBatch(@RequestBody BatchCouponTemplateDTO dto) { couponTemplateService.activeBatchCouponTemplate(dto); @@ -175,9 +176,9 @@ } - @DeleteMapping("/batch/del") + @PostMapping("/batch/del") @ApiOperation(value = "批量删除", notes = "批量删除") - public ResponseEntity<ReturnDataDTO> deleteBatch(BatchCouponTemplateDTO dto) { + public ResponseEntity<ReturnDataDTO> deleteBatch(@RequestBody BatchCouponTemplateDTO dto) { couponTemplateService.deleteBatchCouponTemplate(dto); return returnData(R.SUCCESS.getCode(), null); diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateUserController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateUserController.java index a472602..5b9f19d 100644 --- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateUserController.java +++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateUserController.java @@ -7,7 +7,6 @@ import com.mzl.flower.base.ReturnDataDTO; import com.mzl.flower.config.exception.ValidationException; import com.mzl.flower.dto.request.coupon.CreateCouponTemplateBO; -import com.mzl.flower.dto.request.coupon.CreateCouponTemplatePointDTO; import com.mzl.flower.dto.request.coupon.CreateCouponTemplateUserDTO; import com.mzl.flower.dto.request.coupon.QueryCouponDTO; import com.mzl.flower.dto.response.coupon.CouponTemplatePointVO; @@ -29,11 +28,6 @@ import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; /** @@ -81,8 +75,9 @@ @PutMapping("/{id}") @ApiOperation(value = "修改", notes = "修改") - public ResponseEntity<ReturnDataDTO> update(@Validated @RequestBody CreateCouponTemplateUserDTO dto) { + public ResponseEntity<ReturnDataDTO> update(@PathVariable String id,@Validated @RequestBody CreateCouponTemplateUserDTO dto) { + dto.setId(id); if (dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType()) && dto.getMinOrderAmount().compareTo(dto.getCouponDiscountValue()) < 0) { throw new ValidationException("订单金额不能小于折扣金额"); diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateVipController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateVipController.java index 158a82b..be32580 100644 --- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateVipController.java +++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateVipController.java @@ -63,8 +63,9 @@ @PutMapping("/{id}") @ApiOperation(value = "修改", notes = "修改") - public ResponseEntity<ReturnDataDTO> update(@Validated @RequestBody CreateCouponTemplateVipDTO dto) { + public ResponseEntity<ReturnDataDTO> update(@PathVariable String id,@Validated @RequestBody CreateCouponTemplateVipDTO dto) { + dto.setId(id); // 信息验证 valid(dto); -- Gitblit v1.9.3