创建表单视图对象
@Getter @Setter @ToString public class AclModuleParam { private Integer id; @NotBlank(message = "权限模块名称不可以为空") @Length(min = 2, max = 20, message = "权限模块名称长度需要在2~20个字之间") private String name; private Integer parentId = 0; @NotNull(message = "权限模块展示顺序不可以为空") private Integer seq; @NotNull(message = "权限模块状态不可以为空") @Min(value = 0, message = "权限模块状态不合法") @Max(value = 1, message = "权限模块状态不合法") private Integer status; @Length(max = 200, message = "权限模块备注需要在200个字之间") private String remark; }新增权限模块、更新权限模块 service
@Service public class SysAclModuleService { @Autowired private SysAclModuleMapper sysAclModuleMapper; public void save(@Valid AclModuleParam param){ if(checkExist(param.getParentId(), param.getName(), param.getId())) { throw new ParamException("同一层级下存在相同名称的权限模块"); } SysAclModule sysAclModule = SysAclModule.builder().name(param.getName()) .parentId(param.getParentId()) .seq(param.getSeq()) .status(param.getStatus()) .remark(param.getRemark()) .build(); sysAclModule.setLevel(LevelUtil.calculateLevel(getLevel(param.getParentId()), param.getParentId())); sysAclModule.setOperator(RequestHolder.getCurrentUser().getUsername()); sysAclModule.setOperateId(IpUtil.getRemoteIp(RequestHolder.getCurrentRequest())); sysAclModule.setOperateTime(new Date()); sysAclModuleMapper.insertSelective(sysAclModule); } public void update(@Valid AclModuleParam param) { if(checkExist(param.getParentId(), param.getName(), param.getId())) { throw new ParamException("同一层级下存在相同名称的权限模块"); } SysAclModule before = sysAclModuleMapper.selectByPrimaryKey(param.getId()); Preconditions.checkNotNull(before, "待更新的权限模块不存在"); SysAclModule after = SysAclModule.builder().id(param.getId()) .name(param.getName()) .parentId(param.getParentId()) .seq(param.getSeq()) .status(param.getStatus()) .remark(param.getRemark()) .build(); after.setLevel(LevelUtil.calculateLevel(getLevel(param.getParentId()), param.getParentId())); after.setOperator(RequestHolder.getCurrentUser().getUsername()); after.setOperateId(IpUtil.getRemoteIp(RequestHolder.getCurrentRequest())); after.setOperateTime(new Date()); updateWithChild(before, after); } @Transactional public void updateWithChild(SysAclModule before, SysAclModule after) { String newLevelPrefix = after.getLevel(); String oldLevelPrefix = before.getLevel(); if(!after.getLevel().equals(before.getLevel())) { List<SysAclModule> aclModuleList = sysAclModuleMapper.getChildAclModuleListByLevel(before.getLevel()); if(CollectionUtils.isNotEmpty(aclModuleList)) { for(SysAclModule aclModule : aclModuleList) { String level = aclModule.getLevel(); if (level.indexOf(oldLevelPrefix) == 0) { level = newLevelPrefix + level.substring(oldLevelPrefix.length()); aclModule.setLevel(level); } } sysAclModuleMapper.batchUpdateLevel(aclModuleList); } } sysAclModuleMapper.updateByPrimaryKeySelective(after); } // 检查同一层级下是否存在相同名称的部门 private boolean checkExist(Integer parentId, String aclModuleName, Integer deptId) { // TODO return false; } // 获取部门的 Level private String getLevel(Integer aclModuleName) { SysAclModule aclModule = sysAclModuleMapper.selectByPrimaryKey(aclModuleName); if(aclModule == null) { return null; } return aclModule.getLevel(); } }新增权限模块、更新权限模块Controller
@Controller @RequestMapping("/sys/aclModule") @Slf4j public class SysAclModuleController { @Autowired private SysAclModuleService sysAclModuleService; @RequestMapping("/page") public ModelAndView page() { return new ModelAndView("acl/acl"); } @RequestMapping("/save") @ResponseBody public JsonData saveAclModule(AclModuleParam param) { sysAclModuleService.save(param); return JsonData.success(); } @RequestMapping("/update") @ResponseBody public JsonData updateAclModule(AclModuleParam param) { sysAclModuleService.update(param); return JsonData.success(); } }