一次优化经历

本来需求是:对所有勾选的项目,要找到这个项目所有的关联的项目,然后都要做统一的操作。

之前我一直是遍历这些项目,一个一个找关联项目。这样就需要访问很多此数据库,性能特别低。

后面改进成:汇总所有的勾选项目,在数据库中一次性寻找,并汇总到一个Array中

 

function findRelatedProjectId(queryString) {
    //queryString 形式'111','222','333','444',...,'nnn'
    //这个function是为了找到传入的projectId相关联的拆分项目id的
    //如果传入的是source_project_id, 那么返回的就是source_project_id + separate_project_id
    //如果传入的是separate_project_id, 那么返回的也是source_project_id + separate_project_id
    //如果没有相关联的id那就返回本身
    var returnString = queryString + ",";
    
    //把这个id当成拆分前的,找拆分后的
    var checkSeperateList = DocumentUtils.excuteQueryForList("SELECT SEPARATE_PROJECT_ID FROM TABLE a WHERE SOURCE_PROJECT_ID in (" + queryString + ")");
    if (checkSeperateList != null && checkSeperateList.size() > 0) {
        //看看作为总的项目有没有拆分项目    
        for(var it=checkSeperateList.iterator(); it.hasNext();) {
            var dataMap = it.next();
            returnString = returnString + "'" + dataMap.get("SEPARATE_PROJECT_ID") + "',";    
        }
    } 
    //看是不是拆分后的
    var checkSourceList = DocumentUtils.excuteQueryForList("SELECT SOURCE_PROJECT_ID FROM TABLE a WHERE SEPARATE_PROJECT_ID in (" + queryString + ")");
    if (checkSourceList != null && checkSourceList.size() > 0) {
        var sourceProjectIds = "";
        for(var it=checkSourceList.iterator(); it.hasNext();) {
            var dataMap2 = it.next();
            returnString = returnString + "'" + dataMap2.get("SOURCE_PROJECT_ID") + "',";    
            sourceProjectIds = sourceProjectIds + "'" + dataMap2.get("SOURCE_PROJECT_ID") + "',";
        }    
        //需要寻找兄弟项目
        sourceProjectIds = sourceProjectIds.substr(0, sourceProjectIds.length - 1); 
    
        DocumentUtils.println("sourceProjectIds总项目id格式:" + sourceProjectIds);
        var tempList = DocumentUtils.excuteQueryForList("SELECT SEPARATE_PROJECT_ID FROM TABLE a WHERE SOURCE_PROJECT_ID in (" + sourceProjectIds + ") and SEPARATE_PROJECT_ID not in (" + queryString + ")");
        if (tempList != null && tempList.size() > 0) {
            for(var it=tempList.iterator(); it.hasNext();) {
                var dataMap3 = it.next();
                returnString = returnString + "'" + dataMap3.get("SEPARATE_PROJECT_ID") + "',";    
            }
        }
    } 
    //sourceProjectIds = sourceProjectIds.substr(0, sourceProjectIds.length - 1); 
    DocumentUtils.println("最后打印一下这些收集的项目:" + returnString);
    returnString = returnString.replace(/'/g,"");
    DocumentUtils.println("返回的是replace的字符串:" + returnString);
    returnString = returnString.substr(0, returnString.length - 1); 
    return returnString;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值