var fs = require('fs');
var path = require('path');

//目标文件夹。以当前文件夹为例
var filePath = path.resolve('./');

/**
 * 递归遍历指定目录,处理所有 txt 文件
 * @param {路径} filePath 
 * @param {处理逻辑} callback 
 * @param {扩展名,默认.txt} ext 
 */
function myProcess(filePath, callback, ext = '.txt'){
    /**
     * 遍历目录
     * @param filePath 目标路径
     */
    function recurvePath(filePath){
        var files = fs.readdirSync(filePath);
        files.forEach(function(filename){
            //获取当前文件的绝对路径
            var filedir = path.join(filePath,filename);
            //根据文件路径获取文件信息
            var stats =  fs.statSync(filedir);
            var isFile = stats.isFile(); //是文件
            var isDir = stats.isDirectory(); //是文件夹
            // 如果:是文件; 扩展名=.txt; callback是函数
            if(isFile && filename.substr(-4) === ext && typeof callback === "function"){
                var str = fs.readFileSync(filedir, 'utf8');
                // console.log(str);
                callback(str);
            }else if(isDir){
                //如果是文件夹,递归遍历
                recurvePath(filedir);
            }
        });

    }
    
    recurvePath(filePath);
}

/**
 * 处理每个文件的逻辑代码
 * @param {文件内容字符串} dataStr 
 */
function doProcess2(dataStr){
    var json = JSON.parse(dataStr);
    var key = `${json.a}${json.b}`;
    if(onlyMark[key]){
        return;
    }

    var str = `
    resultMap.put("${key}", new HashMap<String, String>() {{
        put("code", "${json.code}");
        put("id", "${json.id}");
    }});
    `
    
    arr.push(str);
    onlyMark[key] = true;
}

function doProcess(dataStr){
    var json = JSON.parse(dataStr);
    obj[`${json.a}${json.b}`] = {"code": json.aCode, "id": json.approveId};
}

var arr = [];
var obj = {};
var onlyMark = {};
(function main(){
    // 递归 filePath 用 doProcess 处理 .txt
    myProcess(filePath, doProcess, '.txt');
    // 同步写文件
    fs.writeFileSync('./javaMap.log', JSON.stringify(obj,null,2), 'utf8');
})();