package com.sw.mes.yb.pad.service;

import com.sw.mes.core.base.BaseService;
import com.sw.mes.core.dto.ProductionPaintingLineDetailDto1;
import com.sw.mes.yb.pad.dto.PdaLineInfoDto;
import com.sw.mes.yb.pad.dto.ProductionPaintingLineDetailDto;
import com.sw.mes.yb.pad.entity.ProductionPaintingLineDetail;

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

/**
 * @Author
 * @Description：
 * @Date:
 * @Modified By:
 */
public interface ProductionPaintingLineDetailService extends BaseService<ProductionPaintingLineDetail> {


    ProductionPaintingLineDetail findBySegmentNo(String segmentNo);

    List<ProductionPaintingLineDetail> findBySegmentNos(List<String> segmentNos);

    /**
     * 长棒划线明细
     *
     * @param id 长棒划线id
     * @return
     */
    List<ProductionPaintingLineDetail> findByOperateDrawId(Long id);

    /**
     * 圆棒反切划线明细
     *
     * @param id 圆棒反切划线id
     * @return
     */
    List<ProductionPaintingLineDetail> findByOperateReversecutDrawId(Long id);

    /**
     * 方棒反切划线明细
     *
     * @param id 方棒反切划线id
     * @return
     */
    List<ProductionPaintingLineDetail> findByOperateRecutDrawIdFb(Long id);

    /**
     * 长棒划线明细
     * @param crystalId 单晶id
     * @return
     */
    List<ProductionPaintingLineDetail> findByCrystalId(Long crystalId);

    List<ProductionPaintingLineDetail> findByTypeAndCrystalTypeAndCrystalId(Integer type, Integer crystalType, Long crystalId);

    /**
     * 删除圆棒或方棒反切划线明细
     * @param id 方棒反切划线id/圆棒反切划线id
     * @param crystalType 0：圆棒；1：方棒
     */
    void deleteByOperateReversecutDrawIdAndCrystalType(Long id, Integer crystalType);

    /**
     * 长棒晶段划线信息
     * @param operateDrawId
     * @param crystalNo
     * @return
     */
    ProductionPaintingLineDetail findByOperateDrawIdAndAndNo(Long operateDrawId, String crystalNo);

    /**
     * 根据划线id、晶段类型查询划线详情
     * @param operateDrawId 划线id

     * @param type 晶段类型
     * @return
     */
    List<ProductionPaintingLineDetail> findByOperateDrawIdAndAndType(Long operateDrawId, int type);

    /**
     * 根据反切划线id、晶段类型查询划线详情
     * @param operateReversecutDrawId 反切划线id
     * @param type 晶段类型
     * @return
     */
    List<ProductionPaintingLineDetail> findByOperateReversecutDrawIdAndType(Long operateReversecutDrawId, int type);

    /**
     * 根据回收料编号查询长晶棒画线记录明细（晶段）
     * @param recycledSectionNo
     * @return
     */
    List<ProductionPaintingLineDetail> findByRecycledSectionNo(String recycledSectionNo);

    /**
     * 根据回收料编号查询晶棒返切画线记录明细（晶段）
     * @param recycledSectionNo
     * @return
     */
    List<ProductionPaintingLineDetail> findByRecycledSectionNoFQ(String recycledSectionNo);

    /**
     * 根据晶段编号查询长晶棒画线记录明细（晶段）
     * @param crystalNo
     * @return
     */
    List<ProductionPaintingLineDetail> findByRecycledCrystalNo(String crystalNo);

    /**
     * 根据单晶编号查询晶段编号
     *
     * @param crystalNo
     * @return
     */
    List<String> findDetailByCrystalNo(String crystalNo);

    /**
     * 根据单晶编号查询晶段编号
     *
     * @param no
     * @return
     */
    PdaLineInfoDto findDetailByNo(String no);
    
    
    /**
     * 根据单晶编号查询晶段信息
     *
     * @param no
     * @return
     */
    ProductionPaintingLineDetail getDetailByNo(String no);

    /**
     * 查找画线明细
     *
     * @param operateReversecutDrawId 画线id
     * @param crystalType             晶棒类型
     * @param isCut                   是否反切
     * @return
     */
    List<ProductionPaintingLineDetail> findByOperateReversecutDrawId(Long operateReversecutDrawId, Integer crystalType, Integer isCut);
    List<ProductionPaintingLineDetail> findByOperateReversecutDrawIdAndCrystalIdAndType(Long operateReversecutDrawId, Long crystalId, Integer type);

    Map<String,String> flowDirection(String sectionNo,String source);

    List<String> findByCrystalIdAndType(Integer crystalId,Integer type,Integer crystalType);

    List<ProductionPaintingLineDetail> findType(Integer crystalId);
    Boolean flowDirectionV2(String crystalNo,String sectionNo, String source);
}
