feat: 增加退款状态(部分退款、全部退款)
This commit is contained in:
parent
b40533c553
commit
c9a0ce7985
10
DB/2024-1-5.sql
Normal file
10
DB/2024-1-5.sql
Normal 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 '退款金额';
|
@ -12,6 +12,7 @@ import io.swagger.annotations.ApiOperation;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -37,7 +38,7 @@ public class FileDirectoryController {
|
|||||||
|
|
||||||
@ApiOperation(value = "添加文件目录")
|
@ApiOperation(value = "添加文件目录")
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public ResultMessage<FileDirectory> addSceneFileList(@RequestBody FileDirectory fileDirectory) {
|
public ResultMessage<FileDirectory> addSceneFileList(@RequestBody @Valid FileDirectory fileDirectory) {
|
||||||
fileDirectory.setDirectoryType(UserContext.getCurrentUser().getRole().name());
|
fileDirectory.setDirectoryType(UserContext.getCurrentUser().getRole().name());
|
||||||
fileDirectoryService.save(fileDirectory);
|
fileDirectoryService.save(fileDirectory);
|
||||||
return ResultUtil.data(fileDirectory);
|
return ResultUtil.data(fileDirectory);
|
||||||
@ -45,7 +46,7 @@ public class FileDirectoryController {
|
|||||||
|
|
||||||
@ApiOperation(value = "修改文件目录")
|
@ApiOperation(value = "修改文件目录")
|
||||||
@PutMapping
|
@PutMapping
|
||||||
public ResultMessage<FileDirectory> editSceneFileList(@RequestBody FileDirectory fileDirectory) {
|
public ResultMessage<FileDirectory> editSceneFileList(@RequestBody @Valid FileDirectory fileDirectory) {
|
||||||
fileDirectory.setDirectoryType(UserContext.getCurrentUser().getRole().name());
|
fileDirectory.setDirectoryType(UserContext.getCurrentUser().getRole().name());
|
||||||
fileDirectoryService.updateById(fileDirectory);
|
fileDirectoryService.updateById(fileDirectory);
|
||||||
return ResultUtil.data(fileDirectory);
|
return ResultUtil.data(fileDirectory);
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
package cn.lili.event.impl;
|
package cn.lili.event.impl;
|
||||||
|
|
||||||
|
import cn.lili.common.utils.CurrencyUtil;
|
||||||
import cn.lili.event.AfterSaleStatusChangeEvent;
|
import cn.lili.event.AfterSaleStatusChangeEvent;
|
||||||
import cn.lili.event.TradeEvent;
|
import cn.lili.event.TradeEvent;
|
||||||
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
|
import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
|
||||||
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
|
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.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.OrderItemService;
|
||||||
import cn.lili.modules.order.order.service.OrderService;
|
import cn.lili.modules.order.order.service.OrderService;
|
||||||
import cn.lili.modules.order.order.service.TradeService;
|
import cn.lili.modules.order.order.service.TradeService;
|
||||||
@ -43,16 +46,27 @@ public class OrderStatusHandlerExecute implements TradeEvent, AfterSaleStatusCha
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterSaleStatusChange(AfterSale afterSale) {
|
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 (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());
|
List<OrderItem> orderItems = orderItemService.getByOrderSn(afterSale.getOrderSn());
|
||||||
// 总退货数量
|
// 总退货数量
|
||||||
int returnCount = 0;
|
int returnCount = 0;
|
||||||
// 总购买数量
|
// 总购买数量
|
||||||
int deliverCount = 0;
|
int deliverCount = 0;
|
||||||
for (OrderItem orderItem : orderItems) {
|
for (OrderItem item : orderItems) {
|
||||||
returnCount += orderItem.getReturnGoodsNumber();
|
returnCount += item.getReturnGoodsNumber();
|
||||||
deliverCount += orderItem.getNum();
|
deliverCount += item.getNum();
|
||||||
}
|
}
|
||||||
if (returnCount == deliverCount) {
|
if (returnCount == deliverCount) {
|
||||||
orderService.systemCancel(afterSale.getOrderSn(),"订单货物全部退款",false);
|
orderService.systemCancel(afterSale.getOrderSn(),"订单货物全部退款",false);
|
||||||
|
@ -9,6 +9,7 @@ import lombok.Data;
|
|||||||
|
|
||||||
import javax.validation.constraints.Max;
|
import javax.validation.constraints.Max;
|
||||||
import javax.validation.constraints.Min;
|
import javax.validation.constraints.Min;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@TableName("li_file_directory")
|
@TableName("li_file_directory")
|
||||||
@ -26,7 +27,9 @@ public class FileDirectory extends BaseEntity {
|
|||||||
private String ownerId;
|
private String ownerId;
|
||||||
@ApiModelProperty(value = "父分类ID")
|
@ApiModelProperty(value = "父分类ID")
|
||||||
private String parentId;
|
private String parentId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "层级")
|
@ApiModelProperty(value = "层级")
|
||||||
|
@NotNull(message = "层级不能为空")
|
||||||
@Min(value = 0, message = "层级最小为0")
|
@Min(value = 0, message = "层级最小为0")
|
||||||
@Max(value = 2, message = "层级最大为2")
|
@Max(value = 2, message = "层级最大为2")
|
||||||
private Integer level;
|
private Integer level;
|
||||||
|
@ -2,6 +2,7 @@ package cn.lili.modules.order.aftersale.serviceimpl;
|
|||||||
|
|
||||||
import cn.hutool.core.text.CharSequenceUtil;
|
import cn.hutool.core.text.CharSequenceUtil;
|
||||||
import cn.hutool.core.util.NumberUtil;
|
import cn.hutool.core.util.NumberUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import cn.lili.common.enums.ResultCode;
|
import cn.lili.common.enums.ResultCode;
|
||||||
import cn.lili.common.exception.ServiceException;
|
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.aftersale.service.AfterSaleService;
|
||||||
import cn.lili.modules.order.order.entity.dos.Order;
|
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.dos.OrderItem;
|
||||||
import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum;
|
import cn.lili.modules.order.order.entity.enums.*;
|
||||||
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.service.OrderItemService;
|
import cn.lili.modules.order.order.service.OrderItemService;
|
||||||
import cn.lili.modules.order.order.service.OrderService;
|
import cn.lili.modules.order.order.service.OrderService;
|
||||||
import cn.lili.modules.order.trade.entity.enums.AfterSaleRefundWayEnum;
|
import cn.lili.modules.order.trade.entity.enums.AfterSaleRefundWayEnum;
|
||||||
@ -461,8 +459,9 @@ public class AfterSaleServiceImpl extends ServiceImpl<AfterSaleMapper, AfterSale
|
|||||||
case APPLY: {
|
case APPLY: {
|
||||||
// 买家申请售后时已经输入了订单售后数量,这里不需要(+x)处理
|
// 买家申请售后时已经输入了订单售后数量,这里不需要(+x)处理
|
||||||
orderItem.setReturnGoodsNumber(orderItem.getReturnGoodsNumber() + afterSale.getNum());
|
orderItem.setReturnGoodsNumber(orderItem.getReturnGoodsNumber() + afterSale.getNum());
|
||||||
|
orderItem.setRefundPrice(CurrencyUtil.add(orderItem.getRefundPrice(), afterSale.getApplyRefundPrice()));
|
||||||
//修改orderItem订单
|
//修改orderItem订单
|
||||||
this.updateOrderItem(orderItem);
|
this.updateOrderItem(orderItem, afterSale);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -471,8 +470,9 @@ public class AfterSaleServiceImpl extends ServiceImpl<AfterSaleMapper, AfterSale
|
|||||||
case BUYER_CANCEL:
|
case BUYER_CANCEL:
|
||||||
case SELLER_TERMINATION: {
|
case SELLER_TERMINATION: {
|
||||||
orderItem.setReturnGoodsNumber(orderItem.getReturnGoodsNumber() - afterSale.getNum());
|
orderItem.setReturnGoodsNumber(orderItem.getReturnGoodsNumber() - afterSale.getNum());
|
||||||
|
orderItem.setRefundPrice(CurrencyUtil.sub(orderItem.getRefundPrice(), afterSale.getApplyRefundPrice()));
|
||||||
//修改orderItem订单
|
//修改orderItem订单
|
||||||
this.updateOrderItem(orderItem);
|
this.updateOrderItem(orderItem, afterSale);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@ -627,7 +627,7 @@ public class AfterSaleServiceImpl extends ServiceImpl<AfterSaleMapper, AfterSale
|
|||||||
* @return void
|
* @return void
|
||||||
* @author ftyy
|
* @author ftyy
|
||||||
**/
|
**/
|
||||||
private void updateOrderItem(OrderItem orderItem) {
|
private void updateOrderItem(OrderItem orderItem, AfterSale afterSale) {
|
||||||
//订单状态不能为新订单,已失效订单或未申请订单才可以去修改订单信息
|
//订单状态不能为新订单,已失效订单或未申请订单才可以去修改订单信息
|
||||||
OrderItemAfterSaleStatusEnum afterSaleTypeEnum = OrderItemAfterSaleStatusEnum.valueOf(orderItem.getAfterSaleStatus());
|
OrderItemAfterSaleStatusEnum afterSaleTypeEnum = OrderItemAfterSaleStatusEnum.valueOf(orderItem.getAfterSaleStatus());
|
||||||
switch (afterSaleTypeEnum) {
|
switch (afterSaleTypeEnum) {
|
||||||
@ -652,10 +652,27 @@ public class AfterSaleServiceImpl extends ServiceImpl<AfterSaleMapper, AfterSale
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
orderItemService.update(new LambdaUpdateWrapper<OrderItem>()
|
|
||||||
|
LambdaUpdateWrapper<OrderItem> lambdaUpdateWrapper = new LambdaUpdateWrapper<OrderItem>()
|
||||||
.eq(OrderItem::getSn, orderItem.getSn())
|
.eq(OrderItem::getSn, orderItem.getSn())
|
||||||
.set(OrderItem::getAfterSaleStatus, orderItem.getAfterSaleStatus())
|
.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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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.CommentStatusEnum;
|
||||||
import cn.lili.modules.order.order.entity.enums.OrderComplaintStatusEnum;
|
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.OrderItemAfterSaleStatusEnum;
|
||||||
|
import cn.lili.modules.order.order.entity.enums.RefundStatusEnum;
|
||||||
import cn.lili.modules.promotion.entity.vos.PromotionSkuVO;
|
import cn.lili.modules.promotion.entity.vos.PromotionSkuVO;
|
||||||
import cn.lili.mybatis.BaseEntity;
|
import cn.lili.mybatis.BaseEntity;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
@ -115,6 +116,14 @@ public class OrderItem extends BaseEntity {
|
|||||||
@ApiModelProperty(value = "退货商品数量")
|
@ApiModelProperty(value = "退货商品数量")
|
||||||
private Integer returnGoodsNumber;
|
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) {
|
public OrderItem(CartSkuVO cartSkuVO, CartVO cartVO, TradeDTO tradeDTO) {
|
||||||
String oldId = this.getId();
|
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() {
|
public PriceDetailDTO getPriceDetailDTO() {
|
||||||
return JSONUtil.toBean(priceDetail, PriceDetailDTO.class);
|
return JSONUtil.toBean(priceDetail, PriceDetailDTO.class);
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ public enum OrderStatusEnum {
|
|||||||
* 虚拟订单需要核验商品
|
* 虚拟订单需要核验商品
|
||||||
*/
|
*/
|
||||||
TAKE("待核验"),
|
TAKE("待核验"),
|
||||||
CANCELLED("已取消");
|
CANCELLED("已关闭");
|
||||||
|
|
||||||
private final String description;
|
private final String description;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -33,6 +33,12 @@ public interface OrderItemService extends IService<OrderItem> {
|
|||||||
*/
|
*/
|
||||||
void updateAfterSaleStatus(String orderItemSn, OrderItemAfterSaleStatusEnum orderItemAfterSaleStatusEnum);
|
void updateAfterSaleStatus(String orderItemSn, OrderItemAfterSaleStatusEnum orderItemAfterSaleStatusEnum);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新售后状态
|
||||||
|
* @param orderItem
|
||||||
|
*/
|
||||||
|
void updateByAfterSale(OrderItem orderItem);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新订单可投诉状态
|
* 更新订单可投诉状态
|
||||||
*
|
*
|
||||||
|
@ -44,6 +44,15 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
|
|||||||
this.update(lambdaUpdateWrapper);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新订单可投诉状态
|
* 更新订单可投诉状态
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user