فهرست منبع

清单指引类别库算法更新,没有被绑定的选套定额需要被各个classCode绑定

lishihao 3 سال پیش
والد
کامیت
a7ffdee925
1فایلهای تغییر یافته به همراه64 افزوده شده و 54 حذف شده
  1. 64 54
      modules/std_billsGuidance_lib/facade/facades.js

+ 64 - 54
modules/std_billsGuidance_lib/facade/facades.js

@@ -735,86 +735,98 @@ function getOptionalRationIDs(optionalRationData) {
 }
 
 //把classcode和必套选套定额结合在一起
-function combineData(codeData,requireRationData,optionalRationData,classGroups,IDData){
+function combineData(codeData, requireRationData, optionalRationData, classGroups, IDData) {
+    // 这里要记录下已经被绑定的选套定额,因为没有被用的定额需要绑定到各个classcode下
+    const matchRationList = [];
     //这里需要把绑定在子节点的定额更新到必填的白色选项中(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=>{
-                 requireCombineData[IDData[key]].add(subItem);
-             })
-         })
-        }
-        if(optionalRationData[key]){
-            optionalRationData[key].forEach(subData=>{
+    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 => {
+                    requireCombineData[IDData[key]].add(subItem);
+                })
+            })
+        }
+        if (optionalRationData[key]) {
+            optionalRationData[key].forEach(subData => {
                 optionCombineData[IDData[key]].add(subData);
-               
             })
         }
-        
-     })
-
-    return  codeData.map(classCodeData=>{
-        const errorRationIDs=[];
-        const optionalRationIDs=[];
-        const requiredRationIDs=[];
-        let name='';
-        const classCodeIDs=classCodeData.ID;
-        if(/@/.test(classCodeIDs)){
-            classCodeIDs.split('@').forEach((classCodeID)=>{
-                if(name){ 
-                    name=name+'@'+classGroups[classCodeID]
-                }else{
-                    name=classGroups[classCodeID]
+
+    })
+    const finData = codeData.map(classCodeData => {
+        const errorRationIDs = [];
+        const optionalRationIDs = [];
+        const requiredRationIDs = [];
+        let name = '';
+        const classCodeIDs = classCodeData.ID;
+        if (/@/.test(classCodeIDs)) {
+            classCodeIDs.split('@').forEach((classCodeID) => {
+                if (name) {
+                    name = name + '@' + classGroups[classCodeID]
+                } else {
+                    name = classGroups[classCodeID]
                 };
                 // 一组的必套定额,先去重
-                const unitRation=[];
-                requireRationData[classCodeID].forEach(subItem=>{
+                const unitRation = [];
+                requireRationData[classCodeID].forEach(subItem => {
                     unitRation.push(...new Set(subItem));
                 })
                 // 这里是必填选项下绑定必套定额
-                if(requireRationData[classCodeID]&&requireRationData[classCodeID].length) {
+                if (requireRationData[classCodeID] && requireRationData[classCodeID].length) {
                     requiredRationIDs.push(unitRation);
                 }
                 //这里是必填选项下绑定在蓝色节点下的必套定额
-                if(requireCombineData[classCodeID]&&requireCombineData[classCodeID].size){
+                if (requireCombineData[classCodeID] && requireCombineData[classCodeID].size) {
                     requiredRationIDs.push([...requireCombineData[classCodeID]]);
                 }
 
                 // 这里是必填选项下绑定选套定额
-                if(optionalRationData[classCodeID]&&optionalRationData[classCodeID].length) {
+                if (optionalRationData[classCodeID] && optionalRationData[classCodeID].length) {
                     optionalRationIDs.push(...optionalRationData[classCodeID]);
+                    matchRationList.push(...optionalRationData[classCodeID]);
                 }
                 //这里是必填选项下绑定在蓝色节点下的选套定额,下同
-                if(optionCombineData[classCodeID]&&optionCombineData[classCodeID].size){
-                    optionalRationIDs.push(...requireCombineData[classCodeID]);
+                if (optionCombineData[classCodeID] && optionCombineData[classCodeID].size) {
+                    optionalRationIDs.push(...optionCombineData[classCodeID]);
+                    matchRationList.push(...optionCombineData[classCodeID]);
                 }
 
             })
-            return {name,requiredRationIDs,optionalRationIDs:[...new Set(optionalRationIDs)],errorRationIDs}
-        }else{
-            const unitRation=[];
-            requireRationData[classCodeIDs].forEach(subItem=>{
+            return { name, requiredRationIDs, optionalRationIDs: [...new Set(optionalRationIDs)], errorRationIDs }
+        } else {
+            const unitRation = [];
+            requireRationData[classCodeIDs].forEach(subItem => {
                 unitRation.push(...new Set(subItem));
             })
-            name=classGroups[classCodeIDs];
-            if(requireRationData[classCodeIDs]&&requireRationData[classCodeIDs].length) requiredRationIDs.push(unitRation);
-            if(requireCombineData[classCodeIDs]&&requireCombineData[classCodeIDs].size) requiredRationIDs.push([...requireCombineData[classCodeIDs]]);
+            name = classGroups[classCodeIDs];
+            if (requireRationData[classCodeIDs] && requireRationData[classCodeIDs].length) requiredRationIDs.push(unitRation);
+            if (requireCombineData[classCodeIDs] && requireCombineData[classCodeIDs].size) requiredRationIDs.push([...requireCombineData[classCodeIDs]]);
 
-            if(optionalRationData[classCodeIDs]&&optionalRationData[classCodeIDs].length) {
+            if (optionalRationData[classCodeIDs] && optionalRationData[classCodeIDs].length) {
                 optionalRationIDs.push(...optionalRationData[classCodeIDs]);
+                matchRationList.push(...optionalRationData[classCodeIDs]);
             }
-            if(optionCombineData[classCodeIDs]&&optionCombineData[classCodeIDs].size){
-                optionalRationIDs.push(...requireCombineData[classCodeIDs]);
+            if (optionCombineData[classCodeIDs] && optionCombineData[classCodeIDs].size) {
+                optionalRationIDs.push(...optionCombineData[classCodeIDs]);
+                matchRationList.push(...optionalRationData[classCodeIDs]);
             }
-
-            return {name,requiredRationIDs,optionalRationIDs:[...new Set(optionalRationIDs)],errorRationIDs}
+            return { name, requiredRationIDs, optionalRationIDs: [...new Set(optionalRationIDs)], errorRationIDs }
         }
     })
+    const unMatchRation = [];
+    Object.values(optionalRationData).forEach(data => {
+        data.forEach((rationID) => {
+            if (!matchRationList.includes(rationID)) {
+                unMatchRation.push(rationID);
+            }
+        })
+    })
+    return { itemClassData: finData, unMatchRation };
 }
 
 
@@ -849,7 +861,7 @@ 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,optionalRationData,classGroups,IDData);
+        const {itemClassData,unMatchRation}= combineData(classCodeData,requireRationData,optionalRationData,classGroups,IDData);
        
         const allRationIDs = guidanceTree.items.filter(node => !!node.data.rationID).map(node => node.data.rationID);
         // 选套定额ID
@@ -857,6 +869,7 @@ async function generateClassData(libID) {
         //if(itemClassData.length > 1000) console.log('getItemClassData end',billNode.data.name,billNode.data.code,billNode.data.ID,itemClassData.length)
         itemClassData.forEach(item => {
             // 错套定额
+            item.optionalRationIDs.push(...unMatchRation);
             const errorRationIDs = getErrorRationIDs(item.requiredRationIDs, item.optionalRationIDs, allRationIDs);
             if(billNode.data.ID == '1d32fa34-0a9b-11ea-a33d-5388f9783b09') console.log(item.name)
             billClassData.push({
@@ -873,9 +886,6 @@ async function generateClassData(libID) {
         });
         //新增无必填时的情况
         if(itemClassData.length===0){
-            // console.log({requireRationData,optionalRationData,classGroups,IDData});
-            // console.log('===+++++++++==');
-            // console.log(optionalRationIDs);
            Object.keys(requireRationData).forEach((key)=>{
                  requireRationData[key].forEach(data=>{
                     if(data.length) optionalRationIDs.push(...data);