package com.bonus.material.part.mapper;

import com.bonus.material.ma.domain.Type;
import com.bonus.material.part.domain.*;
import com.bonus.material.purchase.domain.PurchaseCheckDetails;
import com.bonus.material.purchase.domain.PurchaseCheckInfo;
import com.bonus.material.purchase.domain.dto.PurchaseQueryDto;
import com.bonus.material.task.domain.TmTask;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 配件新购管理Mapper接口
 * 
 * @author hongchao
 * @date 2024-01-08
 */
public interface PartArrivedMapper
{

    /**
     * 查询配件类型三级树
     *
     * @param partName 查询配件类型三级树
     * @return 查询配件类型三级树
     */
    List<PartTypeDto> getTypeTree(String partName);

    /**
     * 查询当年当月最大任务序号，用于生成任务编号 by 分类型查询
     * @param year 年
     * @param month 月
     * @param taskType 任务类型（字典表中获取，例如新购是:16）
     */
    int getMonthMaxOrderByDate(@Param("year") String year, @Param("month") String month, @Param("taskType") Integer taskType);

    /**
     * 新增任务
     *
     * @param tmTask 任务
     * @return 结果
     */
    int insertTmTask(TmTask tmTask);

    /**
     * 新增新购验收任务
     *
     * @param partTypeCheckInfo 新购验收任务
     * @return 结果
     */
    int insertPartTypeCheckInfo(PartTypeCheckInfo partTypeCheckInfo);

    /**
     * 批量新增新购验收任务详细
     * @param partTypeCheckDetailsList 新购验收任务详细集合
     */
    int insertPartTypeCheckDetailsList(List<PartTypeCheckDetails> partTypeCheckDetailsList);

    /**
     * 查询新购验收任务列表--多表关联查询
     *
     * @param partTypeQueryDto 新购验收任务
     * @return 新购验收任务集合
     */
    List<PartTypeCheckInfo> selectPartTypeCheckInfoJoinList(PartTypeQueryDto partTypeQueryDto);

    /**
     * 查询新购验收任务详细列表
     *
     * @param taskId 新购验收任务主键
     * @return 新购验收任务详细集合
     */
    List<PartTypeCheckDetails> selectPartTypeCheckDetailsList(Long taskId);

    List<PartTypeCheckDetails> selectPartTypeCheckDetailsListByQueryDto(PartTypeQueryDto partTypeQueryDto);

    PartTypeCheckInfo selectPartTypeCheckInfoById(Long id);

    int deletePartTypeCheckDetailsByParentIds(Long taskId);

    int deleteByParentIds(Long taskId);

    int deleteTmTask(Long taskId);

    /**
     * 删除新购验收任务
     *
     * @param id 需要删除的数据主键集合
     * @return 结果
     */
    int deletePartTypCheckInfoById(Long id);

    /**
     * 查询附件列表
     *
     * @param bmPartFileInfo 查询附件列表
     * @return 查询附件列表
     */
    List<BmPartFileInfo> getPartFilelist(BmPartFileInfo bmPartFileInfo);

    /**
     * 查询附件列表详情
     *
     * @param bmPartFileInfo 查询附件列表详情
     * @return 查询附件列表详情
     */
    List<BmPartFileDetail> getPartFileDetail(BmPartFileInfo bmPartFileInfo);

    //删除附件文件相关任务文件
    int deleteBmFileList(Long taskId);

    /**
     * 获取入库单外层信息数据
     *
     * @param partTypeQueryDto 外层信息
     * @return 外层信息
     */
    PartTypeCheckInfo getCheckInfoForm(PartTypeQueryDto partTypeQueryDto);

    /**
     * 更新任务状态
     * @param taskId
     * @param status
     * @return
     */
    int updateTaskStatus(@Param("taskId") Long taskId,@Param("status") Integer status);

    /**
     * 修改采购配件主表
     * @param partTypeCheckInfo
     * @return
     */
    int updatePurchaseCheckInfo(PartTypeCheckInfo partTypeCheckInfo);
}
