From dddc473c582e983674913163dd4e93f840effbdb Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期一, 26 十月 2026 10:54:55 +0800
Subject: [PATCH] fix(search): 修复多处搜索条件未生效的问题

---
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivableServiceImpl.java |  200 ++++++++++++++++++++++++++++++-------------------
 1 files changed, 122 insertions(+), 78 deletions(-)

diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivableServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivableServiceImpl.java
index 0652c25..2a6d218 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivableServiceImpl.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivableServiceImpl.java
@@ -8,9 +8,6 @@
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
-import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
-import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.receivable.CrmReceivablePageReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.receivable.CrmReceivableSaveReqVO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO;
@@ -27,7 +24,11 @@
 import cn.iocoder.yudao.module.crm.service.invoice.CrmInvoiceService;
 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO;
+import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
+import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
+import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum;
 import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
+import cn.iocoder.yudao.module.system.api.approval.ApprovalConfigApi;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import cn.iocoder.yudao.module.system.enums.storage.StorageRecordTypeEnum;
 import com.mzt.logapi.context.LogRecordContext;
@@ -44,9 +45,9 @@
 import java.util.*;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*;
 import static cn.iocoder.yudao.module.crm.enums.LogRecordConstants.*;
-import static cn.iocoder.yudao.module.crm.util.CrmAuditStatusUtils.convertBpmResultToAuditStatus;
 
 /**
  * CRM 鍥炴 Service 瀹炵幇绫�
@@ -58,10 +59,8 @@
 @Slf4j
 public class CrmReceivableServiceImpl implements CrmReceivableService {
 
-    /**
-     * BPM 鍚堝悓瀹℃壒娴佺▼鏍囪瘑
-     */
-    public static final String BPM_PROCESS_DEFINITION_KEY = "crm-receivable-audit";
+    private static final String RECEIVABLE_PROCESS_KEY = "crm-receivable-audit";
+    private static final String RECEIVABLE_APPROVE_BIZ_TYPE = "crm_receivable_approve";
 
     @Resource
     private CrmReceivableMapper receivableMapper;
@@ -82,28 +81,32 @@
     @Resource
     private AdminUserApi adminUserApi;
     @Resource
+    private StorageAttachmentApi storageAttachmentApi;
+    @Resource
     private BpmProcessInstanceApi bpmProcessInstanceApi;
     @Resource
-    private StorageAttachmentApi storageAttachmentApi;
+    private ApprovalConfigApi approvalConfigApi;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     @LogRecord(type = CRM_RECEIVABLE_TYPE, subType = CRM_RECEIVABLE_CREATE_SUB_TYPE, bizNo = "{{#receivable.id}}",
             success = CRM_RECEIVABLE_CREATE_SUCCESS)
     public Long createReceivable(CrmReceivableSaveReqVO createReqVO) {
-        // 1.1 鏍¢獙鍙洖娆鹃噾棰濊秴杩囦笂闄�
-        validateReceivablePriceExceedsLimit(createReqVO);
-        // 1.2 鏍¢獙鍙洖娆鹃噾棰濅笉瓒呰繃绱宸插紑绁ㄩ噾棰濓紙鍏堝紑绁ㄥ悗鍥炴锛�
-        validateReceivablePriceExceedsInvoiceLimit(createReqVO);
-        // 1.3 鏍¢獙鍏宠仈鏁版嵁瀛樺湪
+        // 1.1 鏍¢獙鍏宠仈鏁版嵁瀛樺湪
         validateRelationDataExists(createReqVO);
-        // 1.4 鐢熸垚鍥炴缂栧彿
+        // 1.2 鏍¢獙鍏宠仈寮�绁ㄥ悎鏍硷紙瀹℃壒閫氳繃 + 宸蹭笂浼犲彂绁ㄩ檮浠� + 涓庡悎鍚屽尮閰嶏級
+        validateInvoiceForReceivable(createReqVO);
+        // 1.3 鏍¢獙鍙洖娆鹃噾棰濅笉瓒呰繃鍚堝悓鍓╀綑鍙洖娆鹃噾棰�
+        validateReceivablePriceExceedsLimit(createReqVO);
+        // 1.4 鏍¢獙鍙洖娆鹃噾棰濅笉瓒呰繃璇ュ紑绁ㄥ墿浣欏彲鍥炴閲戦锛堝厛寮�绁ㄥ悗鍥炴锛�
+        validateReceivablePriceExceedsInvoiceRemaining(createReqVO);
+        // 1.5 鐢熸垚鍥炴缂栧彿
         String no = noRedisDAO.generate(CrmNoRedisDAO.RECEIVABLE_PREFIX);
         if (receivableMapper.selectByNo(no) != null) {
             throw exception(RECEIVABLE_NO_EXISTS);
         }
 
-        // 2.1 鎻掑叆鍥炴
+        // 2.1 鎻掑叆鑽夌锛涙彁浜ゆ椂鍐嶅垱寤� BPM 娴佺▼
         CrmReceivableDO receivable = BeanUtils.toBean(createReqVO, CrmReceivableDO.class)
                 .setNo(no).setAuditStatus(CrmAuditStatusEnum.DRAFT.getStatus());
         receivableMapper.insert(receivable);
@@ -128,8 +131,10 @@
     private void validateReceivablePriceExceedsLimit(CrmReceivableSaveReqVO reqVO) {
         // 1. 璁$畻鍓╀綑鍙��娆鹃噾棰濓紝涓嶅寘鎷� reqVO 鑷韩
         CrmContractDO contract = contractService.validateContract(reqVO.getContractId());
+        // 缁熻鍙e緞锛氳崏绋� + 瀹℃壒涓� + 瀹℃壒閫氳繃锛堜笌寮�绁ㄧ骇鏍¢獙銆佺粺璁℃柟娉� selectReceivablePriceMapByContractId 淇濇寔涓�鑷达級
         List<CrmReceivableDO> receivables = receivableMapper.selectListByContractIdAndStatus(reqVO.getContractId(),
-                Arrays.asList(CrmAuditStatusEnum.APPROVE.getStatus(), CrmAuditStatusEnum.PROCESS.getStatus()));
+                Arrays.asList(CrmAuditStatusEnum.DRAFT.getStatus(), CrmAuditStatusEnum.PROCESS.getStatus(),
+                        CrmAuditStatusEnum.APPROVE.getStatus()));
         if (reqVO.getId() != null) {
             receivables.removeIf(receivable -> ObjectUtil.equal(receivable.getId(), reqVO.getId()));
         }
@@ -142,33 +147,52 @@
     }
 
     /**
-     * 鏍¢獙绱鍥炴閲戦涓嶈秴杩囩疮璁″凡寮�绁ㄤ笖宸蹭笂浼犲彂绁ㄩ檮浠剁殑閲戦锛堝厛寮�绁ㄥ悗鍥炴锛�
+     * 鏍¢獙鍏宠仈寮�绁ㄥ悎鏍硷細瀛樺湪銆佸鎵归�氳繃銆佸凡涓婁紶鍙戠エ闄勪欢銆佷笌鎵�閫夊悎鍚屼竴鑷�
      */
-    private void validateReceivablePriceExceedsInvoiceLimit(CrmReceivableSaveReqVO reqVO) {
-        // 1. 璁$畻鍚堝悓绱鍥炴閲戦锛堜笉鍚湰娆★紝缁熻鍙e緞鍚屽悎鍚岄噾棰濇牎楠岋細瀹℃壒閫氳繃 + 瀹℃壒涓級
-        List<CrmReceivableDO> receivables = receivableMapper.selectListByContractIdAndStatus(reqVO.getContractId(),
-                Arrays.asList(CrmAuditStatusEnum.APPROVE.getStatus(), CrmAuditStatusEnum.PROCESS.getStatus()));
+    private void validateInvoiceForReceivable(CrmReceivableSaveReqVO reqVO) {
+        // 1. 鏍¢獙寮�绁ㄥ瓨鍦�
+        CrmInvoiceDO invoice = invoiceService.getInvoice(reqVO.getInvoiceId());
+        if (invoice == null) {
+            throw exception(RECEIVABLE_CREATE_FAIL_INVOICE_NOT_EXISTS);
+        }
+        // 2. 鏍¢獙寮�绁ㄥ鎵归�氳繃
+        if (ObjectUtil.notEqual(invoice.getAuditStatus(), CrmAuditStatusEnum.APPROVE.getStatus())) {
+            throw exception(RECEIVABLE_CREATE_FAIL_INVOICE_NOT_APPROVE);
+        }
+        // 3. 鏍¢獙寮�绁ㄥ凡涓婁紶鍙戠エ闄勪欢
+        if (CollUtil.isEmpty(storageAttachmentApi.listAttachments(
+                StorageRecordTypeEnum.CRM_INVOICE.getType(), invoice.getId()))) {
+            throw exception(RECEIVABLE_CREATE_FAIL_INVOICE_NOT_ATTACHMENT);
+        }
+        // 4. 鏍¢獙寮�绁ㄤ笌鎵�閫夊悎鍚屼竴鑷�
+        if (ObjectUtil.notEqual(invoice.getContractId(), reqVO.getContractId())) {
+            throw exception(RECEIVABLE_CREATE_FAIL_INVOICE_CONTRACT_MISMATCH);
+        }
+        // 5. 鏍¢獙寮�绁ㄤ笌鎵�閫夊悎鍚屽鎴蜂竴鑷达紙闃插尽鑴忔暟鎹細鍚堝悓-寮�绁�-鍥炴涓�瀵瑰瀵瑰锛屽紑绁ㄥ繀椤诲睘浜庤鍚堝悓瀹㈡埛锛�
+        if (reqVO.getCustomerId() != null && ObjectUtil.notEqual(invoice.getCustomerId(), reqVO.getCustomerId())) {
+            throw exception(RECEIVABLE_CREATE_FAIL_INVOICE_CONTRACT_MISMATCH);
+        }
+    }
+
+    /**
+     * 鏍¢獙绱鍥炴閲戦涓嶈秴杩囪寮�绁ㄥ墿浣欏彲鍥炴閲戦锛堝厛寮�绁ㄥ悗鍥炴锛�
+     */
+    private void validateReceivablePriceExceedsInvoiceRemaining(CrmReceivableSaveReqVO reqVO) {
+        // 1. 璁$畻璇ュ紑绁ㄧ疮璁″洖娆鹃噾棰濓紙涓嶅惈鏈锛岀粺璁″彛寰勫悓鍚堝悓閲戦鏍¢獙锛氳崏绋� + 瀹℃壒涓� + 瀹℃壒閫氳繃锛�
+        CrmInvoiceDO invoice = invoiceService.getInvoice(reqVO.getInvoiceId());
+        List<CrmReceivableDO> receivables = receivableMapper.selectListByInvoiceIdAndStatus(reqVO.getInvoiceId(),
+                Arrays.asList(CrmAuditStatusEnum.DRAFT.getStatus(), CrmAuditStatusEnum.PROCESS.getStatus(),
+                        CrmAuditStatusEnum.APPROVE.getStatus()));
         if (reqVO.getId() != null) {
             receivables.removeIf(receivable -> ObjectUtil.equal(receivable.getId(), reqVO.getId()));
         }
         BigDecimal receivablePriceSum = CollectionUtils.getSumValue(receivables, CrmReceivableDO::getPrice,
                 BigDecimal::add, BigDecimal.ZERO);
 
-        // 2. 璁$畻鍚堝悓涓嬨�屽鎵归�氳繃涓斿凡涓婁紶鍙戠エ闄勪欢銆嶇殑绱寮�绁ㄩ噾棰�
-        List<CrmInvoiceDO> invoices = invoiceService.getInvoiceListByContractIdAndStatus(reqVO.getContractId(),
-                List.of(CrmAuditStatusEnum.APPROVE.getStatus()));
-        BigDecimal invoicePriceSum = BigDecimal.ZERO;
-        for (CrmInvoiceDO invoice : invoices) {
-            if (CollUtil.isNotEmpty(storageAttachmentApi.listAttachments(
-                    StorageRecordTypeEnum.CRM_INVOICE.getType(), invoice.getId()))) {
-                invoicePriceSum = invoicePriceSum.add(invoice.getPrice());
-            }
-        }
-
-        // 3. 鏍¢獙鏈鍥炴閲戦涓嶈秴杩囧墿浣欏彲鍥炴閲戦锛堝凡寮�绁ㄩ噾棰� - 宸插洖娆鹃噾棰濓級
-        BigDecimal availablePrice = invoicePriceSum.subtract(receivablePriceSum);
+        // 2. 鏍¢獙鏈鍥炴閲戦涓嶈秴杩囪寮�绁ㄥ墿浣欏彲鍥炴閲戦锛堝紑绁ㄩ噾棰� - 宸插洖娆鹃噾棰濓級
+        BigDecimal availablePrice = invoice.getPrice().subtract(receivablePriceSum);
         if (reqVO.getPrice().compareTo(availablePrice) > 0) {
-            throw exception(RECEIVABLE_CREATE_FAIL_INVOICE_NOT_ENOUGH, availablePrice);
+            throw exception(RECEIVABLE_CREATE_FAIL_INVOICE_PRICE_EXCEEDS, availablePrice);
         }
     }
 
@@ -201,19 +225,25 @@
     @CrmPermission(bizType = CrmBizTypeEnum.CRM_RECEIVABLE, bizId = "#updateReqVO.id", level = CrmPermissionLevelEnum.WRITE)
     public void updateReceivable(CrmReceivableSaveReqVO updateReqVO) {
         Assert.notNull(updateReqVO.getId(), "鍥炴缂栧彿涓嶈兘涓虹┖");
-        updateReqVO.setOwnerUserId(null).setCustomerId(null).setContractId(null).setPlanId(null); // 涓嶅厑璁镐慨鏀圭殑瀛楁
+        updateReqVO.setOwnerUserId(null).setCustomerId(null).setContractId(null).setPlanId(null); // 涓嶅厑璁镐慨鏀圭殑瀛楁锛坕nvoiceId 鍏佽淇敼锛�
         // 1.1 鏍¢獙瀛樺湪
         CrmReceivableDO oldReceivable = validateReceivableExists(updateReqVO.getId());
         updateReqVO.setOwnerUserId(oldReceivable.getOwnerUserId()).setCustomerId(oldReceivable.getCustomerId())
                 .setContractId(oldReceivable.getContractId()).setPlanId(oldReceivable.getPlanId()); // 璁剧疆宸插瓨鍦ㄧ殑鍊�
-        // 1.2 鏍¢獙鍙洖娆鹃噾棰濊秴杩囦笂闄�
+        // 1.2 鑻ユ湭浼犻�掑叧鑱斿紑绁紝娌跨敤鏃у��
+        if (updateReqVO.getInvoiceId() == null) {
+            updateReqVO.setInvoiceId(oldReceivable.getInvoiceId());
+        }
+        // 1.3 鏍¢獙鍙洖娆鹃噾棰濅笉瓒呰繃鍚堝悓鍓╀綑鍙洖娆鹃噾棰�
         validateReceivablePriceExceedsLimit(updateReqVO);
-        // 1.3 鏍¢獙鍙洖娆鹃噾棰濅笉瓒呰繃绱宸插紑绁ㄩ噾棰濓紙鍏堝紑绁ㄥ悗鍥炴锛�
-        validateReceivablePriceExceedsInvoiceLimit(updateReqVO);
+        // 1.4 鏍¢獙鍏宠仈寮�绁ㄥ悎鏍�
+        validateInvoiceForReceivable(updateReqVO);
+        // 1.5 鏍¢獙鍙洖娆鹃噾棰濅笉瓒呰繃璇ュ紑绁ㄥ墿浣欏彲鍥炴閲戦
+        validateReceivablePriceExceedsInvoiceRemaining(updateReqVO);
 
-        // 1.4 鍙湁鑽夌銆佸鎵逛腑锛屽彲浠ョ紪杈戯紱
-        if (!ObjectUtils.equalsAny(oldReceivable.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus(),
-                CrmAuditStatusEnum.PROCESS.getStatus())) {
+        // 1.6 鍙湁鑽夌鎴栭┏鍥炲悗鍙互缂栬緫
+        if (ObjectUtil.notEqual(oldReceivable.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus())
+                && ObjectUtil.notEqual(oldReceivable.getAuditStatus(), CrmAuditStatusEnum.REJECT.getStatus())) {
             throw exception(RECEIVABLE_UPDATE_FAIL_EDITING_PROHIBITED);
         }
 
@@ -237,19 +267,50 @@
     }
 
     @Override
-    public void updateReceivableAuditStatus(Long id, Integer bpmResult) {
-        // 1.1 鏍¢獙瀛樺湪
+    @Transactional(rollbackFor = Exception.class)
+    @CrmPermission(bizType = CrmBizTypeEnum.CRM_RECEIVABLE, bizId = "#id", level = CrmPermissionLevelEnum.WRITE)
+    public void submitReceivable(Long id) {
         CrmReceivableDO receivable = validateReceivableExists(id);
-        // 1.2 鍙湁瀹℃壒涓紝鍙互鏇存柊瀹℃壒缁撴灉
-        if (ObjUtil.notEqual(receivable.getAuditStatus(), CrmAuditStatusEnum.PROCESS.getStatus())) {
-            log.error("[updateReceivableAuditStatus][receivable({}) 涓嶅浜庡鎵逛腑锛屾棤娉曟洿鏂板鎵圭粨鏋�({})]",
-                    receivable.getId(), bpmResult);
-            throw exception(RECEIVABLE_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS);
+        if (ObjectUtil.notEqual(receivable.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus())
+                && ObjectUtil.notEqual(receivable.getAuditStatus(), CrmAuditStatusEnum.REJECT.getStatus())) {
+            throw exception(RECEIVABLE_SUBMIT_FAIL_NOT_DRAFT);
         }
+        // 鑽夌鏈熷彲鑳藉凡浜х敓鍏朵粬鍥炴锛屾彁浜ゆ椂閲嶆柊鏍¢獙鍚堝悓鍙婂紑绁ㄩ搴︺��
+        CrmReceivableSaveReqVO req = new CrmReceivableSaveReqVO().setId(id)
+                .setContractId(receivable.getContractId()).setInvoiceId(receivable.getInvoiceId())
+                .setCustomerId(receivable.getCustomerId()).setPrice(receivable.getPrice());
+        validateInvoiceForReceivable(req);
+        validateReceivablePriceExceedsLimit(req);
+        validateReceivablePriceExceedsInvoiceRemaining(req);
+        approvalConfigApi.validateApprovalEnabledAndGetApprovers(RECEIVABLE_APPROVE_BIZ_TYPE);
+        int updateCount = receivableMapper.updateByIdAndStatus(id, receivable.getAuditStatus(),
+                new CrmReceivableDO().setAuditStatus(CrmAuditStatusEnum.PROCESS.getStatus()));
+        if (updateCount == 0) {
+            throw exception(RECEIVABLE_SUBMIT_FAIL_NOT_DRAFT);
+        }
+        String processInstanceId = bpmProcessInstanceApi.createProcessInstance(getLoginUserId(),
+                new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(RECEIVABLE_PROCESS_KEY)
+                        .setBusinessKey(String.valueOf(id)));
+        receivableMapper.updateById(new CrmReceivableDO().setId(id).setProcessInstanceId(processInstanceId));
+    }
 
-        // 2. 鏇存柊鍥炴瀹℃壒鐘舵��
-        Integer auditStatus = convertBpmResultToAuditStatus(bpmResult);
-        receivableMapper.updateById(new CrmReceivableDO().setId(id).setAuditStatus(auditStatus));
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateReceivableAuditStatus(Long id, Integer bpmStatus) {
+        Integer auditStatus;
+        if (BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmStatus)) {
+            auditStatus = CrmAuditStatusEnum.APPROVE.getStatus();
+        } else if (BpmTaskStatusEnum.REJECT.getStatus().equals(bpmStatus)) {
+            auditStatus = CrmAuditStatusEnum.REJECT.getStatus();
+        } else if (BpmTaskStatusEnum.CANCEL.getStatus().equals(bpmStatus)) {
+            auditStatus = CrmAuditStatusEnum.CANCEL.getStatus();
+        } else {
+            return;
+        }
+        if (receivableMapper.updateByIdAndStatus(id, CrmAuditStatusEnum.PROCESS.getStatus(),
+                new CrmReceivableDO().setAuditStatus(auditStatus)) != 1) {
+            log.warn("[updateReceivableAuditStatus] 鍥炴({}) 宸蹭笉澶勪簬瀹℃壒涓紝蹇界暐 BPM 鐘舵��({})", id, bpmStatus);
+        }
     }
 
     @Override
@@ -264,8 +325,9 @@
         if (receivable.getPlanId() != null && receivablePlanService.getReceivablePlan(receivable.getPlanId()) != null) {
             throw exception(RECEIVABLE_DELETE_FAIL);
         }
-        // 1.3 瀹℃壒閫氳繃鏃讹紝涓嶅厑璁稿垹闄�
-        if (ObjUtil.equal(receivable.getAuditStatus(), CrmAuditStatusEnum.APPROVE.getStatus())) {
+        // 瀹℃壒涓�佸鏍搁�氳繃涓嶅彲鍒犻櫎
+        if (ObjUtil.equal(receivable.getAuditStatus(), CrmAuditStatusEnum.APPROVE.getStatus())
+                || ObjUtil.equal(receivable.getAuditStatus(), CrmAuditStatusEnum.PROCESS.getStatus())) {
             throw exception(RECEIVABLE_DELETE_FAIL_IS_APPROVE);
         }
 
@@ -277,29 +339,6 @@
         // 3. 璁板綍鎿嶄綔鏃ュ織涓婁笅鏂�
         LogRecordContext.putVariable("receivable", receivable);
         LogRecordContext.putVariable("period", getReceivablePeriod(receivable.getPlanId()));
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    @LogRecord(type = CRM_RECEIVABLE_TYPE, subType = CRM_RECEIVABLE_SUBMIT_SUB_TYPE, bizNo = "{{#id}}",
-            success = CRM_RECEIVABLE_SUBMIT_SUCCESS)
-    public void submitReceivable(Long id, Long userId) {
-        // 1. 鏍¢獙鍥炴鏄惁鍦ㄥ鎵�
-        CrmReceivableDO receivable = validateReceivableExists(id);
-        if (ObjUtil.notEqual(receivable.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus())) {
-            throw exception(RECEIVABLE_SUBMIT_FAIL_NOT_DRAFT);
-        }
-
-        // 2. 鍒涘缓鍥炴瀹℃壒娴佺▼瀹炰緥
-        String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO()
-                .setProcessDefinitionKey(BPM_PROCESS_DEFINITION_KEY).setBusinessKey(String.valueOf(id)));
-
-        // 3. 鏇存柊鍥炴宸ヤ綔娴佺紪鍙�
-        receivableMapper.updateById(new CrmReceivableDO().setId(id).setProcessInstanceId(processInstanceId)
-                .setAuditStatus(CrmAuditStatusEnum.PROCESS.getStatus()));
-
-        // 4. 璁板綍鏃ュ織
-        LogRecordContext.putVariable("receivableNo", receivable.getNo());
     }
 
     private CrmReceivableDO validateReceivableExists(Long id) {
@@ -346,6 +385,11 @@
     }
 
     @Override
+    public Map<Long, BigDecimal> getReceivablePriceMapByInvoiceId(Collection<Long> invoiceIds) {
+        return receivableMapper.selectReceivablePriceMapByInvoiceId(invoiceIds);
+    }
+
+    @Override
     public Long getReceivableCountByContractId(Long contractId) {
         return receivableMapper.selectCountByContractId(contractId);
     }

--
Gitblit v1.9.3