diff --git a/dubhe-server/HELP.md b/dubhe-server/HELP.md
new file mode 100644
index 0000000..ee42ad0
--- /dev/null
+++ b/dubhe-server/HELP.md
@@ -0,0 +1,9 @@
+# Getting Started
+
+### Reference Documentation
+For further reference, please consider the following sections:
+
+* [Official Apache Maven documentation](https://maven.apache.org/guides/index.html)
+* [Spring Boot Maven Plugin Reference Guide](https://docs.spring.io/spring-boot/docs/2.4.0/maven-plugin/reference/html/)
+* [Create an OCI image](https://docs.spring.io/spring-boot/docs/2.4.0/maven-plugin/reference/html/#build-image)
+
diff --git a/dubhe-server/admin/pom.xml b/dubhe-server/admin/pom.xml
new file mode 100644
index 0000000..f57082d
--- /dev/null
+++ b/dubhe-server/admin/pom.xml
@@ -0,0 +1,154 @@
+
+
+
+ server
+ org.dubhe
+ 0.0.1-SNAPSHOT
+
+ 4.0.0
+
+ admin
+ Admin 系统服务
+
+
+
+ org.dubhe.biz
+ base
+ ${org.dubhe.biz.base.version}
+
+
+ org.dubhe.biz
+ file
+ ${org.dubhe.biz.file.version}
+
+
+ org.dubhe.biz
+ data-permission
+ ${org.dubhe.biz.data-permission.version}
+
+
+ org.dubhe.biz
+ redis
+ ${org.dubhe.biz.redis.version}
+
+
+
+ org.dubhe.cloud
+ registration
+ ${org.dubhe.cloud.registration.version}
+
+
+
+ org.dubhe.cloud
+ configuration
+ ${org.dubhe.cloud.configuration.version}
+
+
+
+ org.dubhe.cloud
+ swagger
+ ${org.dubhe.cloud.swagger.version}
+
+
+
+ org.dubhe.biz
+ data-response
+ ${org.dubhe.biz.data-response.version}
+
+
+
+ org.dubhe.cloud
+ auth-config
+ ${org.dubhe.cloud.auth-config.version}
+
+
+
+ org.dubhe.cloud
+ remote-call
+ ${org.dubhe.cloud.remote-call.version}
+
+
+
+ org.dubhe.biz
+ log
+ ${org.dubhe.biz.log.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
+
+
+
+ org.mapstruct
+ mapstruct-jdk8
+ ${mapstruct.version}
+
+
+ org.mapstruct
+ mapstruct-processor
+ ${mapstruct.version}
+ provided
+
+
+
+ com.github.whvcse
+ easy-captcha
+ ${easy-captcha.version}
+
+
+
+ org.dubhe
+ common-recycle
+ ${org.dubhe.common-recycle.version}
+
+
+
+ org.dubhe.cloud
+ unit-test
+ ${org.dubhe.cloud.unit-test.version}
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ false
+ true
+ exec
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ true
+
+
+
+
+
+ true
+ src/main/resources
+
+
+
+
\ No newline at end of file
diff --git a/dubhe-server/admin/src/main/java/org/dubhe/admin/AdminApplication.java b/dubhe-server/admin/src/main/java/org/dubhe/admin/AdminApplication.java
new file mode 100644
index 0000000..d4abdf7
--- /dev/null
+++ b/dubhe-server/admin/src/main/java/org/dubhe/admin/AdminApplication.java
@@ -0,0 +1,34 @@
+/**
+ * Copyright 2020 Tianshu AI Platform. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * =============================================================
+ */
+package org.dubhe.admin;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+
+/**
+ * @description Admin启动类
+ * @date 2020-12-02
+ */
+@SpringBootApplication(scanBasePackages = "org.dubhe")
+@MapperScan(basePackages = {"org.dubhe.**.dao"})
+public class AdminApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(AdminApplication.class, args);
+ }
+}
diff --git a/dubhe-server/admin/src/main/java/org/dubhe/admin/client/AuthServiceClient.java b/dubhe-server/admin/src/main/java/org/dubhe/admin/client/AuthServiceClient.java
new file mode 100644
index 0000000..ae26325
--- /dev/null
+++ b/dubhe-server/admin/src/main/java/org/dubhe/admin/client/AuthServiceClient.java
@@ -0,0 +1,54 @@
+/**
+ * Copyright 2020 Tianshu AI Platform. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * =============================================================
+ */
+package org.dubhe.admin.client;
+
+import org.dubhe.admin.client.fallback.AuthServiceFallback;
+import org.dubhe.biz.base.constant.ApplicationNameConst;
+import org.dubhe.biz.base.dto.Oauth2TokenDTO;
+import org.dubhe.biz.base.vo.DataResponseBody;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.Map;
+
+/**
+ * @description feign调用demo
+ * @date 2020-11-04
+ */
+@FeignClient(value = ApplicationNameConst.SERVER_AUTHORIZATION,fallback = AuthServiceFallback.class)
+public interface AuthServiceClient {
+
+ /**
+ * 获取token
+ *
+ * @param parameters 获取token请求map
+ * @return token 信息
+ */
+ @PostMapping(value = "/oauth/token")
+ DataResponseBody postAccessToken(@RequestParam Map parameters);
+
+ /**
+ * 登出
+ * @param accessToken token
+ * @return
+ */
+ @DeleteMapping(value="/oauth/logout")
+ DataResponseBody logout(@RequestParam("token")String accessToken);
+
+}
diff --git a/dubhe-server/admin/src/main/java/org/dubhe/admin/client/fallback/AuthServiceFallback.java b/dubhe-server/admin/src/main/java/org/dubhe/admin/client/fallback/AuthServiceFallback.java
new file mode 100644
index 0000000..5aa0c78
--- /dev/null
+++ b/dubhe-server/admin/src/main/java/org/dubhe/admin/client/fallback/AuthServiceFallback.java
@@ -0,0 +1,55 @@
+/**
+ * Copyright 2020 Tianshu AI Platform. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * =============================================================
+ */
+package org.dubhe.admin.client.fallback;
+
+import org.dubhe.admin.client.AuthServiceClient;
+import org.dubhe.biz.base.vo.DataResponseBody;
+import org.dubhe.biz.dataresponse.factory.DataResponseFactory;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @description Feign 熔断处理类
+ * @date 2020-11-04
+ */
+@Component
+public class AuthServiceFallback implements AuthServiceClient {
+
+
+ /**
+ * 获取token
+ *
+ * @param parameters 获取token请求map
+ * @return token 信息
+ */
+ @Override
+ public DataResponseBody postAccessToken(Map parameters) {
+ return DataResponseFactory.failed("call auth server postAccessToken error ");
+ }
+
+ /**
+ * 退出登录
+ *
+ * @param accessToken token
+ * @return
+ */
+ @Override
+ public DataResponseBody logout(String accessToken) {
+ return DataResponseFactory.failed("call auth server logout error ");
+ }
+}
diff --git a/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/AuthCodeMapper.java b/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/AuthCodeMapper.java
new file mode 100644
index 0000000..f93973d
--- /dev/null
+++ b/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/AuthCodeMapper.java
@@ -0,0 +1,105 @@
+/**
+ * Copyright 2020 Tianshu AI Platform. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * =============================================================
+ */
+package org.dubhe.admin.dao;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.mapping.FetchType;
+import org.dubhe.admin.domain.entity.*;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @description 权限组mapper接口
+ * @date 2021-05-14
+ */
+public interface AuthCodeMapper extends BaseMapper {
+
+
+ /**
+ * 根据角色id查询对应的权限组
+ *
+ * @param queryWrapper role的wrapper对象
+ * @return 角色集合
+ */
+ @Select("select * from role ${ew.customSqlSegment}")
+ @Results(id = "roleMapperResults",
+ value = {
+ @Result(property = "id", column = "id"),
+ @Result(property = "auths",
+ column = "id",
+ many = @Many(select = "org.dubhe.admin.dao.AuthCodeMapper.selectByRoleId", fetchType = FetchType.LAZY))})
+ List selectCollList(@Param("ew") Wrapper queryWrapper);
+
+
+ /**
+ * 给权限组绑定具体的权限
+ *
+ * @param list 权限列表
+ */
+ void tiedWithPermission(List list);
+
+ /**
+ * 清空指定权限组的权限
+ *
+ * @param authId 权限组id
+ */
+ @Delete("delete from auth_permission where auth_id=#{authId} ")
+ void untiedWithPermission(Long authId);
+
+ @Delete("")
+ void untiedByPermissionId(@Param("ids") Set ids);
+
+ /**
+ * 绑定角色权限
+ *
+ * @param roleAuths 角色权限关联DTO
+ */
+ void tiedRoleAuth(List roleAuths);
+
+ /**
+ * 根据角色ID解绑角色权限
+ *
+ * @param roleId 角色ID
+ */
+ @Update("delete from roles_auth where role_id = #{roleId}")
+ void untiedRoleAuthByRoleId(Long roleId);
+
+ /**
+ * 通过权限组id获取权限
+ *
+ * @param authId 权限组id
+ * @return List 权限列表
+ */
+ @Select("select * from permission where id in (select permission_id from auth_permission where auth_id=#{authId}) and deleted=0 order by id")
+ List getPermissionByAuthId(Long authId);
+
+ /**
+ * 根据角色id获取绑定的权限组列表
+ *
+ * @param roleId 角色id
+ * @return 权限组列表
+ */
+ @Select("select * from auth where id in (select auth_id from roles_auth where role_id=#{roleId}) and deleted=0")
+ List selectByRoleId(long roleId);
+
+}
diff --git a/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/DataSequenceMapper.java b/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/DataSequenceMapper.java
new file mode 100644
index 0000000..5930a41
--- /dev/null
+++ b/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/DataSequenceMapper.java
@@ -0,0 +1,59 @@
+/**
+ * Copyright 2020 Tianshu AI Platform. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * =============================================================
+ */
+package org.dubhe.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+import org.dubhe.admin.domain.entity.DataSequence;
+
+/**
+ * @description 数据序列 Mapper
+ * @date 2020-09-23
+ */
+public interface DataSequenceMapper extends BaseMapper {
+ /**
+ * 根据业务编码查询序列
+ * @param businessCode 业务编码
+ * @return DataSequence 序号
+ */
+ @Select("select id, business_code ,start, step from data_sequence where business_code = #{businessCode} for update")
+ DataSequence selectByBusiness(String businessCode);
+
+ /**
+ * 根据业务编码更新序列起始值
+ * @param businessCode 业务编码
+ * @return DataSequence 序号
+ */
+ @Update("update data_sequence set start = start + step where business_code = #{businessCode} ")
+ int updateStartByBusinessCode(String businessCode);
+
+ /**
+ * 查询存在表的记录数
+ * @param tableName 表名
+ * @return int 查询表记录数
+ */
+ @Select("select count(1) from ${tableName}")
+ int checkTableExist(@Param("tableName") String tableName);
+
+ /**
+ * 执行创建表
+ * @param tableName 新表表名
+ * @param oldTableName 模板表表名
+ */
+ @Update({"CREATE TABLE ${tableName} like ${oldTableName}"})
+ void createNewTable(@Param("tableName") String tableName, @Param("oldTableName") String oldTableName);
+
+}
diff --git a/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/DictDetailMapper.java b/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/DictDetailMapper.java
new file mode 100644
index 0000000..c63f0b5
--- /dev/null
+++ b/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/DictDetailMapper.java
@@ -0,0 +1,59 @@
+/**
+ * Copyright 2020 Tianshu AI Platform. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * =============================================================
+ */
+package org.dubhe.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+import org.dubhe.admin.domain.entity.DictDetail;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description 字典详情 mapper
+ * @date 2020-03-26
+ */
+public interface DictDetailMapper extends BaseMapper {
+ /**
+ * 根据字典ID查找
+ *
+ * @param dictId
+ * @return
+ */
+ @Select("select * from dict_detail where dict_id =#{dictId} order by sort")
+ List selectByDictId(Serializable dictId);
+
+ /**
+ * 根据字典ID和标签查找
+ *
+ * @param dictId
+ * @param label
+ * @return
+ */
+ @Select("select * from dict_detail where dict_id=#{dictId} and label=#{label}")
+ DictDetail selectByDictIdAndLabel(Serializable dictId, String label);
+
+ /**
+ * 根据字典ID删除
+ *
+ * @param dictId
+ * @return
+ */
+ @Update("delete from dict_detail where dict_id =#{dictId}")
+ int deleteByDictId(Serializable dictId);
+}
diff --git a/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/DictMapper.java b/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/DictMapper.java
new file mode 100644
index 0000000..587f3da
--- /dev/null
+++ b/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/DictMapper.java
@@ -0,0 +1,81 @@
+/**
+ * Copyright 2020 Tianshu AI Platform. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * =============================================================
+ */
+package org.dubhe.admin.dao;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.mapping.FetchType;
+import org.dubhe.admin.domain.entity.Dict;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description 字典 mapper
+ * @date 2020-03-26
+ */
+public interface DictMapper extends BaseMapper {
+ /**
+ * 查询实体及关联对象
+ *
+ * @param queryWrapper 字典wrapper对象
+ * @return 字典列表
+ */
+ @Select("select * from dict ${ew.customSqlSegment}")
+ @Results(id = "dictMapperResults",
+ value = {
+ @Result(property = "id", column = "id"),
+ @Result(property = "dictDetails",
+ column = "id",
+ many = @Many(select = "org.dubhe.admin.dao.DictDetailMapper.selectByDictId",
+ fetchType = FetchType.LAZY))})
+ List selectCollList(@Param("ew") Wrapper queryWrapper);
+
+ /**
+ * 分页查询实体及关联对象
+ *
+ * @param page 分页对象
+ * @param queryWrapper 字典wrapper对象
+ * @return 分页字典集合
+ */
+ @Select("select * from dict ${ew.customSqlSegment}")
+ @ResultMap(value = "dictMapperResults")
+ IPage selectCollPage(Page page, @Param("ew") Wrapper queryWrapper);
+
+ /**
+ * 根据ID查询实体及关联对象
+ *
+ * @param id 序列id
+ * @return 字典对象
+ */
+ @Select("select * from dict where id=#{id}")
+ @ResultMap("dictMapperResults")
+ Dict selectCollById(Serializable id);
+
+ /**
+ * 根据Name查询实体及关联对象
+ *
+ * @param name 字典名称
+ * @return 字典对象
+ */
+ @Select("select * from dict where name=#{name}")
+ @ResultMap("dictMapperResults")
+ Dict selectCollByName(String name);
+}
diff --git a/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/LogMapper.java b/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/LogMapper.java
new file mode 100644
index 0000000..7c45cf1
--- /dev/null
+++ b/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/LogMapper.java
@@ -0,0 +1,45 @@
+/**
+ * Copyright 2019-2020 Zheng Jie
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.dubhe.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Select;
+import org.dubhe.admin.domain.entity.Log;
+
+/**
+ * @description 获取一个时间段的IP记录
+ * @date 2020-03-25
+ */
+public interface LogMapper extends BaseMapper {
+ /**
+ * 获取一个时间段的IP记录
+ *
+ * @param date1 startTime
+ * @param date2 entTime
+ * @return IP数目
+ */
+ @Select("select count(*) FROM (select request_ip FROM log where create_time between #{date1} and #{date2} GROUP BY request_ip) as s")
+ Long findIp(String date1, String date2);
+
+ /**
+ * 根据日志类型删除信息
+ *
+ * @param logType 日志类型
+ */
+ @Delete("delete from log where log_type = #{logType}")
+ void deleteByLogType(String logType);
+}
diff --git a/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/MenuMapper.java b/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/MenuMapper.java
new file mode 100644
index 0000000..7233fee
--- /dev/null
+++ b/dubhe-server/admin/src/main/java/org/dubhe/admin/dao/MenuMapper.java
@@ -0,0 +1,83 @@
+/**
+ * Copyright 2019-2020 Zheng Jie
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.dubhe.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.SelectProvider;
+import org.dubhe.admin.dao.provider.MenuProvider;
+import org.dubhe.admin.domain.entity.Menu;
+import org.dubhe.biz.base.dto.SysPermissionDTO;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @description 菜单 mapper
+ * @date 2020-04-02
+ */
+public interface MenuMapper extends BaseMapper