parserquestparameter.java

来自「公司自己开发的工作流引擎」· Java 代码 · 共 396 行

JAVA
396
字号
package cn.com.iaspec.workflow.helper;

import java.sql.*;
import java.text.*;
import java.util.*;
import java.util.Date;
import javax.servlet.http.*;
import org.apache.log4j.*;
import cn.com.iaspec.workflow.util.*;
import cn.com.iaspec.workflow.vo.workflow.*;
import cn.com.iaspec.workflow.exception.WorkItemEmptyException;
import cn.com.iaspec.workflow.WorkflowConstant;

/**
 *
 * <p>Title:解析请求中的参数 </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: IASPEC Technologies</p>
 * @author xiesonglin
 * @version 1.0
 */
public class ParseRquestParameter{
  private static Logger logger=Logger.getLogger(ParseRquestParameter.class);
  public ParseRquestParameter(){

  }

  public ActivityVariable[] getActivityVariable(HttpServletRequest request)
      throws Exception{
    return getActivityVariable(request,null);
  }

  /**
   * 从request或者varParamDataMap中取得变量值
   * @param request HttpServletRequest
   * @param varParamDataMap HashMap
   * @return ActivityVariable[]
   * @throws Exception
   */
  public ActivityVariable[] getActivityVariable(HttpServletRequest request,
      HashMap varParamDataMap)
      throws Exception{
    WorkflowHelper helper=new WorkflowHelper();
    String itemId=request.getParameter("wf_workitem_id");
    HttpSession session=request.getSession(false);
    UserInfo userInfo=(UserInfo)session.getAttribute(FlowWebKeys.USER_SESSION);
    if(itemId==null||itemId.equals("")){
      //throw new WorkItemEmptyException("工作项id为空");//暂时,以后修改
      logger.info("工作项id为空。");
      return null;
    }
    ActivityVariable[] actVar=helper.getWorkItemAllVariableValue(Integer.
        parseInt(itemId),userInfo);
    ActivityVariable[] returnActVar=new ActivityVariable[actVar.length];
    //遍历处理数据(数组和对象不作处理)
    for(int i=0;i<actVar.length;i++){
      ActivityVariable tempActVar=new ActivityVariable();
      returnActVar[i]=tempActVar;
      returnActVar[i].attributeType=actVar[i].getAttributeType();
      returnActVar[i].setAttributeName(actVar[i].getAttributeName());
      String varValue=request.getParameter(actVar[i].getAttributeName());
      if(varParamDataMap!=null&&
          varParamDataMap.containsKey(actVar[i].getAttributeName())){
        varValue=(String)(varParamDataMap.get(actVar[i].getAttributeName())==null?
            "":varParamDataMap.get(actVar[i].getAttributeName()));
        logger.info("varName is:"+actVar[i].getAttributeName()+" varValue is:"+
            varValue);
      }
      int type=actVar[i].getAttributeType();
      returnActVar[i]=getActivityVariable(returnActVar[i],varValue,type);
    }
    return returnActVar;
  }

  /**
   * 将指定的类型的变量值赋值给指定的ActivityVariable变量
   * @param varAct ActivityVariable
   * @param varValue String
   * @param type int
   * @return ActivityVariable
   * @throws Exception
   */
  private ActivityVariable getActivityVariable(ActivityVariable varAct,
      String varValue,int type)
      throws Exception{
    if(varValue==null){
      return varAct;
    }
    //整形类型
    if(type==1){
      if(varValue.trim().equals("")){
        return varAct;
      }
      int intValue=Integer.parseInt(varValue);
      varAct.setIntValue(intValue);
    }
    //布尔类型
    else if(type==2){
      boolean boolValue=varValue.equals("1");
      varAct.setBooleanValue(boolValue);
    }
    //双精度类型
    else if(type==3){
      if(varValue.trim().equals("")){
        return varAct;
      }
      double doubleValue=Double.parseDouble(varValue.trim());
      varAct.setDoubleValue(doubleValue);
    }
    //String 类型
    else if(type==4){
      String stringValue=varValue;
      varAct.setStringValue(stringValue);
    }
    //Timestamp类型
    else if(type==5){
      if(varValue.trim().equals("")){
        return varAct;
      }
      SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
      Date datetime=format.parse(varValue.trim());
      varAct.setTimestampValue(new Timestamp(datetime.getTime()));
    }
    //date类型
    else if(type==6){
      if(varValue.trim().equals("")){
        return varAct;
      }
      SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
      Date datetime=format.parse(varValue.trim());
      varAct.setDateValue(datetime);
    }
    //type = 7 数组类型
    else if(type==7){
      //暂时什么都不做
    }
    //type = 8 File 类型
    else if(type==8){
      String fileValue=varValue;
      varAct.setFileValue(fileValue);
    }
    //type = 9 object 数据类型也支持(目前实际的应用中没有object的应用,放在这里,以供以后扩展。)。
    else if(type==9){
      //暂时什么都不做
    }
    else{ //FormBean中有工作流不支持的数据类型
    }
    return varAct;
  }

  /**
   * 将varParamDataMap中的参数值更新到ActivityVariable中
   * @param actVar ActivityVariable[]
   * @param varParamDataMap HashMap
   * @return ActivityVariable[]
   * @throws Exception
   */
  public ActivityVariable[] getActivityVariableFromParamDataMap(
      ActivityVariable[] actVar,HashMap varParamDataMap)
      throws Exception{
    if(actVar!=null&&actVar.length>0){
      //遍历处理数据(数组和对象不作处理)
      for(int i=0;i<actVar.length;i++){
        if(varParamDataMap!=null&&
            varParamDataMap.containsKey(actVar[i].getAttributeName())){
          String varValue=(String)(varParamDataMap.get(actVar[i].
              getAttributeName())==null?"":
              varParamDataMap.get(actVar[i].getAttributeName()));
          logger.info("varName is:"+actVar[i].getAttributeName()+
              " varValue is:"+varValue);
          int type=actVar[i].getAttributeType();
          actVar[i]=getActivityVariable(actVar[i],varValue,type);
        }
      }
    }
    return actVar;
  }

  /**
   * 取得已经选中的流向的参与者信息
   * @param request HttpServletRequest
   * @param nextActInfo NextActivityInfo
   * @return List 返回由Activity组成的list
   */
  public List getActivityParticipator(HttpServletRequest request,
      NextActivityInfo nextInfo)
      throws Exception{
    //取得已经选中流向活动id
    List list=new ArrayList();
    String[] selectedIds=request.getParameterValues("flow_activity_selected");
    if(selectedIds==null||selectedIds.length<0){
      //throw new DoesnotSelectActivityException("您没有选择流向,请您重新选择。");//暂时,以后修改
      logger.info("您没有选择流向,请您重新选择。");
      return null;
    }
    for(int i=0;i<selectedIds.length;i++){
      Activity activity=new Activity();
      activity.setActId(Long.parseLong(selectedIds[i]));
      //取得参与者
      String actorString=request.getParameter("participator_"+selectedIds[i]);
      List actor=parseParticipatorString(actorString);
      if(actor!=null){
        activity.setParticipatorList(actor);
        if(nextInfo.getNextActivity()!=null){
          for(int j=0;j<nextInfo.getNextActivity().size();j++){
            NextActivityInfo info=(NextActivityInfo)nextInfo.getNextActivity().
                get(j);
            if(activity.getActId()==info.getActivityID()){
              activity.setTransName(info.getATP_APRTINAME());
              activity.setActName(info.getActivityName());
            }
          }
        }
      }
      //取得时间单位
      String timeUnitTypeString=request.getParameter("act_timeunit_type_"+selectedIds[i]);
      if (timeUnitTypeString==null ||timeUnitTypeString.equals("")){
        timeUnitTypeString=WorkflowConstant.TIMEUNIT_TYPE_WORKDAY;
      }
      activity.setTimeUnitType(timeUnitTypeString);

      //取得办理时限
      String maxTimeString=request.getParameter("act_maxtime_"+selectedIds[i]);
      activity.setMaxTime(this.getMaxTime(maxTimeString,timeUnitTypeString));

      //取得用户自定义的活动变量的值
      String variables=request.getParameter("variable_"+selectedIds[i]);
      if (variables!=null&&!variables.equals("")){
        StringTokenizer tokenizer=new StringTokenizer(variables,";");
        String[] nameValPair=null; //活动变量名值对
        ActivityVariable var=null;
        List variableList=new ArrayList();

        while(tokenizer.hasMoreTokens()){
          nameValPair=((String)tokenizer.nextToken()).split("=");
          var=new ActivityVariable();

          var.setAttributeName(nameValPair[0]);
          var.setStringValue(nameValPair[1]);
          var.attributeType=4; //默认变量类型为字符型

          variableList.add(var);
        }
        activity.setVariablesList(variableList);
      }
      list.add(activity);
    }
    return list;
  }

  /**
   * 解析参与者字符串,返回参与着信息List
   * @param actors String
   * @return Participator
   */
  private List parseParticipatorString(String actors){
    logger.info("begin parseParticipatorString...");
    logger.info("actors is:"+actors);
    List list=new ArrayList();
    if(actors!=null&&!actors.equals("")){
      ////将*替换成“:”,否则不能使用split;
      actors=actors.replace("*".charAt(0),":".charAt(0));
      String[] argActor=actors.split(":");
      for(int i=0;i<argActor.length;i++){
        //将字符串的首尾“;”字符去掉
        if(argActor[i].indexOf(";")==0){
          argActor[i]=argActor[i].substring(1);
        }
        if(argActor[i].lastIndexOf(";")==argActor[i].length()-1){
          argActor[i]=argActor[i].substring(0,argActor[i].length()-1);
        }
        //将;隔开的字符串解析成多个数组
        String[] act=argActor[i].split(";");
        Participator p=new Participator();
        if(act.length>=6){
          p=new Participator();
          p.setId(act[0]);
          p.setName(act[1]);
          p.setType(act[2]);
          p.setParentId(act[3]);
          p.setOrgId(act[4]);
          p.setRoleId(act[5]);
          if (act.length>=8){
            p.setIfAgen(act[6]==null ? false:(act[6].toUpperCase().equals("Y") ? true:false));
            p.setConsignUserId(act[7]);
          } else {
            p.setIfAgen(false);
            p.setConsignUserId(null);
          }
          list.add(p);
        }
        logger.info("p value is: id:"+p.getId()+" name:"+p.getName()+" type:"+
            p.getType()+" parentid:"+p.getParentId()+" orgId is:"+p.getOrgId()+
            " role is:"+p.getRoleId()+" if agen is:"+p.isIfAgen()+" consign_user_id is:"+p.getConsignUserId());
      }
    }
    return list;
  }

  public WorkflowProcessInfo getWorkflowProcessInfo(HttpServletRequest request)
      throws Exception{
    logger.info("begin getWorkflowProcessInfo...");
    WorkflowProcessInfo wfInfo=new WorkflowProcessInfo();
    long startTime=System.currentTimeMillis();

    //取得工作项id
    String workItemId=request.getParameter("wf_workitem_id");
    if(workItemId==null||workItemId.equals("")){
      throw new WorkItemEmptyException("工作项id为空");
    }
    wfInfo.setWorkitemId(workItemId);
    //取得项目id
    String projectId=request.getParameter("wf_project_id")==null?"0":
        request.getParameter("wf_project_id");
    wfInfo.setProjectId(projectId);

    //取得父流程实例id
    String parentProInstId=request.getParameter("wf_parent_process_instance_id")==null?
        "0":request.getParameter("wf_parent_process_instance_id");
    wfInfo.setParentProInstId(parentProInstId);
    //取得辅助子流程标识
    String aidSubflowTag=request.getParameter("wf_aid_subflow_tag")==null?"0":
        request.getParameter("wf_aid_subflow_tag");
    wfInfo.setAidSubflowTag(aidSubflowTag);
    String startWorkflowTag=request.getParameter("wf_start_workflow_tag")==null?
        "0":request.getParameter("wf_start_workflow_tag");
    wfInfo.setStartWorkflowTag(startWorkflowTag);
    //取得用户信息
    HttpSession session=request.getSession(false);
    UserInfo userInfo=(UserInfo)session.getAttribute(FlowWebKeys.USER_SESSION);
    wfInfo.setUserInfo(userInfo);
    //取得当前及下一活动信息
    WorkflowHelper helper=new WorkflowHelper();
    NextActivityInfo nextActInfo=helper.getNextActivityInfo(userInfo,
        Long.parseLong(workItemId));
    wfInfo.setNextActInfo(nextActInfo);
    //取得参与者
    List actParticipator=getActivityParticipator(request,nextActInfo);
    wfInfo.setActParticipator(actParticipator);
    //取得活动变量
    ActivityVariable[] actVar=getActivityVariable(request,null); //暂时,以后修改
    wfInfo.setActVar(actVar);
    logger.info("Execution getWorkflowProcessInfo time: "+
        (System.currentTimeMillis()-startTime)+" ms.");
    return wfInfo;
  }

  private long getMaxTime(String timeString,String timeUnitType){
    long time=0;
    double dTime=0;
    if (this.isNumeric(timeString)){
      dTime=Double.parseDouble(timeString);
    }
    TimeUtil timeUtil=new TimeUtil();
    //工作日
    if (WorkflowConstant.TIMEUNIT_TYPE_WORKDAY.equals(timeUnitType)){
      time=timeUtil.getWorkday(dTime);
    }
    //自然日
    else if (WorkflowConstant.TIMEUNIT_TYPE_NATUREDAY.equals(timeUnitType)){
      time=timeUtil.getNatureday(dTime);
    }
    return time;
  }

  /**
   * 判断字符串是否为数字类型
   * @param number String
   * @return boolean
   */
  private boolean isNumeric(String number){
    try{
      if (number == null){
        return false;
      }
      Double.parseDouble(number.trim());
      return true;
    }
    catch(Exception ex){
      return false;
    }
  }
  public static void main(String[] args){
    ParseRquestParameter parse=new ParseRquestParameter();
    List p=parse.parseParticipatorString(
        "10001;系统管理员;user;14;测试部门1;org;Y;1009*13;老李;user;14;测试部门1;org;N;0*");
    Participator a=(Participator)p.get(0);
    System.out.println(a.getId());
    System.out.println(a.getName());
    System.out.println(a.getParentId());
    System.out.println(a.getType());
  }

}

⌨️ 快捷键说明

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