From 4bc513be11e671caf20ec6013a51dee42c2ed96e Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期六, 07 十一月 2026 18:31:26 +0800
Subject: [PATCH] fix(crm): 禁止物料类合同开票
---
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java | 35 +++++++++++++++++++++++++++++++----
1 files changed, 31 insertions(+), 4 deletions(-)
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java
index 433648b..3ce231e 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java
@@ -6,13 +6,13 @@
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.receivable.CrmReceivablePageReqVO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO;
import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO;
import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum;
import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum;
import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.ibatis.annotations.Mapper;
import java.math.BigDecimal;
@@ -35,10 +35,15 @@
return selectOne(CrmReceivableDO::getNo, no);
}
+ default int updateByIdAndStatus(Long id, Integer status, CrmReceivableDO updateObj) {
+ return update(updateObj, new LambdaUpdateWrapper<CrmReceivableDO>()
+ .eq(CrmReceivableDO::getId, id).eq(CrmReceivableDO::getAuditStatus, status));
+ }
+
default PageResult<CrmReceivableDO> selectPageByCustomerId(CrmReceivablePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<CrmReceivableDO>()
.eq(CrmReceivableDO::getCustomerId, reqVO.getCustomerId()) // 蹇呴』浼犻��
- .eqIfPresent(CrmReceivableDO::getNo, reqVO.getNo())
+ .likeIfPresent(CrmReceivableDO::getNo, reqVO.getNo())
.eqIfPresent(CrmReceivableDO::getContractId, reqVO.getContractId())
.eqIfPresent(CrmReceivableDO::getPlanId, reqVO.getPlanId())
.orderByDesc(CrmReceivableDO::getId));
@@ -51,7 +56,8 @@
CrmReceivableDO::getId, userId, pageReqVO.getSceneType());
// 鎷兼帴鑷韩鐨勬煡璇㈡潯浠�
query.selectAll(CrmReceivableDO.class)
- .eqIfPresent(CrmReceivableDO::getNo, pageReqVO.getNo())
+ .likeIfPresent(CrmReceivableDO::getNo, pageReqVO.getNo())
+ .eqIfPresent(CrmReceivableDO::getCustomerId, pageReqVO.getCustomerId())
.eqIfPresent(CrmReceivableDO::getPlanId, pageReqVO.getPlanId())
.eqIfPresent(CrmReceivableDO::getContractId, pageReqVO.getContractId())
.eqIfPresent(CrmReceivableDO::getAuditStatus, pageReqVO.getAuditStatus())
@@ -65,7 +71,7 @@
CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(),
CrmReceivableDO::getId, userId, CrmSceneTypeEnum.OWNER.getType());
// 鏈鏍�
- query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.PROCESS.getStatus());
+ query.eq(CrmReceivableDO::getAuditStatus, CrmAuditStatusEnum.PROCESS.getStatus());
return selectCount(query);
}
@@ -75,6 +81,27 @@
.in(CrmReceivableDO::getAuditStatus, auditStatuses));
}
+ default List<CrmReceivableDO> selectListByInvoiceIdAndStatus(Long invoiceId, Collection<Integer> auditStatuses) {
+ return selectList(new LambdaQueryWrapperX<CrmReceivableDO>()
+ .eq(CrmReceivableDO::getInvoiceId, invoiceId)
+ .in(CrmReceivableDO::getAuditStatus, auditStatuses));
+ }
+
+ default Map<Long, BigDecimal> selectReceivablePriceMapByInvoiceId(Collection<Long> invoiceIds) {
+ if (CollUtil.isEmpty(invoiceIds)) {
+ return Collections.emptyMap();
+ }
+ // SQL sum 鏌ヨ
+ List<Map<String, Object>> result = selectMaps(new QueryWrapper<CrmReceivableDO>()
+ .select("invoice_id, SUM(price) AS total_price")
+ .in("audit_status", CrmAuditStatusEnum.DRAFT.getStatus(), // 鑽夌 + 瀹℃壒涓� + 瀹℃壒閫氳繃
+ CrmAuditStatusEnum.PROCESS.getStatus(), CrmAuditStatusEnum.APPROVE.getStatus())
+ .groupBy("invoice_id")
+ .in("invoice_id", invoiceIds));
+ // 鑾峰緱閲戦
+ return convertMap(result, obj -> (Long) obj.get("invoice_id"), obj -> (BigDecimal) obj.get("total_price"));
+ }
+
default Map<Long, BigDecimal> selectReceivablePriceMapByContractId(Collection<Long> contractIds) {
if (CollUtil.isEmpty(contractIds)) {
return Collections.emptyMap();
--
Gitblit v1.9.3