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 + -
显示快捷键?