/*
*  Copyright 2019-2020 Zheng Jie
*
*  Licensed under the Apache License, Version 2.0 (the "License");
*  you may not use this file except in compliance with the License.
*  You may obtain a copy of the License at
*
*  http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*/
package com.youchain.businessdata.service;

import com.youchain.basicdata.domain.Area;
import com.youchain.basicdata.domain.Point;
import com.youchain.basicdata.domain.Stock;
import com.youchain.basicdata.service.dto.StockQueryCriteria;
import com.youchain.businessdata.domain.InventoryLog;
import com.youchain.businessdata.domain.ItemKey;
import com.youchain.businessdata.service.dto.InventoryLogDto;
import com.youchain.businessdata.service.dto.InventoryLogQueryCriteria;
import com.youchain.businessdata.service.vo.InventoryExcelDto;
import com.youchain.businessdata.service.vo.InventoryExcelVO;
import org.springframework.data.domain.Pageable;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;

/**
* @website https://eladmin.vip
* @description 服务接口
* @author houjianlan
* @date 2023-08-31
**/
public interface InventoryLogService {

    /**
    * 查询数据分页
    * @param criteria 条件
    * @param pageable 分页参数
    * @return Map<String,Object>
    */
    Map<String,Object> queryAll(InventoryLogQueryCriteria criteria, Pageable pageable);

    /**
    * 查询所有数据不分页
    * @param criteria 条件参数
    * @return List<InventoryLogDto>
    */
    List<InventoryLogDto> queryAll(InventoryLogQueryCriteria criteria);

    /**
     * 根据ID查询
     * @param id ID
     * @return InventoryLogDto
     */
    InventoryLogDto findById(Long id);

    /**
    * 创建
    * @param resources /
    * @return InventoryLogDto
    */
    InventoryLogDto create(InventoryLog resources);

    /**
    * 编辑
    * @param resources /
    */
    void update(InventoryLog resources);

    /**
    * 多选删除
    * @param ids /
    */
    void deleteAll(Long[] ids);

    /**
    * 导出数据
    * @param all 待导出的数据
    * @param response /
    * @throws Exception /
    */
    void download(List<InventoryLogDto> all, HttpServletResponse response) throws Exception, Exception;
    InventoryLog storeInventoryLog(String logType, String incDec, String relatedBill, Area area,ItemKey itemKey, Point srcPoint, Point dstPoint,
                                   Stock srcStock, Stock dstStock, Double srcQty, Double occurQty, String stockCode,
                                   String xpp,String refObj, Long refObjId, Long invId, String description);
    InventoryLog storeInventoryLog(String logType, String incDec, String relatedBill, Area area, ItemKey itemKey, Point srcPoint, Point dstPoint,
                                   Point zzkw, Double srcQty, Double occurQty,
                                   String xpp, String refObj, Long refObjId, Long invId, String description);

    /**
     * 游标分页
     *
     * @param lastId   每页的最后一个id
     * @param pageSize 每页数量
     * @param criteria 查询参数
     * @return List<Stock>
     */
    List<InventoryExcelDto> listByInventoryLogs(Long lastId, int pageSize, InventoryLogQueryCriteria criteria);

    /**
     * 导出
     * @param criteria 查询参数
     * @param response 请求
     */
    void exportInventoryLogs(InventoryLogQueryCriteria criteria, HttpServletResponse response) throws IOException;

}