|
@@ -1,6 +1,7 @@
|
|
|
/**
|
|
|
* Created by Tony on 2017/6/21.
|
|
|
* Modified by CSL, 2017-08-01
|
|
|
+ * 引入多套计算程序、费率同步、人工系数同步、改进基数计算、费字段映射等。
|
|
|
*/
|
|
|
|
|
|
let executeObj = {
|
|
@@ -40,14 +41,40 @@ let executeObj = {
|
|
|
};
|
|
|
|
|
|
class Calculation {
|
|
|
-/* init(template, feeRates){
|
|
|
+ // 先编译公用的基础数据
|
|
|
+ compilePublics(feeRates, labourCoes, feeTypes){
|
|
|
let me = this;
|
|
|
- me.template = template;
|
|
|
- me.feeRates = feeRates;
|
|
|
- me.hasCompiled = false;
|
|
|
- };*/
|
|
|
+ let private_compile_feeFile = function() {
|
|
|
+ if (feeRates) {
|
|
|
+ me.compiledFeeRates = {};
|
|
|
+ for (let rate of feeRates) {
|
|
|
+ me.compiledFeeRates["feeRate_" + rate.ID] = rate;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ let private_compile_labourCoeFile = function() {
|
|
|
+ if (labourCoes) {
|
|
|
+ me.compiledLabourCoes = {};
|
|
|
+ for (let coe of labourCoes) {
|
|
|
+ me.compiledLabourCoes["LabourCoe_" + coe.ID] = coe;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ let private_compile_feeType = function() {
|
|
|
+ if (feeTypes) {
|
|
|
+ me.compiledFeeTypes = {};
|
|
|
+ for (let ft of feeTypes) {
|
|
|
+ me.compiledFeeTypes[ft.type] = ft.name;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
- compile(template, feeRates, labourCoes){
|
|
|
+ private_compile_feeFile();
|
|
|
+ private_compile_labourCoeFile();
|
|
|
+ private_compile_feeType();
|
|
|
+ };
|
|
|
+
|
|
|
+ compileTemplate(template){
|
|
|
let me = this;
|
|
|
template.hasCompiled = false;
|
|
|
template.errs = [];
|
|
@@ -109,44 +136,32 @@ class Calculation {
|
|
|
let item = template.calcItems[idx];
|
|
|
item.compiledExpr = item.expression.split('@(').join('$CE.at(');
|
|
|
item.compiledExpr = item.compiledExpr.split('base(').join('$CE.base(');
|
|
|
- //item.compiledExpr = item.compiledExpr.split('rate(').join('$CE.rate(');
|
|
|
- //item.compiledExpr = item.compiledExpr.split('factor(').join('$CE.factor(');
|
|
|
+
|
|
|
if (item.labourCoeID){
|
|
|
let lc = me.compiledLabourCoes["LabourCoe_" + item.labourCoeID].coe;
|
|
|
item.dispExpr = item.dispExpr.replace(/L/gi, lc.toString());
|
|
|
item.compiledExpr = item.compiledExpr.replace(/L/gi, lc.toString());
|
|
|
- }
|
|
|
- }
|
|
|
- };
|
|
|
- let private_compile_feeFile = function() {
|
|
|
- if (feeRates) {
|
|
|
- me.compiledFeeRate = {};
|
|
|
- for (let rate of feeRates) {
|
|
|
- me.compiledFeeRate["feeRate_" + rate.ID] = rate;
|
|
|
- }
|
|
|
- }
|
|
|
- };
|
|
|
- let private_compile_labourCoeFile = function() {
|
|
|
- if (labourCoes) {
|
|
|
- me.compiledLabourCoes = {};
|
|
|
- for (let coe of labourCoes) {
|
|
|
- me.compiledLabourCoes["LabourCoe_" + coe.ID] = coe;
|
|
|
- }
|
|
|
+ };
|
|
|
+
|
|
|
+ if (item.feeRateID) {
|
|
|
+ item.feeRate = me.compiledFeeRates["feeRate_" + item.feeRateID].rate;
|
|
|
+ };
|
|
|
+
|
|
|
+ // 字段名映射
|
|
|
+ item.displayFieldName = me.compiledFeeTypes[item.fieldName];
|
|
|
}
|
|
|
};
|
|
|
|
|
|
if (template && template.calcItems && template.calcItems.length > 0) {
|
|
|
template.compiledSeq = [];
|
|
|
template.compiledTemplate = {};
|
|
|
- //1. first round -> prepare
|
|
|
- private_compile_feeFile();
|
|
|
- private_compile_labourCoeFile();
|
|
|
+
|
|
|
for (let i = 0; i < template.calcItems.length; i++) {
|
|
|
let item = template.calcItems[i];
|
|
|
template.compiledTemplate[item.ID] = item;
|
|
|
template.compiledTemplate[item.ID + "_idx"] = i;
|
|
|
}
|
|
|
- //2. second round -> go!
|
|
|
+
|
|
|
for (let i = 0; i < template.calcItems.length; i++) {
|
|
|
private_setup_seq(template.calcItems[i], i);
|
|
|
}
|
|
@@ -156,7 +171,7 @@ class Calculation {
|
|
|
} else {
|
|
|
console.log('errors: ' + template.errs.toString());
|
|
|
}
|
|
|
- }
|
|
|
+ };
|
|
|
};
|
|
|
|
|
|
calculate($treeNode){
|
|
@@ -175,13 +190,10 @@ class Calculation {
|
|
|
for (let idx of template.compiledSeq) {
|
|
|
let calcItem = template.calcItems[idx];
|
|
|
|
|
|
- let feeRate = 100; // 100%
|
|
|
- // 下面三项用于界面显示。
|
|
|
- if (calcItem.feeRateID) {
|
|
|
- feeRate = me.compiledFeeRate["feeRate_" + calcItem.feeRateID].rate;
|
|
|
- calcItem.feeRate = feeRate;
|
|
|
- };
|
|
|
+ let feeRate = calcItem.feeRate;
|
|
|
+ if (!feeRate) feeRate = 100; // 100%
|
|
|
calcItem.unitFee = eval(calcItem.compiledExpr) * feeRate * 0.01; // 如果eval()对清单树有影响,就换成小麦的Expression对象再试
|
|
|
+
|
|
|
let quantity = $treeNode.data.quantity;
|
|
|
if (!quantity) quantity = 0;
|
|
|
calcItem.totalFee = calcItem.unitFee * quantity;
|