zoukankan      html  css  js  c++  java
  • 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;
    }

     

  • 相关阅读:
    二分查找
    Java版各种排序算法 (冒泡,快速,选择,插入)
    mysql如何利用Navicat 导出和导入数据库
    eclipse项目红色叹号解决方法
    解决tomcat占用8080端口问题
    Window.onLoad 和 DOMContentLoaded事件的先后顺序
    jquery $(document).ready() 与window.onload的区别
    jQuery文档加载完毕的几种写法
    Emmet使用手册
    Sublime Text 3快捷键
  • 原文地址:https://www.cnblogs.com/baby123/p/8776909.html
Copyright © 2011-2022 走看看