递归用法

/**
     * 获取旧供应商id
     * @param json
     * @return
     * @throws ActiveRecordException
     */
    public String getSuppId(JSONArray json ,String suppliersName) throws ActiveRecordException{
        String suppId = "";
        //默认不存在
        if(json == null || json.size() == 0){
            return suppId;
        }
        ////调用共通的存在DB中的供应商信息
        Record supp=getExistSuppliersName(json, suppliersName);
        if (supp == null ) {
            return suppId;
        }
        return supp.getStr("uuid") ;
//        String beforeName = "";
//        for (int j = 0; j < json.size(); j++) {
//            JSONObject obj = JSONObject.parseObject(json.getString(j));
//            if (obj.getString("ProjectName")!=null && (obj.getString("ProjectName").startsWith("名称变更") || obj.getString("ProjectName").equals("企业名称") || obj.getString("ProjectName").equals("名称"))) {
//                if(obj.getString("BeforeContent").lastIndexOf("企业名称")>-1)
//                {
//                    String[] array = BCConvertUtils.qj2bj(obj.getString("AfterContent")).split(";");
//                    for(String name:array)
//                    {
//                        if(name.lastIndexOf("企业名称")>-1)
//                        {
//                            name = name.replace("
", "");
//                            String[] nameArray = name.split(":");
//                            beforeName = nameArray[1].trim();
//                        }
//                    }
//                }
//                else
//                {
//                    beforeName = obj.getString("BeforeContent");
//                }
//                //通过beforename查询供应商名称是否存在
//                Record rec = null;
//                rec = Db.findFirst("select uuid from biz_suppliers where sys_status=1 and suppliers_name=? ",beforeName);
//                if( rec ==null ){
//                    rec = Db.findFirst("select uuid from biz_suppliers where sys_status=1 and (suppliers_name=? or suppliers_name=?)",BCConvertUtils.bj2qj(beforeName),BCConvertUtils.qj2bj(beforeName));
//                }
//                if(rec != null){
//                    suppId = rec.getStr("uuid");
//                    break;
//                }
//            }
//        }
//        return suppId;
        //
    }
    
    /**
     * 获取旧供应商信息
     * @param json
     * @return
     * @throws ActiveRecordException
     */
    public Record getSuppRec(JSONArray json,String suppliersName) throws ActiveRecordException{
        Record supp = null;
        // 默认不存在
        if(json == null || json.size() == 0){
            return supp;
        }
        //// 调用共通的存在DB中的供应商信息
        supp=getExistSuppliersName(json, suppliersName);
        return supp;
//        String beforeName = "";
//        for (int j = 0; j < json.size(); j++) {
//            JSONObject obj = JSONObject.parseObject(json.getString(j));
//            if (obj.getString("ProjectName")!=null && (obj.getString("ProjectName").startsWith("名称变更") || obj.getString("ProjectName").equals("企业名称") || obj.getString("ProjectName").equals("名称"))) {
//                if(obj.getString("BeforeContent").lastIndexOf("企业名称")>-1)
//                {
//                    String[] array = BCConvertUtils.qj2bj(obj.getString("AfterContent")).split(";");
//                    for(String name:array)
//                    {
//                        if(name.lastIndexOf("企业名称")>-1)
//                        {
//                            name = name.replace("
", "");
//                            String[] nameArray = name.split(":");
//                            beforeName = nameArray[1].trim();
//                        }
//                    }
//                }
//                else
//                {
//                    beforeName = obj.getString("BeforeContent");
//                }
//                //通过beforename查询供应商名称是否存在
//                Record rec = null;
//                rec = Db.findFirst("select uuid,suppliers_name,certificates_no,op_from,op_to from biz_suppliers where sys_status=1 and suppliers_name=?",beforeName);
//                if(rec == null){
//                    rec = Db.findFirst("select uuid,suppliers_name,certificates_no,op_from,op_to from biz_suppliers where sys_status=1 and (suppliers_name=? or suppliers_name=?)",BCConvertUtils.bj2qj(beforeName),BCConvertUtils.qj2bj(beforeName));
//                }
//                if(rec != null){
//                    supp = rec;
//                    break;
//                }
//            }
//        }
//        return supp;
        //
    }
    
    /**
     * 获取工商接口中,履历数据在DB中存在的那条数据
     * @param json  工商接口数据
     * @param beforeSuppliersName  审核的供应商名字
     * @return
     * @throws ActiveRecordException
     */
    public Record getExistSuppliersName(JSONArray json,String beforeSuppliersName) throws ActiveRecordException{
        Record supp = null;
        boolean flag = false;
        String name = "";
        for (int j = 0; j < json.size();j++) {
            // 获取当前的循环的JSON对象
            JSONObject obj = JSONObject.parseObject(json.getString(j));
            // 获取BeforeContent信息
            String beforeContent=obj.getString("BeforeContent");
            // 获取afterContent信息
            String afterContent=obj.getString("AfterContent");
            // 这里统一用半角来匹配
            beforeSuppliersName = BCConvertUtils.qj2bj(beforeSuppliersName);
            beforeContent = BCConvertUtils.qj2bj(beforeContent);
            afterContent = BCConvertUtils.qj2bj(afterContent);
            // 第一种情况:改之前的名字,存在DB中
            if (StringUtils.notBlank(beforeContent) && beforeContent.contains(beforeSuppliersName)) {
                // 调用公用方法
                Record rec = commonWay(beforeContent , name);
                if(rec != null){
                    supp = rec;
                    flag = false;
                    break;
                }
            }
            // 第二种情况:改之后的名字,存在DB中
            if (StringUtils.notBlank(afterContent) && afterContent.contains(beforeSuppliersName)) {
                // 调用公用方法
                Record rec = commonWay(afterContent , name);
                if(rec != null){
                    supp = rec;
                    flag = false;
                    break;
                }
            }
            // 第三种情况: 用改之前的名字来判断,但用改之后的名字来查
            if (StringUtils.notBlank(beforeContent) && beforeContent.contains(beforeSuppliersName)) {
                // 调用公用方法
                Record rec = commonWay(afterContent , name);
                if(rec != null){
                    supp = rec;
                    flag = false;
                    break;
                }
            }
            // 第四种情况:用改之后的名字判断,但用改之前的名字来查
            if (StringUtils.notBlank(afterContent) && afterContent.contains(beforeSuppliersName)) {
                // 调用公用方法
                Record rec = commonWay(beforeContent , name);
                if(rec != null){
                    supp = rec;
                    flag = false;
                    break;
                }
            }
            // 第五种情况:用改之后的名字,作为下次循环方法的供应商名字
            if (StringUtils.notBlank(beforeContent) && beforeContent.contains(beforeSuppliersName)) {
                afterContent = afterContent.replace("
", "");
                String[] nameArray = afterContent.split(":");
                name = nameArray[1].trim().substring(0,nameArray[1].length() - 1);
                flag = true;
                break;
            }
        }
        // 标志位为false,直接结束
        if (!flag) {
            return supp ;
        }
        return getExistSuppliersName(json,name);
    }
    
    /**
     * 查询数据是否在DB中存在
     * @param content
     * @param name
     * @throws ActiveRecordException 
     */
    public Record commonWay(String content ,String name) throws ActiveRecordException {
        content = content.replace("
", "");
        String[] nameArray = content.split(":");
        name = nameArray[1].trim().substring(0,nameArray[1].length() - 1);
        Record rec = Db.findFirst("select uuid,suppliers_name,certificates_no,op_from,op_to from biz_suppliers where sys_status=1 and suppliers_name=?",name);
        if(rec == null){
            rec = Db.findFirst("select uuid,suppliers_name,certificates_no,op_from,op_to from biz_suppliers where sys_status=1 and (suppliers_name=? or suppliers_name=?)",BCConvertUtils.bj2qj(name),BCConvertUtils.qj2bj(name));
        }
        return rec;     
    }
    
    /**
     * 获取工商接口数据中的信息
     * @param obj 每次循环的工商接口数据(单条) 
     * @param suppliersName 审核的供应商名字
     * @return Record
     */
    @SuppressWarnings("null")
    public Record getHistory(JSONObject obj,String suppliersName){
        Record supp = null;
        // 获取BeforeContent信息
        String beforeContent = obj.getString("BeforeContent");
        // 获取afterContent信息
        String afterContent = obj.getString("AfterContent");
        // 这里统一用半角来匹配
        suppliersName = BCConvertUtils.qj2bj(suppliersName);
        beforeContent = BCConvertUtils.qj2bj(beforeContent);
        afterContent = BCConvertUtils.qj2bj(afterContent);
        
        // 第一种情况:审核的供应商名字与改之前的名字匹配
        if (StringUtils.notBlank(beforeContent) && beforeContent.contains(suppliersName)) {
            // 获取改前名字
            beforeContent = beforeContent.replace("
", "");
            String[] beforeNameArray = beforeContent.split(":");
            String beforeName = beforeNameArray[1].trim().substring(0,beforeNameArray[1].length() - 1);
            // 获取改动时间
            String changeDateStr = obj.getString("ChangeDate");
            // 获取改后名字
            afterContent = afterContent.replace("
", "") ;
            String[] afterNameArray = afterContent.split(":");
            String afterName = afterNameArray[1].trim().substring(0,afterNameArray[1].length() - 1);
            Record su = new Record() ;
            su.set("beforeName", beforeName);
            su.set("changeDate", changeDateStr);
            su.set("afterName", afterName);
            return su;    
        }
        // 第二种情况:审核的供应商名字与改之后的名字匹配
        if (StringUtils.notBlank(afterContent) && afterContent.contains(suppliersName)) {
            // 获取改前名字
            beforeContent = beforeContent.replace("
", "");
            String[] beforeNameArray = beforeContent.split(":");
            String beforeName = beforeNameArray[1].trim().substring(0,beforeNameArray[1].length() - 1);
            // 获取改动时间
            String changeDateStr = obj.getString("ChangeDate");
            // 获取改后名字
            afterContent = afterContent.replace("
", "");
            String[] afterNameArray = afterContent.split(":");
            String afterName = afterNameArray[1].trim().substring(0,afterNameArray[1].length() - 1);
            Record su = new Record() ;
            su.set("beforeName", beforeName);
            su.set("changeDate", changeDateStr);
            su.set("afterName", afterName);
            return su;        
        }
        return supp;    
    }
    
/**
     * 这是以变更之前供应商名字来查的数据 (beforeSuppliersName 用改前的名字,来找它,改后的名字)
     * 获取工商接口中改动后的供应商名称
     * @param json 工商接口返回的数据
     * @param oldSuppliersName 审核的供应商名字(未改动之前)
     * @return
     * @throws ActiveRecordException
     */
    public static String getNewSuppRec(JSONArray json ,String  beforeSuppliersName) throws ActiveRecordException{
        String afterContent= beforeSuppliersName;
         boolean flag = false;
        for (int j = 0; j < json.size();j++) {
            // 获取当前的循环的JSON对象
            JSONObject obj = JSONObject.parseObject(json.getString(j));
            // 获取当前循环的未改动以前的数据
            String beforeContent=obj.getString("BeforeContent");
            // 如果当前循环的未改动以前的数据含 审核的供应商名字
            if (beforeContent.contains(beforeSuppliersName)) {
                // 则获取当前循环改动后的数据
                afterContent=obj.getString("AfterContent");
                flag = true;
                break;
            }
           
        }
        // 标志位为false,直接结束
        if (!flag) {
            return afterContent ;
        }
        
        return getNewSuppRec( json , afterContent);
    }
    
    
    public static void main(String[] args) throws ActiveRecordException {
        String  lo =  "{"ProjectName":"企业基本信息","ChangeDate":"2019-06-21","AfterContent":"名称:厦门3垒智建设有限公司,","BeforeContent":"名称:厦门2垒智建设有限公司,"}";
        String  lo1 =  "{"ProjectName":"企业基本信息","ChangeDate":"2019-06-21","AfterContent":"名称:厦门2垒智建设有限公司,","BeforeContent":"名称:厦门1垒智建设有限公司,"}";
        String  lo2 =  "{"ProjectName":"企业基本信息","ChangeDate":"2019-06-21","AfterContent":"名称:厦门1垒智建设有限公司,","BeforeContent":"名称:厦门垒智建设有限公司,"}";
        
//        String  lo3 =  "{"ProjectName":"企业基本信息","ChangeDate":"2019-06-21","AfterContent":"名称:厦门4垒智建设有限公司,","BeforeContent":"名称:厦门3垒智建设有限公司,"}";
//        String  lo4 =  "{"ProjectName":"企业基本信息","ChangeDate":"2019-06-21","AfterContent":"名称:厦门5垒智建设有限公司,","BeforeContent":"名称:厦门4垒智建设有限公司,"}";
        JSONObject json = JSONObject.parseObject(lo);
        JSONObject json1 = JSONObject.parseObject(lo1);
        JSONObject json2 = JSONObject.parseObject(lo2);
//        JSONObject json3 = JSONObject.parseObject(lo3);
//        JSONObject json4 = JSONObject.parseObject(lo4);
        
        JSONArray jsonArray = new  JSONArray();
        jsonArray.add(json);
        
        jsonArray.add(json1);
        jsonArray.add(json2);
//        jsonArray.add(json3);
//        jsonArray.add(json4);
        
        // 这是用改前的名字,来找他,改后的名字
        
        String abc = getNewSuppRec(jsonArray,"厦门垒智建设有限公司");
        // abc  与 厦门垒智建设有限公司  这个厦门垒智建设有限公司  是最新的
        // abc  与 厦门垒智建设有限公司  这个厦门垒智建设有限公司  是不一样最新的
                
        System.out.println(abc);
        
    }
原文地址:https://www.cnblogs.com/xiaoniuniu886/p/11388503.html