feat(market):新增优惠卷回退的功能
This commit is contained in:
parent
75ab9620f4
commit
652acfea14
@ -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);
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
@ -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("更新退回表失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user