package com.tmerclub.cloud.order.service;

import com.tmerclub.cloud.api.order.bo.EsAllotOrderBO;
import com.tmerclub.cloud.order.dto.AllotOrderDTO;
import com.tmerclub.cloud.order.vo.AllotOrderVO;
import com.tmerclub.cloud.order.vo.AllotSpuImportVO;
import com.tmerclub.cloud.order.vo.AllotSpuInboundImportVO;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author gaozijie
 * @date 2023-11-20
 */
public interface AllotOrderService {

    /**
     * 获取调拨订单详情
     * @param allotOrderDTO 调拨订单dto
     * @return 调拨订单详情
     */
    AllotOrderVO getAllotOrder(AllotOrderDTO allotOrderDTO);

    /**
     * 新增调拨订单
     * @param allotOrderDTO 调拨订单dto
     */
    void addAllotOrder(AllotOrderDTO allotOrderDTO);

    /**
     * 更新调拨订单
     * @param allotOrderDTO 调拨订单dto
     */
    void updateAllotOrder(AllotOrderDTO allotOrderDTO);

    /**
     * 调拨商品入库
     * @param allotOrderDTO 调拨订单dto
     */
    void inbound(AllotOrderDTO allotOrderDTO);

    /**
     * 完成调拨订单
     * @param allotOrderDTO 调拨订单dto
     */
    void completeOrder(AllotOrderDTO allotOrderDTO);

    /**
     * 作废调拨订单
     * @param allotOrderDTO 调拨订单dto
     */
    void nullifyOrder(AllotOrderDTO allotOrderDTO);

    /**
     * 作废调拨订单（通过仓库Id）
     * @param warehouseId 仓库id
     */
    void nullifyOrderByWarehouseId(Long warehouseId);

    /**
     * 保存mongo数据并获取es数据
     * @param allotOrderId 调拨订单id
     */
    EsAllotOrderBO saveMongoAndGetEsInfo(Long allotOrderId);

    /**
     * 下载商品导入模板
     * @param response 响应
     */
    void downloadModel(HttpServletResponse response);

    /**
     * 解析excel文件
     * @param excelFile excel文件
     * @param allotOrderDTO 调拨订单dto
     * @return excel解析后数据
     */
    AllotSpuImportVO parseFile(MultipartFile excelFile, AllotOrderDTO allotOrderDTO);

    /**
     * 下载商品入库导入模板
     * @param response 响应
     * @param allotOrderDTO 调拨订单dto
     */
    void downloadInboundModel(HttpServletResponse response, AllotOrderDTO allotOrderDTO);

    /**
     * 解析入库excel文件
     * @param excelFile excel文件
     * @param allotOrderDTO 调拨订单dto
     * @return excel解析后的数据
     */
    AllotSpuInboundImportVO parseInboundFile(MultipartFile excelFile, AllotOrderDTO allotOrderDTO);

    /**
     * 统计未完成的调拨订单数量
     * @param warehouseId 仓库id
     * @return 未完成数
     */
    Long countUnFinish(Long warehouseId);
}
