timelimitcontrol.java

来自「公司自己开发的工作流引擎」· Java 代码 · 共 394 行 · 第 1/2 页

JAVA
394
字号

    WfActInstanceExt actiInstanceExt=new WfActInstanceExt();
    actiInstanceExt.setActInstanceId(actiInstanceId);
    //设置最长时间(办理时限)
    actiInstanceExt.setActMaxTime(maxTime);
    //设置办理时限超时时间
    actiInstanceExt.setActMaxTimeOut(maxTimeOut);
    //设置期望时间(提醒时限)
    actiInstanceExt.setActWarningTime(warningTime);
    //设置提醒时间超时时间
    actiInstanceExt.setActWarningTimeOut(warningTimeOut);
    //设置时限单位
    actiInstanceExt.setActTimeUnitType(timeUnitType);
    //设置已用时间
    actiInstanceExt.setActPassTime(passTime);

    WfActInstanceExtDAO extDAO=new WfActInstanceExtDAO();
    //判断是否已经插入记录
    if(extDAO.getWfActInstanceExt(actiInstanceId)!=null){
      //更新
      extDAO.updateActInstanceExt(actiInstanceExt);
    }
    else{
      //插入
      extDAO.insertActInstanceExt(actiInstanceExt);
    }
  }

  /**
   * 插入活动实例的办理时限信息
   * @param procInstanceId 活动实例id
   */
  public void insertActivityInstanceTimeLimitInfo(long actiInstanceId)
      throws Exception{
    ProcessWorkflowDAO procWfDAO=new ProcessWorkflowDAO();
    //取得活动实例信息
    WfActiInstance actiInstance=procWfDAO.getWfActiInstanceInfo(actiInstanceId);
    if(actiInstance!=null){
      TimeUtil timeUtil=new TimeUtil();
      WfActInstanceExt actInstanceExt=new WfActInstanceExt();
      actInstanceExt.setActInstanceId(actiInstanceId);
      //设置最长时间(办理时限)
      if(actiInstance.getAtdMaxTime()!=0){
        actInstanceExt.setActMaxTime(ConvertWorkitemDatetime.getLocalWorkDatetime(actiInstance.getAtdMaxTime()));
        //设置办理时限超时时间,流程设置中的最长时间(办理时限)默认时间单位为"工作日"
        actInstanceExt.setActMaxTimeOut(timeUtil.getWorkdayAnticipateDate(
            actiInstance.getAtiStartTime(),actiInstance.getAtdMaxTime()));
      }
      //设置期望时间(提醒时限)
      if(actiInstance.getAtdEstimateTime()!=0){
        actInstanceExt.setActWarningTime(ConvertWorkitemDatetime.getLocalWorkDatetime(actiInstance.getAtdEstimateTime()));
        //设置提醒时间超时时间,活动设置中的期望时间(提醒时限)默认时间单位为"工作日"
        actInstanceExt.setActWarningTimeOut(timeUtil.getWorkdayAnticipateDate(
            actiInstance.getAtiStartTime(),actiInstance.getAtdEstimateTime()));
      }
      //设置时限单位
      actInstanceExt.setActTimeUnitType(WorkflowConstant.TIMEUNIT_TYPE_WORKDAY);
      actInstanceExt.setActPassTime(0);

      //插入信息
      WfActInstanceExtDAO extDAO=new WfActInstanceExtDAO();
      System.out.println("-------debug3");
      extDAO.insertActInstanceExt(actInstanceExt);
      System.out.println("-------debug5");
    }
  }

  /**
   * 更新流程实例完成时的已用时间
   * @param workitemId long
   */
  public void updateProcessInstancePassTime(long procInstanceId)
      throws Exception{
    long startTime=System.currentTimeMillis();
    ProcessWorkflowDAO procWfDAO=new ProcessWorkflowDAO();
    //取得流程实例信息
    WfProcInstance procInstance=procWfDAO.getWfProcInstanceInfo(procInstanceId);
    WfProcInstanceExtDAO extDAO=new WfProcInstanceExtDAO();
    WfProcInstanceExt procInstanceExt=extDAO.getWfProcInstanceExt(
        procInstanceId);
    if(procInstanceExt!=null){
      TimeUtil timeUtil=new TimeUtil();
      long passTime=0;
      //工作日
      if(WorkflowConstant.TIMEUNIT_TYPE_WORKDAY.equals(procInstanceExt.
          getProcTimeUnitType())){
        passTime=timeUtil.getWorkdayPassTime(procInstance.getPriStartTime(),
            procInstance.getPriEndTime());
      }
      //自然日
      else if(WorkflowConstant.TIMEUNIT_TYPE_NATUREDAY.equals(procInstanceExt.
          getProcTimeUnitType())){
        passTime=timeUtil.getNaturedayPassTime(procInstance.getPriStartTime(),
            procInstance.getPriEndTime());
      }
      procInstanceExt.setProcPassTime(passTime);
      extDAO.updateProceInstanceExt(procInstanceExt);
    }
    logger.info("Execution updateProcessInstancePassTime time: "+(System.currentTimeMillis()-
        startTime)+" ms.");
  }

  /**
   * 更新活动实例完成时的已用时间
   * @param workitemId long
   */
  public void updateActivityInstancePassTime(long actiInstanceId)
      throws Exception{
    long startTime=System.currentTimeMillis();
    ProcessWorkflowDAO procWfDAO=new ProcessWorkflowDAO();
    //取得活动实例信息
    WfActiInstance actiInstance=procWfDAO.getWfActiInstanceInfo(actiInstanceId);
    WfActInstanceExtDAO extDAO=new WfActInstanceExtDAO();
    WfActInstanceExt actInstanceExt=extDAO.getWfActInstanceExt(actiInstanceId);
    if(actInstanceExt!=null){
      TimeUtil timeUtil=new TimeUtil();
      long passTime=0;
      //工作日
      if(WorkflowConstant.TIMEUNIT_TYPE_WORKDAY.equals(actInstanceExt.
          getActTimeUnitType())){
        passTime=timeUtil.getWorkdayPassTime(actiInstance.getAtiStartTime(),
            actiInstance.getAtiEndTime());
      }
      //自然日
      else if(WorkflowConstant.TIMEUNIT_TYPE_NATUREDAY.equals(actInstanceExt.
          getActTimeUnitType())){
        passTime=timeUtil.getNaturedayPassTime(actiInstance.getAtiStartTime(),
            actiInstance.getAtiEndTime());
      }
      actInstanceExt.setActPassTime(passTime);
      extDAO.updateActInstanceExt(actInstanceExt);
    }
    logger.info("Execution updateActivityInstancePassTime time: "+(System.currentTimeMillis()-
        startTime)+" ms.");
  }

  /**
   * 插入活动实例办理期限信息
   * @param relList 工作项关联列表,由WfWorkItemRel组成
   * @param actParticipator 已选活动设置信息
   */
  public void insertTimeLimitInfo(List relList,List actParticipator)
      throws Exception{
    long startTime=System.currentTimeMillis();
    if(relList!=null&&relList.size()>0){
      HashMap map=new HashMap();
      ProcessWorkflowDAO procWfDAO=new ProcessWorkflowDAO();
      for(int i=0;i<relList.size();i++){
        WfWorkItemRel rel=(WfWorkItemRel)relList.get(i);
        WfActiInstance actiInstance=procWfDAO.getWfActiInstanceInfoByWorkitemId(
            rel.getToItemId());
        //取得活动实例对应的活动设置信息
        Activity act=getActivityInfo(actParticipator,actiInstance.getAtdId());
        map.put(Long.toString(actiInstance.getAtiId()),act);
      }

      Set entry=map.entrySet();
      Iterator it=entry.iterator();
      while(it.hasNext()){
        Entry me=(Entry)it.next();
        //有活动实例对应的活动设置信息
        if (map.get(me.getKey())!=null){
          Activity activity=(Activity)map.get(me.getKey());
          //插入办理实现信息
          this.updateActivityInstanceTimeLimitInfo(Long.parseLong((String)me.getKey()),activity.getMaxTime(),activity.getTimeUnitType());;
        }
        //没有活动实例对应的活动设置信息,则插入默认的办理时限信息
        else{
          this.insertActivityInstanceTimeLimitInfo(Long.parseLong((String)me.getKey()));
        }
      }
    }
    logger.info("Execution insertTimeLimitInfo time: "+(System.currentTimeMillis()-
        startTime)+" ms.");
  }

  /**
   * 通过Activity列表取得指定活动定义ID的Activity
   * @param actParticipator List
   * @return Activity
   */
  private Activity getActivityInfo(List actParticipator,long atdId){
    Activity act=null;
    if(actParticipator!=null&&actParticipator.size()>0){
      for(int i=0;i<actParticipator.size();i++){
        Activity actTemp=(Activity)actParticipator.get(i);
        if(actTemp.getActId()==atdId){
          act=actTemp;
          break;
        }
      }
    }
    return act;
  }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?