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;
}

 

 

posted @ 2018-04-10 10:17  慕尘  阅读(660)  评论(0编辑  收藏  举报