|
@@ -5,6 +5,10 @@
|
|
|
let JV = require('../rpt_component/jpc_value_define');
|
|
|
let $JE = require('../rpt_component/jpc_rte');
|
|
|
let consts = require('../../../modules/main/models/project_consts');
|
|
|
+
|
|
|
+let fsUtil = require("../../../public/fsUtil");
|
|
|
+
|
|
|
+let treeUtil = require('../../../public/treeUtil');
|
|
|
let projectConst = consts.projectConst;
|
|
|
let projectConstList = consts.projectConstList;
|
|
|
|
|
@@ -86,13 +90,19 @@ class Rpt_Data_Extractor {
|
|
|
$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]);
|
|
|
switch(preHandle[JV.PROP_HANDLE_TYPE]) {
|
|
|
case JV.PROP_HANDLE_TYPE_SORT:
|
|
|
+ sortData(srcData, preHandle);
|
|
|
break;
|
|
|
case JV.PROP_HANDLE_TYPE_FILTER:
|
|
|
+ filterData(srcData, preHandle, rawDataObj.prjData);
|
|
|
break;
|
|
|
case JV.PROP_HANDLE_TYPE_SUM:
|
|
|
- //
|
|
|
+ summaryData(srcData, preHandle, rawDataObj.prjData);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -120,10 +130,181 @@ class Rpt_Data_Extractor {
|
|
|
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]);
|
|
|
+ return rptDataObj;
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
+function getModuleDataByKey(prjData, key) {
|
|
|
+ let rst = null;
|
|
|
+ for (let item of prjData) {
|
|
|
+ if (item.moduleName === key) {
|
|
|
+ rst = item;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+}
|
|
|
+
|
|
|
+function summaryData(sourceData, handleCfg, prjData){
|
|
|
+ let rstArr = [], tempRstArr = [];
|
|
|
+ let curParentPrjData = {};
|
|
|
+ for (let item of sourceData.data) {
|
|
|
+ if (item._doc) {
|
|
|
+ tempRstArr.push(item._doc);
|
|
|
+ } else {
|
|
|
+ tempRstArr.push(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let private_get_grp_key = function (item) {
|
|
|
+ let keys = [];
|
|
|
+ for (let cfg of handleCfg[JV.PROP_SUM_GROUP_KEYS]) {
|
|
|
+ if (typeof cfg === "string") {
|
|
|
+ keys.push(item[cfg]);
|
|
|
+ } else {
|
|
|
+ if (!curParentPrjData[cfg["seeking_parent"]]) curParentPrjData[cfg["seeking_parent"]] = getModuleDataByKey(prjData, cfg["seeking_parent"]);
|
|
|
+ for (let pDataItem of curParentPrjData[cfg["seeking_parent"]].data) {
|
|
|
+ let data = (pDataItem._doc)?pDataItem._doc:pDataItem;
|
|
|
+ if (item[cfg["seeking_key"]] === data[cfg["parent_key"]]) {
|
|
|
+ keys.push(data[cfg["parent_grp_key"]]);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ( "grp_key_" + keys.join('_'));
|
|
|
+ }
|
|
|
+ let sumObj = {};
|
|
|
+ for (let dtl of tempRstArr) {
|
|
|
+ let grpKey = private_get_grp_key(dtl);
|
|
|
+ if (sumObj[grpKey] === null || sumObj[grpKey] === undefined) {
|
|
|
+ sumObj[grpKey] = dtl;
|
|
|
+ rstArr.push(dtl);
|
|
|
+ } else {
|
|
|
+ for (let sumKey of handleCfg[JV.PROP_SUM_SUM_KEYS]) {
|
|
|
+ if (dtl[sumKey]) {
|
|
|
+ sumObj[grpKey][sumKey] += dtl[sumKey];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ delete sourceData.data;
|
|
|
+ sourceData.data = rstArr;
|
|
|
+ // fsUtil.wirteObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/sumRst.js");
|
|
|
+}
|
|
|
+
|
|
|
+function filterData(sourceData, handleCfg, prjData) {
|
|
|
+ let rstArr = [], tempRstArr = [];
|
|
|
+ for (let item of sourceData.data) {
|
|
|
+ if (item._doc) {
|
|
|
+ tempRstArr.push(item._doc);
|
|
|
+ } else {
|
|
|
+ tempRstArr.push(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let private_chkVal = function (src, dest, compStr) {
|
|
|
+ let rst = true;
|
|
|
+ switch (compStr) {
|
|
|
+ case "==" :
|
|
|
+ rst = (src == dest);
|
|
|
+ break;
|
|
|
+ case "===" :
|
|
|
+ rst = (src === dest);
|
|
|
+ break;
|
|
|
+ case ">" :
|
|
|
+ rst = (src > dest);
|
|
|
+ break;
|
|
|
+ case ">=" :
|
|
|
+ rst = (src >= dest);
|
|
|
+ break;
|
|
|
+ case "<" :
|
|
|
+ rst = (src < dest);
|
|
|
+ break;
|
|
|
+ case "<=" :
|
|
|
+ rst = (src <= dest);
|
|
|
+ break;
|
|
|
+ case "!=" :
|
|
|
+ rst = (src != dest);
|
|
|
+ break;
|
|
|
+ case "!==" :
|
|
|
+ rst = (src !== dest);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ rst = true;
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+ }
|
|
|
+ for (let item of tempRstArr) {
|
|
|
+ let compRst = true;
|
|
|
+ let curComparePrjData = null;
|
|
|
+ for (let cfg of handleCfg[JV.PROP_FILTER_KEY]) {
|
|
|
+ if (cfg[JV.PROP_FILTER_COMPARE_VAL]) {
|
|
|
+ //比较key值
|
|
|
+ compRst = private_chkVal(item[cfg.key], cfg[JV.PROP_FILTER_COMPARE_VAL], cfg[JV.PROP_FILTER_CONDITION]);
|
|
|
+ } else if (cfg[JV.PROP_FILTER_COMPARE_OBJ] && cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY]){
|
|
|
+ //通过其他对象来过滤
|
|
|
+ if (!curComparePrjData) {
|
|
|
+ curComparePrjData = getModuleDataByKey(prjData, cfg[JV.PROP_FILTER_COMPARE_OBJ]);
|
|
|
+ }
|
|
|
+ for (let data of curComparePrjData.data) {
|
|
|
+ compRst = private_chkVal(item[cfg.key], data[cfg[JV.PROP_FILTER_COMPARE_OBJ_KEY]], cfg[JV.PROP_FILTER_CONDITION]);
|
|
|
+ if (compRst) break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (compRst) {
|
|
|
+ rstArr.push(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ delete sourceData.data;
|
|
|
+ sourceData.data = rstArr;
|
|
|
+ // fsUtil.wirteObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/filteredRst.js");
|
|
|
+}
|
|
|
+
|
|
|
+function sortData(sourceData, sortCfg) {
|
|
|
+ let rst = sourceData.data, tempRstArr = [];
|
|
|
+ let sortType = sortCfg[JV.PROP_SORT_TYPE];
|
|
|
+ for (let item of sourceData.data) {
|
|
|
+ if (item._doc) {
|
|
|
+ tempRstArr.push(item._doc);
|
|
|
+ } else {
|
|
|
+ tempRstArr.push(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ switch (sortType) {
|
|
|
+ case "tree":
|
|
|
+ rst = treeUtil.buildTreeNodeDirectly(tempRstArr);
|
|
|
+ let destArr = [];
|
|
|
+ treeUtil.getFlatArray(rst, destArr);
|
|
|
+ delete sourceData.data;
|
|
|
+ sourceData.data = destArr;
|
|
|
+ // fsUtil.wirteObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/sortedAndFlattedRst.js");
|
|
|
+ break;
|
|
|
+ case "normal":
|
|
|
+ tempRstArr.sort(function(a, b){
|
|
|
+ let compRst = 0;
|
|
|
+ for (let comp of sortCfg[JV.PROP_SORT_KEYS]) {
|
|
|
+ let reverse = (comp.order === 'ascend')?1:(-1);
|
|
|
+ if (a[comp.key] > b[comp.key]) {
|
|
|
+ compRst = reverse;
|
|
|
+ break;
|
|
|
+ } else if (a[comp.key] < b[comp.key]) {
|
|
|
+ compRst = -reverse;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return compRst;
|
|
|
+ });
|
|
|
+ delete sourceData.data;
|
|
|
+ sourceData.data = tempRstArr;
|
|
|
+ // fsUtil.wirteObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/normalSortedRst.js");
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ //
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+}
|
|
|
+
|
|
|
function setupFunc(obj, prop, ownRawObj) {
|
|
|
obj[prop] = {};
|
|
|
obj[prop]["myOwnRawDataObj"] = ownRawObj;
|
|
@@ -186,7 +367,7 @@ function ext_getPropety(propKey) {
|
|
|
let dtObj = parentObj["myOwnRawDataObj"];
|
|
|
if (propKey && dtObj) {
|
|
|
for (let dItem of dtObj.data) {
|
|
|
- let doc = dItem._doc;
|
|
|
+ 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)) {
|