|
@@ -2876,50 +2876,54 @@ const XMLStandard = (function () {
|
|
|
* 重置工程编号,广东18 3.0的接口,导出时的文件会用到这个编号
|
|
|
* 因此重置工程编号后,还需要重置文件名数据
|
|
|
* @param {Array}codes 工程编号
|
|
|
- * {Array}extractData 提取的数据
|
|
|
+ * {Array}ungroupedExtractData 提取的数据(可能存在不同导出类型,需要分组。比如同时导出招标文件和控制价文件)
|
|
|
* @return {void}
|
|
|
* */
|
|
|
- function resetContentCode(codes, extractData) {
|
|
|
+ function resetContentCode(codes, ungroupedExtractData) {
|
|
|
// 提取到的数据分两种类型:
|
|
|
// 1.根元素为建设项目:需要修改建设项目下的单位工程元素的编码和文件名
|
|
|
// 2.根元素为单位工程:需要修改单位工程的编码和文件名
|
|
|
// 获取建设项目数据下的单位工程元素
|
|
|
- const extractProject = extractData.find(data => data.dataType === DATA_TYPE.PROJECT);
|
|
|
- const extractTenders = extractData.filter(data => data.dataType === DATA_TYPE.TENDER)
|
|
|
- // 建设项目元素下建筑安装工程费元素
|
|
|
- const projectInstallations = _util.getElementFromSrc(extractProject.data, 'ProjectInstallationWorkCost');
|
|
|
- // 建筑安装工程费元素下单项工程元素
|
|
|
- const sectionalWorks = projectInstallations.reduce((acc, cur) => {
|
|
|
- const sections = _util.getElementFromSrc(cur, 'SectionalWorks');
|
|
|
- acc.push(...sections);
|
|
|
- return acc;
|
|
|
- }, []);
|
|
|
- let idx = 0;
|
|
|
- // 单项工程
|
|
|
- sectionalWorks.forEach(sectionalWork => {
|
|
|
- _util.setAttr(sectionalWork, 'Number', codes[idx++]);
|
|
|
- });
|
|
|
- // 建筑安装工程费元素下单位工程元素, 顺序与提取的单位工程文件(extractTenders)是一一对应的
|
|
|
- const unitWorks = sectionalWorks.reduce((acc, cur) => {
|
|
|
- const tenders = _util.getElementFromSrc(cur, 'UnitWorks');
|
|
|
- acc.push(...tenders);
|
|
|
- return acc;
|
|
|
- }, []);
|
|
|
- unitWorks.forEach((unitWork, index) => {
|
|
|
- // 更改编号
|
|
|
- const code = codes[idx++];
|
|
|
- _util.setAttr(unitWork, 'Number', code);
|
|
|
- // 更改文件名:@_单位工程编码_单位工程名称.xml
|
|
|
- const name = _util.getAttr(unitWork, 'Name');
|
|
|
- const fileName = `@_${code}_${name}.xml`;
|
|
|
- _util.setAttr(unitWork, 'FileName', fileName);
|
|
|
- // 更改提取的单位工程详细文件的导出名称、单位工程节点编号、文件名
|
|
|
- const extractTender = extractTenders[index];
|
|
|
- extractTender.fileName = fileName;
|
|
|
- const extractUnitWork = extractTender.data;
|
|
|
- _util.setAttr(extractUnitWork, 'Number', code);
|
|
|
- _util.setAttr(extractUnitWork, 'FileName', fileName);
|
|
|
- });
|
|
|
+ const groupedData = _.groupBy(ungroupedExtractData, 'exportKind');
|
|
|
+ for (const exportKind in groupedData) {
|
|
|
+ const extractData = groupedData[exportKind];
|
|
|
+ const extractProject = extractData.find(data => data.dataType === DATA_TYPE.PROJECT);
|
|
|
+ const extractTenders = extractData.filter(data => data.dataType === DATA_TYPE.TENDER)
|
|
|
+ // 建设项目元素下建筑安装工程费元素
|
|
|
+ const projectInstallations = _util.getElementFromSrc(extractProject.data, 'ProjectInstallationWorkCost');
|
|
|
+ // 建筑安装工程费元素下单项工程元素
|
|
|
+ const sectionalWorks = projectInstallations.reduce((acc, cur) => {
|
|
|
+ const sections = _util.getElementFromSrc(cur, 'SectionalWorks');
|
|
|
+ acc.push(...sections);
|
|
|
+ return acc;
|
|
|
+ }, []);
|
|
|
+ let idx = 0;
|
|
|
+ // 单项工程
|
|
|
+ sectionalWorks.forEach(sectionalWork => {
|
|
|
+ _util.setAttr(sectionalWork, 'Number', codes[idx++]);
|
|
|
+ });
|
|
|
+ // 建筑安装工程费元素下单位工程元素, 顺序与提取的单位工程文件(extractTenders)是一一对应的
|
|
|
+ const unitWorks = sectionalWorks.reduce((acc, cur) => {
|
|
|
+ const tenders = _util.getElementFromSrc(cur, 'UnitWorks');
|
|
|
+ acc.push(...tenders);
|
|
|
+ return acc;
|
|
|
+ }, []);
|
|
|
+ unitWorks.forEach((unitWork, index) => {
|
|
|
+ // 更改编号
|
|
|
+ const code = codes[idx++];
|
|
|
+ _util.setAttr(unitWork, 'Number', code);
|
|
|
+ // 更改文件名:@_单位工程编码_单位工程名称.xml
|
|
|
+ const name = _util.getAttr(unitWork, 'Name');
|
|
|
+ const fileName = `@_${code}_${name}.xml`;
|
|
|
+ _util.setAttr(unitWork, 'FileName', fileName);
|
|
|
+ // 更改提取的单位工程详细文件的导出名称、单位工程节点编号、文件名
|
|
|
+ const extractTender = extractTenders[index];
|
|
|
+ extractTender.fileName = fileName;
|
|
|
+ const extractUnitWork = extractTender.data;
|
|
|
+ _util.setAttr(extractUnitWork, 'Number', code);
|
|
|
+ _util.setAttr(extractUnitWork, 'FileName', fileName);
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/*
|