diff --git a/slife-sys/src/main/java/com/slife/controller/SysMenuController.java b/slife-sys/src/main/java/com/slife/controller/SysMenuController.java index 75d2688..f108e98 100644 --- a/slife-sys/src/main/java/com/slife/controller/SysMenuController.java +++ b/slife-sys/src/main/java/com/slife/controller/SysMenuController.java @@ -32,8 +32,7 @@ import java.util.Map; @RequestMapping(value = "/sys/menu") public class SysMenuController extends BaseController{ - @Autowired - private SysRoleService sysRoleService; + @Autowired private ISysMenuService sysMenuService; @@ -93,6 +92,12 @@ public class SysMenuController extends BaseController{ return "redirect:/sys/menu"; } + + /** + * 设置为不可用 + * @param id + * @return + */ @PostMapping(value="disable/{id}") @ResponseBody public ReturnDTO disable(@PathVariable("id") Long id){ diff --git a/slife-sys/src/main/java/com/slife/controller/SysRoleController.java b/slife-sys/src/main/java/com/slife/controller/SysRoleController.java index 1166fb6..741ecb7 100644 --- a/slife-sys/src/main/java/com/slife/controller/SysRoleController.java +++ b/slife-sys/src/main/java/com/slife/controller/SysRoleController.java @@ -1,13 +1,18 @@ package com.slife.controller; +import com.alibaba.fastjson.JSON; import com.slife.annotation.SLog; import com.slife.base.controller.BaseController; +import com.slife.base.entity.ReturnDTO; import com.slife.base.vo.DataTable; import com.slife.entity.SysRole; import com.slife.entity.SysUser; +import com.slife.service.ISysMenuService; import com.slife.service.impl.SysRoleService; +import com.slife.util.ReturnDTOUtil; import com.slife.util.ServletUtils; import io.swagger.annotations.ApiOperation; +import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -15,6 +20,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; import java.util.Map; /** @@ -29,6 +35,8 @@ import java.util.Map; public class SysRoleController extends BaseController { @Autowired private SysRoleService sysRoleService; + @Autowired + private ISysMenuService sysMenuService; /** * 进入系统角色列表 @@ -38,12 +46,11 @@ public class SysRoleController extends BaseController { */ @GetMapping(value = "") public String list(Model model, HttpServletRequest request) { - model.addAttribute("url", request.getContextPath()+"/sys/role/"); + model.addAttribute("url", request.getContextPath() + "/sys/role/"); return "role/list"; } - @SLog("获角色列表") @ApiOperation(value = "获角色列表", notes = "获角色列表:使用约定的DataTable") @PostMapping(value = "/list") @@ -51,4 +58,96 @@ public class SysRoleController extends BaseController { public DataTable list(@RequestBody DataTable dt, ServletRequest request) { return sysRoleService.pageSearch(dt); } + + + /** + * 进入创建角色界面 + * + * @param model + * @return + */ + @GetMapping(value = "/insert") + public String create(Model model, HttpServletRequest request) { + SysRole sysRole = new SysRole(); + sysRole.setId(0L); + model.addAttribute("action", "insert"); + model.addAttribute("role", sysRole); + model.addAttribute("url", request.getContextPath() + "/sys/role/"); + model.addAttribute("menuTree", JSON.toJSONString(sysMenuService.getMenuTree())); + return "role/detail"; + } + + @ApiOperation(value = "创建角色操作", notes = "创建角色操作") + @PostMapping(value = "/insert") + @ResponseBody + public ReturnDTO create(@Valid SysRole sysRole, @RequestParam(value = "ids", defaultValue = "") Long[] menuIds) { + sysRole.setId(null); + sysRoleService.insertSysRole(sysRole, menuIds); + return ReturnDTOUtil.success(); + } + + /** + * 检测角色编码是否存在 + * + * @param id + * @param code + * @return + */ + @GetMapping(value = "check/{id}") + @ResponseBody + public Boolean check(@PathVariable("id") Long id, @RequestParam("code") String code) { + return sysRoleService.checkRoleCode(code, id); + } + + /** + * 查看用户详情界面 + * + * @param id + * @param model + * @return + */ + @GetMapping(value = "/detail/{id}") + public String detail(@PathVariable("id") Long id, Model model, HttpServletRequest request) { + model.addAttribute("action", "detail"); + SysRole sysRole = sysRoleService.selectById(id); + model.addAttribute("role", sysRole); + model.addAttribute("menuTree", JSON.toJSONString(sysRoleService.selectMenuTreeHasSelectDis(id,true))); + model.addAttribute("url", request.getContextPath() + "/sys/role/"); + return "role/detail"; + } + + /** + * 更新角色界面 + * + * @param id + * + * @return + */ + + @GetMapping(value="update/{id}") + public String updateForm(@PathVariable("id") Long id,Model model, HttpServletRequest request){ + model.addAttribute("action","update"); + SysRole sysRole = sysRoleService.selectById(id); + model.addAttribute("role",sysRole); + model.addAttribute("url", request.getContextPath() + "/sys/role/"); + model.addAttribute("menuTree", JSON.toJSONString(sysRoleService.selectMenuTreeHasSelectDis(id,false))); + return "role/detail"; + } + + + @ApiOperation(value = "修改角色操作", notes = "修改角色操作") + @PostMapping(value = "/update") + @ResponseBody + public ReturnDTO update(@Valid SysRole sysRole, @RequestParam(value = "ids", defaultValue = "") Long[] menuIds) { + sysRoleService.insertSysRole(sysRole, menuIds); + return ReturnDTOUtil.success(); + } + + + @PostMapping(value = "/tf") + @ResponseBody + public ReturnDTO tf() { + sysRoleService.tf(); + return ReturnDTOUtil.success(); + } } diff --git a/slife-sys/src/main/java/com/slife/controller/SysUserController.java b/slife-sys/src/main/java/com/slife/controller/SysUserController.java index 7af9abc..1ad4c2c 100644 --- a/slife-sys/src/main/java/com/slife/controller/SysUserController.java +++ b/slife-sys/src/main/java/com/slife/controller/SysUserController.java @@ -167,7 +167,7 @@ public class SysUserController extends BaseController { * @param id * @return */ - @RequestMapping(value = "update/{id}") + @GetMapping(value = "update/{id}") public String update(@PathVariable("id") Long id, Model model,HttpServletRequest request) { model.addAttribute("action", "update"); model.addAttribute("url", request.getContextPath() + "/sys/user/"); diff --git a/slife-sys/src/main/java/com/slife/dao/SysRoleMenuDao.java b/slife-sys/src/main/java/com/slife/dao/SysRoleMenuDao.java new file mode 100644 index 0000000..d658063 --- /dev/null +++ b/slife-sys/src/main/java/com/slife/dao/SysRoleMenuDao.java @@ -0,0 +1,18 @@ +package com.slife.dao; + +import com.slife.base.dao.CrudDao; +import com.slife.entity.SysRoleMenu; +import org.springframework.stereotype.Component; + +/** + * + * @author chen + * @date 2017/10/26 + *

+ * Email 122741482@qq.com + *

+ * Describe: + */ +@Component +public interface SysRoleMenuDao extends CrudDao { +} diff --git a/slife-sys/src/main/java/com/slife/entity/SysRoleMenu.java b/slife-sys/src/main/java/com/slife/entity/SysRoleMenu.java new file mode 100644 index 0000000..302c50b --- /dev/null +++ b/slife-sys/src/main/java/com/slife/entity/SysRoleMenu.java @@ -0,0 +1,50 @@ +package com.slife.entity; + +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableName; + +import java.io.Serializable; + +/** + * @author chen + * @date 2017/10/26 + *

+ * Email 122741482@qq.com + *

+ * Describe: 角色 菜单 表 + */ +@TableName("sys_role_sys_menu") +public class SysRoleMenu implements Serializable { + private static final long serialVersionUID = -3876781931176875589L; + + public SysRoleMenu() { + + } + + public SysRoleMenu(Long sysMenuId, Long sysRoleId) { + this.sysMenuId = sysMenuId; + this.sysRoleId = sysRoleId; + } + + @TableField(value = "sys_menu_id") + private Long sysMenuId; + + @TableField(value = "sys_role_id") + private Long sysRoleId; + + public Long getSysRoleId() { + return sysRoleId; + } + + public void setSysRoleId(Long sysRoleId) { + this.sysRoleId = sysRoleId; + } + + public Long getSysMenuId() { + return sysMenuId; + } + + public void setSysMenuId(Long sysMenuId) { + this.sysMenuId = sysMenuId; + } +} diff --git a/slife-sys/src/main/java/com/slife/service/impl/SysRoleMenuService.java b/slife-sys/src/main/java/com/slife/service/impl/SysRoleMenuService.java new file mode 100644 index 0000000..7356b53 --- /dev/null +++ b/slife-sys/src/main/java/com/slife/service/impl/SysRoleMenuService.java @@ -0,0 +1,21 @@ +package com.slife.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.slife.dao.SysRoleMenuDao; +import com.slife.entity.SysRoleMenu; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * + * @author chen + * @date 2017/10/26 + *

+ * Email 122741482@qq.com + *

+ * Describe: + */ +@Service +@Transactional(readOnly = true, rollbackFor = Exception.class) +public class SysRoleMenuService extends ServiceImpl { +} diff --git a/slife-sys/src/main/java/com/slife/service/impl/SysRoleService.java b/slife-sys/src/main/java/com/slife/service/impl/SysRoleService.java index 0a96fa6..33926a6 100644 --- a/slife-sys/src/main/java/com/slife/service/impl/SysRoleService.java +++ b/slife-sys/src/main/java/com/slife/service/impl/SysRoleService.java @@ -2,35 +2,91 @@ package com.slife.service.impl; import com.baomidou.mybatisplus.mapper.Condition; import com.baomidou.mybatisplus.plugins.Page; -import com.baomidou.mybatisplus.toolkit.ArrayUtils; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.slife.base.service.impl.BaseService; import com.slife.base.vo.DataTable; +import com.slife.base.vo.JsTree; +import com.slife.base.vo.JsTreeState; import com.slife.constant.Global; import com.slife.dao.SysRoleDao; +import com.slife.entity.SysMenu; import com.slife.entity.SysRole; +import com.slife.entity.SysRoleMenu; import com.slife.entity.SysUserRole; import com.slife.vo.SysRoleVO; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** - * Created by chen on 2017/4/24. + * @author chen + * @date 2017/4/24 *

* Email 122741482@qq.com *

* Describe: sys 角色 服务 */ @Service -@Transactional(readOnly = true) +@Transactional(readOnly = true, rollbackFor = Exception.class) public class SysRoleService extends BaseService { @Autowired private SysUserRoleService sysUserRoleService; + @Autowired + private SysRoleMenuService sysRoleMenuService; + @Autowired + private SysMenuService sysMenuService; + + @Autowired + private SysRoleDao sysRoleDao; + + /** + * 获取角色选中的菜单树 + * + * @param roleId + * @return + */ + public List selectMenuTreeHasSelectDis(Long roleId,Boolean disable) { + + List sysRoleMenus = sysRoleMenuService.selectList(Condition.create().eq("sys_role_id", roleId)); + + Map map = Maps.newHashMap(); + sysRoleMenus.stream().parallel().forEach(sysRoleMenu -> map.put(sysRoleMenu.getSysMenuId(), sysRoleMenu.getSysMenuId())); + + List list = sysMenuService.selectList(null); + + List jts = list.stream().parallel().map(sysMenu -> { + JsTree jt = new JsTree(); + jt.setId(sysMenu.getId().toString()); + jt.setParent(sysMenu.getParentId() == null ? "#" : (sysMenu.getParentId().compareTo(0L) > 0 ? sysMenu.getParentId() + .toString() : "#")); + jt.setText(sysMenu.getName()); + JsTreeState jtState = new JsTreeState(); + if (disable){ + jtState.setDisabled(disable); + } + + //一级节点除了主页,都是未选中状态 + if ((sysMenu.getParentId() == null || 0L == sysMenu.getParentId()) && !"/index".equalsIgnoreCase(sysMenu.getHref())) { + jtState.setSelected(false); + } else { + jtState.setSelected(map.get(sysMenu.getId()) != null); + } + jt.setState(jtState); + return jt; + }).collect(Collectors.toList()); + + return jts; + } /** * 获取用户的角色和菜单 @@ -95,25 +151,62 @@ public class SysRoleService extends BaseService { * @param userId * @param ids */ - @Transactional(readOnly = false) + @Transactional(readOnly = false, rollbackFor = Exception.class) public void insertSysRole(Long userId, Long[] ids) { //删除现有的用户角色 sysUserRoleService.delete(Condition.create().eq("sys_user_id", userId)); if (null != ids && ids.length > 0) { - - /* List sysUserRoles = new ArrayList(); - for (Long roleId : ids) { - sysUserRoles.add(new SysUserRole(userId, roleId)); - }*/ - - List sysUserRoles =Arrays.stream(ids).parallel().map(roleId->{ - return new SysUserRole(userId, roleId); + List sysUserRoles = Arrays.stream(ids).parallel().map(roleId -> { + return new SysUserRole(userId, roleId); }).collect(Collectors.toList()); - - //保存用户角色 sysUserRoleService.insertBatch(sysUserRoles); } } + + @Transactional(readOnly = false, rollbackFor = Exception.class) + public void tf() { + SysRole s=new SysRole(); + s.setName("ddddd"); + this.baseMapper.insert(s); + double d=1/0; + } + + /** + * 保存角色和对应的菜单 + * + * @param sysRole + * @param menuIds + */ + @Transactional(readOnly = false, rollbackFor = Exception.class) + public void insertSysRole(SysRole sysRole, Long[] menuIds) { + + insertOrUpdate(sysRole); + Long roleId = sysRole.getId(); + //删除现有的 角色 菜单 + sysRoleMenuService.delete(Condition.create().eq("sys_role_id", roleId)); + if (null != menuIds && menuIds.length > 0) { + List sysRoleMenu = Arrays.stream(menuIds).parallel().map(menuId -> { + return new SysRoleMenu(menuId, roleId); + }).collect(Collectors.toList()); + //角色关联的菜单 + sysRoleMenuService.insertBatch(sysRoleMenu); + } + } + + /** + * 检测角色编码是否存在 + * + * @param code + * @param id + * @return + */ + public Boolean checkRoleCode(String code, Long id) { + SysRole sysRole = selectOne(Condition.create().eq("code", code)); + return sysRole == null || !id.equals(0L) && sysRole.getId().equals(id); + } + + + } diff --git a/slife-sys/src/main/java/com/slife/service/impl/SysUserRoleService.java b/slife-sys/src/main/java/com/slife/service/impl/SysUserRoleService.java index 5d42931..83409a5 100644 --- a/slife-sys/src/main/java/com/slife/service/impl/SysUserRoleService.java +++ b/slife-sys/src/main/java/com/slife/service/impl/SysUserRoleService.java @@ -7,13 +7,15 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** - * Created by chen on 2017/9/1. + * + * @author chen + * @date 2017/9/1 *

* Email 122741482@qq.com *

* Describe: 系统用户角色中间表 */ @Service -@Transactional(readOnly = true) +@Transactional(readOnly = true, rollbackFor = Exception.class) public class SysUserRoleService extends ServiceImpl { } diff --git a/slife-sys/src/main/resources/templates/menu/list.ftl b/slife-sys/src/main/resources/templates/menu/list.ftl index 7cb2f7c..e041dd2 100644 --- a/slife-sys/src/main/resources/templates/menu/list.ftl +++ b/slife-sys/src/main/resources/templates/menu/list.ftl @@ -57,7 +57,7 @@