From 2ac550a8e49e1e6105793a30c3e21a37f4397cff Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Thu, 23 Sep 2021 15:22:38 +0800 Subject: [PATCH] add refund and fix some order --- src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java | 18 ++- src/main/java/cc/mrbird/febs/mall/vo/OrderRefundVo.java | 32 ++++++ src/main/java/cc/mrbird/febs/mall/mapper/MallOrderRefundMapper.java | 3 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 110 ++++++++++++++++++++- src/main/java/cc/mrbird/febs/mall/conversion/MallOrderRefundConversion.java | 17 +++ src/main/java/cc/mrbird/febs/mall/dto/RefundExpressDto.java | 24 ++++ src/main/java/cc/mrbird/febs/mall/vo/OrderListVo.java | 2 src/main/java/cc/mrbird/febs/common/enumerates/OrderRefundStatusEnum.java | 42 ++++++++ src/main/java/cc/mrbird/febs/common/enumerates/OrderStatusEnum.java | 2 src/main/resources/mapper/modules/MallShoppingCartMapper.xml | 5 + src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java | 10 + src/main/java/cc/mrbird/febs/common/utils/AppContants.java | 4 src/main/java/cc/mrbird/febs/mall/entity/MallOrderRefund.java | 2 src/main/java/cc/mrbird/febs/mall/mapper/MallShoppingCartMapper.java | 2 src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java | 3 src/main/resources/mapper/modules/MallOrderRefundMapper.xml | 3 16 files changed, 258 insertions(+), 21 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/OrderRefundStatusEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/OrderRefundStatusEnum.java new file mode 100644 index 0000000..60e36fc --- /dev/null +++ b/src/main/java/cc/mrbird/febs/common/enumerates/OrderRefundStatusEnum.java @@ -0,0 +1,42 @@ +package cc.mrbird.febs.common.enumerates; + +import lombok.Getter; + +/** + * @author wzy + * @date 2021-09-23 + **/ +@Getter +public enum OrderRefundStatusEnum { + + /** + * 退款已提交 + */ + REFUND_APPLY(1), + /** + * 同意退款 + */ + AGREE(2), + /** + * 驳回退款 + */ + DISAGREE(3), + /** + * 物流信息已提交 + */ + EXPRESS_SUBMIT(4), + /** + * 已退款 + */ + FINISH(5), + /** + * 已取消 + */ + CANCEL(6); + + private final Integer value; + + OrderRefundStatusEnum(int value) { + this.value = value; + } +} diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/OrderStatusEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/OrderStatusEnum.java index a03318e..96cf5b7 100644 --- a/src/main/java/cc/mrbird/febs/common/enumerates/OrderStatusEnum.java +++ b/src/main/java/cc/mrbird/febs/common/enumerates/OrderStatusEnum.java @@ -26,7 +26,7 @@ */ REFUNDING(5), /** - * 已退款 + * 退款处理完成 */ REFUNDED(6), /** diff --git a/src/main/java/cc/mrbird/febs/common/utils/AppContants.java b/src/main/java/cc/mrbird/febs/common/utils/AppContants.java index 4d0dd5b..c8af7fd 100644 --- a/src/main/java/cc/mrbird/febs/common/utils/AppContants.java +++ b/src/main/java/cc/mrbird/febs/common/utils/AppContants.java @@ -58,5 +58,9 @@ public static final String TIME_OUT = "time_out"; + public static final int DEL_FLAG_Y = 1; + + public static final int DEL_FLAG_N = 2; + } diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java index bcac137..d44f7d1 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java @@ -1,10 +1,7 @@ package cc.mrbird.febs.mall.controller; import cc.mrbird.febs.common.entity.FebsResponse; -import cc.mrbird.febs.mall.dto.AddOrderDto; -import cc.mrbird.febs.mall.dto.AddRefundDto; -import cc.mrbird.febs.mall.dto.OrderListDto; -import cc.mrbird.febs.mall.dto.PayOrderDto; +import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.service.IApiMallOrderInfoService; import cc.mrbird.febs.mall.vo.OrderDetailVo; import cc.mrbird.febs.mall.vo.OrderListVo; @@ -93,9 +90,16 @@ } @ApiOperation(value = "提交退款申请", notes = "提交退款申请") - @PostMapping(value = "/addRefund") - public FebsResponse addRefund(@RequestBody AddRefundDto addRefundDto) { - return null; + @PostMapping(value = "/applyRefund") + public FebsResponse applyRefund(@RequestBody AddRefundDto addRefundDto) { + mallOrderInfoService.applyRefund(addRefundDto); + return new FebsResponse().success().message("提交成功"); } + @ApiOperation(value = "提交退款物流信息", notes = "提交退款物流信息") + @PostMapping(value = "/refundExpress") + public FebsResponse refundExpress(@RequestBody RefundExpressDto refundExpressDto) { + mallOrderInfoService.refundExpress(refundExpressDto); + return new FebsResponse().success().message("提交成功"); + } } diff --git a/src/main/java/cc/mrbird/febs/mall/conversion/MallOrderRefundConversion.java b/src/main/java/cc/mrbird/febs/mall/conversion/MallOrderRefundConversion.java new file mode 100644 index 0000000..5eaaa0f --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/conversion/MallOrderRefundConversion.java @@ -0,0 +1,17 @@ +package cc.mrbird.febs.mall.conversion; + +import cc.mrbird.febs.mall.entity.MallOrderRefund; +import cc.mrbird.febs.mall.vo.OrderRefundVo; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * @author wzy + * @date 2021-09-23 + **/ +@Mapper +public abstract class MallOrderRefundConversion { + public static final MallOrderRefundConversion INSTANCE = Mappers.getMapper(MallOrderRefundConversion.class); + + public abstract OrderRefundVo entityToVo(MallOrderRefund orderRefund); +} diff --git a/src/main/java/cc/mrbird/febs/mall/dto/RefundExpressDto.java b/src/main/java/cc/mrbird/febs/mall/dto/RefundExpressDto.java new file mode 100644 index 0000000..94e5948 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/RefundExpressDto.java @@ -0,0 +1,24 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author wzy + * @date 2021-09-23 + **/ +@Data +@ApiModel(value = "RefundExpressDto", description = "退款订单物流接收参数类") +public class RefundExpressDto { + + @ApiModelProperty(value = "订单ID", example = "1") + private Long id; + + @ApiModelProperty(value = "物流单号", example = "123") + private String expressNo; + + @ApiModelProperty(value = "物流公司", example = "中通") + private String expressCom; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderRefund.java b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderRefund.java index 6ee61ac..dd56255 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderRefund.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderRefund.java @@ -23,7 +23,7 @@ private String remark; /** - * 1-已申请 2-同意退款 3-驳回退款 4-已提交物流信息 5-已退款 + * 1-已申请 2-同意退款 3-驳回退款 4-已提交物流信息 5-已退款 6-已取消 */ private Integer status; diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderRefundMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderRefundMapper.java index 160dda6..c99e4ee 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderRefundMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderRefundMapper.java @@ -2,6 +2,9 @@ import cc.mrbird.febs.mall.entity.MallOrderRefund; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; public interface MallOrderRefundMapper extends BaseMapper<MallOrderRefund> { + + MallOrderRefund selectOrderRefundByOrderId(@Param("orderId") Long orderId); } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallShoppingCartMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallShoppingCartMapper.java index 8b79d93..c90781a 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallShoppingCartMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallShoppingCartMapper.java @@ -15,4 +15,6 @@ List<MallShoppingCart> selectCartGoodsList(@Param("memberId") Long memberId); MallShoppingCart selectCartGoodsBySkuId(@Param("skuId") Long skuId, @Param("memberId") Long memberId); + + int delBySkuId(@Param("skuId") Long skuId, @Param("memberId") Long memberId); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java index fc62ef8..bfefbbc 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java @@ -1,8 +1,6 @@ package cc.mrbird.febs.mall.service; -import cc.mrbird.febs.mall.dto.AddOrderDto; -import cc.mrbird.febs.mall.dto.OrderListDto; -import cc.mrbird.febs.mall.dto.PayOrderDto; +import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.MallOrderInfo; import cc.mrbird.febs.mall.vo.OrderDetailVo; import cc.mrbird.febs.mall.vo.OrderListVo; @@ -23,4 +21,10 @@ OrderDetailVo findOrderDetailsById(Long id); void confirmOrder(Long id); + + void delOrder(Long id); + + void applyRefund(AddRefundDto addRefundDto); + + void refundExpress(RefundExpressDto refundExpressDto); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java index 5ccdcba..e66a8cd 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java @@ -1,20 +1,21 @@ package cc.mrbird.febs.mall.service.impl; +import cc.mrbird.febs.common.enumerates.OrderRefundStatusEnum; import cc.mrbird.febs.common.enumerates.OrderStatusEnum; import cc.mrbird.febs.common.exception.FebsException; +import cc.mrbird.febs.common.utils.AppContants; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.common.utils.MallUtils; import cc.mrbird.febs.mall.conversion.MallOrderInfoConversion; -import cc.mrbird.febs.mall.dto.AddOrderDto; -import cc.mrbird.febs.mall.dto.AddOrderItemDto; -import cc.mrbird.febs.mall.dto.OrderListDto; -import cc.mrbird.febs.mall.dto.PayOrderDto; +import cc.mrbird.febs.mall.conversion.MallOrderRefundConversion; +import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.IApiMallOrderInfoService; import cc.mrbird.febs.mall.vo.OrderDetailVo; import cc.mrbird.febs.mall.vo.OrderListVo; +import cc.mrbird.febs.mall.vo.OrderRefundVo; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; @@ -48,6 +49,9 @@ private final MallMemberMapper memberMapper; private final IApiMallMemberWalletService memberWalletService; private final MallExpressInfoMapper expressInfoMapper; + private final MallOrderRefundMapper mallOrderRefundMapper; + private final MallOrderRefundOperationMapper mallOrderRefundOperationMapper; + private final MallShoppingCartMapper mallShoppingCartMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -106,6 +110,10 @@ sku.setStock(sku.getStock() - item.getCnt()); mallGoodsSkuMapper.updateById(sku); + + if (addOrderDto.getType() == 1) { + mallShoppingCartMapper.delBySkuId(sku.getId(), member.getId()); + } } orderInfo.setAmount(total); @@ -119,7 +127,7 @@ public void cancelOrder(Long id) { MallMember member = LoginUserUtil.getLoginUser(); MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id); - if (orderInfo == null) { + if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { throw new FebsException("订单不存在"); } @@ -137,7 +145,7 @@ public String payOrder(PayOrderDto payOrderDto) { MallMember member = LoginUserUtil.getLoginUser(); MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), payOrderDto.getId()); - if (orderInfo == null) { + if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { throw new FebsException("订单不存在"); } @@ -186,7 +194,7 @@ @Override public OrderDetailVo findOrderDetailsById(Long id) { MallOrderInfo orderInfo = this.baseMapper.selectOrderDetailsById(id); - if (orderInfo == null) { + if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { throw new FebsException("订单不存在"); } @@ -197,6 +205,12 @@ orderDetailVo.setExpressNo(expressInfo.getExpressNo()); orderDetailVo.setExpressCom(expressInfo.getExpressCom()); } + + if (orderInfo.getStatus() == OrderStatusEnum.REFUNDING.getValue() || orderInfo.getStatus() == OrderStatusEnum.REFUNDED.getValue()) { + MallOrderRefund orderRefund = mallOrderRefundMapper.selectOrderRefundByOrderId(orderInfo.getId()); + OrderRefundVo orderRefundVo = MallOrderRefundConversion.INSTANCE.entityToVo(orderRefund); + orderDetailVo.setOrderRefund(orderRefundVo); + } return orderDetailVo; } @@ -205,12 +219,92 @@ public void confirmOrder(Long id) { MallMember member = LoginUserUtil.getLoginUser(); MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id); - if (orderInfo == null) { + if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { throw new FebsException("订单不存在"); + } + + if (orderInfo.getStatus() != OrderStatusEnum.WAIT_FINISH.getValue()) { + throw new FebsException("该状态不能确认收货"); } orderInfo.setStatus(OrderStatusEnum.FINISH.getValue()); orderInfo.setReceivingTime(new Date()); this.baseMapper.updateById(orderInfo); } + + @Override + public void delOrder(Long id) { + MallMember member = LoginUserUtil.getLoginUser(); + MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id); + if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { + throw new FebsException("订单不存在"); + } + + orderInfo.setDelFlag(AppContants.DEL_FLAG_Y); + this.baseMapper.updateById(orderInfo); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void applyRefund(AddRefundDto addRefundDto) { + MallOrderInfo orderInfo = this.baseMapper.selectById(addRefundDto.getId()); + if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { + throw new FebsException("订单不存在"); + } + + if (orderInfo.getStatus() == OrderStatusEnum.REFUNDING.getValue()) { + throw new FebsException("已提交退款, 请勿重复提交"); + } + + if (orderInfo.getStatus() == OrderStatusEnum.WAIT_PAY.getValue()) { + throw new FebsException("该订单不能退款"); + } + + MallMember member = LoginUserUtil.getLoginUser(); + orderInfo.setStatus(OrderStatusEnum.REFUNDING.getValue()); + this.baseMapper.updateById(orderInfo); + + MallOrderRefund orderRefund = mallOrderRefundMapper.selectOrderRefundByOrderId(orderInfo.getId()); + if (orderRefund == null) { + orderRefund = new MallOrderRefund(); + orderRefund.setOrderId(orderInfo.getId()); + orderRefund.setMemberId(member.getId()); + orderRefund.setDesp(addRefundDto.getDesp()); + orderRefund.setReason(addRefundDto.getReason()); + orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue()); + mallOrderRefundMapper.insert(orderRefund); + } else { + orderRefund.setDesp(addRefundDto.getDesp()); + orderRefund.setReason(addRefundDto.getReason()); + orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue()); + mallOrderRefundMapper.updateById(orderRefund); + } + + + MallOrderRefundOperation operation = new MallOrderRefundOperation(); + operation.setOrderId(orderInfo.getId()); + operation.setRefundId(orderRefund.getId()); + operation.setContent(StrUtil.format("用户:{}提交退款申请", member.getName())); + mallOrderRefundOperationMapper.insert(operation); + } + + @Override + public void refundExpress(RefundExpressDto refundExpressDto) { + MallMember member = LoginUserUtil.getLoginUser(); + + MallOrderRefund orderRefund = mallOrderRefundMapper.selectOrderRefundByOrderId(refundExpressDto.getId()); + if (!OrderRefundStatusEnum.AGREE.getValue().equals(orderRefund.getStatus())) { + throw new FebsException("暂不能提交物流信息"); + } + + orderRefund.setExpressNo(refundExpressDto.getExpressNo()); + orderRefund.setExpressCom(refundExpressDto.getExpressCom()); + mallOrderRefundMapper.updateById(orderRefund); + + MallOrderRefundOperation operation = new MallOrderRefundOperation(); + operation.setOrderId(refundExpressDto.getId()); + operation.setRefundId(orderRefund.getId()); + operation.setContent(StrUtil.format("用户:{}提交物流信息,快递公司:{},单号:{}", member.getName(), refundExpressDto.getExpressCom(), refundExpressDto.getExpressNo())); + mallOrderRefundOperationMapper.insert(operation); + } } diff --git a/src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java b/src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java index 36d8f8e..f18c329 100644 --- a/src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java +++ b/src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java @@ -51,4 +51,7 @@ @ApiModelProperty(value = "订单明细") private List<OrderItemVo> items; + + @ApiModelProperty(value = "订单退款信息") + private OrderRefundVo orderRefund; } diff --git a/src/main/java/cc/mrbird/febs/mall/vo/OrderListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/OrderListVo.java index 24b70e1..85089a9 100644 --- a/src/main/java/cc/mrbird/febs/mall/vo/OrderListVo.java +++ b/src/main/java/cc/mrbird/febs/mall/vo/OrderListVo.java @@ -25,7 +25,7 @@ @ApiModelProperty(value = "下单时间") private Date orderTime; - @ApiModelProperty(value = "状态 1-待支付2-待发货3-待收货4-已完成5-退款中6-已退款7-已取消") + @ApiModelProperty(value = "状态 1-待支付 2-待发货 3-待收货 4-已完成 5-退款中 6-退款处理完成 7-已取消") private Integer status; @ApiModelProperty(value = "订单金额") diff --git a/src/main/java/cc/mrbird/febs/mall/vo/OrderRefundVo.java b/src/main/java/cc/mrbird/febs/mall/vo/OrderRefundVo.java new file mode 100644 index 0000000..c320147 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/OrderRefundVo.java @@ -0,0 +1,32 @@ +package cc.mrbird.febs.mall.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author wzy + * @date 2021-09-23 + **/ +@Data +@ApiModel(value = "OrderRefundVo", description = "订单退款详情返回参数类") +public class OrderRefundVo { + + @ApiModelProperty(value = "退款ID") + private Long id; + + @ApiModelProperty(value = "退款理由") + private String reason; + + @ApiModelProperty(value = "描述") + private String desp; + + @ApiModelProperty(value = "退款状态 1-已申请 2-同意退款 3-驳回退款 4-已提交物流信息 5-已退款 6-已取消") + private Integer status; + + @ApiModelProperty(value = "物流单号") + private String expressNo; + + @ApiModelProperty(value = "物流公司") + private String expressCom; +} diff --git a/src/main/resources/mapper/modules/MallOrderRefundMapper.xml b/src/main/resources/mapper/modules/MallOrderRefundMapper.xml index 7033820..383920b 100644 --- a/src/main/resources/mapper/modules/MallOrderRefundMapper.xml +++ b/src/main/resources/mapper/modules/MallOrderRefundMapper.xml @@ -2,4 +2,7 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cc.mrbird.febs.mall.mapper.MallOrderRefundMapper"> + <select id="selectOrderRefundByOrderId" resultType="cc.mrbird.febs.mall.entity.MallOrderRefund"> + select * from mall_order_refund where order_id=#{orderId} + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallShoppingCartMapper.xml b/src/main/resources/mapper/modules/MallShoppingCartMapper.xml index 1dd5d8d..353e3ff 100644 --- a/src/main/resources/mapper/modules/MallShoppingCartMapper.xml +++ b/src/main/resources/mapper/modules/MallShoppingCartMapper.xml @@ -20,4 +20,9 @@ select * from mall_shopping_cart where member_id=#{memberId} and sku_id=#{skuId} </select> + + <delete id="delBySkuId"> + delete from mall_shopping_cart + where member_id=#{memberId} and sku_id=#{skuId} + </delete> </mapper> \ No newline at end of file -- Gitblit v1.9.1