From 9b51a95fa8bc9b3a86108c6900e17fc55f8db467 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 19 May 2025 17:02:07 +0800
Subject: [PATCH] refactor(vip): 优化积分和返佣计算逻辑

---
 src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java |   70 +++++++++++++++++++++++++++++++++++
 1 files changed, 70 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java
index f010894..e8c6729 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java
@@ -3,6 +3,9 @@
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.enumerates.*;
+import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.common.utils.AppContants;
+import cc.mrbird.febs.common.utils.LoginUserUtil;
 import cc.mrbird.febs.mall.dto.*;
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.mapper.*;
@@ -22,6 +25,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 @Slf4j
@@ -505,6 +509,72 @@
     }
 
     @Override
+    public FebsResponse confirmOrder(AdminRefundOrderDto dto) {
+        Integer type = dto.getType();
+        MallOrderInfo orderInfo = this.baseMapper.selectById(dto.getOrderId());
+        if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
+            throw new FebsException("订单不存在");
+        }
+
+        if (orderInfo.getStatus() == OrderStatusEnum.REFUNDING.getValue()) {
+            throw new FebsException("已提交退款, 请勿重复提交");
+        }
+
+        if (orderInfo.getStatus() != OrderStatusEnum.WAIT_SHIPPING.getValue()
+                && orderInfo.getStatus() != OrderStatusEnum.WAIT_FINISH.getValue()) {
+            throw new FebsException("该订单不能退款");
+        }
+
+        Integer beforeStatus = orderInfo.getStatus();
+        Long memberId = orderInfo.getMemberId();
+        orderInfo.setStatus(OrderStatusEnum.REFUNDING.getValue());
+        this.baseMapper.updateById(orderInfo);
+
+        MallOrderRefund orderRefund = mallOrderRefundMapper.selectOrderRefundByOrderId(orderInfo.getId());
+        if (orderRefund == null) {
+            orderRefund = new MallOrderRefund();
+            orderRefund.setOrderId(orderInfo.getId());
+            orderRefund.setMemberId(memberId);
+            orderRefund.setType(type);
+            orderRefund.setRefundTime(new Date());
+            orderRefund.setBeforeStatus(beforeStatus);
+            orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue());
+
+            // 未发货则退运费,发货了则不退
+            if (beforeStatus == 2) {
+                orderRefund.setAmount(orderInfo.getAmount().add(orderInfo.getCarriage()));
+            } else {
+                orderRefund.setAmount(orderInfo.getAmount());
+            }
+            orderRefund.setDesp(StrUtil.format("系统发起退款{}", orderRefund.getAmount()));
+            orderRefund.setReason(StrUtil.format("系统发起退款{}", orderRefund.getAmount()));
+            mallOrderRefundMapper.insert(orderRefund);
+        } else {
+            orderRefund.setType(type);
+            orderRefund.setRefundTime(new Date());
+            orderRefund.setBeforeStatus(beforeStatus);
+            orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue());
+            // 未发货则退运费,发货了则不退
+            if (beforeStatus == 2) {
+                orderRefund.setAmount(orderInfo.getAmount().add(orderInfo.getCarriage()));
+            } else {
+                orderRefund.setAmount(orderInfo.getAmount());
+            }
+            orderRefund.setDesp(StrUtil.format("系统发起退款{}", orderRefund.getAmount()));
+            orderRefund.setReason(StrUtil.format("系统发起退款{}", orderRefund.getAmount()));
+            mallOrderRefundMapper.updateById(orderRefund);
+        }
+
+
+        MallOrderRefundOperation operation = new MallOrderRefundOperation();
+        operation.setOrderId(orderInfo.getId());
+        operation.setRefundId(orderRefund.getId());
+        operation.setContent(StrUtil.format("系统发起退款{}", orderRefund.getAmount()));
+        mallOrderRefundOperationMapper.insert(operation);
+        return new FebsResponse().success().message("操作成功");
+    }
+
+    @Override
     public void deliverGoodsByOrderNo(DeliverGoodsDto deliverGoodsDto) {
         MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectByOrderNo(deliverGoodsDto.getOrderNo());
         if (mallOrderInfo == null) {

--
Gitblit v1.9.1