package com.zt.plat.module.qms.resource.material.service;

import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleDetailPageReqVO;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleDetailRespVO;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialLifecycleDetailSaveReqVO;
import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycleDO;
import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialLifecycleDetailDO;
import jakarta.validation.Valid;

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

/**
 * 物料通用流程明细 Service 接口
 *
 * @author 后台管理
 */
public interface MaterialLifecycleDetailService {

    /**
     * 创建物料通用流程明细
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    MaterialLifecycleDetailRespVO createMaterialLifecycleDetail(@Valid MaterialLifecycleDetailSaveReqVO createReqVO);

    /**
     * 更新物料通用流程明细
     *
     * @param updateReqVO 更新信息
     */
    void updateMaterialLifecycleDetail(@Valid MaterialLifecycleDetailSaveReqVO updateReqVO);

    /**
     * 删除物料通用流程明细
     *
     * @param id 编号
     */
    void deleteMaterialLifecycleDetail(Long id);

    /**
    * 批量删除物料通用流程明细
    *
    * @param ids 编号
    */
    void deleteMaterialLifecycleDetailListByIds(List<Long> ids);

    /**
     * 获得物料通用流程明细
     *
     * @param id 编号
     * @return 物料通用流程明细
     */
    MaterialLifecycleDetailDO getMaterialLifecycleDetail(Long id);

    /**
     * 获得物料通用流程明细分页
     *
     * @param pageReqVO 分页查询
     * @return 物料通用流程明细分页
     */
    PageResult<MaterialLifecycleDetailDO> getMaterialLifecycleDetailPage(MaterialLifecycleDetailPageReqVO pageReqVO);

    /**
     * 批量保存
     *
     * @param detailDOS 需要保存的列表
     */
    void saveBatch(List<MaterialLifecycleDetailDO> detailDOS);

    /**
     * 根据流程id 删除流程明细数据
     *
     * @param lfcId 流程id
     */
    void deleteLifecycleDetailListByLfcId(Long lfcId);

    /**
     * 根据流程ids 删除流程明细数据
     *
     * @param ids 流程ids
     */
    void deleteLifecycleDetailListByLfcIds(List<Long> ids);

    /**
     * 根据流程id 获取流程明细数据
     *
     * @param lifecycleDO 流程
     * @return 明细列表
     */
    List<MaterialLifecycleDetailRespVO> getDetailListWithPdtInfoByLfcId(MaterialLifecycleDO lifecycleDO);

    /**
     * 根据工段id 获取流程明细数据
     * @param gongduanId 工段id
     * @return 明细数据
     */
    MaterialLifecycleDetailDO getMaterialLifecycleDetailByGongId(Long gongduanId);

    /**
     * 更新流程明细状态
     *
     * @param lfcId 流程id
     * @param isTreat 是否已处理
     */
    void updateDetailTreatStatusByLfcId(Long lfcId, Boolean isTreat);

    /**
     * 根据流程id 获取流程明细数据
     *
     * @param lfcId 流程id
     * @return 明细列表
     */
    List<MaterialLifecycleDetailDO> getDetailListByLfcId(Long lfcId);

    /**
     * 获取未配置的溶液配置申请
     *
     * @param reqVO 查询条件
     * @return 明细列表
     */
    List<MaterialLifecycleDetailRespVO> getNotMakeLifecycleDetailList(@Valid MaterialLifecycleDetailPageReqVO reqVO);

    /**
     * 根据流程ids 获取流程明细数据
     *
     * @param lfcIds 流程ids
     * @return 明细列表
     */
    List<MaterialLifecycleDetailRespVO> getDetailRespVOListByLfcIds(List<Long> lfcIds);

    /**
     * 根据流程明细ids 获取溶液已配置的数量
     *
     * @param detailIds 流程明细ids
     * @return map
     */
    Map<Long, Long> getMadeCountMapByDetailIds(List<Long> detailIds);

    /**
     * 根据流程ids 获取流程明细数据
     *
     * @param lfcIds ids
     * @return 明细列表
     */
    List<MaterialLifecycleDetailDO> getDetailListByLfcIds(List<Long> lfcIds);

    /**
     * 批量更新
     *
     * @param updateReqVO 批量更新信息
     */
    void updateBatchMaterialLifecycleDetail(@Valid List<MaterialLifecycleDetailSaveReqVO> updateReqVO);

    /**
     * 批量更新
     *
     * @param assayDetails 批量实体
     */
    void updateBatch(List<MaterialLifecycleDetailDO> assayDetails);

    /**
     * 根据检化验ids 获取流程明细数据
     *
     * @param id ids
     * @return 明细列表
     */
    List<MaterialLifecycleDetailDO> getDetailListByAsyId(Long id);
}