feat: 增加退款状态(部分退款、全部退款)

This commit is contained in:
lele0521 2024-01-05 17:29:34 +08:00
parent b40533c553
commit c9a0ce7985
10 changed files with 125 additions and 15 deletions

10
DB/2024-1-5.sql Normal file
View File

@ -0,0 +1,10 @@
/**
*/
ALTER TABLE li_order_item ADD `is_refund` varchar(255) DEFAULT NULL COMMENT '是否退款';
/**
*/
ALTER TABLE li_order_item ADD `refund_price` decimal(10,2) DEFAULT NULL COMMENT '退款金额';

View File

@ -12,6 +12,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
@ -37,7 +38,7 @@ public class FileDirectoryController {
@ApiOperation(value = "添加文件目录")
@PostMapping
public ResultMessage<FileDirectory> addSceneFileList(@RequestBody FileDirectory fileDirectory) {
public ResultMessage<FileDirectory> addSceneFileList(@RequestBody @Valid FileDirectory fileDirectory) {
fileDirectory.setDirectoryType(UserContext.getCurrentUser().getRole().name());
fileDirectoryService.save(fileDirectory);
return ResultUtil.data(fileDirectory);
@ -45,7 +46,7 @@ public class FileDirectoryController {
@ApiOperation(value = "修改文件目录")
@PutMapping
public ResultMessage<FileDirectory> editSceneFileList(@RequestBody FileDirectory fileDirectory) {
public ResultMessage<FileDirectory> editSceneFileList(@RequestBody @Valid FileDirectory fileDirectory) {
fileDirectory.setDirectoryType(UserContext.getCurrentUser().getRole().name());
fileDirectoryService.updateById(fileDirectory);
return ResultUtil.data(fileDirectory);

View File

@ -1,10 +1,13 @@
package cn.lili.event.impl;
import cn.lili.common.utils.CurrencyUtil;
import cn.lili.event.AfterSaleStatusChangeEvent;
import cn.lili.event.TradeEvent;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.enums.RefundStatusEnum;
import cn.lili.modules.order.order.service.OrderItemService;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.order.order.service.TradeService;
@ -43,16 +46,27 @@ public class OrderStatusHandlerExecute implements TradeEvent, AfterSaleStatusCha
@Override
public void afterSaleStatusChange(AfterSale afterSale) {
Order order = orderService.getBySn(afterSale.getOrderSn());
OrderItem orderItem = orderItemService.getBySn(afterSale.getOrderItemSn());
if (afterSale.getServiceStatus().equals(AfterSaleStatusEnum.COMPLETE.name())) {
if (orderItem.getReturnGoodsNumber().equals(orderItem.getNum())) {
orderItem.setIsRefund(RefundStatusEnum.ALL_REFUND.name());
} else {
orderItem.setIsRefund(RefundStatusEnum.PART_REFUND.name());
}
orderItem.setRefundPrice(CurrencyUtil.add(afterSale.getActualRefundPrice(), orderItem.getRefundPrice()));
orderItemService.updateByAfterSale(orderItem);
//循环订单货物判断是否已经全部售后
List<OrderItem> orderItems = orderItemService.getByOrderSn(afterSale.getOrderSn());
// 总退货数量
int returnCount = 0;
// 总购买数量
int deliverCount = 0;
for (OrderItem orderItem : orderItems) {
returnCount += orderItem.getReturnGoodsNumber();
deliverCount += orderItem.getNum();
for (OrderItem item : orderItems) {
returnCount += item.getReturnGoodsNumber();
deliverCount += item.getNum();
}
if (returnCount == deliverCount) {
orderService.systemCancel(afterSale.getOrderSn(),"订单货物全部退款",false);

View File

@ -9,6 +9,7 @@ import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
@Data
@TableName("li_file_directory")
@ -26,7 +27,9 @@ public class FileDirectory extends BaseEntity {
private String ownerId;
@ApiModelProperty(value = "父分类ID")
private String parentId;
@ApiModelProperty(value = "层级")
@NotNull(message = "层级不能为空")
@Min(value = 0, message = "层级最小为0")
@Max(value = 2, message = "层级最大为2")
private Integer level;

View File

@ -2,6 +2,7 @@ package cn.lili.modules.order.aftersale.serviceimpl;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
@ -22,10 +23,7 @@ import cn.lili.modules.order.aftersale.mapper.AfterSaleMapper;
import cn.lili.modules.order.aftersale.service.AfterSaleService;
import cn.lili.modules.order.order.entity.dos.Order;
import cn.lili.modules.order.order.entity.dos.OrderItem;
import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderTypeEnum;
import cn.lili.modules.order.order.entity.enums.PayStatusEnum;
import cn.lili.modules.order.order.entity.enums.*;
import cn.lili.modules.order.order.service.OrderItemService;
import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.order.trade.entity.enums.AfterSaleRefundWayEnum;
@ -461,8 +459,9 @@ public class AfterSaleServiceImpl extends ServiceImpl<AfterSaleMapper, AfterSale
case APPLY: {
// 买家申请售后时已经输入了订单售后数量这里不需要(+x)处理
orderItem.setReturnGoodsNumber(orderItem.getReturnGoodsNumber() + afterSale.getNum());
orderItem.setRefundPrice(CurrencyUtil.add(orderItem.getRefundPrice(), afterSale.getApplyRefundPrice()));
//修改orderItem订单
this.updateOrderItem(orderItem);
this.updateOrderItem(orderItem, afterSale);
break;
}
@ -471,8 +470,9 @@ public class AfterSaleServiceImpl extends ServiceImpl<AfterSaleMapper, AfterSale
case BUYER_CANCEL:
case SELLER_TERMINATION: {
orderItem.setReturnGoodsNumber(orderItem.getReturnGoodsNumber() - afterSale.getNum());
orderItem.setRefundPrice(CurrencyUtil.sub(orderItem.getRefundPrice(), afterSale.getApplyRefundPrice()));
//修改orderItem订单
this.updateOrderItem(orderItem);
this.updateOrderItem(orderItem, afterSale);
break;
}
default:
@ -627,7 +627,7 @@ public class AfterSaleServiceImpl extends ServiceImpl<AfterSaleMapper, AfterSale
* @return void
* @author ftyy
**/
private void updateOrderItem(OrderItem orderItem) {
private void updateOrderItem(OrderItem orderItem, AfterSale afterSale) {
//订单状态不能为新订单,已失效订单或未申请订单才可以去修改订单信息
OrderItemAfterSaleStatusEnum afterSaleTypeEnum = OrderItemAfterSaleStatusEnum.valueOf(orderItem.getAfterSaleStatus());
switch (afterSaleTypeEnum) {
@ -652,10 +652,27 @@ public class AfterSaleServiceImpl extends ServiceImpl<AfterSaleMapper, AfterSale
default:
break;
}
orderItemService.update(new LambdaUpdateWrapper<OrderItem>()
LambdaUpdateWrapper<OrderItem> lambdaUpdateWrapper = new LambdaUpdateWrapper<OrderItem>()
.eq(OrderItem::getSn, orderItem.getSn())
.set(OrderItem::getAfterSaleStatus, orderItem.getAfterSaleStatus())
.set(OrderItem::getReturnGoodsNumber, orderItem.getReturnGoodsNumber()));
.set(OrderItem::getReturnGoodsNumber, orderItem.getReturnGoodsNumber());
if (afterSale.getServiceStatus().equals(AfterSaleStatusEnum.COMPLETE.name())) {
if (orderItem.getReturnGoodsNumber().equals(orderItem.getNum())) {
lambdaUpdateWrapper.set(OrderItem::getIsRefund, RefundStatusEnum.ALL_REFUND.name());
} else {
lambdaUpdateWrapper.set(OrderItem::getIsRefund, RefundStatusEnum.PART_REFUND.name());
}
} else if (afterSale.getServiceStatus().equals(AfterSaleStatusEnum.APPLY.name())) {
lambdaUpdateWrapper.set(OrderItem::getIsRefund, RefundStatusEnum.REFUNDING.name());
} else if (afterSale.getServiceStatus().equals(AfterSaleStatusEnum.REFUSE.name()) ||
afterSale.getServiceStatus().equals(AfterSaleStatusEnum.BUYER_CANCEL.name()) ||
afterSale.getServiceStatus().equals(AfterSaleStatusEnum.SELLER_TERMINATION.name())) {
lambdaUpdateWrapper.set(OrderItem::getIsRefund, RefundStatusEnum.NO_REFUND.name());
}
orderItemService.update(lambdaUpdateWrapper);
}
}

View File

@ -11,6 +11,7 @@ import cn.lili.modules.order.order.entity.dto.PriceDetailDTO;
import cn.lili.modules.order.order.entity.enums.CommentStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderComplaintStatusEnum;
import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum;
import cn.lili.modules.order.order.entity.enums.RefundStatusEnum;
import cn.lili.modules.promotion.entity.vos.PromotionSkuVO;
import cn.lili.mybatis.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
@ -115,6 +116,14 @@ public class OrderItem extends BaseEntity {
@ApiModelProperty(value = "退货商品数量")
private Integer returnGoodsNumber;
/**
* @see cn.lili.modules.order.order.entity.enums.RefundStatusEnum
*/
@ApiModelProperty(value = "退款状态")
private String isRefund;
@ApiModelProperty(value = "退款金额")
private Double refundPrice;
public OrderItem(CartSkuVO cartSkuVO, CartVO cartVO, TradeDTO tradeDTO) {
String oldId = this.getId();
@ -146,6 +155,13 @@ public class OrderItem extends BaseEntity {
}
public String getIsRefund() {
if (isRefund == null) {
return RefundStatusEnum.NO_REFUND.name();
}
return isRefund;
}
public PriceDetailDTO getPriceDetailDTO() {
return JSONUtil.toBean(priceDetail, PriceDetailDTO.class);
}

View File

@ -21,7 +21,7 @@ public enum OrderStatusEnum {
* 虚拟订单需要核验商品
*/
TAKE("待核验"),
CANCELLED("取消");
CANCELLED("关闭");
private final String description;

View File

@ -0,0 +1,34 @@
package cn.lili.modules.order.order.entity.enums;
/**
* 退款状态枚举
*
* @author Lele
* @since 2024-1-5 10:59:22
*/
public enum RefundStatusEnum {
/**
* 退款状态
*/
ALL_REFUND("全部退款"),
PART_REFUND("部分退款"),
NO_REFUND("未退款"),
REFUNDING("退款中");
private final String description;
RefundStatusEnum(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
public String description() {
return this.description;
}
}

View File

@ -33,6 +33,12 @@ public interface OrderItemService extends IService<OrderItem> {
*/
void updateAfterSaleStatus(String orderItemSn, OrderItemAfterSaleStatusEnum orderItemAfterSaleStatusEnum);
/**
* 更新售后状态
* @param orderItem
*/
void updateByAfterSale(OrderItem orderItem);
/**
* 更新订单可投诉状态
*

View File

@ -44,6 +44,15 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
this.update(lambdaUpdateWrapper);
}
@Override
public void updateByAfterSale(OrderItem orderItem) {
LambdaUpdateWrapper<OrderItem> lambdaUpdateWrapper = new LambdaUpdateWrapper<OrderItem>()
.eq(OrderItem::getSn, orderItem.getSn())
.set(OrderItem::getIsRefund, orderItem.getIsRefund())
.set(OrderItem::getRefundPrice, orderItem.getRefundPrice());
this.update(lambdaUpdateWrapper);
}
/**
* 更新订单可投诉状态
*