package com.sckw.transport.api.dubbo;

import com.sckw.core.web.response.HttpResult;
import com.sckw.transport.api.model.dto.AcceptCarriageLogisticsOrderDto;
import com.sckw.transport.api.model.dto.RawOreOrderExecutionDto;
import com.sckw.transport.api.model.dto.TradeOrderWaybillAggDto;
import com.sckw.transport.api.model.dto.AccountCheckingBindDTO;
import com.sckw.transport.api.model.dto.RWaybillOrderDto;
import com.sckw.transport.api.model.param.*;
import com.sckw.transport.api.model.vo.*;

import java.util.List;
import java.util.Set;

/**
 * @author lfdc
 * @version 1.0
 * @className TransportRemoteService
 * @description 物流订单dubbo
 * @company sckw
 * @date 2023-07-17 10:06:27
 */
public interface TransportRemoteService {

    /**
     * 根据id 获取主表详情
     *
     * @param ids
     * @return
     */
    List<KwtLogisticsOrderVO> getAcceptCarriageOrderDetail(List<String> ids);

    /**
     * 根据id 对账页面需要的数据
     *
     * @param ids
     * @return
     */
    List<AcceptCarriageLogisticsOrderDto> getAcceptCarriageOrderList(List<String> ids);

    /**
     * 获取物流订单中地址信息
     *
     * @return
     */
    List<Integer> getLogisticsOrderAddressList();

    /**
     * 贸易订单验证物流订单是否已完成
     *
     * @param tOrderId 贸易订单id
     * @return
     */
    boolean checkLogisticsOrderByTradeOrderId(Long tOrderId);

    /**
     * 对账修改物流订单信息
     *
     * @param logisticsOrderParam 请求物流订单数据
     * @return
     */
    HttpResult checkLogisticsOrderStatusById(LogisticsOrderParam logisticsOrderParam);

    /**
     * 运费对账是否进行对账绑定数据
     *
     * @param accountCheckingBindDTO 物流订单id集合    是否绑定 0:未绑定 1:已绑定
     * @return
     */
    HttpResult logisticsOrderAccountCheckingBind(AccountCheckingBindDTO accountCheckingBindDTO);

    /**
     * 根据企业id 判断是否存在未完成完结的物流订单
     *
     * @param entId 企业id
     * @return ture 代表还有未完结的  false代表没有未完结的
     */
    boolean checkLogisticsOrderFinishByEntId(Long entId);

    /**
     * 根据企业id 判断是否存在未完成完结的物流订单
     *
     * @param consignEntId        托运企业id
     * @param acceptCarriageEntId 承运企业id
     * @return 根据data是否为空判断 是否存在未完结订单  空  不存在  不为空  存在
     */
    HttpResult checkLogisticsOrderIsFinishByEntId(Long consignEntId, Long acceptCarriageEntId);

    /**
     * 合同变更，修改物流订单状态【仅仅支持待签约变更为已签约】  0 已签约 1待签约
     *
     * @param param
     */
    void contractSignLogisticsCompleted(ContractSignLogisticsParam param);

    /**
     * @param params 参数
     * @desc 查询车辆运单
     * @author zk
     * @date 2023/9/6
     **/
    List<RWaybillOrderVo> findWaybillOrder(RWaybillOrderDto params);

    /**
     * @param checkEntId 托运企业ID
     * @desc 查询托运方关联任务中的车辆
     * @author zk
     * @date 2023/10/8
     **/
    List<RTruckMonitorVo> truckInTask(Long checkEntId);


    /**
     * 物流订单发起对账状态变更
     *
     * @param params 请求参数
     */
    HttpResult logisticsOrderInitiateReconciliationUpdateStatus(UpdateOrderStatusDto params);

    List<RWaybillOrderVo> queryWaybillOrderByEntId(Long entId);

    /**
     * 根据贸易订单集合查询物流公司
     * @param tradeOrderIds 贸易订单集合
     * @return 物流公司
     */
    List<RTransportEntVo> queryTransportEnt(Set<Long> tradeOrderIds);

    List<RWaybillSubOrderVo> queryWaybillOrderByTradeOrderIds(Set<Long> tradeOrderIds);

    /**
     * 根据贸易订单查询物流合同
     * @param tradeId 贸易订单
     * @return 物流合同
     */
    List<LogisticContractVo> queryLogisticContractByTradeId(Long tradeId);
    /**
     * 根据贸易订单查询物流合同
     * @param tradeId 贸易订单
     * @return 物流公司
     */
    List<RTransportEntVo> queryTransportEntByTradeOrderId(Long tradeId);

    /**
     * 根据贸易订单查询物流订单
     * @param tradeId 贸易订单id
     */
    List<KwtLogisticsOrderVO> queryLogisticOrderByTradeId(Long tradeId);

    List<KwtLogisticsOrderVO> queryTransportEntByEntId(Long entId);

    /**
     * 查询物流订单已派运力车辆
     * @param param
     * @return
     */
    List<CapacityTruckVO> queryCapacityTruck(CapacityTruckParam param);

    /**
     * 查询物流运单已派运力车辆
     * @param param
     * @return
     */
    List<RWaybillOrderVo> queryWaybillOrder(CapacityTruckParam param);

    /**
     *新增物流订单
     * @param param 请求参数
     */
    Integer addLogisticOrder(AddLogisticOrderParam param);

    /**
     * 完结订单
     */
    Boolean logisticOrderFinish( OrderFinishParam req);

    /**
     * 获取物流订单列表
     * @param param 订单列表参数
     * @return 订单列表
     */
    List<KwtLogisticsOrderVO> getLogisticOrderList(OrderFinishParam param);

    /**
     * 根据物流合同id获取运单
     * @param logContractIds 物流合同id集合
     *@return 运单
     */
    List<RWaybillSubOrderVo> queryWaybillOrderByLogContractIds(Set<Long> logContractIds);

    /**
     * 查询司机的当天完成量、7天完成量、30天完成量
     * @param entId 企业id
     *@return 运单
     */
    WaybillOrderTaskVO queryWaybillOrderTaskByDriverId(Long entId, Long driverId);


    RWaybillOrderVo queryWaybillOrderByWayBillOrderId(Long wayBillOrderId);

    WaybillOrderSubtaskVo queryWaybillOrderId(Long wayBillOrderId);

    List<KwtLogisticsOrderAddressVo> queryByWOrderId(Long wayBillOrderId);

    List<WayContaractbillOrderVo> queryLogisticContractByContTradeIds(Set<Long> contractIds);
    Long queryLogisticsCount(Long entId,Integer type);
    Long queryWaybillCount();
    Long queryCount();

    List<LogisticsVo> logisticsList();

    LogisticsDto logisticsRank(TimePara timePara);

    WaybillOrderDetailVo auditLogisticsTask(LogisticsOrderAuditPara para);

    Object countLogistics(CountPara2 countPara);

    List<LogisticContractVo> queryLogOrderCirculateByLogOrderId(Long tradeOrderId);

    /**
     * 按贸易订单汇总：状态为「已完成」的车辆运单数量及子单净重合计（吨）
     *
     * @param tOrderIds 贸易订单 id 列表（建议按展示顺序传入，返回值顺序与入参一致）
     */
    List<TradeOrderWaybillAggDto> aggregateCompletedWaybillStatsByTradeOrderIds(List<Long> tOrderIds);

    /**
     * Query raw ore logistics order execution display data.
     *
     * @param entIds enterprise ids visible to the public dashboard
     * @param limit maximum row count
     * @return raw ore logistics order execution data
     */
    List<RawOreOrderExecutionDto> listRawOreOrderExecutionDisplay(List<Long> entIds, int limit);
}
