package com.prolog.cs.biz.outbound.dao;

import com.prolog.cs.biz.outbound.model.dto.BillDTO;
import com.prolog.cs.biz.outbound.model.dto.BillMergeDTO;
import com.prolog.cs.biz.outbound.model.entity.WaveBillDO;
import com.prolog.cs.biz.outbound.model.print.LclDetailHeadVO;
import com.prolog.cs.biz.outbound.model.vo.check.WavePendingBillVO;
import com.prolog.framework.dao.mapper.BaseMapper;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

@Repository
public interface WaveBillMapper extends BaseMapper<WaveBillDO> {
    void deleteByWaveId(@Param("waveId") String waveId);

    List<WaveBillDO> queryBills(@Param("warehouseId") String warehouseId,
                                @Param("waveId") String waveId,
                                @Param("billCode") String billCode,
                                @Param("consignorId") String consignorId);

    BigDecimal getTotalWeight(@Param("waveId") String waveId, @Param("billId") String billId);

    BigDecimal getTotalVolume(@Param("waveId") String waveId, @Param("billId") String billId);

    BigDecimal getTotalQty(@Param("waveId") String waveId, @Param("billId") String billId);

    long getNumOfBill(@Param("waveId") String waveId);

    long getNumOfItem(@Param("billId") String billId);

    Map<String, Object> getTotalInfo(@Param("waveId") String waveId, @Param("billId") String billId);

    List<WavePendingBillVO> getPendingBill(@Param("warehouseId") String warehouseId,
                                           @Param("waveId") String waveId,
                                           @Param("billCode") String billCode,
                                           @Param("consignorId") String consignorId,
                                           @Param("type") String type);

    long updateBillInfo(BillDTO billDTO);

    List<WaveBillDO> query(BillDTO billDTO);

    List<WaveBillDO> queryForMerge(BillMergeDTO billMergeDTO);

    List<WaveBillDO> getBillsForDistribute(@Param("waveId") String waveId,@Param("billId") String billId);

    List<LclDetailHeadVO> getLclDetaiHeadForPrint(@Param("billGroupId") String billGroupId);

    List<String> getBillDIdList(@Param("srcCodes") List<String> srcCodes,@Param("waveId") String waveId,@Param("warehouseId") String warehouseId);

    Integer getAgvPickCount(@Param("billGroupId") String billGroupId,@Param("warehouseId") String warehouseId);

    long updateBillPriority(@Param("priority")Integer priority,@Param("billGroupId") String billGroupId,@Param("warehouseId") String warehouseId);

    /**
     * 查询订单 是否已组波次
     * @param billIds
     * @return
     */
    List<String> getWaveByBillid(@Param("billIds") List<String> billIds);
}
