package com.bonus.material.purchase.mapper;

import java.util.List;
import com.bonus.material.purchase.domain.PurchaseCheckDetails;
import com.bonus.material.purchase.domain.PurchaseCheckInfo;
import com.bonus.material.purchase.domain.dto.PurchaseQueryDto;
import org.apache.ibatis.annotations.Param;

/**
 * 新购验收任务详细Mapper接口
 * 
 * @author xsheng
 * @date 2024-10-16
 */
public interface PurchaseCheckDetailsMapper {

    /**
     * 根据任务id查询物资类型名称，1-验收，2-入库
     *
     * @param taskId * @param type 1-验收，2-入库
     * @return String类型，多个物资类型根据逗号分割
     */
    //String selectMaTypeNameByTaskId(@Param("taskId") Long taskId, @Param("status") Integer status);

    String selectMaTypeNameByTaskAndStatusList(@Param("taskId") Long taskId, @Param("statusList") List<Integer> statusList);


    /**
     * 查询新购验收任务详细
     * 
     * @param id 新购验收任务详细主键
     * @return 新购验收任务详细
     */
    PurchaseCheckDetails selectPurchaseCheckDetailsById(Long id);

    /**
     * 根据任务id查询新购验收任务详细列表--Join查询
     * @param taskId 任务id
     */
    List<PurchaseCheckDetails> selectPurchaseCheckDetailsListByTaskId(@Param("taskId") Long taskId, @Param("status") Integer status);

    /**
     * 根据任务id查询新购验收任务详细列表--Join查询
     * @param obj 新购验收任务请求参数封装dto
     */
    List<PurchaseCheckDetails> selectPurchaseCheckDetailsListByQueryDto(PurchaseQueryDto obj);

    /**
     * 查询新购验收任务详细列表
     * 
     * @param purchaseCheckDetails 新购验收任务详细
     * @return 新购验收任务详细集合
     */
    List<PurchaseCheckDetails> selectPurchaseCheckDetailsList(PurchaseCheckDetails purchaseCheckDetails);

    List<PurchaseCheckDetails> selectPurchaseCheckDetailsListFromInfo(PurchaseCheckInfo purchaseCheckInfo);

    /**
     * 新增新购验收任务详细
     * 
     * @param purchaseCheckDetails 新购验收任务详细
     * @return 结果
     */
    int insertPurchaseCheckDetails(PurchaseCheckDetails purchaseCheckDetails);

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

    /**
     * 修改新购验收任务详细
     * 
     * @param purchaseCheckDetails 新购验收任务详细
     * @return 结果
     */
    int updatePurchaseCheckDetails(PurchaseCheckDetails purchaseCheckDetails);

    /**
     * 批量修改新购验收任务详细状态 -- 批量、限制状态
     * @param taskId 任务id
     * @param newTaskStatus 新状态
     */
    int batchUpdateDetailsTaskStatus(@Param("taskId") Long taskId, @Param("newTaskStatus") Integer newTaskStatus, @Param("checkResult") String checkResult);

//    int updatePurchaseDetails(PurchaseCheckDetails details);

    int updatePurchaseDetails4Check(PurchaseCheckDetails details);

    int getCountOfNoneThisStatus(@Param("taskId") Long taskId, @Param("status") Integer status);

    /**
     * 删除新购验收任务详细
     * 
     * @param id 新购验收任务详细主键
     * @return 结果
     */
    int deletePurchaseCheckDetailsById(Long id);

    int deletePurchaseCheckDetailsByParentIds(Long[] ids);

    /**
     * 批量删除新购验收任务详细
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deletePurchaseCheckDetailsByIds(Long[] ids);
}
