package com.blueland.service;

import com.blueland.bo.DictEntity;
import com.blueland.bo.MenuEntity;
import com.blueland.bo.Org;
import com.blueland.bo.TucStaffEntity;
import com.blueland.model.TUcOrg;
import com.blueland.model.TUcStaff;

import java.util.List;

/**
 * @auther xcy
 * @create 2022-06-14 9:13
 * usm redis统一操作服务类
 */
public interface SysRedisService {

    /**
     * 初始化字典数据
     */
    void initDict();

    /**
     * 更新对应租户的字典数据
     */
    void flushDict();

    /**
     * 新增或更新对应缓存
     *
     * @param model
     */
    void saveOrUpdateDict(DictEntity model);

    /**
     * 根据字典code,父级code获取数据，区分租户
     *
     * @param code
     * @return
     */
    List<DictEntity> getDictListByCode(String code);

    /**
     * 根据父级code获取字典
     * @param parentCode
     * @return
     */
    List<DictEntity> getDictListByParentCode(String parentCode);

    /**
     * 获取字典集合
     * @return
     */
    List<DictEntity> getDictList();

    /**
     * 查询字典
     * @param code
     * @param parentCode
     * @return
     */
    DictEntity getDict(String code, String parentCode);

    /**
     * 根据redis key获取数据
     *
     * @param key
     * @return
     */
    DictEntity getDictByRedisKey(String key);

    /**
     * 初始化角色数据
     */
    void initRole();

    /**
     * 刷新角色数据
     */
    void flushRole();

    /**
     * 根据key删除缓存
     *
     * @param userId
     */
    void removeRoleByKey(String userId);

    /**
     * 新增角色缓存
     */
    void saveRoleCache(String userId, String roleId);

    /**
     * 初始化菜单数据
     */
    void initMenu();

    /**
     * 刷新菜单数据
     */
    void flushMenu();

    /**
     * 更新菜单缓存
     * @param model
     */
    void saveOrUpdateMenu(MenuEntity model);

    /**
     * 初始化菜单id数据
     */
    void initMenuId();

    /**
     * 刷新菜单id数据
     */
    void flushMenuId();

    /**
     * 初始化员工数据
     */
    void initStaff();

    /**
     * 刷新员工数据
     */
    void flushStaff();

    /**
     * 刷新员工数据
     */
    void flushStaff(List<TUcStaff> list);

    /**
     * 新增员工数据
     * @param model
     */
    void saveOrUpdateStaff(TucStaffEntity model);

    /**
     * 移除员工数据
     * @param appId
     * @param staffPostCode
     */
    void removeStaff(String appId, String staffPostCode);

    /**
     * 获取员工集合，区分租户
     * @return
     */
    List<TucStaffEntity> getStaffList();

    /**
     * 获取员工
     * @param staffPostCode
     * @return
     */
    TucStaffEntity getStaff(String staffPostCode);

    /**
     * 获取员工集合
     * @param staffPostCodes
     * @return
     */
    List<TucStaffEntity> getStaffList(List<String> staffPostCodes);

    /**
     * 初始化部门数据
     */
    void initDept();

    /**
     * 刷新部门数据
     */
    void flushDept();

    /**
     * 刷新部门数据
     */
    void flushDept(List<TUcOrg> list);

    /**
     * 更新员工
     * @param org
     */
    void saveOrUpdateDept(Org org);

    /**
     * 删除部门数据
     * @param deptId
     */
    void removeDeptByKey(String appId, String deptId);

    /**
     * 查询部门集合
     * @param deptId
     * @return
     */
    Org getOrg(String deptId);

    /**
     * 查询部门集合
     * @return
     */
    List<Org> getOrgList();

    /**
     * 查询部门集合
     * @param deptIds
     * @return
     */
    List<Org> getOrgList(List<String> deptIds);

}
