From a4ed0f250009167453ca637ce042ef8e0b69f613 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 24 十月 2026 19:30:00 +0800
Subject: [PATCH] feat(aftersales): 增加售后退货流程管理功能

---
 yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/AfterSaleReturnController.java |   28 ++++++++++++++++++++++++++++
 1 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/AfterSaleReturnController.java b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/AfterSaleReturnController.java
index 4f593cf..fdaf58e 100644
--- a/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/AfterSaleReturnController.java
+++ b/yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/AfterSaleReturnController.java
@@ -7,9 +7,12 @@
 import cn.iocoder.yudao.module.aftersales.controller.admin.returnobj.vo.AfterSaleReturnPageReqVO;
 import cn.iocoder.yudao.module.aftersales.controller.admin.returnobj.vo.AfterSaleReturnRespVO;
 import cn.iocoder.yudao.module.aftersales.controller.admin.returnobj.vo.AfterSaleReturnSaveReqVO;
+import cn.iocoder.yudao.module.aftersales.controller.admin.returnobj.vo.AfterSaleRefundConfirmReqVO;
 import cn.iocoder.yudao.module.aftersales.dal.dataobject.returnobj.AfterSaleReturnDO;
 import cn.iocoder.yudao.module.aftersales.dal.dataobject.returnobj.AfterSaleReturnItemDO;
+import cn.iocoder.yudao.module.aftersales.dal.dataobject.ticket.AfterSaleTicketDO;
 import cn.iocoder.yudao.module.aftersales.service.returnobj.AfterSaleReturnService;
+import cn.iocoder.yudao.module.aftersales.service.ticket.AfterSaleTicketService;
 import cn.iocoder.yudao.module.crm.api.customer.CrmCustomerApi;
 import cn.iocoder.yudao.module.crm.api.customer.dto.CrmCustomerRespDTO;
 import io.swagger.v3.oas.annotations.Operation;
@@ -24,6 +27,7 @@
 import java.util.*;
 
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 
@@ -35,6 +39,9 @@
 
     @Resource
     private AfterSaleReturnService returnService;
+
+    @Resource
+    private AfterSaleTicketService ticketService;
 
     @Resource
     private CrmCustomerApi customerApi;
@@ -51,6 +58,22 @@
     @PreAuthorize("@ss.hasPermission('aftersales:return:approve')")
     public CommonResult<Boolean> approveReturn(@RequestParam("id") Long id) {
         returnService.approveReturn(id);
+        return success(true);
+    }
+
+    @PutMapping("/complete-refund")
+    @Operation(summary = "纭澶栭儴閫�娆�/鎹㈣揣瀹屾垚")
+    @PreAuthorize("@ss.hasPermission('aftersales:return:refund')")
+    public CommonResult<Boolean> completeRefund(@Valid @RequestBody AfterSaleRefundConfirmReqVO reqVO) {
+        returnService.confirmRefundCompleted(reqVO.getId(), reqVO.getActualRefundPrice(), reqVO.getVoucherNo());
+        return success(true);
+    }
+
+    @PutMapping("/cancel")
+    @Operation(summary = "鍙栨秷灏氭湭鍏ュ簱鎴栭��娆剧殑閫�璐х敵璇�")
+    @PreAuthorize("@ss.hasPermission('aftersales:return:cancel')")
+    public CommonResult<Boolean> cancelReturn(@RequestParam("id") Long id) {
+        returnService.cancelReturn(id);
         return success(true);
     }
 
@@ -85,10 +108,15 @@
         // 鎵归噺鍔犺浇瀹㈡埛鍚嶇О
         Set<Long> customerIds = convertSet(returnList, AfterSaleReturnDO::getCustomerId);
         Map<Long, CrmCustomerRespDTO> customerMap = customerApi.getCustomerMap(customerIds);
+        // 鎵归噺鍔犺浇鍏宠仈宸ュ崟鐨勯攢鍞鍗曞彿锛堝弽鏄捐鍗曚俊鎭級
+        Set<Long> ticketIds = convertSet(returnList, AfterSaleReturnDO::getTicketId);
+        Map<Long, AfterSaleTicketDO> ticketMap = convertMap(ticketService.getTicketList(ticketIds), AfterSaleTicketDO::getId);
         // 鎷艰鍚嶇О瀛楁
         return BeanUtils.toBean(returnList, AfterSaleReturnRespVO.class, vo -> {
             CrmCustomerRespDTO customer = customerMap.get(vo.getCustomerId());
             if (customer != null) vo.setCustomerName(customer.getName());
+            AfterSaleTicketDO ticket = ticketMap.get(vo.getTicketId());
+            if (ticket != null) vo.setSaleOrderNo(ticket.getSaleOrderNo());
         });
     }
 

--
Gitblit v1.9.3