框架 day58 BOS项目练习(基于activiti物流配送流程,启动,查询,办理,项目知识点复习)
Posted 飛白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了框架 day58 BOS项目练习(基于activiti物流配送流程,启动,查询,办理,项目知识点复习)相关的知识,希望对你有一定的参考价值。
BOS项目笔记第12天
内容:
1、设计物流配送流程
2、启动物流配送流程
3、查询组任务、拾取组任务
4、查询个人任务、办理个人任务
1. 设计物流配送流程
物流配送流程
基于组任务进行任务分配、使用排他网关,分支选择使用流程变量实现
Activiti图形界面中:
Process的Id值 对应流程定义表中的key值,可以用于启动最新版本的流程实例
任务节点中:
General的 Id值对应任务表中的Task_def_key既 taskDefinitionKey值,用于定义项目中TaskAction中的任务办理方法名
Main config的Candidate grops属性的值对应角色Role的name名字,activiti表中Group的Id值(role和group同步保存的时候 group Id 的值应设定为role的name,因为id值为uuid不便于阅读)
排他网关,分支选择使用流程变量实现,条件中condition 的表达式获取流程变量中的值来判定true or false 选择分支
2. 启动流程配送流程
第一步:在工作单管理WorkordermanageAction中提供list方法,查询start状态为"0"的工作单
Service代码:
public List<Workordermanage> findListNotStart() {
DetachedCriteria detachedCriteria = DetachedCriteria
.forClass(Workordermanage.class);
// 添加条件:start == 0
detachedCriteria.add(Restrictions.eq("start", "0"));
return workordermanageDao.findByCondition(detachedCriteria);
}
第二步:配置struts.xml
第三步:提供startranster.jsp页面,展示工作单
第四步:在工作单管理Action中提供start方法,启动物流配送流程
Service代码:
通过id获取Workordermanage对象设置start状态为1启动状态,并且启动物流配送流程实例
@Resource
private ProcessEngine processEngine;
// 启动物流配送流程,将工作单对象设置到流程变量中
public void start(String id) {
Workordermanage workordermanage = workordermanageDao.findById(id);
workordermanage.setStart("1");
String processDefinitionKey = "transfer";// 物流配送流程key
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("业务数据", workordermanage);
processEngine.getRuntimeService().startProcessInstanceByKey(
processDefinitionKey, variables);
}
3. 查询组任务
第一步:创建一个TaskAction,提供findGroupTask,查询当前登录用户的组(公共)任务
@Controller
@Scope("prototype")
public class TaskAction extends ActionSupport {
@Resource
private ProcessEngine processEngine;
/**
* 查询组任务
*/
public String findGroupTask() {
// 任务查询
TaskQuery query = processEngine.getTaskService().createTaskQuery();
String candidateUser = BOSContext.getLoginUser().getId();
// 根据组任务过滤
query.taskCandidateUser(candidateUser);
query.orderByTaskCreateTime().desc();
List<Task> list = query.list();
ActionContext.getContext().getValueStack().set("list", list);
return "groupTaskList";
}
第二步:配置struts.xml
第三步:grouptask.jsp页面展示组任务数据
<body class="easyui-layout">
<div data-options="region:'center'">
<table class="easyui-datagrid" fit="true" nowrap="false">
<thead>
<tr>
<th data-options="field:'id',width:120">任务编号</th>
<th data-options="field:'name',width:120">任务名称</th>
<th data-options="field:'data',width:520">业务数据</th>
<th data-options="field:'pick',width:120">拾取任务</th>
</tr>
</thead>
<script type="text/javascript">
function showData(taskId){
$.post("${pageContext.request.contextPath}/taskAction_showData.action",{"taskId":taskId},function(data){
$("#div"+taskId).html(data);
});
}
function toggleData(taskId){
$("#div"+taskId).toggle();
}
</script>
<tbody>
<s:iterator value="list" var="task">
<tr>
<td><s:property value="id"/> </td>
<td><s:property value="name"/></td>
<td>
<a οnclick="toggleData('${id}')" class="easyui-linkbutton">查看业务数据</a>
<div style="display: none" id="div${id }">
<script type="text/javascript">
showData('${id}');
</script>
</div>
</td>
<td>
<s:a action="taskAction_takeTask" namespace="/" cssClass="easyui-linkbutton">拾取
<s:param name="taskId" value="id"></s:param>
</s:a>
</td>
</tr>
</s:iterator>
</tbody>
</table>
</div>
</body>
第四步:在TaskAction中提供showData方法,根据任务ID查询流程变量
// 接收任务ID
private String taskId;
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
/**
* ajax查询流程变量
*
* @throws IOException
*/
public String showData() throws IOException {
Map<String, Object> map = processEngine.getTaskService().getVariables(
taskId);
ServletActionContext.getResponse().setContentType(
"text/html;charset=UTF-8");
ServletActionContext.getResponse().getWriter().print(map);
return NONE;
}
效果:
toggle()[如果元素是可见的,切换为隐藏的;如果元素是隐藏的,切换为可见的。] 控制div的 style="display: none"
4. 拾取组任务
第一步:在TaskAction中提供拾取组任务的方法takeTask
/**
* 拾取组任务
*/
public String takeTask() {
processEngine.getTaskService().claim(taskId,
BOSContext.getLoginUser().getId());
return "toGroupTaskList";
}
第二步:配置struts.xml
5. 查询个人任务
第一步:在TaskAction中提供findPersonalTask方法,查询个人任务
Assignee的值取决于用户表同步时activiti的user_id值的同步设置
/**
* 查询当前登录人的个人任务
*/
public String findPersonalTask() {
TaskQuery query = processEngine.getTaskService().createTaskQuery();
query.taskAssignee(BOSContext.getLoginUser().getId());
query.orderByTaskCreateTime().desc();
List<Task> list = query.list();
ActionContext.getContext().getValueStack().set("list", list);
return "personalTaskList";
}
第二步:配置struts.xml
第三步:提供personaltask.jsp
<body class="easyui-layout">
<div data-options="region:'center'">
<table class="easyui-datagrid" fit="true" nowrap="false">
<thead>
<tr>
<th data-options="field:'id',width:120">任务编号</th>
<th data-options="field:'name',width:120">任务名称</th>
<th data-options="field:'data',width:520">业务数据</th>
<th data-options="field:'pick',width:120">办理任务</th>
</tr>
</thead>
<script type="text/javascript">
function showData(taskId){
$.post("${pageContext.request.contextPath}/taskAction_showData.action",{"taskId":taskId},function(data){
$("#div"+taskId).html(data);
});
}
function toggleData(taskId){
$("#div"+taskId).toggle();
}
</script>
<tbody>
<s:iterator value="list" var="task">
<tr>
<td><s:property value="id"/> </td>
<td><s:property value="name"/></td>
<td>
<a οnclick="toggleData('${id}')" class="easyui-linkbutton">查看业务数据</a>
<div style="display: none" id="div${id }">
<script type="text/javascript">
showData('${id}');
</script>
</div>
</td>
<td>
<s:a action="taskAction_%{taskDefinitionKey}" namespace="/" cssClass="easyui-linkbutton">办理任务
<s:param name="taskId" value="id"></s:param>
</s:a>
</td>
</tr>
</s:iterator>
</tbody>
</table>
</div>
</body>
6. 办理任务
以上是关于框架 day58 BOS项目练习(基于activiti物流配送流程,启动,查询,办理,项目知识点复习)的主要内容,如果未能解决你的问题,请参考以下文章
框架 day57 BOS项目练习(流程定义/实例管理,bos用户角色同步activiti用户表组表)
框架 day49 BOS项目练习3(修复window控件BUG,添加/修改/作废取派员,datagrid使用,分页查询(DetachedCriteria离线),formatter函数)
BOS项目 第8天(权限管理添加角色管理添加用户管理添加shiro权限框架使用ecache缓存)
框架 day30 Struts2练习项目-人员管理(增删改查)
框架 day39-42 SSH整合练习项目CRM(配置文件,增删改查,ajax,上传/下载,分页,BaseDao/Action)