package com.njcn.product.system.theme.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.product.system.theme.pojo.param.FunctionParam;
import com.njcn.product.system.theme.pojo.param.RoleParam;
import com.njcn.product.system.theme.pojo.po.Function;
import com.njcn.product.system.theme.pojo.vo.FunctionVO;


import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author hongawen
 * @since 2021-12-13
 */
public interface IFunctionService extends IService<Function> {

    /**
     * 刷新用户权限信息到缓存中
     */
    void refreshRolesFunctionsCache();

    /**
     * 功能描述:新增资源
     *
     * @param functionParam 资源参数
     * @return boolean
     * @author xy
     * @date 2022/1/17 11:19
     */
    boolean addFunction(FunctionParam functionParam);

    /**
     * 功能描述: 修改菜单
     *
     * @param functionParam
     * @return boolean
     * @author xy
     * @date 2022/1/17 14:23
     */
    boolean updateFunction(FunctionParam.FunctionUpdateParam functionParam);

    /**
     * 功能描述:删除菜单
     *
     * @param id
     * @return boolean
     * @author xy
     * @date 2022/1/17 16:53
     */
    void deleteFunction(String id);

    /**
     * 功能描述: 获取菜单树
     *
     * @param
     * @return java.util.List<com.njcn.user.pojo.vo.FunctionVO>
     * @author xy
     * @date 2022/1/17 17:04
     */
    List<FunctionVO> getFunctionTree();

    /**
     * 功能描述: 根据id获取菜单详情
     *
     * @param id
     * @return com.njcn.user.pojo.po.Function
     * @author xy
     * @date 2022/1/17 17:39
     */
    Function getFunctionById(String id);

    /**
     * 功能描述: 根据菜单id获取按钮
     *
     * @param id
     * @return java.util.List<com.njcn.user.pojo.po.Function>
     * @author xy
     * @date 2022/1/17 17:40
     */
    List<Function> getButtonsById(String id);

    /**
     * 功能描述: 获取路由菜单
     *
     * @param
     * @return java.util.List<com.njcn.user.pojo.vo.FunctionVO>
     * @author xy
     * @date 2022/1/18 13:47
     */
    List<FunctionVO> getRouteMenu();

    /**
     * 功能描述: 角色分配菜单
     *
     * @param roleFunctionComponent
     * @return java.util.List<com.njcn.user.pojo.vo.FunctionVO>
     * @author xy
     * @date 2022/2/17 17:00
     */
    Boolean updateRoleComponent(RoleParam.RoleFunctionComponent roleFunctionComponent);

    /**
     * 功能描述: 获取用户菜单树
     *
     * @param
     * @return java.util.List<com.njcn.user.pojo.vo.FunctionVO>
     * @author xy
     * @date 2022/2/21 11:29
     */
    List<FunctionVO> getUserFunctionTree();

    /**
     * 根据菜单集合获取数据
     * @author xy
     */
    List<Function> getFunctionByList(List<String> list);

}
