package com.hys.app.service.erp;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hys.app.framework.database.BaseQueryParam;
import com.hys.app.framework.database.WebPage;
import com.hys.app.framework.database.mybatisplus.base.BaseService;
import com.hys.app.model.erp.dos.OrderDO;
import com.hys.app.model.erp.dos.OrderSendDO;
import com.hys.app.model.erp.dto.OrderDTO;
import com.hys.app.model.erp.dto.OrderQueryParams;
import com.hys.app.model.erp.dto.WarehouseOutShipDTO;
import com.hys.app.model.erp.enums.OrderStatusEnum;
import com.hys.app.model.erp.vo.OrderVO;
import com.hys.app.model.erp.vo.ProductVO;
import com.hys.app.service.kuaidiniao.entity.AddressDTO;
import com.hys.app.service.kuaidiniao.entity.PreOrderModel;
import com.hys.app.service.kuaidiniao.entity.PreOrderModelDTO;
import com.hys.app.service.kuaidiniao.entity.resReturnBackBase;

import java.util.List;

/**
 * 订单业务层接口
 *
 * @author 张崧
 * 2024-01-24 15:58:31
 */
public interface OrderManager extends BaseService<OrderDO> {
    /**
     * 分页列表
     *
     * @param queryParams 查询条件
     * @return 分页数据
     */
    WebPage<OrderVO> list(OrderQueryParams queryParams);

    /**
     * 添加
     *
     * @param orderDTO 新增数据
     */
    Long add(OrderDTO orderDTO);

    /**
     * 编辑
     *
     * @param orderDTO 更新数据
     */
    void edit(OrderDTO orderDTO);

    /**
     * 查询详情
     *
     * @param id 主键
     * @return 详情数据
     */
    OrderVO getDetail(Long id);

    /**
     * 删除
     *
     * @param id 主键集合
     */
    void delete(Long id);


    /**
     * 订单发货
     *
     * @param shipDTO 发货参数
     */
    void warehouseOutShip(WarehouseOutShipDTO shipDTO);

    /**
     * 提交
     *
     * @param id 订单id
     */
    void submit(Long id);


    /**
     * 已发货列表
     *
     * @param queryParams
     */
    IPage<OrderSendDO> hasSendOrder(OrderQueryParams queryParams);


    /**
     * 发货 改变订单状态  生成出货单 扣减库存
     *
     * @param orderId
     */
    void orderSend(Long orderId, PreOrderModelDTO orderSendDO);

    /**
     * 获取发货单详情
     *
     * @param id
     * @return
     */
    OrderSendDO getSendOrderDetail(String id);

    OrderVO getOneBySn(String sn);

    void extension(Long orderId, OrderDTO orderDTO);

    /**
     * 首页查询待发货的订单
     *
     * @param queryParam
     * @return
     */
    resReturnBackBase toBeSendOrder(BaseQueryParam queryParam);

    /**
     * 保存发货单
     *
     * @param orderSendId
     * @param orderSendDO
     */
    void saveOrderSend(Long orderSendId, PreOrderModelDTO orderSendDO);
}

