package com.sckw.transport.api.dubbo;

import com.sckw.core.web.response.HttpResult;
import com.sckw.transport.api.model.dto.AccountCheckingBindDTO;
import com.sckw.transport.api.model.dto.AddressResDTO;
import com.sckw.transport.api.model.dto.LogisticsOrderDTO;
import com.sckw.transport.api.model.dto.RWaybillOrderDto;
import com.sckw.transport.api.model.param.ContractSignLogisticsParam;
import com.sckw.transport.api.model.param.LogisticsOrderParam;
import com.sckw.transport.api.model.vo.KwtLogisticsOrderVO;
import com.sckw.transport.api.model.vo.RTruckMonitorVo;
import com.sckw.transport.api.model.vo.RWaybillOrderVo;
import java.util.List;
import java.util.Map;

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

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

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

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

    /**
     * 根据企业id获取物流订单地址信息
     *
     * @param entId 企业id
     * @return
     */
    List<AddressResDTO> getLogisticsOrderAddressListByEntId(Long entId);

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

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

    /**
     * 根据企业id获取物流订单地址信息
     *
     * @param entIds 企业id
     * @return
     */
    Map<Long, List<AddressResDTO>> getLogisticsOrderAddressListByEntId(List<Long> entIds);

    /**
     * 运费对账是否进行对账绑定数据
     *
     * @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);
}
