package com.bonus.material.clz.mapper;

import com.bonus.common.biz.domain.TypeTreeNode;
import com.bonus.material.back.domain.BackApplyInfo;
import com.bonus.material.back.domain.vo.MaCodeVo;
import com.bonus.material.clz.domain.back.MaterialBackApplyDetails;
import com.bonus.material.clz.domain.back.MaterialBackApplyInfo;
import com.bonus.material.clz.domain.back.MaterialBackApplyTotalInfo;
import com.bonus.material.clz.domain.vo.MaterialMaCodeVo;
import com.bonus.material.clz.domain.vo.back.MaterialBackMaCodeVo;
import com.bonus.material.settlement.domain.SltAgreementInfo;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * @Author ma_sh
 * @create 2025/6/25 9:31
 */
public interface MaterialBackInfoMapper {

    /**
     * 查询退料任务列表
     * @param backApplyInfo
     * @return
     */
    List<MaterialBackApplyInfo> selectBackApplyInfoList(MaterialBackApplyInfo backApplyInfo);

    /**
     * 查询总站点退料记录数据
     * @param backApplyInfo
     * @return
     */
    List<MaterialBackApplyInfo> getTotalList(MaterialBackApplyInfo backApplyInfo);

    /**
     * 查询总站点退料详情数据
     * @param backApplyInfo
     * @return
     */
    List<MaterialBackApplyInfo> getDetailsList(MaterialBackApplyInfo backApplyInfo);

    /**
     * 根据ID查询退料任务信息
     * @param id
     * @return
     */
    MaterialBackApplyInfo selectBackApplyInfoById(Long id);

    /**
     * 根据任务ID查询退料任务详情信息
     * @param backApplyInfo
     * @return
     */
    List<MaterialBackApplyDetails> selectBackApplyDetailsListByTaskId(MaterialBackApplyInfo backApplyInfo);

    /**
     * 查询编码设备信息
     * @param id
     * @return
     */
    List<MaCodeVo> selectByCode(Long id);

    /**
     * 查询退料任务详情信息
     * @param dto
     * @return
     */
    MaCodeVo selectDto(BackApplyInfo dto);

    /**
     * 根据ID查询退料任务详情信息
     * @param backApplyDetails
     * @return
     */
    List<MaterialBackApplyDetails> getDetailsById(MaterialBackApplyDetails backApplyDetails);

    /**
     * 新增退料任务
     * @param backApplyInfo
     * @return
     */
    int insertBackApplyInfo(MaterialBackApplyInfo backApplyInfo);

    /**
     * 新增退料任务详情
     * @param details
     * @return
     */
    int insertBackApplyDetails(MaterialBackApplyDetails details);

    /**
     * 新增退料任务审核详情
     * @param details
     * @return
     */
    int insertCheckDetails(MaterialBackApplyDetails details);

    /**
     * 修改退料任务
     * @param backApplyInfo
     * @return
     */
    int updateBack(MaterialBackApplyInfo backApplyInfo);

    /**
     * 修改退料任务详情
     * @param backApplyInfo
     * @return
     */
    int updateBackDetails(MaterialBackApplyInfo backApplyInfo);

    /**
     * 查询退料任务详情
     * @param backApplyInfo
     * @return
     */
    List<MaterialBackApplyInfo> selectBackDetails(MaterialBackApplyInfo backApplyInfo);

    /**
     * 查询退料任务详情
     * @param bean
     * @return
     */
    List<SltAgreementInfo> getStlInfo(MaterialBackApplyInfo bean);

    /**
     * 修改退料任务详情
     * @param info
     * @param record
     */
    void updateStlInfo(@Param("info") SltAgreementInfo info, @Param("record") MaterialBackApplyInfo record);

    /**
     * 修改退料任务详情
     * @param info
     * @param record
     * @param backNum
     */
    void updateStlInfoTwo(@Param("info") SltAgreementInfo info,@Param("record") MaterialBackApplyInfo record, @Param("backNum") BigDecimal backNum);

    /**
     * 新增退料任务详情
     * @param info
     * @param many
     */
    void insStlInfoTwo(@Param("info")SltAgreementInfo info, @Param("many")BigDecimal many);

    /**
     * 删除退料任务详情
     * @param id
     * @return
     */
    int deleteBackApplyDetails(Long id);

    /**
     * 删除退料任务审核详情
     * @param id
     * @return
     */
    int deleteCheckDetails(Long id);

    /**
     * 修改退料任务
     * @param info
     * @return
     */
    int updateBackApplyInfo(MaterialBackApplyInfo info);

    /**
     * 修改退料任务电子签名
     * @param dto
     * @return
     */
    int updateSignById(MaterialBackApplyInfo dto);

    /**
     * 删除退料任务
     * @param id
     * @return
     */
    int deleteBackApply(Long id);

    /**
     * 工器具退料记录
     * @param info
     * @return
     */
    List<MaterialBackApplyTotalInfo> getBackInfoDetails(MaterialBackApplyTotalInfo info);

    /**
     * 工器具退料二级页面记录
     * @param info
     * @return
     */
    List<MaterialBackMaCodeVo> getSecondBackInfo(MaterialBackApplyTotalInfo info);

    /**
     * 工器具退料四级列表
     * @param bean
     * @return
     */
    List<TypeTreeNode> getUseTypeTreeL4(MaterialBackApplyInfo bean);

    /**
     * 根据班组和工程id查询领料机具
     * @param dto
     * @return
     */
    List<MaterialMaCodeVo> getMachineById(MaterialBackApplyInfo dto);

    /**
     * 查询协议id
     * @param backApplyInfo
     * @return
     */
    Long selectAgreementId(MaterialBackApplyInfo backApplyInfo);

    /**
     * 修改退料任务审核详情
     * @param backApplyInfo
     */
    int updateCheckDetails(MaterialBackApplyInfo backApplyInfo);

    /**
     * 查询退料任务审核详情
     * @param applyInfo
     * @return
     */
    MaterialBackApplyInfo selectByAgreementIdAndTypeIdAndMaId(MaterialBackApplyInfo applyInfo);

    /**
     * 查询退料任务审核详情
     * @param maCodeVo
     * @return
     */
    MaterialBackApplyInfo selectByAgreementIdAndTypeId(MaCodeVo maCodeVo);

    /**
     * 查询退料任务审核详情
     * @param dto
     * @return
     */
    List<MaCodeVo> getMachine(MaterialBackApplyInfo dto);
}
