<?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.xmomen.module.schedule.mapper.ScheduleMapper">
    <!--
        该 SQL 语句用于查询计划任务。
        id: 此查询语句在 MyBatis 中的唯一标识，在代码中通过这个标识来调用该查询。
        resultType: 指定查询结果映射到的 Java 类，这里是 com.xmomen.module.schedule.controller.vo.ScheduleJobVo，
                    意味着查询结果将被映射到这个类的实例中。
        parameterType: 指定传入的参数类型，这里是 java.lang.String，表示传入的参数是一个字符串类型。
    -->
    <select id="queryScheduleJobs" resultType="com.xmomen.module.schedule.controller.vo.ScheduleJobVo" parameterType="java.lang.String">
        SELECT
        <!-- 选择计划任务表中的 ID 字段 -->
        ID,
        <!-- 选择计划任务表中的 JOB_NAME 字段 -->
        JOB_NAME,
        <!-- 选择计划任务表中的 JOB_GROUP 字段 -->
        JOB_GROUP,
        <!-- 选择计划任务表中的 JOB_STATUS 字段 -->
        JOB_STATUS,
        <!-- 使用 CASE 语句根据 JOB_STATUS 的值进行转换，生成一个新的字段 jobStatusDesc，
             用于表示任务状态的描述信息。
             当 JOB_STATUS 为 0 时，jobStatusDesc 为 '运行中'；
             当 JOB_STATUS 为 1 时，jobStatusDesc 为 '暂停'；
             当 JOB_STATUS 为 2 时，jobStatusDesc 为 '已完成'；
             当 JOB_STATUS 为 3 时，jobStatusDesc 为 '异常'；
             当 JOB_STATUS 为 4 时，jobStatusDesc 为 '阻塞'；
             当 JOB_STATUS 为 -1 时，jobStatusDesc 为 '无'；
             否则，jobStatusDesc 为 '错误状态码'。
        -->
        CASE
        JOB_STATUS
        WHEN 0
        THEN '运行中'
        WHEN 1
        THEN '暂停'
        WHEN 2
        THEN '已完成'
        WHEN 3
        THEN '异常'
        WHEN 4
        THEN '阻塞'
        WHEN - 1
        THEN '无'
        ELSE '错误状态码'
        END AS jobStatusDesc,
        <!-- 选择计划任务表中的 JOB_DESCRIPTION 字段 -->
        JOB_DESCRIPTION,
        <!-- 选择计划任务表中的 CRON_EXPRESSION 字段 -->
        CRON_EXPRESSION,
        <!-- 选择计划任务表中的 TRIGGER_ID 字段 -->
        TRIGGER_ID
        FROM
        schedule_job
        <!-- 使用 WHERE 子句进行条件查询，条件是 JOB_NAME、JOB_DESCRIPTION 或 JOB_GROUP 字段
             模糊匹配传入的关键字 #{keyword}。
             CONCAT('%', #{keyword}, '%') 用于构建模糊匹配的字符串，'%' 表示任意字符。
        -->
        where  (JOB_NAME LIKE CONCAT('%', #{keyword} , '%')) OR (JOB_DESCRIPTION LIKE CONCAT('%', #{keyword} , '%')) OR (JOB_GROUP LIKE CONCAT('%', #{keyword} , '%'))
    </select>
</mapper>