package com.engine.organization.mapper.job;

import com.engine.organization.entity.hrmresource.po.ResourcePO;
import com.engine.organization.entity.job.dto.JobListDTO;
import com.engine.organization.entity.job.po.JobPO;
import org.apache.ibatis.annotations.Param;

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

/**
 * @description:
 * @author:dxfeng
 * @createTime: 2022/05/24
 * @version: 1.0
 */
public interface JobMapper {

    /**
     * 根据搜索条件查询数据
     *
     * @return
     */
    List<JobListDTO> listByFilter(@Param("jobPO") JobPO jobPO, @Param("orderSql") String orderSql);

    /**
     * 展示所有列表数据
     *
     * @return
     */
    List<JobListDTO> listNoFilter(@Param("orderSql") String orderSql);

    /**
     * 根据搜索条件查询数据
     *
     * @param jobPO
     * @return
     */
    List<JobPO> listPOsByFilter(@Param("jobPO") JobPO jobPO);

    /**
     * 查询所有数据
     *
     * @return
     */
    List<JobPO> listAll();

    /**
     * 根据ID查询元素
     *
     * @param id
     * @return
     */
    JobPO getJobById(@Param("id") Long id);

    List<JobPO> getJobsByIds(@Param("ids") Collection<Long> ids);

    /**
     * 根据父ID查询元素
     *
     * @param pid
     * @return
     */
    List<JobPO> getJobsByPid(@Param("pid") Long pid);

    /**
     * 浏览按钮展示数据用
     *
     * @param ids
     * @return
     */
    List<Map<String, Object>> listJobsByIds(@Param("ids") Collection<Long> ids);

    /**
     * 根据编号查询数据
     *
     * @param jobNo
     * @return
     */
    List<JobPO> listByNo(@Param("jobNo") String jobNo);


    /**
     * 根据所属部门查询数据
     *
     * @param departmentId
     * @return
     */
    List<JobPO> listJobsByDepartmentId(@Param("departmentId") long departmentId);

    /**
     * 添加数据
     *
     * @param jobPO
     * @return
     */
    int insertIgnoreNull(JobPO jobPO);


    /**
     * 更新主表内容
     *
     * @param jobPO
     * @return
     */
    int updateBaseJob(JobPO jobPO);

    /**
     * 更新禁用标识
     *
     * @param id
     * @param forbiddenTag
     * @return
     */
    int updateForbiddenTagById(@Param("id") long id, @Param("forbiddenTag") int forbiddenTag);

    /**
     * 批量删除
     *
     * @param ids
     */
    int deleteByIds(@Param("ids") Collection<Long> ids);

    /**
     * 获取最大排序
     *
     * @return
     */
    Integer getMaxShowOrder();

    /**
     * 根据名字和上级查询岗位信息
     *
     * @param jobName
     * @param parentCompany
     * @param parentDepartment
     * @param parentJob
     * @return
     */
    Long getIdByNameAndPid(@Param("jobName") String jobName, @Param("parentCompany") Integer parentCompany, @Param("parentDepartment") Integer parentDepartment, @Param("parentJob") Long parentJob);

    int updateJobCompany(@Param("ids") Collection<Long> ids, @Param("parentCompany") Integer parentCompany, @Param("ecCompany") Integer ecCompany);

    int selectByConditions(@Param("resourcePO") ResourcePO resourcePO);

    List<String> listUsedId();

    List<String> isAllowDelete(@Param("jobId") Long jobId);

    JobPO getJobByResource(@Param("resourcePO") ResourcePO resourcePO);
}
