package com.sckw.transport.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sckw.core.model.vo.TableTop;
import com.sckw.transport.model.KwtWaybillOrderV1;
import com.sckw.transport.model.dto.OrderCarDTO;
import com.sckw.transport.model.dto.WaybillOrderQueryDto;
import com.sckw.transport.model.dto.WaybillSubtaskOrderQueryDto;
import com.sckw.transport.model.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * @author zk
 * @desc 车辆运单
 * @date 2023/10/16
 */
@Mapper
public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {

    /**
     * 查询统计
     *
     * @param params 查询参数
     * @return 统计数据
     */
    List<TableTop> statistics(WaybillOrderQueryDto params);

    /**
     * 查询统计
     *
     * @param params 查询参数
     * @return 统计数据
     */
    List<WaybillOrderSelectVo> findListPage(WaybillOrderQueryDto params);

    /**
     * 查询统计
     *
     * @param params 查询参数
     * @return 统计数据
     */
    List<WaybillOrderSelectVo> findCapacityListPage(WaybillSubtaskOrderQueryDto params);

    /**
     * 司机端任务统计
     *
     * @param driverId 司机ID
     * @return 统计数据
     */
    Map<String, Object> findStatisticsCountByDriver(@Param("driverId") Long driverId, @Param("specialEntIds") List<Long> specialEntIds);

    /**
     * 司机端查询运单
     *
     * @param params {driverId 司机ID, busStatus  1待接单/2出车/3执行/4完结, month月份, startTime 开始实际, endTime 结束时间}
     * @return 返回值
     */
    List<WaybillOrderSubtaskVo> findWaybillOrderSubtask(Map<String, Object> params);

    /**
     * 查询统计司机或车辆关联订单数量信息
     *
     * @param driverId 司机ID
     * @param truckId  车辆ID
     * @return 统计信息
     */
    WaybillCountVo findCountByDriverOrTruck(@Param("driverId") Long driverId, @Param("truckId") Long truckId);

    /**
     * 查询统计运单数量信息
     *
     * @param lOrderId 物流订单ID
     * @return 统计信息
     */
    WaybillCountVo findCountByLOrderId(@Param("lOrderId") Long lOrderId);

    /**
     * 查询统计司机或车辆关联订单运量信息
     *
     * @param driverId 司机ID
     * @param truckId  车辆ID
     * @return 统计信息
     */
    WaybillCountVo findAmountByDriverOrTruck(@Param("driverId") Long driverId, @Param("truckId") Long truckId);

    /**
     * 查询统计车辆关联订单未完结数量
     *
     * @param type    运单类型
     * @param truckId 车辆ID
     * @return 统计信息
     */
    WaybillCountVo findUnfinishedByTruck(@Param("type") int type, @Param("truckId") Long truckId);

    /**
     * 查询统计物流订单运量(地址关联)
     *
     * @param params {
     *               upperlOrderId 下级分包物流订单,
     *               lOrderId 物流订单id,
     *               wAddressIds 运单地址ID集,
     *               passStatus 运单审核通过状态,
     *               type  榜单装卸货类型
     *               }
     * @return 统计信息
     */
    WaybillCountVo findTicketCountByAddress(Map<String, Object> params);

    /**
     * 计算地址下所有的运单榜单上的运量
     *
     * @param params {
     *               wAddressIds 运单地址ID集,
     *               type  榜单装卸货类型
     *               unit 单位
     *               }
     * @return 统计信息
     */
    WaybillCountVo findTicketAmountByAddress(Map<String, Object> params);

    /**
     * 易订单id查找相关联车辆信息
     *
     * @param params {tOrderIds 贸易订单ID, page , pageSize}
     * @return 车辆信息
     */
    List<OrderCarDTO> selectWaybillOrderCarPage(Map<String, Object> params);

    /**
     * 查询车辆运单
     *
     * @param params {driverId 司机ID, truckNo车牌号, busStatus 状态 2出车/3执行/4完结}
     * @return 运单信息
     * @desc 查询车辆运单
     * @author zk
     * @date 2023/9/6
     **/
    List<KwtWaybillOrderV1> findWaybillOrder(Map<String, Object> params);

    WaybillCountVo findWaybillOrderCount(Map<String, Object> map);

    int selectDataByLorderId(@Param("id") String id, @Param("statusList") List<Integer> statusList);

    int selectDataByLorderIds(@Param("list") List<Long> longList, @Param("status") Integer status);

    /**
     * 查询订单
     *
     * @param orderId    订单id
     * @param type       类型
     * @param statusList 状态集
     * @return 订单信息
     */
    Map<String, Object> selectOrderByOrderId(@Param("orderId") Long orderId,
                                             @Param("type") Integer type,
                                             @Param("statusList") List<Long> statusList);

    /**
     * 统计物流订单的车辆运单
     *
     * @param lOrderId 物流订单订单ID
     * @return 统计信息
     */
    int findWaybillOrderCountByLOrderId(@Param("lOrderId") Long lOrderId);

    WaybillOrderSaleDto saleSum(@Param("list") List<String> list, @Param("date")LocalDateTime date,@Param("end")LocalDateTime end);

}
