|
@@ -13,19 +13,57 @@ let projectConst = consts.projectConst;
|
|
|
let projectConstList = consts.projectConstList;
|
|
|
|
|
|
class Rpt_Common{
|
|
|
- initialize(Projects) {
|
|
|
- this.Projects = Projects;
|
|
|
+ initialize(rpt_tpl, currentDataObj) {
|
|
|
+ this.template = rpt_tpl;
|
|
|
+ this.currentDataObj = currentDataObj;
|
|
|
};
|
|
|
-
|
|
|
- getSerialNo(fieldId, $CURRENT_RPT, $CURRENT_DATA){
|
|
|
- let itemSerialNoRec = $JE.F(fieldId, $CURRENT_RPT);
|
|
|
- if (itemSerialNoRec) {
|
|
|
- itemSerialNoRec[JV.PROP_AD_HOC_DATA] = [];
|
|
|
- for (var innerFmlIdx = 0; innerFmlIdx < $CURRENT_DATA[JV.DATA_DETAIL_DATA][0].length; innerFmlIdx++) {
|
|
|
- itemSerialNoRec[JV.PROP_AD_HOC_DATA][innerFmlIdx] = (innerFmlIdx + 1);
|
|
|
- }
|
|
|
- itemSerialNoRec = null;
|
|
|
+ Multiply(val1, val2, fixFormat) {
|
|
|
+ let rst = [], maxLen = val1.length, minLen = val2.length;
|
|
|
+ if (minLen > maxLen) {
|
|
|
+ maxLen = maxLen + minLen; minLen = maxLen - minLen; maxLen = maxLen - minLen;
|
|
|
+ }
|
|
|
+ for (let i = 0; i < maxLen; i++) {
|
|
|
+ let value = ((i < val1.length)?val1[i]:val1[minLen - 1]) * ((i < val2.length)?val2[i]:val2[minLen - 1]);
|
|
|
+ if (fixFormat) value = value.toFixed(fixFormat);
|
|
|
+ rst.push(value);
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+ };
|
|
|
+ Divide(val1, val2, fixFormat) {
|
|
|
+ let rst = [], maxLen = val1.length, minLen = val2.length;
|
|
|
+ if (minLen > maxLen) {
|
|
|
+ maxLen = maxLen + minLen; minLen = maxLen - minLen; maxLen = maxLen - minLen;
|
|
|
+ }
|
|
|
+ for (let i = 0; i < maxLen; i++) {
|
|
|
+ let value = ((i < val1.length)?val1[i]:val1[minLen - 1]) / ((i < val2.length)?val2[i]:val2[minLen - 1]);
|
|
|
+ if (fixFormat) value = value.toFixed(fixFormat);
|
|
|
+ rst.push(value);
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+ };
|
|
|
+ Plus(val1, val2, fixFormat) {
|
|
|
+ let rst = [], maxLen = val1.length, minLen = val2.length;
|
|
|
+ if (minLen > maxLen) {
|
|
|
+ maxLen = maxLen + minLen; minLen = maxLen - minLen; maxLen = maxLen - minLen;
|
|
|
+ }
|
|
|
+ for (let i = 0; i < maxLen; i++) {
|
|
|
+ let value = ((i < val1.length)?val1[i]:val1[minLen - 1]) + ((i < val2.length)?val2[i]:val2[minLen - 1]);
|
|
|
+ if (fixFormat) value = value.toFixed(fixFormat);
|
|
|
+ rst.push(value);
|
|
|
}
|
|
|
+ return rst;
|
|
|
+ };
|
|
|
+ Minus(val1, val2, fixFormat) {
|
|
|
+ let rst = [], maxLen = val1.length, minLen = val2.length;
|
|
|
+ if (minLen > maxLen) {
|
|
|
+ maxLen = maxLen + minLen; minLen = maxLen - minLen; maxLen = maxLen - minLen;
|
|
|
+ }
|
|
|
+ for (let i = 0; i < maxLen; i++) {
|
|
|
+ let value = ((i < val1.length)?val1[i]:val1[minLen - 1]) - ((i < val2.length)?val2[i]:val2[minLen - 1]);
|
|
|
+ if (fixFormat) value = value.toFixed(fixFormat);
|
|
|
+ rst.push(value);
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
};
|
|
|
}
|
|
|
|
|
@@ -38,6 +76,7 @@ class Rpt_Data_Extractor {
|
|
|
this.rptTpl = tpl;
|
|
|
};
|
|
|
|
|
|
+ //-- 根据报表模板映射指标(非离散指标)的定义,罗列出所有需要用到的data对象key,作为数据请求的过滤依据
|
|
|
getDataRequestFilter() {
|
|
|
let rst = [];
|
|
|
let tpl = this.rptTpl;
|
|
@@ -48,7 +87,7 @@ class Rpt_Data_Extractor {
|
|
|
if (field[JV.PROP_FIELD_EXP_MAP].indexOf('.' + key + '.') >= 0) {
|
|
|
rst.push(key);
|
|
|
if (key === projectConst.RATION_GLJ && (rst.indexOf(projectConst.PROJECTGLJ) < 0)) {
|
|
|
- //rst.push(projectConst.PROJECTGLJ);
|
|
|
+ rst.push(projectConst.PROJECTGLJ);
|
|
|
}
|
|
|
if (key === projectConst.PROJECTGLJ && (rst.indexOf(projectConst.RATION_GLJ) < 0)) {
|
|
|
rst.push(projectConst.RATION_GLJ);
|
|
@@ -58,42 +97,30 @@ class Rpt_Data_Extractor {
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
- if (tpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS]) {
|
|
|
- for (let field of tpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS]) {
|
|
|
- pri_func_chk_filter(field);
|
|
|
- }
|
|
|
- }
|
|
|
- if (tpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {
|
|
|
- for (let field of tpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {
|
|
|
- pri_func_chk_filter(field);
|
|
|
- }
|
|
|
- }
|
|
|
- if (tpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {
|
|
|
- for (let field of tpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {
|
|
|
- pri_func_chk_filter(field);
|
|
|
- }
|
|
|
- }
|
|
|
- if (tpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS_EX]) {
|
|
|
- for (let field of tpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS_EX]) {
|
|
|
- pri_func_chk_filter(field);
|
|
|
- }
|
|
|
- }
|
|
|
- if (tpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS_EX]) {
|
|
|
- for (let field of tpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS_EX]) {
|
|
|
- pri_func_chk_filter(field);
|
|
|
+ let pri_setup_filter = function (FIELD_LIST_KEY) {
|
|
|
+ if (tpl[JV.NODE_FIELD_MAP][FIELD_LIST_KEY]) {
|
|
|
+ for (let field of tpl[JV.NODE_FIELD_MAP][FIELD_LIST_KEY]) {
|
|
|
+ pri_func_chk_filter(field);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
+ };
|
|
|
+ pri_setup_filter(JV.NODE_DISCRETE_FIELDS);
|
|
|
+ pri_setup_filter(JV.NODE_MASTER_FIELDS);
|
|
|
+ pri_setup_filter(JV.NODE_DETAIL_FIELDS);
|
|
|
+ pri_setup_filter(JV.NODE_MASTER_FIELDS_EX);
|
|
|
+ pri_setup_filter(JV.NODE_DETAIL_FIELDS_EX);
|
|
|
return rst;
|
|
|
};
|
|
|
|
|
|
//--- 装配数据(把收集到的数据,依据报表模板的指示,预处理(如:排序、过滤、合计)及装配到相关指标) ---//
|
|
|
assembleData(rawDataObj) {
|
|
|
- let $PROJECT = {"COMMON": {}, "MAIN": {}, "DETAIL": {}};
|
|
|
+ let $PROJECT = {"COMMON": null, "MAIN": {}, "DETAIL": {}};
|
|
|
let tpl = this.rptTpl;
|
|
|
+ this.COMMON.initialize(tpl, rawDataObj);
|
|
|
+ $PROJECT.COMMON = this.COMMON;
|
|
|
$PROJECT.MAIN["myOwnRawDataObj"] = rawDataObj.prj._doc;
|
|
|
$PROJECT.MAIN.getProperty = ext_mainGetPropety;
|
|
|
$PROJECT.MAIN.getFee = ext_mainGetFee;
|
|
|
- $PROJECT.DETAIL.getRationPropertyByID = ext_getRationPropertyByID;
|
|
|
if (tpl[JV.NODE_MAP_DATA_HANDLE_INFO]) {
|
|
|
for (let preHandle of tpl[JV.NODE_MAP_DATA_HANDLE_INFO]) {
|
|
|
let srcData = getModuleDataByKey(rawDataObj.prjData, preHandle[JV.PROP_DATA_KEY]);
|
|
@@ -134,8 +161,8 @@ class Rpt_Data_Extractor {
|
|
|
// console.log(JV.DATA_MASTER_DATA_EX);
|
|
|
// console.log(rptDataObj[JV.DATA_MASTER_DATA_EX]);
|
|
|
assembleFields(tpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS_EX], rptDataObj[JV.DATA_DETAIL_DATA_EX], $PROJECT);
|
|
|
- // console.log(JV.DATA_DETAIL_DATA_EX);
|
|
|
- // console.log(rptDataObj[JV.DATA_DETAIL_DATA_EX]);
|
|
|
+ console.log(JV.DATA_DETAIL_DATA_EX);
|
|
|
+ console.log(rptDataObj[JV.DATA_DETAIL_DATA_EX]);
|
|
|
return rptDataObj;
|
|
|
};
|
|
|
|
|
@@ -316,6 +343,7 @@ function setupFunc(obj, prop, ownRawObj) {
|
|
|
obj[prop]["myOwnRawDataObj"] = ownRawObj;
|
|
|
obj[prop].getProperty = ext_getPropety;
|
|
|
obj[prop].getFee = ext_getFee;
|
|
|
+ obj[prop].getPropertyByForeignId = ext_getPropertyByForeignId;
|
|
|
}
|
|
|
|
|
|
function assembleFields(fieldList, rstDataArr, $PROJECT) {
|
|
@@ -333,11 +361,9 @@ function shielded_exec_env($PROJECT, $ME, rptDataItemObj) {
|
|
|
}
|
|
|
|
|
|
function ext_mainGetPropety(propKey) {
|
|
|
- let rst = [];
|
|
|
- let parentObj = this;
|
|
|
- //console.log(this);
|
|
|
+ let rst = [], parentObj = this;
|
|
|
let dtObj = parentObj["myOwnRawDataObj"];
|
|
|
- if ((dtObj) && (propKey)) {
|
|
|
+ if (propKey && dtObj) {
|
|
|
if (dtObj.hasOwnProperty("property")) {
|
|
|
rst.push(dtObj["property"][propKey]);
|
|
|
} else {
|
|
@@ -347,6 +373,24 @@ function ext_mainGetPropety(propKey) {
|
|
|
return rst;
|
|
|
}
|
|
|
|
|
|
+function ext_getPropety(propKey) {
|
|
|
+ let rst = [], parentObj = this;
|
|
|
+ let dtObj = parentObj["myOwnRawDataObj"];
|
|
|
+ if (propKey && dtObj) {
|
|
|
+ for (let dItem of dtObj.data) {
|
|
|
+ let doc = (dItem._doc === null || dItem._doc === undefined)?dItem:dItem._doc;
|
|
|
+ if (doc.hasOwnProperty("property")) {
|
|
|
+ rst.push(doc["property"][propKey]);
|
|
|
+ } else if (doc.hasOwnProperty(propKey)) {
|
|
|
+ rst.push(doc[propKey]);
|
|
|
+ } else {
|
|
|
+ rst.push('');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+}
|
|
|
+
|
|
|
function ext_mainGetFee(feeKey, dtlFeeKey) {
|
|
|
let rst = [];
|
|
|
let parentObj = this;
|
|
@@ -372,24 +416,6 @@ function ext_mainGetFee(feeKey, dtlFeeKey) {
|
|
|
return rst;
|
|
|
}
|
|
|
|
|
|
-function ext_getPropety(propKey) {
|
|
|
- let rst = [], parentObj = this;
|
|
|
- let dtObj = parentObj["myOwnRawDataObj"];
|
|
|
- if (propKey && dtObj) {
|
|
|
- for (let dItem of dtObj.data) {
|
|
|
- let doc = (dItem._doc === null || dItem._doc === undefined)?dItem:dItem._doc;
|
|
|
- if (doc.hasOwnProperty("property")) {
|
|
|
- rst.push(doc["property"][propKey]);
|
|
|
- } else if (doc.hasOwnProperty(propKey)) {
|
|
|
- rst.push(doc[propKey]);
|
|
|
- } else {
|
|
|
- rst.push('');
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return rst;
|
|
|
-}
|
|
|
-
|
|
|
function ext_getFee(feeKey, dtlFeeKey) {
|
|
|
let rst = [], parentObj = this;
|
|
|
let dtObj = parentObj["myOwnRawDataObj"];
|
|
@@ -423,16 +449,32 @@ function ext_getFee(feeKey, dtlFeeKey) {
|
|
|
return rst;
|
|
|
}
|
|
|
|
|
|
-function ext_getRationPropertyByID(IdVal, propKey) {
|
|
|
- let rst = [], me = this;
|
|
|
- if (IdVal !== null && IdVal !== undefined && me[projectConst.RATION]) {
|
|
|
+function ext_getPropertyByForeignId(foreignIdVal, adHocIdKey, propKey) {
|
|
|
+ let rst = [], parentObj = this;
|
|
|
+ let IdKey = (adHocIdKey)?adHocIdKey:"ID";
|
|
|
+ let dtObj = parentObj["myOwnRawDataObj"];
|
|
|
+ if (foreignIdVal !== null && foreignIdVal !== undefined) {
|
|
|
let isFound = false;
|
|
|
- if (IdVal instanceof Array) {
|
|
|
- for (let id of IdVal) {
|
|
|
+ if (foreignIdVal instanceof Array) {
|
|
|
+ for (let idVal of foreignIdVal) {
|
|
|
isFound = false;
|
|
|
- for (let item of me[projectConst.RATION]["myOwnRawDataObj"].data) {
|
|
|
- if (item.ID === id) {
|
|
|
- rst.push(item[propKey]);
|
|
|
+ for (let i = 0; i < dtObj.data.length; i++) {
|
|
|
+ let item = (dtObj.data[i]._doc)?dtObj.data[i]._doc:dtObj.data[i];
|
|
|
+ if (item[IdKey] === idVal) {
|
|
|
+ let splitPKey = propKey.split(".");
|
|
|
+ if (splitPKey.length > 1) {
|
|
|
+ let rstP = null;
|
|
|
+ for (let i = 0; i < splitPKey.length; i++) {
|
|
|
+ if (i === 0) {
|
|
|
+ rstP = item[splitPKey[i]];
|
|
|
+ } else {
|
|
|
+ rstP = rstP[splitPKey[i]];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ rst.push(rstP);
|
|
|
+ } else {
|
|
|
+ rst.push(item[propKey]);
|
|
|
+ }
|
|
|
isFound = true;
|
|
|
break;
|
|
|
}
|
|
@@ -440,8 +482,8 @@ function ext_getRationPropertyByID(IdVal, propKey) {
|
|
|
// if (!isFound) rst.push[null];
|
|
|
}
|
|
|
} else {
|
|
|
- for (let item of me[projectConst.RATION]["myOwnRawDataObj"].data) {
|
|
|
- if (item.ID === IdVal) {
|
|
|
+ for (let item of dtObj.data) {
|
|
|
+ if (item[IdKey] === foreignIdVal) {
|
|
|
rst.push(item[propKey]);
|
|
|
isFound = true;
|
|
|
break;
|