思想:
第一级别:先查询数据库中最大的编码,如果不存在则设置第一个编号的格式 例如:101 ,如果存在则最大编码加一 这只是同一级别的编号
第二级别:也是先查询数据库中最大的编码(此时的编码是第二级别的最大编码)如果最大编码不存在则先看传来的父id符不符合要求(因为第一级是没有父id或自定义的id列如:1,第二级后的级别都是有父id的)如果传来的父id是不是默认的则证明是第二级别的第一个编码,只需在查询的编码后加"01"即可,如果查到了,那就最大编码加一
代码如下:
- ServuceImpl层(重点看这个 别的无所谓)
public class DeptServiceImpl extends BaseServiceImplimplements DeptService{ private final String DEFAULT_PARENT_ID="1";//部门默认pid @Override public int save(Dept mapOrEntiry) { //先看看前台传来的pid(父id)是不是空 String pid=mapOrEntiry.getPid(); //自定义字符串工具包 单纯的看看pid是不是空 if(StringUtils.isBlank(pid)){ pid=DEFAULT_PARENT_ID; mapOrEntiry.setPid(pid); } String maxCode=null; //查询最大编码 String code= mapper.queryMaxCode(mapOrEntiry.getEuid(),pid); if(null==code){ //如果不存在 //如果父id是默认的1 if(DEFAULT_PARENT_ID.equals(pid)){ maxCode="101"; }else{ //如果pid不是默认值 查询部门id为pid的编码 code=mapper.queryCodeById(mapOrEntiry.getPid()); //新编码是当前编码code的第一个子编码 maxCode=code+"01"; } }else{ //如果存在 假如是101 maxCode=getNextCode(code); } mapOrEntiry.setDeptno(maxCode); return mapper.save(mapOrEntiry); } String getNextCode(String code){ int len=code.length(); String num=code.substring(len-2); int newNum=Integer.parseInt(num)+1; String newCode=code.substring(0,len-2)+String.format("%02d",newNum); return newCode; } }
- Mapper层
mapper.queryCodeById(mapOrEntiry.getPid())的sql语句
select max(d.deptno) deptno from s_dept d where d.euid = #{euid} and d.pid = #{pid}
mapper.save(mapOrEntiry)的sql语句
insert into s_dept(id, name, deptno, pid, sorts, note, euid) values (uuid(), #{name}, #{deptno}, #{pid}, #{sorts}, #{note}, #{euid})
- javabean层
@Data
public class Dept {
@NotBlank(message = "部门id不能为空!",groups = {Modify.class})
String id;
@NotBlank(message = "部门名称不能为空!",groups = {Save.class,Modify.class})
String name;
String pid;
int sorts;
String note;
String deptno;
@NotBlank(message = "企业用户id不能为空!",groups = {Save.class})
String euid;
}



