获取层级的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; }