首页 > 其他分享 >activiti查询发起、待办、已办理列表

activiti查询发起、待办、已办理列表

时间:2024-11-07 09:49:13浏览次数:3  
标签:activiti RES basProcessInfo List 列表 待办 BasProcessInfo new ID

目录

一、实体类

 二、服务实现类

 三、数据访问层


一、实体类

创建接收结果集的实体类。

代码如下:

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "用户查询", description = "查询用户待办、已执行、发起流程相信")
public class BasProcessInfo {
    private List<String> businessKey;

    @ApiModelProperty(value = "用户相关类型 0、与我相关、1、待处理、2、已处理、3、我的请求")
    private String type;
}
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "用户查询", description = "查询用户待办、已执行、发起流程相信")
public class ActStatus implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "执行状态")
    private String status;

    private List<BasProcessInfo> basProcessInfo;
}

 二、服务实现类

根据用户账号和类型查询不同的列表。

代码如下:

 /**
     * <p>
     * 根据用户账号获取正运行流程集合
     * </p >
     *
     * @param userCode 用户账号、
     *               type   查询类型、
     *               1、待办的、2、已处理的、3、我发起的
     * @return 流程处理及查询状态
     * @author 刘易彦
     * @custom.date 2024/6/29 10:35
     */
    @Override
    public ActStatus getBusinessKeyByUserType(String userCode, String type) {
        try {
            ActStatus result = new ActStatus();
            List<BasProcessInfo> basProcessInfos = new ArrayList<>();
            if(StringUtils.equals(type,"0")){
                List<String> relatedMyprocess = this.userMapper.relatedMyprocess(userCode);
                BasProcessInfo basProcessInfo = new BasProcessInfo();
                basProcessInfo.setBusinessKey(relatedMyprocess);
                basProcessInfo.setType("0");
                basProcessInfos.add(basProcessInfo);
            }
            if (StringUtils.equals(type, "1")) {
                //查询所有我待办的流程
                List<String> map = this.userMapper.taskCandidate(userCode);
                //赋值给返回结果集

                List<String> collect = map.stream()
                        .distinct()
                        .collect(Collectors.toList());
                BasProcessInfo basProcessInfo = new BasProcessInfo();
                basProcessInfo.setBusinessKey(collect);
                basProcessInfo.setType("1");
                basProcessInfos.add(basProcessInfo);
            }
            if (StringUtils.equals(type, "2")) {
                //查询所有我参与的流程
                List<Map<String, Object>> maps = this.userMapper.hisTaskCandidate(userCode);
                List<String> collect1 = new ArrayList<>();
                //筛选所有我参与未结束的流程
                if (ObjectUtils.isNotEmpty(maps)) {
                    //筛选出所有我参与的进行中的流程
                    collect1 = maps.stream().filter(a -> a.get("END_TIME_") == null).map(a -> (String) a.get("BUSINESS_KEY_")).distinct().collect(Collectors.toList());
                }
                BasProcessInfo basProcessInfo = new BasProcessInfo();
                basProcessInfo.setBusinessKey(collect1);
                basProcessInfo.setType("2");
                basProcessInfos.add(basProcessInfo);
            }
            if (StringUtils.equals(type, "3")) {
                //查询所有我发起的流程
                List<ProcessInstance> list = processEngine.getRuntimeService().createProcessInstanceQuery().startedBy(userCode).list();
                //查询所有我发起的未结束流程
                List<String> collect1 = list.stream().map(a -> a.getBusinessKey()).distinct().collect(Collectors.toList());
                BasProcessInfo basProcessInfo = new BasProcessInfo();
                basProcessInfo.setBusinessKey(collect1);
                basProcessInfo.setType("3");
                basProcessInfos.add(basProcessInfo);
            }else if(StringUtils.isEmpty(type)){
                //组装类型为0的数据
                List<String> relatedMyprocess = this.userMapper.relatedMyprocess(userCode);
                BasProcessInfo basProcessInfo = new BasProcessInfo();
                basProcessInfo.setBusinessKey(relatedMyprocess);
                basProcessInfo.setType("0");
                basProcessInfos.add(basProcessInfo);
                //组装类型为1的数据
                //查询所有我待办的流程
                List<String> map = this.userMapper.taskCandidate(userCode);
                //赋值给返回结果集
                List<String> collect = map.stream()
                        .distinct()
                        .collect(Collectors.toList());
                BasProcessInfo basProcessInfo1 = new BasProcessInfo();
                basProcessInfo1.setBusinessKey(collect);
                basProcessInfo1.setType("1");
                basProcessInfos.add(basProcessInfo1);
                //组装类型为2的数据
                //查询所有我参与的流程
                List<Map<String, Object>> maps = this.userMapper.hisTaskCandidate(userCode);
                List<String> collect1 = new ArrayList<>();
                //筛选所有我参与未结束的流程
                if (ObjectUtils.isNotEmpty(maps)) {
                    //筛选出所有我参与的进行中的流程
                    collect1 = maps.stream().filter(a -> a.get("END_TIME_") == null).map(a -> (String) a.get("BUSINESS_KEY_")).distinct().collect(Collectors.toList());
                }
                BasProcessInfo basProcessInfo2 = new BasProcessInfo();
                basProcessInfo2.setBusinessKey(collect1);
                basProcessInfo2.setType("2");
                basProcessInfos.add(basProcessInfo2);
                //组装类型为3的数据
                //查询所有我发起的流程
                List<ProcessInstance> list = processEngine.getRuntimeService().createProcessInstanceQuery().startedBy(userCode).list();
                //查询所有我发起的未结束流程
                List<String> collect2 = list.stream().map(a -> a.getBusinessKey()).distinct().collect(Collectors.toList());
                BasProcessInfo basProcessInfo3 = new BasProcessInfo();
                basProcessInfo3.setBusinessKey(collect2);
                basProcessInfo3.setType("3");
                basProcessInfos.add(basProcessInfo3);
            }
            result.setBasProcessInfo(basProcessInfos);
            result.setStatus(ActivitiConstants.MYQUERY_SUCCESS);
            return result;
        }catch (Exception e){
            ActStatus result = new ActStatus();
            result.setStatus(ActivitiConstants.MYQUERY_FAIL);
            return result;
        }
    }

 三、数据访问层

查询activiti表的数据。

代码如下:

 <select id="relatedMyprocess" resultType="String">
		SELECT DISTINCT
			a.BUSINESS_KEY_
		FROM
			ACT_HI_PROCINST a,
			(
				SELECT DISTINCT
					RES.*
				FROM
					ACT_HI_TASKINST RES
				INNER JOIN ACT_HI_IDENTITYLINK HI ON HI.TASK_ID_ = RES.ID_
				WHERE
					HI.USER_ID_ = #{userId}
				OR RES.ASSIGNEE_ = #{userId}
				ORDER BY
					RES.ID_ ASC
			) b
		WHERE
		a.PROC_INST_ID_ = b.PROC_INST_ID_ or a.START_USER_ID_ = #{userId}
	</select>
 <select id="taskCandidate" resultType="String">
		  SELECT
		a.BUSINESS_KEY_
	FROM
		ACT_RU_EXECUTION a,
		(
			SELECT DISTINCT
				RES.*
			FROM
				ACT_RU_TASK RES
			INNER JOIN ACT_RU_IDENTITYLINK I ON I.TASK_ID_ = RES.ID_
			WHERE
			 (I.USER_ID_ = #{userId})
			ORDER BY
				RES.ID_ ASC
		) b
	WHERE
		a.PROC_INST_ID_ = b.PROC_INST_ID_
		AND a.BUSINESS_KEY_ IS NOT NULL
    </select>
 <select id="hisTaskCandidate" resultType="map">
		SELECT
			a.*
		FROM
			ACT_HI_PROCINST a,
			(
				SELECT DISTINCT
					RES.*
				FROM
					ACT_HI_TASKINST RES
				INNER JOIN ACT_HI_IDENTITYLINK HI ON HI.TASK_ID_ = RES.ID_
				WHERE
					RES.ASSIGNEE_ IS NOT NULL
				AND RES.END_TIME_ IS NOT NULL
				AND (HI.USER_ID_ = #{userId})
				ORDER BY
					RES.ID_ ASC
			) b
		WHERE
		a.PROC_INST_ID_ = b.PROC_INST_ID_
    </select>

标签:activiti,RES,basProcessInfo,List,列表,待办,BasProcessInfo,new,ID
From: https://blog.csdn.net/milk_yan/article/details/143584880

相关文章

  • 工具列表2024
    ------------------后端开发相关------------------数据结构与算法设计模式正则表达式JDKXMLDTDXMLDOMXSLTXPathXQueryXLink和XPointer、XMLSchema教程SVG教程WebServices教程WSDL教程SOAP教程Eclipse教程MavenSQL教程GitSVNMarkdown教程ideaDevopsjenkinsgitl......
  • 知识点:Python中的列表合并操作
    知识点:该题目考查的知识点是Python中的列表合并操作。以下是该知识点的相关内容和题目的详细解答过程:知识点:Python中的列表合并操作在Python中,合并两个或多个列表是一项常见的操作,可以通过以下几种方法实现:使用+运算符:使用+运算符可以将两个列表直接拼接在一起,形成一个......
  • Python列表
    1.列表的定义在Python中,列表是一种有序、可变、允许重复元素的数据结构。它是由一组元素组成的,这些元素可以是不同数据类型的对象,包括数字、字符串、布尔值、其他列表,甚至是自定义对象。列表是用方括号[]括起来的,元素之间用逗号分隔下面是一个简单的python列表的示列:ls=[1,2......
  • 泛型数组列表_演练
    ex1:基础练习基础练习请尽量独立完成(不要借助AI,实在不会才看参考代码)。原始数组学生类:packageex1;publicclassStudent{protectedStringname;protectedintscore;publicStudent(Stringname,intscore){this.name=name;this.sc......
  • Python 一维列表基础语法
    【Python】【基础语法】【列表】引子创建一个列表获取数据的类型输出列表获取列表的长度获取元素的值获取元素的索引遍历列表练习引子列表(list)是python的基本数据类型之一。一维列表,常常被简称为列表,亦称为向量(vector)。六大基本数据类型数字型字符串str列表list元组......
  • 软件系统设计 - 代码优化 代码重构 - 正确的重构方式 与 重构手法列表
    正确的重构方式:不会引入错误并有条不紊地改进程序结构熟练掌握众多重构手法,将思辨与实践结合,迭代持续开展重构工作。运用大量微小且保持软件行为的重构步骤,一步步达成大规模的修改。在开始重构前,我们需要先通读代码,并尝试理解代码如何工作,然后通过重构将这些理解从脑海里......
  • 「Mac畅玩鸿蒙与硬件16」鸿蒙UI组件篇6 - List 和 Grid 组件展示数据列表
    List和Grid是鸿蒙开发中的核心组件,用于展示动态数据。List适合展示垂直或水平排列的数据列表,而Grid则适用于展示商品或图片的网格布局。本篇将展示如何封装组件,并通过按钮实现布局切换,提升界面的灵活性和用户体验。关键词List组件Grid组件数据展示自定义列......
  • Markdown 列表
    Markdown列表学习无序列表使用星(*、加号+或是减号-作为列表标记,这些标记后面千万记得要添加一个空格,然后再填写内容,否则无效。+第一个项目+第二个项目-第一个项目-第二个项目*第一个项目*第二个项目效果图:·当然这是一级列表,还有2级列表,3级列表,需要再......
  • Leetcode—624. 数组列表中的最大距离【中等】
    2024每日刷题(198)Leetcode—624.数组列表中的最大距离实现代码classSolution{public:intmaxDistance(vector<vector<int>>&arrays){intm=arrays.size();intn=arrays[0].size();intmn=arrays[0][0];intmx=ar......
  • 在 Python 中将列表转换为字符串需要哪些技术
    在Python中,列表转换为字符串的技术主要包括使用join方法、使用for循环拼接、以及通过map函数结合join方法等手段。在详述中,我们会重点讲解join方法,这是将列表转换为字符串的最简便及最常用的技术。它通过连接序列中的元素,来生成一个新的字符串。一、使用JOIN方法join方法是将......