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 | 68 ++++++++++++++++++++++++++++++---
1 files changed, 61 insertions(+), 7 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 58e02d1..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
@@ -10,14 +10,20 @@
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
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;
import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO;
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;
import cn.iocoder.yudao.module.crm.service.receivable.CrmReceivableService;
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
@@ -59,6 +65,8 @@
private CrmContractService contractService;
@Resource
private CrmCustomerService customerService;
+ @Resource
+ private CrmInvoiceService invoiceService;
@Resource
private AdminUserApi adminUserApi;
@@ -92,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));
@@ -107,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()));
@@ -148,6 +154,9 @@
// 1.3 鑾峰緱鍚堝悓鍒楄〃
Map<Long, CrmContractDO> contractMap = contractService.getContractMap(
convertSet(receivableList, CrmReceivableDO::getContractId));
+ // 1.4 鑾峰緱鍏宠仈寮�绁ㄥ垪琛�
+ Map<Long, CrmInvoiceDO> invoiceMap = invoiceService.getInvoiceMap(
+ convertSet(receivableList, CrmReceivableDO::getInvoiceId));
// 2. 鎷兼帴缁撴灉
return BeanUtils.toBean(receivableList, CrmReceivableRespVO.class, (receivableVO) -> {
// 2.1 鎷兼帴瀹㈡埛鍚嶇О
@@ -162,22 +171,67 @@
// 2.3 鎷兼帴鍚堝悓淇℃伅
findAndThen(contractMap, receivableVO.getContractId(), contract ->
receivableVO.setContract(BeanUtils.toBean(contract, CrmContractRespVO.class)));
+ // 2.4 鎷兼帴鍏宠仈寮�绁ㄤ俊鎭�
+ findAndThen(invoiceMap, receivableVO.getInvoiceId(), invoice ->
+ receivableVO.setInvoice(BeanUtils.toBean(invoice, CrmInvoiceRespVO.class)));
});
}
- @PutMapping("/submit")
- @Operation(summary = "鎻愪氦鍥炴瀹℃壒")
+ @PutMapping("/update-status")
+ @Operation(summary = "鏇存柊鍥炴鐨勭姸鎬侊紙瀹℃牳/鍙嶅鏍革級")
@PreAuthorize("@ss.hasPermission('crm:receivable:update')")
- public CommonResult<Boolean> submitContract(@RequestParam("id") Long id) {
- receivableService.submitReceivable(id, getLoginUserId());
+ public CommonResult<Boolean> updateReceivableStatus(@RequestParam("id") Long id,
+ @RequestParam("status") Integer status) {
+ receivableService.updateReceivableStatus(id, status);
return success(true);
}
@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