package com.aucma.base.service;

import java.util.List;

import com.aucma.base.domain.BaseOrderInfo;

/**
 * 工单信息Service接口
 *
 * @author Yinq
 * @date 2023-09-27
 */
public interface IBaseOrderInfoService {
    /**
     * 查询工单信息
     *
     * @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 materialKeyword 物料关键字
     * @return 工单集合
     */
    public List<BaseOrderInfo> selectPdaOrderListByMaterialKeyword(String materialKeyword);

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

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

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

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

    /**
     * 根据工单编号查询工单
     *
     * @param orderCode 工单编号
     * @return 工单信息
     */
    public BaseOrderInfo selectBaseOrderInfoByOrderCode(String orderCode);

    /**
     * 开始生产
     *
     * @param orderCode 工单编号
     * @param operator 操作员
     * @return 结果
     */
    public int startProduction(String orderCode, String operator);

    /**
     * 完工提报
     *
     * @param orderCode 工单编号
     * @param completeQty 完工数量
     * @param defectQty 不良数量
     * @return 结果
     */
    public int completeProduction(String orderCode, Long completeQty, Long defectQty);

    /**
     * 更新完工数量
     *
     * @param orderCode 工单编号
     * @param completeQty 完工数量
     * @param defectQty 不良数量
     * @return 结果
     */
    public int updateQuantity(String orderCode, Long completeQty, Long defectQty);

    /**
     * 获取正在执行的工单列表
     *
     * @return 工单列表
     */
    public List<BaseOrderInfo> getRunningOrders();

    /**
     * 获取指定设备正在执行的工单
     *
     * @param deviceCode 设备编号
     * @return 工单信息
     */
    public BaseOrderInfo getRunningOrderByDevice(String deviceCode);

    /**
     * 批量开始生产
     *
     * @param objIds 工单ID集合
     * @param operator 操作员
     * @return 结果
     */
    public int batchStartProduction(Long[] objIds, String operator);

    /**
     * 批量更新完工数量
     *
     * @param objIds 工单ID集合
     * @param completeQty 完工数量
     * @param defectQty 不良数量
     * @return 结果
     */
    public int batchUpdateQuantity(Long[] objIds, Long completeQty, Long defectQty);

    /**
     * 批量完工提报
     *
     * @param objIds 工单ID集合
     * @param completeQty 完工数量
     * @param defectQty 不良数量
     * @return 结果
     */
    public int batchCompleteProduction(Long[] objIds, Long completeQty, Long defectQty);

    /**
     * PDA维护工单状态与数量
     *
     * @param baseOrderInfo 工单维护参数
     * @return 结果
     */
    public int updatePdaOrderExecution(BaseOrderInfo baseOrderInfo);
}
