package com.ruoyi.security.service;

import java.math.BigDecimal;
import java.util.List;
import com.ruoyi.security.domain.RiskEvent;
import com.ruoyi.security.domain.RiskEventTracking;
import com.ruoyi.security.domain.DataConsistencyCheck;

/**
 * 风险监控服务接口
 * 
 * @author ruoyi
 * @date 2025-12-22
 */
public interface IRiskMonitorService
{
    /**
     * 检查合同金额与服务确认单金额一致性
     * 
     * @param contractId 合同ID
     * @param serviceConfirmationId 服务确认单ID
     * @return 检查结果
     */
    public DataConsistencyCheck checkContractAmountConsistency(Long contractId, Long serviceConfirmationId);

    /**
     * 检查服务确认单与发票金额一致性
     * 
     * @param serviceConfirmationId 服务确认单ID
     * @param invoiceId 发票ID
     * @return 检查结果
     */
    public DataConsistencyCheck checkInvoiceAmountConsistency(Long serviceConfirmationId, Long invoiceId);

    /**
     * 验证开票方与收票方主体信息
     * 
     * @param invoiceParty 开票方信息
     * @param contractParty 收票方信息
     * @return 验证结果
     */
    public DataConsistencyCheck validatePartyInformation(String invoiceParty, String contractParty);

    /**
     * 检查服务期限与实际服务周期一致性
     * 
     * @param contractId 合同ID
     * @param actualServicePeriods 实际服务周期信息
     * @return 检查结果
     */
    public DataConsistencyCheck checkServicePeriodConsistency(Long contractId, String actualServicePeriods);

    /**
     * 验证融资申请数据一致性
     * 
     * @param applicationId 融资申请ID
     * @return 验证结果
     */
    public DataConsistencyCheck validateFinancingDataConsistency(Long applicationId);

    /**
     * 生成风险评估报告
     * 
     * @param applicationId 融资申请ID
     * @return 风险评估报告
     */
    public String generateRiskAssessmentReport(Long applicationId);

    /**
     * 记录数据异常
     * 
     * @param anomalyInfo 异常信息
     * @return 风险事件
     */
    public RiskEvent recordDataAnomaly(String anomalyInfo);

    /**
     * 建立风险事件跟踪
     * 
     * @param riskEventId 风险事件ID
     * @return 跟踪记录
     */
    public RiskEventTracking createRiskEventTracking(Long riskEventId);

    /**
     * 按用户角色发送风险提示
     * 
     * @param riskEvent 风险事件
     * @param userRole 用户角色
     * @return 发送结果
     */
    public boolean sendRiskAlert(RiskEvent riskEvent, String userRole);

    /**
     * 数据修正后重新验证
     * 
     * @param dataId 数据ID
     * @param correctionInfo 修正信息
     * @return 验证结果
     */
    public DataConsistencyCheck revalidateAfterCorrection(Long dataId, String correctionInfo);

    /**
     * 更新风险状态
     * 
     * @param riskEventId 风险事件ID
     * @param newStatus 新状态
     * @return 更新结果
     */
    public boolean updateRiskStatus(Long riskEventId, String newStatus);

    /**
     * 查询风险事件列表
     * 
     * @param riskEvent 风险事件查询条件
     * @return 风险事件列表
     */
    public List<RiskEvent> selectRiskEventList(RiskEvent riskEvent);

    /**
     * 查询风险事件跟踪列表
     * 
     * @param eventId 风险事件ID
     * @return 跟踪记录列表
     */
    public List<RiskEventTracking> selectRiskEventTrackingList(Long eventId);

    /**
     * 查询数据一致性检查记录列表
     * 
     * @param dataConsistencyCheck 查询条件
     * @return 检查记录列表
     */
    public List<DataConsistencyCheck> selectDataConsistencyCheckList(DataConsistencyCheck dataConsistencyCheck);
}