package com.bohuikeji.delivery.backstage.service;

import com.alibaba.fastjson.JSONObject;
import com.bohuikeji.delivery.backstage.entity.TCourier;
import com.bohuikeji.delivery.backstage.entity.TCustomer;
import com.bohuikeji.delivery.backstage.entity.TOrder;
import com.bohuikeji.frame.module.admin.base.ServiceBase;
import com.bohuikeji.frame.module.admin.entity.sys.SysConfig;
import com.bohuikeji.frame.module.admin.entity.vo.AddressVo;
import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 派送员信息表 服务类
 * </p>
 *
 * @author 10552
 * @since 2019-08-22
 */
public interface ITCourierService extends ServiceBase<TCourier> {
    /* 月排行查询*/
    List<TCourier> getMonthRanking();
    /* 周排行查询 */
    List<TCourier> getWeekRanking();
    /* 今日收入 */
    BigDecimal getTodayIncome(Integer id);
    /* 今日接单量 */
    Integer getTordercount(Integer id);
    /* 派送员接单总数 */
    Integer getTotalCount(Integer id);
    /* 派送员未完成订单总数 */
    Integer getNotCompleteCount(Integer id);
    /* 派送员完成订单总数 */
    Integer getCompleteCount(Integer id);
    /* 派送员总收入 */
    BigDecimal getTotalIncomeCount(Integer id);

    /**
     * 获取派送员入驻缴费配置
     * @param id
     * @return
     */
    SysConfig getCourierPrice(Integer id);

    /**
     * 获取缓存中的派送员
     * @param id
     * @return
     */
    TCourier getCacheById(Integer id);

    /**
     * 根据经纬度获取当前派送员的地址
     * @param location
     * @param id
     * @return
     */
    AddressVo getAddress(String location,Integer id);

    /**
     * 判断骑手的缴费金额等级符不符合接单规则
     * @param courier
     * @param order
     * @return
     */
    JSONObject getType(TCourier courier,TOrder order);

    /**
     * 根据配送方式判断骑手可不可以接单
     * @param courier
     * @param order
     * @return
     */
    JSONObject getJson(TCourier courier,TOrder order);

    /**
     * 获取派送员正在进性中的订单列表
     * @param courierId
     * @return
     */
    List<TOrder> getRunOrderList(Integer courierId);

    /**
     * 根据客户信息获取绑定的营销骑手
     * @param customer
     * @return
     */
    TCourier getCourier(TCustomer customer);

    /**
     * 更新骑手活跃时间
     * @param id
     */
    void updateTime(Integer id);

    /**
     * 给当地加盟商下的骑手发送离线消息
     */
    void sendOffLineMgs(TOrder order);

    /**
     * 判断客户账号状态
     * @param courierId
     * @return
     */
    Boolean getCourierStatus(Integer courierId);

    TCourier saveCourier(String phone);
}
