• 部门innercode刷新


      最近遇到一个小需求,就是刷新部门的innercode。在导入数据的时候,innercode乱了,所以需要刷新。那先说说innercode是什么吧。

      大家都知道部门是一个树形结构,但是有时候想知道一个部门下面都有哪些下级部门包括下级的下级等等,如果使用上级部门pk一级一级的往下找很麻烦,为了把这个树拉平,创建一个innercode字段。例如本系统中这样,加入本级部门的innercode是AAAA(四位随机字符),那么本部门所在的下级部门,innercode可能就是AAAABBBB,再下级可能就是AAAABBBBCCCC,没一个下级部门比上级部门多四个随机字符,并且前面的字符是和上级部门是一致的。这样就相当于拉平了这个部门树。比如查询本部门下的所有下级部门,可以在SQL中加上like 'AAAA%'就可以查出来了。但是现在有个需求就是innercode乱了,但是部门表里的pk_fatherorg没有乱的,是好的,这就要重新刷新了。实现的逻辑大概如下:

    public void updateDeptInnercode(String innercode,String pk_fatherorg) throws DAOException{
            String sql = "select innercode,pk_dept,pk_fatherorg from org_dept where dr=0 and pk_fatherorg = '"+pk_fatherorg+"'";
            List<Map<String,String>> list = (List<Map<String, String>>) 
                    this.getBaseDAO().executeQuery(sql,  new MapListProcessor());
            if(list.size()==0){
                return ;
            }
            for (Map<String, String> map : list) {
                String s = updateCode(innercode,map.get("pk_dept"));
                updateDeptInnercode(s,map.get("pk_dept"));
            }
        }

      private String updateCode(String innercode,String pk_dept) throws DAOException {
        StringBuffer sql = new StringBuffer();
        String s = get4RandomCode();
        //更新部门表
        sql.append("update org_dept set innercode = '")
        .append(innercode).append(s)
        .append("' where pk_dept = '")
        .append(pk_dept)
        .append("'");
        this.getBaseDAO().executeUpdate(sql.toString());
        //更新部门版本表
        sql = new StringBuffer();
        sql.append("update org_dept_v v set v.innercode = '")
        .append(innercode).append(s)
        .append("' where v.pk_vid =(select d.pk_vid from org_dept d where d.pk_dept ='")
        .append(pk_dept)
        .append("' )");
        this.getBaseDAO().executeUpdate(sql.toString());
        return innercode+s;
      }

    
    

      private String get4RandomCode(){
        Random rom = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i <4; i++) {
          char r1 = ran[rom.nextInt(35)];
          sb.append(r1);
        }
        return sb.toString();
      }

      private char[] ran = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z‘,'0','1','2','3','4','5','6','7','8','9'};

  • 相关阅读:
    python第四篇:linux命令行总结 + 自动备份Python程序
    mount挂载相关指令
    TiDB配置HAProxy负载均衡
    NewSQL 介绍
    mysql 主从搭建
    MySQL 双主问题集
    MySQL 测试工具(基准测试、压力测试)
    分布式 NewSQL 对比
    (转载)MySQL数据库的几种常见高可用方案
    MySQL 大表备份、改表
  • 原文地址:https://www.cnblogs.com/wangyongwen/p/11182131.html
Copyright © 2020-2023  润新知