| | |
| | | @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)); |
| | | } |
| | | |
| | | /** |
| | |
| | | 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) |
| | |
| | | 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)); |
| | | } |
| | |
| | | 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); |
| | |
| | | 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); |
| | | } |
| | | |