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 |  463 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 454 insertions(+), 9 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 b862a1a..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
@@ -2,12 +2,16 @@
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
-import cc.mrbird.febs.mall.dto.DeliverGoodsDto;
-import cc.mrbird.febs.mall.dto.MallOrderInfoDto;
-import cc.mrbird.febs.mall.dto.MallOrderRefundDto;
+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.*;
 import cc.mrbird.febs.mall.service.IAdminMallOrderService;
+import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
+import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
 import cc.mrbird.febs.mall.vo.*;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -18,12 +22,16 @@
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 @Slf4j
 @Service
 @RequiredArgsConstructor
+@Transactional
 public class AdminMallOrderService extends ServiceImpl<MallOrderInfoMapper, MallOrderInfo> implements IAdminMallOrderService {
 
     private final MallOrderInfoMapper mallOrderInfoMapper;
@@ -36,10 +44,55 @@
 
     private final MallOrderRefundOperationMapper mallOrderRefundOperationMapper;
 
+    private final MallOrderRefundAddressMapper mallOrderRefundAddressMapper;
+
+    private final MallGoodsCommentMapper mallGoodsCommentMapper;
+
+    private final MallMoneyFlowMapper mallMoneyFlowMapper;
+
+    private final IApiMallMemberWalletService iApiMallMemberWalletService;
+
+    private final MallMemberPaymentMapper mallMemberPaymentMapper;
+
+    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
+    private final IMallMoneyFlowService mallMoneyFlowService;
+    private final MallRefundMapper mallRefundMapper;
+    private final MallMemberMapper mallMemberMapper;
+
+
+    @Override
+    public IPage<MallOrderInfo> findOrderListInPage(MallOrderInfo mallOrderInfo, QueryRequest request) {
+        Page<MallOrderInfo> page = new Page<>(request.getPageNum(), request.getPageSize());
+        return this.baseMapper.selectInPage(mallOrderInfo, page);
+    }
+
     @Override
     public IPage<AdminMallOrderInfoVo> getOrderListInPage(MallOrderInfoDto mallOrderInfo, QueryRequest request) {
         Page<AdminMallOrderInfoVo> page = new Page<>(request.getPageNum(), request.getPageSize());
         IPage<AdminMallOrderInfoVo> adminMallOrderInfoVos = this.baseMapper.selectOrderListInPage(page, mallOrderInfo);
+        if(CollUtil.isNotEmpty(adminMallOrderInfoVos.getRecords())){
+            for(AdminMallOrderInfoVo adminMallOrderInfoVo : adminMallOrderInfoVos.getRecords()){
+                Long orderId = adminMallOrderInfoVo.getId();
+                adminMallOrderInfoVo.setGoodsAmount(adminMallOrderInfoVo.getAmount().subtract(adminMallOrderInfoVo.getCarriage()));
+                List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderId);
+                if(CollUtil.isNotEmpty(mallOrderItemList)){
+                    StringBuffer stringBuffer = new StringBuffer();
+                    for(MallOrderItem mallOrderItem : mallOrderItemList){
+                        stringBuffer.append(mallOrderItem.getGoodsName())
+                                .append("-")
+                                .append(mallOrderItem.getSkuName())
+                                .append("*").append(mallOrderItem.getCnt()).append(";");
+                        if(ObjectUtil.isNotEmpty(mallOrderItem.getMemberInviteId())){
+                            MallMember mallMember = mallMemberMapper.selectInfoByInviteId(mallOrderItem.getMemberInviteId());
+                            if(ObjectUtil.isNotEmpty(mallMember)){
+                                adminMallOrderInfoVo.setRefererName(mallMember.getName());
+                            }
+                        }
+                    }
+                    adminMallOrderInfoVo.setGoodsName(stringBuffer.toString());
+                }
+            }
+        }
         return adminMallOrderInfoVos;
     }
 
@@ -58,6 +111,10 @@
         if(2 != status){
             return new FebsResponse().fail().message("订单不是待发货状态");
         }
+        Integer deliveryType = mallOrderInfo.getDeliveryType();
+        if(2 != deliveryType){
+            return new FebsResponse().fail().message("订单的配送方式不是快递");
+        }
         String expressNo = deliverGoodsDto.getExpressNo();
         if(StrUtil.isEmpty(expressNo)){
             return new FebsResponse().fail().message("请输入物流单号");
@@ -67,13 +124,16 @@
             return new FebsResponse().fail().message("请输入物流公司");
         }
         MallExpressInfo mallExpressInfo = new MallExpressInfo();
-        mallExpressInfo.setMemberId(mallExpressInfo.getMemberId());
+        mallExpressInfo.setMemberId(mallOrderInfo.getMemberId());
+        mallExpressInfo.setOrderId(mallOrderInfo.getId());
         mallExpressInfo.setExpressNo(expressNo);
         mallExpressInfo.setExpressCom(expressCom);
         mallExpressInfoMapper.insert(mallExpressInfo);
 
-        mallOrderInfo.setStatus(3);
-        mallOrderInfoMapper.updateById(mallOrderInfo);
+        mallOrderInfoMapper.updateOrderStateAndDeliveryState(mallOrderInfo.getId(),
+                OrderStatusEnum.WAIT_FINISH.getValue(),
+                OrderDeliveryStateEnum.DELIVERY_FINISH.getValue());
+
         return new FebsResponse().success();
     }
 
@@ -90,7 +150,7 @@
             StringBuffer orderItems = new StringBuffer();
             for (MallOrderItem item : mallOrderItems){
                 StringBuffer orderItem = new StringBuffer();
-                orderItems.append(item.getGoodsName()+"-"+item.getCnt()+"*"+item.getPrice()+"-合计"+item.getAmount()+"; \n ");
+                orderItems.append(item.getGoodsName()+"-"+item.getSkuName()+"-"+item.getCnt()+"*"+item.getPrice()+"-合计"+item.getAmount()+"; \n ");
                 orderItems.append(orderItem);
             }
             adminOrderDetailVo.setOrderItems(orderItems.toString());
@@ -119,13 +179,37 @@
         if(ObjectUtil.isEmpty(mallOrderRefund)){
             return new FebsResponse().fail().message("系统繁忙,请刷新重试");
         }
-        mallOrderRefund.setStatus(2);
+        Integer status = mallOrderRefund.getStatus();
+        if(status != 1){
+            return new FebsResponse().fail().message("申请记录不是已申请状态,请刷新页面");
+        }
+        mallOrderRefund.setStatus(5);
         mallOrderRefundMapper.updateById(mallOrderRefund);
+
+        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(mallOrderRefund.getOrderId());
+        mallOrderInfo.setStatus(6);
+        mallOrderInfoMapper.updateById(mallOrderInfo);
+
+        if(!"微信支付".equals(mallOrderInfo.getPayMethod()) && !"支付宝支付".equals(mallOrderInfo.getPayMethod())){
+            BigDecimal amount = mallOrderRefund.getAmount();
+            //用户钱包增加对应的余额
+            iApiMallMemberWalletService.addBalance(amount, mallOrderInfo.getMemberId());
+
+            mallMoneyFlowService.addMoneyFlow(
+                    mallOrderInfo.getMemberId(),
+                    amount,
+                    ScoreFlowTypeEnum.REFUND.getValue(),
+                    mallOrderInfo.getOrderNo(),
+                    FlowTypeEnum.BALANCE.getValue(),
+                    StrUtil.format(ScoreFlowTypeEnum.REFUND.getDesc(),amount),
+                    2
+            );
+        }
 
         MallOrderRefundOperation mallOrderRefundOperation = new MallOrderRefundOperation();
         mallOrderRefundOperation.setRefundId(mallOrderRefund.getId());
         mallOrderRefundOperation.setOrderId(mallOrderRefund.getOrderId());
-        mallOrderRefundOperation.setContent("已同意退款申请");
+        mallOrderRefundOperation.setContent("已同意退款不退货申请");
         mallOrderRefundOperationMapper.insert(mallOrderRefundOperation);
 
         return new FebsResponse().success();
@@ -137,6 +221,10 @@
         if(ObjectUtil.isEmpty(mallOrderRefund)){
             return new FebsResponse().fail().message("系统繁忙,请刷新重试");
         }
+        Integer status = mallOrderRefund.getStatus();
+        if(status != 1){
+            return new FebsResponse().fail().message("申请记录不是已申请状态,请刷新页面");
+        }
         mallOrderRefund.setStatus(3);
         mallOrderRefundMapper.updateById(mallOrderRefund);
 
@@ -145,9 +233,366 @@
         mallOrderRefundOperation.setOrderId(mallOrderRefund.getOrderId());
         mallOrderRefundOperation.setContent("不同意退款申请");
         mallOrderRefundOperationMapper.insert(mallOrderRefundOperation);
+        //恢复订单状态
+        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(mallOrderRefund.getOrderId());
+        mallOrderInfo.setStatus(mallOrderRefund.getBeforeStatus());
+        mallOrderInfoMapper.updateById(mallOrderInfo);
 
         return new FebsResponse().success();
     }
 
+    @Override
+    public FebsResponse refundConfirm(Long id) {
+        MallOrderRefund mallOrderRefund = mallOrderRefundMapper.selectById(id);
+        if(ObjectUtil.isEmpty(mallOrderRefund)){
+            return new FebsResponse().fail().message("系统繁忙,请刷新重试");
+        }
+        Integer status = mallOrderRefund.getStatus();
+        if(status != 4){
+            return new FebsResponse().fail().message("申请记录不是已提交物流信息状态,请刷新页面");
+        }
+        mallOrderRefund.setStatus(5);
+        mallOrderRefundMapper.updateById(mallOrderRefund);
 
+        MallOrderRefundOperation mallOrderRefundOperation = new MallOrderRefundOperation();
+        mallOrderRefundOperation.setRefundId(mallOrderRefund.getId());
+        mallOrderRefundOperation.setOrderId(mallOrderRefund.getOrderId());
+        mallOrderRefundOperation.setContent("已退款到用户账户");
+        mallOrderRefundOperationMapper.insert(mallOrderRefundOperation);
+
+        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(mallOrderRefund.getOrderId());
+        if(ObjectUtil.isEmpty(mallOrderInfo)){
+            return new FebsResponse().fail().message("系统繁忙,请刷新重试");
+        }
+        mallOrderInfo.setStatus(6);
+        mallOrderInfoMapper.updateById(mallOrderInfo);
+
+        BigDecimal refundAmount = mallOrderRefund.getAmount();
+        //用户钱包增加对应的余额
+        iApiMallMemberWalletService.addBalance(refundAmount, mallOrderInfo.getMemberId());
+
+        //新增一条资金流水
+
+
+        mallMoneyFlowService.addMoneyFlow(
+                mallOrderInfo.getMemberId(),
+                refundAmount,
+                ScoreFlowTypeEnum.REFUND.getValue(),
+                mallOrderInfo.getOrderNo(),
+                FlowTypeEnum.BALANCE.getValue(),
+                StrUtil.format(ScoreFlowTypeEnum.REFUND.getDesc(),refundAmount),
+                2
+        );
+        return new FebsResponse().success();
+    }
+
+    @Override
+    public IPage<AdminMallOrderRefundAddressVo> getMallOrderRefundAddressInPage(MallOrderRefundAddressDto mallOrderRefundAddressDto, QueryRequest request) {
+        Page<AdminMallOrderRefundAddressVo> page = new Page<>(request.getPageNum(), request.getPageSize());
+        IPage<AdminMallOrderRefundAddressVo> adminMallOrderRefundAddressVos = mallOrderRefundAddressMapper.getMallOrderRefundAddressInPage(page, mallOrderRefundAddressDto);
+        return adminMallOrderRefundAddressVos;
+    }
+
+    @Override
+    public AdminMallOrderRefundAddressVo getMallOrderRefundAddressInfoById(long id) {
+        AdminMallOrderRefundAddressVo AdminMallOrderRefundAddressVo = mallOrderRefundAddressMapper.getMallOrderRefundAddressInfoById(id);
+        return AdminMallOrderRefundAddressVo;
+    }
+
+    @Override
+    public FebsResponse addressUpdate(AddressUpdateDto addressUpdateDto) {
+        Long id = addressUpdateDto.getId();
+        MallOrderRefundAddress mallOrderRefundAddress = mallOrderRefundAddressMapper.selectById(id);
+        mallOrderRefundAddress.setName(addressUpdateDto.getName());
+        mallOrderRefundAddress.setPhone(addressUpdateDto.getPhone());
+        mallOrderRefundAddress.setAddress(addressUpdateDto.getAddress());
+        mallOrderRefundAddressMapper.updateById(mallOrderRefundAddress);
+        return new FebsResponse().success();
+    }
+
+    @Override
+    public FebsResponse deleteAddress(Long id) {
+        mallOrderRefundAddressMapper.deleteById(id);
+        return new FebsResponse().success();
+    }
+
+    @Override
+    public FebsResponse addAddress(AddAddressDto addAddressDto) {
+        MallOrderRefundAddress mallOrderRefundAddress = new MallOrderRefundAddress();
+        mallOrderRefundAddress.setName(addAddressDto.getName());
+        mallOrderRefundAddress.setPhone(addAddressDto.getPhone());
+        mallOrderRefundAddress.setAddress(addAddressDto.getAddress());
+        mallOrderRefundAddressMapper.insert(mallOrderRefundAddress);
+        return new FebsResponse().success();
+    }
+
+    @Override
+    public List<AdminAddAddressTreeVo> getRefundAddress() {
+        List<AdminAddAddressTreeVo> list = mallOrderRefundAddressMapper.getRefundAddress();
+        return list;
+    }
+
+    @Override
+    public FebsResponse withAddressUpdate(WithAddressUpdateDto withAddressUpdateDto) {
+        Long addressId = withAddressUpdateDto.getAddressId();
+        MallOrderRefundAddress mallOrderRefundAddress = mallOrderRefundAddressMapper.selectById(addressId);
+
+        MallOrderRefund mallOrderRefund = mallOrderRefundMapper.selectById(withAddressUpdateDto.getId());
+        if(ObjectUtil.isEmpty(mallOrderRefund)){
+            return new FebsResponse().fail().message("系统繁忙,请刷新重试");
+        }
+        Integer status = mallOrderRefund.getStatus();
+        if(status != 1){
+            return new FebsResponse().fail().message("申请记录不是已申请状态,请刷新页面");
+        }
+        mallOrderRefund.setStatus(2);
+        mallOrderRefund.setName(mallOrderRefundAddress.getName());
+        mallOrderRefund.setPhone(mallOrderRefundAddress.getPhone());
+        mallOrderRefund.setAddress(mallOrderRefundAddress.getAddress());
+        mallOrderRefundMapper.updateById(mallOrderRefund);
+
+        MallOrderRefundOperation mallOrderRefundOperation = new MallOrderRefundOperation();
+        mallOrderRefundOperation.setRefundId(mallOrderRefund.getId());
+        mallOrderRefundOperation.setOrderId(mallOrderRefund.getOrderId());
+        mallOrderRefundOperation.setContent("已同意退款退货申请");
+        mallOrderRefundOperationMapper.insert(mallOrderRefundOperation);
+
+        return new FebsResponse().success();
+    }
+
+    @Override
+    public AdminMallOrderRefundVo getMallOrderRefundInfoById(long id) {
+        return mallOrderRefundMapper.getMallOrderRefundInfoById(id);
+    }
+
+    @Override
+    public IPage<AdminPayMethodVo> getPayMethodListInPage(PayMethodDto payMethodDto, QueryRequest request) {
+        payMethodDto.setType("PAYMENT_METHOD");
+        Page<AdminPayMethodVo> page = new Page<>(request.getPageNum(), request.getPageSize());
+        IPage<AdminPayMethodVo> adminPayMethodVos = dataDictionaryCustomMapper.getPayMethodListInPage(page, payMethodDto);
+        return adminPayMethodVos;
+    }
+
+    @Override
+    public AdminMallPayMethodEditVo getMallPayMethodEditInfoById(long id) {
+        AdminMallPayMethodEditVo adminMallPayMethodEditVo = dataDictionaryCustomMapper.getMallPayMethodEditInfoById(id);
+        return adminMallPayMethodEditVo;
+    }
+
+    @Override
+    public FebsResponse payMethodEdit(PayMethodEditDto payMethodEditDto) {
+        DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectById(payMethodEditDto.getId());
+        if(ObjectUtil.isEmpty(dataDictionaryCustom)){
+            return new FebsResponse().fail().message("系统繁忙,请刷新重试");
+        }
+        dataDictionaryCustom.setValue(payMethodEditDto.getValue());
+        dataDictionaryCustomMapper.updateById(dataDictionaryCustom);
+        return new FebsResponse().success();
+    }
+
+    @Override
+    public FebsResponse cancelOrder(Long id) {
+        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(id);
+        if(ObjectUtil.isEmpty(mallOrderInfo)){
+            return new FebsResponse().fail().message("系统繁忙,请刷新重试");
+        }
+        Integer status = mallOrderInfo.getStatus();
+        if(status != 2){
+            return new FebsResponse().fail().message("订单不是代发货状态");
+        }
+        mallOrderInfo.setStatus(7);
+        mallOrderInfoMapper.updateById(mallOrderInfo);
+        return new FebsResponse().success();
+    }
+
+    @Override
+    public AdminMallMemberPaymentVo getMallMemberRefundPayInfoByFlowId(long id) {
+        AdminMallMemberPaymentVo adminMallMemberPaymentVo = new AdminMallMemberPaymentVo();
+        MallOrderRefund mallOrderRefund = mallOrderRefundMapper.selectById(id);
+        AdminMallMemberPaymentVo adminMallMemberPaymentVoa = mallMemberPaymentMapper.getMallMemberPaymentInfoByMemberId(mallOrderRefund.getMemberId());
+        if(ObjectUtil.isNotEmpty(adminMallMemberPaymentVoa)){
+            adminMallMemberPaymentVo = adminMallMemberPaymentVoa;
+        }
+        return adminMallMemberPaymentVo;
+    }
+
+    @Override
+    public IPage<AdminMallGoodsCommentVo> getCommentListInPage(AdminMallGoodsCommentDto adminMallGoodsCommentDto, QueryRequest request) {
+        Page<AdminMallGoodsCommentVo> page = new Page<>(request.getPageNum(), request.getPageSize());
+        IPage<AdminMallGoodsCommentVo> adminMallGoodsCommentVos = mallGoodsCommentMapper.getCommentListInPage(page, adminMallGoodsCommentDto);
+        return adminMallGoodsCommentVos;
+    }
+
+    @Override
+    public FebsResponse showStateSwitchOn(Long id) {
+        MallGoodsComment mallGoodsComment = mallGoodsCommentMapper.selectById(id);
+        if (ObjectUtil.isEmpty(mallGoodsComment)) {
+            return new FebsResponse().fail().message("评论不存在,请刷新当前页面");
+        }
+        mallGoodsComment.setShowState(MallGoodsComment.SHOW_STATE_ENABLE);
+        mallGoodsCommentMapper.updateById(mallGoodsComment);
+        return new FebsResponse().success();
+    }
+
+    @Override
+    public FebsResponse showStateSwitchOff(Long id) {
+        MallGoodsComment mallGoodsComment = mallGoodsCommentMapper.selectById(id);
+        if (ObjectUtil.isEmpty(mallGoodsComment)) {
+            return new FebsResponse().fail().message("评论不存在,请刷新当前页面");
+        }
+        mallGoodsComment.setShowState(MallGoodsComment.SHOW_STATE_DISABLED);
+        mallGoodsCommentMapper.updateById(mallGoodsComment);
+        return new FebsResponse().success();
+    }
+
+    @Override
+    public void updateOrderStateAndDeliveryState(Long id, int value, int value1) {
+        mallOrderInfoMapper.updateOrderStateAndDeliveryState(id,value,value1);
+    }
+
+    @Override
+    public IPage<MallRefundEntity> getOrderRefundListInPage(MallRefundEntity mallRefundEntity, QueryRequest request) {
+        Page<MallRefundEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
+        IPage<MallRefundEntity> mallRefundEntityIPage = mallRefundMapper.getOrderRefundListInPage(page, mallRefundEntity);
+        List<MallRefundEntity> records = mallRefundEntityIPage.getRecords();
+        if(CollUtil.isNotEmpty(records)){
+            for(MallRefundEntity mallRefundEntityPic : records){
+                String refundPic = mallRefundEntityPic.getRefundPic();
+                if(StrUtil.isNotEmpty(refundPic)){
+                    String[] split = StrUtil.split(refundPic, ",");
+                    mallRefundEntityPic.setRefundPicList(split);
+                }
+            }
+        }
+        return mallRefundEntityIPage;
+    }
+
+    @Override
+    public IPage<AdminGoodsStatisticsVo> goodsStatistics(MallOrderItem mallOrderItem, QueryRequest request) {
+        Page<AdminGoodsStatisticsVo> page = new Page<>(request.getPageNum(), request.getPageSize());
+        IPage<AdminGoodsStatisticsVo> adminGoodsStatisticsVos = mallOrderInfoMapper.getGoodsStatisticsInPage(page, mallOrderItem);
+        return adminGoodsStatisticsVos;
+    }
+
+    @Override
+    public FebsResponse deliverGoodsUpdate(DeliverGoodsDto deliverGoodsDto) {
+        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(deliverGoodsDto.getId());
+        if(ObjectUtil.isEmpty(mallOrderInfo)){
+            return new FebsResponse().fail().message("订单不存在,刷新后重试");
+        }
+        Integer status = mallOrderInfo.getStatus();
+        if(3 != status){
+            return new FebsResponse().fail().message("订单不是待收货状态");
+        }
+        Integer deliveryType = mallOrderInfo.getDeliveryType();
+        if(2 != deliveryType){
+            return new FebsResponse().fail().message("订单的配送方式不是快递");
+        }
+        String expressNo = deliverGoodsDto.getExpressNo();
+        if(StrUtil.isEmpty(expressNo)){
+            return new FebsResponse().fail().message("请输入物流单号");
+        }
+        String expressCom = deliverGoodsDto.getExpressCom();
+        if(StrUtil.isEmpty(expressCom)){
+            return new FebsResponse().fail().message("请输入物流公司");
+        }
+        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(mallOrderInfo.getId());
+
+        if(ObjectUtil.isEmpty(mallExpressInfo)){
+            return new FebsResponse().fail().message("请先发货");
+        }
+        mallExpressInfo.setExpressNo(expressNo);
+        mallExpressInfo.setExpressCom(expressCom);
+        mallExpressInfoMapper.updateById(mallExpressInfo);
+
+        return new FebsResponse().success();
+    }
+
+    @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) {
+            return;
+        }
+
+        MallExpressInfo mallExpressInfo = new MallExpressInfo();
+        mallExpressInfo.setMemberId(mallOrderInfo.getMemberId());
+        mallExpressInfo.setOrderId(mallOrderInfo.getId());
+        mallExpressInfo.setExpressNo(deliverGoodsDto.getExpressNo());
+        mallExpressInfo.setExpressCom(deliverGoodsDto.getExpressCom());
+        mallExpressInfo.setExpressCode(deliverGoodsDto.getExpressCode());
+        mallExpressInfoMapper.insert(mallExpressInfo);
+
+        mallOrderInfoMapper.updateOrderStateAndDeliveryState(mallOrderInfo.getId(),
+                OrderStatusEnum.WAIT_FINISH.getValue(),
+                OrderDeliveryStateEnum.DELIVERY_FINISH.getValue());
+//        mallOrderInfo.setStatus(3);
+//        mallOrderInfoMapper.updateById(mallOrderInfo);
+    }
 }

--
Gitblit v1.9.1