package com.bonus.material.basic.mapper;

import com.bonus.material.basic.domain.*;
import com.bonus.material.basic.domain.vo.MaTypeSelectInfo;
import com.bonus.material.ma.domain.Type;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * @Author ma_sh
 * @create 2024/12/16 10:54
 */
public interface ComplexQueryMapper {

    /**
     * 获取工程机具使用列表
     * @param bean
     * @return
     */
    List<ProjUsingRecord> getProjUsingRecordList(ProjUsingRecord bean);

    /**
     * 设备使用追溯查询
     * @param bean
     * @return
     */
    List<MachineHistoryRecordBean> getMachineHistoryRecordList(MachineHistoryRecordBean bean);

    /**
     * 机具入库查询列表
     * @param bean
     * @return
     */
    List<InputRecordInfo> getInputRecordList(InputRecordInfo bean);

    /**
     * 机具出库查询列表
     * @param bean
     * @return
     */
    List<OutRecordInfo> getOutRecordList(OutRecordInfo bean);

    /**
     * 保有设备总量查询
     * @param bean
     * @return
     */
    List<RetainedEquipmentInfo> getRetainedEquipmentList(RetainedEquipmentInfo bean);

    /**
     * 查询机具编码
     * @param bean
     * @return
     */
    List<StorageInfo> getMaCodeList(StorageInfo bean);

    /**
     * 查询在用设备详情
     * @param bean
     * @return
     */
    List<UseStorageInfo> getUserRecords(UseStorageInfo bean);

    /**
     * 查询在修设备详情
     * @param bean
     * @return
     */
    List<RepairStorageInfo> getRepairRecordList(RepairStorageInfo bean);

    /**
     * 查询新购待入库设备详情
     * @param bean
     * @return
     */
    List<PurchaseInputInfo> getPurchaseRecordList(PurchaseInputInfo bean);

    /**
     * 查询修饰待入库设备详情
     * @param bean
     * @return
     */
    List<RepairInputRecord> getRepairInputList(RepairInputRecord bean);

    /**
     * 根据任务ID和机具规格ID查询机具编码
     * @param taskId
     * @param typeId
     * @return
     */
    List<PurchaseInputInfo> selectMaCodeByTaskIdAndTypeId(@Param("taskId") Long taskId, @Param("typeId") Integer typeId);

    /**
     * 查询机具编码
     *  @param bean
     * @return
     */
    List<StorageInfo> selectMaCodeByTypeId(StorageInfo bean);

    /**
     * 查询库管员
     * @param bean
     * @return
     */
    UseStorageInfo selectMaTypeName(UseStorageInfo bean);

    /**
     * 查询机具编码
     * @param useStorageInfo
     * @return
     */
    UseStorageInfo selectInFo(UseStorageInfo useStorageInfo);

    /**
     * 查询待报废设备详情
     * @param bean
     * @return
     */
    List<ScrapRecordInfo> getScrapList(ScrapRecordInfo bean);

    /**
     * 查询已审核报废设备详情
     * @param bean
     * @return
     */
    List<ScrapAuditInfo> getScrapAuditList(ScrapAuditInfo bean);

    /**
     * 修试查询--一机一档案查询
     * @param bean
     * @return
     */
    List<MaTypeSelectInfo> getMaTypeSelectList(MaTypeSelectInfo bean);

    /**
     * 根据id查询单位、工程及协议信息
     * @param dto
     * @return
     */
    MaTypeSelectInfo selectUnitAndProAndAgreementInfo(MaTypeSelectInfo dto);

    /**
     * 查询收费配件信息
     * @param dto
     * @return
     */
    String getPartInfoList(MaTypeSelectInfo dto);

    /**
     * 查询用户权限
     * @param userId
     * @return
     */
    List<Long> selectTypeIdList(Long userId);

    /**
     * 查询个人数量
     * @param bean
     * @return
     */
    List<RetainedEquipmentInfo> getPersonNum(RetainedEquipmentInfo bean);

    /**
     * 施工机具需求、供应分析统计表
     * @param bean
     * @return
     */
    List<ProjUsingRecord> getStatisticsList(ProjUsingRecord bean);

    /**
     * 获取在用数量
     * @param item
     * @return
     */
    ProjUsingRecord getUsNum(ProjUsingRecord item);

    /**
     * 根据typeId查询，总库存数量、总在修数量、总待入库数量、总保有量
     * @param item
     * @return
     */
    RetainedEquipmentInfo selectInventory(ProjUsingRecord item);

    /**
     * 获取所有在用详情
     * @param bean
     * @return
     */
    List<ProjUsingRecord> getAllUsDetails(ProjUsingRecord bean);

    List<UseStorageInfo> batchSelectInfo(@Param("list") Set<Long> leaseIds);

    /**
     * 查询配件使用数量
     * @param bean
     * @return
     */
    List<RetainedEquipmentInfo> getPartPersonNum(RetainedEquipmentInfo bean);

    /**
     * 获取库存变化日志
     * @param bean
     * @return
     */
    List<Type> getStorageNumLogList(Type bean);

    /**
     * 获取昨日库存数量
     * @param item
     * @return
     */
    Type getYesterdayStorageNum(Type item);

    /**
     * 获取今日库存数量
     * @param item
     * @return
     */
    Type getNewStorageNum(Type item);

    /**
     * 获取库存变化日志详情
     * @param bean
     * @return
     */
    List<Type> getStorageNumLogDetails(Type bean);

    /**
     * 获取库存数量
     * @param item
     * @return
     */
    Type getTotalStorageNumLog(Type item);

    /**
     * 获取修试待审核数量
     * @param bean
     * @return
     */
    List<RepairStorageInfo> getRepairAuditList(RepairStorageInfo bean);
}
