package com.bonus.material.common.mapper;

import com.bonus.common.biz.domain.ProjectTreeNode;
import com.bonus.common.biz.domain.TreeNode;
import com.bonus.common.biz.domain.TypeTreeNode;
import com.bonus.material.back.domain.BackApplyInfo;
import com.bonus.material.basic.domain.BmProject;
import com.bonus.material.basic.domain.BmUnit;
import com.bonus.material.clz.domain.lease.MaterialLeaseApplyInfo;
import com.bonus.material.common.domain.dto.SelectDto;
import com.bonus.material.common.domain.vo.AgreementVo;
import com.bonus.material.common.domain.vo.SelectVo;
import com.bonus.material.materialStation.domain.ProAuthorizeInfo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;

/**
 * @author 10488
 * 统一下拉选
 */
@Repository("SelectMapper")
public interface SelectMapper {
    /**
     * 往来单位下拉选
     * @param bmUnit
     * @return List<BmUnit>
     * @description 往来单位
     * @author cwchen
     * @date 2023/12/20 14:23
     */
    List<ProjectTreeNode> getUnitList(BmUnit bmUnit);

    /**
     * 工程下拉选
     * @param bmProject
     * @return List<BmProject>
     * @description 工程
     * @author cwchen
     * @date 2023/12/20 15:05
     */
    List<ProjectTreeNode> getProjectList(BmProject bmProject);

    /**
     * 机具类型下拉选
     * @param dto
     * @return List<SelectVo>
     * @description 机具类型
     * @author cwchen
     * @date 2023/12/20 16:02
     */
    List<SelectVo> getMaTypeData(SelectDto dto);


    /**
     * 设备类型树
     * @param dto
     * @return List<TreeNode>
     * @description 设备类型树
     * @author cwchen
     * @date 2023/12/20 18:15
     */
    List<TreeNode> getDeviceTypeTree(SelectDto dto);

    List<TreeNode> getBackDeviceTypeTree(SelectDto dto);

    /**
     * 资产属性
     * @param dto
     * @return List<SelectVo>
     * @description 资产属性
     * @author cwchen
     * @date 2023/12/20 19:48
     */
    List<SelectVo> getAssetAttributesCbx(SelectDto dto);

    /**
     * 机具厂家
     * @param dto
     * @return List<SelectVo>
     * @description 机具厂家
     * @author cwchen
     * @date 2023/12/20 19:57
     */
    List<SelectVo> getDeviceFactoryCbx(SelectDto dto);

    /**
     * 配件所属上级树
     * @param
     * @return List<TreeNode>
     * @description 配件所属上级树
     * @author cwchen
     * @date 2023/12/20 20:26
     */
    List<TreeNode> getAccessoryTree();

    /**
     * 货架
     * @param dto
     * @return List<TreeNode>
     * @description 货架
     * @author cwchen
     * @date 2023/12/20 20:36
     */
    List<TreeNode> getGoodsShelvesCbx(SelectDto dto);


    /**
     * 往来单位id和标段工程id获取协议信息
     * @param dto
     * @return AgreementVo
     * @description 往来单位id和标段工程id获取协议信息
     * @author cwchen
     * @date 2023/12/21 10:53
     */
    List<AgreementVo> getAgreementInfoById(SelectDto dto);

    /**
    * 配件所属上级树
    * @param dto
    * @return List<TreeNode>
    */
    List<TreeNode> getPartTree(SelectDto dto);

    /**
     * 在用设备类型树4级
     * @param bean
     * @return
     */
    List<TypeTreeNode> getUseTypeTreeL4(BackApplyInfo bean);

    List<TypeTreeNode> getUseTypeTreeL4Back(SelectDto bean);

    /**
     * 在用设备类型树3级
     * @param list
     * @return
     */
    List<TypeTreeNode> getUseTypeTreeL3(List<Long> list);


    /**
     * 在用设备类型树2级
     * @param list
     * @return
     */
    List<TypeTreeNode> getUseTypeTreeL21(List<Long> list);

    /**
     * 获取单位下拉选app
     * @param bmUnit
     * @return
     */
    List<BmUnit> getUnitListApp(BmUnit bmUnit);

    /**
     * 获取工程下拉选app
     * @param bmProject
     * @return
     */
    List<BmProject> getProjectListApp(BmProject bmProject);

    /**
     * 获取在用设备类型app
     * @param bean
     * @return
     */
    List<TypeTreeNode> getUseTypeTreeApp(BackApplyInfo bean);

    /**
     * 获取机具类型app
     * @param dto
     * @return
     */
    List<SelectVo> getMaType(SelectDto dto);

    /**
     * 获取标准配置下拉选
     * @param bmUnit
     * @return
     */
    List<ProjectTreeNode> getConfigList(BmUnit bmUnit);

    /**
     * 获取分部工程下拉选
     * @return
     */
    List<SelectVo> getBranchProject();

    /**
     * 获取班组下拉选
     * @param bean
     * @return
     */
    List<ProjectTreeNode> getTeamList(ProAuthorizeInfo bean);

    /**
     * 获取工程下拉选
     * @param bmProject
     * @return
     */
    List<BmProject> getProjectInfo(BmProject bmProject);

    /**
     * 获取往来单位id和标段工程id获取协议信息
     * @param dto
     * @return
     */
    List<AgreementVo> getAgreementInfoBy(SelectDto dto);

    /**
     * 获取班组下拉选
     * @return
     */
    List<ProjectTreeNode> getTeam();

    /**
     * 获取领用申请单位下拉
     * @return
     */
    List<ProjectTreeNode> getTeamLeaseList(BmUnit bmUnit);

    /**
     * 获取领用申请单位下拉
     * @param bmUnit
     * @return
     */
    List<BmUnit> getUnitListLeasePerson(BmUnit bmUnit);

    /**
     * 根据i8工程id查询项目部id
     * @param externalId
     * @return
     */
    MaterialLeaseApplyInfo selectI8ProjectInfo(String externalId);

    /**
     * 根据i8工程id查询用户名
     * @param i8ProjectInfo
     * @return
     */
    List<String> getUserNameList(MaterialLeaseApplyInfo i8ProjectInfo);

    List<BmProject> getProjectListByClz(BmProject bmProject);

    /**
     * 根据用户名查询项目部信息
     * @param username
     * @return
     */
    List<String> getDepartId(String username);

    /**
     * 根据项目部id查询工程信息
     * @param departId
     * @return
     */
    List<String> getProjectId(@Param("list") List<String> departId);

    /**
     * 获取材料站退料往来单位id和标段工程id获取协议信息
     * @param dto
     * @return
     */
    List<AgreementVo> getAgreementInfoByIdBack(SelectDto dto);

    List<AgreementVo> getMaterialAgreementInfoByIdBack(SelectDto dto);

    /**
     * 获取无需授权的项目部和后勤单位
     * @param bmUnit
     * @return
     */
    List<ProjectTreeNode> getUnitListXm(BmUnit bmUnit);

    /**
     * 获取项目部项目
     * @param bean
     * @return
     */
    List<ProjectTreeNode> getUnitListPro(ProAuthorizeInfo bean);

    /**
     * 获取部门项目
     * @param bmUnit
     * @return
     */
    BmUnit selectUnitByLeaseId(BmUnit bmUnit);

    /**
     * 获取部门项目
     * @param backApplyInfo
     * @return
     */
    List<TypeTreeNode> getUseTypeClzTree(BackApplyInfo backApplyInfo);

    /**
     * 获取班组在用量
     * @param bean
     * @return
     */
    List<TypeTreeNode> getBzUseTypeTreeL4(BackApplyInfo bean);

    List<TreeNode> getDeviceTypeTreeTwo(SelectDto dto);

    /**
     * 获取工程下拉选
     * @param bmProject
     * @return
     */
    List<ProjectTreeNode> getLeaseProjectList(BmProject bmProject);

    /**
     * 获取设备类型树3级
     * @param dto
     * @return
     */
    List<TreeNode> getDeviceTypeTreeThree(SelectDto dto);

    /**
     * 根据部门id查询所有工程信息
     * @param departId
     * @return
     */
    List<String> getAllProjectList(@Param("list") List<String> departId);

    /**
     * 获取在建工程信息
     * @param departId
     * @return
     */
    List<String> getInProject(@Param("list") List<String> departId);
}
