anhui_maanshan.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. /*
  2. * @Descripttion: 安徽马鞍山导入接口
  3. * @Author: vian
  4. * @Date: 2020-09-09 11:51:15
  5. */
  6. // INTERFACE_EXPORT =,必须这么写,这样才能在导入时动态加载脚本后,覆盖前端代码
  7. INTERFACE_IMPORT = (() => {
  8. 'use strict';
  9. /**
  10. *
  11. * @param {String} areaKey - 地区标识,如:'安徽@马鞍山',有些地区的接口只是取值上有不同,共有一个接口脚本, 需要通过地区标识确定一些特殊处理
  12. * @param {Object} xmlObj - xml经过x2js转换后的xml对象
  13. * @param {Object} template - 单位工程的一些模板数据,例如清单模板、标准费率数据等。
  14. */
  15. async function entry(areaKey, xmlObj, template) {
  16. const {
  17. UTIL: {
  18. getValue,
  19. arrayValue,
  20. }
  21. } = INTERFACE_EXPORT_BASE;
  22. const subArea = areaKey.split('@')[1];
  23. // 提取基本信息,xml中提取出来的基本信息,最终会与模板基本信息进行合并处理。(接口内不需要处理合并)
  24. function setupInformation(projectSrc) {
  25. // key:基本信息模板中的key,作为合并时的匹配字段
  26. const info = [
  27. { key: 'projNum', value: getValue(projectSrc, ['_Xmbh']) },
  28. { key: 'projType', value: getValue(projectSrc, ['_Bzlx']) },
  29. { key: 'startAndChainages', value: getValue(projectSrc, ['_Xmqzzh']) },
  30. { key: 'constructingUnits', value: getValue(projectSrc, ['_Jsdw']) },
  31. { key: 'taxMode', value: getValue(projectSrc, ['_Jsfs']) },
  32. { key: 'tendereeName', value: getValue(projectSrc, ['ZhaoBiaoXx', '_Zbr']) },
  33. { key: 'costConsultant', value: getValue(projectSrc, ['ZhaoBiaoXx', '_Zxr']) },
  34. { key: 'tenderAuthorizer', value: getValue(projectSrc, ['ZhaoBiaoXx', '_ZbrDb']) },
  35. { key: 'consultantAuthorizer', value: getValue(projectSrc, ['ZhaoBiaoXx', '_ZxrDb']) },
  36. { key: 'tenderCompiler', value: getValue(projectSrc, ['ZhaoBiaoXx', '_Bzr']) },
  37. { key: 'tenderExaminer', value: getValue(projectSrc, ['ZhaoBiaoXx', '_Fhr']) },
  38. { key: 'compilationTime', value: getValue(projectSrc, ['ZhaoBiaoXx', '_BzTime']) },
  39. { key: 'reviewTime', value: getValue(projectSrc, ['ZhaoBiaoXx', '_FhTime']) },
  40. ];
  41. if (['淮北', '铜陵'].includes(subArea)) {
  42. const extraInfo = [
  43. { key: 'tendereeTaxpayerIdentificationNo', value: getValue(projectSrc, ['ZhaoBiaoXx', '_ZbrNssbh']) },
  44. { key: 'costConsultantTaxpayerIdentificationNo', value: getValue(projectSrc, ['ZhaoBiaoXx', '_ZxrNssbh']) },
  45. { key: 'tenderAuthorizerIDNo', value: getValue(projectSrc, ['ZhaoBiaoXx', '_ZbrDbSfzh']) },
  46. { key: 'consultantAuthorizerTaxpayerIdentificationNo', value: getValue(projectSrc, ['ZhaoBiaoXx', '_ZxrDbSfzh']) },
  47. ];
  48. info.push(...extraInfo);
  49. }
  50. return info;
  51. }
  52. // 提取工程特征信息,xml中提取出来的工程特征,最终会与模板工程特征进行合并处理。(接口内不需要处理合并)
  53. function setupFeature(projectSrc, tenderSrc) {
  54. const feature = [
  55. { key: 'singleProjNo', value: getValue(projectSrc, ['Dxgcxx', '_Dxgcbh']) },
  56. { key: 'singleProjName', value: getValue(projectSrc, ['Dxgcxx', '_Dxgcmc']) },
  57. { key: 'unitProjNo', value: getValue(tenderSrc, ['_Dwgcbh']) },
  58. ];
  59. // 工程所在地在费率项中
  60. const feeRateItems = array(tenderSrc, ['Qfxx', 'JjFlx', 'JjFlxMx']);
  61. const locationItem = feeRateItems.find(item => getValue(item, ['_Mc']) === '工程所在地');
  62. if (locationItem) {
  63. feature.push(locationItem);
  64. }
  65. return feature;
  66. }
  67. // 费率值映射表,“接口中可有效识别的费率值类型值,此接口是Bm”与“软件中对应费率标准的名称”映射。
  68. const feeRateValueMap = {
  69. 'DJF': '冬季施工增加费',
  70. 'YJF': '雨季施工增加费',
  71. 'YEF': '夜间施工增加费',
  72. 'GYF': '高原地区施工增加费',
  73. 'FSF': '风沙地区施工增加费',
  74. 'YHF': '沿海地区施工增加费',
  75. 'XCF': '行车干扰施工增加费',
  76. 'ZYF': '工地转移费',
  77. 'SFF': '施工辅助费',
  78. 'JBF': '基本费用',
  79. 'YFF': '主副食运费补贴',
  80. 'TQF': '职工探亲路费',
  81. 'QNF': '职工取暖补贴',
  82. 'CWF': '财务费用',
  83. 'YLF': '养老保险费',
  84. 'SYF': '失业保险费',
  85. 'YBF': '医疗保险费',
  86. 'GSF': '工伤保险费',
  87. 'ZFF': '住房公积金',
  88. 'LR': '利润',
  89. 'SJ': '税金',
  90. };
  91. // 费率工程类型映射表, “接口中可有效识别的工程类型值,此接口是Qflb”与“袁建中对应费率标准的工程类型名称”映射
  92. const feeRateParentTypeMap = {
  93. 1: '土方',
  94. 3: '石方',
  95. 2: '运输',
  96. 4: '路面',
  97. 11: '隧道',
  98. 5: '构造物Ⅰ',
  99. 16: '构造物Ⅰ(不计冬)',
  100. 6: '构造物Ⅱ',
  101. 9: '构造物Ⅲ(桥梁)',
  102. 8: '构造物Ⅲ(除桥以外不计雨夜)',
  103. 10: '技术复杂大桥',
  104. 12: '钢材及钢结构(桥梁)',
  105. 13: '钢材及钢结构(除桥以外不计夜)',
  106. 17: '费率为0',
  107. 4: '路面(不计雨)',
  108. 16: '构造物Ⅰ(不计雨)',
  109. 8: '构造物Ⅲ(除桥以外)',
  110. 13: '钢材及钢结构(除桥以外)',
  111. 15: '设备',
  112. 14: '量价',
  113. };
  114. const feeRateParamMap = {
  115. djsg: '冬季施工',
  116. yjsg: '雨季施工',
  117. yjsg: '夜间施工',
  118. gysg: '高原施工',
  119. fssg: '风沙施工',
  120. yhsg: '沿海施工',
  121. hcgr: '行车干扰',
  122. gdzy: '工地转移(km)',
  123. sgfz: '施工辅助',
  124. jbfy: '基本费用',
  125. zhlc: '综合里程(km)',
  126. zgtq: '职工探亲',
  127. zgqn: '职工取暖',
  128. cwfy: '财务费用',
  129. ylbx: '养老保险(%)',
  130. sybx: '失业保险(%)',
  131. ylbx: '医疗保险(%)',
  132. gsbx: '工伤保险(%)',
  133. zfgj: '住房公积金(%)',
  134. };
  135. // 提取费率数据(费率值、费率参数),最终会与标准费率数据进行合并。(接口内不需要处理合并)
  136. function setupFeeRate(feeRateSrc) {
  137. // 提取费率值数据
  138. const valuaItems = arrayValue(feeRateSrc, ['JjFlb', 'JjFlbMx'])
  139. .map(item => ({
  140. parentType: feeRateParentTypeMap[getValue(item, ['_Qflb'])] || '',
  141. type: feeRateValueMap[getValue(item, ['_Bm'])] || '',
  142. value: getValue(item, ['_Fl'])
  143. }));
  144. // 提取费率参数数据
  145. const paramItems = arrayValue(feeRateSrc, ['JjFlx', '_JjFlxMx'])
  146. .map(item => ({
  147. }));
  148. return {
  149. };
  150. }
  151. // 提取单位工程数据
  152. function setupTender(projectSrc, tenderSrc) {
  153. const feeRateSrc = getValue(tenderSrc, ['Qfxx']);
  154. return {
  155. name: getValue(tenderSrc, ['_Dwgcmc']),
  156. feature: setupFeature(projectSrc, tenderSrc),
  157. feeRate: setupFeeRate(feeRateSrc),
  158. }
  159. }
  160. // 从xml对象提取需要的数据
  161. function setupProject(projectSrc) {
  162. const tenders = arrayValue(projectSrc, ['Dxgcxx', 'Dwgcxx'])
  163. .map(tenderSrc => setupTender(projectSrc, tenderSrc))
  164. return {
  165. name: getValue(projectSrc, ['_Xmmc']),
  166. info: setupInformation(projectSrc),
  167. tenders,
  168. };
  169. }
  170. const test = setupProject(getValue(xmlObj, ['JingJiBiao']));
  171. console.log(test);
  172. return test;
  173. }
  174. return {
  175. entry
  176. };
  177. })();