|
@@ -12,6 +12,14 @@ let treeUtil = require('../../../public/treeUtil');
|
|
let projectConst = consts.projectConst;
|
|
let projectConst = consts.projectConst;
|
|
let projectConstList = consts.projectConstList;
|
|
let projectConstList = consts.projectConstList;
|
|
|
|
|
|
|
|
+const GLJ_TYPE = {
|
|
|
|
+ Labour: 1,
|
|
|
|
+ Material: 2,
|
|
|
|
+ Machine: 3,
|
|
|
|
+ Main_Material: 4,
|
|
|
|
+ Equipment: 5
|
|
|
|
+}
|
|
|
|
+
|
|
class Rpt_Common{
|
|
class Rpt_Common{
|
|
initialize(rpt_tpl, currentDataObj) {
|
|
initialize(rpt_tpl, currentDataObj) {
|
|
this.template = rpt_tpl;
|
|
this.template = rpt_tpl;
|
|
@@ -152,7 +160,7 @@ class Rpt_Data_Extractor {
|
|
let srcData = getModuleDataByKey(rawDataObj.prjData, preHandle[JV.PROP_DATA_KEY]);
|
|
let srcData = getModuleDataByKey(rawDataObj.prjData, preHandle[JV.PROP_DATA_KEY]);
|
|
switch(preHandle[JV.PROP_HANDLE_TYPE]) {
|
|
switch(preHandle[JV.PROP_HANDLE_TYPE]) {
|
|
case JV.PROP_HANDLE_TYPE_SORT:
|
|
case JV.PROP_HANDLE_TYPE_SORT:
|
|
- sortData(srcData, preHandle);
|
|
|
|
|
|
+ sortData(srcData, preHandle, rawDataObj.prjData);
|
|
break;
|
|
break;
|
|
case JV.PROP_HANDLE_TYPE_FILTER:
|
|
case JV.PROP_HANDLE_TYPE_FILTER:
|
|
filterData(srcData, preHandle, rawDataObj.prjData);
|
|
filterData(srcData, preHandle, rawDataObj.prjData);
|
|
@@ -160,6 +168,12 @@ class Rpt_Data_Extractor {
|
|
case JV.PROP_HANDLE_TYPE_SUM:
|
|
case JV.PROP_HANDLE_TYPE_SUM:
|
|
summaryData(srcData, preHandle, rawDataObj.prjData);
|
|
summaryData(srcData, preHandle, rawDataObj.prjData);
|
|
break;
|
|
break;
|
|
|
|
+ case JV.PROP_HANDLE_TYPE_ADD_DUMMY:
|
|
|
|
+ addDummyData(srcData, preHandle);
|
|
|
|
+ break;
|
|
|
|
+ case JV.PROP_HANDLE_TYPE_ADJUST:
|
|
|
|
+ adjustData(srcData, preHandle);
|
|
|
|
+ break;
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -320,7 +334,133 @@ function filterData(sourceData, handleCfg, prjData) {
|
|
// fsUtil.wirteObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/filteredRst.js");
|
|
// fsUtil.wirteObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/filteredRst.js");
|
|
}
|
|
}
|
|
|
|
|
|
-function sortData(sourceData, sortCfg) {
|
|
|
|
|
|
+function adjustData(sourceData, adjustCfg) {
|
|
|
|
+ let rstArr = [];
|
|
|
|
+ for (let item of sourceData.data) {
|
|
|
|
+ if (item._doc) {
|
|
|
|
+ rstArr.push(item._doc);
|
|
|
|
+ } else {
|
|
|
|
+ rstArr.push(item);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ for (let item of adjustCfg[JV.PROP_ADJUST_COLLECTION]) {
|
|
|
|
+ for (let rec of rstArr) {
|
|
|
|
+ if (item[JV.PROP_ADJUST_ACTION] === "prefix") {
|
|
|
|
+ rec[item.key] = item[JV.PROP_ADJUST_ACTION_VAL] + rec[item.key];
|
|
|
|
+ } else if (item[JV.PROP_ADJUST_ACTION] === "suffix") {
|
|
|
|
+ rec[item.key] = rec[item.key] + item[JV.PROP_ADJUST_ACTION_VAL];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ delete sourceData.data;
|
|
|
|
+ sourceData.data = rstArr;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getDupGrpKeyVals(sourceData, segKeys) {
|
|
|
|
+ let rst = [];
|
|
|
|
+ function pushKeyVal(item) {
|
|
|
|
+ let tr = {};
|
|
|
|
+ for (let i = 0; i < segKeys.length; i++) {
|
|
|
|
+ tr[segKeys[i]] = item[segKeys[i]];
|
|
|
|
+ }
|
|
|
|
+ rst.push(tr);
|
|
|
|
+ }
|
|
|
|
+ for (let idx = 0; idx < sourceData.length; idx++) {
|
|
|
|
+ let itemRec = sourceData[idx];
|
|
|
|
+ if (idx === 0) {
|
|
|
|
+ pushKeyVal(itemRec);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ let hasDiff = false;
|
|
|
|
+ for (let i = 0; i < segKeys.length; i++) {
|
|
|
|
+ if (itemRec[segKeys[i]] !== sourceData[idx - 1][segKeys[i]]) {
|
|
|
|
+ hasDiff = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (hasDiff) {
|
|
|
|
+ pushKeyVal(itemRec);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return rst;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function addDummyData(sourceData, addCfg) {
|
|
|
|
+ let rstArr = [], tempRstArr = [];
|
|
|
|
+ for (let item of sourceData.data) {
|
|
|
|
+ if (item._doc) {
|
|
|
|
+ tempRstArr.push(item._doc);
|
|
|
|
+ } else {
|
|
|
|
+ tempRstArr.push(item);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ for (let item of addCfg[JV.PROP_DUMMY_COLLECTION]) {
|
|
|
|
+ let newRecStr = JSON.stringify(item[JV.PROP_DUMMY_VAL]), cacheGrpKeyRecs = null;
|
|
|
|
+ if (item[JV.PROP_FREQUENCY] === "OncePerGrp") {
|
|
|
|
+ if (!cacheGrpKeyRecs) {
|
|
|
|
+ cacheGrpKeyRecs = {};
|
|
|
|
+ }
|
|
|
|
+ let cacheKey = "";
|
|
|
|
+ for (let key of item[JV.PROP_GRP_KEYS]) {
|
|
|
|
+ cacheKey += "_" + key;
|
|
|
|
+ }
|
|
|
|
+ if (!cacheGrpKeyRecs[cacheKey]) {
|
|
|
|
+ cacheGrpKeyRecs[cacheKey] = getDupGrpKeyVals(tempRstArr, item[JV.PROP_GRP_KEYS]);
|
|
|
|
+ }
|
|
|
|
+ for (let kv of cacheGrpKeyRecs[cacheKey]) {
|
|
|
|
+ let rec = JSON.parse(newRecStr);
|
|
|
|
+ for (let key of item[JV.PROP_GRP_KEYS]) {
|
|
|
|
+ rec[key] = kv[key];
|
|
|
|
+ }
|
|
|
|
+ rstArr.push(rec);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else if (item[JV.PROP_FREQUENCY] === "Once") {
|
|
|
|
+ rstArr.push(JSON.parse(newRecStr));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ rstArr = rstArr.concat(tempRstArr);
|
|
|
|
+ delete sourceData.data;
|
|
|
|
+ sourceData.data = rstArr;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function getGLJBizType(orgType, orgCode, orgName) {
|
|
|
|
+ let rst = orgType;
|
|
|
|
+ if (orgName.indexOf("其他材料费") >= 0) {
|
|
|
|
+ rst = 299;
|
|
|
|
+ } else if (orgType === GLJ_TYPE.Labour) {
|
|
|
|
+ rst = 11;
|
|
|
|
+ if (orgCode === "000000") rst = 10;
|
|
|
|
+ } else if (orgType === GLJ_TYPE.Main_Material || orgType === GLJ_TYPE.Equipment) {
|
|
|
|
+ //未计价材料(主材 + 设备)
|
|
|
|
+ rst = 30 + orgType;
|
|
|
|
+ } else if (orgType === GLJ_TYPE.Material || (orgType >= 200 && orgType < 300)) {
|
|
|
|
+ //材料
|
|
|
|
+ if (orgCode === "000000") {
|
|
|
|
+ rst = 20; //2.材料
|
|
|
|
+ } else if (orgCode === "000000_1") {
|
|
|
|
+ rst = 30; //(1) 未计价材料
|
|
|
|
+ } else if (orgCode === "000000_2") {
|
|
|
|
+ rst = 40; //(2) 辅助材料
|
|
|
|
+ } else if (orgCode === "000000_3") {
|
|
|
|
+ rst = 50; //(3) 其他材料费
|
|
|
|
+ } else {
|
|
|
|
+ rst = 45; //到这里就只有辅助材料没有预处理了
|
|
|
|
+ }
|
|
|
|
+ } else if (orgType === GLJ_TYPE.Machine || (orgType >= 300 && orgType < 400)) {
|
|
|
|
+ //机械
|
|
|
|
+ if (orgCode === "000000") {
|
|
|
|
+ rst = 300; //3.机械
|
|
|
|
+ } else if (orgType === GLJ_TYPE.Machine) {
|
|
|
|
+ rst = 300.5;
|
|
|
|
+ } else {
|
|
|
|
+ rst = orgType;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return rst;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function sortData(sourceData, sortCfg, prjData) {
|
|
let rst = sourceData.data, tempRstArr = [];
|
|
let rst = sourceData.data, tempRstArr = [];
|
|
let sortType = sortCfg[JV.PROP_SORT_TYPE];
|
|
let sortType = sortCfg[JV.PROP_SORT_TYPE];
|
|
for (let item of sourceData.data) {
|
|
for (let item of sourceData.data) {
|
|
@@ -330,6 +470,56 @@ function sortData(sourceData, sortCfg) {
|
|
tempRstArr.push(item);
|
|
tempRstArr.push(item);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ function private_normal_sort(destArr, sortKeys) {
|
|
|
|
+ destArr.sort(function(a, b){
|
|
|
|
+ let compRst = 0;
|
|
|
|
+ for (let comp of sortKeys) {
|
|
|
|
+ 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;
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ function private_parent_sort(parentArr, parentKeys, childArr, childKeys) {
|
|
|
|
+ let tmpRst = {}, rst = [];
|
|
|
|
+ for (let pItem of parentArr) {
|
|
|
|
+ let pKey = "key";
|
|
|
|
+ for (let key of parentKeys) {
|
|
|
|
+ pKey += "_" + pItem[key];
|
|
|
|
+ }
|
|
|
|
+ tmpRst[pKey] = [];
|
|
|
|
+ }
|
|
|
|
+ for (let cItem of childArr) {
|
|
|
|
+ let cKey = "key";
|
|
|
|
+ for (let key of childKeys) {
|
|
|
|
+ cKey += "_" + cItem[key];
|
|
|
|
+ }
|
|
|
|
+ if (tmpRst[cKey]) {
|
|
|
|
+ tmpRst[cKey].push(cItem);
|
|
|
|
+ } else {
|
|
|
|
+ //unknown child value! should be filtered!
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // childArr.splice(0);
|
|
|
|
+ for (let pItem of parentArr) {
|
|
|
|
+ let pKey = "key";
|
|
|
|
+ for (let key of parentKeys) {
|
|
|
|
+ pKey += "_" + pItem[key];
|
|
|
|
+ }
|
|
|
|
+ rst.push(tmpRst[pKey]);
|
|
|
|
+ // for (let rItem of tmpRst[pKey]) {
|
|
|
|
+ // childArr.push(rItem);
|
|
|
|
+ // }
|
|
|
|
+ }
|
|
|
|
+ return rst;
|
|
|
|
+ }
|
|
switch (sortType) {
|
|
switch (sortType) {
|
|
case "tree":
|
|
case "tree":
|
|
rst = treeUtil.buildTreeNodeDirectly(tempRstArr);
|
|
rst = treeUtil.buildTreeNodeDirectly(tempRstArr);
|
|
@@ -340,23 +530,59 @@ function sortData(sourceData, sortCfg) {
|
|
// fsUtil.wirteObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/sortedAndFlattedRst.js");
|
|
// fsUtil.wirteObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/sortedAndFlattedRst.js");
|
|
break;
|
|
break;
|
|
case "normal":
|
|
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;
|
|
|
|
|
|
+ private_normal_sort(tempRstArr, sortCfg[JV.PROP_SORT_KEYS]);
|
|
|
|
+ delete sourceData.data;
|
|
|
|
+ sourceData.data = tempRstArr;
|
|
|
|
+ // fsUtil.wirteObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/normalSortedRst.js");
|
|
|
|
+ break;
|
|
|
|
+ case "accord_to_parent":
|
|
|
|
+ let pcKey = sortCfg[JV.PROP_PARENT_CHILD_SORT_KEY];
|
|
|
|
+ let parentSrcData = getModuleDataByKey(prjData, pcKey[JV.PROP_PARENT_DATA_KEY]);
|
|
|
|
+ if (parentSrcData) {
|
|
|
|
+ let tempParentArr = [];
|
|
|
|
+ for (let item of parentSrcData.data) {
|
|
|
|
+ if (item._doc) {
|
|
|
|
+ tempParentArr.push(item._doc);
|
|
|
|
+ } else {
|
|
|
|
+ tempParentArr.push(item);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return compRst;
|
|
|
|
- });
|
|
|
|
|
|
+ let sortedRstArr = private_parent_sort(tempParentArr, pcKey[JV.PROP_PARENT_SORT_KEYS], tempRstArr, pcKey[JV.PROP_CHILD_SORT_KEYS]);
|
|
|
|
+ if (sortCfg[JV.PROP_OTHER_SUB_SORT] && sortCfg[JV.PROP_OTHER_SUB_SORT].length > 0) {
|
|
|
|
+ for (let sort of sortCfg[JV.PROP_OTHER_SUB_SORT]) {
|
|
|
|
+ if (sort[JV.PROP_SORT_TYPE] === 'normal') {
|
|
|
|
+ for (let subArr of sortedRstArr) {
|
|
|
|
+ private_normal_sort(subArr, sort[JV.PROP_SORT_KEYS]);
|
|
|
|
+ }
|
|
|
|
+ } else if (sort[JV.PROP_SORT_TYPE] === 'self_define') {
|
|
|
|
+ for (let subArr of sortedRstArr) {
|
|
|
|
+ console.log(subArr);
|
|
|
|
+ let selfDefFunc = null;
|
|
|
|
+ eval('selfDefFunc = ' + sort[JV.PROP_SORT_TYPE_SELF_DEFINE_LOGIC]);
|
|
|
|
+ subArr.sort(selfDefFunc);
|
|
|
|
+ console.log(subArr);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ tempRstArr.splice(0);
|
|
|
|
+ for (let item of sortedRstArr) {
|
|
|
|
+ for (let subItem of item) {
|
|
|
|
+ tempRstArr.push(subItem);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ delete sourceData.data;
|
|
|
|
+ sourceData.data = tempRstArr;
|
|
|
|
+ break;
|
|
|
|
+ case "self_define":
|
|
|
|
+ if (sortCfg[JV.PROP_SORT_TYPE_SELF_DEFINE_LOGIC]) {
|
|
|
|
+ let selfDefFunc = null;
|
|
|
|
+ eval('selfDefFunc = ' + sortCfg[JV.PROP_SORT_TYPE_SELF_DEFINE_LOGIC]);
|
|
|
|
+ tempRstArr.sort(selfDefFunc);
|
|
|
|
+ }
|
|
delete sourceData.data;
|
|
delete sourceData.data;
|
|
sourceData.data = tempRstArr;
|
|
sourceData.data = tempRstArr;
|
|
- // fsUtil.wirteObjToFile(sourceData.data, "D:/GitHome/ConstructionCost/tmp/normalSortedRst.js");
|
|
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
//
|
|
//
|
|
@@ -583,7 +809,7 @@ function ext_getArrayItemByKey(arrayKey, itemKey, itemKeyValue, itemRstKey){
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-function ext_getPropertyByForeignId(foreignIdVal, adHocIdKey, propKey) {
|
|
|
|
|
|
+function ext_getPropertyByForeignId(foreignIdVal, adHocIdKey, propKey, dftValIfNotFound) {
|
|
let rst = [], parentObj = this;
|
|
let rst = [], parentObj = this;
|
|
let IdKey = (adHocIdKey)?adHocIdKey:"ID";
|
|
let IdKey = (adHocIdKey)?adHocIdKey:"ID";
|
|
let dtObj = parentObj["myOwnRawDataObj"];
|
|
let dtObj = parentObj["myOwnRawDataObj"];
|
|
@@ -618,7 +844,9 @@ function ext_getPropertyByForeignId(foreignIdVal, adHocIdKey, propKey) {
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- // if (!isFound) rst.push[null];
|
|
|
|
|
|
+ if (!isFound) {
|
|
|
|
+ rst.push(dftValIfNotFound);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
for (let item of dtObj.data) {
|
|
for (let item of dtObj.data) {
|
|
@@ -628,7 +856,9 @@ function ext_getPropertyByForeignId(foreignIdVal, adHocIdKey, propKey) {
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- // if (!isFound) rst.push[null];
|
|
|
|
|
|
+ if (!isFound) {
|
|
|
|
+ rst.push(dftValIfNotFound);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return rst;
|
|
return rst;
|