feat(market):新增优惠卷回退的功能

This commit is contained in:
JIAN 2024-10-01 15:53:44 +08:00
parent 75ab9620f4
commit 652acfea14
6 changed files with 85 additions and 22 deletions

View File

@ -1,5 +1,6 @@
package com.jzo2o.api.market;
import com.jzo2o.api.market.dto.request.CouponUseBackReqDTO;
import com.jzo2o.api.market.dto.request.CouponUseReqDTO;
import com.jzo2o.api.market.dto.response.AvailableCouponsResDTO;
import com.jzo2o.api.market.dto.response.CouponUseResDTO;
@ -29,4 +30,10 @@ public interface CouponApi {
*/
@PostMapping("/use")
CouponUseResDTO useCoupon(@RequestBody CouponUseReqDTO couponUseReqDTO);
/**
* 用户取消订单退回使用优惠卷
*/
@PostMapping("/useBack")
void useBack(@RequestBody CouponUseBackReqDTO couponUseBackReqDTO);
}

View File

@ -4,8 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("优惠券使用退回请求模型")
@Data
@ApiModel("优惠券使用退回请求模型")
public class CouponUseBackReqDTO {
@ApiModelProperty("优惠券id")
private Long id;
@ -13,4 +13,4 @@ public class CouponUseBackReqDTO {
private Long ordersId;
@ApiModelProperty("用户id")
private Long userId;
}
}

View File

@ -1,10 +1,12 @@
package com.jzo2o.market.controller.inner;
import com.jzo2o.api.market.CouponApi;
import com.jzo2o.api.market.dto.request.CouponUseBackReqDTO;
import com.jzo2o.api.market.dto.request.CouponUseReqDTO;
import com.jzo2o.api.market.dto.response.AvailableCouponsResDTO;
import com.jzo2o.api.market.dto.response.CouponUseResDTO;
import com.jzo2o.market.service.ICouponService;
import com.jzo2o.market.service.ICouponUseBackService;
import com.jzo2o.market.service.ICouponWriteOffService;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
@ -27,6 +29,8 @@ public class CouponController implements CouponApi {
private ICouponService couponService;
@Resource
private ICouponWriteOffService couponWriteOffService;
@Resource
private ICouponUseBackService couponUseBackService;
/**
* 根据订单金额获取当前用户可用优惠卷
@ -45,4 +49,11 @@ public class CouponController implements CouponApi {
public CouponUseResDTO useCoupon(@RequestBody CouponUseReqDTO couponUseReqDTO) {
return couponWriteOffService.use(couponUseReqDTO);
}
@Override
@PostMapping("/useBack")
@ApiOperation("优惠券退回接口")
public void useBack(@RequestBody CouponUseBackReqDTO couponUseBackReqDTO) {
couponUseBackService.useBack(couponUseBackReqDTO);
}
}

View File

@ -1,22 +1,24 @@
package com.jzo2o.market.model.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 优惠券使用回退记录
* </p>
*
* @author itcast
* @since 2023-09-18
*/
@Data
@Builder
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class CouponUseBack implements Serializable {
@ -26,7 +28,7 @@ public class CouponUseBack implements Serializable {
/**
* 回退记录id
*/
@TableId(value = "id", type = IdType.NONE)
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
@ -48,6 +50,4 @@ public class CouponUseBack implements Serializable {
* 核销时间
*/
private LocalDateTime writeOffTime;
}
}

View File

@ -1,18 +1,19 @@
package com.jzo2o.market.service;
import com.jzo2o.market.model.domain.CouponUseBack;
import com.baomidou.mybatisplus.extension.service.IService;
import java.time.LocalDateTime;
import com.jzo2o.api.market.dto.request.CouponUseBackReqDTO;
import com.jzo2o.market.model.domain.CouponUseBack;
/**
* <p>
* 优惠券使用回退记录 服务类
* </p>
*
* @author itcast
* @since 2023-09-18
*/
public interface ICouponUseBackService extends IService<CouponUseBack> {
}
/**
* 用户退回优惠卷
*/
void useBack(CouponUseBackReqDTO couponUseBackReqDTO);
}

View File

@ -1,25 +1,69 @@
package com.jzo2o.market.service.impl;
import com.jzo2o.common.utils.DateUtils;
import com.jzo2o.common.utils.IdUtils;
import com.jzo2o.market.model.domain.CouponUseBack;
import com.jzo2o.market.mapper.CouponUseBackMapper;
import com.jzo2o.market.service.ICouponUseBackService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jzo2o.api.market.dto.request.CouponUseBackReqDTO;
import com.jzo2o.common.expcetions.BadRequestException;
import com.jzo2o.common.expcetions.DBException;
import com.jzo2o.common.utils.ObjectUtils;
import com.jzo2o.market.enums.CouponStatusEnum;
import com.jzo2o.market.mapper.CouponUseBackMapper;
import com.jzo2o.market.model.domain.Coupon;
import com.jzo2o.market.model.domain.CouponUseBack;
import com.jzo2o.market.service.ICouponService;
import com.jzo2o.market.service.ICouponUseBackService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime;
/**
* <p>
* 优惠券使用回退记录 服务实现类
* </p>
*
* @author itcast
* @since 2023-09-18
*/
@Service
public class CouponUseBackServiceImpl extends ServiceImpl<CouponUseBackMapper, CouponUseBack> implements ICouponUseBackService {
@Resource
private ICouponService couponService;
}
@Override
@Transactional
public void useBack(CouponUseBackReqDTO couponUseBackReqDTO) {
Long couponId = couponUseBackReqDTO.getId();
Long userId = couponUseBackReqDTO.getUserId();
Long ordersId = couponUseBackReqDTO.getOrdersId();
Coupon coupon = couponService.getById(couponId);
if (ObjectUtils.isEmpty(coupon) || ObjectUtils.notEqual(coupon.getUserId(), userId)) {
throw new BadRequestException("优惠卷不存在");
} else if (coupon.getStatus() != CouponStatusEnum.USED) {
throw new BadRequestException("优惠卷未使用");
} else if (ObjectUtils.notEqual(coupon.getOrdersId(), ordersId)) {
throw new BadRequestException("优惠券对应订单错误");
}
LocalDateTime nowTime = LocalDateTime.now();
CouponStatusEnum status = coupon.getValidityTime().isAfter(nowTime) ? CouponStatusEnum.NO_USE : CouponStatusEnum.INVALID;
if (!couponService.lambdaUpdate()
.eq(Coupon::getId, couponId)
.set(Coupon::getUseTime, null)
.set(Coupon::getStatus, status)
.set(Coupon::getOrdersId, null)
.update()) {
throw new DBException("更新优惠卷表失败");
}
if (!this.save(CouponUseBack.builder()
.couponId(couponId)
.userId(userId)
.useBackTime(nowTime)
.writeOffTime(coupon.getUseTime())
.build())) {
throw new DBException("更新退回表失败");
}
}
}