package com.cf.imes.module.executor.service.plate;

import java.util.*;
import javax.validation.*;

import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsSaveReqVO;
import com.cf.imes.module.executor.controller.admin.plate.vo.*;
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
import com.cf.imes.framework.common.pojo.PageResult;

/**
 * 生产单板件 Service 接口
 *
 * @author 晨丰科技
 */
public interface PlateService {

    /**
     * 创建生产单板件
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createPlate(@Valid PlateSaveReqVO createReqVO);

    /**
     * 更新生产单板件
     *
     * @param updateReqVO 更新信息
     */
    void updatePlate(@Valid PlateSaveReqVO updateReqVO);

    /**
     * 删除生产单板件
     *
     * @param id 编号
     */
    void deletePlate(Long id);

    /**
     * 获得生产单板件
     *
     * @param
     * @return 生产单板件
     */
    List<PlateRespVO> getPlate(PlateDetailReqVO reqVO);

    /**
     * 获得生产单板件分页
     *
     * @param pageReqVO 分页查询
     * @return 生产单板件分页
     */
    PageResult<PlateDO> getPlatePage(PlatePageReqVO pageReqVO);

    /**
     * 批量导入小板
     *
     * @param importPlates 导入生产单板材列表
     * @param orderId      生产单Id
     * @return 导入结果
     */
    PlateImportRespVO importPlatesList(List<PlateSaveReqVO> importPlates, Long orderId);

    /**
     * @param ids: 待删除板件id集合
    * @return void
     */
    void deletePlates(Set<Long> ids);

    /**
     * 获得生产单所有板材
     *
     * @param orderId 生产单id
     * @return List<PlateDO>
     */
    List<PlateDO> getPlatesByOrderId(Long orderId);

    /**
     * @param pageReqVO:
     * @return PageResult<PlateDO>
     */
    PageResult<PlateRespVO> getPlatePageByTerms(PlateTermsPageReqVO pageReqVO);

    /**
     * @param createReqVOS
     * @return void
     */
    void updatePlateByRawGoodsId(List<GoodsSaveReqVO> createReqVOS);


    List<BodyPlateDetailVO> getPlateModelByPlateId(List<Long> bodyIds);

}