package com.ruoyi.credit.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.ruoyi.credit.domain.CompanyInfo;

/**
 * 公司信息Mapper接口
 * 
 * @author ruoyi
 * @date 2025-12-17
 */
public interface CompanyInfoMapper 
{
    /**
     * 查询公司信息
     * 
     * @param companyId 公司信息主键
     * @return 公司信息
     */
    public CompanyInfo selectCompanyInfoByCompanyId(Long companyId);

    /**
     * 根据公司名称查询公司信息
     * 
     * @param companyName 公司名称
     * @return 公司信息
     */
    public CompanyInfo selectCompanyInfoByCompanyName(String companyName);

    /**
     * 根据统一社会信用代码查询公司信息
     * 
     * @param creditCode 统一社会信用代码
     * @return 公司信息
     */
    public CompanyInfo selectCompanyInfoByCreditCode(String creditCode);

    /**
     * 查询公司信息列表
     * 
     * @param companyInfo 公司信息
     * @return 公司信息集合
     */
    public List<CompanyInfo> selectCompanyInfoList(CompanyInfo companyInfo);

    /**
     * 根据公司类型查询公司列表
     * 
     * @param companyType 公司类型
     * @return 公司信息集合
     */
    public List<CompanyInfo> selectCompanyInfoByType(String companyType);

    /**
     * 根据公司状态查询公司列表
     * 
     * @param companyStatus 公司状态
     * @return 公司信息集合
     */
    public List<CompanyInfo> selectCompanyInfoByStatus(String companyStatus);

    /**
     * 根据信用等级查询公司列表
     * 
     * @param creditRating 信用等级
     * @return 公司信息集合
     */
    public List<CompanyInfo> selectCompanyInfoByCreditRating(String creditRating);

    /**
     * 统计公司数量按类型分组
     * 
     * @return 统计结果
     */
    public List<java.util.Map<String, Object>> selectCompanyCountByType();

    /**
     * 统计公司数量按状态分组
     * 
     * @return 统计结果
     */
    public List<java.util.Map<String, Object>> selectCompanyCountByStatus();

    /**
     * 新增公司信息
     * 
     * @param companyInfo 公司信息
     * @return 结果
     */
    public int insertCompanyInfo(CompanyInfo companyInfo);

    /**
     * 修改公司信息
     * 
     * @param companyInfo 公司信息
     * @return 结果
     */
    public int updateCompanyInfo(CompanyInfo companyInfo);

    /**
     * 更新公司状态
     * 
     * @param companyId 公司ID
     * @param companyStatus 公司状态
     * @return 结果
     */
    public int updateCompanyStatus(@Param("companyId") Long companyId, @Param("companyStatus") String companyStatus);

    /**
     * 更新信用等级
     * 
     * @param companyId 公司ID
     * @param creditRating 信用等级
     * @return 结果
     */
    public int updateCreditRating(@Param("companyId") Long companyId, @Param("creditRating") String creditRating);

    /**
     * 删除公司信息
     * 
     * @param companyId 公司信息主键
     * @return 结果
     */
    public int deleteCompanyInfoByCompanyId(Long companyId);

    /**
     * 批量删除公司信息
     * 
     * @param companyIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteCompanyInfoByCompanyIds(Long[] companyIds);

    /**
     * 校验公司名称是否唯一
     * 
     * @param companyName 公司名称
     * @return 结果
     */
    public CompanyInfo checkCompanyNameUnique(String companyName);

    /**
     * 校验统一社会信用代码是否唯一
     * 
     * @param creditCode 统一社会信用代码
     * @return 结果
     */
    public CompanyInfo checkCreditCodeUnique(String creditCode);
}