diff --git a/DB/2024-1-5.sql b/DB/2024-1-5.sql new file mode 100644 index 000000000..5fc249aad --- /dev/null +++ b/DB/2024-1-5.sql @@ -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 '退款金额'; diff --git a/common-api/src/main/java/cn/lili/controller/common/FileDirectoryController.java b/common-api/src/main/java/cn/lili/controller/common/FileDirectoryController.java index 0057887fe..a6cad2613 100644 --- a/common-api/src/main/java/cn/lili/controller/common/FileDirectoryController.java +++ b/common-api/src/main/java/cn/lili/controller/common/FileDirectoryController.java @@ -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 addSceneFileList(@RequestBody FileDirectory fileDirectory) { + public ResultMessage 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 editSceneFileList(@RequestBody FileDirectory fileDirectory) { + public ResultMessage editSceneFileList(@RequestBody @Valid FileDirectory fileDirectory) { fileDirectory.setDirectoryType(UserContext.getCurrentUser().getRole().name()); fileDirectoryService.updateById(fileDirectory); return ResultUtil.data(fileDirectory); diff --git a/consumer/src/main/java/cn/lili/event/impl/OrderStatusHandlerExecute.java b/consumer/src/main/java/cn/lili/event/impl/OrderStatusHandlerExecute.java index d6bb11e44..54beb2e5c 100644 --- a/consumer/src/main/java/cn/lili/event/impl/OrderStatusHandlerExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/OrderStatusHandlerExecute.java @@ -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 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); diff --git a/framework/src/main/java/cn/lili/modules/file/entity/FileDirectory.java b/framework/src/main/java/cn/lili/modules/file/entity/FileDirectory.java index 807db5ce3..c9e888dd5 100644 --- a/framework/src/main/java/cn/lili/modules/file/entity/FileDirectory.java +++ b/framework/src/main/java/cn/lili/modules/file/entity/FileDirectory.java @@ -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; diff --git a/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java index 70bfab19a..a1bb7ffec 100644 --- a/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java @@ -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() + + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper() .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); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java index ae8c270f8..95025028b 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java @@ -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); } diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderStatusEnum.java b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderStatusEnum.java index 8edcaccfa..8c3b7f894 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderStatusEnum.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderStatusEnum.java @@ -21,7 +21,7 @@ public enum OrderStatusEnum { * 虚拟订单需要核验商品 */ TAKE("待核验"), - CANCELLED("已取消"); + CANCELLED("已关闭"); private final String description; diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/RefundStatusEnum.java b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/RefundStatusEnum.java new file mode 100644 index 000000000..a64f52b95 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/RefundStatusEnum.java @@ -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; + } + + +} diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderItemService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderItemService.java index c40a2d842..703c85af9 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderItemService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderItemService.java @@ -33,6 +33,12 @@ public interface OrderItemService extends IService { */ void updateAfterSaleStatus(String orderItemSn, OrderItemAfterSaleStatusEnum orderItemAfterSaleStatusEnum); + /** + * 更新售后状态 + * @param orderItem + */ + void updateByAfterSale(OrderItem orderItem); + /** * 更新订单可投诉状态 * diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderItemServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderItemServiceImpl.java index bc03843b7..e4841bd8c 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderItemServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderItemServiceImpl.java @@ -44,6 +44,15 @@ public class OrderItemServiceImpl extends ServiceImpl lambdaUpdateWrapper = new LambdaUpdateWrapper() + .eq(OrderItem::getSn, orderItem.getSn()) + .set(OrderItem::getIsRefund, orderItem.getIsRefund()) + .set(OrderItem::getRefundPrice, orderItem.getRefundPrice()); + this.update(lambdaUpdateWrapper); + } + /** * 更新订单可投诉状态 *