BOS项目笔记 第11天
今天内容安排:
1、流程实例管理(查询、查看运行状态)
2、将bos系统中的用户和角色同步到activiti的用户和组表
3、设计物流配送流程
4、启动物流配送流程
5、组任务操作(查询、拾取)
6、个人任务操作(查询、办理)
1. 流程实例管理
1.1 查询流程实例列表
第一步:创建一个流程实例管理Action,提供list方法,查询流程实例列表数据
第二步:配置struts.xml
第三步:提供processinstance.jsp页面,展示列表数据
<s:iterator value="list"> <tr> <td>${id }</td> <td>${processDefinitionId }</td> <td>${activityId }</td> <td> <div id="div${id }"></div> <script type="text/javascript"> //根据流程实例id查询流程变量 $.post("${pageContext.request.contextPath}/processInstanceAction_findData.action",{"id":‘${id}‘},function(data){ $("#div${id}").html(data); }); </script> <script type="text/javascript"> function showPng(id){ window.showModalDialog("${pageContext.request.contextPath}/processInstanceAction_showPng.action?id="+id); } </script> </td> <td> <a onclick="showPng(‘${id}‘);" href="#">查看流程图</a> </td> </tr> </s:iterator> |
第四步:在Action中提供findData的方法,根据流程实例id查询对应的流程变量数据
1.2 查询流程实例运行状态
第一步:为“查看流程图”按钮绑定事件
<script type="text/javascript"> function showPng(id){ //弹出模式对话框 window.showModalDialog("${pageContext.request.contextPath}/processInstanceAction_showPng.action?id="+id); } </script> <a class="easyui-linkbutton" data-options="iconCls:‘icon-search‘" onclick="showPng(‘${id}‘);" href="#">查看流程图</a> |
第二步:在Action中提供showPng方法,根据流程实例id查询坐标、部署id、图片名称
/** * 根据流程实例id查询坐标、部署id、图片名称 */ public String showPng(){ //1、根据流程实例id查询流程实例对象 ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(id).singleResult(); //2、根据流程实例对象查询流程定义id String processDefinitionId = processInstance.getProcessDefinitionId(); //3、根据流程定义id查询流程定义对象 ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult(); //4、根据流程定义对象查询部署id deploymentId = processDefinition.getDeploymentId(); imageName = processDefinition.getDiagramResourceName(); //查询坐标 //1、获得当前流程实例执行到哪个节点 String activityId = processInstance.getActivityId();//usertask1 //2、加载bpmn(xml)文件,获得一个流程定义对象 ProcessDefinitionEntity pd = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId);//查询act_ge_bytearray //3、根据activitiId获取含有坐标信息的对象 ActivityImpl findActivity = pd.findActivity(activityId); int x = findActivity.getX(); int y = findActivity.getY(); int width = findActivity.getWidth(); int height = findActivity.getHeight(); ActionContext.getContext().getValueStack().set("x", x); ActionContext.getContext().getValueStack().set("y", y); ActionContext.getContext().getValueStack().set("width", width); ActionContext.getContext().getValueStack().set("height", height); return "showPng"; } |
第三步:配置struts.xml,跳转到image.jsp页面
第四步:提供image.jsp页面
<!-- 1.获取到规则流程图 --> <img style="position: absolute;top: 0px;left: 0px;" src="processInstanceAction_viewImage?deploymentId=${deploymentId }&imageName=${imageName}"> <!-- 2.根据当前活动的坐标,动态绘制DIV --> <div style="position: absolute;border:1px solid red;top:${y-1}px;left:${x-1}px;width:${width}px;height:${height}px;"> </div> |
第五步:在Action中提供viewImage方法,根据部署id和图片名称获得对应的输入流
第六步:配置struts.xml
2. 将bos系统中用户和角色同步到activiti
2.1 将角色同步到act_id_group表
修改RoleServiceImpl中的save方法
2.2 将用户同步到act_id_user表
修改UserServiceImpl的save方法
3. 设计物流配送流程
l 流程定义的id:
l 使用排他网关:
l 使用组任务:
l 任务的id(对应Action中的方法名):
4. 启动物流配送流程
l 修改工作单类
l 修改工作单hbm映射文件
4.1 查询工作单列表数据
第一步:在工作单管理Action中提供list方法,查询start为0的工作单
Service代码:
第二步:配置struts.xml
第三步:提供startransfer.sjp页面,展示工作单列表数据
4.2 根据key启动流程实例
第一步:修改列表页面中启动按钮绑定事件
第二步:在工作单Action中提供start方法,启动物流配送流程对应的流程实例
第三步:在工作单Service中提供start方法
5. 组任务操作
5.1 查询组任务
第一步:创建一个TaskAction,提供查询组任务的方法findGroupTask
第二步:配置struts.xml
第三步:提供grouptask.jsp页面,展示任务列表数据
<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 onclick="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> |
5.2 拾取组任务
第一步:修改jsp页面中拾取按钮事件
第二步:在TaskAction中提供拾取任务的方法
第三步:配置struts.xml
6. 个人任务操作
6.1 查询个人任务
第一步:在TaskAction中提供findPersonalTask,查询当前登录人的个人任务
第二步:配置struts.xml
第三步:提供personaltask.jsp页面,展示个人任务列表数据
<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 onclick="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> |
6.2 办理个人任务
6.2.1 办理审核工作单任务
第一步:修改personaltask.jsp页面中办理任务按钮的事件
第二步:在TaskAction中提供checkWorkOrderManage方法,处理审核工作单任务
/** * 办理审核工作单任务 */ public String checkWorkOrderManage() { // 根据任务id查询任务对象 Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); // 根据任务对象查询流程实例id String processInstanceId = task.getProcessInstanceId(); // 根据流程实例id查询流程实例对象 ProcessInstance processInstance = runtimeService .createProcessInstanceQuery() .processInstanceId(processInstanceId).singleResult(); String workordermanageId = processInstance.getBusinessKey(); Workordermanage workordermanage = workordermanageService.findById(workordermanageId); if(check == null){ //跳转到审核页面 // 跳转到一个审核工作单页面,展示当前对应的工作单信息 ActionContext.getContext().getValueStack().set("map", workordermanage); return "check"; }else{ workordermanageService.checkWorkordermanage(taskId,check,workordermanageId); return "topersonaltasklist"; } } |
第三步:如果是跳转页面,配置struts.xml
第四步:提供check.jsp页面,展示审核工作单表单页面
第五步:在工作单Service中提供方法,处理审核工作单任务