|
@@ -1,9 +1,11 @@
|
|
|
package cn.iocoder.yudao.module.trade.service.aftersale;
|
|
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.RandomUtil;
|
|
|
import cn.iocoder.yudao.module.pay.api.refund.PayRefundApi;
|
|
|
import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundCreateReqDTO;
|
|
|
import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleAuditReqVO;
|
|
|
+import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleConfirmReqVO;
|
|
|
import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleCreateReqVO;
|
|
|
import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleDeliveryReqVO;
|
|
|
import cn.iocoder.yudao.module.trade.convert.aftersale.TradeAfterSaleConvert;
|
|
@@ -129,12 +131,12 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService {
|
|
|
if (afterSale == null) {
|
|
|
throw exception(AFTER_SALE_NOT_FOUND);
|
|
|
}
|
|
|
- if (afterSale.getStatus().equals(TradeAfterSaleStatusEnum.APPLY.getStatus())) {
|
|
|
+ if (ObjectUtil.notEqual(afterSale.getStatus(), TradeAfterSaleStatusEnum.APPLY.getStatus())) {
|
|
|
throw exception(AFTER_SALE_AUDIT_FAIL_STATUS_NOT_APPLY);
|
|
|
}
|
|
|
|
|
|
// 进行审批
|
|
|
- if (auditReqVO.getAudit()) {
|
|
|
+ if (auditReqVO.getPass()) {
|
|
|
auditAfterSalePass(userId, userIp, auditReqVO, afterSale);
|
|
|
} else {
|
|
|
auditAfterSaleReject(userId, auditReqVO, afterSale);
|
|
@@ -207,8 +209,8 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService {
|
|
|
if (afterSale == null) {
|
|
|
throw exception(AFTER_SALE_NOT_FOUND);
|
|
|
}
|
|
|
- if (afterSale.getStatus().equals(TradeAfterSaleStatusEnum.SELLER_PASS.getStatus())) {
|
|
|
- throw exception(AFTER_SALE_DELIVERY_FAIL_STATUS_NOT_BUYER_RETURN);
|
|
|
+ if (ObjectUtil.notEqual(afterSale.getStatus(), TradeAfterSaleStatusEnum.SELLER_PASS.getStatus())) {
|
|
|
+ throw exception(AFTER_SALE_DELIVERY_FAIL_STATUS_NOT_SELLER_PASS);
|
|
|
}
|
|
|
|
|
|
// 更新售后单的物流信息
|
|
@@ -222,4 +224,56 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService {
|
|
|
// TODO 发送售后消息
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void confirmAfterSale(Long userId, String userIp,
|
|
|
+ TradeAfterSaleConfirmReqVO confirmReqVO) {
|
|
|
+ // 校验售后单存在,并状态未审批
|
|
|
+ TradeAfterSaleDO afterSale = tradeAfterSaleMapper.selectById(confirmReqVO.getId());
|
|
|
+ if (afterSale == null) {
|
|
|
+ throw exception(AFTER_SALE_NOT_FOUND);
|
|
|
+ }
|
|
|
+ if (ObjectUtil.notEqual(afterSale.getStatus(), TradeAfterSaleStatusEnum.BUYER_RETURN.getStatus())) {
|
|
|
+ throw exception(AFTER_SALE_CONFIRM_FAIL_STATUS_NOT_BUYER_RETURN);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 进行审批
|
|
|
+ if (confirmReqVO.getPass()) {
|
|
|
+ confirmAfterSalePass(userId, userIp, confirmReqVO, afterSale);
|
|
|
+ } else {
|
|
|
+ confirmAfterSaleReject(userId, confirmReqVO, afterSale);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void confirmAfterSalePass(Long userId, String userIp,
|
|
|
+ TradeAfterSaleConfirmReqVO confirmReqVO, TradeAfterSaleDO afterSale) {
|
|
|
+ // 更新售后单的状态
|
|
|
+ Integer newStatus = TradeAfterSaleStatusEnum.WAIT_REFUND.getStatus();
|
|
|
+ updateAfterSaleStatus(afterSale.getId(), TradeAfterSaleStatusEnum.BUYER_RETURN.getStatus(), new TradeAfterSaleDO()
|
|
|
+ .setStatus(newStatus).setReceiptTime(LocalDateTime.now()).setReceiptMemo(confirmReqVO.getReceiptMemo()));
|
|
|
+
|
|
|
+ // 如果直接退款,则发起售后退款
|
|
|
+ if (afterSale.getType().equals(TradeAfterSaleTypeEnum.REFUND.getType())) {
|
|
|
+ createPayRefund(userIp, afterSale);
|
|
|
+ }
|
|
|
+
|
|
|
+ // TODO 记录售后日志
|
|
|
+
|
|
|
+ // TODO 发送售后消息
|
|
|
+ }
|
|
|
+
|
|
|
+ private void confirmAfterSaleReject(Long userId, TradeAfterSaleConfirmReqVO confirmReqVO, TradeAfterSaleDO afterSale) {
|
|
|
+ // 更新售后单的状态
|
|
|
+ Integer newStatus = TradeAfterSaleStatusEnum.SELLER_TERMINATION.getStatus();
|
|
|
+ updateAfterSaleStatus(afterSale.getId(), TradeAfterSaleStatusEnum.BUYER_RETURN.getStatus(), new TradeAfterSaleDO()
|
|
|
+ .setStatus(newStatus).setReceiptTime(LocalDateTime.now()).setReceiptMemo(confirmReqVO.getReceiptMemo()));
|
|
|
+
|
|
|
+ // 更新交易订单项的售后状态为【未申请】
|
|
|
+ tradeOrderService.updateOrderItemAfterSaleStatus(afterSale.getOrderItemId(),
|
|
|
+ TradeOrderItemAfterSaleStatusEnum.APPLY.getStatus(), TradeOrderItemAfterSaleStatusEnum.NONE.getStatus());
|
|
|
+
|
|
|
+ // TODO 记录售后日志
|
|
|
+
|
|
|
+ // TODO 发送售后消息
|
|
|
+ }
|
|
|
+
|
|
|
}
|