package com.hw.mes.service;

import java.util.List;

import com.hw.common.core.utils.DateUtils;
import com.hw.mes.domain.MesProductPlan;
import com.hw.mes.domain.MesProductPlanDetail;
import com.hw.mes.domain.vo.MesProductPlanDetailVo;
import org.springframework.transaction.annotation.Transactional;

/**
 * 生产计划明细Service接口
 *
 * @author xins
 * @date 2024-02-21
 */
public interface IMesProductPlanDetailService {
    /**
     * 查询生产计划明细
     *
     * @param planDetailId 生产计划明细主键
     * @return 生产计划明细
     */
    public MesProductPlanDetail selectMesProductPlanDetailByPlanDetailId(Long planDetailId);

    /**
     * 查询生产计划明细列表
     *
     * @param mesProductPlanDetail 生产计划明细
     * @return 生产计划明细集合
     */
    public List<MesProductPlanDetail> selectMesProductPlanDetailList(MesProductPlanDetail mesProductPlanDetail);

    /**
     * 新增生产计划明细
     *
     * @param mesProductPlanDetail 生产计划明细
     * @return 结果
     */
    public int insertMesProductPlanDetail(MesProductPlanDetail mesProductPlanDetail);

    /**
     * 修改生产计划明细
     *
     * @param mesProductPlanDetail 生产计划明细
     * @return 结果
     */
    public int updateMesProductPlanDetail(MesProductPlanDetail mesProductPlanDetail);

    /**
     * 批量删除生产计划明细
     *
     * @param planDetailIds 需要删除的生产计划明细主键集合
     * @return 结果
     */
    public int deleteMesProductPlanDetailByPlanDetailIds(Long[] planDetailIds);

    /**
     * 删除生产计划明细信息
     *
     * @param planDetailId 生产计划明细主键
     * @return 结果
     */
    public int deleteMesProductPlanDetailByPlanDetailId(Long planDetailId);


    /**
     * 根据生产计划新增生产计划明细
     *
     * @param mesProductPlanDetailVo 生产计划明细Vo
     * @return 结果
     */
    public int insertMesProductPlanDetails(MesProductPlanDetailVo mesProductPlanDetailVo);


    /**
     * 开始生产计划明细
     *
     * @param mesProductPlanDetail 生产计划明细
     * @return 结果
     */
    public int startMesProductPlanDetail(MesProductPlanDetail mesProductPlanDetail);

    /**
     * 完成生产计划明细
     *
     * @param mesProductPlanDetail 生产计划明细
     * @return 结果
     */
    public int completeMesProductPlanDetail(MesProductPlanDetail mesProductPlanDetail);

    /**
     * 查询最新生产计划明细
     *
     * @param mesProductPlanDetail 生产计划明细
     * @return 生产计划明细
     */
    public MesProductPlanDetail selectNewestMesProductPlanDetail(MesProductPlanDetail mesProductPlanDetail);

    /**
     * 查询最新生产计划明细,Join attach
     *
     * @param mesProductPlanDetail 生产计划明细
     * @return 生产计划明细
     */
    public MesProductPlanDetail selectNewestMesProductPlanDetailJoinAttach(MesProductPlanDetail mesProductPlanDetail);

    /**
     * 开始下一生产计划明细
     *
     * @param mesProductPlanDetail 生产计划明细
     * @param startType (0：其他工位，1:五楼装配工位)
     * @return MesProductPlanDetail
     */
    public MesProductPlanDetail startNextMesProductPlanDetail(MesProductPlanDetail mesProductPlanDetail,String startType);
}
