package com.sckw.system.api;

import com.sckw.core.web.response.result.PageDataResult;
import com.sckw.system.api.model.dto.req.ActualDisPatchDto;
import com.sckw.system.api.model.dto.req.SingleTripTotalTimeDto;
import com.sckw.system.api.model.dto.res.*;

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

/**
 * @desc: 基础信息远程接口
 * @author: czh
 * @date: 2023/6/19
 */
public interface RemoteSystemService {

    /**
     * @param keys type#value,type#value
     * @return Map<String, SysDictResDto>
     * @desc: 根据类型id查字典，先查redis，没查到查数据库，查出来了存redis
     * @author: czh
     * @date: 2023/7/5
     */
    Map<String, SysDictResDto> queryDictMapByTypeValues(String keys);

    /**
     * @param type 类型
     * @return Map<String, SysDictResDto>
     * @desc: 根据类型id查字典，先查redis，没查到查数据库，查出来了存redis
     * @author: czh
     * @date: 2023/7/5
     */
    Map<String, SysDictResDto> queryDictMapByType(String type);

    /**
     * @param type 类型
     * @return SysDictResDto
     * @desc: 根据类型id查字典，先查redis，没查到查数据库，查出来了存redis
     * @author: czh
     * @date: 2023/7/5
     */
    List<SysDictResDto> queryDictByType(String type);

    /**
     * @param type 类型
     * @return SysDictResDto
     * @desc: 根据类型id查字典，先查redis，没查到查数据库，查出来了存redis
     * @author: czh
     * @date: 2023/7/5
     */
    Map<String, Map<String, String>> queryDictByType(List<String> type);

    DictProduct queryProductName(String value);

    /**
     * @param type 字典类型，value key
     * @return SysDictResDto
     * @desc: 根据字典类型和key查
     * @author: czh
     * @date: 2023/7/7
     */
    SysDictResDto queryDictByTypeAndValue(String type, String value);

    /**
     * @param type 字典类型
     * @return SysDictResDto
     * @desc: 根据字典类型和key查字典
     * @author: czh
     * @date: 2023/7/7
     */
    List<SysDictGroupResDto> queryDictGroupByType(String type);

    /**
     * @param type 字典类型 value key
     * @return SysDictResDto
     * @desc: 根据字典类型和key查最底层的数据
     * @author: czh
     * @date: 2023/7/7
     */
    List<SysDictResDto> queryDictBottom(String type, String value);

    List<SysDictResDto> queryGoodsDict(String keywords);

    /**
     * @param type 字典类型 value key
     * @return SysDictResDto
     * @desc: 根据字典类型和key的数据
     * @author: czh
     * @date: 2023/7/7
     */
    List<SysDictResDto> queryDictFrontAll(String type, String value);

    /**
     * @param type 字典类型，value key
     * @return SysDictGroupResDto
     * @desc: 根据字典类型和key查字典组
     * @author: czh
     * @date: 2023/7/7
     */
    SysDictGroupResDto queryDictGroupByTypeAndValue(String type, String value);

    /**
     * @param entId 企业id
     * @return EntCacheResDto
     * @desc: 从缓存查企业信息
     * @author: czh
     * @date: 2023/7/7
     */
    EntCacheResDto queryEntCacheById(Long entId);

    /**
     * @desc: 从缓存批量查企业信息
     * @author: yzc
     * @date: 2023-07-10 8:59
     * @Param entIds:
     * @return: java.util.List<com.sckw.system.api.model.dto.res.EntCacheResDto>
     */
    List<EntCacheResDto> queryEntCacheByIds(List<Long> entIds);

    /**
     * @param entIds 企业id
     * @return Map
     * @desc: 从缓存批量主体机构信息
     * @author: czh
     * @date: 2023/7/22
     */
    Map<Long, List<EntCacheResDto>> queryEntDeptCacheByIds(List<Long> entIds);

    /**
     * @desc: 从缓存批量查企业信息
     * @author: yzc
     * @date: 2023-07-10 8:59
     * @Param entIds
     * @return: Map
     */
    Map<Long, EntCacheResDto> queryEntCacheMapByIds(List<Long> entIds);

    /**
     * @param entName 企业名
     * @return EntCacheResDto
     * @desc: 从缓存查企业信息 模糊匹配
     * @author: czh
     * @date: 2023/7/7
     */
    List<EntCacheResDto> queryEntCacheByName(String entName);

    /**
     * @param entIdList 企业id集合
     * @return Map<Long, EntCacheResDto>
     * @desc: 查企业树
     * @author: czh
     * @date: 2023/7/17
     */
    Map<Long, EntCacheResDto> queryEntTreeByIds(List<Long> entIdList);

    /**
     * @param entPid 父级企业id
     * @return List<KwsEntDeptDto>
     * @desc: 查下级企业
     * @author: czh
     * @date: 2023/7/17
     */
    List<KwsEntDeptDto> queryEntDeptByPid(Long entPid);

    /**
     * @param entId 企业id
     * @return EntCacheResDto
     * @desc: 查企业树
     * @author: czh
     * @date: 2023/7/17
     */
    EntCacheResDto queryEntTreeById(Long entId);

    /**
     * @param entName 企业名称
     * @return EntCacheResDto
     * @desc: 查企业
     * @author: czh
     * @date: 2023/7/17
     */
    EntCacheResDto queryEntByName(String entName);

    /**
     * @param userId 用户id
     * @return UserCacheResDto
     * @desc: 从缓存查用户信息
     * @author: czh
     * @date: 2023/7/7
     */
    UserCacheResDto queryUserCacheById(Long userId);

    UserResDto queryUserById(Long userId);

    UserResDto queryUserByPhone(String phone);

    /**
     * @desc: 从缓存查用户信息
     * @author: yzc
     * @date: 2023-07-10 17:59
     * @Param userIds:
     * @return: java.util.List<com.sckw.system.api.model.dto.res.UserCacheResDto>
     */
    List<UserCacheResDto> queryUserCacheByIds(List<Long> userIds);

    /**
     * @desc: 从缓存查用户信息
     * @author: yzc
     * @date: 2023-07-10 17:59
     * @Param userIds: 用户id
     * @return: Map
     */
    Map<Long, UserCacheResDto> queryUserCacheMapByIds(List<Long> userIds);

    /**
     * @desc: 从缓存查区域信息
     * @author: yzc
     * @date: 2023-07-11 11:45
     * @Param code:
     * @return: com.sckw.system.api.model.dto.res.SysAreaCacheResDto
     */
    SysAreaCacheResDto queryAreaCacheById(Integer code);

    /**
     * @param list 地址code集合
     * @return AreaTreeFrontResDto
     * @desc: 向上查找区域树
     * @author: czh
     * @date: 2023/8/2
     */
    List<AreaTreeFrontResDto> queryAreaTreeFrontByCodeList(List<Integer> list);

    /**
     * @param entId 企业id
     * @return UserCacheResDto
     * @desc: 根据企业id查客户经理信息
     * @author: czh
     * @date: 2023/7/11
     */
    UserCacheResDto queryManagerInfoByEntId(Long entId);

    /**
     * @param entId 企业ID
     * @desc 企业详情(企业登录 / 司机登录)
     * @author zk
     * @date 2023/8/10
     **/
    EntCacheResDto queryEntDetails(Long entId);

    /**
     * @param account    账号
     * @param systemType 系统类型
     * @desc 用户详情(企业端登录 / 运营端登录)
     * @author zk
     * @date 2023/8/10
     **/
    KwsUserResDto queryUserDetails(String account, Integer systemType);

    /**
     * @desc 查询专场集
     * @author zk
     * @date 2023/12/14
     **/
    List<SpecialResVo> querySpecial();

    /**
     * @param code 专场编号
     * @param type 企业类型
     * @desc 专场编号查询关联企业ID
     * @author zk
     * @date 2023/12/16
     **/
    List<Long> queryEntIdsByCode(String code, String type);

    /**
     * @param code 专场编号
     * @desc 专场编号查询是否为主平台
     * @author zk
     * @date 2023/12/16
     **/
    boolean queryMainPlatform(String code);

    /**
     * 企业主键id查询数据库企业信息
     *
     * @param entIds 企业id查询数据库企业信息
     * @return
     */
    Map<Long, KwsEnterpriseResDto> queryEnterpriseByEntIds(List<Long> entIds);

    KwsEnterpriseResDto findEnterpriseByName(String consignCompany);

    PageDataResult<KwsEnterpriseResDto> pageEnt(int pageNum, int pageSize, Long entId);

    KwsEnterpriseResDto queryEnterpriseByEntId(Long entId);

    List<KwsEnterpriseResDto> queryEntListByEntIds(List<Long> entIds);

    EntTypeResDto queryEntTypeById(Long entId);


    KwsRoleDto queryByRoleIdAndEntId(Long currentRoleId);

    List<EntTypeResDto> queryEntTypeByIds(Set<Long> entIds);

    /**
     * 计算平台配置的运单单趟总耗时
     *
     * @param dto
     * @return
     */
    Integer calSingleTripTotalTimes(SingleTripTotalTimeDto dto);

    /**
     * 计算平台配置贸易订单实际派车数
     *
     * @param dto
     */
    Integer getActualDisPatch(ActualDisPatchDto dto);

    KwsUserResDto queryByAccount(String account);

    List<KwsUserResDto> queryByEntId(Long entId);

    KwsUserResDto queryByUserId(Long userId);
}
