package com.sckw.system.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sckw.system.model.KwsEnterprise;
import com.sckw.system.model.pojo.FindEntListPojo;
import com.sckw.system.model.pojo.FindEntUserPojo;
import com.sckw.system.model.pojo.FindManagePojo;
import com.sckw.system.model.pojo.FindPojoParam;
import com.sckw.system.model.vo.req.FindListReqVo;
import com.sckw.system.model.vo.res.EntBaseInfo;
import com.sckw.system.model.vo.res.EntInfo;
import com.sckw.system.model.vo.res.FindEntListResVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 企业信息
 *
 * @author zk
 * @date 2023-06-02
 */
@Mapper
public interface KwsEnterpriseDao extends BaseMapper<KwsEnterprise> {
    /**
     * 新增
     *
     * @param record
     * @return
     */
//    int insert(KwsEnterprise record);

    /**
     * 更新
     *
     * @param record
     * @return
     */
    int update(KwsEnterprise record);

    /**
     * 详情查询
     *
     * @param id
     * @return
     */
    KwsEnterprise selectByKey(Long id);

    /**
     * @param list 主键Ids
     * @return KwsEnterprise
     * @desc: 批量查
     * @author: czh
     * @date: 2023/6/19
     */
    List<KwsEnterprise> selectByKeys(@Param(value = "list") List<Long> list);

    /**
     * @param list 主键Ids
     * @return KwsEnterprise
     * @desc: 批量查
     * @author: czh
     * @date: 2023/6/19
     */
    List<KwsEnterprise> selectAllByKeys(@Param(value = "list") List<Long> list);

    /**
     * @param list 主键Ids
     * @return KwsEnterprise
     * @desc: 批量查
     * @author: czh
     * @date: 2023/6/19
     */
    List<EntInfo> queryEntInfoByKeys(@Param(value = "list") List<Long> list);

    /**
     * 查询
     *
     * @param params
     * @return
     * @throws Exception
     */
    List<KwsEnterprise> findPage(Map<String, Object> params);

    /**
     * 查询
     *
     * @param params
     * @return
     */
    List<FindEntListResVo> findList(FindListReqVo params);

    /**
     * 查询
     *
     * @param params
     * @return
     */
    List<FindEntListPojo> findPojo(@Param(value = "dto") FindPojoParam params);


    /**
     * 查询
     *
     * @param params
     * @return
     */
    List<FindEntListPojo> findPojoAndManager(@Param(value = "dto") FindPojoParam params,@Param(value = "authEntIdList")  List<Long> authEntIdList);

    /**
     * 根据用户查企业信息
     *
     * @param id
     * @return
     */
    KwsEnterprise findByUserId(long id);

    /**
     * @param kwsEnterprise 实体
     * @return int
     * @desc: 审批
     * @author: czh
     * @date: 2023/6/26
     */
    int approval(KwsEnterprise kwsEnterprise);

    /**
     * @param list 企业ids
     * @return FindEntUserPojo
     * @desc: 根据企业id查用户
     * @author: czh
     * @date: 2023/6/28
     */
    List<FindEntUserPojo> findUserByEntIds(List<Long> list);

    /**
     * @param entId 企业id
     * @return FindManagePojo
     * @desc: 查企业的管理员
     * @author: czh
     * @date: 2023/6/29
     */
    FindManagePojo findManageInfoByEntId(Long entId);

    /**
     * @param entId 企业id
     * @return FindManagePojo
     * @desc: 查企业的管理员
     * @author: czh
     * @date: 2023/6/29
     */
    List<FindManagePojo> findManageInfoByEntIds(@Param(value = "list") List<Long> entId);

    /**
     * @param entId 企业id
     * @return FindManagePojo
     * @desc: 认证前查企业的管理员
     * @author: czh
     * @date: 2023/6/29
     */
    List<Long> findManageInfoByEntIdBeforeApproval(Long entId);

    /**
     * @param params 参数
     * @return KwsEnterprise
     * @desc: 企业查询
     * @author: czh
     * @date: 2023/7/10
     */
    List<KwsEnterprise> findEnts(Map<String, Object> params);

    /**
     * @param entName 企业名
     * @return KwsEnterprise
     * @desc: 精确匹配企业名/联系人
     * @author: czh
     * @date: 2023/7/10
     */
    List<KwsEnterprise> checkEntRepeat(@Param(value = "entName") String entName, @Param(value = "phone") String phone);

    /**
     * @param cityCode 区域code  entTypeList 企业类型
     * @return PageResult
     * @desc: 根据区域code和企业类型分页查询企业信息
     * @author: czh
     * @date: 2023/9/1
     */
    List<KwsEnterprise> queryEntInfoByCityCodeAndEntTypesWithPage(@Param(value = "cityCode") Integer cityCode,
                                                                  @Param(value = "entTypeList") List<Integer> entTypeList,
                                                                  @Param(value = "entIdList") List<Long> entIdList,
                                                                  @Param(value = "entName") String entName);

    /**
     * 根据用户id和用户规则id查询企业信息
     * @param userId 用户id
     * @param roleId   规则id
     * @return
     */
    List<Long> findEnterpriseIdsByUserRoleId(@Param("userId") Long userId,@Param("roleId") Long roleId);

    /**
     * 根据用户id和用户规则id查询企业信息
     * @param userId 用户id
     * @param roleIds   规则id
     * @return
     */
    List<Long> findEnterpriseIdsByUserRoleIds(@Param("userId") Long userId,@Param("roleIds") List<Long> roleIds);


    /**
     * 根据用户id和用户规则id查询企业信息
     * @param userIds 用户ids
     * @param roleIds   规则ids
     * @return
     */
    List<Long> findEnterpriseIdsByUserIdAndUserRoleIds(@Param("userIds") List<Long> userIds, @Param("roleIds") List<Long> roleIds);

    /**
     * (客户经理)用户id获取所有关联的企业
     * @param userIds
     * @return
     */
    List<Long> findEnterpriseIdsByUserIds(@Param("userIds") List<Long> userIds);

    /**
     * 获取所有企业
     * @return
     */
    List<KwsEnterprise> findAllEnterprise();

    /**
     * 企业id获取企业信息
     * @param entIds
     * @return
     */
    List<KwsEnterprise> queryEnterpriseByEntIds(@Param("entIds") List<Long> entIds);

    KwsEnterprise findEnterpriseByName(@Param("enterpriseName") String enterpriseName);

    EntInfo query(@Param("entName") String entName);

    List<EntBaseInfo> queryCte(Long entId);
}
