|
@@ -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);
|