日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

activiti流程跟踪图简单详解

發(fā)布時間:2025/5/22 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 activiti流程跟踪图简单详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我用的是spring+springmvc+mybatis,前端使用的是jsp

===========前臺jsp中的寫法==========

<img? id="imgObj" src=""/>??? ----標(biāo)簽直接定義一個圖片,定義一個id

js的下法如下:???
?? var src = "${pageContext.request.contextPath}/usertask/imgs.do?cacheFlag"+new Date().getTime();
??? $("#imgObj").attr("src", src);

提示:你可以定義一個按鈕,然后點(diǎn)擊按鈕就會執(zhí)行一個方法,將上面兩行直接放在方法中就行

===========后臺中的寫法==========

==========controller的寫法============

/**
?? ? * 獲取流程跟蹤圖
?? ? * @param req
?? ? * @param res
?? ? */
?? ?@RequestMapping("/imgs")
?? ?public void getCode(HttpServletRequest req, HttpServletResponse res){
?? ??? ???? InputStream in = null;
?? ??? ???? byte[] b=new byte[1024];
?? ??? ??? ?try {
?? ??? ??? ??? ?ServletOutputStream sos = res.getOutputStream();
?? ??? ??? ??? ?in = userTaskService.imgs();
?? ??? ??? ??? ?//文件名
?? ??? ??? ??? ?String src3="UserTask.png";
?? ??? ??? ??? ?res.setHeader("Content-Disposition","attachment;filename="+URLEncoder
?? ??? ??? ??? ??? ??? ?.encode(src3,"UTF-8"));
?? ??? ??? ??? ?int i=in.read(b, 0, b.length);
?? ??? ??? ??? ?while(i!=-1){
?? ??? ??? ??? ??? ?sos.write(b, 0, i);
?? ??? ??? ??? ??? ?i=in.read(b,0,b.length);
?? ??? ??? ??? ?}
?? ??? ??? ??? ?in.close();
?? ??? ??? ??? ?sos.close();
?? ??? ??? ?} catch (MalformedURLException e) {
?? ??? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ?} catch (UnsupportedEncodingException e) {
?? ??? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ?} catch (IOException e) {
?? ??? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ?}
?? ?? }

==========service的寫法============

/**
?? ? * 流程圖跟蹤
?? ? * @return
?? ? */
?? ?public InputStream imgs(){
?? ??? ???? String taskId="16001";//這里的任務(wù)id應(yīng)該從前臺傳過來,可以直接在數(shù)據(jù)庫里查一個放在這里先試試
?? ???????? //processInstanceId
?? ???????? String processInstanceId = taskService.createTaskQuery().taskId(taskId).singleResult().getProcessInstanceId();
?? ???????? //獲取歷史流程實(shí)例
?? ???????? HistoricProcessInstance processInstance =? historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
?? ???????? //獲取流程圖
?? ???????? BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
?? ???????? ProcessEngineConfiguration processEngineConfiguration = processEngine.getProcessEngineConfiguration();
?? ???????? Context.setProcessEngineConfiguration((ProcessEngineConfigurationImpl) processEngineConfiguration);

?? ???????? ProcessDiagramGenerator diagramGenerator = processEngineConfiguration.getProcessDiagramGenerator();
?? ???????? ProcessDefinitionEntity definitionEntity = (ProcessDefinitionEntity)repositoryService.getProcessDefinition(processInstance.getProcessDefinitionId());

?? ???????? List<HistoricActivityInstance> highLightedActivitList =? historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).list();
?? ???????? //高亮環(huán)節(jié)id集合
?? ???????? List<String> highLightedActivitis = new ArrayList<String>();
?? ???????? //高亮線路id集合
?? ???????? List<String> highLightedFlows = getHighLightedFlows(definitionEntity,highLightedActivitList);

?? ???????? for(HistoricActivityInstance tempActivity : highLightedActivitList){
?? ???????????? String activityId = tempActivity.getActivityId();
?? ???????????? highLightedActivitis.add(activityId);
?? ???????? }
?? ???????? //中文顯示的是口口口,設(shè)置字體就好了
?? ???????? InputStream imageStream = diagramGenerator.generateDiagram(bpmnModel, "png", highLightedActivitis,highLightedFlows,"宋體","宋體","宋體",null,1.0);
?? ???????? //單獨(dú)返回流程圖,不高亮顯示
?? ????? return imageStream; ?
?? ?}
?? ?
?? ?/**
???? * 獲取需要高亮的線
???? * @param processDefinitionEntity
???? * @param historicActivityInstances
???? * @return
???? */
??? private List<String> getHighLightedFlows(
??????????? ProcessDefinitionEntity processDefinitionEntity,
??????????? List<HistoricActivityInstance> historicActivityInstances) {
??????? List<String> highFlows = new ArrayList<String>();// 用以保存高亮的線flowId
??????? for (int i = 0; i < historicActivityInstances.size() - 1; i++) {// 對歷史流程節(jié)點(diǎn)進(jìn)行遍歷
??????????? ActivityImpl activityImpl = processDefinitionEntity
??????????????????? .findActivity(historicActivityInstances.get(i)
??????????????????????????? .getActivityId());// 得到節(jié)點(diǎn)定義的詳細(xì)信息
??????????? List<ActivityImpl> sameStartTimeNodes = new ArrayList<ActivityImpl>();// 用以保存后需開始時間相同的節(jié)點(diǎn)
??????????? ActivityImpl sameActivityImpl1 = processDefinitionEntity
??????????????????? .findActivity(historicActivityInstances.get(i + 1)
??????????????????????????? .getActivityId());
??????????? // 將后面第一個節(jié)點(diǎn)放在時間相同節(jié)點(diǎn)的集合里
??????????? sameStartTimeNodes.add(sameActivityImpl1);
??????????? for (int j = i + 1; j < historicActivityInstances.size() - 1; j++) {
??????????????? HistoricActivityInstance activityImpl1 = historicActivityInstances
??????????????????????? .get(j);// 后續(xù)第一個節(jié)點(diǎn)
??????????????? HistoricActivityInstance activityImpl2 = historicActivityInstances
??????????????????????? .get(j + 1);// 后續(xù)第二個節(jié)點(diǎn)
??????????????? if (activityImpl1.getStartTime().equals(
??????????????????????? activityImpl2.getStartTime())) {
??????????????????? // 如果第一個節(jié)點(diǎn)和第二個節(jié)點(diǎn)開始時間相同保存
??????????????????? ActivityImpl sameActivityImpl2 = processDefinitionEntity
??????????????????????????? .findActivity(activityImpl2.getActivityId());
??????????????????? sameStartTimeNodes.add(sameActivityImpl2);
??????????????? } else {
??????????????????? // 有不相同跳出循環(huán)
??????????????????? break;
??????????????? }
??????????? }
??????????? List<PvmTransition> pvmTransitions = activityImpl
??????????????????? .getOutgoingTransitions();// 取出節(jié)點(diǎn)的所有出去的線
??????????? for (PvmTransition pvmTransition : pvmTransitions) {
??????????????? // 對所有的線進(jìn)行遍歷
??????????????? ActivityImpl pvmActivityImpl = (ActivityImpl) pvmTransition
??????????????????????? .getDestination();
??????????????? // 如果取出的線的目標(biāo)節(jié)點(diǎn)存在時間相同的節(jié)點(diǎn)里,保存該線的id,進(jìn)行高亮顯示
??????????????? if (sameStartTimeNodes.contains(pvmActivityImpl)) {
??????????????????? highFlows.add(pvmTransition.getId());
??????????????? }
??????????? }
??????? }
??????? return highFlows;
??? }

===============================================

下面是我的效果圖

?

轉(zhuǎn)載于:https://www.cnblogs.com/xueershewang/p/6799215.html

總結(jié)

以上是生活随笔為你收集整理的activiti流程跟踪图简单详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。