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 = [];
- // 先测量最多有多少coes
- let 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 list
- for (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 - coe
- firstStr = '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;
- });
|