Browse Source

阶段提交

laowo 3 years ago
parent
commit
6df502fb7d
27 changed files with 615 additions and 396 deletions
  1. 1 1
      pom.xml
  2. 4 5
      src/main/java/com/usky/config/CorsConfig.java
  3. 17 0
      src/main/java/com/usky/config/shiro/MyRealm.java
  4. 68 3
      src/main/java/com/usky/controller/sys/MenuController.java
  5. 14 1
      src/main/java/com/usky/controller/sys/RoleController.java
  6. 128 10
      src/main/java/com/usky/controller/sys/UserController.java
  7. 3 2
      src/main/java/com/usky/entity/sys/SysRoleDeptDTO.java
  8. 0 56
      src/main/java/com/usky/entity/sys/SysRoleDeptDTOPK.java
  9. 3 2
      src/main/java/com/usky/entity/sys/SysRoleMenuDTO.java
  10. 0 56
      src/main/java/com/usky/entity/sys/SysRoleMenuDTOPK.java
  11. 1 0
      src/main/java/com/usky/entity/sys/SysUserDTO.java
  12. 2 2
      src/main/java/com/usky/entity/sys/SysUserPostDTO.java
  13. 0 56
      src/main/java/com/usky/entity/sys/SysUserPostDTOPK.java
  14. 3 2
      src/main/java/com/usky/entity/sys/SysUserRoleDTO.java
  15. 0 56
      src/main/java/com/usky/entity/sys/SysUserRoleDTOPK.java
  16. 5 0
      src/main/java/com/usky/entity/sys/vo/SysMenuVO.java
  17. 11 0
      src/main/java/com/usky/entity/sys/vo/SysRoleVO.java
  18. 14 5
      src/main/java/com/usky/entity/sys/vo/SysUserVO.java
  19. 29 124
      src/main/java/com/usky/exception/GloableExceptionResolver.java
  20. 49 1
      src/main/java/com/usky/service/menuService/MenuService.java
  21. 50 1
      src/main/java/com/usky/service/menuService/MenuServiceImpl.java
  22. 9 0
      src/main/java/com/usky/service/sys/RoleService.java
  23. 29 0
      src/main/java/com/usky/service/sys/RoleServiceImpl.java
  24. 32 2
      src/main/java/com/usky/service/user/UserService.java
  25. 108 10
      src/main/java/com/usky/service/user/UserServiceImpl.java
  26. 29 0
      src/main/java/com/usky/utils/AuthorizationUtils.java
  27. 6 1
      src/main/java/com/usky/utils/ShiroUtils.java

+ 1 - 1
pom.xml

@@ -83,7 +83,7 @@
         <dependency>
             <groupId>org.crazycake</groupId>
             <artifactId>shiro-redis</artifactId>
-            <version>3.3.1</version>
+            <version>3.1.0</version>
         </dependency>
 
 

+ 4 - 5
src/main/java/com/usky/config/CorsConfig.java

@@ -22,6 +22,7 @@ public class CorsConfig implements WebMvcConfigurer {
         registry.addMapping("/**").allowedOrigins("*").allowCredentials(true)
                 .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS").maxAge(3600);
     }
+
     @Override
     public void addResourceHandlers(ResourceHandlerRegistry registry) {
         /*静态资源的位置*/
@@ -31,17 +32,15 @@ public class CorsConfig implements WebMvcConfigurer {
         registry.addResourceHandler("/webjars/**")
                 .addResourceLocations("classpath:/META-INF/resources/webjars/");
         registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
-
-
     }
-    @SuppressWarnings({ "rawtypes", "unchecked" })
+
+    @SuppressWarnings({"rawtypes", "unchecked"})
     @Bean
     @Order(1)//设置filter执行的顺序
-    public FilterRegistrationBean filterRegest(){
+    public FilterRegistrationBean filterRegest() {
         FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
         filterRegistrationBean.setFilter(new XssFilter());
         filterRegistrationBean.addUrlPatterns("/*");//过滤所有的URL
-// filterRegistrationBean.setOrder(1);/another way to set the sequence
         return filterRegistrationBean;
     }
 }

+ 17 - 0
src/main/java/com/usky/config/shiro/MyRealm.java

@@ -9,6 +9,7 @@ import com.usky.utils.ShiroUtils;
 import org.apache.shiro.authc.*;
 import org.apache.shiro.authz.AuthorizationInfo;
 import org.apache.shiro.authz.SimpleAuthorizationInfo;
+import org.apache.shiro.cache.Cache;
 import org.apache.shiro.realm.AuthorizingRealm;
 import org.apache.shiro.subject.PrincipalCollection;
 import org.apache.shiro.util.ByteSource;
@@ -74,4 +75,20 @@ public class MyRealm extends AuthorizingRealm {
             return new SimpleAuthenticationInfo(user, user.getPassword(), bsSalt, getName());
         }
     }
+
+
+    /**
+     * 清理所有用户授权信息缓存
+     */
+    public void clearAllCachedAuthorizationInfo()
+    {
+        Cache<Object, AuthorizationInfo> cache = getAuthorizationCache();
+        if (cache != null)
+        {
+            for (Object key : cache.keys())
+            {
+                cache.remove(key);
+            }
+        }
+    }
 }

+ 68 - 3
src/main/java/com/usky/controller/sys/MenuController.java

@@ -1,18 +1,26 @@
 package com.usky.controller.sys;
 
 
+import com.usky.annotion.AutoLog;
+import com.usky.entity.sys.SysMenuDTO;
 import com.usky.entity.sys.SysUserDTO;
 import com.usky.entity.sys.vo.SysMenuVO;
 import com.usky.entity.sys.vo.SysUserVO;
 import com.usky.service.menuService.MenuService;
+import com.usky.utils.AuthorizationUtils;
+import com.usky.utils.ListUtil;
 import com.usky.utils.Result;
 import com.usky.utils.ShiroUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.java.Log;
+import org.apache.shiro.authz.AuthorizationInfo;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.apache.shiro.cache.Cache;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -47,7 +55,7 @@ public class MenuController {
         return Result.OK(data);
     }
 
-    @ApiOperation(value = "菜单管理")
+    @ApiOperation(value = "菜单管理-列表")
     @RequiresPermissions("system:menu:list")
     @PostMapping("/list")
     @ResponseBody
@@ -56,13 +64,70 @@ public class MenuController {
             @ApiImplicitParam(name = "visible", value = "菜单状态(0显示 1隐藏)", required = false, paramType = "query"),
 
     })
-    public Result<List<SysMenuVO>> list(@RequestParam(value = "menuName",required = false) String menuName,
-                                        @RequestParam(value = "visible",required = false) String visible
+    public Result<List<SysMenuVO>> list(@RequestParam(value = "menuName", required = false) String menuName,
+                                        @RequestParam(value = "visible", required = false) String visible
     ) {
         Integer userId = ShiroUtils.getUserVOId();
         List<SysMenuVO> menuList = menuService.list(new SysMenuVO(), menuName, visible, userId);
         return Result.OK(menuList);
     }
 
+    /**
+     * 删除菜单
+     */
+    @AutoLog("菜单删除")
+    @ApiOperation(value = "菜单管理-删除")
+    @RequiresPermissions("system:menu:remove")
+    @PostMapping("remove")
+    @ResponseBody
+    public Result<?> remove(@RequestParam("menuId") Integer menuId) {
+        if (menuService.queryMenuById(menuId) > 0) {
+            return Result.error("存在子菜单,不允许删除");
+        }
+        if (menuService.queryRoleMenuByMenuId(menuId) > 0) {
+            return Result.error("菜单已分配,不允许删除");
+        }
+        AuthorizationUtils.clearAllCachedAuthorizationInfo();
+        menuService.deleteMenuById(menuId);
+        return Result.OK();
+    }
+
+    /**
+     * 新增保存菜单
+     */
+    @AutoLog("新增菜单")
+    @ApiOperation(value = "菜单管理-新增")
+    @RequiresPermissions("system:menu:add")
+    @PostMapping("/add")
+    @ResponseBody
+    public Result<?> addSave(@Validated SysMenuVO menu) {
+        //查询同一父级菜单名称是否重复
+        List<SysMenuDTO> sysMenuDTOS = menuService.queryMenuByName(menu.getMenuName(), menu.getParentId());
+        if (ListUtil.isNotBlank(sysMenuDTOS)) {
+            return Result.error("菜单名称重复!");
+        }
+        AuthorizationUtils.clearAllCachedAuthorizationInfo();
+        menuService.add(menu);
+        return Result.OK();
+    }
+
+    /**
+     * 菜单修改
+     */
+    @AutoLog("菜单修改")
+    @ApiOperation(value = "菜单管理-修改")
+    @RequiresPermissions("system:menu:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    public Result<?> editSave(@Validated SysMenuVO menu) {
+        List<SysMenuDTO> sysMenuDTOS = menuService.queryMenuByName(menu.getMenuName(), menu.getParentId());
+        if (ListUtil.isNotBlank(sysMenuDTOS)) {
+            return Result.error("菜单名称重复!");
+        }
+
+        AuthorizationUtils.clearAllCachedAuthorizationInfo();
+        menuService.updateMenu(menu);
+        return Result.OK();
+    }
 
 }

+ 14 - 1
src/main/java/com/usky/controller/sys/RoleController.java

@@ -11,6 +11,7 @@ import com.usky.entity.sys.vo.SysDeptVO;
 import com.usky.entity.sys.vo.SysRoleVO;
 import com.usky.service.sys.RoleService;
 import com.usky.utils.Page;
+import com.usky.utils.Result;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -19,6 +20,8 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 @Api(tags = "系统-角色管理")
 @RestController
 @RequestMapping("sys/role")
@@ -36,7 +39,7 @@ public class RoleController {
     }
 
 
-    @ApiOperation(value = "角色查询")
+    @ApiOperation(value = "角色查询-分页")
     @PostMapping("list")
     @RequiresPermissions("system:role:list")
     @ApiImplicitParams({
@@ -57,4 +60,14 @@ public class RoleController {
         Page<SysRoleVO> data = roleService.list(new SysDeptVO(), roleName, status, startTime, endTime, pageSize, pageNo);
         return data;
     }
+
+    @ApiOperation(value = "角色查询-全部")
+    @PostMapping("listAll")
+    @RequiresPermissions("system:role:list")
+    public Result<List<SysRoleVO>> list() {
+        List<SysRoleVO> roleVOList = roleService.querRoleList(new SysRoleVO());
+        return Result.OK(roleVOList);
+    }
+
+
 }

+ 128 - 10
src/main/java/com/usky/controller/sys/UserController.java

@@ -1,23 +1,27 @@
 package com.usky.controller.sys;
 
+import com.usky.entity.sys.SysRoleDTO;
 import com.usky.entity.sys.SysUserDTO;
+import com.usky.entity.sys.vo.SysDeptVO;
+import com.usky.entity.sys.vo.SysRoleVO;
 import com.usky.entity.sys.vo.SysUserVO;
+import com.usky.service.sys.RoleService;
 import com.usky.service.user.UserService;
-import com.usky.utils.Page;
-import com.usky.utils.Result;
-import com.usky.utils.ShiroUtils;
+import com.usky.utils.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.java.Log;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.aspectj.weaver.ast.Var;
 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.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author laowo
@@ -29,12 +33,62 @@ import java.util.List;
 @RestController
 @RequestMapping("sys/user")
 public class UserController {
+
+
     @Autowired
     private UserService userService;
+    @Autowired
+    private RoleService roleService;
+
+    private final String prefix = "sys/user";
+
+    @ApiOperation("用户管理-页面鉴权")
+    @RequiresPermissions("system:user:view")
+    @GetMapping()
+    public String user() {
+        return prefix + "/user";
+    }
+
 
     @ApiOperation(value = "系统-用户添加")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "loginName", value = "登录名", required = true, paramType = "query"),
+            @ApiImplicitParam(name = "status", value = "账户状态 0正常 1 停用", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "phonenumber", value = "手机号", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "deptId", value = "部门id", required = true, paramType = "query"),
+            @ApiImplicitParam(name = "password", value = "密码", required = true, paramType = "query"),
+            @ApiImplicitParam(name = "roleIds", value = "角色", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "userName", value = "用户名", required = true, paramType = "query"),
+            @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query"),
+    })
     @PostMapping("addUser")
-    public Result<?> addUser(SysUserDTO user) {
+    public Result<?> addUser(
+            @RequestParam(value = "loginName", required = true) String loginName,
+            @RequestParam(value = "status", required = false) String status,
+            @RequestParam(value = "phonenumber", required = true) String phonenumber,
+            @RequestParam(value = "deptId", required = true) Integer deptId,
+            @RequestParam(value = "password", required = true) String password,
+            @RequestParam(value = "userName", required = true) String userName,
+            @RequestParam(value = "roleIds", required = true) String roleIds,
+            @RequestParam(value = "remark", required = false) String remark
+    ) {
+        //登录名校验
+        List<SysUserVO> sysUserVOList = userService.listAll(new SysUserVO(), null, loginName, null, null, null, null);
+        if (ListUtil.isNotBlank(sysUserVOList)) {
+            return Result.error("登录名已存在");
+        }
+        List<SysUserVO> phone = userService.listAll(new SysUserVO(), null, null, phonenumber, null, null, null);
+        if (ListUtil.isNotBlank(phone)) {
+            return Result.error("手机号已存在");
+        }
+        SysUserVO user = new SysUserVO();
+        user.setLoginName(loginName);
+        user.setDeptId(deptId);
+        user.setRemark(remark);
+        user.setUserName(userName);
+        user.setPassword(password);
+        user.setStatus(status);
+        user.setRoleIds(roleIds);
         userService.addUser(user);
         return Result.OK();
     }
@@ -53,7 +107,7 @@ public class UserController {
             @ApiImplicitParam(name = "pageSize", value = "页数据条数", required = false, paramType = "query"),
             @ApiImplicitParam(name = "pageNo", value = "当前页", required = false, paramType = "query"),
     })
-      @RequiresPermissions("system:user:list")
+    @RequiresPermissions("system:user:list")
     public Page<SysUserVO> list(
             @RequestParam(value = "status", required = false) Integer status,
             @RequestParam(value = "loginName", required = false) String loginName,
@@ -65,8 +119,72 @@ public class UserController {
             @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo
     ) {
         SysUserVO sysUserVO = new SysUserVO();
-        return userService.list(sysUserVO,status, loginName, phonenumber, startTime, endTime, deptId, pageSize, pageNo);
+        return userService.list(sysUserVO, status, loginName, phonenumber, startTime, endTime, deptId, pageSize, pageNo);
+    }
+
+    @ApiOperation(value = "用户查询-全部 -可用于导出")
+    @PostMapping("listAll")
+    @ApiImplicitParams({
+            //     @ApiImplicitParam(name = "loginName", value = "登录名", required = true, paramType = "query"),
+            @ApiImplicitParam(name = "loginName", value = "登录名", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "status", value = "账户状态 0正常 1 停用", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "phonenumber", value = "手机号", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "startTime", value = "开始时间", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "endTime", value = "结束时间", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "deptId", value = "部门id", required = false, paramType = "query"),
+    })
+    @RequiresPermissions("system:user:list")
+    public Result<List<SysUserVO>> listAll(
+            @RequestParam(value = "status", required = false) Integer status,
+            @RequestParam(value = "loginName", required = false) String loginName,
+            @RequestParam(value = "phonenumber", required = false) String phonenumber,
+            @RequestParam(value = "startTime", required = false) String startTime,
+            @RequestParam(value = "endTime", required = false) String endTime,
+            @RequestParam(value = "deptId", required = false) Integer deptId
+    ) {
+        List<SysUserVO> sysUserVOList = userService.listAll(new SysUserVO(), status, loginName, phonenumber, startTime, endTime, deptId);
+        return Result.OK(sysUserVOList);
     }
 
 
+    @ApiOperation(value = "修改用户")
+    @RequiresPermissions("system:user:edit")
+    @PostMapping("/edit")
+    @ResponseBody
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "status", value = "账户状态 0正常 1 停用", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "phonenumber", value = "手机号", required = true, paramType = "query"),
+            @ApiImplicitParam(name = "deptId", value = "部门id", required = true, paramType = "query"),
+            @ApiImplicitParam(name = "roleIds", value = "角色", required = true, paramType = "query"),
+            @ApiImplicitParam(name = "userName", value = "用户名", required = true, paramType = "query"),
+            @ApiImplicitParam(name = "remark", value = "备注", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "userId", value = "用户id", required = true, paramType = "query")
+    })
+    public Result<?> editSave(
+            @RequestParam(value = "status", required = false) String status,
+            @RequestParam(value = "phonenumber", required = false) String phonenumber,
+            @RequestParam(value = "deptId") Integer deptId,
+            @RequestParam(value = "userName", required = false) String userName,
+            @RequestParam(value = "roleIds", required = false) String roleIds,
+            @RequestParam(value = "userId", required = true) Integer userId,
+            @RequestParam(value = "remark", required = false) String remark
+    ) {
+        if (StringUtils.isNotBlank(phonenumber)) {
+            //用户手机号校验
+            List<SysUserDTO> user = userService.queryUserByPhone(phonenumber);
+            if (ListUtil.isNotBlank(user)) {
+                return Result.error("手机号已存在!");
+            }
+        }
+        SysUserVO user = new SysUserVO();
+        user.setStatus(status);
+        user.setRemark(remark);
+        user.setUserName(userName);
+        user.setDeptId(deptId);
+        user.setUserId(userId);
+        user.setRoleIds(roleIds);
+        user.setPhonenumber(phonenumber);
+        userService.updateUser(user);
+        return Result.OK();
+    }
 }

+ 3 - 2
src/main/java/com/usky/entity/sys/SysRoleDeptDTO.java

@@ -3,6 +3,7 @@ package com.usky.entity.sys;
 import io.swagger.annotations.ApiModelProperty;
 
 import javax.persistence.*;
+import java.io.Serializable;
 import java.util.Objects;
 
 /**
@@ -13,8 +14,8 @@ import java.util.Objects;
  **/
 @Entity
 @Table(name = "sys_role_dept", schema = "jx_cover", catalog = "")
-@IdClass(SysRoleDeptDTOPK.class)
-public class SysRoleDeptDTO {
+
+public class SysRoleDeptDTO implements Serializable {
     private Integer roleId;
     private Integer deptId;
 

+ 0 - 56
src/main/java/com/usky/entity/sys/SysRoleDeptDTOPK.java

@@ -1,56 +0,0 @@
-package com.usky.entity.sys;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-import javax.persistence.Column;
-import javax.persistence.Id;
-import java.io.Serializable;
-import java.util.Objects;
-
-/**
- * @author laowo
- * @version v1.0
- * @date 2021/8/19 14:03
- * @description TODO
- **/
-@ApiModel(value = "角色部门DTO")
-public class SysRoleDeptDTOPK implements Serializable {
-    @ApiModelProperty("角色id")
-    private Integer roleId;
-    @ApiModelProperty("部门id")
-    private Integer deptId;
-
-    @Column(name = "role_id", nullable = false)
-    @Id
-    public Integer getRoleId() {
-        return roleId;
-    }
-
-    public void setRoleId(Integer roleId) {
-        this.roleId = roleId;
-    }
-
-    @Column(name = "dept_id", nullable = false)
-    @Id
-    public Integer getDeptId() {
-        return deptId;
-    }
-
-    public void setDeptId(Integer deptId) {
-        this.deptId = deptId;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-        SysRoleDeptDTOPK that = (SysRoleDeptDTOPK) o;
-        return roleId == that.roleId && deptId == that.deptId;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(roleId, deptId);
-    }
-}

+ 3 - 2
src/main/java/com/usky/entity/sys/SysRoleMenuDTO.java

@@ -1,6 +1,7 @@
 package com.usky.entity.sys;
 
 import javax.persistence.*;
+import java.io.Serializable;
 import java.util.Objects;
 
 /**
@@ -11,8 +12,8 @@ import java.util.Objects;
  **/
 @Entity
 @Table(name = "sys_role_menu", schema = "jx_cover", catalog = "")
-@IdClass(SysRoleMenuDTOPK.class)
-public class SysRoleMenuDTO {
+
+public class SysRoleMenuDTO implements Serializable {
     private Integer roleId;
     private Integer menuId;
 

+ 0 - 56
src/main/java/com/usky/entity/sys/SysRoleMenuDTOPK.java

@@ -1,56 +0,0 @@
-package com.usky.entity.sys;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-import javax.persistence.Column;
-import javax.persistence.Id;
-import java.io.Serializable;
-import java.util.Objects;
-
-/**
- * @author laowo
- * @version v1.0
- * @date 2021/8/19 14:03
- * @description TODO
- **/
-@ApiModel(value = "角色-菜单DTO")
-public class SysRoleMenuDTOPK implements Serializable {
-    @ApiModelProperty("角色id")
-    private Integer roleId;
-    @ApiModelProperty("菜单ID")
-    private Integer menuId;
-
-    @Column(name = "role_id", nullable = false)
-    @Id
-    public long getRoleId() {
-        return roleId;
-    }
-
-    public void setRoleId(Integer roleId) {
-        this.roleId = roleId;
-    }
-
-    @Column(name = "menu_id", nullable = false)
-    @Id
-    public Integer getMenuId() {
-        return menuId;
-    }
-
-    public void setMenuId(Integer menuId) {
-        this.menuId = menuId;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-        SysRoleMenuDTOPK that = (SysRoleMenuDTOPK) o;
-        return roleId == that.roleId && menuId == that.menuId;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(roleId, menuId);
-    }
-}

+ 1 - 0
src/main/java/com/usky/entity/sys/SysUserDTO.java

@@ -42,6 +42,7 @@ public class SysUserDTO implements Serializable {
 
     @Id
     @Column(name = "user_id", nullable = false)
+    @GeneratedValue(strategy=GenerationType.IDENTITY)
     public Integer getUserId() {
         return userId;
     }

+ 2 - 2
src/main/java/com/usky/entity/sys/SysUserPostDTO.java

@@ -1,6 +1,7 @@
 package com.usky.entity.sys;
 
 import javax.persistence.*;
+import java.io.Serializable;
 import java.util.Objects;
 
 /**
@@ -11,8 +12,7 @@ import java.util.Objects;
  **/
 @Entity
 @Table(name = "sys_user_post", schema = "jx_cover", catalog = "")
-@IdClass(SysUserPostDTOPK.class)
-public class SysUserPostDTO {
+public class SysUserPostDTO implements Serializable {
     private Integer userId;
     private Integer postId;
 

+ 0 - 56
src/main/java/com/usky/entity/sys/SysUserPostDTOPK.java

@@ -1,56 +0,0 @@
-package com.usky.entity.sys;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-import javax.persistence.Column;
-import javax.persistence.Id;
-import java.io.Serializable;
-import java.util.Objects;
-
-/**
- * @author laowo
- * @version v1.0
- * @date 2021/8/19 14:03
- * @description TODO
- **/
-@ApiModel(value = "系统-用户岗位表")
-public class SysUserPostDTOPK implements Serializable {
-    @ApiModelProperty("用户id")
-    private Integer userId;
-    @ApiModelProperty("岗位id")
-    private Integer postId;
-
-    @Column(name = "user_id", nullable = false)
-    @Id
-    public long getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    @Column(name = "post_id", nullable = false)
-    @Id
-    public long getPostId() {
-        return postId;
-    }
-
-    public void setPostId(Integer postId) {
-        this.postId = postId;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-        SysUserPostDTOPK that = (SysUserPostDTOPK) o;
-        return userId == that.userId && postId == that.postId;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(userId, postId);
-    }
-}

+ 3 - 2
src/main/java/com/usky/entity/sys/SysUserRoleDTO.java

@@ -1,6 +1,7 @@
 package com.usky.entity.sys;
 
 import javax.persistence.*;
+import java.io.Serializable;
 import java.util.Objects;
 
 /**
@@ -11,8 +12,8 @@ import java.util.Objects;
  **/
 @Entity
 @Table(name = "sys_user_role", schema = "jx_cover", catalog = "")
-@IdClass(SysUserRoleDTOPK.class)
-public class SysUserRoleDTO {
+
+public class SysUserRoleDTO implements Serializable {
     private Integer userId;
     private Integer roleId;
 

+ 0 - 56
src/main/java/com/usky/entity/sys/SysUserRoleDTOPK.java

@@ -1,56 +0,0 @@
-package com.usky.entity.sys;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-import javax.persistence.Column;
-import javax.persistence.Id;
-import java.io.Serializable;
-import java.util.Objects;
-
-/**
- * @author laowo
- * @version v1.0
- * @date 2021/8/19 14:03
- * @description TODO
- **/
-@ApiModel(value = "系统-用户角色表")
-public class SysUserRoleDTOPK implements Serializable {
-    @ApiModelProperty("用户id")
-    private Integer userId;
-    @ApiModelProperty("角色id")
-    private Integer roleId;
-
-    @Column(name = "user_id", nullable = false)
-    @Id
-    public long getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    @Column(name = "role_id", nullable = false)
-    @Id
-    public Integer getRoleId() {
-        return roleId;
-    }
-
-    public void setRoleId(Integer roleId) {
-        this.roleId = roleId;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-        SysUserRoleDTOPK that = (SysUserRoleDTOPK) o;
-        return userId == that.userId && roleId == that.roleId;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(userId, roleId);
-    }
-}

+ 5 - 0
src/main/java/com/usky/entity/sys/vo/SysMenuVO.java

@@ -5,6 +5,9 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
 import java.io.Serializable;
 import java.sql.Timestamp;
 import java.util.ArrayList;
@@ -22,6 +25,8 @@ public class SysMenuVO extends BaseEntity implements Serializable {
     @ApiModelProperty("菜单id")
     private Integer menuId;
     @ApiModelProperty("菜单名称")
+    @NotBlank(message = "菜单名称不能为空")
+    @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符")
     private String menuName;
     @ApiModelProperty("父级id")
     private Integer parentId;

+ 11 - 0
src/main/java/com/usky/entity/sys/vo/SysRoleVO.java

@@ -43,4 +43,15 @@ public class SysRoleVO extends BaseEntity implements Serializable {
     private Timestamp updateTime;
     @ApiModelProperty("备注")
     private String remark;
+
+    public boolean isAdmin()
+    {
+        return isAdmin(this.roleId);
+    }
+
+    public static boolean isAdmin(Integer roleId)
+    {
+        return roleId != null && 1 == roleId;
+    }
+
 }

+ 14 - 5
src/main/java/com/usky/entity/sys/vo/SysUserVO.java

@@ -1,12 +1,16 @@
 package com.usky.entity.sys.vo;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.usky.entity.BaseEntity;
 import com.usky.entity.sys.SysRoleDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import springfox.documentation.annotations.ApiIgnore;
 
 import javax.persistence.*;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
 import java.io.Serializable;
 import java.sql.Timestamp;
 import java.util.List;
@@ -26,6 +30,8 @@ public class SysUserVO extends BaseEntity implements Serializable {
     @ApiModelProperty("部门id")
     private Integer deptId;
     @ApiModelProperty("登录名")
+    @NotBlank(message = "登录名不能为空")
+    @Size(min = 0, max = 10, message = "登录名称不能超过10个字符")
     private String loginName;
     @ApiModelProperty("用户名")
     private String userName;
@@ -34,12 +40,14 @@ public class SysUserVO extends BaseEntity implements Serializable {
     @ApiModelProperty("邮箱地址")
     private String email;
     @ApiModelProperty("手机号")
+    @NotBlank(message = "手机号不能为空")
     private String phonenumber;
     @ApiModelProperty("用户性别(0男 1女 2未知)")
     private String sex;
     @ApiModelProperty("头像路径")
     private String avatar;
     @ApiModelProperty("密码")
+    @NotBlank(message = "密码不能为空")
     private String password;
     @ApiModelProperty("随机盐")
     private String salt;
@@ -55,7 +63,7 @@ public class SysUserVO extends BaseEntity implements Serializable {
     private Timestamp pwdUpdateDate;
     @ApiModelProperty("创建人")
     private String createBy;
-    @ApiModelProperty("创建时间")
+    @ApiModelProperty(value = "创建时间")
     private Timestamp createTime;
     @ApiModelProperty("更新人")
     private String updateBy;
@@ -78,9 +86,10 @@ public class SysUserVO extends BaseEntity implements Serializable {
 
     private List<SysRoleDTO> roles;
 
-    /** 角色组 */
-    private Long[] roleIds;
+    /**
+     * 角色组
+     */
+    private String roleIds;
+
 
-    /** 岗位组 */
-    private Long[] postIds;
 }

+ 29 - 124
src/main/java/com/usky/exception/GloableExceptionResolver.java

@@ -5,6 +5,9 @@ import com.usky.utils.ServletUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.authz.AuthorizationException;
 import org.apache.shiro.util.PermissionUtils;
+import org.springframework.validation.BindException;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.FieldError;
 import org.springframework.web.HttpRequestMethodNotSupportedException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
@@ -21,168 +24,70 @@ import javax.servlet.http.HttpServletRequest;
 @RestControllerAdvice
 @Slf4j
 public class GloableExceptionResolver {
-
-//    @ExceptionHandler(UnauthorizedException.class)
-//    public void calUnauthorizedException(UnauthorizedException e) {
-//        PrintWriter writer = null;
-//        try {
-//            //判断是否是ajax
-//            ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
-//            HttpServletRequest request = requestAttributes.getRequest();
-//            HttpServletResponse response = requestAttributes.getResponse();
-//            String header = request.getHeader("X-Requested-With");
-//            if (StringUtils.isNoneBlank(header) && "XMLHttpRequest".equalsIgnoreCase(header)) {
-//                response.setCharacterEncoding("UTF-8");
-//                response.setContentType("application/json; charset=utf-8");
-//                writer = response.getWriter();
-//                writer.write("{\"status\":401,\"message\":\"无权访问\"}");
-//            } else {
-//                String contextPath = request.getContextPath();
-//                if ("/".equals(contextPath))
-//                    contextPath = "";
-//                response.sendRedirect(request.getContextPath() + "/page/toDenied");
-//            }
-//        } catch (IOException io) {
-//            io.printStackTrace();
-//        } finally {
-//            if (writer != null)
-//                writer.close();
-//        }
-//    }
-//
-//    @ExceptionHandler(UnauthenticatedException.class)
-//    public void calUnauthorizedException(UnauthenticatedException e) {
-//        PrintWriter writer = null;
-//        try {
-//            //判断是否是异步请求
-//            ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
-//            HttpServletRequest request = requestAttributes.getRequest();
-//            HttpServletResponse response = requestAttributes.getResponse();
-//            String header = request.getHeader("X-Requested-With");
-//            if (StringUtils.isNoneBlank(header) && "XMLHttpRequest".equalsIgnoreCase(header)) {
-//                response.setCharacterEncoding("UTF-8");
-//                response.setContentType("application/json; charset=utf-8");
-//                writer = response.getWriter();
-//                writer.write("{\"status\":302,\"message\":\"请前去登录\"}");
-//            } else {
-//                String contextPath = request.getContextPath();
-//                if ("/".equals(contextPath))
-//                    contextPath = "";
-//                response.sendRedirect(request.getContextPath() + "/login/");
-//            }
-//        } catch (IOException io) {
-//            io.printStackTrace();
-//        } finally {
-//            if (writer != null)
-//                writer.close();
-//        }
-//    }
-//
-//
-//    @ExceptionHandler(BaseException.class)
-//    public Object businessException(HttpServletRequest request, BaseException e) {
-//        log.error(e.getMessage(), e);
-//        if (ServletUtils.isAjaxRequest(request)) {
-//            return Result.error(e.getMessage());
-//        } else {
-//
-//            //  ModelAndView modelAndView = new ModelAndView(); //TODO 异常页面跳转设置
-//            //  modelAndView.addObject("errorMessage", e.getMessage());
-//            //  modelAndView.setViewName("error/business");
-//            //  return modelAndView;
-//
-//            return null;
-//        }
-//    }
-//
-//    @ExceptionHandler(UnavailableSecurityManagerException.class)
-//    @ResponseBody
-//    public Object UnavailableSecurityManagerException(HttpServletRequest request, BaseException e) {
-//        log.error(e.getMessage(), e);
-//        if (ServletUtils.isAjaxRequest(request)) {
-//            return Result.error("用户信息异常,请重新登录");
-//        } else {
-//
-//            //  ModelAndView modelAndView = new ModelAndView(); //TODO 异常页面跳转设置
-//            //  modelAndView.addObject("errorMessage", e.getMessage());
-//            //  modelAndView.setViewName("error/business");
-//            //  return modelAndView;
-//
-//            return null;
-//        }
-//    }
-//
-//
-
     /**
      * 权限校验失败 如果请求为ajax返回json,普通请求跳转页面
      */
     @ExceptionHandler(AuthorizationException.class)
-    public Object handleAuthorizationException(HttpServletRequest request, AuthorizationException e)
-    {
+    public Object handleAuthorizationException(HttpServletRequest request, AuthorizationException e) {
         log.error(e.getMessage(), e);
-        if (ServletUtils.isAjaxRequest(request))
-        {
+        if (ServletUtils.isAjaxRequest(request)) {
             return Result.error("权限错误!");
-        }
-        else
-        {
+        } else {
 //            ModelAndView modelAndView = new ModelAndView();
 //            modelAndView.setViewName("error/unauth");
 //            return modelAndView;
             return Result.error("权限错误!");
         }
     }
-
-
-
+    /**
+     * 参数校验异常
+     */
+    @ExceptionHandler(value = BindException.class)
+    public Result<?> validationExceptionHandler(BindException e) {
+        BindingResult bindingResult = e.getBindingResult();
+        String errorMesssage = "";
+        for (FieldError fieldError : bindingResult.getFieldErrors()) {
+            errorMesssage += fieldError.getDefaultMessage() + "!";
+        }
+        return Result.error(errorMesssage);
+    }
     /**
      * 请求方式不支持
      */
-    @ExceptionHandler({ HttpRequestMethodNotSupportedException.class })
-    public Result handleException(HttpRequestMethodNotSupportedException e)
-    {
+    @ExceptionHandler({HttpRequestMethodNotSupportedException.class})
+    public Result handleException(HttpRequestMethodNotSupportedException e) {
         log.error(e.getMessage(), e);
         return Result.error("不支持' " + e.getMethod() + "'请求");
     }
-
     /**
      * 拦截未知的运行时异常
      */
     @ExceptionHandler(RuntimeException.class)
-    public Result notFount(RuntimeException e)
-    {
+    public Result notFount(RuntimeException e) {
         log.error("运行时异常:", e);
         return Result.error("运行时异常:" + e.getMessage());
     }
-
     /**
      * 系统异常
      */
     @ExceptionHandler(Exception.class)
-    public Result handleException(Exception e)
-    {
+    public Result handleException(Exception e) {
         log.error(e.getMessage(), e);
         return Result.error("服务器错误,请联系管理员");
     }
-
     /**
      * 业务异常
      */
     @ExceptionHandler(BusinessException.class)
-    public Object businessException(HttpServletRequest request, BusinessException e)
-    {
+    public Object businessException(HttpServletRequest request, BusinessException e) {
         log.error(e.getMessage(), e);
-        if (ServletUtils.isAjaxRequest(request))
-        {
+        if (ServletUtils.isAjaxRequest(request)) {
             return Result.error(e.getMessage());
-        }
-        else
-        {
-           // ModelAndView modelAndView = new ModelAndView();
-           // modelAndView.addObject("errorMessage", e.getMessage());
-           // modelAndView.setViewName("error/business");
-           // return modelAndView;
+        } else {
+            // ModelAndView modelAndView = new ModelAndView();
+            // modelAndView.addObject("errorMessage", e.getMessage());
+            // modelAndView.setViewName("error/business");
+            // return modelAndView;
             return Result.error(e.getMessage());
         }
     }

+ 49 - 1
src/main/java/com/usky/service/menuService/MenuService.java

@@ -1,7 +1,7 @@
 package com.usky.service.menuService;
 
 
-
+import com.usky.entity.sys.SysMenuDTO;
 import com.usky.entity.sys.vo.SysMenuVO;
 import com.usky.entity.sys.vo.SysUserVO;
 
@@ -25,6 +25,7 @@ public interface MenuService {
 
     /**
      * 根据当前用户查询菜单
+     *
      * @param user
      * @return
      */
@@ -32,6 +33,7 @@ public interface MenuService {
 
     /**
      * 根据用户查询菜单
+     *
      * @param sysMenuVO
      * @param menuName
      * @param visible
@@ -39,4 +41,50 @@ public interface MenuService {
      * @return
      */
     List<SysMenuVO> list(SysMenuVO sysMenuVO, String menuName, String visible, Integer userId);
+
+    /**
+     * 根据菜单id查询菜单
+     *
+     * @param menuId
+     * @return
+     */
+    int queryMenuById(Integer menuId);
+
+    /**
+     * 查询角色-菜单
+     *
+     * @param menuId
+     * @return
+     */
+    int queryRoleMenuByMenuId(Integer menuId);
+
+    /**
+     * 删除菜单
+     *
+     * @param menuId
+     */
+    void deleteMenuById(Integer menuId);
+
+    /**
+     * 根据菜单名称查询菜单
+     *
+     * @param menuName
+     * @param parentId
+     * @return
+     */
+    List<SysMenuDTO> queryMenuByName(String menuName, Integer parentId);
+
+    /**
+     * 新增菜单
+     *
+     * @param menu
+     */
+    void add(SysMenuVO menu);
+
+    /**
+     * 菜单修改
+     *
+     * @param menu
+     */
+    void updateMenu(SysMenuVO menu);
 }

+ 50 - 1
src/main/java/com/usky/service/menuService/MenuServiceImpl.java

@@ -3,12 +3,17 @@ package com.usky.service.menuService;
 import com.usky.annotion.DataScope;
 import com.usky.dao.impl.BaseDaoImpl;
 
+import com.usky.entity.sys.SysMenuDTO;
 import com.usky.entity.sys.vo.SysMenuVO;
 import com.usky.entity.sys.vo.SysUserVO;
+import com.usky.utils.BeanHelp;
+import com.usky.utils.ShiroUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.hibernate.transform.Transformers;
 import org.springframework.stereotype.Service;
 
+import java.math.BigInteger;
+import java.sql.Timestamp;
 import java.util.*;
 
 /**
@@ -116,7 +121,7 @@ public class MenuServiceImpl extends BaseDaoImpl implements MenuService {
         //管理员查看全部菜单
         {
             StringBuffer sb = new StringBuffer();
-            sb.append("select menu_id AS menuId, menu_name AS menuName, parent_id AS parentId, order_num AS orderNum, url, target, menu_type AS menuType, visible, is_refresh, ifnull(perms,'') as perms, icon, create_by AS createBy, create_time AS createTime from sys_menu where 1 = 1");
+            sb.append("select menu_id AS menuId, menu_name AS menuName, parent_id AS parentId, order_num AS orderNum, url, target, menu_type AS menuType, visible, is_refresh as isRefresh, ifnull(perms,'') as perms, icon, create_by AS createBy, create_time AS createTime from sys_menu where 1 = 1");
             if (StringUtils.isNotBlank(menuName)) {
                 sb.append(" and menu_name like '%" + menuName + "%'");
             }
@@ -143,6 +148,50 @@ public class MenuServiceImpl extends BaseDaoImpl implements MenuService {
         }
         return menuList;
     }
+
+    @Override
+    public int queryMenuById(Integer menuId) {
+        List list = getSession().createSQLQuery("select count(1) from sys_menu where parent_id=" + menuId + "").list();
+        return ((BigInteger) list.get(0)).intValue();
+    }
+
+    @Override
+    public int queryRoleMenuByMenuId(Integer menuId) {
+
+        List list = getSession().createSQLQuery("select count(1) from sys_role_menu where menu_id=" + menuId + "").list();
+
+        return ((BigInteger) list.get(0)).intValue();
+    }
+
+    @Override
+    public void deleteMenuById(Integer menuId) {
+        getSession().createSQLQuery("delete from sys_menu where menu_id = " + menuId + " or parent_id = " + menuId + "").executeUpdate();
+    }
+
+    @Override
+    public List<SysMenuDTO> queryMenuByName(String menuName, Integer parentId) {
+        List<SysMenuDTO> list = getSession().createQuery("from SysMenuDTO t where t.menuName='" + menuName + "' and  t.parentId=parentId").list();
+
+        return list;
+    }
+
+    @Override
+    public void add(SysMenuVO menu) {
+        menu.setCreateBy(ShiroUtils.getLoginName());
+        menu.setCreateTime(new Timestamp(System.currentTimeMillis()));
+        SysMenuDTO sysMenuDTO = BeanHelp.copyProperties(menu, SysMenuDTO.class);
+        getSession().save(sysMenuDTO);
+    }
+
+    @Override
+    public void updateMenu(SysMenuVO menu) {
+        SysMenuDTO sysMenuDTO = BeanHelp.copyProperties(menu, SysMenuDTO.class);
+        String loginName = ShiroUtils.getLoginName();
+        sysMenuDTO.setUpdateBy(loginName);
+        sysMenuDTO.setUpdateTime(new Timestamp(System.currentTimeMillis()));
+        getSession().update(sysMenuDTO);
+    }
+
     /**
      * 根据父节点的ID获取所有子节点
      *

+ 9 - 0
src/main/java/com/usky/service/sys/RoleService.java

@@ -4,6 +4,8 @@ import com.usky.entity.sys.vo.SysDeptVO;
 import com.usky.entity.sys.vo.SysRoleVO;
 import com.usky.utils.Page;
 
+import java.util.List;
+
 /**
  * @author laowo
  * @version v1.0
@@ -13,4 +15,11 @@ import com.usky.utils.Page;
 public interface RoleService {
     public Page<SysRoleVO> list(SysDeptVO sysDeptVO, String roleName, String status, String startTime, String endTime, Integer pageSize, Integer pageNo);
 
+    /**
+     * 查询角色
+     *
+     * @param sysRoleVO
+     * @return
+     */
+    List<SysRoleVO> querRoleList(SysRoleVO sysRoleVO);
 }

+ 29 - 0
src/main/java/com/usky/service/sys/RoleServiceImpl.java

@@ -4,6 +4,7 @@ import com.usky.annotion.DataScope;
 import com.usky.dao.impl.BaseDaoImpl;
 import com.usky.entity.BaseEntity;
 import com.usky.entity.sys.SysDeptDTO;
+import com.usky.entity.sys.SysRoleDTO;
 import com.usky.entity.sys.vo.SysDeptVO;
 import com.usky.entity.sys.vo.SysRoleVO;
 import com.usky.utils.Page;
@@ -67,4 +68,32 @@ public class RoleServiceImpl extends BaseDaoImpl implements RoleService {
         result.setPageList(list);
         return result;
     }
+
+    @Override
+    @DataScope(deptAlias = "d")
+    public List<SysRoleVO> querRoleList(SysRoleVO sysRoleVO) {
+        String dataScope = (String) sysRoleVO.getParams().get("dataScope");
+        StringBuffer sb = new StringBuffer();
+        sb.append("SELECT DISTINCT\n" +
+                "\tr.role_id AS roleId,\n" +
+                "\tr.role_name AS roleName,\n" +
+                "\tr.role_key AS roleKey,\n" +
+                "\tr.role_sort AS roleSort,\n" +
+                "\tr.data_scope AS dataScope,\n" +
+                "\tr.STATUS AS status,\n" +
+                "\tr.del_flag AS delFlag,\n" +
+                "\tr.create_time AS createTime,\n" +
+                "\tr.remark \n" +
+                "FROM\n" +
+                "\tsys_role r\n" +
+                "\tLEFT JOIN sys_user_role ur ON ur.role_id = r.role_id\n" +
+                "\tLEFT JOIN sys_user u ON u.user_id = ur.user_id\n" +
+                "\tLEFT JOIN sys_dept d ON u.dept_id = d.dept_id WHERE r.del_flag = '0'");
+        if (StringUtils.isNotBlank(dataScope)) {
+            sb.append(dataScope);
+        }
+        List<SysRoleVO> date = getSession().createSQLQuery(sb.toString()).setResultTransformer(Transformers.aliasToBean(SysRoleVO.class)).list();
+
+        return date;
+    }
 }

+ 32 - 2
src/main/java/com/usky/service/user/UserService.java

@@ -3,6 +3,7 @@ package com.usky.service.user;
 import com.usky.entity.sys.SysUserDTO;
 import com.usky.entity.sys.vo.SysUserVO;
 import com.usky.utils.Page;
+import com.usky.utils.Result;
 
 import java.util.List;
 import java.util.Set;
@@ -16,7 +17,7 @@ public interface UserService {
      *
      * @param user
      */
-    void addUser(SysUserDTO user);
+    void addUser(SysUserVO user);
 
     /**
      * 根据用户Id查询角色
@@ -40,5 +41,34 @@ public interface UserService {
      * @param sysUserVO
      * @return
      */
-    Page<SysUserVO> list(SysUserVO sysUserVO,Integer status, String loginName, String phonenumber, String startTime, String endTime, Integer deptId, Integer pageSize, Integer pageNo);
+    Page<SysUserVO> list(SysUserVO sysUserVO, Integer status, String loginName, String phonenumber, String startTime, String endTime, Integer deptId, Integer pageSize, Integer pageNo);
+
+    /**
+     * 查询用户 -没有分页
+     *
+     * @param sysUserVO
+     * @param status
+     * @param loginName
+     * @param phonenumber
+     * @param startTime
+     * @param endTime
+     * @param deptId
+     * @return
+     */
+    List<SysUserVO> listAll(SysUserVO sysUserVO, Integer status, String loginName, String phonenumber, String startTime, String endTime, Integer deptId);
+
+    /**
+     * 根据手机号查询用户
+     *
+     * @param phonenumber
+     * @return
+     */
+    List<SysUserDTO> queryUserByPhone(String phonenumber);
+
+    /**
+     * 用户信息修改
+     *
+     * @param user
+     */
+    void updateUser(SysUserVO user);
 }

+ 108 - 10
src/main/java/com/usky/service/user/UserServiceImpl.java

@@ -4,14 +4,19 @@ import com.usky.annotion.DataScope;
 import com.usky.dao.impl.BaseDaoImpl;
 import com.usky.entity.sys.SysRoleDTO;
 import com.usky.entity.sys.SysUserDTO;
+import com.usky.entity.sys.SysUserRoleDTO;
 import com.usky.entity.sys.vo.SysUserVO;
+import com.usky.utils.BeanHelp;
 import com.usky.utils.Page;
+import com.usky.utils.ShiroUtils;
+import com.usky.utils.StringUtils;
 import org.apache.commons.lang3.RandomStringUtils;
-import org.apache.commons.lang3.StringUtils;
+
 import org.apache.shiro.crypto.hash.Md5Hash;
 import org.hibernate.query.NativeQuery;
 import org.hibernate.transform.Transformers;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.sql.Timestamp;
 import java.util.*;
@@ -25,17 +30,40 @@ import java.util.*;
 @Service
 public class UserServiceImpl extends BaseDaoImpl implements UserService {
     @Override
-    public void addUser(SysUserDTO user) {
-        String password = user.getPassword();
+    @Transactional
+    public void addUser(SysUserVO user) {
+        SysUserDTO sysUserDTO = BeanHelp.copyProperties(user, SysUserDTO.class);
+        String password = sysUserDTO.getPassword();
         String salt = RandomStringUtils.randomNumeric(6, 8);
-        user.setSalt(salt);
+        sysUserDTO.setSalt(salt);
         Md5Hash md5Hash = new Md5Hash(password, salt); //模拟md5加密一次
-        user.setPassword(md5Hash.toString());
-        user.setStatus("0");
-        user.setCreateTime(new Timestamp(System.currentTimeMillis()));
-        getSession().save(user);
+        sysUserDTO.setPassword(md5Hash.toString());
+        sysUserDTO.setStatus("0");
+        sysUserDTO.setCreateBy(ShiroUtils.getLoginName());
+        sysUserDTO.setCreateTime(new Timestamp(System.currentTimeMillis()));
+        getSession().save(sysUserDTO);
+
+        insertUserRole(sysUserDTO.getUserId(), user.getRoleIds());
     }
 
+    /**
+     * @param userId
+     * @param roleIds
+     */
+    public void insertUserRole(Integer userId, String roleIds) {
+        if (StringUtils.isNotNull(roleIds)) {
+            // 新增用户与角色管理
+            String[] split = roleIds.split(",");
+            for (String roleId : split) {
+                SysUserRoleDTO ur = new SysUserRoleDTO();
+                ur.setUserId(userId);
+                ur.setRoleId(Integer.valueOf(roleId));
+                getSession().save(ur);
+                getSession().flush();
+                getSession().clear();
+            }
+        }
+    }
 
     @Override
     @SuppressWarnings("all")
@@ -68,7 +96,7 @@ public class UserServiceImpl extends BaseDaoImpl implements UserService {
 
 
     @Override
-    @DataScope(deptAlias = "d",userAlias = "u")
+    @DataScope(deptAlias = "d", userAlias = "u")
     public Page<SysUserVO> list(SysUserVO sysUserVO, Integer status, String loginName, String phonenumber, String startTime, String endTime, Integer deptId, Integer pageSize, Integer pageNo) {
         Map<String, Object> params = sysUserVO.getParams();
         String dataScope = (String) params.get("dataScope");
@@ -92,7 +120,7 @@ public class UserServiceImpl extends BaseDaoImpl implements UserService {
         if (null != deptId && deptId != 0) {
             sb.append("AND (u.dept_id = " + deptId + " OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET (" + deptId + ",ancestors) ))");
         }
-        if (StringUtils.isNotBlank(dataScope)){
+        if (StringUtils.isNotBlank(dataScope)) {
             sb.append(" ").append(dataScope);
         }
         List list = getSession().createSQLQuery(sb.toString()).list();
@@ -107,7 +135,77 @@ public class UserServiceImpl extends BaseDaoImpl implements UserService {
         return result;
     }
 
+    @Override
+    @DataScope(deptAlias = "d", userAlias = "u")
+    public List<SysUserVO> listAll(SysUserVO sysUserVO, Integer status, String loginName, String phonenumber, String startTime, String endTime, Integer deptId) {
+        Map<String, Object> params = sysUserVO.getParams();
+        String dataScope = (String) params.get("dataScope");
+        StringBuilder sb = new StringBuilder();
+        sb.append("select u.user_id as userId, u.dept_id as deptId, u.login_name as loginName, u.user_name as userName, u.user_type as userType, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag as delFlag, u.login_ip as loginIp, u.login_date as loginDate, u.create_by as createBy, u.create_time as createTime, u.remark, d.dept_name as deptName, d.leader from sys_user u left join sys_dept d on u.dept_id = d.dept_id where u.del_flag = '0'");
+        if (null != status && status != 0) {
+            sb.append("  AND u.status = " + status + "");
+        }
+        if (StringUtils.isNotBlank(loginName)) {
+            sb.append("AND u.login_name like '%" + loginName + "%'");
+        }
+        if (StringUtils.isNotBlank(phonenumber)) {
+            sb.append(" AND u.phonenumber like '%" + phonenumber + "%'");
+        }
+        if (StringUtils.isNotBlank(startTime)) {
+            sb.append(" AND u.create_time >= " + startTime + "");
+        }
+        if (StringUtils.isNotBlank(endTime)) {
+            sb.append("  AND u.create_time <= " + endTime + "");
+        }
+        if (null != deptId && deptId != 0) {
+            sb.append("AND (u.dept_id = " + deptId + " OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET (" + deptId + ",ancestors) ))");
+        }
+        if (StringUtils.isNotBlank(dataScope)) {
+            sb.append(" ").append(dataScope);
+        }
+        List<SysUserVO> list = getSession().createSQLQuery(sb.toString()).setResultTransformer(Transformers.aliasToBean(SysUserVO.class)).list();
+
+        return list;
+    }
+
+    @Override
+    public List<SysUserDTO> queryUserByPhone(String phonenumber) {
+        List<SysUserDTO> list = getSession().createQuery("from SysUserDTO t where t.delFlag='0' and t.phonenumber='" + phonenumber + "'").list();
+        return list;
+    }
 
+    @Override
+    @Transactional
+    public void updateUser(SysUserVO user) {
+        //删除角色关联
+        delUserRolerByUserId(user.getUserId());
+        //新增用户角色关联
+        insertUserRole(user.getUserId(), user.getRoleIds());
+        SysUserDTO o = (SysUserDTO) getSession().createQuery("from SysUserDTO t where t.userId=" + user.getUserId() + "").uniqueResult();
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getStatus())) {
+            o.setStatus(user.getStatus());
+        }
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getDelFlag())) {
+            o.setDelFlag(user.getDelFlag());
+        }
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getPhonenumber())) {
+            o.setPhonenumber(user.getPhonenumber());
+        }
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getUserName())) {
+            o.setUserName(user.getUserName());
+        }
+        if (0 != user.getDeptId()) {
+            o.setDeptId(user.getDeptId());
+        }
+        if (org.apache.commons.lang3.StringUtils.isNotBlank(user.getRemark())) {
+            o.setRemark(user.getRemark());
+        }
+        getSession().update(o);
+    }
+
+    public void delUserRolerByUserId(Integer userId) {
+        getSession().createSQLQuery("delete sys_user_role t where t.user_id= " + userId + "");
+    }
 
 
 }

+ 29 - 0
src/main/java/com/usky/utils/AuthorizationUtils.java

@@ -0,0 +1,29 @@
+package com.usky.utils;
+
+import com.usky.config.shiro.MyRealm;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.mgt.RealmSecurityManager;
+
+/**
+ * 用户授权信息
+ *
+ */
+public class AuthorizationUtils
+{
+    /**
+     * 清理所有用户授权信息缓存
+     */
+    public static void clearAllCachedAuthorizationInfo()
+    {
+        getUserRealm().clearAllCachedAuthorizationInfo();
+    }
+
+    /**
+     * 获取自定义Realm
+     */
+    public static MyRealm getUserRealm()
+    {
+        RealmSecurityManager rsm = (RealmSecurityManager) SecurityUtils.getSecurityManager();
+        return (MyRealm) rsm.getRealms().iterator().next();
+    }
+}

+ 6 - 1
src/main/java/com/usky/utils/ShiroUtils.java

@@ -65,8 +65,13 @@ public class ShiroUtils {
         return getSysUserVo().getUserId();
     }
 
+//    public static String getLoginName() {
+//        return getSysUser().getLoginName();
+//    }
+
+
     public static String getLoginName() {
-        return getSysUser().getLoginName();
+        return getSysUserVo().getLoginName();
     }
 
     public static String getIp() {