|
@@ -2190,7 +2190,8 @@
|
|
|
$.bootstrapLoading.end();
|
|
$.bootstrapLoading.end();
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
- // 计算本节点及所有会被影响到的节点,如:所有父节点(默认,可选)、公式引用节点(默认,可选)。修改一个树节点,实际上要计算和保存的是一批树结点:层层父结点、被其它结点(的公式)引用的公式结点。
|
|
|
|
|
|
|
+ // 计算本节点及所有会被影响到的节点,如:所有父节点(默认,可选)、公式引用节点(默认,可选)。
|
|
|
|
|
+ // 修改一个树节点,实际上要计算和保存的是一批树结点:层层父结点、被其它结点(的公式)引用的公式结点。
|
|
|
calculate(treeNode, calcParents = true, calcFormulas = true, tender) {
|
|
calculate(treeNode, calcParents = true, calcFormulas = true, tender) {
|
|
|
let me = this;
|
|
let me = this;
|
|
|
let changedNodes = [];
|
|
let changedNodes = [];
|
|
@@ -2603,9 +2604,9 @@
|
|
|
let me = this;
|
|
let me = this;
|
|
|
|
|
|
|
|
let G_DIGIT = 0.01; // 系数调整步距(0.1最终结果误差大。0.001目标金额与逼前金额差距大时无法有效逼近)
|
|
let G_DIGIT = 0.01; // 系数调整步距(0.1最终结果误差大。0.001目标金额与逼前金额差距大时无法有效逼近)
|
|
|
- let times = 200; // 逼近计算的极限次数。正常情况下“单位系数金额”列表中的结点耗尽即退出,这里指定轮数是最后保险阀,防止无限死循环。
|
|
|
|
|
|
|
+ let times = 300; // 逼近计算的极限次数。正常情况下“单位系数金额”列表中的结点耗尽即退出,这里指定轮数是最后保险阀,防止无限死循环。
|
|
|
let calcModel = 1; // 计算模式:1 精度优先(差值不接近0不停,直到结点用完或极限次数用完。时间长精度高)2 速度优先(达到指定差值范围即熔断逼近。时间短差值大)
|
|
let calcModel = 1; // 计算模式:1 精度优先(差值不接近0不停,直到结点用完或极限次数用完。时间长精度高)2 速度优先(达到指定差值范围即熔断逼近。时间短差值大)
|
|
|
- let diffProp = 0.0001; // 速度优先模式下的:差值比例
|
|
|
|
|
|
|
+ let diffProp = 0.0001; // 计算模式=2(速度优先)时有效。 计算可接受的差值D。差值D = 根结点金额 * diffProp
|
|
|
let isTest = true; // 测试
|
|
let isTest = true; // 测试
|
|
|
|
|
|
|
|
// 取树结点的调价系数。
|
|
// 取树结点的调价系数。
|
|
@@ -2717,7 +2718,11 @@
|
|
|
closeNode.data.quantityCoe.equipment = coe
|
|
closeNode.data.quantityCoe.equipment = coe
|
|
|
};
|
|
};
|
|
|
me.calculate(closeNode);
|
|
me.calculate(closeNode);
|
|
|
- if (isTest) console.log(` [索引${obj.nodeIdx} 行${obj.node.data.tender_rowNo}]过调,已回退`);
|
|
|
|
|
|
|
+ if (isTest) {
|
|
|
|
|
+ let _sp = ` `; // 保留空格,打印对齐
|
|
|
|
|
+ let _node = `[行${obj.node.data.tender_rowNo} 索引${obj.nodeIdx}]`;
|
|
|
|
|
+ console.log(`${_sp} ${_node} 过调,已回退`);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
let root = tender_obj.tenderTree.roots[0];
|
|
let root = tender_obj.tenderTree.roots[0];
|
|
@@ -2752,7 +2757,12 @@
|
|
|
|
|
|
|
|
let d2 = getRootDiff();
|
|
let d2 = getRootDiff();
|
|
|
|
|
|
|
|
- if (isTest) console.log(`【第 ${i} 轮】调整[索引${obj.nodeIdx} 行${obj.node.data.tender_rowNo}] ${obj.node.data.tender_previousCoe} → ${getCoe(obj.node)},差值${d1} → ${d2}`);
|
|
|
|
|
|
|
+ if (isTest){
|
|
|
|
|
+ let _node = `[行${obj.node.data.tender_rowNo} 索引${obj.nodeIdx}]`;
|
|
|
|
|
+ let _coe = `${obj.node.data.tender_previousCoe} → ${getCoe(obj.node)}`;
|
|
|
|
|
+ let _d = `差值${d1} → ${d2}`;
|
|
|
|
|
+ console.log(`【第 ${i} 轮】调整${_node} ${_coe},${_d}`);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
if (Math.abs(d2) > Math.abs(d1)){ // 逼近后差距反而变大,证明过调,回退一步
|
|
if (Math.abs(d2) > Math.abs(d1)){ // 逼近后差距反而变大,证明过调,回退一步
|
|
|
undoLastApproach(obj);
|
|
undoLastApproach(obj);
|
|
@@ -2804,6 +2814,7 @@
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
doTenderCalc(callback) {
|
|
doTenderCalc(callback) {
|
|
|
|
|
+ $.bootstrapLoading.start();
|
|
|
let sOption = calcTools.getTenderCalcType();
|
|
let sOption = calcTools.getTenderCalcType();
|
|
|
let tender;
|
|
let tender;
|
|
|
if (sOption == 'coeBase')
|
|
if (sOption == 'coeBase')
|