zoukankan      html  css  js  c++  java
  • 使用mpxj读取MSPrjoect

    
    

     

    import java.util.ArrayList;

    import java.util.Calendar;

    import java.util.Hashtable;

    import java.util.List;

     

    import net.sf.mpxj.ProjectFile;

    import net.sf.mpxj.Relation;

    import net.sf.mpxj.Task;

     

    /**

     * MSProject工具类

     * @author suhf

     *

     */

    publicclass MPPUtil {

        static Hashtable<String,String> dependencyTypes = new Hashtable<String,String>();

       

        publicstaticvoid init(){

          dependencyTypes.put("FF", "3");

          dependencyTypes.put("FS", "2");

          dependencyTypes.put("SF", "1");

          dependencyTypes.put("SS", "0");

        }

     

       

         /**

          * MPPTask读数据到数据库的BdTask

          * @param task

          * @param parentId

          * @return

          */

        privatestatic  BdTask fetchTaskData(Task task, String parentId){

            BdTask gttTask =new BdTask();

            try{

            gttTask.setPriority(1);

             gttTask.setId(task.getUniqueID().toString());

             gttTask.setNumbers(task.getID());

            gttTask.setName(task.getName());

            Double doub = Double.parseDouble(task.getDuration().toString().replaceAll("(?!\.)[\D]", ""));

            gttTask.setDuration(doub.floatValue());

              gttTask.setDurationUnit(task.getDuration().getUnits().toString());

            Double effort = gttTask.getDuration()*8.0;

            gttTask.setEffort(effort.intValue());

            gttTask.setNote(task.getNotes());

            gttTask.setPercentDone((task.getPercentageComplete().doubleValue()));

            Calendar startDate = Calendar.getInstance();

            Calendar endDate = Calendar.getInstance();

            if(task.getMilestone()){//是里程碑

                gttTask.setMilestone("1");

                startDate.setTime(task.getStart());

                //startDate.add(Calendar.DAY_OF_MONTH, 1);

                endDate.setTime(task.getFinish());

                //endDate.add(Calendar.DAY_OF_MONTH, 1);

            }else{

                gttTask.setMilestone("0");

                startDate.setTime(task.getStart());

                startDate.set(Calendar.HOUR_OF_DAY, 8);

                startDate.set(Calendar.MINUTE, 30);

                startDate.set(Calendar.SECOND, 0);

                endDate.setTime(task.getFinish());

                endDate.set(Calendar.HOUR_OF_DAY, 18);

                endDate.set(Calendar.MINUTE, 0);

                endDate.set(Calendar.SECOND, 0);

                //endDate.add(Calendar.DAY_OF_MONTH, 1);

            }

             /*startDate.set(startDate.get(Calendar.YEAR),

                  startDate.get(Calendar.MONTH),

                  startDate.get(Calendar.DATE), 0, 0, 0);

            endDate.set(endDate.get(Calendar.YEAR),

                  endDate.get(Calendar.MONTH),

                  endDate.get(Calendar.DATE), 0, 0, 0);*/

            gttTask.setStartDate(DateFormatUtil.formatDateToString(startDate.getTime(), DateFormatUtil.V_LONG_DATE));

            gttTask.setEndDate(DateFormatUtil.formatDateToString(endDate.getTime(), DateFormatUtil.V_LONG_DATE));

               读取资源名称

            /*List<ResourceAssignment> l =  task.getResourceAssignments();

            for (ResourceAssignment ra : l) {

                Resource r = ra.getResource();

                if(r != null)

                System.out.println(r.getName()+"--"+task.getName());

            }*/

                gttTask.setParentId(task.getParentTask().getUniqueID().toString()) ;

               

            }catch(Exception e){

            e.printStackTrace();

               // System.exit(0);

            }

            return gttTask;

        }

       

        /**

         * 获取项目计划任务数据

         * @param projectFile MPP文件对象

         * @return

         * @throws Exception

         */

        publicstatic List<BdTask> getTaskData(ProjectFile projectFile) throws Exception{

            List<BdTask> list = new ArrayList<BdTask>();

            //这里有两层嵌套

            for(Task tempTask :projectFile.getChildTasks())

            {

            int idx = 0;

               for (Task task : tempTask.getChildTasks()) {

                //加入最上层任务节点, 第三个參数parentId=0

               BdTask gttTask = fetchTaskData(task,"");

               //设置节点在姊妹节点下的顺序

               gttTask.setIndexs(idx++);

               //加入到数据库中

               list.add(gttTask);

               //递归调用

                    listHierarchy(task, list, gttTask.getId());

                      

               }

            }

            return list;

        }

       

        privatestatic List<BdTask> listHierarchy(Task task,List<BdTask> list, String parentId){

          //节点的先后顺序

            int idx = 0;

            for (Task child : task.getChildTasks()) {

            BdTask gttTask = fetchTaskData(child,parentId);

            //设置任务的先后顺序

            gttTask.setIndexs(idx++);

            list.add(gttTask);

                listHierarchy(child, list , parentId);

            }

            return list;

        }

        /**

         * 获取项目计划任务关联数据

         * @param projectFile MPP文件对象

         * @return

         * @throws Exception

         */

        publicstatic List<BdDependency> getBdDependencyDate(ProjectFile projectFile){

          List<BdDependency> list = new ArrayList<BdDependency>();

          MPPUtil.init();//初始化MPP任务关联相应Gantt图的编号

            //节点之间的关系

            for (Task task : projectFile.getAllTasks()) {

                List<Relation> predecessors = task.getPredecessors();

                if (predecessors != null && predecessors.isEmpty() == false){

                    for (Relation relation : predecessors){

                        BdDependency dep = new BdDependency();

                        dep.setToId(relation.getSourceTask().getUniqueID().toString());

                        dep.setFromId(relation.getTargetTask().getUniqueID().toString());

                        dep.setType(getDependencyType(relation.getType().toString()));

                        list.add(dep);

                    }

                }

            }

            return list;

        }

     

        static String getDependencyType(String content){

            Object ret = dependencyTypes.get(content);

            return ret.toString();

        }

     

    }

  • 相关阅读:
    【题解】【BT】【Leetcode】Populating Next Right Pointers in Each Node
    【题解】【BT】【Leetcode】Binary Tree Level Order Traversal
    【题解】【BST】【Leetcode】Unique Binary Search Trees
    【题解】【矩阵】【回溯】【Leetcode】Rotate Image
    【题解】【排列组合】【素数】【Leetcode】Unique Paths
    【题解】【矩阵】【回溯】【Leetcode】Unique Paths II
    【题解】【BST】【Leetcode】Validate Binary Search Tree
    【题解】【BST】【Leetcode】Convert Sorted Array to Binary Search Tree
    第 10 章 判断用户是否登录
    第 8 章 动态管理资源结合自定义登录页面
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6917654.html
Copyright © 2011-2022 走看看