• php解析mpp文件中的资源


    获取层级的project任务  参考

    启动javabridge

    java -jar JavaBridge.jar SERVLET_LOCAL:8089

    1.读取mpp文件

        $file_path = "/new.mpp";
        $file_path = getcwd() . $file_path;
        if (!file_exists($file_path)) {
            var_dump("文件不存在");
            return;
        }
        $mppRead = new Java('net.sf.mpxj.mpp.MPPReader');
        try {
            $Filecontent = $mppRead->read($file_path);
        } catch (Exception $e) {
            var_dump($e);
            return;
        }

    2.解析资源工作表

    调用

    $tmp = getAllResource($Filecontent);

    获取project资源

    function getAllResource($project)
    {
        $formatter = new Java('java.text.SimpleDateFormat', "yyyy-MM-dd HH:mm:ss");
        $resource  = $project->getAllResources();
        $size      = java_values($resource->size());
        $buf       = array();
        if ($size > 0) {
            for ($i = 0; $i < $size; $i++) {
                $tmp = $resource[$i];
                if (!(java_is_null($tmp))) {
                    //获取ID字段值
                    $items['getID'] = $tmp->getID() . '';
                    $id             = intval($tmp->getID() . '');
                    //获取资源名称字段值
                    $items['name'] = $tmp->getName() . '';
                    $items['uid']  = $tmp->getUniqueID() . '';
                    $start         = $tmp->getStart();
                    if (!(java_is_null($start))) {
                        $items['start'] = $formatter->format($start) . '';
                    }
                    $finish = $tmp->getFinish();
                    if (!(java_is_null($finish))) {
                        $items['finish'] = $formatter->format($finish) . '';
                    }
                    //获取名称字段值的缩写
                    $items['initials'] = $tmp->getInitials() . '';
                    //类型 Material材料,Work工时,Cost成本
                    $items['type'] = $tmp->getType() . '';
                    //工作字段值
                    $items['work'] = $tmp->getWork() . '';
                    //检索成本字段值
                    $items['cost'] = $tmp->getCost() . '';
                    //检索每次使用的成本
                    $items['costPerUse'] = $tmp->getCostPerUse() . '';
                    //检索基准成本值
                    $items['BaselineCost'] = $tmp->getBaselineCost() . '';
                    //自定义文本
                    $items['Text']  = $tmp->getText(1) . '';
                    $items['Text1'] = $tmp->getText(2) . '';
                    $items['Text2'] = $tmp->getText(3) . '';
                    //检索材料资源的单位标签
                    $items['materialLabel'] = $tmp->getMaterialLabel() . '';
                    //检索过度分配的标志
                    $items['overAllocated'] = $tmp->getOverAllocated() . '';
                    //检索资源的最大可用性
                    $items['maxUnits'] = $tmp->getMaxUnits() . '';
                    //获取标准费率字段值
                    $items['standardRate'] = $tmp->getStandardRate() . '';
                    //检索标准费率的格式
                    $items['standardRateUnits'] = $tmp->getStandardRateUnits() . '';
                    //检索加班费用字段的值
                    $items['overtimeCost'] = $tmp->getOvertimeCost() . '';
                    //检索此资源的加班费率
                    $items['overtimeRate'] = $tmp->getOvertimeRate() . '';
                    //检索加班费率的格式
                    $items['overtimeRateUnits'] = $tmp->getOvertimeRateUnits() . '';
                    //检索加班工作量
                    $items['overtimeWork'] = $tmp->getOvertimeWork() . '';
                    //成本累算选项包括:开始START,结束END和按比例分配PRORATED
                    $items['accrueAt'] = $tmp->getAccrueAt() . '';
                    // 从日期起可用
                    $items['availableFrom'] = $tmp->getAvailableFrom() . '';
                    //到日期为止
                    $items['availableTo'] = $tmp->getAvailableTo() . '';
                    //创建日期
                    $creationDate = $tmp->getCreationDate();
                    if (!(java_is_null($creationDate))) {
                        $items['creationDate'] = $formatter->format($creationDate) . '';
                    }
                    $items['outlineCode1'] = $tmp->getOutlineCode1() . '';
                    //检索与此资源关联的日历
                    //$items['resourceCalendar'] = $tmp->getResourceCalendar().'';
                    //检索资源的Windows帐户名称
                    $items['ntAccount'] = $tmp->getNtAccount() . '';
                    //检索此资源的注释文本
                    $items['notes'] = $tmp->getNotes() . '';
                    if ($items['name']) {
                        $buf[] = $items;
                    }
                }
            }
        }
        return $buf;
    }

    3.各级任务的资源分配

    获取project的任务

    $allTasks   = $Filecontent->getChildTasks();
    $tasks_size = java_values($allTasks->size());
    if($tasks_size){
        getChildren($allTasks[0]);
    }

    说明:

      $Filecontent->getChildTasks()获取的是文件,即$allTasks[0]为project文件,再向下是任务

    获取多级任务的基本信息及获取分配资源

    function getChildren($task)
    {
        $child      = $task->getChildTasks();
        $tasks_size = java_values($child->size());
        $data       = array();
        for ($i = 0; $i < $tasks_size; $i++) {
            $tmp                      = getResource($child[$i]);
            $items                    = array();
            $items['id']              = $child[$i]->getID() . '';
            $items['uniqueID']        = $child[$i]->getUniqueID() . '';
            $items['name']            = $child[$i]->getName() . '';
            //获取资源
            $tmp            = getResource($child[$i]);
            if ($tmp) {
                $items['resource'] = $tmp;
            }
            //获取下一级任务
            $children = getChildren($child[$i]);
            if ($children) {
                $items['children'] = $children;
            }
            $data[] = $items;
        }
        return $data;
    }

    获取任务分配的资源信息的详细实现

    function getResource($task)
    {
        $resource  = $task->getResourceAssignments();
        $size      = java_values($resource->size());
        $buf       = array();
        if ($size > 0) {
            for ($i = 0; $i < $size; $i++) {
                $tmp = $resource[$i]->getResource();
                if (!(java_is_null($tmp))) {
                    $items['name'] = $tmp->getName() . '';
                    $items['Units'] = $resource[$i]->getUnits() . '';
                    $items['Cost']  = $resource[$i]->getCost() . '';
                    if ($items['name']) {
                        $buf[] = $items;
                    }
                }
            }
        }
        return $buf;
    }

     

  • 相关阅读:
    matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
    Coursera 机器学习 第9章(下) Recommender Systems 学习笔记
    机器学习基石笔记1——在何时可以使用机器学习(1)
    Coursera 机器学习 第9章(上) Anomaly Detection 学习笔记
    matlab安装过程的被要求的配置程序
    jdk环境变量配置
    Coursera 机器学习 第8章(下) Dimensionality Reduction 学习笔记
    Coursera 机器学习 第8章(上) Unsupervised Learning 学习笔记
    Coursera 机器学习 第7章 Support Vector Machines 学习笔记
    linux服务器---squid限制
  • 原文地址:https://www.cnblogs.com/baby123/p/8776909.html
Copyright © 2020-2023  润新知