package com.cabletech.business.workflow.common.service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import com.cabletech.business.flowservice.util.ProMockPo;
import com.cabletech.common.base.SysConstant;
/**
* 工作流业务操作抽象基类
*
* @author 杨隽 2011-11-07 创建
* @author 杨隽 2011-11-29 添加getBusinessTitleColumn()方法和getAccessUrl()方法
* @author 杨隽 2011-11-29 修改mergeList()方法
* @author 杨隽 2012-01-09 修改包名
* @author 杨隽 2012-01-31 常量移动到SyscConstant中
*
*/
public abstract class WorkflowEntityManager {
// 专业类型Map
private Map<String, Object> businessTypeMap;
// 待办任务列表
private List<ProMockPo> waitHandledTaskList;
public Map<String, Object> getBusinessTypeMap() {
return businessTypeMap;
}
public void setBusinessTypeMap(Map<String, Object> businessTypeMap) {
this.businessTypeMap = businessTypeMap;
}
public List<ProMockPo> getWaitHandledTaskList() {
return waitHandledTaskList;
}
public void setWaitHandledTaskList(List<ProMockPo> waitHandledTaskList) {
this.waitHandledTaskList = waitHandledTaskList;
}
/**
* 合并业务操作数据列表和待办任务列表
*
* @param waitHandledTaskList
* List<ProMockPo> 工作流待办任务列表
* @param businessDataList
* List<Map<String, Object>> 业务数据信息列表
* @param processDefName
* String 流程定义名称
* @param processCommentName
* String 流程定义名称注释
* @return List<Map<String, Object>> 合并后的业务操作数据列表
*/
public List<Map<String, Object>> mergeList(
List<ProMockPo> waitHandledTaskList,
List<Map<String, Object>> businessDataList, String processDefName,
String processCommentName) {
List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
if (businessDataList == null || businessDataList.isEmpty()) {
return resultList;
}
if (waitHandledTaskList == null || waitHandledTaskList.isEmpty()) {
return resultList;
}
ProMockPo pro;
Map<String, Object> map;
String dispatchId = "";
for (int i = 0; i < businessDataList.size(); i++) {
map = businessDataList.get(i);
dispatchId = (String) map.get(getBusinessIdColumn());
if (StringUtils.isBlank(dispatchId)) {
continue;
}
for (int j = 0; j < waitHandledTaskList.size(); j++) {
pro = waitHandledTaskList.get(j);
if (processDefName.equals(pro.getProcessName())
&& dispatchId.equals(pro.getBzid())) {
String url = "";
if (StringUtils.isNotBlank(pro.getResource())) {
url = pro.getResource().replaceAll(";", "&")
.replaceAll("\\[piId\\]", pro.getBzid())
.replaceAll("\\[taskId\\]", pro.getTaskId());
url += getUrlSuffix(map);
}
map.put(SysConstant.PROCESS_NAME_KEY, processDefName);
map.put(SysConstant.PROCESS_COMMENT_KEY, processCommentName);
map.put(SysConstant.ID_COLUMN_KEY,
map.get(getBusinessIdColumn()));
map.put(SysConstant.TITLE_COLUMN_KEY,
map.get(getBusinessTitleColumn()));
map.put(SysConstant.ACCESS_URL_KEY, url);
resultList.add(map);
break;
}
}
}
return resultList;
}
/**
* 获取待办处理的url地址后缀
*
* @param map
* Map<String,Object>
* @return String
*/
public abstract String getUrlSuffix(Map<String, Object> map);
/**
* 获取工作流待办列表访问地址
*
* @return String 工作流待办列表访问地址
*/
public abstract String getAccessUrl();
/**
* 获取业务数据的主键列名
*
* @return String 业务数据的主键列名
*/
public abstract String getBusinessIdColumn();
/**
* 获取业务数据的标题列名
*
* @return String 业务数据的标题列名
*/
public abstract String getBusinessTitleColumn();
/**
* 根据专业获取业务操作数据列表
*
* @param businessType
* String 专业编号
* @return List<Map<String, Object>> 业务操作数据列表
*/
public abstract List<Map<String, Object>> getBusinessDataList(
String businessType);
}