|
|
@@ -108,7 +108,7 @@ let calcTools = {
|
|
|
delete treeNode.data.gljList;
|
|
|
if (this.isRationCategory(treeNode)) {
|
|
|
if (treeNode.data.type != rationType.volumePrice) {
|
|
|
- treeNode.data.gljList = projectObj.project.ration_glj.getGljArrByRation(treeNode.data);
|
|
|
+ treeNode.data.gljList = projectObj.project.calcProgram.getGljArrByRation(treeNode.data);
|
|
|
}
|
|
|
}
|
|
|
else if (this.isBill(treeNode)){
|
|
|
@@ -1404,6 +1404,8 @@ class CalcProgram {
|
|
|
let me = this;
|
|
|
me.project = project;
|
|
|
me.datas = [];
|
|
|
+ me.rationMap = null;//定额 - 工料机映射临时变量
|
|
|
+ me.pgljMap = null;
|
|
|
project.registerModule(ModuleNames.calc_program, me);
|
|
|
};
|
|
|
|
|
|
@@ -1626,6 +1628,8 @@ class CalcProgram {
|
|
|
};
|
|
|
|
|
|
let me = this;
|
|
|
+ //设置定额工料机映射表
|
|
|
+ me.setRationMap();
|
|
|
me.setUpdateDataToNode(treeNode); // 先更新要计算的节点信息
|
|
|
if(!treeNode.temData) treeNode.temData = _.cloneDeep(treeNode.data); // 有可能会有多次计算,只有第一次才保存原始数据,用来对于更新。
|
|
|
|
|
|
@@ -1876,6 +1880,8 @@ class CalcProgram {
|
|
|
delete node.temData;
|
|
|
node.updateData = {};
|
|
|
};
|
|
|
+ me.rationMap = null;
|
|
|
+ me.pgljMap = null;
|
|
|
if(callback){
|
|
|
callback(data);
|
|
|
};
|
|
|
@@ -1973,7 +1979,7 @@ class CalcProgram {
|
|
|
rationNodes.push(node)
|
|
|
else
|
|
|
billNodes.push(node);
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
// 多条定额同属一条叶子清单时,避免叶子清单重复计算
|
|
|
for (let ration of rationNodes) {
|
|
|
@@ -1981,14 +1987,14 @@ class CalcProgram {
|
|
|
let leafBill = ration.parent;
|
|
|
if (leafBill && leafBills.indexOf(leafBill) < 0)
|
|
|
leafBills.push(leafBill);
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
billNodes.merge(leafBills);
|
|
|
|
|
|
for (let bill of billNodes){
|
|
|
let changeBills = me.calculate(bill, true, false, tender);
|
|
|
allChangedNodes.merge(changeBills);
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
me.calcFormulaNodes(allChangedNodes, tender);
|
|
|
me.saveNodes(allChangedNodes, callback);
|
|
|
@@ -2012,10 +2018,10 @@ class CalcProgram {
|
|
|
while (curNode){
|
|
|
me.innerCalc(curNode, changedArr, tender);
|
|
|
curNode = curNode.parent;
|
|
|
- };
|
|
|
- };
|
|
|
- };
|
|
|
- };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
// 计算叶子清单下的所有子结点、自身、所有父结点、公式引用结点(即跟该叶子清单相关的所有结点)。最后打包存储。
|
|
|
@@ -2126,6 +2132,36 @@ class CalcProgram {
|
|
|
|
|
|
|
|
|
};
|
|
|
+
|
|
|
+ setRationMap(){
|
|
|
+ if(this.rationMap == null){
|
|
|
+ this.rationMap = {};
|
|
|
+ for(let glj of projectObj.project.ration_glj.datas){
|
|
|
+ if(this.rationMap[glj.rationID]){
|
|
|
+ this.rationMap[glj.rationID].push(glj)
|
|
|
+ }else {
|
|
|
+ this.rationMap[glj.rationID] = [glj];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(this.pgljMap == null ){
|
|
|
+ this.pgljMap = _.indexBy(projectObj.project.projectGLJ.datas.gljList, 'id');
|
|
|
+ }
|
|
|
+ };
|
|
|
+ getGljArrByRation(ration){
|
|
|
+ if (ration.type == rationType.gljRation){
|
|
|
+ let glj = JSON.parse(JSON.stringify(ration));
|
|
|
+ glj.type = glj.subType;
|
|
|
+ glj.quantity = 1;
|
|
|
+ glj.totalQuantity = parseFloatPlus(ration.quantity);
|
|
|
+ return [glj];
|
|
|
+ } else{
|
|
|
+ if(!this.rationMap) return [];
|
|
|
+ let result = this.rationMap[ration.ID];
|
|
|
+ result = gljOprObj.combineWithProjectGlj(result,false,ration,this.pgljMap);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
// export default analyzer;
|