BOS項目 第11天(activiti工作流第三天,流程實例管理、項目中的用戶和角色同步到activiti的用戶和組表、設計物流配送流程、啟動物流配送流程、組任務操作(查詢、拾取)、個人任務操作(查詢、辦理))


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、加載bpmnxml)文件,獲得一個流程定義對象

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

修改UserServiceImplsave方法

 

 

3. 設計物流配送流程

流程定義的id

 

使用排他網關:

 

使用組任務:

 

任務的id(對應Action中的方法名):

 

 

4. 啟動物流配送流程

修改工作單類

 

修改工作單hbm映射文件

 

4.1 查詢工作單列表數據

第一步:在工作單管理Action中提供list方法,查詢start0的工作單

 

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中提供方法,處理審核工作單任務

 

 

6.2.2 辦理其他任務

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM