自动生成层级关系编号

思想:
第一级别:先查询数据库中最大的编码,如果不存在则设置第一个编号的格式 例如:101 ,如果存在则最大编码加一 这只是同一级别的编号

第二级别:也是先查询数据库中最大的编码(此时的编码是第二级别的最大编码)如果最大编码不存在则先看传来的父id符不符合要求(因为第一级是没有父id或自定义的id列如:1,第二级后的级别都是有父id的)如果传来的父id是不是默认的则证明是第二级别的第一个编码,只需在查询的编码后加"01"即可,如果查到了,那就最大编码加一

代码如下:

  1. ServuceImpl层(重点看这个 别的无所谓)
public class DeptServiceImpl extends BaseServiceImpl<Dept, DeptMapper> implements 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);
    }
    /**
     * 获取当前编码+1后的新编码
     * @param code
     * @return
     */
    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;
    }
}
  1. Mapper层
    mapper.queryCodeById(mapOrEntiry.getPid())的sql语句
 <select id="queryMaxCode" parameterType="string" resultType="string">
        select max(d.deptno) deptno
        from s_dept d
        where d.euid = #{euid}
          and d.pid = #{pid}
    </select>

mapper.save(mapOrEntiry)的sql语句

 <insert id="save" parameterType="dept">
        insert into s_dept(id, name, deptno, pid, sorts, note, euid)
        values (uuid(), #{name}, #{deptno}, #{pid}, #{sorts}, #{note}, #{euid})
    </insert>
  1. 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;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值