package com.bonus.material.back.mapper;

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

import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.material.back.domain.*;
import com.bonus.material.back.domain.vo.BackApplyInfoVo;
import com.bonus.material.back.domain.vo.BackApplyVo;
import com.bonus.material.back.domain.vo.MaCodeVo;
import com.bonus.material.clz.domain.back.MaterialBackApplyDetails;
import com.bonus.material.settlement.domain.SltAgreementInfo;
import org.apache.ibatis.annotations.Param;

/**
 * 退料任务Mapper接口
 *
 * @author xsheng
 * @date 2024-10-16
 */
public interface BackApplyInfoMapper {
    /**
     * 查询退料任务
     *
     * @param id 退料任务主键
     * @return 退料任务
     */
    public BackApplyInfo selectBackApplyInfoById(Long id);

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

    /**
     * 新增退料任务
     *
     * @param backApplyInfo 退料任务
     * @return 结果
     */
    public int insertBackApplyInfo(BackApplyInfo backApplyInfo);

    /**
     * 修改退料任务
     *
     * @param backApplyInfo 退料任务
     * @return 结果
     */
    int updateBackApplyInfo(BackApplyInfo backApplyInfo);

    /**
     * 删除退料任务
     *
     * @param id 退料任务主键
     * @return 结果
     */
    public int deleteBackApplyInfoById(Long id);

    /**
     * 查询任务编号
     * @param date
     * @param taskType
     * @return
     */
    String selectTaskNumByMonth(@Param("date") Date date, @Param("taskType") Integer taskType);

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

    /**
     * 根据机具编码和类型查询机具是否存在
     * @param dto
     * @return
     */
    List<MaCodeVo> getMachineById(BackApplyInfo dto);

    /**
     * 根据任务id查询详情
     * @param backApplyInfo
     * @return
     */
    List<BackApplyDetails> selectBackApplyDetailsListByTaskId(BackApplyInfo backApplyInfo);

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

    /**
     * 新增机具退料详情
     * @param details
     * @return
     */
    int insertCheckDetails(BackApplyDetails details);

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

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

    /**
     * 删除机具退料详情
     * @param id
     * @return
     */
    int deleteCheckDetails(Long id);

    /**
     * 查询详情
     * @param backApplyInfo
     * @return
     */
    List<BackApplyInfo> selectBackDetails(BackApplyInfo backApplyInfo);

    /**
     * 更新任务状态
     * @param backApplyInfo
     * @return
     */
    int updateTaskStatus(BackApplyInfo backApplyInfo);

    /**
     * 更新退料单
     * @param backApplyInfo
     * @return
     */
    int updateBack(BackApplyInfo backApplyInfo);

    /**
     * 更新电子签名
     */
    int updateSignById(BackApplyInfo backApplyInfo);

    /**
     * 更新详情
     * @param backApplyInfo
     * @return
     */
    int updateBackDetails(BackApplyInfo backApplyInfo);

    /**
     * 更新机具退料详情
     * @param backApplyInfo
     * @return
     */
    int updateCheckDetails(BackApplyInfo backApplyInfo);

    /**
     * 查询维修列表
     * @param backApplyInfo
     * @return
     */
    List<BackApplyInfo> getWxList(BackApplyInfo backApplyInfo);

    /**
     * 查询维修单号
     * @param nowDate
     * @return
     */
    Integer selectTaskNumByMonthWx(@Param("date") Date nowDate);

    /**
     * 新增维修单
     * @param wx
     * @return
     */
    int insertRad(BackApplyInfo wx);

    /**
     * 查询结算信息
     * @param bean
     * @return
     */
    List<SltAgreementInfo> getStlInfo(BackApplyInfo bean);

    /**
     * 更新结算信息
     * @param info
     * @param record
     */
    void updateStlInfo(@Param("info") SltAgreementInfo info, @Param("record") BackApplyInfo record);

    /**
     * 更新结算信息2
     * @param info
     * @param record
     * @param backNum
     */
    void updateStlInfoTwo(@Param("info") SltAgreementInfo info,@Param("record") BackApplyInfo record, @Param("backNum") BigDecimal backNum);

    /**
     * 新增结算信息
     * @param info
     * @param many
     */
    void insStlInfoTwo(@Param("info")SltAgreementInfo info, @Param("many")BigDecimal many);

    /**
     * 更新详情
     * @param applyDetail
     * @return
     */
    int updateBackApplyDetails(BackApplyDetails applyDetail);

    /**
     * 删除详情退料详情，限制必须是已出库的状态
     * @param backTaskCode 退料任务单号
     */
    int removeBackApplyDetails(String backTaskCode);

    /**
     * 维修驳回--回退在用量
     */
    int updateBackApplyDetailsTwo(Long taskId);

    /**
     * 删除详情
     * @param backApplyInfo
     * @return
     */
    int deleteApplyDetails(BackApplyInfo backApplyInfo);

    /**
     * 删除详情
     * @param backApplyInfo
     * @return
     */
    int deleteDetails(BackApplyInfo backApplyInfo);

    /**
     * 查询机具
     * @param dto
     * @return
     */
    List<MaCodeVo> getMachine(BackApplyInfo dto);

    /**
     * 查询机具数量
     * @param dto
     * @return
     */
    Integer getNum(BackApplyInfo dto);

    /**
     * 查询详情
     * @param details
     * @return
     */
    BackApplyDetails selectBackApplyDetailsById(BackApplyDetails details);

    /**
     * 更新详情
     * @param details
     * @return
     */
    int updateDetails(BackApplyDetails details);

    /**
     * 查询机具详情
     * @param details
     * @return
     */
    BackApplyDetails selectCheckDetails(BackApplyDetails details);

    /**
     * 更新机具详情
     * @param checkDetails
     * @return
     */
    int updateCheck(BackApplyDetails checkDetails);

    /**
     * 根据类型查询机具
     * @param backApplyInfo
     * @return
     */
    List<MaCodeVo> selectByTypeId(BackApplyInfo backApplyInfo);

    /**
     * 更新机具外观状态
     * @param maCodeDto
     * @return
     */
    int updateMaCode(MaCodeDto maCodeDto);

    /**
     * 根据二维码查询机具信息
     * @param dto
     * @return
     */
    List<MaCodeVo> getMachineByQrCode(BackApplyInfo dto);

    /**
     * 根据任务id查询详情
     * @param backApplyDetails
     * @return
     */
    List<BackApplyDetails> getDetailsById(BackApplyDetails backApplyDetails);

    /**
     * 根据任务id删除详情
     * @param backApplyDetails
     * @return
     */
    int deleteBackApplyDetailsById(BackApplyDetails backApplyDetails);

    /**
     * 更新详情
     * @param backApplyDetails
     * @return
     */
    int update(BackApplyDetails backApplyDetails);

    /** 设置审批人为默认的李勇 --防止代码冲突 **/
    Long getDirectAuditBy();

    /** 设置审批人签名url  防止代码冲突  **/
    BackApplyInfo getDirectAuditUrl(BackApplyInfo backApplyInfo);

    /**
     * 根据任务id查询是否有签名
     * @param taskId
     * @return
     */
    BackApplyInfo selectSignByTaskId(Long taskId);

    /**
     * 根据任务id查询协议id
     * @param backApplyInfo
     * @return
     */
    Long selectAgreementId(BackApplyInfo backApplyInfo);

    MaCodeVo selectDto(BackApplyInfo dto);

    List<BackApplyVo> selectBackApplyList(BackApplyVo dto);

    BackApplyInfo selectRepairCode(BackApplyVo backApplyVo);

    BackApplyInfoVo selectIdList(BackApplyInfoVo dto);

    BackApplyInfoVo selectDetails(BackApplyInfoVo dto);

    /**
     * 根据任务id查询机具信息
     * @param dto
     * @return
     */
    List<MaCodeVo> getMachineByIdAndCode(BackApplyInfo dto);

    /**
     * 根据任务id查询退料单
     * @param taskId
     * @return
     */
    BackApplyInfo selectByTaskId(Long taskId);

    /**
     * 根据用户id查询退料类型
     * @param userId
     * @return
     */
    List<Long> selectTypeIdList(Long userId);

    AjaxResult getMachineByCode(BackApplyInfo dto);


    /**
     * 新增装卸单
     * @param bean
     * @return
     */
    int addHandlingOrder(HandlingOrder bean);

    /**
     * 查询装卸单
     * @param bean
     * @return
     */
    List<HandlingOrder> getHandlingOrderList(HandlingOrder bean);

    /**
     * 排号
     * @param bean
     * @return
     */
    int uploadSort(HandlingOrder bean);

    /**
     * 查询排序号
     * @param bean
     * @return
     */
    int selectSort(HandlingOrder bean);

    /**
     * 查询排序号
     * @param bean
     * @return
     */
    HandlingOrder getSort(HandlingOrder bean);

    /**
     * 查询退料详情
     * @param backApplyDetails
     * @return
     */
    List<BackApplyDetails> selectBackApplyDetailsList(BackApplyDetails backApplyDetails);

    /**
     * 根据单位和工程id查询项目部关联协议id
     * @param backApplyInfo
     * @return
     */
    BackApplyInfo selectInfo(BackApplyInfo backApplyInfo);

    /**
     * 根据任务id查询协议信息
     * @param info
     * @return
     */
    SltAgreementInfo getStlInfoByTaskId(SltAgreementInfo info);

    /**
     * 查询拆分退料任务单
     * @param backApplyDetails
     * @return
     */
    List<BackApplyInfo> selectClzList(MaterialBackApplyDetails backApplyDetails);

    /**
     * 查询项目退料任务单
     * @param details
     * @return
     */
    List<BackApplyInfo> selectXmList(BackApplyDetails details);

    List<MaCodeVo> getMachineByOne(BackApplyInfo dto);

    List<MaCodeVo> getMachineByTwo(BackApplyInfo dto);

    List<MaCodeVo> getMachineByThree(BackApplyInfo dto);

    List<MaCodeVo> getMachineByOneMaCode(BackApplyInfo dto);

    List<MaCodeVo> getMachineByTwoMaCode(BackApplyInfo dto);

    List<MaCodeVo> getMachineByThreeMaCode(BackApplyInfo dto);

    /**
     * 查询是否存在班组数据
     * @param bean
     * @return
     */
    List<SltAgreementInfo> getTbList(BackApplyInfo bean);

    /**
     * 获取出门证
     * @param bean
     * @return
     */
    List<ExitPermit> getExitPermitList(ExitPermit bean);

    /**
     * 新增出门证
     * @param bean
     * @return
     */
    int addExitPermit(ExitPermit bean);

    /**
     * 查看机具在用数据
     * @param applyInfo
     * @return
     */
    List<SltAgreementInfo> getUserList(BackApplyInfo applyInfo);

    /**
     * 查看材料站在用数据
     * @param applyInfo
     * @return
     */
    List<SltAgreementInfo> getClzUserList(BackApplyInfo applyInfo);

    /**
     * 删除装卸单
     * @param bean
     * @return
     */
    int delHandlingOrder(HandlingOrder bean);

    List<BackApplyInfo> selectNotSyncProject();

    int syncProject(BackApplyInfo backApplyInfo);

    int syncProjectDetails(BackApplyInfo backApplyInfo2);
}
