5-1 新增、更新权限模块接口

创建表单视图对象

@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();
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值