From a34b9a6418a8874dc0851cb4e19d189339dd5133 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 04 Aug 2025 15:23:35 +0800
Subject: [PATCH] feat(ai): 添加 AI 用户答题功能

---
 src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java |  131 +++++++++++++++++++++++++++++++++++++++----
 1 files changed, 117 insertions(+), 14 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 969aa84..6189f60 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,10 +2,10 @@
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
-import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
-import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
-import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum;
-import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
+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.*;
@@ -17,6 +17,7 @@
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
@@ -25,6 +26,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 @Slf4j
@@ -81,10 +83,12 @@
                                 .append("-")
                                 .append(mallOrderItem.getSkuName())
                                 .append("*").append(mallOrderItem.getCnt()).append(";");
-                        if(ObjectUtil.isNotEmpty(mallOrderItem.getMemberInviteId())){
-                            MallMember mallMember = mallMemberMapper.selectInfoByInviteId(mallOrderItem.getMemberInviteId());
-                            adminMallOrderInfoVo.setRefererName(mallMember.getName());
-                        }
+//                        if(ObjectUtil.isNotEmpty(mallOrderItem.getMemberInviteId())){
+//                            MallMember mallMember = mallMemberMapper.selectInfoByInviteId(mallOrderItem.getMemberInviteId());
+//                            if(ObjectUtil.isNotEmpty(mallMember)){
+//                                adminMallOrderInfoVo.setRefererName(mallMember.getName());
+//                            }
+//                        }
                     }
                     adminMallOrderInfoVo.setGoodsName(stringBuffer.toString());
                 }
@@ -122,6 +126,7 @@
         }
         MallExpressInfo mallExpressInfo = new MallExpressInfo();
         mallExpressInfo.setMemberId(mallOrderInfo.getMemberId());
+        mallExpressInfo.setOrderNo(mallOrderInfo.getOrderNo());
         mallExpressInfo.setOrderId(mallOrderInfo.getId());
         mallExpressInfo.setExpressNo(expressNo);
         mallExpressInfo.setExpressCom(expressCom);
@@ -137,8 +142,15 @@
     @Override
     public AdminOrderDetailVo getMallOrderDetailById(long id) {
         AdminOrderDetailVo adminOrderDetailVo = mallOrderInfoMapper.getMallOrderDetailById(id);
-        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(id);
-        if(ObjectUtil.isNotEmpty(mallExpressInfo)){
+        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectOne(
+                Wrappers.lambdaQuery(MallExpressInfo.class)
+                        .eq(MallExpressInfo::getOrderId, id)
+                        .eq(MallExpressInfo::getOrderNo, adminOrderDetailVo.getOrderNo())
+                        .last("limit 1")
+        );
+
+//        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(id);
+        if(ObjectUtil.isNotNull(mallExpressInfo)){
             adminOrderDetailVo.setExpressNo(mallExpressInfo.getExpressNo());
             adminOrderDetailVo.setExpressCom(mallExpressInfo.getExpressCom());
         }
@@ -192,7 +204,15 @@
             //用户钱包增加对应的余额
             iApiMallMemberWalletService.addBalance(amount, mallOrderInfo.getMemberId());
 
-            mallMoneyFlowService.addMoneyFlow(mallOrderRefund.getMemberId(), amount, MoneyFlowTypeEnum.REFUND.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue());
+            mallMoneyFlowService.addMoneyFlow(
+                    mallOrderInfo.getMemberId(),
+                    amount,
+                    ScoreFlowTypeEnum.REFUND.getValue(),
+                    mallOrderInfo.getOrderNo(),
+                    FlowTypeEnum.BALANCE.getValue(),
+                    StrUtil.format(ScoreFlowTypeEnum.REFUND.getDesc(),amount),
+                    2
+            );
         }
 
         MallOrderRefundOperation mallOrderRefundOperation = new MallOrderRefundOperation();
@@ -261,7 +281,17 @@
         iApiMallMemberWalletService.addBalance(refundAmount, mallOrderInfo.getMemberId());
 
         //新增一条资金流水
-        mallMoneyFlowService.addMoneyFlow(mallOrderRefund.getMemberId(), refundAmount, MoneyFlowTypeEnum.REFUND.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue());
+
+
+        mallMoneyFlowService.addMoneyFlow(
+                mallOrderInfo.getMemberId(),
+                refundAmount,
+                ScoreFlowTypeEnum.REFUND.getValue(),
+                mallOrderInfo.getOrderNo(),
+                FlowTypeEnum.BALANCE.getValue(),
+                StrUtil.format(ScoreFlowTypeEnum.REFUND.getDesc(),refundAmount),
+                2
+        );
         return new FebsResponse().success();
     }
 
@@ -475,9 +505,15 @@
         if(StrUtil.isEmpty(expressCom)){
             return new FebsResponse().fail().message("请输入物流公司");
         }
-        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(mallOrderInfo.getId());
+        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectOne(
+                Wrappers.lambdaQuery(MallExpressInfo.class)
+                        .eq(MallExpressInfo::getOrderId, mallOrderInfo.getId())
+                        .eq(MallExpressInfo::getOrderNo, mallOrderInfo.getOrderNo())
+                        .last("limit 1")
+        );
+//        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(mallOrderInfo.getId());
 
-        if(ObjectUtil.isEmpty(mallExpressInfo)){
+        if(ObjectUtil.isNull(mallExpressInfo)){
             return new FebsResponse().fail().message("请先发货");
         }
         mallExpressInfo.setExpressNo(expressNo);
@@ -485,6 +521,72 @@
         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
@@ -497,6 +599,7 @@
         MallExpressInfo mallExpressInfo = new MallExpressInfo();
         mallExpressInfo.setMemberId(mallOrderInfo.getMemberId());
         mallExpressInfo.setOrderId(mallOrderInfo.getId());
+        mallExpressInfo.setOrderNo(deliverGoodsDto.getOrderNo());
         mallExpressInfo.setExpressNo(deliverGoodsDto.getExpressNo());
         mallExpressInfo.setExpressCom(deliverGoodsDto.getExpressCom());
         mallExpressInfo.setExpressCode(deliverGoodsDto.getExpressCode());

--
Gitblit v1.9.1