|
@@ -1409,10 +1409,33 @@ const ImportXML = (() => {
|
|
|
SJHJ: '{税金}',
|
|
SJHJ: '{税金}',
|
|
|
SQGCZJ: '{税前工程造价}'
|
|
SQGCZJ: '{税前工程造价}'
|
|
|
};
|
|
};
|
|
|
|
|
+ // 检查固定清单引用的基数造成自身循环,比如分部分项部分引用了FBFXHJ
|
|
|
|
|
+ // 有文件的单位工程费汇总中,含有技术措施项目费清单,含有基数,且无子项。
|
|
|
|
|
+ function isCalcBaseCycle(bills) {
|
|
|
|
|
+ const flag = getFlag(bills);
|
|
|
|
|
+ if (!flag) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 跟固定清单直接相关联的基数,若相关固定清单引用了其下的基数,则造成自身循环
|
|
|
|
|
+ const CycleMap = {
|
|
|
|
|
+ [fixedFlag.SUB_ENGINERRING]: ['FBFXHJ', 'RGF', 'CLF', 'JXF', 'ZCF', 'GR'],
|
|
|
|
|
+ [fixedFlag.MEASURE]: ['CSXMHJ'],
|
|
|
|
|
+ [fixedFlag.CONSTRUCTION_ORGANIZATION]: ['ZZCSF'],
|
|
|
|
|
+ [fixedFlag.CONSTRUCTION_TECH]: ['JSCSF', 'JSCS_RGF', 'JSCS_CLF', 'JSCS_JXF', 'JSCS_ZCF', 'JSCS_GR'],
|
|
|
|
|
+ [fixedFlag.CHARGE]: ['GF'],
|
|
|
|
|
+ [fixedFlag.TAX]: ['SJ', 'SJHJ']
|
|
|
|
|
+ };
|
|
|
|
|
+ const match = CycleMap[flag];
|
|
|
|
|
+ if (!match) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ return match.some(item => bills.calcBase.match(new RegExp(`${item}\\b`)));
|
|
|
|
|
+ }
|
|
|
//转换计算基数
|
|
//转换计算基数
|
|
|
//1.有子项数据,则清空基数
|
|
//1.有子项数据,则清空基数
|
|
|
- //2.行代号引用转换为ID引用
|
|
|
|
|
- //3.对应字典代号转换,对应字典里找不到则设置成金额
|
|
|
|
|
|
|
+ //2.引用的基数造成自身循环,比如分部分项部分引用了FBFXHJ
|
|
|
|
|
+ //3.行代号引用转换为ID引用
|
|
|
|
|
+ //4.对应字典代号转换,对应字典里找不到则设置成金额
|
|
|
function transformCalcBase(billsData) {
|
|
function transformCalcBase(billsData) {
|
|
|
//行代号 - ID映射
|
|
//行代号 - ID映射
|
|
|
let rowCodeMap = {};
|
|
let rowCodeMap = {};
|
|
@@ -1435,6 +1458,12 @@ const ImportXML = (() => {
|
|
|
if (typeof bills.calcBase !== 'string') {
|
|
if (typeof bills.calcBase !== 'string') {
|
|
|
bills.calcBase = String(bills.calcBase);
|
|
bills.calcBase = String(bills.calcBase);
|
|
|
}
|
|
}
|
|
|
|
|
+ // 引用的基数造成自循环,清空基数
|
|
|
|
|
+ const isCycle = isCalcBaseCycle(bills);
|
|
|
|
|
+ if (isCycle) {
|
|
|
|
|
+ bills.calcBase = '';
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
//提取基数
|
|
//提取基数
|
|
|
bills.calcBase = bills.calcBase.replace(/\s/g, '');
|
|
bills.calcBase = bills.calcBase.replace(/\s/g, '');
|
|
|
let bases = bills.calcBase.split(/[\+\-\*\/]/g);
|
|
let bases = bills.calcBase.split(/[\+\-\*\/]/g);
|