package com.bonus.material.clz.service;

import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.material.back.domain.vo.MaCodeVo;
import com.bonus.material.basic.domain.BmQrcodeInfo;
import com.bonus.material.clz.domain.lease.LeaseApplyDetailsInfo;
import com.bonus.material.clz.domain.lease.LeaseOutDetailsInfo;
import com.bonus.material.clz.domain.lease.MaterialLeaseApplyDetails;
import com.bonus.material.clz.domain.lease.MaterialLeaseApplyInfo;
import com.bonus.material.clz.domain.vo.lease.LeaseTotalInfo;
import com.bonus.material.clz.domain.vo.lease.MaterialLeaseApplyRequestVo;

import java.util.List;

/**
 * @Author ma_sh
 * @create 2025/6/24 14:42
 */
public interface MaterialLeaseInfoService {

    /**
     * 查询领料任务列表
     * @param leaseApplyInfo
     * @return
     */
    List<MaterialLeaseApplyInfo> selectLeaseApplyInfoList(MaterialLeaseApplyInfo leaseApplyInfo);

    /**
     * 查询总站点领料记录数据
     * @param leaseApplyInfo
     * @return
     */
    List<MaterialLeaseApplyInfo> getTotalList(MaterialLeaseApplyInfo leaseApplyInfo);

    /**
     * 查询总站点领料详情数据
     * @param leaseApplyInfo
     * @return
     */
    List<MaterialLeaseApplyInfo> getDetailsList(MaterialLeaseApplyInfo leaseApplyInfo);

    /**
     * 获取领料任务详细信息
     * @param id
     * @param keyWord
     * @return
     */
    AjaxResult selectLeaseApplyInfoById(Long id, String keyWord);

    /**
     * 获取领料任务详细信息
     * @param leaseApplyDetails
     * @return
     */
    List<MaterialLeaseApplyDetails> getOutNum(MaterialLeaseApplyDetails leaseApplyDetails);

    /**
     * 获取工器具领料出库详情
     * @param leaseApplyInfo
     * @return
     */
    MaterialLeaseApplyRequestVo outDetailsById(MaterialLeaseApplyInfo leaseApplyInfo);

    /**
     * 导出工器具领料出库详情
     * @param leaseApplyInfo
     * @return
     */
    List<LeaseOutDetailsInfo> exportOutDetails(MaterialLeaseApplyInfo leaseApplyInfo);

    /**
     * 工器具领料数据
     * @param dto
     * @return
     */
    List<LeaseApplyDetailsInfo> getLeaseInfo(LeaseApplyDetailsInfo dto);

    /**
     * 新增领料任务
     * @param leaseApplyRequestVo
     * @return
     */
    AjaxResult insertLeaseApplyInfo(MaterialLeaseApplyRequestVo leaseApplyRequestVo);

    /**
     * 修改领料任务
     * @param leaseApplyRequestVo
     * @return
     */
    boolean updateLeaseApplyInfo(MaterialLeaseApplyRequestVo leaseApplyRequestVo);

    /**
     * 领料任务电子签名
     * @param leaseApplyInfo
     * @return
     */
    int updateLeaseApplyInfoSign(MaterialLeaseApplyInfo leaseApplyInfo);

    /**
     * 二维码出库：根据qrcode查询在库机具信息
     * @param bmQrcodeInfo
     * @return
     */
    AjaxResult getInfoByQrcode(BmQrcodeInfo bmQrcodeInfo);

    /**
     * app领料出库提交
     * @param leaseApplyDetails
     * @return
     */
    AjaxResult submitLeaseOut(MaterialLeaseApplyDetails leaseApplyDetails);

    /**
     * 删除领料任务
     * @param info
     * @return
     */
    int deleteLeaseApplyInfoByIds(MaterialLeaseApplyInfo info);

    /**
     * 工器具领料记录
     * @param info
     * @return
     */
    List<LeaseTotalInfo> getLeaseInfoDetails(LeaseTotalInfo info);

    /**
     * 工器具领料二级页面记录
     * @param info
     * @return
     */
    List<MaCodeVo> getSecondLeaseInfo(LeaseTotalInfo info);

    /**
     * 在库设备类型树
     * @param bean
     * @return
     */
    AjaxResult getUseTypeTree(MaterialLeaseApplyInfo bean);

    /**
     * 根据班组和工程id查询领料机具
     * @param dto
     * @return
     */
    AjaxResult getMachineById(MaterialLeaseApplyInfo dto);

    /**
     * 获取领料单信息
     * @param leaseApplyInfo
     * @return
     */
    AjaxResult getPickList(MaterialLeaseApplyInfo leaseApplyInfo);

    /**
     * OCR出库：根据code查询在库机具信息
     * @param bmQrcodeInfo
     * @return
     */
    AjaxResult getInfoByCode(BmQrcodeInfo bmQrcodeInfo);
}
