package com.gic.haoban.manage.service.service.role;

import com.gic.haoban.manage.service.entity.role.TabHaobanMenu;
import com.gic.haoban.manage.service.pojo.bo.role.HaobanMenuBO;

import java.util.List;

/**
 * @author mozhu
 * @since 2022-09-06 16:35:11
 */
public interface HaobanMenuService {

    /**
     * 通过ID查询单条数据
     *
     * @param menuCode 菜单代码
     * @return {@link TabHaobanMenu }
     * @author mozhu
     * @date 2022-09-09 16:33:26
     */
    TabHaobanMenu queryById(String menuCode);

    /**
     * 新增数据
     *
     * @param tabHaobanMenu 实例对象
     * @return 实例对象
     */
    int insert(TabHaobanMenu tabHaobanMenu);

    int insertBatch(List<TabHaobanMenu> tabHaobanMenus);

    /**
     * 修改数据
     *
     * @param tabHaobanMenu 实例对象
     * @return 实例对象
     */
    int update(TabHaobanMenu tabHaobanMenu);

    /**
     * 得到所有菜单列表
     *
     * @return {@link List}<{@link HaobanMenuBO}>
     */
    //无效接口
//    List<String> getAllMenuCodeList();

    List<HaobanMenuBO> getAllMenuList();

    /**
     * 菜单树
     *
     * @return
     */
    List<HaobanMenuBO> getMenuTreeList();

    /**
     * 得到haoban菜单树列表
     *
     * @param wxEnterpriseId wx企业标识
     * @param clerkType      职员类型
     * @return {@link List}<{@link HaobanMenuBO}>
     */
    List<HaobanMenuBO> getHaobanMenuTreeList(String wxEnterpriseId, Integer clerkType);


    /**
     * 得到haoban菜单列表
     *
     * @param wxEnterpriseId wx企业标识
     * @param clerkType      职员类型
     * @return {@link List}<{@link HaobanMenuBO}>
     */
    List<String> getHaobanMenuList(String wxEnterpriseId, Integer clerkType);


    /**
     * 获取子菜单（包含自己）
     *
     * @param menuCodes 菜单代码
     * @return {@link List}<{@link String}>
     */
    List<String> getHaobanMenuByPid(List<String> menuCodes);


    /**
     * 获取有权限的菜单列表
     */
    List<HaobanMenuBO> getHaobanMenuList(List<String> menuCodes);

    HaobanMenuBO getMenuByCode(String menuCode);

    void deleteAll();
}
