package com.hnshituo.core.auth.service;

import java.util.List;

import com.hnshituo.basic.service.BaseService;
import com.hnshituo.core.auth.vo.Function;

public interface FunctionService extends BaseService<Function, Integer> {

	/**
	 * 输出功能数据，包括功能按钮，不包含菜单
	 * 本方法受功能权限控制
	 * @return
	 */
//	public List<Function> findFuncByPrv() throws Exception;
	
	/**
	 * 输出树菜单数据，不包括功能按钮
	 * 供前端主页面菜单栏显示调用
	 * 本功能受权限控制，登录用户所在角色拥有哪些权限，则显示哪些菜单
	 * @return
	 */
//	public List<Function> findTree() throws Exception;
	
	/**
	 * 输出所有菜单数据，包括无需显示的菜单，且不考虑权限
	 * @return
	 */
	public List<Function> findTreeAll();
	
	/**
	 * 根据roleId输出所有菜单数据，包括无需显示的菜单。
	 * 当该role拥有该功能的权限时，返回集合中Function的属性checked为true,否则为false
	 * @param roleId 角色编号
	 * @return
	 */
	public List<Function> findTreeByRoleId(Integer roleId);
	
	/**
	 * 根据pid，查询该菜单下所有功能按钮的数据
	 * @param pid
	 * @return
	 */
	public List<Function> findFunctions(Integer pid);
	
	/**
	 * 根据父菜单的ID查询所有该ID下所有子菜单的数据（包含菜单及功能按钮）
	 * @param pid
	 * @return
	 */
	public List<Function> findByPid(Integer pid);
	
	/**
	 * 修改菜单，并返回该菜单的数据
	 * @param t
	 * @return
	 * @throws Exception
	 */
	public Function modify(Function t) throws Exception;
	
	/**
	 * 拖动菜单
	 * 重新指定菜单所在父菜单的位置
	 * 该菜单的新的父菜单ID可能与原先不一致
	 * @param id	需要更改的function的id
	 * @param pid	更改后该function的pid
	 * @param ids	更改后该function的父菜单下所有子菜单的id数组。需按数组顺序重新更新其SEQ
	 */
	public void dragMenu(int id, int pid, int[] ids);
	
	/**
	 * 按数组顺序重新更新SEQ
	 * @param ids
	 */
	public void reordering(int[] ids);
	
	/**
	 * 检查是否存在指定url的功能
	 * @param url
	 * @return
	 */
	public boolean hasFunction(String url);
	
	/**
	 * 检查该功能是否开启了数据权限
	 * @param url
	 * @return
	 */
	public boolean isOpenDataPrg(String url) throws Exception;
	
	/**
	 * 获取该功能数据权限字段
	 * @param url
	 * @return
	 * @throws Exception
	 */
	public String getDataPrgField(String url) throws Exception;
}
