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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Flowable快速工作流脚手架_Jsite角色授权不显示

發(fā)布時(shí)間:2024/9/27 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flowable快速工作流脚手架_Jsite角色授权不显示 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JSite 快速開發(fā)框架,內(nèi)置Flowable工作流引擎 · 五大基礎(chǔ)模塊 · 前后端基礎(chǔ)代碼自動(dòng)生成 · 權(quán)限精確控制。




說明:此版本我已經(jīng)調(diào)通,最新版本正在更新,頁(yè)面未處理好,因此采用歷史版本。

文章目錄

  • 一、克隆/打開項(xiàng)目
    • 1.1. 搜索項(xiàng)目
    • 1.2. 復(fù)制ssh地址
    • 1.3. 將項(xiàng)目克隆到本地
    • 1.4. idea打開項(xiàng)目`JSite`
  • 二、配置項(xiàng)目
    • 2.1. 解決依賴
      • 2.1.1. 配置maven本地倉(cāng)庫(kù)
      • 2.1.2. 配置阿里云鏡像地址鏡像
    • 2.2. 切換到歷史節(jié)點(diǎn)
    • 2.3. 修改數(shù)據(jù)庫(kù)連接信息
    • 2.4. 初始化數(shù)據(jù)庫(kù)腳本
    • 2.5. 配置Redis
    • 2.6. 啟動(dòng)Redis
    • 2.7. 關(guān)閉演示模式
      • 2.7.1. 關(guān)閉演示模式開關(guān)
      • 2.7.2. 切換正常模式
  • 三、啟動(dòng)項(xiàng)目
    • 3.1. 啟動(dòng)類報(bào)錯(cuò)
    • 3.2. 重新編譯打包
  • 四、請(qǐng)假實(shí)戰(zhàn)
    • 4.1. 部署流程
    • 4.2. 發(fā)起流程
    • 4.3. 已發(fā)任務(wù)查看
    • 4.4. 部門經(jīng)理流轉(zhuǎn)
      • 4.4.1. 登錄dept賬號(hào)
      • 4.4.2. 在待辦任務(wù)中,簽收任務(wù)
      • 4.4.3. 在待辦任務(wù)中,辦理任務(wù)

一、克隆/打開項(xiàng)目

1.1. 搜索項(xiàng)目

  • 在碼云搜索框中搜索JSite
  • 或者直接點(diǎn)擊碼云項(xiàng)目鏈接:
    https://gitee.com/baseweb/JSite

1.2. 復(fù)制ssh地址

1.3. 將項(xiàng)目克隆到本地

git clone git@gitee.com:baseweb/JSite.git

1.4. idea打開項(xiàng)目JSite

二、配置項(xiàng)目

2.1. 解決依賴

2.1.1. 配置maven本地倉(cāng)庫(kù)

2.1.2. 配置阿里云鏡像地址鏡像

2.2. 切換到歷史節(jié)點(diǎn)

git checkout 47c0d6c8

2.3. 修改數(shù)據(jù)庫(kù)連接信息

  • 前提:在mysql中創(chuàng)建jsite數(shù)據(jù)庫(kù)

2.4. 初始化數(shù)據(jù)庫(kù)腳本

模塊數(shù)據(jù)庫(kù)腳本
文件模塊jsite_file_mysql.sql
代碼生成模塊jsite_gen_mysql.sql
oa工作流模塊jsite_oa_mysql.sql
系統(tǒng)模塊jsite_sys_mysql.sql
定時(shí)器模塊jsite_sys_qrtz_mysql.sql
測(cè)試模塊jsite_test_mysql.sql
初始化數(shù)據(jù)jsite-init.sql




項(xiàng)目啟動(dòng)后截圖:

2.5. 配置Redis

2.6. 啟動(dòng)Redis


雙擊運(yùn)行即可

2.7. 關(guān)閉演示模式

2.7.1. 關(guān)閉演示模式開關(guān)

2.7.2. 切換正常模式

static/modler/scripts/controllers/processes.js
  • 在119行

三、啟動(dòng)項(xiàng)目

3.1. 啟動(dòng)類報(bào)錯(cuò)

  • 問題現(xiàn)象
  • 問題定位
  • 再啟動(dòng)類中,PropertiesUtils這個(gè)工具類是com.jsite.common.io.PropertiesUtils中的類,初步判斷是,jsite-common模塊沒有安裝板本地倉(cāng)庫(kù),導(dǎo)致jsite-web項(xiàng)目以來失敗。
  • 深一步追根溯源
  • 在jsite-web的pom.xml中,依賴了jsite-framework模塊
  • 進(jìn)入jsite-framework模塊的pom中


從上面可以看出,我們的初步判斷是正確的,那就好解決了,沒有安裝到本地倉(cāng)庫(kù),那就讓我們借助maven打包編譯插件幫我們安裝jsite-common到本地倉(cāng)庫(kù)就好了。

3.2. 重新編譯打包

  • 執(zhí)行命令
mvn clean install -DTests=true

或者
idea插件操作

  • 再次驗(yàn)證,沒有報(bào)錯(cuò)
  • 瀏覽器訪問:http://localhost:8081/jsite
演示系統(tǒng)賬號(hào)密碼
jsiteadmin
dept123456
jsitehr123456
jsiteuser123456
  • 部署流程,只能由系統(tǒng)管理員
  • 發(fā)起流程:都可以,前提是由系統(tǒng)管理員部署流程成功后,在發(fā)起流程的類表中才會(huì)顯示,然后每個(gè)人選擇對(duì)應(yīng)的流程,進(jìn)行節(jié)點(diǎn)流轉(zhuǎn)。

說明:上面3個(gè)賬號(hào)角色分別為系統(tǒng)管理員、部門經(jīng)理、HR,普通員工。
請(qǐng)假流程發(fā)起后,流程下一步自動(dòng)流轉(zhuǎn)到“部門經(jīng)理”角色賬號(hào)下,部門經(jīng)理審批后自動(dòng)流轉(zhuǎn)到“hr角色賬號(hào)下”。測(cè)試時(shí),需要登錄不同角色賬號(hào),在代辦任務(wù)中查看流程代辦任務(wù)。

  • 刷新頁(yè)面即可登陸成功

四、請(qǐng)假實(shí)戰(zhàn)

4.1. 部署流程





4.2. 發(fā)起流程

4.3. 已發(fā)任務(wù)查看



4.4. 部門經(jīng)理流轉(zhuǎn)

4.4.1. 登錄dept賬號(hào)

4.4.2. 在待辦任務(wù)中,簽收任務(wù)


4.4.3. 在待辦任務(wù)中,辦理任務(wù)


響應(yīng)碼500

  • 請(qǐng)求的url
  • 頁(yè)面?zhèn)鬟f的參數(shù)
  • 控制臺(tái)報(bào)錯(cuò)信息提取

    在獲取代辦列表FlowTaskService的104行

    在獲取代辦列表FlowTaskService的105行
e.setProcDefId(pd.getId());

這里需要tProcDefId對(duì)吧,程序中寫的是從pd中獲取,但是里面,沒有

其實(shí)這個(gè)tProcDefId在task中,因此需要修改代碼。

  • 點(diǎn)擊辦理,procDefId=undefined

    第一步進(jìn)FlowTaskController的form方法,調(diào)用getFormKey的service進(jìn)行業(yè)務(wù)處理



從上圖可以看出很明顯,沒有獲取到procDefId

,清除緩存,再次測(cè)試,點(diǎn)擊待辦任務(wù)菜單,debbug看程序,

procDefId=leave:1:b74aaad7-15d6-11ea-9f45-4a5ab6e330e5


  • 點(diǎn)擊辦理



    很明顯獲取到值了!!!
    f8跳過,頁(yè)面又拋出403,權(quán)限的錯(cuò)了,真是一波未平一波又起啊。

    從頁(yè)面很明顯是沒有辦理權(quán)限,導(dǎo)致403錯(cuò)誤,情有可原,對(duì)吧,那就給dept用戶配置權(quán)限唄,
    登錄jsite系統(tǒng)管理員賬號(hào),給dept用戶配置權(quán)限



    角色授權(quán)既然是空的,我想靜靜。看看控制臺(tái)報(bào)錯(cuò)信息再定位問題吧?

    從控制臺(tái)中可以看出,由2條信息比較醒目:
java.lang.ClassNotFoundException: com.jsite.modules.sys.utils.AreaOfficeUtils at com.jsite.modules.sys.web.RoleController.form(RoleController.java:74)

異常信息很明晰那說AreaOfficeUtils類,RoleController.java:74,既然有文件位置,那咱們就去看看吧,
從以下圖中可以看出,通過反射區(qū)找 com.jsite.modules.sys.utils.AreaOfficeUtils類,那就在程序中找找有這個(gè)類嗎?

程序我是看明白了,他想調(diào)用AreaOfficeUtils類的getOfficeList(獲取當(dāng)前用戶有權(quán)限訪問的部門方法),再utils包下就3個(gè)工具類,經(jīng)過查找,UserUtils類中,有g(shù)etOfficeList(獲取當(dāng)前用戶有權(quán)限訪問的部門方法),那就好辦了,類名修改一下即可,再次測(cè)試。

校色授權(quán),就顯示了。

但是,我就不明白了,想獲取一個(gè)工具類的方法,直接調(diào)用不就行了,如果是靜態(tài)的方法,直接用類名.調(diào)用不更方便。代碼還寫了折磨多行,浪費(fèi)。
代用的方法和我們預(yù)期的一樣靜態(tài)的,那就輕松+快樂了。


一行代碼就搞定了。哈哈哈!!!
測(cè)試一下,好不好使,對(duì)吧

從上圖可以看出,也好使。

dept用戶的辦理權(quán)限,我也配置好了,再去待辦任務(wù)菜單中,去辦理任務(wù)應(yīng)該就好了,光預(yù)測(cè)也不行,測(cè)試一下保險(xiǎn)。

任務(wù)辦理完了,在已辦任務(wù)菜單中,查看一下任務(wù)辦理的詳情不為過吧,
這里演示以,下面查看當(dāng)前節(jié)點(diǎn)信息,debug斷點(diǎn)調(diào)試了。


其實(shí),也是那個(gè)definitionId=undefined導(dǎo)致的,也是由于獲取的對(duì)象不對(duì),這里我直接修改程序。


解決方案:

//修改后的程序 e.setProcDefId(histTask.getProcessDefinitionId());


再次測(cè)試

任務(wù)辦理完了,在已辦任務(wù)(歷史)菜單中,查看一下任務(wù)辦理的節(jié)點(diǎn)信息不為過吧,

其實(shí),也是那個(gè)definitionId=undefined導(dǎo)致的,也是由于獲取的對(duì)象不對(duì),這里我直接修改程序。


解決方案:

//修改后的程序 e.setProcDefId(histTask.getProcessDefinitionId());


再次測(cè)試

下一個(gè)節(jié)點(diǎn)是hr,同理hr也需要權(quán)限

jsitehr登錄

在待辦任務(wù)菜單中,先對(duì)待辦任務(wù)進(jìn)行簽收,簽收之后進(jìn)行辦理。


在已辦任務(wù)菜單中,查看當(dāng)前節(jié)點(diǎn)信息

在已辦任務(wù)菜單中,查看詳情
節(jié)點(diǎn)流轉(zhuǎn)結(jié)束了,jsite發(fā)起流程的執(zhí)行人,查看一下歷史任務(wù)應(yīng)該吧。

先追蹤一下流程詳情

很明顯又是這個(gè)問題,大家應(yīng)該知道怎末改了吧,

再次測(cè)試

總上,異常現(xiàn)象有2種:

  • 在待辦任務(wù)/已辦任務(wù)/已發(fā)任務(wù)都會(huì)拋出異常,都是由于definitionId=undefined導(dǎo)致的
  • 由于沒有辦理權(quán)限導(dǎo)致的403
    到此,一個(gè)完整的工作流走完了。
  • 補(bǔ)充,在待辦任務(wù)菜單中會(huì)出現(xiàn)2種業(yè)務(wù)場(chǎng)景,上明只講了一種,直接在待辦任務(wù)列表中簽收任務(wù),然后辦理,已經(jīng)簽收的任務(wù),另外一種情況就是,我還未簽收,但是,我想先不簽收,先查看一下節(jié)點(diǎn)信息和流程詳情,也符合業(yè)務(wù)需要,這樣需要在待辦任務(wù)中添加這種業(yè)務(wù)場(chǎng)景。

    當(dāng)前屬于未簽收的業(yè)務(wù)場(chǎng)景:




    解決方案:

    //源程序// e.setProcDefId(pd.getId());//修改后e.setProcDefId(task.getProcessDefinitionId());



    源碼附上:

    /*** 獲取待辦列表* @param procDefKey 流程定義標(biāo)識(shí)* @return*/public Page<Flow> todoList(Flow act){String userId = UserUtils.getUser().getLoginName();//ObjectUtils.toString(UserUtils.getUser().getId());Page<Flow> result = new Page<Flow>();List<Flow> flowList = new ArrayList<Flow>();// =============== 已經(jīng)簽收的任務(wù) ===============TaskQuery todoTaskQuery = taskService.createTaskQuery().taskAssignee(userId).active().includeProcessVariables().orderByTaskCreateTime().desc();// 設(shè)置查詢條件if (StringUtils.isNotBlank(act.getProcDefKey())){todoTaskQuery.processDefinitionKey(act.getProcDefKey());}if (act.getBeginDate() != null){todoTaskQuery.taskCreatedAfter(act.getBeginDate());}if (act.getEndDate() != null){todoTaskQuery.taskCreatedBefore(act.getEndDate());}result.setCount(todoTaskQuery.count());// 查詢列表List<Task> todoList = todoTaskQuery.list();for (Task task : todoList) {Flow e = new Flow();e.setTaskId(task.getId());e.setTaskDefKey(task.getTaskDefinitionKey());e.setTaskName(task.getName());e.setAssignee(task.getAssignee());e.setCreateTime(task.getCreateTime());e.setExecutionId(task.getExecutionId());e.setVars(task.getProcessVariables());ProcessDefinition pd = ProcessDefCache.get(task.getProcessDefinitionId());//源程序// e.setProcDefId(pd.getId());//修改后e.setProcDefId(task.getProcessDefinitionId());e.setProcDefname(pd.getName());e.setProcDefKey(pd.getKey());e.setProcDefversion(pd.getVersion());e.setProcInsId(task.getProcessInstanceId());e.setStatus("todo");flowList.add(e);}// =============== 等待簽收的任務(wù) ===============TaskQuery toClaimQuery = taskService.createTaskQuery().taskCandidateUser(userId).includeProcessVariables().active().orderByTaskCreateTime().desc();// 設(shè)置查詢條件if (StringUtils.isNotBlank(act.getProcDefKey())){toClaimQuery.processDefinitionKey(act.getProcDefKey());}if (act.getBeginDate() != null){toClaimQuery.taskCreatedAfter(act.getBeginDate());}if (act.getEndDate() != null){toClaimQuery.taskCreatedBefore(act.getEndDate());}// 查詢列表List<Task> toClaimList = toClaimQuery.list();for (Task task : toClaimList) {Flow e = new Flow();e.setTaskId(task.getId());e.setTaskDefKey(task.getTaskDefinitionKey());e.setTaskName(task.getName());e.setAssignee(task.getAssignee());e.setCreateTime(task.getCreateTime());e.setExecutionId(task.getExecutionId());e.setVars(task.getProcessVariables());ProcessDefinition pd = ProcessDefCache.get(task.getProcessDefinitionId());//源程序// e.setProcDefId(pd.getId());//修改后e.setProcDefId(task.getProcessDefinitionId());e.setProcDefname(pd.getName());e.setProcDefKey(pd.getKey());e.setProcDefversion(pd.getVersion());e.setProcInsId(task.getProcessInstanceId());e.setStatus("claim");flowList.add(e);}logger.info("==FLOWABLE LIST=="+JsonMapper.toJsonString(flowList));result.setList(flowList);return result;}

    總結(jié)

    以上是生活随笔為你收集整理的Flowable快速工作流脚手架_Jsite角色授权不显示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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