关键时刻发现我并不会,于是下定决心研究一下,发现jbpm4还是有些不尽人意,比如历史变量的保存问题就很让人郁闷。
获得jbpm4 hibernate session
/***@author yhy
* 获得JBPM session
* @return Session:hibernate Session
*/
public Session getTaskSession(){
EnvironmentFactory environmentFactory = (EnvironmentFactory)
getProcessEngine();
Environment environment = environmentFactory.openEnvironment();
Session session = null;
try{
session = environment.get(Session.class);
}catch(Exception e){
e.printStackTrace();
}
return session;
}
创建query()
/**
* 创建query查询
* @param hql hql查询语句
* @return Query query查询器
*/
public Query creatQuery(String hql){
return getTaskSession().createQuery(hql);
}
分页查询
/**
* 分页查询
* @param sql hql sql
* @param pageSize 每页显示的数量
* @param ipage 页码
* @param parameterMap 参数map
* @return List 结果
*/
public List pageQuery(String sql, int pageSize,int ipage,Map<String, Object> parameterMap){
Query query = creatQuery(sql);
int startResult = (ipage -1)*pageSize + 1;
if (pageSize > 0 && startResult > 0) {
query.setFirstResult(startResult);
query.setMaxResults(pageSize);
}
//设置hql查询参数
parameterMap = parameterMap == null ? new HashMap<String, Object>() : parameterMap;
for (String key : parameterMap.keySet()) {
if (key != null && !"".equals(key)) {
Object value = parameterMap.get(key);
if (value != null) {
query.setParameter(key, value);
}
}
}
//返回结果
return query.list();
}
统计方法
/**
* 普通HQL统计查询
* @param sql 统计HQL
* @param parameterMap 参数map
* @return int 统计数
*/
@SuppressWarnings("unchecked")
public int query(String countSql, Map<String, Object> parameterMap){
Query query = creatQuery(countSql);
parameterMap = parameterMap == null ? new HashMap<String, Object>() : parameterMap;
for (String key : parameterMap.keySet()) { //进行迭代
if (key != null && !"".equals(key)) {
Object value = parameterMap.get(key);
if (value != null) {
query.setParameter(key, value); //加入查询条件
}
}
}
List list = query.list();
return ((Long) list.get(0)).intValue();
}
查询方法
/**
* 任务查询
* @return FindResult 查询结果
*/
public FindResult queryTask(int ipage,Map<String, String> formMap){
List result = new ArrayList();
String taskName = formMap.get("taskName");
Integer userId = (Integer) WebUtils.getAttribute("userId");
if(userId == null){
logger.info("[session已过期或者没有登录!请重新登录再试!]");
return new FindResult();
}
Map<String, Object> paramsMap = new HashMap();
paramsMap.put("userId", userId.toString());
String sql = "from org.jbpm.pvm.internal.task.ParticipationImpl t where t.userId = :userId";
String countsql = "select count(t.dbid) from org.jbpm.pvm.internal.task.ParticipationImpl t where t.userId = :userId";
if(StringUtils.isNotBlank(taskName)){
sql = sql + " and t.task.name = :taskName";
countsql = countsql + " and t.task.name = :taskName";
paramsMap.put("taskName", taskName);
}
int rowCount = JbpmUtils.query(countsql, paramsMap);
List<ParticipationImpl> list = JbpmUtils.pageQuery(sql, QcConstant.PAGE_SIZE, ipage, paramsMap);
for(ParticipationImpl task : list){
String exerciser = (String) task.getTask().getVariable("users");
Map map = new HashMap();
map.put("任务ID", task.getTask().getId());
map.put("任务名称", task.getTask().getName());
map.put("创建时间", task.getTask().getCreateTime());
map.put("执行人", exerciser.substring(exerciser.indexOf(",")+1));
map.put("form", task.getTask().getFormResourceName());
map.put("recordingId", JbpmUtils.getTaskService().getVariable(task.getTask().getId(), "recordingId"));
result.add(map);
}
FindResult findResult = new FindResult();
findResult.setResult(result);
findResult.setRowCount(rowCount);
findResult.setPageCount(getPageNum(rowCount));
return findResult;
}
FindResult的代码如下:
public class FindResult<T> {
/**
* 总页数
*/
private int pageCount;
/**
* 总行数
*/
private int rowCount;
/**
* 结果集
*/
private List<T> result;
public int getPageCount() {
if (result == null)
pageCount = 0;
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public List<T> getResult() {
if (result == null)
result = new java.util.ArrayList<T>();
return result;
}
public void setResult(List<T> result) {
this.result = result;
}
public int getRowCount() {
if (result == null)
rowCount = 0;
return rowCount;
}
public void setRowCount(int rowCount) {
this.rowCount = rowCount;
}
}