package com.ruoyi.credit.service;

import com.ruoyi.credit.domain.ServicePeriodLoan;

/**
 * 部门数据一致性验证服务接口
 * 
 * 提供关联数据的部门一致性验证功能，确保服务周期与合同、员工与服务周期、
 * 债权与合同等关联数据都属于同一个部门。
 * 
 * @author ruoyi
 * @date 2025-01-12
 */
public interface IDepartmentDataConsistencyService
{
    /**
     * 验证服务周期与合同的部门一致性
     * 
     * @param contractId 合同ID
     * @param servicePeriodId 服务周期ID
     * @return 验证结果
     */
    boolean validateServicePeriodContractConsistency(Long contractId, Long servicePeriodId);

    /**
     * 验证员工与服务周期的部门一致性
     * 
     * @param employeeId 员工ID
     * @param servicePeriodId 服务周期ID
     * @return 验证结果
     */
    boolean validateEmployeeServicePeriodConsistency(Long employeeId, Long servicePeriodId);

    /**
     * 验证债权与合同的部门一致性
     * 
     * @param contractId 合同ID
     * @param creditId 债权ID
     * @return 验证结果
     */
    boolean validateCreditContractConsistency(Long contractId, Long creditId);

    /**
     * 批量验证服务周期员工的部门一致性
     * 
     * @param servicePeriodId 服务周期ID
     * @return 验证结果
     */
    boolean validateAllEmployeesInServicePeriod(Long servicePeriodId);

    /**
     * 验证服务周期贷款的完整部门一致性
     * 
     * @param servicePeriodLoan 服务周期贷款对象
     * @return 验证结果
     */
    boolean validateServicePeriodLoanConsistency(ServicePeriodLoan servicePeriodLoan);

    /**
     * 验证合同相关的所有数据部门一致性
     * 
     * @param contractId 合同ID
     * @return 验证结果
     */
    boolean validateContractRelatedDataConsistency(Long contractId);

    /**
     * 修复数据部门不一致问题
     * 
     * @param tableName 表名
     * @param recordId 记录ID
     * @param targetDeptId 目标部门ID
     * @return 修复结果
     */
    boolean fixDepartmentInconsistency(String tableName, Long recordId, Long targetDeptId);
}