xiaoyi
8 天以前 730f9b0c25a6c111dab1ea4a1ac5e1da9a48f765
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);
    }