亚洲av无码一区二区三区观看_av中文字幕在线不卡_久久99热这里只有精品国产_米奇777四色精品人人爽_www.-级毛片线天内射视视_欧美性片在线观看_久久久一本精品99久久精品_成人爽a毛片_五月天六月丁香_日韩精品四区

焦點速看:Springboot整合Camunda工作流引擎實現審批流程實例

環境:Spingboot2.6.14+camunda-spring-boot-starter7.18.0環境配置依賴配置7.18.0org.camunda

環境:Spingboot2.6.14 +camunda-spring-boot-starter7.18.0

環境配置

依賴配置


(資料圖片僅供參考)

7.18.0  org.camunda.bpm.springboot  camunda-bpm-spring-boot-starter-webapp  ${camunda.version}  org.camunda.bpm.springboot  camunda-bpm-spring-boot-starter-rest  ${camunda.version}

應用程序配置

camunda.bpm:  webapp:    # 設置管理控制臺的訪問上下文    application-path: /workflow  auto-deployment-enabled: true  admin-user:    # 配置登錄管理控制臺的用戶    id: admin    password: admin    firstName: admin  filter:    create: All tasks  database:    #數據庫類型    type: mysql     #是否自動更新表信息    schema-update: truelogging:  level:    #配置日志,這樣在開發過程中就能看到每步執行的SQL語句了    "[org.camunda.bpm.engine.impl.persistence.entity]": debug---spring:  jersey:    application-path: /api-flow    type: servlet    servlet:      load-on-startup: 0

通過上面的配置后訪問控制臺:http://localhost:8100/workflow/

默認是沒有上面的tasks中的內容,這里是我之前測試數據

環境準備好后,接下來就可以設計工作流程。

上面的camunda-bpm-spring-boot-starter-rest依賴中定義了一系列操作camunda的 rest api 這api的實現是通過jersey實現,我們可以通過/api-flow前綴來訪問這些接口,具體有哪些接口,我們可以通過官方提供的camunda-bpm-run-7.18.0.zip

http://localhost:8080/swaggerui/#/

設計流程

這里設計兩個節點的審批流程,經理審批---》人事審批 流程。

經理審批節點

人事審批節點

上面配置了2個用戶任務節點,并且為每個任務節點都設置了表達式,指定節點的審批人。

最終生成的流程XML內容如下:

            Flow_18pxcpx                  Flow_18pxcpx      Flow_0n014x3                  Flow_0n014x3      Flow_0dsfy6s              Flow_0dsfy6s                                                                                                                                                                                          
部署流程

這里我不通過上面的rest api 進行部署,而是通過自定義的接口然后調用camunda的相關api來實現流程部署。

上面的流程設計我是通過vue整合的camunda進行設計,并沒有使用官方提供的設計器。設計完成后直接上傳到服務端。

接口
@RestController@RequestMapping("/camunda")public class BpmnController {  // 上傳路徑  @Value("${gx.camunda.upload}")  private String path ;    // 通用的工作流操作api服務類  @Resource  private ProcessService processService ;    @PostMapping("/bpmn/upload")  public AjaxResult uploadFile(MultipartFile file, String fileName, String name) throws Exception {    try {      // 上傳并返回新文件名稱      InputStream is = file.getInputStream() ;      File storageFile = new File(path + File.separator + fileName) ;      FileOutputStream fos = new FileOutputStream(new File(path + File.separator + fileName)) ;      byte[] buf = new byte[10 * 1024] ;      int len = -1 ;      while((len = is.read(buf)) > -1) {        fos.write(buf, 0, len) ;      }      fos.close() ;      is.close() ;      // 創建部署流程      processService.createDeploy(fileName, name, new FileSystemResource(storageFile)) ;      return AjaxResult.success();    } catch (Exception e) {      return AjaxResult.error(e.getMessage());    }  }}
部署流程Service
// 這個是camunda spring boot starter 自動配置@Resourceprivate RepositoryService repositoryService ;public void createDeploy(String resourceName, String name, org.springframework.core.io.Resource resource) {  try {    Deployment deployment = repositoryService.createDeployment()      .addInputStream(resourceName, resource.getInputStream())      .name(name)      .deploy();    logger.info("流程部署id: {}", deployment.getId());    logger.info("流程部署名稱: {}", deployment.getName());  } catch (IOException e) {    throw new RuntimeException(e) ;  }}

執行上面的接口就能將上面設計的流程部署到camunda中(其實就是將流程文件保存到了數據庫中,對應的數據表是:act_ge_bytearray)。

啟動流程

啟動流程還是一樣,通過我們自己的接口來實現。

接口
@RestController@RequestMapping("/process")public class ProcessController {  @Resource  private ProcessService processService ;    // 根據流程定義id,啟動流程;整個流程需要動態傳2個參數(審批人),如果不傳將會報錯  @GetMapping("/start/{processDefinitionId}")  public AjaxResult startProcess(@PathVariable("processDefinitionId") String processDefinitionId) {    Map variables = new HashMap<>() ;    variables.put("uid", "1") ;    variables.put("mid", "1000") ;    processService.startProcessInstanceAssignVariables(processDefinitionId, "AKF", variables) ;    return AjaxResult.success("流程啟動成功") ;  }}
服務Service接口
@Resourceprivate RuntimeService runtimeService ;public ProcessInstance startProcessInstanceAssignVariables(String processDefinitionId, String businessKey, Map variables) {  ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId, businessKey, variables);  logger.info("流程定義ID: {}", processInstance.getProcessDefinitionId());  logger.info("流程實例ID: {}", processInstance.getId());  logger.info("BussinessKey: {}", processInstance.getBusinessKey()) ;  return processInstance ;}

流程啟動后就可以查看當前需要自己審批的所有審批單

接口實現
@Resourceprivate TaskService taskService ;@Resourceprivate ManagementService managementService ;// 根據時間段查詢public List queryTasksByBusinessAndCreateTime(String assignee, String businessKey, String startTime, String endTime) {  NativeTaskQuery nativeQuery = taskService.createNativeTaskQuery() ;  nativeQuery.sql("select distinct RES.* from " + managementService.getTableName(TaskEntity.class) +  " RES "                  + " left join " + managementService.getTableName(IdentityLinkEntity.class) + " I on I.TASK_ID_ = RES.ID_ "                  + " WHERE (RES.ASSIGNEE_ = #{assignee} or "                  + " (RES.ASSIGNEE_ is null and I.TYPE_ = "candidate" "                  + " and (I.USER_ID_ = #{assignee} or I.GROUP_ID_ IN ( #{assignee} ) ))) "                  + " and RES.CREATE_TIME_ between #{startTime} and #{endTime} "                  + " order by RES.CREATE_TIME_ asc LIMIT #{size} OFFSET 0") ;  nativeQuery.parameter("assignee", assignee) ;  nativeQuery.parameter("startTime", startTime) ;  nativeQuery.parameter("endTime", endTime) ;  nativeQuery.parameter("size", Integer.MAX_VALUE) ;  return nativeQuery.list() ;}
審批流程

流程啟動后,接下來就是各個用戶任務節點配置的用戶進行審批

接口
@GetMapping("/approve/{id}")public AjaxResult approve(@PathVariable("id") String instanceId) {  if (StringUtils.isEmpty(instanceId)) {    return AjaxResult.error("未知審批任務") ;  }  // 下面的參數信息應該自行保存管理(與發起審批設置的指派人要一致)  Map variables = new HashMap<>() ;  // 第一個節點所要提供的遍歷信息(這里就是依次類推,mid等)  variables.put("uid", "1") ;  processService.executionTask(variables, instanceId, task -> {}, null) ;  return AjaxResult.success() ; }
服務Service接口
@Resourceprivate TaskService taskService ;@Resourceprivate RuntimeService runtimeService ;@Transactionalpublic void executionTask(Map variables, String instanceId, Consumer consumer, String type) {  Task task = taskService.createTaskQuery().processInstanceId(instanceId).singleResult() ;  if (task == null) {    logger.error("任務【{}】不存在", instanceId) ;    throw new RuntimeException("任務【" + instanceId + "】不存在") ;  }  taskService.setVariables(task.getId(), variables);  taskService.complete(task.getId(), variables) ;  long count = runtimeService.createExecutionQuery().processInstanceId(instanceId).count();  if (count == 0) {    consumer.accept(task) ;  }}

以上就完成了從整個流程的生命周期:

設計流程---》部署流程---》啟動流程---》審批流程

完畢!!!

關鍵詞:
責任編輯:hn1007
国产成人免费网站| 日韩欧美一区二区不卡| 你懂的亚洲视频| 欧美一级大片| 你懂的在线看| 国产色在线播放| 国产一区二区视频网站| 性猛交╳xxx乱大交| 中文字幕免费高| 成人午夜黄色影院| 播播国产欧美激情| 91精品婷婷国产综合久久竹菊| 中文字幕va一区二区三区| 亚洲制服av| 深夜福利久久| 伊人国产精品| 色黄网站在线观看| 日本福利小视频| 精品一区二区在线欧美日韩 | 日本加勒比高清在线| 99热在线只有精品| 麻豆精品一区二区三区视频| 午夜性福利视频| 国产91在线视频观看| 欧美深深色噜噜狠狠yyy| 国产精品男女猛烈高潮激情| 日韩视频在线观看免费| 日韩欧美一区二区在线视频| 一区二区激情视频| 国产午夜精品福利| 国产一区二区三区免费观看| 欧美日韩一视频区二区| 国产亚洲欧美日韩在线观看一区二区| 国产成人亚洲一区二区三区| 黄色的视频在线观看| 欧美色图另类| 中文天堂av| 天天色天天色| 色猫视频免费观看| 热re66久久精品国产99热| 国产免费一区二区三区免费视频| 99免费在线观看| 久久精品色妇熟妇丰满人妻| 中国一级特黄录像播放| 99九九99九九九99九他书对| 十八禁视频网站在线观看| 国产内射老熟女aaaa| 午夜精品短视频| 精品国产一区二区三区四区vr | 摸摸摸bbb毛毛毛片| 毛片毛片毛片毛片毛| 欧美一级黄色影院| 日韩a在线播放| av女优在线播放| 老司机午夜免费福利视频| 亚洲乱码一区二区三区三上悠亚| 国产综合第一页| 99久久综合狠狠综合久久止| 91精品中国老女人| 国产精品视频区1| 国产精品96久久久久久| 97avcom| 欧美激情日韩图片| 欧美激情国产精品| 久久久久久久国产精品视频| 欧美日韩xxx| 国模极品一区二区三区| 久久男人av资源网站| 午夜精品久久久久久久99黑人| 久久99精品久久久久子伦| 99精品视频在线| 国产精品视屏| 电影一区二区在线观看| 日韩久久99| www.com欧美| 精品人伦一区二区三电影| 99久久精品无码一区二区毛片| 国产成人精品免费久久久久| 欧美一级在线亚洲天堂| 97在线视频观看| 日韩av男人的天堂| 国产精品视频自在线| 91精品一区二区| 国产欧美亚洲日本| 裸模一区二区三区免费| 亚洲v国产v| 国产精品无码免费专区午夜| 免费看国产曰批40分钟| 91网址在线播放| 在线观看视频在线观看| 菠萝菠萝蜜网站| 熟女少妇a性色生活片毛片| 亚洲精品午夜久久久久久久| 精人妻无码一区二区三区| 精品国产亚洲AV| 骚虎视频欧美| jizz.日本| 亚洲网友自拍| 中文字幕无线码一区| 影音先锋国产在线| 天堂av中文字幕| 久热精品视频在线播放| 操人真爽免费视频| 欧美知名女优| 中文字幕中文字幕在线中高清免费版| 天堂中文在线播放| 偷窥韩漫第三季| 麻豆精品视频在线原创| 偷偷看偷偷操| 中文字幕第12页| 麻豆影院在线| 欧美黄色网页| 欧美男人操女人视频| 亚洲国产不卡| 激情伊人五月天久久综合| 国产三级欧美三级| 色婷婷综合五月| 亚洲女同精品视频| 69视频在线播放| 久草热久草热线频97精品| 久久99久久99精品| 久久久久亚洲av片无码v| 香蕉成人在线视频| 国产精品久久777777换脸| 卡一卡2卡三精品| 亚洲精品一区二区| 国产盗摄一区二区| 老牛国内精品亚洲成av人片| 亚洲高清不卡| 久久女同精品一区二区| 欧美午夜www高清视频| 精品亚洲va在线va天堂资源站| 97视频免费观看| 人偷久久久久久久偷女厕| 亚洲人成无码www久久久| 四虎永久免费在线观看| 无码一区二区三区| 无码国产精品一区二区色情男同| 黄色网免费观看| 久cao在线| 一区二区三区高清在线观看| 亚洲高清自拍| 中文字幕不卡在线观看| 日韩欧美精品在线视频| 97婷婷大伊香蕉精品视频| 久久亚洲午夜电影| 天堂一区在线观看| 国产一级特黄aaa大片| 日韩欧美一二三四区| 日韩精品一区二区三区在线播放 | 日韩在线视频在线观看| 在线国产视频一区| av中文字幕观看| 成人www视频网站免费观看| 色综合久久影院| 99re8这里有精品热视频免费| 国产精品日韩| 亚洲欧美日本韩国| 日韩成人在线播放| 成人欧美一区二区三区黑人孕妇 | 国产欧美一区二区三区四区| 一区视频二区视频| 成人在线视频免费播放| 在线视频1卡二卡三卡| www天堂网| 国产极品在线观看| 福利视频网站| 亚洲国产福利| 亚洲国产1区| 亚洲激情男女视频| 色偷偷偷综合中文字幕;dd| 91青青草免费观看| 粗暴91大变态调教| 国产无遮挡aaa片爽爽| 国产精品久久久亚洲第一牛牛| 蜜桃视频在线免费| 亚洲三级网址| 久久麻豆一区二区| 日韩h在线观看| 国产视频99| 亚洲制服丝袜在线播放| 国产成人自拍一区| 黄色在线免费观看大全| 美国十次av导航亚洲入口| 国产一区二区在线看| 欧美视频在线一区| 国产欧美精品日韩精品| jizz欧美性11| 国产精品爽爽久久久久久| 好男人社区在线视频| 国产电影一区二区三区爱妃记| 久久久久91| 欧美又粗又大又爽| 成人在线精品视频| 久久久精品麻豆| 一级黄色片免费| 中文在线视频| 精品理论电影| 樱花草国产18久久久久| 欧美高清在线观看| 无码精品a∨在线观看中文| 日韩综合在线观看| 亚洲精品套图| 亚洲一区二区日韩| 欧美日韩激情小视频| 国产精品一区二区三区毛片淫片 | 91精品国产综合久久久蜜臀粉嫩| 成人春色激情网| 亚洲 自拍 另类 欧美 丝袜| 秋霞视频一区二区| 国产91在线视频蝌蚪| 激情欧美一区二区三区| 精品日本高清在线播放| 国产日韩欧美中文| 人妻精品久久久久中文字幕| 精品推荐国产麻豆剧传媒| 美女日韩欧美| 国产成人精品免费看| 亚洲午夜精品久久久久久性色| 亚洲人成影视在线观看| 久久久综合久久久| 中文字幕第5页| 日韩欧美午夜| 久草在线视频精品| 天天干天天操av| 在线免费观看a视频| 亚洲经典在线看| 在线视频观看一区| 国产精品久久久一区二区三区| 精品人妻中文无码av在线| eeuss影院www免费影院| 欧美日韩夜夜| 亚洲成av人片一区二区| 3d动漫啪啪精品一区二区免费| 日本乱子伦xxxx| 免费人成网ww777kkk手机| 久久悠悠精品综合网| 亚洲制服丝袜在线| 亚洲精品欧美极品| 男女性高潮免费网站| 无国产精品白浆是免费| 黄色片一区二区三区| 麻豆tv在线| 日本亚洲天堂网| 亚洲精品视频网上网址在线观看| 日本免费成人网| 亚洲精品一区二区三区新线路| 草美女在线观看| 成人涩涩免费视频| 欧美在线视频一区二区| 大又大又粗又硬又爽少妇毛片| 天天摸天天干| 欧美日韩第一区| 亚洲精品福利在线| 三级在线视频观看| 国产精品在线| 欧美精选视频在线观看| 天海翼一区二区三区四区在线观看| 欧美久久综合网| 欧美在线观看一区| 在线观看日韩片| 色噜噜在线播放| www.成人网| 精品污污网站免费看| 国产精品久久国产| 亚洲综合爱爱久久网| 欧美日韩一本| 91精品国产色综合久久| 无码专区aaaaaa免费视频| 亚洲国产精品久久网午夜小说| 美女一区二区在线观看| 欧美日韩一区在线观看| 久久99中文字幕| 国产chinese男男gaygay网站| 欧美一二区在线观看| 亚洲成人a级网| 69久久精品无码一区二区| 国产精品爽黄69| 久久免费看少妇高潮v片特黄 | 国模吧精品视频| 在线综合+亚洲+欧美中文字幕| 亚洲不卡中文字幕无码| 一个人看的www在线免费视频| 91精品一区国产高清在线gif| 亚洲毛片一区二区| 亚洲一区二区三区四区av| 国产导航在线| 国产精一品亚洲二区在线视频| 国产精品吊钟奶在线| 欧美一级视频免费观看| 婷婷午夜社区一区| 色综合天天综合狠狠| 国产美女网站在线观看| 免费看污网站| 日韩黄色小视频| 国产盗摄xxxx视频xxx69| 欧美一级免费在线| 国产成人在线观看网站| 国产在线xxx| 亚洲精品国产无天堂网2021| 亚洲欧美日韩另类精品一区二区三区| av亚洲男人天堂| 久久国产亚洲| 日韩在线观看精品| 中文字幕资源站| 黄频免费在线观看| 精品久久久久久久久久久| 免费在线观看亚洲视频| 黄色漫画在线免费观看| 国产成人啪午夜精品网站男同| 高清国产一区| 国语对白中文字幕| 午夜精品国产| 欧美一区第一页| 中文字幕视频一区二区| 中文字幕日韩高清在线| 日韩毛片在线观看| 又色又爽的视频| 欧美大片免费| 日韩午夜激情免费电影| 久久午夜夜伦鲁鲁片| 成人免费高清| 色综合久久久久综合体桃花网| 久久精品免费网站| 青青草手机在线| 一区二区在线观看免费| 国产成人手机视频| 日韩二区三区| 亚洲一区二区三区视频在线| 97公开免费视频| 国产精品四虎| 亚洲午夜久久久久久久久久久| 国产成人av影视| 高清毛片在线看| 日韩欧美aaa| 免费a v网站| 日本电影欧美片| 亚洲精品99久久久久中文字幕| 国产极品美女在线| 亚洲午夜精品| 久久人人爽人人爽爽久久| 国产女主播喷水视频在线观看| 国产欧美一区| 日韩免费视频在线观看| 色噜噜一区二区三区| 久久精品男女| 热舞福利精品大尺度视频| 777影院狠狠色| 亚洲国产成人自拍| 99视频精品免费| 91吃瓜网在线观看| 欧美亚洲综合久久| 亚洲午夜精品久久久久久高潮 | 久久久影院官网| 久操手机在线视频| 青青草视频免费在线观看| 亚洲成人激情av| 波多野结衣影院| 成人黄色免费网站| www.久久撸.com| 国产免费不卡视频| 亚洲一区二区毛片| 日韩高清国产精品| 在线人体午夜视频| 欧美性色xo影院| 日本二区在线观看| 日韩精品亚洲专区在线观看| 欧美极品欧美精品欧美视频| 五月婷婷六月丁香综合| 久久国产剧场电影| 成人av在线播放观看| aaa在线观看| 日韩精品一区二区在线观看| 日韩美女视频网站| 欧美国产91| 日韩av图片| 日韩黄色影片| 欧美一区二区精美| 日韩精品成人免费观看视频| 韩国在线一区| 亚洲va久久久噜噜噜久久狠狠| 青青视频在线观| 日韩一区二区在线观看视频播放| 成人毛片18女人毛片| 欧美午夜国产| 亚洲人体一区| 欧美天天影院| 亚洲欧美在线免费| 天堂成人在线视频| 91视频.com| 韩国三级视频在线观看| 亚洲一区av| 国产精品久久不能| jizz日本大全| 色视频欧美一区二区三区| 日韩精品视频播放| 嫩草成人www欧美| 日本免费不卡一区二区| 特黄毛片在线观看| 欧美精品九九久久|