From cdaec80a5ffa474f69e5c36f0312be3c0abf2210 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 05 十一月 2026 18:31:11 +0800
Subject: [PATCH] feat(crm): 投标保证金迁移到销售管理并关联销售台账

---
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivableController.java |   48 +++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivableController.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivableController.java
index 57c8fc1..dbeaee9 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivableController.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivableController.java
@@ -11,6 +11,7 @@
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractRespVO;
 import cn.iocoder.yudao.module.crm.controller.admin.invoice.vo.invoice.CrmInvoiceRespVO;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.receivable.CrmReceivableItemRespVO;
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.receivable.CrmReceivablePageReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.receivable.CrmReceivableRespVO;
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.receivable.CrmReceivableSaveReqVO;
@@ -18,6 +19,8 @@
 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.invoice.CrmInvoiceDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableItemDO;
+import cn.iocoder.yudao.module.crm.enums.receivable.CrmReceivableBizTypeEnum;
 import cn.iocoder.yudao.module.crm.service.contract.CrmContractService;
 import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
 import cn.iocoder.yudao.module.crm.service.invoice.CrmInvoiceService;
@@ -97,7 +100,6 @@
     @GetMapping("/get")
     @Operation(summary = "鑾峰緱鍥炴")
     @Parameter(name = "id", description = "缂栧彿", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('crm:receivable:query')")
     public CommonResult<CrmReceivableRespVO> getReceivable(@RequestParam("id") Long id) {
         CrmReceivableDO receivable = receivableService.getReceivable(id);
         return success(buildReceivableDetail(receivable));
@@ -112,7 +114,6 @@
 
     @GetMapping("/page")
     @Operation(summary = "鑾峰緱鍥炴鍒嗛〉")
-    @PreAuthorize("@ss.hasPermission('crm:receivable:query')")
     public CommonResult<PageResult<CrmReceivableRespVO>> getReceivablePage(@Valid CrmReceivablePageReqVO pageReqVO) {
         PageResult<CrmReceivableDO> pageResult = receivableService.getReceivablePage(pageReqVO, getLoginUserId());
         return success(new PageResult<>(buildReceivableDetailList(pageResult.getList()), pageResult.getTotal()));
@@ -187,9 +188,50 @@
 
     @GetMapping("/audit-count")
     @Operation(summary = "鑾峰緱寰呭鏍稿洖娆炬暟閲�")
-    @PreAuthorize("@ss.hasPermission('crm:receivable:query')")
     public CommonResult<Long> getAuditReceivableCount() {
         return success(receivableService.getAuditReceivableCount(getLoginUserId()));
     }
 
+    @GetMapping("/item-list")
+    @Operation(summary = "鑾峰緱鍥炴鐨勬牳閿�鏄庣粏")
+    @Parameter(name = "receivableId", description = "鍥炴缂栧彿", required = true)
+    public CommonResult<List<CrmReceivableItemRespVO>> getReceivableItemList(@RequestParam("receivableId") Long receivableId) {
+        CrmReceivableDO receivable = receivableService.getReceivable(receivableId);
+        return success(buildReceivableItemList(receivableService.getReceivableItemList(receivableId),
+                receivable == null ? Collections.emptyList() : Collections.singletonList(receivable)));
+    }
+
+    @GetMapping("/item-list-by-customer")
+    @Operation(summary = "鑾峰緱瀹㈡埛涓嬪叏閮ㄥ洖娆剧殑鏍搁攢鏄庣粏")
+    @Parameter(name = "customerId", description = "瀹㈡埛缂栧彿", required = true)
+    @PreAuthorize("@ss.hasPermission('crm:receivable:query')")
+    public CommonResult<List<CrmReceivableItemRespVO>> getReceivableItemListByCustomerId(
+            @RequestParam("customerId") Long customerId) {
+        List<CrmReceivableItemDO> items = receivableService.getReceivableItemListByCustomerId(customerId);
+        if (CollUtil.isEmpty(items)) {
+            return success(Collections.emptyList());
+        }
+        Map<Long, CrmReceivableDO> receivableMap = receivableService.getReceivableMap(
+                convertSet(items, CrmReceivableItemDO::getReceivableId));
+        return success(buildReceivableItemList(items, receivableMap.values()));
+    }
+
+    private List<CrmReceivableItemRespVO> buildReceivableItemList(List<CrmReceivableItemDO> items,
+                                                                  java.util.Collection<CrmReceivableDO> receivables) {
+        if (CollUtil.isEmpty(items)) {
+            return Collections.emptyList();
+        }
+        Map<Long, CrmReceivableDO> receivableMap = receivables.stream()
+                .collect(java.util.stream.Collectors.toMap(CrmReceivableDO::getId, item -> item, (a, b) -> a));
+        return BeanUtils.toBean(items, CrmReceivableItemRespVO.class, vo -> {
+            vo.setBizTypeName(CrmReceivableBizTypeEnum.getNameByType(vo.getBizType()));
+            CrmReceivableDO receivable = receivableMap.get(vo.getReceivableId());
+            if (receivable != null) {
+                vo.setReceivableNo(receivable.getNo());
+                vo.setCustomerId(receivable.getCustomerId());
+                vo.setReturnTime(receivable.getReturnTime());
+            }
+        });
+    }
+
 }

--
Gitblit v1.9.3