package cn.iocoder.yudao.module.order.service.orderWarehouseCheck;

import cn.iocoder.yudao.framework.mybatis.core.service.IService;
import cn.iocoder.yudao.module.order.dal.dataobject.orderWarehouseCheck.OrderWarehouseCheckDO;
import cn.iocoder.yudao.module.order.vo.orderWarehouseCheck.OrderForceCheck;
import cn.iocoder.yudao.module.order.vo.orderWarehouseCheck.OrderWarehouseCheckUpdateItemVO;
import cn.iocoder.yudao.module.order.vo.orderWarehouseCheck.OrderWarehouseCheckUpdateReqVO;

import java.util.List;

/**
 * 到仓货物详情 Service 接口
 */
public interface OrderWarehouseCheckService extends IService<OrderWarehouseCheckDO> {
    /**
     * 到仓查询. 当前订单到仓信息详情列表
     *
     * @param orderId 订单编号
     * @return 到仓详情列表
     */
    List<OrderWarehouseCheckDO> list(long orderId);


    List<OrderWarehouseCheckDO> listByOrderItemId(long orderItemId);

    /**
     * 订单到仓. 复制入仓信息，到仓订单修改已在缷柜逻辑中
     *
     * @param orderId 订单编号
     */
    void check(long orderId);

    /**
     * 强制到仓. 订单修改为已卸柜/到仓 箱数=入仓箱数(注意：这里对/卸柜到仓箱标号不做处理)
     *
     * @param orderForceCheck 强制到仓信息
     */
    void force(OrderForceCheck orderForceCheck);

    /**
     * 撤销到仓. 修改订单状态为已清关，清空到仓时间箱数以及详情
     *
     * @param orderId 订单编号
     */
    void revoke(long orderId);

    /**
     * 到仓修改. 允许修改到仓后的体积与重量，箱数默认为到仓箱数
     *
     * @param orderId 订单编号
     * @param updates 更新详情
     */
    void update(OrderWarehouseCheckUpdateReqVO checkUpdateReqVO);

    /**
     * 所有符合条件的订单全部强制到仓
     */
    void allForce();
}
