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

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.assets.dto.AssetAllocationDTO;
import cn.iocoder.yudao.module.system.controller.admin.assets.vo.*;
import cn.iocoder.yudao.module.system.dal.dataobject.assets.AssetsDO;
import cn.iocoder.yudao.module.system.dal.dataobject.assets.DeptAssetsInOutStockDO;

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

/**
 * 部门资产出入库 Service 接口
 *
 * @author 艾楷
 */
public interface DeptAssetsInOutStockService {

    /**
     * 创建部门资产出入库
     *
     * @param outDeptId
     * @return 编号
     */
    DeptAssetsInOutStockVO createDeptAssetsInOutStock(Long outDeptId, List<DeptAssetsInOutStockSaveReqVO> vos);

    /**
     * 更新部门资产出入库
     *
     * @param updateReqVO 更新信息
     */
    void updateDeptAssetsInOutStock(@Valid DeptAssetsInOutStockSaveReqVO updateReqVO);

    /**
     * 删除部门资产出入库
     *
     * @param id 编号
     */
    void deleteDeptAssetsInOutStock(Long id);

    /**
     * 获得部门资产出入库
     *
     * @param id 编号
     * @return 部门资产出入库
     */
    DeptAssetsInOutStockDO getDeptAssetsInOutStock(Long id);

    /**
     * 获得部门资产出入库分页
     *
     * @param pageReqVO 分页查询
     * @return 部门资产出入库分页
     */
    PageResult<DeptAssetsInOutStockRespVO> getDeptAssetsInOutStockPage(DeptAssetsInOutStockPageReqVO pageReqVO);

    /**
     * 记录出入库
     *
     * @param assetsDO
     * @param outDeptId
     * @param assetAllocationDTOS
     */
    void assetAllocation(AssetsDO assetsDO, Long outDeptId, List<AssetAllocationDTO> assetAllocationDTOS);

    /**
     * 根据资产id分组 查询部门资产出入库记录
     *
     * @param deptId
     * @param assetsId
     * @return
     */
    List<InOutStockGroupByAssetsIdVO> getInOutStockGroupByAssetsId(Long deptId, Long assetsId);
}