云
2026-10-25 daf9f8dbb7ba36eb283221d2c6022039aefaf97d
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());
        });
    }