package com.ruoyi.orderPlan.service;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.orderPlan.domain.Ftmsorderbills;
import com.ruoyi.orderPlan.domain.Ftmsorderbillscars;
import com.ruoyi.orderPlan.domain.FtmsorderbillscarsExcel;
import com.ruoyi.orderPlan.domain.VehicleLedgerExcel;

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

/**
 * 车队派车Service接口
 *
 * @author ruoyi
 * @date 2021-02-22
 */
public interface IftmsorderbillscarsService {
    /**
     * 查询车队派车
     *
     * @param id 车队派车ID
     * @return 车队派车
     */
    public Map<String, Object> selectftmsorderbillscarsById(Long id);

    /**
     * 查询车队派车列表
     *
     * @param ftmsorderbillscars 车队派车
     * @return 车队派车集合
     */
    public List<Ftmsorderbillscars> selectftmsorderbillscarsList(Ftmsorderbillscars ftmsorderbillscars);

    /**
     *  新增车队派车
     * @param plans     调度数据
     * @param attachs   附件表
     * @param fees      费用
     * @param cars      车辆
     * @param billType  状态
     * @param loginUser 操作人
     * @return  结果
     */
    public AjaxResult insertftmsorderbillscars(String plans, String attachs, String fees, String cars, String billType, LoginUser loginUser);

    /**
     * 修改车队派车
     *
     * @param ftmsorderbillscars 车队派车
     * @return 结果
     */
    public int updateftmsorderbillscars(Ftmsorderbillscars ftmsorderbillscars);

    /**
     * 批量删除车队派车
     *
     * @param ids 需要删除的车队派车ID
     * @return 结果
     */
    public int deleteftmsorderbillscarsByIds(Long[] ids);

    /**
     * 删除车队派车信息
     *
     * @param id 车队派车ID
     * @return 结果
     */
    public int deleteftmsorderbillscarsById(Long id);

    /**
     *  单条车辆安排提交接口
     *
     * @param status
     * @param ftmsorderbillscars    车辆安排数据
     * @param loginUser 当前操作用户
     * @return  结果
     */
    public AjaxResult vehicleArrangement(String status, Ftmsorderbillscars ftmsorderbillscars, LoginUser loginUser);

    /**
     *  查询司机状态跟踪列表
     * @param ftmsorderbills    条件
     * @return  结果
     */
    public List<FtmsorderbillscarsExcel> selectftmsorderbillscarsMapList(Ftmsorderbills ftmsorderbills);

    /**
     * 费用修改的查询司机状态跟踪列表
     * @param ftmsorderbills
     * @return
     */
    public List<FtmsorderbillscarsExcel> selectftmsorderbillscarsMapListModify(Ftmsorderbills ftmsorderbills);

    /**
     *  司机操作接单/提箱/装卸货/还卸柜/回单操作  保存
     * @param cars          派车
     * @param attachs       附件
     * @param operationType 状态
     * @return  结果
     */
    public AjaxResult driverSave(String cars, String fees, String attachs, String operationType);

    /**
     *  司机操作接单/提箱/装卸货/还卸柜/回单操作  提交
     * @param cars          派车
     * @param attachs       附件
     * @param operationType 状态
     * @return  结果
     */
    public AjaxResult insertDriver(String cars, String attachs, String operationType);

    /**
     *  司机操作接单/提箱/装卸货/还卸柜/回单操作  变更
     * @param cars              司机信息
     * @param operationType     操作类型
     * @param loginUser         用户
     * @return  结果
     */
    public AjaxResult operationalChanges(String cars, String operationType, LoginUser loginUser);

    /**
     *  车辆安排 变更
     * @param id        安排id
     * @return  结果
     */
    public AjaxResult vehicleOperationChanges(Long id);

    /**
     *  车辆派车主表变更
     * @param id            调度id
     * @param loginUser     用户
     * @return  结果
     */
    public AjaxResult dispatchChange(Long id, LoginUser loginUser);

    /**
     * 根据司机id查询详细信息
     * @param ftmsorderbillscars     用户id
     * @return  结果
     */
    public Map<String, Object> selectDriver(Ftmsorderbillscars ftmsorderbillscars);

    public Map<String, Object> selectDriverModify(Ftmsorderbillscars ftmsorderbillscars);

    /**
     * 根据手机号查询司机的
     * 新订单、本月订单、本月历程、本月运费
     * @param phoneNumber   手机号
     * @return  结果
     */
    public AjaxResult selectDriverPerformance(String phoneNumber);

    /**
     *  根据查询条件查询 状态跟踪列表页 按钮数据
     * @return  结果
     */
    public Map<String, Object> getButtonValue();

    /**
     *  判断当前用户是否为车队、是否是司机
     * @param ftmsorderbills
     * @return
     */
    public Ftmsorderbills judgmentFleet(Ftmsorderbills ftmsorderbills);

    /**
     *  状态跟踪提交
     * @param cars      车辆信息
     * @param fees      费用信息
     * @param attachs   附件信息
     * @return  结果
     */
    public AjaxResult driverSubmit(String cars, String fees, String attachs);

    /**
     *  查询车辆可配载运单
     * @param ftmsorderbillscars
     */
    public List<Map<String, Object>> selectStowageList(Ftmsorderbillscars ftmsorderbillscars);

    /**
     *  撤销车辆配载
     * @param id    车辆id
     * @return  结果
     */
    public AjaxResult revokeStowage(Long id);

    /**
     *  提交车辆配载
     * @param ftmsorderbillscars    车辆信息
     * @return  结果
     */
    public AjaxResult addStowage(Ftmsorderbillscars ftmsorderbillscars);


    /**
     *自动配载
     * @param sourceId 来源ID,待插入数据ID,执行逻辑:插入数据,单据类型为分单,主单号为原来车辆的运单号
     * @param targetId 目标ID,待处理数据ID,执行逻辑:单据类型 变为主单
     * @return
     * dongyongwei 20210713
     */
    public AjaxResult autoStowage(Long sourceId,Long targetId);

    /**
     *  查询陆运台账列表信息
     * @param vehicleLedgerExcel    查询条件
     * @return  结果
     */
    public List<VehicleLedgerExcel> queryLedgerList(VehicleLedgerExcel vehicleLedgerExcel);
}
