KKSU
2024-12-05 4bd430086630df238462908761261f13da5a482f
refactor(mall): 优化订单退款逻辑

- 在 AdminMallOrderController 中添加 agreeType 参数以区分退款类型
- 在 ApiLeaderRefundOrderDto 中新增 agreeType 字段
- 修改 ApiMallOrderInfoServiceImpl 中的退款逻辑,根据 agreeType 确定退款金额
- 优化 ApiMallTeamLeaderServiceImpl 中的退款处理流程
4 files modified
64 ■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/ApiLeaderRefundOrderDto.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java 11 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java 30 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java
@@ -2,14 +2,10 @@
import cc.mrbird.febs.common.annotation.ControllerEndpoint;
import cc.mrbird.febs.common.controller.BaseController;
import cc.mrbird.febs.common.entity.DeptTree;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum;
import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.FebsUtil;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.common.utils.SpringContextHolder;
import cc.mrbird.febs.common.utils.excl.ExcelSheetPO;
@@ -18,18 +14,15 @@
import cc.mrbird.febs.common.utils.excl.ResponseHeadUtil;
import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.IAdminMallGoodsService;
import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.mall.mapper.MallMemberMapper;
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
import cc.mrbird.febs.mall.mapper.MallTeamLeaderMapper;
import cc.mrbird.febs.mall.service.IAdminMallOrderService;
import cc.mrbird.febs.mall.service.IApiMallTeamLeaderService;
import cc.mrbird.febs.mall.service.MallInvoiceService;
import cc.mrbird.febs.mall.vo.AdminAddAddressTreeVo;
import cc.mrbird.febs.mall.vo.AdminMallOrderRefundAddressVo;
import cc.mrbird.febs.pay.model.OrderStateDto;
import cc.mrbird.febs.pay.service.IXcxPayService;
import cc.mrbird.febs.pay.util.WechatConfigure;
import cc.mrbird.febs.system.entity.Dept;
import cc.mrbird.febs.system.entity.User;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
@@ -45,7 +38,9 @@
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.io.*;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
@@ -196,6 +191,7 @@
    @PostMapping(value = "/refundOperation")
    @ControllerEndpoint(operation = "订单退款", exceptionMessage = "操作失败")
    public FebsResponse refundOperation(ApiLeaderRefundOrderDto apiLeaderRefundOrderDto) {
        apiLeaderRefundOrderDto.setAgreeType(2);
        return apiMallTeamLeaderService.leaderRefundOrder(apiLeaderRefundOrderDto);
    }
src/main/java/cc/mrbird/febs/mall/dto/ApiLeaderRefundOrderDto.java
@@ -17,4 +17,7 @@
    @ApiModelProperty(value = "是否同意 1:同意 2:拒绝", example = "1")
    private Integer agreeState;
    @ApiModelProperty(value = "类型 1-未发货用户点击退款 2-后端同意退款", example = "1")
    private Integer agreeType;
}
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -8,19 +8,19 @@
import cc.mrbird.febs.mall.conversion.MallGoodsCommentConversion;
import cc.mrbird.febs.mall.conversion.MallOrderInfoConversion;
import cc.mrbird.febs.mall.conversion.MallOrderRefundConversion;
import cc.mrbird.febs.mall.conversion.MallTeamLeaderConversion;
import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.*;
import cc.mrbird.febs.mall.vo.*;
import cc.mrbird.febs.mall.vo.ApiCouponAmountMapVo;
import cc.mrbird.febs.mall.vo.OrderDetailVo;
import cc.mrbird.febs.mall.vo.OrderListVo;
import cc.mrbird.febs.mall.vo.OrderRefundVo;
import cc.mrbird.febs.pay.model.BrandWCPayRequestData;
import cc.mrbird.febs.pay.model.OrderStateDto;
import cc.mrbird.febs.pay.service.IPayService;
import cc.mrbird.febs.pay.service.IXcxPayService;
import cc.mrbird.febs.pay.util.WeixinServiceUtil;
import cc.mrbird.febs.rabbit.producter.AgentProducer;
import cc.mrbird.febs.vip.service.IMallVipConfigBenefitsService;
import cc.mrbird.febs.vip.service.IMallVipConfigService;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUnit;
@@ -28,8 +28,6 @@
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -942,6 +940,7 @@
            apiLeaderRefundOrderDto.setOrderId(mallOrderInfo.getId());
            apiLeaderRefundOrderDto.setItemId(mallOrderItem.getId());
            apiLeaderRefundOrderDto.setAgreeState(1);
            apiLeaderRefundOrderDto.setAgreeType(1);
            iApiMallTeamLeaderService.leaderRefundOrder(apiLeaderRefundOrderDto);
        }
        return new FebsResponse().success();
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
@@ -388,6 +388,10 @@
        //获取退款订单信息
        Long orderId = apiLeaderRefundOrderDto.getOrderId();
        Long itemId = apiLeaderRefundOrderDto.getItemId();
        Integer agreeType = apiLeaderRefundOrderDto.getAgreeType();
        if(!(1 == agreeType || 2 == agreeType)){
            return new FebsResponse().fail().message("退款失败,请联系客服人员");
        }
        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId);
        MallOrderItem mallOrderItem = mallOrderItemMapper.selectById(itemId);
@@ -421,23 +425,27 @@
            int orderMoney = orderAmount.multiply(aa).intValue();
            //退款退款金额
            BigDecimal refundAmount = mallRefundEntity.getAmount();
            List<MallOrderItem> mallOrderItemListOnly = mallOrderItemMapper.selectListByStateAndOrderId(1,orderId);
            if(CollUtil.isNotEmpty(mallOrderItemListOnly)){
                if(1==mallOrderItemListOnly.size()){
                    refundAmount = refundAmount.add(mallOrderInfo.getCarriage());
                    log.info("退款订单编号为{},订单金额:{},待退款订单:{},退款金额:{}", refundNo,orderAmount,mallOrderItemListOnly.size(),refundAmount);
                }
            }
//            BigDecimal refundAmount = mallRefundEntity.getAmount();
//            List<MallOrderItem> mallOrderItemListOnly = mallOrderItemMapper.selectListByStateAndOrderId(1,orderId);
//            List<MallOrderItem> mallOrderItemListIng = mallOrderItemMapper.selectListByStateAndOrderId(2,orderId);
//            if(CollUtil.isEmpty(mallOrderItemListOnly) && CollUtil.isNotEmpty(mallOrderItemListIng) ){
//                if(1 == mallOrderItemListIng.size() ){
//            if(CollUtil.isNotEmpty(mallOrderItemListOnly)){
//                if(1==mallOrderItemListOnly.size()){
//                    refundAmount = refundAmount.add(mallOrderInfo.getCarriage());
//                    log.info("退款订单编号为{},订单金额:{},待退款订单:{},退款金额:{}", refundNo,orderAmount,mallOrderItemListOnly.size(),refundAmount);
//                }
//            }
            BigDecimal refundAmount = mallRefundEntity.getAmount();
            if(agreeType == 1){
                refundAmount = refundAmount.add(mallOrderInfo.getCarriage());
            }else if(agreeType == 2){
                List<MallOrderItem> mallOrderItemListOnly = mallOrderItemMapper.selectListByStateAndOrderId(1,orderId);
                List<MallOrderItem> mallOrderItemListIng = mallOrderItemMapper.selectListByStateAndOrderId(2,orderId);
                if(CollUtil.isEmpty(mallOrderItemListOnly) && CollUtil.isNotEmpty(mallOrderItemListIng) ){
                    if(1 == mallOrderItemListIng.size() ){
                        refundAmount = refundAmount.add(mallOrderInfo.getCarriage());
                        log.info("退款订单编号为{},订单金额:{},待退款订单:{},退款金额:{}", refundNo,orderAmount,mallOrderItemListOnly.size(),refundAmount);
                    }
                }
            }
//            refundAmount = refundAmount.add(mallOrderInfo.getCarriage());
            BigDecimal bb = new BigDecimal(100);
            int refundMoney = refundAmount.multiply(bb).intValue();