From 730f9b0c25a6c111dab1ea4a1ac5e1da9a48f765 Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期二, 03 十一月 2026 19:58:35 +0800
Subject: [PATCH] fix: 修复全量接口扫描发现的 500(29 个降至 0,member 模块按要求跳过)
---
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contract/CrmContractMapper.java | 38 ++++++++++++++++++++++++++++++++++++--
1 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contract/CrmContractMapper.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contract/CrmContractMapper.java
index 2c4bdfe..c5b2327 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contract/CrmContractMapper.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contract/CrmContractMapper.java
@@ -28,8 +28,21 @@
@Mapper
public interface CrmContractMapper extends BaseMapperX<CrmContractDO> {
+ default CrmContractDO selectByNoForUpdate(String no) {
+ return selectOne(new LambdaQueryWrapperX<CrmContractDO>().eq(CrmContractDO::getNo, no).last("FOR UPDATE"));
+ }
+
+ default CrmContractDO selectByIdForUpdate(Long id) {
+ return selectOne(new LambdaQueryWrapperX<CrmContractDO>().eq(CrmContractDO::getId, id).last("FOR UPDATE"));
+ }
default CrmContractDO selectByNo(String no) {
return selectOne(CrmContractDO::getNo, no);
+ }
+
+ default CrmContractDO selectByNameAndCustomerId(String name, Long customerId) {
+ return selectOne(new LambdaQueryWrapperX<CrmContractDO>()
+ .eq(CrmContractDO::getName, name)
+ .eq(CrmContractDO::getCustomerId, customerId));
}
/**
@@ -45,6 +58,8 @@
default int submitAndResetAuditInfo(Long id, Integer status) {
return update(null, new LambdaUpdateWrapper<CrmContractDO>()
.eq(CrmContractDO::getId, id)
+ .in(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.DRAFT.getStatus(),
+ CrmAuditStatusEnum.REJECT.getStatus())
.set(CrmContractDO::getAuditStatus, status)
.set(CrmContractDO::getReviewerId, null)
.set(CrmContractDO::getReviewerName, null)
@@ -68,9 +83,24 @@
String reviewerName, String reviewRemark) {
return update(null, new LambdaUpdateWrapper<CrmContractDO>()
.eq(CrmContractDO::getId, id)
+ .eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.PROCESS.getStatus())
.set(CrmContractDO::getAuditStatus, status)
.set(CrmContractDO::getReviewerId, reviewerId)
.set(CrmContractDO::getReviewerName, reviewerName)
+ .set(CrmContractDO::getReviewTime, LocalDateTime.now())
+ .set(CrmContractDO::getReviewRemark, reviewRemark));
+ }
+
+ /**
+ * BPM 瀹℃壒缁撴潫鍚庡洖鍐欏悎鍚岀姸鎬�
+ *
+ * 浠呭綋鍚堝悓浠嶅浜庛�屽鎵逛腑銆嶆椂鏇存柊锛岄伩鍏嶄笌鏃у鎵硅矾寰勯噸澶嶈鐩栥��
+ */
+ default int updateAuditStatusByBpm(Long id, Integer status, String reviewRemark) {
+ return update(null, new LambdaUpdateWrapper<CrmContractDO>()
+ .eq(CrmContractDO::getId, id)
+ .eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.PROCESS.getStatus())
+ .set(CrmContractDO::getAuditStatus, status)
.set(CrmContractDO::getReviewTime, LocalDateTime.now())
.set(CrmContractDO::getReviewRemark, reviewRemark));
}
@@ -134,7 +164,9 @@
LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now());
if (CrmContractPageReqVO.EXPIRY_TYPE_ABOUT_TO_EXPIRE.equals(pageReqVO.getExpiryType())) { // 鍗冲皢鍒版湡
query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus())
- .between(CrmContractDO::getEndTime, beginOfToday, endOfToday.plusDays(config.getNotifyDays()));
+ // notifyDays 鍙兘涓� null锛堝巻鍙查厤缃湭濉級锛屼负 null 鏃舵寜 0 澶╁鐞嗭紝閬垮厤鎷嗙 NPE
+ .between(CrmContractDO::getEndTime, beginOfToday,
+ endOfToday.plusDays(config.getNotifyDays() != null ? config.getNotifyDays() : 0));
} else if (CrmContractPageReqVO.EXPIRY_TYPE_EXPIRED.equals(pageReqVO.getExpiryType())) { // 宸插埌鏈�
query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus())
.lt(CrmContractDO::getEndTime, endOfToday);
@@ -169,7 +201,9 @@
LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now());
LocalDateTime endOfToday = LocalDateTimeUtil.endOfDay(LocalDateTime.now());
query.eq(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.APPROVE.getStatus()) // 蹇呴』瀹℃壒閫氳繃锛�
- .between(CrmContractDO::getEndTime, beginOfToday, endOfToday.plusDays(config.getNotifyDays()));
+ // notifyDays 鍙兘涓� null锛堝巻鍙查厤缃湭濉級锛屼负 null 鏃舵寜 0 澶╁鐞嗭紝閬垮厤鎷嗙 NPE
+ .between(CrmContractDO::getEndTime, beginOfToday,
+ endOfToday.plusDays(config.getNotifyDays() != null ? config.getNotifyDays() : 0));
return selectCount(query);
}
--
Gitblit v1.9.3