Pārlūkot izejas kodu

清单指引类别库算法更新

lishihao 3 gadi atpakaļ
vecāks
revīzija
13ada4a0b3
1 mainītis faili ar 44 papildinājumiem un 19 dzēšanām
  1. 44 19
      modules/std_billsGuidance_lib/facade/facades.js

+ 44 - 19
modules/std_billsGuidance_lib/facade/facades.js

@@ -537,12 +537,6 @@ function isOptionNode(node) {
         return list;
     }
 
-    //获取定额数据
-    // requireRationData必套定额对象
-    // optionalRationData 选逃定额对象
-    // classGroups classCode文字和id键值对
-    // classCodeList 各个classCode的pID和ID的关系
-    // prefixID为上一个必填项的选项ID
     function getItemData(nodes, requireRationData={}, optionalRationData={}, classGroups={},  prefixID = '', prefixSonID = '',IDData={}) {
         const processNodes = nodes.filter(node => isProcessNode(node));
         // const classGroups = []; // 同层必填选项的数组(二维数组)
@@ -584,7 +578,7 @@ function isOptionNode(node) {
                                     if (!requireRationData[subOptionNode.parent.data.ID]) requireRationData[subOptionNode.parent.data.ID] = [];
                                     requireRationData[subOptionNode.parent.data.ID].push(getOptionalData(subOptionNode));
                                 } else {
-                                    if (!optionalRationData[subOptionNode.parent.data.ID]) optionalRationData[subOptionNode.data.ID] = [];
+                                    if (!optionalRationData[subOptionNode.parent.data.ID]) optionalRationData[subOptionNode.parent.data.ID] = [];
                                     optionalRationData[subOptionNode.parent.data.ID].push(...getOptionalData(subOptionNode));
                                 }
                             })
@@ -741,11 +735,13 @@ function getOptionalRationIDs(optionalRationData) {
 }
 
 //把classcode和必套选套定额结合在一起
-function combineData(codeData,requireRationData,classGroups,IDData){
+function combineData(codeData,requireRationData,optionalRationData,classGroups,IDData){
     //这里需要把绑定在子节点的定额更新到必填的白色选项中(classcode的值)
     const requireCombineData={};
+    const optionCombineData={};
     Object.keys(IDData).forEach(key=>{
         if(!requireCombineData[IDData[key]])requireCombineData[IDData[key]]=new Set();
+        if(!optionCombineData[IDData[key]])optionCombineData[IDData[key]]=new Set();
         if(requireRationData[key]){
          requireRationData[key].forEach(subData=>{
              subData.forEach(subItem=>{
@@ -753,6 +749,13 @@ function combineData(codeData,requireRationData,classGroups,IDData){
              })
          })
         }
+        if(optionalRationData[key]){
+            optionalRationData[key].forEach(subData=>{
+                optionCombineData[IDData[key]].add(subData);
+               
+            })
+        }
+        
      })
 
     return  codeData.map(classCodeData=>{
@@ -768,18 +771,31 @@ function combineData(codeData,requireRationData,classGroups,IDData){
                 }else{
                     name=classGroups[classCodeID]
                 };
+                // 一组的必套定额,先去重
                 const unitRation=[];
                 requireRationData[classCodeID].forEach(subItem=>{
                     unitRation.push(...new Set(subItem));
                 })
+                // 这里是必填选项下绑定必套定额
                 if(requireRationData[classCodeID]&&requireRationData[classCodeID].length) {
                     requiredRationIDs.push(unitRation);
                 }
+                //这里是必填选项下绑定在蓝色节点下的必套定额
                 if(requireCombineData[classCodeID]&&requireCombineData[classCodeID].size){
                     requiredRationIDs.push([...requireCombineData[classCodeID]]);
                 }
+
+                // 这里是必填选项下绑定选套定额
+                if(optionalRationData[classCodeID]&&optionalRationData[classCodeID].length) {
+                    optionalRationIDs.push(...optionalRationData[classCodeID]);
+                }
+                //这里是必填选项下绑定在蓝色节点下的选套定额,下同
+                if(optionCombineData[classCodeID]&&optionCombineData[classCodeID].size){
+                    optionalRationIDs.push(...requireCombineData[classCodeID]);
+                }
+
             })
-            return {name,requiredRationIDs,optionalRationIDs,errorRationIDs}
+            return {name,requiredRationIDs,optionalRationIDs:[...new Set(optionalRationIDs)],errorRationIDs}
         }else{
             const unitRation=[];
             requireRationData[classCodeIDs].forEach(subItem=>{
@@ -788,7 +804,15 @@ function combineData(codeData,requireRationData,classGroups,IDData){
             name=classGroups[classCodeIDs];
             if(requireRationData[classCodeIDs]&&requireRationData[classCodeIDs].length) requiredRationIDs.push(unitRation);
             if(requireCombineData[classCodeIDs]&&requireCombineData[classCodeIDs].size) requiredRationIDs.push([...requireCombineData[classCodeIDs]]);
-            return {name,requiredRationIDs,optionalRationIDs,errorRationIDs}
+
+            if(optionalRationData[classCodeIDs]&&optionalRationData[classCodeIDs].length) {
+                optionalRationIDs.push(...optionalRationData[classCodeIDs]);
+            }
+            if(optionCombineData[classCodeIDs]&&optionCombineData[classCodeIDs].size){
+                optionalRationIDs.push(...requireCombineData[classCodeIDs]);
+            }
+
+            return {name,requiredRationIDs,optionalRationIDs:[...new Set(optionalRationIDs)],errorRationIDs}
         }
     })
 }
@@ -825,16 +849,15 @@ async function generateClassData(libID) {
         //console.log('getItemClassData start',billNode.data.name,billNode.data.code,billNode.data.ID);
         const classCodeData = getItemClassData(guidanceTree.roots); // 必套定额在这个方法内就获取了,避免重复执行递归方法
         const {requireRationData,optionalRationData,classGroups,IDData} = getItemData(guidanceTree.roots);
-        const itemClassData= combineData(classCodeData,requireRationData,classGroups,IDData);
-        //因为所有的选套都是一样的,所以这里就直接赋值了
-        const optionalRationIDs = getOptionalRationIDs(optionalRationData);
+        const itemClassData= combineData(classCodeData,requireRationData,optionalRationData,classGroups,IDData);
+       
         const allRationIDs = guidanceTree.items.filter(node => !!node.data.rationID).map(node => node.data.rationID);
         // 选套定额ID
-        // const optionalRationIDs = getOptionalRationIDs(itemClassData, allRationIDs);
+        const optionalRationIDs = getOptionalRationIDs(itemClassData, allRationIDs);
         //if(itemClassData.length > 1000) console.log('getItemClassData end',billNode.data.name,billNode.data.code,billNode.data.ID,itemClassData.length)
         itemClassData.forEach(item => {
             // 错套定额
-            const errorRationIDs = getErrorRationIDs(item.requiredRationIDs, optionalRationIDs, allRationIDs);
+            const errorRationIDs = getErrorRationIDs(item.requiredRationIDs, item.optionalRationIDs, allRationIDs);
             if(billNode.data.ID == '1d32fa34-0a9b-11ea-a33d-5388f9783b09') console.log(item.name)
             billClassData.push({
                 itemCharacter: item.name,
@@ -844,16 +867,18 @@ async function generateClassData(libID) {
                 name: billNode.data.name,
                 code: billNode.data.code,
                 requiredRationIDs: item.requiredRationIDs || [],
-                optionalRationIDs:optionalRationIDs || [],
+                optionalRationIDs:item.optionalRationIDs || [],
                 errorRationIDs,
             });
         });
         //新增无必填时的情况
         if(itemClassData.length===0){
             // console.log({requireRationData,optionalRationData,classGroups,IDData});
-           Object.values(requireRationData).forEach((dataList)=>{
-                dataList.forEach(data=>{
-                    optionalRationIDs.push(...data);
+            // console.log('===+++++++++==');
+            // console.log(optionalRationIDs);
+           Object.keys(requireRationData).forEach((key)=>{
+                 requireRationData[key].forEach(data=>{
+                    if(data.length) optionalRationIDs.push(...data);
                 })
             })
             const errorRationIDs = getErrorRationIDs([], optionalRationIDs, allRationIDs);