diff --git a/pom.xml b/pom.xml
index eea7a7d..ff9db2d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
com.common.base
base
- 1.1.0-beta1
+ 1.2.0-beta1
jar
common-base
基础包
diff --git a/src/main/java/com/common/base/common/utils/ObjectUtil.java b/src/main/java/com/common/base/common/utils/ObjectUtil.java
index d603579..4de1d44 100644
--- a/src/main/java/com/common/base/common/utils/ObjectUtil.java
+++ b/src/main/java/com/common/base/common/utils/ObjectUtil.java
@@ -1,18 +1,25 @@
package com.common.base.common.utils;
+import com.common.base.common.ServiceException;
+import com.common.base.module.data.annotation.DataIgnore;
import com.common.base.module.data.module.DataMap;
import org.springframework.util.StringUtils;
import javax.persistence.Id;
import javax.persistence.Table;
import java.lang.reflect.Field;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
public class ObjectUtil {
private static final String SERIAL_VERSION_UID = "serialVersionUID";
+ private static final String STRING = "class java.lang.String";
+ private static final String INTEGER = "class java.lang.Integer";
+ private static final String LONG = "class java.lang.LONG";
public static Map objToMap(Object obj) {
Map map = new HashMap();
@@ -32,9 +39,10 @@ public class ObjectUtil {
return map;
}
- public static void objToSqlMap(Object obj, DataMap dataMap) {
- Map map = new HashMap();
+ public static void objToSqlMap(Object obj, DataMap dataMap) {
Class> clazz = obj.getClass();
+ Map map = new HashMap(clazz.getDeclaredFields().length);
+ List fieldList = new ArrayList<>();
if (clazz.getAnnotation(Table.class) != null) {
Table table = clazz.getAnnotation(Table.class);
dataMap = dataMap.toBuilder().tableName(table.name()).build();
@@ -46,20 +54,26 @@ public class ObjectUtil {
dataMap = dataMap.toBuilder().pkName(com.common.base.common.utils.StringUtils.toUnderScoreUpperCase(fieldName)).build();
}
try {
- if (!StringUtils.isEmpty(field.get(obj)) && !fieldName.equals(SERIAL_VERSION_UID)) {
- Object value = field.get(obj);
- map.put(com.common.base.common.utils.StringUtils.toUnderScoreUpperCase(fieldName), value);
+ if (!fieldName.equals(SERIAL_VERSION_UID)) {
+ if (!StringUtils.isEmpty(field.get(obj))) {
+ Object value = field.get(obj);
+ map.put(com.common.base.common.utils.StringUtils.toUnderScoreUpperCase(fieldName), value);
+ }
+ if (field.getAnnotation(DataIgnore.class) == null) {
+ fieldList.add(com.common.base.common.utils.StringUtils.toUnderScoreUpperCase(fieldName));
+ }
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
- dataMap = dataMap.toBuilder().data(map).build();
+ dataMap.toBuilder().data(map).fieldList(fieldList).build();
}
- public static void objToSqlMap(Object obj, DataMap.DataMapBuilder dataMap) {
- Map map = new HashMap();
+ public static void objToSqlMap(Object obj, DataMap.DataMapBuilder dataMap) {
Class> clazz = obj.getClass();
+ Map map = new HashMap(clazz.getDeclaredFields().length);
+ List fieldList = new ArrayList<>();
if (clazz.getAnnotation(Table.class) != null) {
Table table = clazz.getAnnotation(Table.class);
dataMap = dataMap.tableName(table.name());
@@ -71,14 +85,46 @@ public class ObjectUtil {
dataMap = dataMap.pkName(com.common.base.common.utils.StringUtils.toUnderScoreUpperCase(fieldName));
}
try {
- if (!StringUtils.isEmpty(field.get(obj)) && !fieldName.equals(SERIAL_VERSION_UID)) {
- Object value = field.get(obj);
- map.put(com.common.base.common.utils.StringUtils.toUnderScoreUpperCase(fieldName), value);
+ if (!fieldName.equals(SERIAL_VERSION_UID)) {
+ if (!StringUtils.isEmpty(field.get(obj))) {
+ Object value = field.get(obj);
+ map.put(com.common.base.common.utils.StringUtils.toUnderScoreUpperCase(fieldName), value);
+ }
+ if (field.getAnnotation(DataIgnore.class) == null) {
+ fieldList.add(com.common.base.common.utils.StringUtils.toUnderScoreUpperCase(fieldName));
+ }
}
+
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
- dataMap.data(map);
+ dataMap.data(map).fieldList(fieldList);
}
+
+ public static void setField(Object obj, String key, Object value) {
+ Class> clazz = obj.getClass();
+ try {
+ Field field = clazz.getDeclaredField(key);
+ field.setAccessible(true);
+ String str = field.getGenericType().toString();
+ if (STRING.equals(str)) {
+ value = value.toString();
+ }
+ if (INTEGER.equals(str)) {
+ value = Integer.valueOf(value.toString());
+ }
+ if (LONG.equals(str)) {
+ value = Long.valueOf(value.toString());
+ }
+ try {
+ field.set(obj, value);
+ } catch (IllegalAccessException e) {
+ throw new ServiceException("字段类型不匹配", e);
+ }
+ } catch (NoSuchFieldException e) {
+ throw new ServiceException("无法找到相应的字段", e);
+ }
+ }
+
}
diff --git a/src/main/java/com/common/base/common/utils/StringUtils.java b/src/main/java/com/common/base/common/utils/StringUtils.java
index 2af082d..3812384 100644
--- a/src/main/java/com/common/base/common/utils/StringUtils.java
+++ b/src/main/java/com/common/base/common/utils/StringUtils.java
@@ -411,6 +411,7 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
}
public static void main(String[] args) {
- System.out.println(toUnderScoreUpperCase("userId"));
+ Long l = 1l;
+ System.out.println(l.toString());
}
}
diff --git a/src/main/java/com/common/base/module/auth/constants/AuthConstants.java b/src/main/java/com/common/base/module/auth/constants/AuthConstants.java
new file mode 100644
index 0000000..60df06c
--- /dev/null
+++ b/src/main/java/com/common/base/module/auth/constants/AuthConstants.java
@@ -0,0 +1,94 @@
+package com.common.base.module.auth.constants;
+
+/**
+ * @author lhc
+ * @date 2020-12-10
+ * @decription 权限常亮信息
+ */
+public class AuthConstants {
+ /**
+ * 平台内系统用户的唯一标志
+ */
+ public static final String SYS_USER = "SYS_USER";
+
+ /**
+ * 正常状态
+ */
+ public static final String NORMAL = "0";
+
+ /**
+ * 异常状态
+ */
+ public static final String EXCEPTION = "1";
+
+ /**
+ * 用户封禁状态
+ */
+ public static final String USER_DISABLE = "1";
+
+ /**
+ * 角色封禁状态
+ */
+ public static final String ROLE_DISABLE = "1";
+
+ /**
+ * 部门正常状态
+ */
+ public static final String DEPT_NORMAL = "0";
+
+ /**
+ * 部门停用状态
+ */
+ public static final String DEPT_DISABLE = "1";
+
+ /**
+ * 字典正常状态
+ */
+ public static final String DICT_NORMAL = "0";
+
+ /**
+ * 是否为系统默认(是)
+ */
+ public static final String YES = "Y";
+
+ /**
+ * 是否菜单外链(是)
+ */
+ public static final String YES_FRAME = "1";
+
+ /**
+ * 是否菜单外链(否)
+ */
+ public static final String NO_FRAME = "0";
+
+ /**
+ * 菜单类型(目录)
+ */
+ public static final String TYPE_DIR = "M";
+
+ /**
+ * 菜单类型(菜单)
+ */
+ public static final String TYPE_MENU = "C";
+
+ /**
+ * 菜单类型(按钮)
+ */
+ public static final String TYPE_BUTTON = "F";
+
+ /**
+ * Layout组件标识
+ */
+ public final static String LAYOUT = "Layout";
+
+ /**
+ * 非Layout菜单组件标识
+ */
+ public final static String UN_LAYOUT = "un-layout/index.vue";
+
+ /**
+ * 校验返回结果码
+ */
+ public final static String UNIQUE = "0";
+ public final static String NOT_UNIQUE = "1";
+}
diff --git a/src/main/java/com/common/base/module/auth/controller/AuthFunctionController.java b/src/main/java/com/common/base/module/auth/controller/AuthFunctionController.java
new file mode 100644
index 0000000..1b3f990
--- /dev/null
+++ b/src/main/java/com/common/base/module/auth/controller/AuthFunctionController.java
@@ -0,0 +1,44 @@
+package com.common.base.module.auth.controller;
+
+import com.common.base.common.ResultVO;
+import com.common.base.module.auth.entity.OsSysMenu;
+import com.common.base.module.auth.service.AuthFunctionService;
+import com.common.base.module.auth.service.MenuService;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author lhc
+ * @date 2020-12-09
+ * @decription 权限接口
+ */
+@RestController
+@Api(tags = "权限管理")
+@RequestMapping("auth/function")
+public class AuthFunctionController {
+
+ @Autowired
+ AuthFunctionService authService;
+
+ @Autowired
+ MenuService menuService;
+
+
+ @GetMapping("menu")
+ public ResultVO getMenuResult() {
+ List menus = menuService.getMenuResult();
+ return ResultVO.getSuccess(menuService.formatMenu(menus));
+ }
+
+ @PostMapping("menu")
+ public ResultVO addAuthResult(OsSysMenu osSysMenu) {
+ return ResultVO.getSuccess(menuService.add(osSysMenu));
+ }
+
+}
diff --git a/src/main/java/com/common/base/module/auth/controller/FtUserController.java b/src/main/java/com/common/base/module/auth/controller/FtUserController.java
new file mode 100644
index 0000000..52987c4
--- /dev/null
+++ b/src/main/java/com/common/base/module/auth/controller/FtUserController.java
@@ -0,0 +1,58 @@
+package com.common.base.module.auth.controller;
+
+import com.common.base.common.ResultVO;
+import com.common.base.module.auth.service.FtUserService;
+import com.common.base.module.log.annotation.LogAnno;
+import com.common.base.module.shiro.service.ShiroService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * (FtUser)表控制层
+ *
+ * @author lhc
+ * @since 2020-02-11 19:29:10
+ */
+@RestController
+@Api(tags = "用户相关接口")
+@RequestMapping("ftUser")
+public class FtUserController {
+ /**
+ * 服务对象
+ */
+ @Autowired
+ private FtUserService ftUserService;
+
+ @Autowired
+ ShiroService shiroService;
+
+ @ApiOperation(value = "用户登陆")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "username", value = "用户名", required = true),
+ @ApiImplicitParam(name = "password", value = "密码", required = true),
+ })
+ //@LogAnno(operateType = "用户登录")
+ @PostMapping("login")
+ public ResultVO login(HttpServletRequest request, String username, String password) {
+ return ftUserService.login(request, username, password);
+ }
+
+ @LogAnno(operateType = "用户登出", isBefore = true)
+ @ApiOperation(value = "用户登出")
+ @PostMapping("/logout")
+ public ResultVO logOut(HttpServletRequest request) {
+ String token = request.getHeader("X-Access-Token");
+ shiroService.logout(token);
+ return ResultVO.getSuccess();
+ }
+
+
+}
diff --git a/src/main/java/com/common/base/module/auth/dao/FtUserDao.java b/src/main/java/com/common/base/module/auth/dao/FtUserDao.java
new file mode 100644
index 0000000..d850f78
--- /dev/null
+++ b/src/main/java/com/common/base/module/auth/dao/FtUserDao.java
@@ -0,0 +1,14 @@
+package com.common.base.module.auth.dao;
+
+import com.common.base.common.Mapper;
+import com.common.base.module.auth.entity.FtUser;
+
+/**
+ * (FtUser)表数据库访问层
+ *
+ * @author lhc
+ * @since 2020-02-11 19:29:10
+ */
+public interface FtUserDao extends Mapper {
+
+}
diff --git a/src/main/java/com/common/base/module/auth/dao/OsSysMenuDao.java b/src/main/java/com/common/base/module/auth/dao/OsSysMenuDao.java
new file mode 100644
index 0000000..a2d173f
--- /dev/null
+++ b/src/main/java/com/common/base/module/auth/dao/OsSysMenuDao.java
@@ -0,0 +1,17 @@
+package com.common.base.module.auth.dao;
+
+import com.common.base.common.Mapper;
+import com.common.base.module.auth.entity.OsSysMenu;
+
+import java.util.List;
+
+/**
+ * 菜单权限表(OsSysMenu)表数据库访问层
+ *
+ * @author makejava
+ * @since 2020-12-09 09:57:20
+ */
+public interface OsSysMenuDao extends Mapper {
+
+ List selectMenu();
+}
diff --git a/src/main/java/com/common/base/module/auth/entity/FtUser.java b/src/main/java/com/common/base/module/auth/entity/FtUser.java
new file mode 100644
index 0000000..18d7860
--- /dev/null
+++ b/src/main/java/com/common/base/module/auth/entity/FtUser.java
@@ -0,0 +1,74 @@
+package com.common.base.module.auth.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * (FtUser)实体类
+ *
+ * @author lhc
+ * @since 2020-09-23 13:49:30
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder(toBuilder = true)
+@Data
+@Table(name = "FT_USER")
+public class FtUser implements Serializable {
+ private static final long serialVersionUID = -44415286580890701L;
+ /**
+ * 主键ID
+ */
+ @Id
+ @GeneratedValue(generator="JDBC")
+ private Integer userId;
+ /**
+ * 用户名
+ */
+ private String username;
+ /**
+ * 密码
+ */
+ private String password;
+ /**
+ * 手机号
+ */
+ private String phone;
+ /**
+ * 用户类型,0未验证用户,1外部,2内部,3企业
+ */
+ private Integer userType;
+ /**
+ * 启用/禁用
+ */
+ private Integer enabled;
+ /**
+ * 用户信息主键
+ */
+ private Integer userInfoId;
+ /**
+ * 创建时间
+ */
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+ /**
+ * 修改时间
+ */
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ private Integer orgId;
+
+}
diff --git a/src/main/java/com/common/base/module/auth/entity/OsSysMenu.java b/src/main/java/com/common/base/module/auth/entity/OsSysMenu.java
new file mode 100644
index 0000000..ab85044
--- /dev/null
+++ b/src/main/java/com/common/base/module/auth/entity/OsSysMenu.java
@@ -0,0 +1,114 @@
+package com.common.base.module.auth.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Table;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 菜单权限表(OsSysMenu)实体类
+ *
+ * @author makejava
+ * @since 2020-12-09 09:57:20
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder(toBuilder = true)
+@Data
+@Table(name = "OS_SYS_MENU")
+public class OsSysMenu implements Serializable {
+ private static final long serialVersionUID = -36592644935215591L;
+
+ public static final String M = "M";
+ public static final String C = "C";
+ public static final String F = "F";
+ public static final String I = "I";
+
+
+ /**
+ * 菜单ID
+ */
+ private Long menuId;
+ /**
+ * 菜单名称
+ */
+ private String menuName;
+ /**
+ * 父菜单ID
+ */
+ private Long parentId;
+ /**
+ * 显示顺序
+ */
+ private Integer orderNum;
+ /**
+ * 路由地址
+ */
+ private String path;
+ /**
+ * 组件路径
+ */
+ private String component;
+ /**
+ * 是否为外链(0是 1否)
+ */
+ private String isFrame;
+ /**
+ * 是否缓存(0缓存 1不缓存)
+ */
+ private String isCache;
+ /**
+ * 菜单类型(M目录 C菜单 F按钮)
+ */
+ private String menuType;
+ /**
+ * 菜单状态(0显示 1隐藏)
+ */
+ private String visible;
+ /**
+ * 菜单状态(0正常 1停用)
+ */
+ private String status;
+ /**
+ * 权限标识
+ */
+ private String perms;
+ /**
+ * 菜单图标
+ */
+ private String icon;
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+ /**
+ * 更新时间
+ */
+ private Date updateTime;
+ /**
+ * 备注
+ */
+ private String remark;
+ /**
+ * if true, will always show the root menu (default is false)
+ * if false, hide the root menu when has less or equal than one children route
+ */
+ private String alwaysShow;
+
+ /**
+ * if false, the item will be hidden in breadcrumb (default is true)
+ */
+ private String breadcrumb;
+ /**
+ * if true, the tag will affix in the tags-view
+ */
+ private String affix;
+
+ private List children;
+
+}
diff --git a/src/main/java/com/common/base/module/auth/service/AuthFunctionService.java b/src/main/java/com/common/base/module/auth/service/AuthFunctionService.java
new file mode 100644
index 0000000..a8b4775
--- /dev/null
+++ b/src/main/java/com/common/base/module/auth/service/AuthFunctionService.java
@@ -0,0 +1,5 @@
+package com.common.base.module.auth.service;
+
+public interface AuthFunctionService {
+
+}
diff --git a/src/main/java/com/common/base/module/auth/service/FtUserService.java b/src/main/java/com/common/base/module/auth/service/FtUserService.java
new file mode 100644
index 0000000..c1859a7
--- /dev/null
+++ b/src/main/java/com/common/base/module/auth/service/FtUserService.java
@@ -0,0 +1,18 @@
+package com.common.base.module.auth.service;
+
+
+import com.common.base.common.ResultVO;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * (FtUser)表服务接口
+ *
+ * @author lhc
+ * @since 2020-02-11 19:29:10
+ */
+public interface FtUserService {
+
+ ResultVO login(HttpServletRequest request, String username, String password);
+
+}
diff --git a/src/main/java/com/common/base/module/auth/service/MenuService.java b/src/main/java/com/common/base/module/auth/service/MenuService.java
new file mode 100644
index 0000000..c3972ae
--- /dev/null
+++ b/src/main/java/com/common/base/module/auth/service/MenuService.java
@@ -0,0 +1,16 @@
+package com.common.base.module.auth.service;
+
+
+import com.common.base.module.auth.entity.OsSysMenu;
+import com.common.base.module.auth.vo.RouterVo;
+
+import java.util.List;
+
+public interface MenuService {
+
+ List getMenuResult();
+
+ List formatMenu(List menus);
+
+ Object add(OsSysMenu osSysMenu);
+}
diff --git a/src/main/java/com/common/base/module/auth/service/impl/AuthFunctionServiceImpl.java b/src/main/java/com/common/base/module/auth/service/impl/AuthFunctionServiceImpl.java
new file mode 100644
index 0000000..80d2577
--- /dev/null
+++ b/src/main/java/com/common/base/module/auth/service/impl/AuthFunctionServiceImpl.java
@@ -0,0 +1,11 @@
+package com.common.base.module.auth.service.impl;
+
+import com.common.base.module.auth.service.AuthFunctionService;
+import org.springframework.stereotype.Service;
+
+
+@Service
+public class AuthFunctionServiceImpl implements AuthFunctionService {
+
+
+}
diff --git a/src/main/java/com/common/base/module/auth/service/impl/FtUserServiceImpl.java b/src/main/java/com/common/base/module/auth/service/impl/FtUserServiceImpl.java
new file mode 100644
index 0000000..a205eb4
--- /dev/null
+++ b/src/main/java/com/common/base/module/auth/service/impl/FtUserServiceImpl.java
@@ -0,0 +1,85 @@
+package com.common.base.module.auth.service.impl;
+
+import com.common.base.common.ResultVO;
+import com.common.base.common.ServiceException;
+import com.common.base.common.config.FrameConfig;
+import com.common.base.common.utils.MD5Util;
+import com.common.base.common.utils.TokenProccessor;
+import com.common.base.module.auth.dao.FtUserDao;
+import com.common.base.module.auth.entity.FtUser;
+import com.common.base.module.auth.service.FtUserService;
+import com.common.base.module.shiro.dao.FtTokenDao;
+import com.common.base.module.shiro.service.ShiroService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * (FtUser)表服务实现类
+ *
+ * @author lhc
+ * @since 2020-02-11 19:29:10
+ */
+@Service("ftUserService")
+public class FtUserServiceImpl implements FtUserService {
+
+
+ /**
+ * 用户失效时间
+ */
+ private static int EXPIRE;
+
+ private final FtTokenDao ftTokenDao;
+ private final FtUserDao ftUserDao;
+
+
+ final
+ ShiroService shiroService;
+
+
+
+ public FtUserServiceImpl(FtUserDao ftUserDao, ShiroService shiroService, FtTokenDao ftTokenDao) {
+ this.ftUserDao = ftUserDao;
+ this.shiroService = shiroService;
+ this.ftTokenDao = ftTokenDao;
+ }
+
+ @Autowired
+ public void setHost(FrameConfig config) {
+ FtUserServiceImpl.EXPIRE = config.getLoginTimeout() * 3600 * 1000;
+ }
+
+
+
+ @Override
+ @Transactional
+ public ResultVO login(HttpServletRequest request, String username, String password) {
+ FtUser ftUser = FtUser.builder().username(username).build();
+ ftUser = ftUserDao.selectOne(ftUser);
+ if (ftUser == null) {
+ throw new ServiceException("用户名不存在");
+ }
+ if (ftUser.getEnabled() != 2) {
+ if (MD5Util.isEqual(password, ftUser.getPassword())) {
+ TokenProccessor tokenProccessor = TokenProccessor.getInstance();
+ //生成一个token
+ String token = tokenProccessor.makeToken();
+ //过期时间
+ Date now = new Date();
+ Date expireTime = new Date(now.getTime() + EXPIRE);
+ ResultVO resultVO = shiroService.createToken(String.valueOf(ftUser.getUserId()),token,expireTime);
+ Map map = (Map) resultVO.getData();
+ return ResultVO.getSuccess(map);
+ } else {
+ throw new ServiceException("用户名或密码错误!");
+ }
+ } else {
+ throw new ServiceException("用户已被禁用,请联系管理员");
+ }
+ }
+
+}
diff --git a/src/main/java/com/common/base/module/auth/service/impl/MenuServiceImpl.java b/src/main/java/com/common/base/module/auth/service/impl/MenuServiceImpl.java
new file mode 100644
index 0000000..f123201
--- /dev/null
+++ b/src/main/java/com/common/base/module/auth/service/impl/MenuServiceImpl.java
@@ -0,0 +1,206 @@
+package com.common.base.module.auth.service.impl;
+
+import com.common.base.common.utils.StringUtils;
+import com.common.base.module.auth.constants.AuthConstants;
+import com.common.base.module.auth.dao.OsSysMenuDao;
+import com.common.base.module.auth.entity.OsSysMenu;
+import com.common.base.module.auth.service.MenuService;
+import com.common.base.module.auth.vo.MetaVo;
+import com.common.base.module.auth.vo.RouterVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+@Service
+public class MenuServiceImpl implements MenuService {
+
+ @Autowired
+ OsSysMenuDao osSysMenuDao;
+
+ @Override
+ public List getMenuResult() {
+ List osSysMenus = osSysMenuDao.selectMenu();
+ return getChildPerms(osSysMenus, 0);
+ }
+
+ /**
+ * 根据父节点的ID获取所有子节点
+ *
+ * @param list 分类表
+ * @param parentId 传入的父节点ID
+ * @return String
+ */
+ public List getChildPerms(List list, int parentId) {
+ List returnList = new ArrayList();
+ for (Iterator iterator = list.iterator(); iterator.hasNext(); ) {
+ OsSysMenu t = iterator.next();
+ // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
+ if (t.getParentId() == parentId) {
+ recursionFn(list, t);
+ returnList.add(t);
+ }
+ }
+ return returnList;
+ }
+
+ /**
+ * 递归列表
+ *
+ * @param list
+ * @param t
+ */
+ private void recursionFn(List list, OsSysMenu t) {
+ // 得到子节点列表
+ List childList = getChildList(list, t);
+ t.setChildren(childList);
+ for (OsSysMenu tChild : childList) {
+ if (hasChild(list, tChild)) {
+ recursionFn(list, tChild);
+ }
+ }
+ }
+
+ /**
+ * 得到子节点列表
+ */
+ private List getChildList(List list, OsSysMenu t) {
+ List tlist = new ArrayList();
+ Iterator it = list.iterator();
+ while (it.hasNext()) {
+ OsSysMenu n = it.next();
+ if (n.getParentId().longValue() == t.getMenuId().longValue()) {
+ tlist.add(n);
+ }
+ }
+ return tlist;
+ }
+
+ /**
+ * 判断是否有子节点
+ */
+ private boolean hasChild(List list, OsSysMenu t) {
+ return getChildList(list, t).size() > 0;
+ }
+
+ @Override
+ public List formatMenu(List menus) {
+ List routers = new LinkedList();
+ for (OsSysMenu menu : menus) {
+ RouterVo router = new RouterVo();
+ router.setName(getRouteName(menu));
+ router.setPath(getRouterPath(menu));
+ router.setComponent(getComponent(menu));
+ MetaVo metaVo = MetaVo
+ .builder()
+ .title(menu.getMenuName())
+ .icon(menu.getIcon())
+ .noCache(StringUtils.equals("0", menu.getIsCache()))
+ .hidden("0".equals(menu.getVisible()))
+ .breadcrumb("1".equals(menu.getBreadcrumb()))
+ .affix("1".equals(menu.getAffix()))
+ .alwaysShow("1".equals(menu.getAlwaysShow()))
+ .build();
+ List cMenus = menu.getChildren();
+ if (cMenus != null && !cMenus.isEmpty() && AuthConstants.TYPE_DIR.equals(menu.getMenuType())) {
+ router.setRedirect("noredirect");
+ router.setChildren(formatMenu(cMenus));
+ } else if (isMeunFrame(menu)) {
+ List childrenList = new ArrayList();
+ RouterVo children = new RouterVo();
+ children.setPath(menu.getPath());
+ children.setComponent(menu.getComponent());
+ children.setName(StringUtils.capitalize(menu.getPath()));
+ metaVo = metaVo.toBuilder()
+ .title(menu.getMenuName())
+ .icon(menu.getIcon())
+ .noCache(StringUtils.equals("0", menu.getIsCache()))
+ .alwaysShow("1".equals(menu.getAlwaysShow()))
+ .build();
+ childrenList.add(children);
+ router.setChildren(childrenList);
+ } else if (cMenus == null || cMenus.isEmpty()) {
+ metaVo.setAlwaysShow(false);
+ }
+ router.setMeta(metaVo);
+ routers.add(router);
+ }
+ return routers;
+ }
+
+ @Override
+ public Object add(OsSysMenu osSysMenu) {
+ return null;
+ }
+
+ /**
+ * 获取路由名称
+ *
+ * @param menu 菜单信息
+ * @return 路由名称
+ */
+ public String getRouteName(OsSysMenu menu) {
+ String routerName = StringUtils.capitalize(menu.getPath());
+ // 非外链并且是一级目录(类型为目录)
+ if (isMeunFrame(menu)) {
+ routerName = StringUtils.EMPTY;
+ }
+ return routerName;
+ }
+
+ /**
+ * 获取路由地址
+ *
+ * @param menu 菜单信息
+ * @return 路由地址
+ */
+ public String getRouterPath(OsSysMenu menu) {
+ String routerPath = menu.getPath();
+ // 非外链并且是一级目录(类型为目录)
+ if (0 == menu.getParentId().intValue() && AuthConstants.TYPE_DIR.equals(menu.getMenuType())
+ && AuthConstants.NO_FRAME.equals(menu.getIsFrame())) {
+ routerPath = "/" + menu.getPath();
+ }
+ // 非外链并且是一级目录(类型为菜单)
+ else if (isMeunFrame(menu)) {
+ routerPath = "/";
+ }
+ return routerPath;
+ }
+
+ /**
+ * 获取组件信息
+ *
+ * @param menu 菜单信息
+ * @return 组件信息
+ */
+ public String getComponent(OsSysMenu menu) {
+ String component = AuthConstants.LAYOUT;
+ if (StringUtils.isNotEmpty(menu.getComponent()) && !isMeunFrame(menu)) {
+ component = menu.getComponent();
+ }
+ if (StringUtils.isEmpty(menu.getComponent())&&isNotParentMenuFrame(menu)) {
+ component = AuthConstants.UN_LAYOUT;
+ }
+ return component;
+ }
+
+ /**
+ * 是否为菜单内部跳转
+ *
+ * @param menu 菜单信息
+ * @return 结果
+ */
+ public boolean isMeunFrame(OsSysMenu menu) {
+ return menu.getParentId().intValue() == 0 && AuthConstants.TYPE_MENU.equals(menu.getMenuType())
+ && menu.getIsFrame().equals(AuthConstants.NO_FRAME);
+ }
+
+ public boolean isNotParentMenuFrame(OsSysMenu menu) {
+ return menu.getParentId().intValue() != 0 && AuthConstants.TYPE_DIR.equals(menu.getMenuType())
+ && menu.getIsFrame().equals(AuthConstants.NO_FRAME);
+ }
+}
diff --git a/src/main/java/com/common/base/module/auth/vo/MetaVo.java b/src/main/java/com/common/base/module/auth/vo/MetaVo.java
new file mode 100644
index 0000000..111401e
--- /dev/null
+++ b/src/main/java/com/common/base/module/auth/vo/MetaVo.java
@@ -0,0 +1,59 @@
+/**/
+package com.common.base.module.auth.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 路由显示信息
+ *
+ * @author ruoyi
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder(toBuilder = true)
+@Data
+public class MetaVo implements Serializable {
+ private static final long serialVersionUID = -4261993881269135509L;
+ /**
+ * 设置该路由在侧边栏和面包屑中展示的名字
+ */
+ private String title;
+
+ /**
+ * 设置该路由的图标,对应路径src/assets/icons/svg
+ */
+ private String icon;
+
+ /**
+ * 设置为true,则不会被 缓存
+ */
+ private boolean noCache;
+
+ /**
+ * 设置为是否隐藏,true为隐藏
+ */
+ private boolean hidden;
+
+ /**
+ * if true, will always show the root menu (default is false)
+ * if false, hide the root menu when has less or equal than one children route
+ */
+ private boolean alwaysShow;
+
+ /**
+ * if false, the item will be hidden in breadcrumb (default is true)
+ */
+ private boolean breadcrumb;
+ /**
+ * if true, the tag will affix in the tags-view
+ */
+ private boolean affix;
+
+
+
+}
diff --git a/src/main/java/com/common/base/module/auth/vo/RouterVo.java b/src/main/java/com/common/base/module/auth/vo/RouterVo.java
new file mode 100644
index 0000000..1a414b4
--- /dev/null
+++ b/src/main/java/com/common/base/module/auth/vo/RouterVo.java
@@ -0,0 +1,55 @@
+package com.common.base.module.auth.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 路由配置信息
+ *
+ * @author ruoyi
+ */
+@JsonInclude(JsonInclude.Include.NON_EMPTY)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder(toBuilder = true)
+@Data
+public class RouterVo implements Serializable {
+
+ private static final long serialVersionUID = 8361861823516461515L;
+ /**
+ * 路由名字
+ */
+ private String name;
+
+ /**
+ * 路由地址
+ */
+ private String path;
+
+ /**
+ * 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
+ */
+ private String redirect;
+
+ /**
+ * 组件地址
+ */
+ private String component;
+
+ /**
+ * 其他元素
+ */
+ private MetaVo meta;
+
+ /**
+ * 子路由
+ */
+ private List children;
+
+}
diff --git a/src/main/java/com/common/base/module/data/annotation/DataIgnore.java b/src/main/java/com/common/base/module/data/annotation/DataIgnore.java
new file mode 100644
index 0000000..ffbf655
--- /dev/null
+++ b/src/main/java/com/common/base/module/data/annotation/DataIgnore.java
@@ -0,0 +1,18 @@
+package com.common.base.module.data.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 忽略字段
+ *
+ * @author lhc
+ */
+// 方法注解
+@Target(ElementType.FIELD)
+// 运行时可见
+@Retention(RetentionPolicy.RUNTIME)
+public @interface DataIgnore {
+}
diff --git a/src/main/java/com/common/base/module/data/module/BaseMapper.java b/src/main/java/com/common/base/module/data/module/BaseMapper.java
index ccf5622..f1499df 100644
--- a/src/main/java/com/common/base/module/data/module/BaseMapper.java
+++ b/src/main/java/com/common/base/module/data/module/BaseMapper.java
@@ -7,89 +7,98 @@ import com.github.pagehelper.PageInfo;
import java.util.List;
import java.util.Map;
+/**
+ * @author lhc
+ */
public interface BaseMapper {
- int save(DataMap dataMap);
+ int save(DataMap dataMap);
- int save(String tableName,String pkName , Map data);
+ int save(String tableName, String pkName, Map data);
- int updateByPk(DataMap dataMap);
+ int save(E e);
- int updateByPk(String tableName, String pkName, Object pkValue, Map data);
+ int updateByPk(DataMap dataMap);
- int updateByPk(OsSysTable osSysTable, Object pkValue, Map data);
+ int updateByPk(String tableName, String pkName, Map data);
- int updateInPk(DataMap dataMap);
+ int updateByPk(OsSysTable osSysTable, Map data);
+
+ int updateByPk(E e);
+
+ int updateInPk(DataMap dataMap);
+
+ int updateInPk(E e, List ids);
int updateInPk(String tableName, String pkName, List ids, Map data);
int updateInPk(OsSysTable osSysTable, List ids, Map data);
- int updateByCondition(DataMap dataMap, Condition condition);
+ int updateByCondition(DataMap dataMap, Condition condition);
- int updateByCondition(String tableName,Map data, Condition condition);
+ int updateByCondition(String tableName, Map data, Condition condition);
- int deleteByPk(DataMap dataMap);
+ int deleteByPk(DataMap dataMap);
- int deleteByPk(String tableName, String pkName,Object pkValue);
+ int deleteByPk(String tableName, String pkName, Object pkValue);
- int deleteByPk(OsSysTable osSysTable,Object pkValue);
+ int deleteByPk(OsSysTable osSysTable, Object pkValue);
- int deleteInPk(String tableName, String pkName,List ids);
+ int deleteInPk(String tableName, String pkName, List ids);
- int deleteInPk(DataMap dataMap);
+ int deleteInPk(DataMap dataMap);
- int deleteInPk(OsSysTable osSysTable,List ids);
+ int deleteInPk(OsSysTable osSysTable, List ids);
- int deleteByCondition(DataMap dataMap, Condition condition);
+ int deleteByCondition(DataMap dataMap, Condition condition);
int deleteByCondition(String tableName, Condition condition);
List