lyh
2025-04-01 4e2be858f4ccbb7490b59ed584fd1c829eb4d556
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/mapper/xml/HisWorkTaskMapper.xml
@@ -24,34 +24,52 @@
            aht.START_TIME_ ASC
    </select>
    <select id="queryHisTaskByProcInstId" resultType="org.jeecg.modules.flowable.domain.vo.FlowHistoricalVo">
        SELECT
            p.PROC_INST_ID_ AS procInstId,
            p.BUSINESS_KEY_ AS businessKey,
            p.START_TIME_ AS startTime,
            p.END_TIME_ AS endTime,
            a.ACT_NAME_ AS actName,
            a.ACT_TYPE_ AS actType,
            a.START_TIME_ AS actStartTime,
            a.END_TIME_ AS actEndTime,
            c.NAME_ AS taskName,
            c.ASSIGNEE_ AS assignee,
            CASE
                WHEN c.DURATION_ IS NOT NULL THEN
                    CASE
                        WHEN FLOOR(c.DURATION_ / 1000.0) = 0 THEN NULL
                        ELSE FLOOR(c.DURATION_ / 1000.0)
                        END
                ELSE NULL
                END AS duration,
            c.DESCRIPTION_ AS description
        WITH ActivitySequence AS (
            SELECT
                p.PROC_INST_ID_ AS procInstId,
                p.BUSINESS_KEY_ AS businessKey,
                p.START_TIME_ AS procStartTime,
                p.END_TIME_ AS procEndTime,
                a.ACT_ID_,
                COALESCE ( a.ACT_NAME_, a.ACT_ID_ ) AS actName,
                a.ACT_TYPE_ AS actType,
                a.START_TIME_ AS actStartTime,
                a.END_TIME_ AS actEndTime,
                c.NAME_ AS taskName,
                c.ASSIGNEE_ AS assignee,
                c.DESCRIPTION_ AS description,
-- 使用 LEAD 获取下一个活动信息
                LEAD ( COALESCE ( a.ACT_NAME_, a.ACT_ID_ ) ) OVER ( PARTITION BY p.PROC_INST_ID_ ORDER BY a.START_TIME_ ) AS nextActName,
                LEAD ( a.ACT_TYPE_ ) OVER ( PARTITION BY p.PROC_INST_ID_ ORDER BY a.START_TIME_ ) AS nextActType,
                LEAD ( a.START_TIME_ ) OVER ( PARTITION BY p.PROC_INST_ID_ ORDER BY a.START_TIME_ ) AS nextActStartTime
            FROM
                act_hi_procinst p
                    LEFT JOIN act_hi_actinst a ON p.PROC_INST_ID_ = a.PROC_INST_ID_
                    AND a.ACT_TYPE_ IN ( 'userTask', 'sequenceFlow' )
                    LEFT JOIN ACT_HI_TASKINST c ON a.TASK_ID_ = c.ID_
            WHERE
                p.PROC_INST_ID_ = #{procInstId}
        ) SELECT
              procInstId,
              businessKey,
-- 当前活动(userTask)信息
              actName AS userTaskName,
              taskName,
              assignee,
              actStartTime,
              actEndTime,
              description,
-- 下一个活动(sequenceFlow)信息
              nextActName AS sequenceFlowName,
              nextActStartTime AS sequenceFlowStartTime
        FROM
            act_hi_procinst p
                LEFT JOIN act_hi_actinst a ON p.PROC_INST_ID_ = a.PROC_INST_ID_
                LEFT JOIN ACT_HI_TASKINST c ON a.TASK_ID_ = c.ID_
            ActivitySequence
        WHERE
            p.PROC_INST_ID_ = #{procInstId}
          AND a.ACT_NAME_ IS NOT NULL
            actType = 'userTask' -- 筛选当前活动为 userTask
          AND nextActType = 'sequenceFlow' -- 且下一个活动为 sequenceFlow
        ORDER BY
            COALESCE(a.END_TIME_, '9999-12-31') ASC;
            actStartTime;
    </select>
</mapper>