售后与子订单模块参数解耦

This commit is contained in:
Chopper 2021-12-08 10:40:45 +08:00
parent a7509e1125
commit 1764e6956b
5 changed files with 40 additions and 42 deletions

View File

@ -142,7 +142,7 @@ public class AfterSale extends BaseEntity {
private String mLogisticsName; private String mLogisticsName;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty(value = "买家发货时间") @ApiModelProperty(value = "买家发货时间")
private Date mDeliverTime; private Date mDeliverTime;

View File

@ -7,27 +7,25 @@ import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException; import cn.lili.common.exception.ServiceException;
import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.properties.RocketmqCustomProperties;
import cn.lili.common.security.AuthUser; import cn.lili.common.security.AuthUser;
import cn.lili.common.security.OperationalJudgment;
import cn.lili.common.security.context.UserContext; import cn.lili.common.security.context.UserContext;
import cn.lili.common.security.enums.UserEnums;
import cn.lili.common.utils.BeanUtil; import cn.lili.common.utils.BeanUtil;
import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.CurrencyUtil;
import cn.lili.common.utils.SnowFlake; import cn.lili.common.utils.SnowFlake;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.order.aftersale.aop.AfterSaleLogPoint; import cn.lili.modules.order.aftersale.aop.AfterSaleLogPoint;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
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.*;
import cn.lili.modules.order.aftersale.entity.dto.AfterSaleDTO; import cn.lili.modules.order.aftersale.entity.dto.AfterSaleDTO;
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.aftersale.entity.vo.AfterSaleApplyVO; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleApplyVO;
import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleSearchParams;
import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO; import cn.lili.modules.order.aftersale.entity.vo.AfterSaleVO;
import cn.lili.modules.order.aftersale.mapper.AfterSaleMapper; 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.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.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;
@ -35,15 +33,12 @@ import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum;
import cn.lili.modules.order.trade.entity.enums.AfterSaleTypeEnum; import cn.lili.modules.order.trade.entity.enums.AfterSaleTypeEnum;
import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; import cn.lili.modules.payment.entity.enums.PaymentMethodEnum;
import cn.lili.modules.payment.kit.RefundSupport; import cn.lili.modules.payment.kit.RefundSupport;
import cn.lili.modules.statistics.entity.dto.StatisticsQueryParam;
import cn.lili.modules.statistics.util.StatisticsDateUtil;
import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO;
import cn.lili.modules.store.service.StoreDetailService; import cn.lili.modules.store.service.StoreDetailService;
import cn.lili.modules.system.aspect.annotation.SystemLogPoint; import cn.lili.modules.system.aspect.annotation.SystemLogPoint;
import cn.lili.modules.system.entity.dos.Logistics; import cn.lili.modules.system.entity.dos.Logistics;
import cn.lili.modules.system.entity.vo.Traces; import cn.lili.modules.system.entity.vo.Traces;
import cn.lili.modules.system.service.LogisticsService; import cn.lili.modules.system.service.LogisticsService;
import cn.lili.common.security.OperationalJudgment;
import cn.lili.mybatis.util.PageUtil; import cn.lili.mybatis.util.PageUtil;
import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
import cn.lili.rocketmq.tags.AfterSaleTagsEnum; import cn.lili.rocketmq.tags.AfterSaleTagsEnum;
@ -58,12 +53,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* 售后业务层实现 * 售后业务层实现
@ -197,7 +190,7 @@ public class AfterSaleServiceImpl extends ServiceImpl<AfterSaleMapper, AfterSale
throw new ServiceException(ResultCode.AFTER_SALES_DOUBLE_ERROR); throw new ServiceException(ResultCode.AFTER_SALES_DOUBLE_ERROR);
} }
//判断退款金额与付款金额是否正确,退款金额不能大于付款金额 //判断退款金额与付款金额是否正确,退款金额不能大于付款金额
if (NumberUtil.compare(afterSale.getFlowPrice(), actualRefundPrice) == -1) { if (NumberUtil.compare(afterSale.getFlowPrice(), actualRefundPrice) < 0) {
throw new ServiceException(ResultCode.AFTER_SALES_PRICE_ERROR); throw new ServiceException(ResultCode.AFTER_SALES_PRICE_ERROR);
} }
@ -213,6 +206,7 @@ public class AfterSaleServiceImpl extends ServiceImpl<AfterSaleMapper, AfterSale
if (afterSale.getRefundWay().equals(AfterSaleRefundWayEnum.ORIGINAL.name())) { if (afterSale.getRefundWay().equals(AfterSaleRefundWayEnum.ORIGINAL.name())) {
//如果为退款操作 && 在线支付 则直接进行退款 //如果为退款操作 && 在线支付 则直接进行退款
refundSupport.refund(afterSale); refundSupport.refund(afterSale);
afterSale.setRefundTime(new Date());
afterSaleStatusEnum = AfterSaleStatusEnum.COMPLETE; afterSaleStatusEnum = AfterSaleStatusEnum.COMPLETE;
} else { } else {
afterSaleStatusEnum = AfterSaleStatusEnum.WAIT_REFUND; afterSaleStatusEnum = AfterSaleStatusEnum.WAIT_REFUND;
@ -454,9 +448,9 @@ public class AfterSaleServiceImpl extends ServiceImpl<AfterSaleMapper, AfterSale
.eq(OrderItem::getSkuId, afterSale.getSkuId())); .eq(OrderItem::getSkuId, afterSale.getSkuId()));
AfterSaleStatusEnum afterSaleStatusEnum = AfterSaleStatusEnum.valueOf(afterSale.getServiceStatus()); AfterSaleStatusEnum afterSaleStatusEnum = AfterSaleStatusEnum.valueOf(afterSale.getServiceStatus());
switch (afterSaleStatusEnum){ switch (afterSaleStatusEnum) {
//判断当前售后的状态---申请中 //判断当前售后的状态---申请中
case APPLY:{ case APPLY: {
orderItem.setReturnGoodsNumber(orderItem.getReturnGoodsNumber() + afterSale.getNum()); orderItem.setReturnGoodsNumber(orderItem.getReturnGoodsNumber() + afterSale.getNum());
break; break;
} }
@ -624,19 +618,19 @@ public class AfterSaleServiceImpl extends ServiceImpl<AfterSaleMapper, AfterSale
private void updateOrderItem(OrderItem orderItem) { private void updateOrderItem(OrderItem orderItem) {
//订单状态不能为新订单,已失效订单或未申请订单才可以去修改订单信息 //订单状态不能为新订单,已失效订单或未申请订单才可以去修改订单信息
OrderItemAfterSaleStatusEnum afterSaleTypeEnum = OrderItemAfterSaleStatusEnum.valueOf(orderItem.getAfterSaleStatus()); OrderItemAfterSaleStatusEnum afterSaleTypeEnum = OrderItemAfterSaleStatusEnum.valueOf(orderItem.getAfterSaleStatus());
switch (afterSaleTypeEnum){ switch (afterSaleTypeEnum) {
//售后状态为未申请 部分售后 已申请 //售后状态为未申请 部分售后 已申请
case NOT_APPLIED: case NOT_APPLIED:
case PART_AFTER_SALE: case PART_AFTER_SALE:
case ALREADY_APPLIED:{ case ALREADY_APPLIED: {
//通过正在售后商品总数修改订单售后状态 //通过正在售后商品总数修改订单售后状态
if (orderItem.getReturnGoodsNumber().equals(orderItem.getNum())) { if (orderItem.getReturnGoodsNumber().equals(orderItem.getNum())) {
//修改订单的售后状态--已申请 //修改订单的售后状态--已申请
orderItem.setAfterSaleStatus(OrderItemAfterSaleStatusEnum.ALREADY_APPLIED.name()); orderItem.setAfterSaleStatus(OrderItemAfterSaleStatusEnum.ALREADY_APPLIED.name());
} else if(orderItem.getReturnGoodsNumber().equals(0)){ } else if (orderItem.getReturnGoodsNumber().equals(0)) {
//修改订单的售后状态--未申请 //修改订单的售后状态--未申请
orderItem.setAfterSaleStatus(OrderItemAfterSaleStatusEnum.NOT_APPLIED.name()); orderItem.setAfterSaleStatus(OrderItemAfterSaleStatusEnum.NOT_APPLIED.name());
}else{ } else {
//修改订单的售后状态--部分售后 //修改订单的售后状态--部分售后
orderItem.setAfterSaleStatus(OrderItemAfterSaleStatusEnum.PART_AFTER_SALE.name()); orderItem.setAfterSaleStatus(OrderItemAfterSaleStatusEnum.PART_AFTER_SALE.name());
} }
@ -649,7 +643,7 @@ public class AfterSaleServiceImpl extends ServiceImpl<AfterSaleMapper, AfterSale
orderItemService.update(new LambdaUpdateWrapper<OrderItem>() orderItemService.update(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()));
} }
} }

View File

@ -58,4 +58,12 @@ public interface OrderItemService extends IService<OrderItem> {
*/ */
List<OrderItem> getByOrderSn(String orderSn); List<OrderItem> getByOrderSn(String orderSn);
/**
* 子订单查询
*
* @param orderSn 订单编号
* @param skuId skuid
* @return 子订单
*/
OrderItem getByOrderSnAndSkuId(String orderSn, String skuId);
} }

View File

@ -9,14 +9,12 @@ import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum;
import cn.lili.modules.order.order.mapper.OrderItemMapper; import cn.lili.modules.order.order.mapper.OrderItemMapper;
import cn.lili.modules.order.order.service.OrderItemService; import cn.lili.modules.order.order.service.OrderItemService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -80,4 +78,10 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
return this.list(lambdaQueryWrapper); return this.list(lambdaQueryWrapper);
} }
@Override
public OrderItem getByOrderSnAndSkuId(String orderSn, String skuId) {
return this.getOne(new LambdaQueryWrapper<OrderItem>()
.eq(OrderItem::getOrderSn, orderSn)
.eq(OrderItem::getSkuId, skuId));
}
} }

View File

@ -3,22 +3,19 @@ package cn.lili.modules.payment.kit;
import cn.lili.common.utils.SnowFlake; import cn.lili.common.utils.SnowFlake;
import cn.lili.common.utils.SpringContextUtil; import cn.lili.common.utils.SpringContextUtil;
import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
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.service.OrderItemService; import cn.lili.modules.order.order.service.OrderItemService;
import cn.lili.modules.order.aftersale.service.AfterSaleService;
import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.OrderService;
import cn.lili.modules.order.order.service.StoreFlowService; import cn.lili.modules.order.order.service.StoreFlowService;
import cn.lili.modules.payment.entity.RefundLog; import cn.lili.modules.payment.entity.RefundLog;
import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; import cn.lili.modules.payment.entity.enums.PaymentMethodEnum;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.Date;
/** /**
* 退款支持 * 退款支持
@ -73,10 +70,6 @@ public class RefundSupport {
Payment payment = (Payment) SpringContextUtil.getBean(paymentMethodEnum.getPlugin()); Payment payment = (Payment) SpringContextUtil.getBean(paymentMethodEnum.getPlugin());
payment.refund(refundLog); payment.refund(refundLog);
//记录售后单中的退款金额
afterSaleService.update(new LambdaUpdateWrapper<AfterSale>()
.eq(AfterSale::getId, afterSale.getId())
.set(AfterSale::getRefundTime, new Date()));
this.updateReturnGoodsNumber(afterSale); this.updateReturnGoodsNumber(afterSale);
//记录退款流水 //记录退款流水
@ -85,22 +78,21 @@ public class RefundSupport {
/** /**
* 功能描述: 修改子订单中已售后退款商品数量 * 功能描述: 修改子订单中已售后退款商品数量
*
* @return void
* @Author ftyy * @Author ftyy
* @Description //TODO * @Description //TODO
* @Date 17:33 2021/11/18 * @Date 17:33 2021/11/18
* @Param [afterSale] * @Param [afterSale]
* @return void
**/ **/
private void updateReturnGoodsNumber(AfterSale afterSale){ private void updateReturnGoodsNumber(AfterSale afterSale) {
//根据商品id及订单sn获取子订单 //根据商品id及订单sn获取子订单
OrderItem orderItem = orderItemService.getOne(new LambdaQueryWrapper<OrderItem>() OrderItem orderItem = orderItemService.getByOrderSnAndSkuId(afterSale.getOrderSn(), afterSale.getGoodsId());
.eq(OrderItem::getOrderSn, afterSale.getOrderSn())
.eq(OrderItem::getGoodsId, afterSale.getGoodsId())); orderItem.setReturnGoodsNumber(afterSale.getNum() + orderItem.getReturnGoodsNumber());
//修改子订单订单中的退货数量 //修改子订单订单中的退货数量
orderItemService.update(new LambdaUpdateWrapper<OrderItem>() orderItemService.updateById(orderItem);
.eq(OrderItem::getOrderSn,afterSale.getOrderSn())
.eq(OrderItem::getGoodsId,afterSale.getGoodsId())
.set(OrderItem::getReturnGoodsNumber,(afterSale.getNum()+orderItem.getReturnGoodsNumber())));
} }
/** /**