longz
2026-07-08 700f9d0da314a4ea701fe9f68d305b67d72ec5fb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sinata.appointment.mapper.ApprovalTaskMapper">
 
    <select id="pageMiniApprovalHistory" resultType="com.sinata.appointment.dto.MiniApprovalHistoryRow">
        SELECT o.id,
               o.uuid,
               o.order_no AS orderNo,
               o.visited_user_name AS visitedUserName,
               o.visited_dept_id AS visitedDeptId,
               o.visit_start_date AS visitStartDate,
               o.visit_end_date AS visitEndDate,
               o.visit_reason_code AS visitReasonCode,
               o.visit_reason_other AS visitReasonOther,
               o.visit_time_mode AS visitTimeMode,
               o.visit_time_slot AS visitTimeSlot,
               o.pass_access_area_names AS passAccessAreaNames,
               o.status,
               o.create_time AS createTime,
               t.task_status AS taskStatus
        FROM approval_task t
        INNER JOIN approval_instance ai ON ai.id = t.instance_id AND ai.del_flag = 0
        INNER JOIN appointment_order o ON o.id = ai.order_id AND o.del_flag = 0
        INNER JOIN (
            SELECT ai2.order_id AS orderId, MAX(t2.id) AS latestTaskId
            FROM approval_task t2
            INNER JOIN approval_instance ai2 ON ai2.id = t2.instance_id AND ai2.del_flag = 0
            WHERE t2.del_flag = 0
              AND t2.assignee_user_id = #{assigneeUserId}
              AND t2.task_status IN ('APPROVED', 'REJECTED')
            <if test="status != null and status != ''">
                AND t2.task_status = #{status}
            </if>
            GROUP BY ai2.order_id
        ) latest ON latest.latestTaskId = t.id
        WHERE t.del_flag = 0
        <if test="visitedUserNameKeyword != null and visitedUserNameKeyword != ''">
            AND EXISTS (
                SELECT 1
                FROM appointment_visitor av
                WHERE av.del_flag = 0
                  AND av.order_id = o.id
                  AND av.name LIKE CONCAT('%', #{visitedUserNameKeyword}, '%')
            )
        </if>
        <if test="visitDate != null">
            AND o.visit_start_date IS NOT NULL
            AND o.visit_end_date IS NOT NULL
            AND #{visitDate} &gt;= o.visit_start_date
            AND #{visitDate} &lt;= o.visit_end_date
        </if>
        ORDER BY t.update_time DESC, t.id DESC
    </select>
 
</mapper>