package com.aucma.base.mapper;

import java.util.List;

import com.aucma.base.domain.BaseOrderInfo;
import org.apache.ibatis.annotations.Param;

/**
 * 工单信息Mapper接口
 *
 * @author Yinq
 * @date 2023-09-27
 */
public interface BaseOrderInfoMapper {
    /**
     * 查询工单信息
     *
     * @param objId 工单信息主键
     * @return 工单信息
     */
    public BaseOrderInfo selectBaseOrderInfoByObjId(Long objId);

    /**
     * 查询工单信息列表
     *
     * @param baseOrderInfo 工单信息
     * @return 工单信息集合
     */
    public List<BaseOrderInfo> selectBaseOrderInfoList(BaseOrderInfo baseOrderInfo);

    /**
     * 查询ALL工单信息列表
     *
     * @param baseOrderInfo 工单信息
     * @return 工单信息集合
     */
    public List<BaseOrderInfo> selectAllOrderInfoList(BaseOrderInfo baseOrderInfo);

    /**
     * PDA按物料编码集合查询工单
     *
     * @param materialCodes 物料编码集合
     * @return 工单集合
     */
    public List<BaseOrderInfo> selectPdaOrderListByMaterialCodes(@Param("materialCodes") List<String> materialCodes);

    /**
     * 新增工单信息
     *
     * @param baseOrderInfo 工单信息
     * @return 结果
     */
    public int insertBaseOrderInfo(BaseOrderInfo baseOrderInfo);

    /**
     * 修改工单信息
     *
     * @param baseOrderInfo 工单信息
     * @return 结果
     */
    public int updateBaseOrderInfo(BaseOrderInfo baseOrderInfo);

    /**
     * 删除工单信息
     *
     * @param objId 工单信息主键
     * @return 结果
     */
    public int deleteBaseOrderInfoByObjId(Long objId);

    /**
     * 批量删除工单信息
     *
     * @param objIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteBaseOrderInfoByObjIds(Long[] objIds);

    /**
     * 批量更新工单执行状态为运行中
     *
     * @param objIds 工单ID集合
     * @param operator 操作员
     * @param startTime 开始时间
     * @return 结果
     */
    public int batchStartProduction(@Param("objIds") Long[] objIds,
                                    @Param("operator") String operator,
                                    @Param("startTime") java.util.Date startTime);

    /**
     * 批量更新完工数量
     *
     * @param objIds 工单ID集合
     * @param completeQty 完工数量
     * @param defectQty 不良数量
     * @param updateTime 更新时间
     * @return 结果
     */
    public int batchUpdateQuantity(@Param("objIds") Long[] objIds,
                                   @Param("completeQty") Long completeQty,
                                   @Param("defectQty") Long defectQty,
                                   @Param("updateTime") java.util.Date updateTime);

    /**
     * 批量更新工单为已完工状态
     *
     * @param objIds 工单ID集合
     * @param completeQty 完工数量
     * @param defectQty 不良数量
     * @param finishTime 完工时间
     * @return 结果
     */
    public int batchCompleteProduction(@Param("objIds") Long[] objIds,
                                       @Param("completeQty") Long completeQty,
                                       @Param("defectQty") Long defectQty,
                                       @Param("finishTime") java.util.Date finishTime);
}
