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

简介: 【问题篇】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。

效果如下:

欢迎大佬们交流。。

目录
相关文章
钉钉审批实例提交接口 按照文档格式传值后提示value为必填值
我已经按照文档格式填写了value也有值,还是报错"message": "value is mandatory for this action."
|
8月前
|
前端开发
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
657 0
|
8月前
|
程序员 vr&ar
【虚幻引擎】DTProjectSettings 蓝图获取基本项目配置插件使用说明 获取项目命名,项目版本,公司名,公司识别名,主页,联系方式
本插件可以使用蓝图获取到项目的一些基本配置,如获取:公司名、公司识别名、版权声明、描述、主页、许可条款、隐私政策、项目ID、项目命名、项目版本、支持联系方式、项目显示标题、项目调试标题信息、应保留窗口宽高比、使用无边框窗口、以VR启动、允许窗口重设大小、允许关闭、允许最大化、允许最小化、虚假立体渲染设备的眼部偏移、视野用于虚假立体渲染设备。
79 0
【虚幻引擎】DTProjectSettings 蓝图获取基本项目配置插件使用说明 获取项目命名,项目版本,公司名,公司识别名,主页,联系方式
|
8月前
|
数据可视化 API uml
【有奖调研】开发文档功能升级:接口分组更清晰;增加参数中文名
【有奖调研】开发文档功能升级:接口分组更清晰;增加参数中文名
66 0
织梦dedecms会员发布文章内容自动过滤外部链接的方法
织梦会员中心发布文章自动过滤外部外部链接,保留本站站内链接。这个织梦默认后台本身带有这样的功能的,只是会员模块里没有而已。
|
测试技术 Windows
禅道项目管理软件 为提交Bug页面设置bug必填字段
禅道项目管理软件 为提交Bug页面设置bug必填字段
513 0
|
Android开发
【阿里开发手册】所有的类都必须添加创建者和创建日期——在Idea中创建类时自动添加作者信息
【阿里开发手册】所有的类都必须添加创建者和创建日期——在Idea中创建类时自动添加作者信息
459 0
【阿里开发手册】所有的类都必须添加创建者和创建日期——在Idea中创建类时自动添加作者信息
|
小程序
符合预期的留言板小程序,新增消息通知功能!快来试用吧
符合预期的留言板小程序,新增消息通知功能!快来试用吧
280 0
符合预期的留言板小程序,新增消息通知功能!快来试用吧
|
Web App开发 PHP
DEDE后台栏目管理处直接显示未审核文档数的修改方法
后台未审核的文档很多,每次审核内容的时候都是打开 等审核的档案 来查看未审核的内容的. 但是列表是根据发布时间进行排序的,如果想每个栏目审核几篇文档,就要去栏目管理处挨个打开栏目文档列表,看看是否有未审核的内容.
1266 0
|
Windows Android开发 iOS开发
云同步便签软件敬业签标记已完成事项怎么自定义已完成效果?
敬业签云便签软件可以跨平台、跨设备同步,目前同一账号的敬业签内容可以同步到安卓手机不同品牌,苹果手机、iPad、网页浏览器以及Windows电脑端(苹果Mac端未来将会上线)。
1104 0

热门文章

最新文章