创建表单视图对象
@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();
}
}