【问题篇】activiti工作流转办并处理备注问题

        当处理activiti转办问题时,需要做的就是处理审批人和备注问题。

        处理的思路是,先将当前环节标志成转办标签,再通过BUSINESS_KEY_找到流程实例的历史记录,找到最新的一条复制一份出来,表示需要转办到的人的历史记录并设置好审批人(默认转办人的环节‘单位领导’也是做转办人的环节名字,如不是则手动处理下),在更换当前流程的审批人,将任务分到转办人那里去,再将原来最新的历史记录处理掉(通过修改endTime改为处理完成,并将主键进行替换,为了将他隔离开,不与复制出来的id冲突,再通过同样的方式进行comment表的处理并将comment表新增的记录与上面的相关)。

代码如下:

public Boolean giveOther(String taskId, String userCode, String message) {// 先查任务Task task = activitiService.loadTaskInfo(taskId);if (task == null) {throw new BusinessException("任务不存在");}task.setDescription("转办");taskService.saveTask(task);boolean result = false;if (!StringUtils.isEmpty(taskId)) {// 查询最新的审批记录List<ActHiTaskInst> list = jt.queryForBeans(ActHiTaskInst.class, " SELECT\n" +"\ta.* \n" +"FROM\n" +"\t`act_hi_taskinst` AS a\n" +"\tLEFT JOIN act_hi_procinst AS b ON b.PROC_INST_ID_ = a.PROC_INST_ID_ \n" +"\twhere b.BUSINESS_KEY_ = ?\n" +"ORDER BY\n" +"\ta.START_TIME_ DESC ", taskId);ActHiTaskInst oldHiTaskInst = list.get(0);// 复制一份最新的ActHiTaskInst hiTaskInst = new ActHiTaskInst();BeanUtils.copyProperties(oldHiTaskInst, hiTaskInst);hiTaskInst.setASSIGNEE_(userCode);//hiTaskInst.setNAME_("转办");hiTaskInst.setASSIGNEE_(userCode);hiTaskInst.setSTART_TIME_(new Date());actHiTaskInstRepo.save(hiTaskInst);// 更换审核人taskService.setAssignee(taskService.createTaskQuery().processInstanceBusinessKey(taskId).list().get(0).getId(), userCode);// 先处理原来的String id = UUIDUtil.getUUID();oldHiTaskInst.setEND_TIME_(new Date());oldHiTaskInst.setID_(id);actHiTaskInstRepo.save(oldHiTaskInst);// 处理备注// 查询最新的备注记录List<ActHiComment> list2 = jt.queryForBeans(ActHiComment.class, " SELECT\n" +"\ta.* \n" +"FROM\n" +"\t`act_hi_comment` AS a\n" +"\tLEFT JOIN act_hi_taskinst AS b ON a.PROC_INST_ID_ = b.PROC_INST_ID_ \n" +"WHERE\n" +"\ta.TASK_ID_ = ?\n" +"ORDER BY\n" +"\tb.START_TIME_ DESC ", hiTaskInst.getID_());ActHiComment oldActHiComment = list2.get(0);// 复制一份备注记录ActHiComment actHiComment = new ActHiComment();BeanUtils.copyProperties(oldActHiComment, actHiComment);actHiComment.setTASK_ID_(id);// 作为老的转办提出人的备注actHiComment.setMESSAGE_(message);actHiComment.setTYPE_("comment");actHiComment.setFULL_MSG_(message.getBytes(StandardCharsets.UTF_8));actHiCommentRepo.save(actHiComment);result = true;}return result;}
@Entity
@Table(name = "act_hi_taskinst")
@DynamicInsert
@DynamicUpdate
@Data
public class ActHiTaskInst {@Id@Column(name = "ID_")private String ID_;@Column(name = "PROC_DEF_ID_")private String PROC_DEF_ID_;@Column(name = "TASK_DEF_KEY_")private String TASK_DEF_KEY_;@Column(name = "PROC_INST_ID_")private String PROC_INST_ID_;@Column(name = "EXECUTION_ID_")private String EXECUTION_ID_;@Column(name = "NAME_")private String NAME_;@Column(name = "PARENT_TASK_ID_")private String PARENT_TASK_ID_;@Column(name = "DESCRIPTION_")private String DESCRIPTION_;@Column(name = "OWNER_")private String OWNER_;@Column(name = "ASSIGNEE_")private String ASSIGNEE_;@Column(name = "START_TIME_")private Date START_TIME_;@Column(name = "CLAIM_TIME_")private String CLAIM_TIME_;@Column(name = "END_TIME_")private Date END_TIME_;@Column(name = "DURATION_")private String DURATION_;@Column(name = "DELETE_REASON_")private String DELETE_REASON_;@Column(name = "PRIORITY_")private String PRIORITY_;@Column(name = "DUE_DATE_")private String DUE_DATE_;@Column(name = "FORM_KEY_")private String FORM_KEY_;@Column(name = "CATEGORY_")private String CATEGORY_;@Column(name = "TENANT_ID_")private String TENANT_ID_;}

 save方法是采用jpa的方式,可自行采用项目对应的方式使用。taskService是activiti的api。

效果如下: 

欢迎大佬们交流。。

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

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

相关文章

RecombiMAb anti-mouse Ly6G,1A8-CP129单克隆抗体

1A8-CP129单克隆抗体是原始1A8单克隆抗体的重组嵌合型抗体。可变结构域序列与原始1A8相同&#xff0c;但是恒定区序列已经从大鼠IgG2a变为小鼠IgG2a。1A8-CP129单克隆抗体像原始克隆号的大鼠IgG2a抗体一样&#xff0c;不包含Fc突变。 1A8-CP129单克隆抗体与小鼠Ly6G反应。Ly6G分…

C# CAD交互界面-自定义工具栏(二)

运行环境 vs2022 c# cad2016 调试成功 一、引用 acdbmgd.dllacmgd.dllaccoremgd.dllAutodesk.AutoCAD.Interop.Common.dllAutodesk.AutoCAD.Interop.dll using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.T…

2. Maven 继承与聚合

目录 2. 2.1 继承 2.2继承关系 2.2.1 思路分析 2.2.2 实现 2.1.2 版本锁定 2.1.2.1 场景 2.1.2.2 介绍 2.1.2.3 实现 2.1.2.4 属性配置 2.2 聚合 2.2.1 介绍 2.2.2 实现 2.3 继承与聚合对比 maven1&#xff1a;分模块设计开发 2. 在项目分模块开发之后啊&#x…

基于Vue的移动端UI框架整理

一、Vant 官方地址&#xff1a;https://youzan.github.io/vant/#/zh-CN/ 简介&#xff1a;有赞公司开发。 特性&#xff1a;60 高质量组件、90% 单元测试覆盖率、完善的中英文文档和示例、支持按需引入、支持主题定制、支持国际化、支持 TS、支持 SSR。 特别说明&#xff1…

Java老兵 转C语言,需要学习的点(最易懂的解释)

一、static 1.1 修饰函数内的局部变量&#xff1a; void sayHi(void) { static int index 5;index; }多次调用sayHi函数&#xff0c;index 5 只有在第一次调用的时候初始化一次&#xff0c;后面的多次调用&#xff0c;此句话就不执行了。 1.2 修饰全局变量或…

python将Word页面纸张方向设置为横向

通过python-docx的章节属性&#xff0c;就可以更改纸张方向、纸张尺寸。 import docx from docx.enum.section import WD_ORIENT from docx.shared import Cmdocument docx.Document() section document.sections[0]# 设置纸张大小为A4大小 section.page_width Cm(21) sect…

JAVA建造者模式详解

建造者模式 1 建造者模式介绍 建造者模式 (builder pattern), 也被称为生成器模式 , 是一种创建型设计模式. 定义: 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 **建造者模式要解决的问题 ** 建造者模式可以将部件和其组装过程分开…

代理与Reflect反射

属性描述符 Proprety Descriptor 属性描述符 用于描述一个属性的相关信息 1.Object.getOwnPropertyDescriptor(对象&#xff0c;属性名) 可以得到一个对象的 某个属性的属性描述符 Object.getOwnPropertyDescriptors(对象) 可以得到某个对象的所有属性描述符 如果需要为某个…

重新排列链表

不难注意到目标链表即为将原链表分成前后两段然后将后半段反转再依照某种规则链接得到的。这样我们的任务即可划分为三步&#xff1a;找到原链表的中点&#xff0c;将原链表的右半端反转&#xff0c;将原链表的两端合并。可以通过快慢指针找到中点不过要注意链表长度分别为奇偶…

算法学习——LeetCode力扣哈希表篇1

算法学习——LeetCode力扣哈希表篇1 242. 有效的字母异位词 242. 有效的字母异位词 - 力扣&#xff08;LeetCode&#xff09; 描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同…

Python学习从0到1 day15 Python函数进阶

什么东西的可塑性最强呢&#xff1f; 是水&#xff0c;水能载舟 exciting ——24.2.6 一、函数的多返回值 当一个函数需要多个返回值&#xff0c;该如何书写代码&#xff1f; 按照返回值的顺序&#xff0c;写对应顺序的多个遍历接收即可 变量之间用逗号隔开 支持不同类型的数据…

爬虫(三)

1.JS逆向实战破解X-Bogus值 X-Bogus:以DFS开头&#xff0c;总长28位 答案是X-Bogus,因为会把负载里面所有的值打包生成X-Boogus 1.1 找X-Bogus加密位置&#xff08;请求堆栈&#xff09; 1.1.1 绝招加高级断点&#xff08;日志断点&#xff09; 日志断点看有没有X-B值 日志…