package cn.iocoder.yudao.module.system.service.biz;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.biz.vo.material.MaterialInfoPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.biz.vo.material.MaterialInfoRespVO;
import cn.iocoder.yudao.module.system.controller.admin.biz.vo.material.MaterialInfoSaveReqVO;
import cn.iocoder.yudao.module.system.controller.admin.biz.vo.material.MaterialInfoUpdateStatusReqVO;
import cn.iocoder.yudao.module.system.controller.admin.biz.vo.material.excel.MaterialInfoImportExcelVO;
import cn.iocoder.yudao.module.system.dal.dataobject.biz.MaterialInfoDO;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;

/**
 * 物资信息 Service 接口
 */
public interface MaterialInfoService {

    /**
     * 创建物资信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createMaterialInfo(@Valid MaterialInfoSaveReqVO createReqVO);

    /**
     * 更新物资信息
     *
     * @param updateReqVO 更新信息
     */
    void updateMaterialInfo(@Valid MaterialInfoSaveReqVO updateReqVO);

    /**
     * 更新物资信息状态
     *
     * @param reqVO 更新状态信息
     */
    void updateMaterialInfoStatus(@Valid MaterialInfoUpdateStatusReqVO reqVO);

    /**
     * 删除物资信息
     *
     * @param id 编号
     */
    void deleteMaterialInfo(Long id);

    /**
     * 获得物资信息
     *
     * @param id 编号
     * @return 物资信息
     */
    MaterialInfoRespVO getMaterialInfo(Long id);

    /**
     * 获得物资信息分页（带关联表信息）
     *
     * @param pageReqVO 分页查询
     * @return 物资信息分页（包含关联的类别名称、仓库名称、供应商名称）
     */
    PageResult<MaterialInfoRespVO> getMaterialInfoPage(MaterialInfoPageReqVO pageReqVO);

    List<MaterialInfoRespVO> getMaterialList(Long tenantId);

    /**
     * 导入物资信息
     *
     * @param list 导入数据列表
     * @return 导入结果（成功数量、失败数量、失败数据）
     */
    Map<String, Object> importMaterialInfoExcel(List<MaterialInfoImportExcelVO> list);

}

