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

JSite 快速开发框架,内置Flowable工作流引擎 · 五大基础模块 · 前后端基础代码自动生成 · 权限精确控制。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

说明:此版本我已经调通,最新版本正在更新,页面未处理好,因此采用历史版本。

文章目录

  • 一、克隆/打开项目
    • 1.1. 搜索项目
    • 1.2. 复制ssh地址
    • 1.3. 将项目克隆到本地
    • 1.4. idea打开项目`JSite`
  • 二、配置项目
    • 2.1. 解决依赖
      • 2.1.1. 配置maven本地仓库
      • 2.1.2. 配置阿里云镜像地址镜像
    • 2.2. 切换到历史节点
    • 2.3. 修改数据库连接信息
    • 2.4. 初始化数据库脚本
    • 2.5. 配置Redis
    • 2.6. 启动Redis
    • 2.7. 关闭演示模式
      • 2.7.1. 关闭演示模式开关
      • 2.7.2. 切换正常模式
  • 三、启动项目
    • 3.1. 启动类报错
    • 3.2. 重新编译打包
  • 四、请假实战
    • 4.1. 部署流程
    • 4.2. 发起流程
    • 4.3. 已发任务查看
    • 4.4. 部门经理流转
      • 4.4.1. 登录dept账号
      • 4.4.2. 在待办任务中,签收任务
      • 4.4.3. 在待办任务中,办理任务

一、克隆/打开项目

1.1. 搜索项目

  • 在码云搜索框中搜索JSite
  • 或者直接点击码云项目链接:
    https://gitee.com/baseweb/JSite
    在这里插入图片描述在这里插入图片描述

1.2. 复制ssh地址

在这里插入图片描述

1.3. 将项目克隆到本地

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

在这里插入图片描述

1.4. idea打开项目JSite

在这里插入图片描述

二、配置项目

2.1. 解决依赖

2.1.1. 配置maven本地仓库

在这里插入图片描述

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

在这里插入图片描述

2.2. 切换到历史节点

在这里插入图片描述

 git checkout 47c0d6c8

在这里插入图片描述

2.3. 修改数据库连接信息

  • 前提:在mysql中创建jsite数据库
    在这里插入图片描述

2.4. 初始化数据库脚本

模块数据库脚本
文件模块jsite_file_mysql.sql
代码生成模块jsite_gen_mysql.sql
oa工作流模块jsite_oa_mysql.sql
系统模块jsite_sys_mysql.sql
定时器模块jsite_sys_qrtz_mysql.sql
测试模块jsite_test_mysql.sql
初始化数据jsite-init.sql

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
项目启动后截图:
在这里插入图片描述

2.5. 配置Redis

在这里插入图片描述

2.6. 启动Redis

在这里插入图片描述
双击运行即可
在这里插入图片描述

2.7. 关闭演示模式

2.7.1. 关闭演示模式开关

在这里插入图片描述

2.7.2. 切换正常模式

static/modler/scripts/controllers/processes.js
  • 在119行
    在这里插入图片描述在这里插入图片描述

三、启动项目

3.1. 启动类报错

  • 问题现象
    在这里插入图片描述
  • 问题定位
  • 再启动类中,PropertiesUtils这个工具类是com.jsite.common.io.PropertiesUtils中的类,初步判断是,jsite-common模块没有安装板本地仓库,导致jsite-web项目以来失败。
    在这里插入图片描述
  • 深一步追根溯源
  • 在jsite-web的pom.xml中,依赖了jsite-framework模块
    在这里插入图片描述
  • 进入jsite-framework模块的pom中

在这里插入图片描述
从上面可以看出,我们的初步判断是正确的,那就好解决了,没有安装到本地仓库,那就让我们借助maven打包编译插件帮我们安装jsite-common到本地仓库就好了。

3.2. 重新编译打包

  • 执行命令
mvn clean install -DTests=true

或者
idea插件操作
在这里插入图片描述

  • 再次验证,没有报错
    在这里插入图片描述
  • 浏览器访问:http://localhost:8081/jsite
演示系统账号密码
jsiteadmin
dept123456
jsitehr123456
jsiteuser123456
  • 部署流程,只能由系统管理员
  • 发起流程:都可以,前提是由系统管理员部署流程成功后,在发起流程的类表中才会显示,然后每个人选择对应的流程,进行节点流转。

说明:上面3个账号角色分别为系统管理员、部门经理、HR,普通员工。
请假流程发起后,流程下一步自动流转到“部门经理”角色账号下,部门经理审批后自动流转到“hr角色账号下”。测试时,需要登录不同角色账号,在代办任务中查看流程代办任务。
在这里插入图片描述

  • 刷新页面即可登陆成功
    在这里插入图片描述

四、请假实战

4.1. 部署流程

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

4.2. 发起流程

在这里插入图片描述在这里插入图片描述在这里插入图片描述

4.3. 已发任务查看

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.4. 部门经理流转

4.4.1. 登录dept账号

在这里插入图片描述

4.4.2. 在待办任务中,签收任务

在这里插入图片描述
在这里插入图片描述

4.4.3. 在待办任务中,办理任务

在这里插入图片描述
响应码500
在这里插入图片描述

  • 请求的url
    在这里插入图片描述
  • 页面传递的参数
    在这里插入图片描述
  • 控制台报错信息提取
    在这里插入图片描述
    在获取代办列表FlowTaskService的104行
    在这里插入图片描述
    在获取代办列表FlowTaskService的105行
e.setProcDefId(pd.getId());

这里需要tProcDefId对吧,程序中写的是从pd中获取,但是里面,没有
在这里插入图片描述
其实这个tProcDefId在task中,因此需要修改代码。
在这里插入图片描述

  • 点击办理,procDefId=undefined
    在这里插入图片描述
    第一步进FlowTaskController的form方法,调用getFormKey的service进行业务处理

在这里插入图片描述
在这里插入图片描述
从上图可以看出很明显,没有获取到procDefId

,清除缓存,再次测试,点击待办任务菜单,debbug看程序,

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

在这里插入图片描述
在这里插入图片描述

  • 点击办理
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    很明显获取到值了!!!
    f8跳过,页面又抛出403,权限的错了,真是一波未平一波又起啊。
    在这里插入图片描述
    从页面很明显是没有办理权限,导致403错误,情有可原,对吧,那就给dept用户配置权限呗,
    登录jsite系统管理员账号,给dept用户配置权限
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    角色授权既然是空的,我想静静。看看控制台报错信息再定位问题吧?
    在这里插入图片描述
    从控制台中可以看出,由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,既然有文件位置,那咱们就去看看吧,
从以下图中可以看出,通过反射区找 com.jsite.modules.sys.utils.AreaOfficeUtils类,那就在程序中找找有这个类吗?
在这里插入图片描述
程序我是看明白了,他想调用AreaOfficeUtils类的getOfficeList(获取当前用户有权限访问的部门方法),再utils包下就3个工具类,经过查找,UserUtils类中,有getOfficeList(获取当前用户有权限访问的部门方法),那就好办了,类名修改一下即可,再次测试。
在这里插入图片描述
校色授权,就显示了。
在这里插入图片描述
但是,我就不明白了,想获取一个工具类的方法,直接调用不就行了,如果是静态的方法,直接用类名.调用不更方便。代码还写了折磨多行,浪费。
代用的方法和我们预期的一样静态的,那就轻松+快乐了。
在这里插入图片描述
在这里插入图片描述
一行代码就搞定了。哈哈哈!!!
测试一下,好不好使,对吧
在这里插入图片描述
从上图可以看出,也好使。

dept用户的办理权限,我也配置好了,再去待办任务菜单中,去办理任务应该就好了,光预测也不行,测试一下保险。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

任务办理完了,在已办任务菜单中,查看一下任务办理的详情不为过吧,
这里演示以,下面查看当前节点信息,debug断点调试了。
在这里插入图片描述
在这里插入图片描述
其实,也是那个definitionId=undefined导致的,也是由于获取的对象不对,这里我直接修改程序。
在这里插入图片描述
在这里插入图片描述
解决方案:

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

在这里插入图片描述
再次测试
在这里插入图片描述

任务办理完了,在已办任务(历史)菜单中,查看一下任务办理的节点信息不为过吧,
在这里插入图片描述
其实,也是那个definitionId=undefined导致的,也是由于获取的对象不对,这里我直接修改程序。
在这里插入图片描述
在这里插入图片描述
解决方案:

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

在这里插入图片描述
再次测试
在这里插入图片描述
下一个节点是hr,同理hr也需要权限
在这里插入图片描述
jsitehr登录
在这里插入图片描述
在待办任务菜单中,先对待办任务进行签收,签收之后进行办理。

在这里插入图片描述
在已办任务菜单中,查看当前节点信息
在这里插入图片描述

在已办任务菜单中,查看详情在这里插入图片描述
节点流转结束了,jsite发起流程的执行人,查看一下历史任务应该吧。
在这里插入图片描述
先追踪一下流程详情
在这里插入图片描述
在这里插入图片描述

很明显又是这个问题,大家应该知道怎末改了吧,
在这里插入图片描述

在这里插入图片描述

再次测试
在这里插入图片描述
在这里插入图片描述

总上,异常现象有2种:

  1. 在待办任务/已办任务/已发任务都会抛出异常,都是由于definitionId=undefined导致的
  2. 由于没有办理权限导致的403
    到此,一个完整的工作流走完了。

补充,在待办任务菜单中会出现2种业务场景,上明只讲了一种,直接在待办任务列表中签收任务,然后办理,已经签收的任务,另外一种情况就是,我还未签收,但是,我想先不签收,先查看一下节点信息和流程详情,也符合业务需要,这样需要在待办任务中添加这种业务场景。

当前属于未签收的业务场景:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解决方案:

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

在这里插入图片描述
在这里插入图片描述
源码附上:

/*** 获取待办列表* @param procDefKey 流程定义标识* @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>();// =============== 已经签收的任务  ===============TaskQuery todoTaskQuery = taskService.createTaskQuery().taskAssignee(userId).active().includeProcessVariables().orderByTaskCreateTime().desc();// 设置查询条件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);}// =============== 等待签收的任务  ===============TaskQuery toClaimQuery = taskService.createTaskQuery().taskCandidateUser(userId).includeProcessVariables().active().orderByTaskCreateTime().desc();// 设置查询条件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;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国撸串指北:13万家烧烤店的吃货最爱

戳蓝字“CSDN云计算”关注我们哦&#xff01;数据分析&#xff1a;还是更爱火锅的朱小五内容撰写&#xff1a;最爱干豆腐卷的王小九来源|凹凸数读对美食最大的肯定无疑就是那操着不同口音说出的“好吃&#xff01;”二字。——《人生一串》豆瓣短评以美食慰藉夜归人&#xff0c…

新功能:阿里云负载均衡支持访问日志功能(可能是这个星球上最好用的访问日志)...

摘要&#xff1a; 1. Greetings :) 2. 什么是负载均衡访问日志 3. 负载均衡访问日志有什么作用 4. 如何使用负载均衡访问日志功能 4.1. 开通访问日志 4.2. 查询访问日志 点此查看原文&#xff1a;http://click.aliyun.com/m/42584/ 负载均衡访问日志&#xff08;7层&#xff09…

绿联串口线linux驱动下载,绿联usb转db9驱动下载

绿联usb转db9串口线驱动是一款应用十分广泛的usb转串口驱动程序&#xff0c;本站提供的资源适用于ftdi芯片&#xff0c;具有体积小、易操作的特点&#xff0c;安装过程并不复杂&#xff0c;帮助你快速进行串口线的转换工作&#xff01;驱动介绍绿联的usb转串口线有两种&#xf…

阿里给所有卖家发福利:全球首个人工智能中文字库免费用

摘要&#xff1a; 你打开手机淘宝&#xff0c;精美的海报让你目不转睛&#xff0c;你下了单&#xff0c;从快递员手中接过商品&#xff0c;心满意足的那一刻&#xff0c;你不会想到自己在掏钱买下商品的同时也为海报买了单&#xff0c;从模特、摄影到设计师的后期处理&#xff…

第2篇:Flowable快速工作流脚手架Jsite_配置项目

接上一篇&#xff1a;第1篇&#xff1a;Flowable快速工作流脚手架Jsite_克隆项目 https://blog.csdn.net/weixin_40816738/article/details/103387442 说明&#xff1a;此版本我已经调通&#xff0c;最新版本正在更新&#xff0c;页面未处理好&#xff0c;因此采用历史版本。 文…

如何高效地准备技术面试?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | Windson Yan来源 | www.enginego.org刚开始参加工作的时候&#xff0c;我对面试总是很恐惧&#xff0c;既担心简历无法通过初筛&#xff0c;也担心即使简历通过筛选&#xff0c;因为面试经验不多以及基础知识不扎实而导致发挥…

重要的机器学习算法

摘要&#xff1a; 本文旨在为那些获取关于重要机器学习概念知识的人们提供一些机器学习算法&#xff0c;同时免费提供相关的材料和资源。并且附上相关算法的程序实现。点此查看原文&#xff1a;http://click.aliyun.com/m/42631/本文旨在为那些获取关于重要机器学习概念知识的人…

linux红帽知识内容,RedHat基础入门(一)

Tips&#xff1a;转载自作者TedLau_R怎么说呢&#xff0c;要想学好linux&#xff0c;记命令肯定是必不可少的&#xff0c;虽然命令很多&#xff0c;但是我们不用害怕&#xff0c;其实用的一些常用的命令不算多&#xff0c;我们多刷题&#xff0c;多敲命令就一定可以学好它。当然…

如何从零开始用Keras开发一个机器翻译系统

摘要&#xff1a; 作者拥有大量的实战经验&#xff0c;快来跟着作者开发属于你自己的神经网络翻译系统吧。点此查看原文&#xff1a;http://click.aliyun.com/m/42632/机器翻译是一项非常具有挑战性的任务&#xff0c;按照传统方法是使用高度复杂的语言知识开发的大型统计模型。…

第1篇:Flowable快速工作流脚手架Jsite_克隆项目

JSite 快速开发框架&#xff0c;内置Flowable工作流引擎 五大基础模块 前后端基础代码自动生成 权限精确控制。 说明&#xff1a;此版本我已经调通&#xff0c;最新版本正在更新&#xff0c;页面未处理好&#xff0c;因此采用历史版本。 文章目录一、克隆/打开项目1. 搜索项…

基于阿里云MaxCompute实现游戏数据运营

摘要&#xff1a; 一、总览 一个游戏/系统的业务数据分析&#xff0c;总体可以分为图示的几个关键步骤&#xff1a; 1、数据采集&#xff1a;通过SDK埋点或者服务端的方式获取业务数据&#xff0c;并通过分布式日志收集系统&#xff0c;将各个服务器中的数据收集起来并送到指…

Spark精华问答 | 为什么选择Spark作为流计算引擎?

总的来说&#xff0c;Spark采用更先进的架构&#xff0c;使得灵活性、易用性、性能等方面都比Hadoop更有优势&#xff0c;有取代Hadoop的趋势&#xff0c;但其稳定性有待进一步提高。我总结&#xff0c;具体表现在如下几个方面。1Q&#xff1a;为什么选择Kafka去承担类似数据总…

linux c调用wcf服务,Silverlight+WCF实现跨域调用

在这篇文章中&#xff0c;WCF扮演服务器&#xff0c;向外提供LoginVaild服务&#xff1b;Silverlight扮演客户端&#xff0c;调用WCF提供的LoginVaild服务。思路有了&#xff0c;下面进行代码实现。数据库脚本实现新建T_User表&#xff0c;在表中添加两个字段username、passwor…

第3篇:Flowable快速工作流脚手架Jsite_关闭演示模式

接上一篇&#xff1a;第2篇&#xff1a;Flowable快速工作流脚手架Jsite_配置项目 https://blog.csdn.net/weixin_40816738/article/details/103387623 说明&#xff1a;此版本我已经调通&#xff0c;最新版本正在更新&#xff0c;页面未处理好&#xff0c;因此采用历史版本。 文…

从单租户IaaS到多租户PaaS——金融级别大数据平台MaxCompute的多租户隔离实践

摘要&#xff1a;在2017年云栖大会•北京峰会的大数据专场中&#xff0c;来自阿里云的高级技术专家李雪峰带来了主题为《金融级别大数据平台的多租户隔离实践》的演讲。在分享中&#xff0c;李雪峰首先介绍了基于传统IaaS单租户架构做隔离时面临的问题&#xff1b;然后&#xf…

IDC 2019Q1云市场报告重磅出炉;英特尔与百度签署3年新协议;谷歌收购云存储公司 Elastifile,增强自家……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go ChinaJoy中任天堂亮相&#…

可靠度理论中“设计基准期”、“设计使用年限”、“使用寿命”几个概念的区分

文章目录 0. 背景1. 重现期2. 设计基准期3. 设计使用年限调整系数4. 一把杆秤5. 调整系数的补充说明Last 0. 背景 在可靠度理论中&#xff0c;经常遇见“设计基准期”、“设计使用年限”、“使用寿命”几个概念。这些概念搞不清楚对于梳理结构荷载组合而言就是致命的。本文也是…

第4篇:Flowable快速工作流脚手架Jsite_启动项目

接上一篇&#xff1a;第3篇&#xff1a;Flowable快速工作流脚手架Jsite_关闭演示模式 https://blog.csdn.net/weixin_40816738/article/details/103388349 说明&#xff1a;此版本我已经调通&#xff0c;最新版本正在更新&#xff0c;页面未处理好&#xff0c;因此采用历史版本…

基于MaxCompute搭建社交好友推荐系统

摘要&#xff1a;本次由阿里云驻云科技资深架构师翟永东带来了“基于MaxCompute搭建社交好友推荐系统”为主题的分享&#xff0c;主要对大数据在好友推荐系统中的应用、好友推荐系统的分析模型、好友推荐系统在阿里云上的实现方式和MaxCompute技术进行了精彩的介绍。 点此查看原…

高德地图基于阿里云MaxCompute的最佳实践

摘要&#xff1a; 云计算带来的变革不言而喻&#xff0c;作为一种新型的IT交付模式&#xff0c;切实为企业节省IT成本、加快IT与企业业务结合效率、提升创新能力、加强管理水平以及增强系统本身的可靠性等方面提供巨大支持&#xff0c;是企业实现新发展的重要途径&#xff0c;它…