|
@@ -4,12 +4,11 @@
|
|
*/
|
|
*/
|
|
|
|
|
|
let executeObj = {
|
|
let executeObj = {
|
|
- calculation : null,
|
|
|
|
ration: null,
|
|
ration: null,
|
|
at: function(ID) {
|
|
at: function(ID) {
|
|
let me = executeObj,
|
|
let me = executeObj,
|
|
rst = 0;
|
|
rst = 0;
|
|
- rst = me.calculation.compileAssistantObj[ID].unitFee;
|
|
|
|
|
|
+ rst = me.ration.data.calcTemplate.compiledTemplate[ID].unitFee;
|
|
rst = parseFloat(rst);
|
|
rst = parseFloat(rst);
|
|
return rst;
|
|
return rst;
|
|
},
|
|
},
|
|
@@ -50,8 +49,8 @@ class Calculation {
|
|
|
|
|
|
compile(template, feeRates, labourCoes){
|
|
compile(template, feeRates, labourCoes){
|
|
let me = this;
|
|
let me = this;
|
|
- me.hasCompiled = false;
|
|
|
|
- me.errs = [];
|
|
|
|
|
|
+ template.hasCompiled = false;
|
|
|
|
+ template.errs = [];
|
|
|
|
|
|
let private_extract_ID = function(str, idx){
|
|
let private_extract_ID = function(str, idx){
|
|
let rst = '', lBracket = 0, rBracket = 0, firstIdx = idx, lastIdx = 0;
|
|
let rst = '', lBracket = 0, rBracket = 0, firstIdx = idx, lastIdx = 0;
|
|
@@ -82,15 +81,15 @@ class Calculation {
|
|
while (idx >= 0) {
|
|
while (idx >= 0) {
|
|
let ID = private_extract_ID(item.expression, idx);
|
|
let ID = private_extract_ID(item.expression, idx);
|
|
if (ID.length > 0) {
|
|
if (ID.length > 0) {
|
|
- let subItem = me.compileAssistantObj[ID];
|
|
|
|
|
|
+ let subItem = template.compiledTemplate[ID];
|
|
if (subItem) {
|
|
if (subItem) {
|
|
if (subItem.ID !== item.ID) {
|
|
if (subItem.ID !== item.ID) {
|
|
- private_parse_ref(subItem, me.compileAssistantObj[ID + "_idx"]);
|
|
|
|
|
|
+ private_parse_ref(subItem, template.compiledTemplate[ID + "_idx"]);
|
|
} else {
|
|
} else {
|
|
- me.errs.push("There exists the self refer ID: " + ID);
|
|
|
|
|
|
+ template.errs.push("There exists the self refer ID: " + ID);
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- me.errs.push("There exists the invalid ID by which could not find the item: " + ID);
|
|
|
|
|
|
+ template.errs.push("There exists the invalid ID by which could not find the item: " + ID);
|
|
console.log('invalid ID: ' + ID);
|
|
console.log('invalid ID: ' + ID);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -127,7 +126,6 @@ class Calculation {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
};
|
|
-
|
|
|
|
let private_compile_labourCoeFile = function() {
|
|
let private_compile_labourCoeFile = function() {
|
|
if (labourCoes) {
|
|
if (labourCoes) {
|
|
me.compiledLabourCoes = {};
|
|
me.compiledLabourCoes = {};
|
|
@@ -139,41 +137,41 @@ class Calculation {
|
|
|
|
|
|
if (template && template.calcItems && template.calcItems.length > 0) {
|
|
if (template && template.calcItems && template.calcItems.length > 0) {
|
|
template.compiledSeq = [];
|
|
template.compiledSeq = [];
|
|
- me.compileAssistantObj = {};
|
|
|
|
|
|
+ template.compiledTemplate = {};
|
|
//1. first round -> prepare
|
|
//1. first round -> prepare
|
|
private_compile_feeFile();
|
|
private_compile_feeFile();
|
|
private_compile_labourCoeFile();
|
|
private_compile_labourCoeFile();
|
|
for (let i = 0; i < template.calcItems.length; i++) {
|
|
for (let i = 0; i < template.calcItems.length; i++) {
|
|
let item = template.calcItems[i];
|
|
let item = template.calcItems[i];
|
|
- me.compileAssistantObj[item.ID] = item;
|
|
|
|
- me.compileAssistantObj[item.ID + "_idx"] = i;
|
|
|
|
|
|
+ template.compiledTemplate[item.ID] = item;
|
|
|
|
+ template.compiledTemplate[item.ID + "_idx"] = i;
|
|
}
|
|
}
|
|
//2. second round -> go!
|
|
//2. second round -> go!
|
|
for (let i = 0; i < template.calcItems.length; i++) {
|
|
for (let i = 0; i < template.calcItems.length; i++) {
|
|
private_setup_seq(template.calcItems[i], i);
|
|
private_setup_seq(template.calcItems[i], i);
|
|
}
|
|
}
|
|
- if (me.errs.length == 0) {
|
|
|
|
|
|
+ if (template.errs.length == 0) {
|
|
private_compile_items();
|
|
private_compile_items();
|
|
- if (me.errs.length == 0) me.hasCompiled = true;
|
|
|
|
|
|
+ template.hasCompiled = true;
|
|
} else {
|
|
} else {
|
|
- console.log('errors: ' + me.errs.toString());
|
|
|
|
|
|
+ console.log('errors: ' + template.errs.toString());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
+
|
|
calculate($RATION){ // 参数$RATION也可以是清单
|
|
calculate($RATION){ // 参数$RATION也可以是清单
|
|
let me = this;
|
|
let me = this;
|
|
- if ($RATION && me.hasCompiled) {
|
|
|
|
|
|
+ let template = $RATION.data.calcTemplate;
|
|
|
|
+
|
|
|
|
+ if ($RATION && template.hasCompiled) {
|
|
let $CE = executeObj;
|
|
let $CE = executeObj;
|
|
$CE.ration = $RATION;
|
|
$CE.ration = $RATION;
|
|
- $CE.calculation = me;
|
|
|
|
|
|
|
|
if (!$RATION.fees) {
|
|
if (!$RATION.fees) {
|
|
$RATION.fees = [];
|
|
$RATION.fees = [];
|
|
$RATION.feesIndex = {};
|
|
$RATION.feesIndex = {};
|
|
};
|
|
};
|
|
|
|
|
|
- //let template = getCalcTemplate($RATION.CalcTemplateID); // AAAAAA 通过定额获取计算规则
|
|
|
|
- let template = calcTemplates[0];
|
|
|
|
for (let idx of template.compiledSeq) {
|
|
for (let idx of template.compiledSeq) {
|
|
let calcItem = template.calcItems[idx];
|
|
let calcItem = template.calcItems[idx];
|
|
|
|
|
|
@@ -184,7 +182,7 @@ class Calculation {
|
|
calcItem.feeRate = feeRate;
|
|
calcItem.feeRate = feeRate;
|
|
};
|
|
};
|
|
calcItem.unitFee = eval(calcItem.compiledExpr) * feeRate * 0.01; // 如果eval()对清单树有影响,就换成小麦的Expression对象再试
|
|
calcItem.unitFee = eval(calcItem.compiledExpr) * feeRate * 0.01; // 如果eval()对清单树有影响,就换成小麦的Expression对象再试
|
|
- calcItem.totalFee = calcItem.unitFee * 3; // AAAAA 测试值,因目前定额无数量(保存不上) $RATION.data.Quantity
|
|
|
|
|
|
+ calcItem.totalFee = calcItem.unitFee * 3; // AAAAAA 测试值,因目前定额无数量(保存不上) $RATION.data.Quantity
|
|
|
|
|
|
// 费用同步到定额
|
|
// 费用同步到定额
|
|
// 引入小麦的字段检测后,快速切换定额出现计算卡顿现象,过多的循环造成。这里把她的代码拆出来,减少微循环。
|
|
// 引入小麦的字段检测后,快速切换定额出现计算卡顿现象,过多的循环造成。这里把她的代码拆出来,减少微循环。
|