| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 | /** * Created by Tony on 2017/7/14. * 报表数据提取class,是协助报表模板里指标字段自主提取数据的工具类 */let JV = require('../rpt_component/jpc_value_define');let $JE = require('../rpt_component/jpc_rte');let consts = require('../../../modules/main/models/project_consts');let projectConst = consts.projectConst;let projectConstList = consts.projectConstList;class Rpt_Common{    initialize(Projects) {        this.Projects = Projects;    };    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;        }    };}class Rpt_Data_Extractor {    constructor () {        this.COMMON = new Rpt_Common();    };    initialize(tpl) {        this.rptTpl = tpl;    };    getDataRequestFilter() {        let rst = [];        let tpl = this.rptTpl;        let pri_func_chk_filter = function (field) {            for (let key of projectConstList) {                if (rst.indexOf(key) < 0) {                    if (field[JV.PROP_FIELD_EXP_MAP]) {                        if (field[JV.PROP_FIELD_EXP_MAP].indexOf('.' + key + '.') >= 0) {                            rst.push(key);                        }                    }                }            }        };        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);            }        }        return rst;    };    //--- 装配数据(把收集到的数据,依据报表模板的指示,预处理(如:排序、过滤、合计)及装配到相关指标) ---//    assembleData(rawDataObj) {        let $PROJECT = {"COMMON": {}, "MAIN": {}, "DETAIL": {}};        let tpl = this.rptTpl;        $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]) {                switch(preHandle[JV.PROP_HANDLE_TYPE]) {                    case JV.PROP_HANDLE_TYPE_SORT:                        break;                    case JV.PROP_HANDLE_TYPE_FILTER:                        break;                    case JV.PROP_HANDLE_TYPE_SUM:                        //                }            }        }        for (let item of rawDataObj.prjData) {            setupFunc($PROJECT.DETAIL, item.moduleName, item);        }        let rptDataObj = {};        rptDataObj[JV.DATA_DISCRETE_DATA] = [];        rptDataObj[JV.DATA_MASTER_DATA] = [];        rptDataObj[JV.DATA_DETAIL_DATA] = [];        rptDataObj[JV.DATA_MASTER_DATA_EX] = [];        rptDataObj[JV.DATA_DETAIL_DATA_EX] = [];        assembleFields(tpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS], rptDataObj[JV.DATA_DISCRETE_DATA], $PROJECT);        // console.log(JV.DATA_DISCRETE_DATA);        // console.log(rptDataObj[JV.DATA_DISCRETE_DATA]);        assembleFields(tpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS], rptDataObj[JV.DATA_MASTER_DATA], $PROJECT);        // console.log(JV.DATA_MASTER_DATA);        // console.log(rptDataObj[JV.DATA_MASTER_DATA]);        assembleFields(tpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS], rptDataObj[JV.DATA_DETAIL_DATA], $PROJECT);        // console.log(JV.DATA_DETAIL_DATA);        // console.log(rptDataObj[JV.DATA_DETAIL_DATA]);        assembleFields(tpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS_EX], rptDataObj[JV.DATA_MASTER_DATA_EX], $PROJECT);        // 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]);    };}function setupFunc(obj, prop, ownRawObj) {    obj[prop] = {};    obj[prop]["myOwnRawDataObj"] = ownRawObj;    obj[prop].getProperty = ext_getPropety;    obj[prop].getFee = ext_getFee;}function assembleFields(fieldList, rstDataArr, $PROJECT) {    if (fieldList) {        for (let field of fieldList) {            shielded_exec_env($PROJECT, field, rstDataArr);        }    }}function shielded_exec_env($PROJECT, $ME, rptDataItemObj) {    if ($ME[JV.PROP_FIELD_EXP_MAP]) {        rptDataItemObj.push(eval($ME[JV.PROP_FIELD_EXP_MAP]));    }}function ext_mainGetPropety(propKey) {    let rst = [];    let parentObj = this;    //console.log(this);    let dtObj = parentObj["myOwnRawDataObj"];    if ((dtObj) && (propKey)) {        if (dtObj.hasOwnProperty("property")) {            rst.push(dtObj["property"][propKey]);        } else  {            rst.push(dtObj[propKey]);        }    }    return rst;}function ext_mainGetFee(feeKey) {    let rst = [];    let parentObj = this;    let dtObj = parentObj["myOwnRawDataObj"];    if ((dtObj) && (feeKey)) {        if (dtObj.hasOwnProperty("fees")) {            for (let fee of dtObj["fees"]) {                if (fee["fieldName"] === feeKey) {                    rst.push(dtObj["fees"][feeKey]);                    break;                }            }        } else if (dtObj.hasOwnProperty(feeKey)) {            rst.push(dtObj[feeKey]);        } else {            //        }    }    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;            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) {    let rst = [], parentObj = this;    let dtObj = parentObj["myOwnRawDataObj"];    if (feeKey && dtObj) {        for (let dItem of dtObj.data) {            if (dItem.hasOwnProperty("fees")) {                for (let fee of dItem["fees"]) {                    if (fee["fieldName"] === feeKey) {                        rst.push(dItem["fees"][feeKey]);                        break;                    }                }            } else if (dItem.hasOwnProperty(feeKey)) {                rst.push(dItem[feeKey]);            } else {                rst.push[0];            }        }    }    return rst;}function ext_getRationPropertyByID(IdVal, propKey) {    let rst = [], me = this;    if (IdVal !== null && IdVal !== undefined && me[projectConst.RATION]) {        let isFound = false;        if (IdVal instanceof Array) {            for (let id of IdVal) {                isFound = false;                for (let item of me[projectConst.RATION]["myOwnRawDataObj"].data) {                    if (item.ID === id) {                        rst.push(item[propKey]);                        isFound = true;                        break;                    }                }                // if (!isFound) rst.push[null];            }        } else {            for (let item of me[projectConst.RATION]["myOwnRawDataObj"].data) {                if (item.ID === IdVal) {                    rst.push(item[propKey]);                    isFound = true;                    break;                }            }            // if (!isFound) rst.push[null];        }    }    return rst;}export default Rpt_Data_Extractor;
 |