1、创建表单视图对象 param
@Data
public class DeptParam {
private Integer id;
@NotBlank(message = "部门名称不可以为空")
@Length(max = 15, min = 2, message = "部门名称长度需要在2-15个字之间")
private String name;
private Integer parentId;
@NotNull(message = "展示顺序不可以为空")
private Integer seq;
@Length(max = 150, message = "备注的长度不能超过150个字")
private String remark;
}
2、SysDeptController
@Controller
@RequestMapping("/sys/dept")
@Slf4j
public class SysDeptController {
@Autowired
private SysDeptService sysDeptService;
@RequestMapping("/save")
@ResponseBody
public JsonData saveDept(DeptParam param) {
sysDeptService.save(param);
return JsonData.success();
}
}
3、SysDeptService
在 SysDept 实体类添加 @Builder 等注解
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class SysDept {}
@Service
public class SysDeptService {
@Autowired
private SysDeptMapper sysDeptMapper;
public void save(@Valid DeptParam param) {
if(checkExist(param.getParentId(), param.getName(), param.getId())) {
throw new ParamException("同一层级下存在相同名称的部门");
}
SysDept dept = SysDept.builder().name(param.getName())
.parentId(param.getParentId())
.seq(param.getSeq())
.remark(param.getRemark())
.build();
dept.setLevel(LevelUtil.calculateLevel(getLevel(param.getParentId()), param.getParentId()));
dept.setOperator("system"); // TODO
dept.setOperateId("127.0.0.1"); // TODO
dept.setOperateTime(new Date());
sysDeptMapper.insertSelective(dept);
}
// 检查同一层级下是否存在相同名称的部门
private boolean checkExist(Integer parentId, String deptName, Integer deptId) {
// TODO
return false;
}
// 获取部门的 Level
private String getLevel(Integer deptId) {
SysDept dept = sysDeptMapper.selectByPrimaryKey(deptId);
if(dept == null) {
return null;
}
return dept.getLevel();
}
}
计算部门 level 的工具类
public class LevelUtil {
public final static String SEPARATOR = ".";
public final static String ROOT = "0";
// 1 1.1 1.2 2
public static String calculateLevel(String parentLevel, int parentId) {
// pom文件添加依赖 commons-lang3
if(StringUtils.isBlank(parentLevel)) {
return ROOT;
} else {
return StringUtils.join(parentLevel, SEPARATOR, parentId);
}
}
}}