package com.hw.mes.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.hw.mes.domain.MesBaseAttachInfo;
import com.hw.mes.domain.MesProductOrder;
import com.hw.mes.domain.MesProductPlan;
import com.hw.mes.domain.vo.MesAssignTaskVo;
import com.hw.mes.domain.vo.MesMaterialScanVo;
import org.springframework.transaction.annotation.Transactional;

/**
 * 生产派工Service接口
 *
 * @author xins
 * @date 2024-02-21
 */
public interface IMesProductPlanService
{
    /**
     * 查询生产派工
     *
     * @param planId 生产派工主键
     * @return 生产派工
     */
    public MesProductPlan selectMesProductPlanByPlanId(Long planId);

    /**
     * 查询生产派工列表
     *
     * @param mesProductPlan 生产派工
     * @return 生产派工集合
     */
    public List<MesProductPlan> selectMesProductPlanList(MesProductPlan mesProductPlan);

    /**
     * 新增生产派工
     *
     * @param mesProductPlan 生产派工
     * @return 结果
     */
    public int insertMesProductPlan(MesProductPlan mesProductPlan);

    /**
     * 修改生产派工
     *
     * @param mesProductPlan 生产派工
     * @return 结果
     */
    public int updateMesProductPlan(MesProductPlan mesProductPlan);

    /**
     * 批量删除生产派工
     *
     * @param planIds 需要删除的生产派工主键集合
     * @return 结果
     */
    public int deleteMesProductPlanByPlanIds(Long[] planIds);

    /**
     * 删除生产派工信息
     *
     * @param planId 生产派工主键
     * @return 结果
     */
    public int deleteMesProductPlanByPlanId(Long planId);


    /**
     * 查询生产派工列表Join product_order和base_material
     *
     * @param mesProductPlan 生产派工
     * @return 生产派工
     */
    public List<MesProductPlan> selectMesProductPlanJoinList(MesProductPlan mesProductPlan);

    /**
     * 获取派工编号
     *
     * @return 生产派工
     */
    public String getDispatchCode();

    /**
     * 生产工单新增生产派工List
     *
     * @param mesProductPlanList 生产派工
     * @return 结果
     */
    public int orderAddMesProductPlanList(List<MesProductPlan> mesProductPlanList);


    /**
     * 获取生产派工附件List列表
     * @param planId
     * @param attachType
     * @return
     */
    public List<MesBaseAttachInfo> getDispatchAttachList(Long planId, String attachType);

    /**
     * 工单撤回
     *
     * @param mesProductOrder 生产工单
     * @return 结果
     */
    public int productOrderRecall(MesProductOrder mesProductOrder);


    /**
     * 获取图纸列表
     * @param mesProductPlan
     * @return
     */
    public List<MesBaseAttachInfo> getDrawings(MesProductPlan mesProductPlan);


    /**
     * 在生产时校验物料使用
     *
     * @param mesMaterialScanVo
     * @return
     */
    public int scanMaterial2Confirm(MesMaterialScanVo mesMaterialScanVo);

    /**
     * 在五楼柜体拆分区拆分完柜体将门板下发给工位装配
     * @param mesAssignTaskVo
     */
    public int assignTask(MesAssignTaskVo mesAssignTaskVo);

    /**
     * 查询物料安装情况
     * @param hashMap (installType=1已安装,installType=2未安装)
     * @return
     */
    List<HashMap<String, Object>> selectMaterialInstallationCircumstance(Map hashMap);
}
