package com.njcn.rdms.module.project.service.duealert;

import java.time.LocalDate;

/**
 * 告警发送服务：插去重记录 + publish 站内信事件。
 *
 * <p>独立于扫描编排的 bean——@Transactional 必须跨 bean 调用才走代理，
 * 同 bean 自调用会绕过事务，导致 NotifySendEvent 静默不发（事务红线）。</p>
 */
public interface DueAlertSendService {

    /**
     * 发送一条告警。插入去重记录与事件发布在同一事务内；
     * 撞唯一索引（并发/多实例/重复执行）静默跳过不发。
     *
     * @param candidate 待告警对象（接收人已组装好）
     * @param alertType DueAlertConstants.ALERT_TYPE_APPROACHING / ALERT_TYPE_OVERDUE
     * @param today     扫描日（写入 alert_date；临期档同时用于算剩余天数）
     */
    void sendAlert(DueAlertCandidate candidate, String alertType, LocalDate today);

}
