package com.prolog.cs.biz.inbound.service;

import com.prolog.cs.biz.inbound.dto.OmsAsnBillSaveByOmsDTO;
import com.prolog.cs.biz.inbound.dto.OmsAsnBillSaveDTO;
import com.prolog.cs.biz.inbound.dto.ReceiveAsnDTO;
import com.prolog.cs.biz.inbound.model.OmsAsnBillD;
import com.prolog.cs.biz.inbound.model.OmsAsnBillH;
import com.prolog.cs.biz.inbound.remote.dto.OmsAsnBillDQueryVO;
import com.prolog.cs.biz.inbound.remote.dto.OmsAsnBillHQueryVO;
import com.prolog.cs.biz.inbound.vo.CancelOrderOmsVO;
import com.prolog.cs.biz.inbound.vo.OmsAsnBillDVO;
import com.prolog.cs.biz.inbound.vo.OmsAsnBillHVO;
import com.prolog.framework.core.pojo.Page;

import java.util.List;
import java.util.Map;

/**
 * @Description
 * @Date 2021-04-11
 */

public interface OmsAsnBillDService {

    /**
     * ASN审核汇总查询
     */
    public Page<OmsAsnBillH> queryOmsAsnBillHAudit(OmsAsnBillHQueryVO vo);

    public Page<OmsAsnBillD> queryOmsAsnBillD(OmsAsnBillDQueryVO vo);

    List<Map<String, Object>> queryOmsAsnBillDRemainQty(OmsAsnBillDQueryVO vo);

    public Object clear(List<String> ids);

    public Object call2erp(String cargoOwnerId, String billNo, String rcvNo, String[] rcvIds);


	public Object autoClear(Integer clearDays, String enterpriseId, String warehouseId, String cargoOwnerId);

    public Object autoClear(Integer clearDays);

    public Object errorHandling(List<Map<String, Object>> errorMap);

    // region add by huanglh

    /**
     * 分页查询ASN主单信息
     *
     * @param query
     * @return
     */
    Page<OmsAsnBillHVO> queryOmsAsnBillH(OmsAsnBillHQueryVO query);

    /**
     * 分页依据主单ID查询ASN明细数据
     *
     * @param billId
     * @param pageSize
     * @param pageNum
     * @return
     */
    Page<OmsAsnBillDVO> queryOmsAsnBillDByBillid(String billId, Integer pageSize, Integer pageNum);

    /**
     * 保存ASN单据主表及明细表信息
     *
     * @param saveDTOs
     */
    void saveOmsAsnBill(List<OmsAsnBillSaveDTO> saveDTOs);


    /**
     * 保存ASN单据主表及明细表信息
     *
     * @param saveDTOs
     */
    void saveAsnBillByOms(List<OmsAsnBillSaveByOmsDTO> saveDTOs);

    /**
     * OMS取消订单
     *
     * @param cancelList
     */
    List<CancelOrderOmsVO> cancelOrderOms(List<CancelOrderOmsVO> cancelList);

    /**
     * 依据BillId查询ASN主表数据
     *
     * @param billId
     * @return
     */
    OmsAsnBillHVO queryOmsAsnBillHById(String billId);

    void pullAsn();

    // endregion

    /**
     * 保存ASN单据主表及明细表信息
     *
     * @param saveDTOs
     */
    void saveAsnBill(List<ReceiveAsnDTO> saveDTOs);

}
