框架 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.    办理任务