| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 | /** * Created by Tony on 2021/10/8. */let fs = require('fs');let data1 = fs.readFileSync('D:/GitHome/ConstructionOperation/tmp/testRationData_1633514079281.js');let data2 = fs.readFileSync('D:/GitHome/ConstructionOperation/tmp/testRationCoeData.js');let data3 = fs.readFileSync('D:/GitHome/ConstructionOperation/tmp/testGLJData.js');//----------------------------------------let rationItemArr = JSON.parse(data1);let coeItemArr = JSON.parse(data2);let gljItemArr = JSON.parse(data3);let gljCache = {};let coeCache = {};const prefix = '_'for (let gljItem of gljItemArr) {    gljCache[prefix + gljItem.code] = gljItem;}for (let gljItem of coeItemArr) {    coeCache[prefix + gljItem.ID] = gljItem;}let newData = [];// 先测量最多有多少coeslet maxCoes = 0;let fixedCoes = [];for (let idx = 0; idx < coeItemArr.length; idx++) {    let item = coeItemArr[idx];    let dtlMax = 0;    let dtlFixedCoes = [];    for (let coe of item.coes) {        if (coe.coeType !== '人工' && coe.coeType !== '机械' && coe.coeType !== '材料' && coe.coeType !== '定额') {            dtlMax++;        } else {            dtlFixedCoes.push(coe);        }    }    fixedCoes.push(dtlFixedCoes);    maxCoes = Math.max(dtlMax, maxCoes);}let firstStr = 'ID|Name|Type|Content|G|L|J';//for (let idx = 0; idx < maxCoes - 1; idx++) {for (let idx = 1; idx <= 10; idx++) {    let str = '';    str = `|GLJ${idx}|Count${idx}|Type${idx}`;    firstStr += str;};newData.push(firstStr);function _getAmountByCoeType(coeObjs, coeItem) {    let rst = [];    let coeG = 0, coeL = 0, coeJ = 0;    for (let coeObj of coeObjs) {        switch (coeObj.coeType) {            case '定额':                coeG = coeObj.amount;                coeL = coeObj.amount;                coeJ = coeObj.amount;                break;            case '人工' :                coeG = coeObj.amount;                break;            case '单个工料机' :                let gcKey = prefix + coeObj.gljCode;                if (!gljCache.hasOwnProperty(gcKey)) {                    console.log('code1: ' + ' - ' + coeItem.ID + ' - ' + coeObj.coeType);                } else {                    if (gljCache[gcKey].gljType > 200 && gljCache[gcKey].gljType < 300) {                        coeL = coeObj.amount;                    } else if (gljCache[gcKey].gljType > 300 && gljCache[gcKey].gljType < 400) {                        coeJ = coeObj.amount;                    } else if (gljCache[gcKey].gljType <= 2) {                        coeG = coeObj.amount;                    } else {                        console.log('不明材料1: ' + ' - ' + gcKey + ' - ' + gljCache[gcKey].gljType);                    }                }                break;            case '机械' :                coeJ = coeObj.amount;                break;            case '材料' :                coeL = coeObj.amount;                break;            default :                console.log('不明coeType1: ' + ' - ' + coeObj.coeType);                break;        }    }    rst.push(coeG);    rst.push(coeL);    rst.push(coeJ);    return rst;}// 先输出coe listfor (let idx = 0; idx < coeItemArr.length; idx++) {    let coeItem = coeItemArr[idx];    // coeCache[prefix + gljItem.ID] = gljItem;    let firstCoe = coeItem.coes[0];    let firstCoeType = firstCoe.operator;    let cRst =_getAmountByCoeType(fixedCoes[idx], coeItem);    let firstCoeG = cRst[0];    let firstCoeL = cRst[1];    let firstCoeJ = cRst[2];    let str = `${coeItem.ID}|${coeItem.name}|${firstCoeType}|${coeItem.content}|${firstCoeG}|${firstCoeL}|${firstCoeJ}`;    /*    for (let idx = 0; idx < maxCoes - 1; idx++) {        if (idx < coeItem.coes.length - 1) {            // 判断coeItem.coes[idx+1].gljCode,有一下几种情况:udefined, 空串, 其他正常值            let dtlRst =_getAmountByCoeType(coeItem.coes[idx+1], coeItem);            if (coeItem.coes[idx+1].gljCode === undefined || coeItem.coes[idx+1].gljCode === '') {                // str += `,${gljCache[gcKey].ID},${coeItem.coes[idx+1].amount},${coeItem.coes[idx+1].operator}`;                console.log('不明额外coeType2: ' + ' - ' + coeItem.ID + coeItem.coes[idx+1].coeType);                str += `,-1,${coeItem.coes[idx+1].amount},${coeItem.coes[idx+1].operator}`;            } else {                //正常值                let gcKey = prefix + coeItem.coes[idx+1].gljCode;                if (!gljCache.hasOwnProperty(gcKey)) {                    console.log('code2: ' + coeItem.ID + ' - ' + gcKey);                }                str += `,${gljCache[gcKey].ID},${coeItem.coes[idx+1].amount},${coeItem.coes[idx+1].operator}`;            }        } else {            str += ',,,';        }    }    */    for (let idx = 1; idx <= 10; idx++) {        str += '|||';    }    newData.push(str);}let ttlStr = newData.join('\n');let regExp = new RegExp('"', "gm");ttlStr = ttlStr.replace(regExp, '');// fs.writeFile(`D:/GitHome/ConstructionOperation/tmp/子目换算List文件_${(new Date()).getTime()}.txt`, ttlStr, { 'flag': 'a', 'encoding': 'utf-8' }, function(err){//     if(err) throw err;// });// 再输出ration - coefirstStr = 'SectionID|RationID|CoeID|Order|GroupIdx|Param';newData = [];newData.push(firstStr);for (let item of rationItemArr) {    for (let coeItem of item.rationCoeList) {        let str = `${item.sectionId}|${item.ID}|${coeItem.ID}|${coeItem.no}||`;        newData.push(str);    }}ttlStr = newData.join('\n');ttlStr = ttlStr.replace(regExp, '');fs.writeFile(`D:/GitHome/ConstructionOperation/tmp/定额_子目换算Data文件_${(new Date()).getTime()}.txt`, ttlStr, { 'flag': 'a', 'encoding': 'utf-8' }, function(err){    if(err) throw err;});
 |