<?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.xxl.job.admin.dao.XxlJobInfoDao">

    <resultMap id="XxlJobInfo" type="com.xxl.job.admin.core.model.XxlJobInfo">
        <result column="id" property="id"/>

        <result column="job_group" property="jobGroup"/>
        <result column="job_cron" property="jobCron"/>
        <result column="job_desc" property="jobDesc"/>

        <result column="add_time" property="addTime"/>
        <result column="update_time" property="updateTime"/>

        <result column="author" property="author"/>
        <result column="alarm_email" property="alarmEmail"/>

        <result column="executor_route_strategy" property="executorRouteStrategy"/>
        <result column="executor_handler" property="executorHandler"/>
        <result column="executor_param" property="executorParam"/>
        <result column="executor_block_strategy" property="executorBlockStrategy"/>
        <result column="executor_timeout" property="executorTimeout"/>
        <result column="executor_fail_retry_count" property="executorFailRetryCount"/>

        <result column="glue_type" property="glueType"/>
        <result column="glue_source" property="glueSource"/>
        <result column="glue_remark" property="glueRemark"/>
        <result column="glue_updatetime" property="glueUpdatetime"/>
        <result column="child_jobid" property="childJobId"/>

        <result column="type_" property="type"/>
        <result column="start_execute_time" property="startExecuteTime"/>
        <result column="end_execute_time" property="endExecuteTime"/>
        <result column="interval_seconds" property="intervalSeconds"/>
        <result column="repeat_count" property="repeatCount"/>
    </resultMap>

    <sql id="Base_Column_List">
		t.id,
		t.job_group,
		t.job_cron,
		t.job_desc,
		t.add_time,
		t.update_time,
		t.author,
		t.alarm_email,
		t.executor_route_strategy,
		t.executor_handler,
		t.executor_param,
		t.executor_block_strategy,
		t.executor_timeout,
		t.executor_fail_retry_count,
		t.glue_type,
		t.glue_source,
		t.glue_remark,
		t.glue_updatetime,
		t.child_jobid,
		t.type_,
		t.start_execute_time,
		t.end_execute_time,
		t.interval_seconds,
		t.repeat_count
	</sql>

    <select id="pageList" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
        SELECT
        <include refid="Base_Column_List"/>
        FROM xxl_job_qrtz_trigger_info AS t
        <trim prefix="WHERE" prefixOverrides="AND | OR">
            <if test="jobGroup gt 0">
                AND t.job_group = #{jobGroup}
            </if>
            <if test="jobDesc != null and jobDesc != ''">
                AND t.job_desc like CONCAT(CONCAT('%', #{jobDesc}), '%')
            </if>
            <if test="executorHandler != null and executorHandler != ''">
                AND t.executor_handler like CONCAT(CONCAT('%', #{executorHandler}), '%')
            </if>
            <if test="type != null and type != ''">
                AND t.executor_handler like CONCAT(CONCAT('%', #{executorHandler}), '%')
            </if>
            <if test="type != null and type != ''">
                AND t.type_ = #{type}
            </if>
        </trim>
        ORDER BY id DESC
        LIMIT #{offset}, #{pagesize}
    </select>

    <select id="pageListCount" parameterType="java.util.HashMap" resultType="int">
        SELECT count(1)
        FROM xxl_job_qrtz_trigger_info AS t
        <trim prefix="WHERE" prefixOverrides="AND | OR">
            <if test="jobGroup gt 0">
                AND t.job_group = #{jobGroup}
            </if>
            <if test="jobDesc != null and jobDesc != ''">
                AND t.job_desc like CONCAT(CONCAT('%', #{jobDesc}), '%')
            </if>
            <if test="executorHandler != null and executorHandler != ''">
                AND t.executor_handler like CONCAT(CONCAT('%', #{executorHandler}), '%')
            </if>
            <if test="type != null and type != ''">
                AND t.type_ = #{type}
            </if>
        </trim>
    </select>

    <insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO xxl_job_qrtz_trigger_info (
        job_group,
        job_cron,
        job_desc,
        add_time,
        update_time,
        author,
        alarm_email,
        executor_route_strategy,
        executor_handler,
        executor_param,
        executor_block_strategy,
        executor_timeout,
        executor_fail_retry_count,
        glue_type,
        glue_source,
        glue_remark,
        glue_updatetime,
        child_jobid,
        type_,
        start_execute_time,
        end_execute_time,
        interval_seconds,
        repeat_count
        ) VALUES (
        #{jobGroup},
        #{jobCron},
        #{jobDesc},
        NOW(),
        NOW(),
        #{author},
        #{alarmEmail},
        #{executorRouteStrategy},
        #{executorHandler},
        #{executorParam},
        #{executorBlockStrategy},
        #{executorTimeout},
        #{executorFailRetryCount},
        #{glueType},
        #{glueSource},
        #{glueRemark},
        NOW(),
        #{childJobId},
        #{type},
        #{startExecuteTime},
        #{endExecuteTime},
        #{intervalSeconds},
        #{repeatCount}
        );
        <!--<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
            SELECT LAST_INSERT_ID()
            /*SELECT @@IDENTITY AS id*/
        </selectKey>-->
    </insert>

    <select id="loadById" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
        SELECT
        <include refid="Base_Column_List"/>
        FROM xxl_job_qrtz_trigger_info AS t
        WHERE t.id = #{id}
    </select>

    <update id="update" parameterType="com.xxl.job.admin.core.model.XxlJobInfo">
		UPDATE xxl_job_qrtz_trigger_info
		SET
			job_cron = #{jobCron},
			job_desc = #{jobDesc},
			update_time = NOW(),
			author = #{author},
			alarm_email = #{alarmEmail},
			executor_route_strategy = #{executorRouteStrategy},
			executor_handler = #{executorHandler},
			executor_param = #{executorParam},
			executor_block_strategy = #{executorBlockStrategy},
			executor_timeout = ${executorTimeout},
			executor_fail_retry_count = ${executorFailRetryCount},
			glue_type = #{glueType},
			glue_source = #{glueSource},
			glue_remark = #{glueRemark},
			glue_updatetime = #{glueUpdatetime},
			child_jobid = #{childJobId},
			type_ = #{type},
		    start_execute_time = #{startExecuteTime},
		    end_execute_time = #{endExecuteTime},
		    interval_seconds = #{intervalSeconds},
		    repeat_count = #{repeatCount}
		WHERE id = #{id}
	</update>

    <delete id="delete" parameterType="java.util.HashMap">
		DELETE
		FROM xxl_job_qrtz_trigger_info
		WHERE id = #{id}
	</delete>

    <select id="getJobsByGroup" parameterType="java.util.HashMap" resultMap="XxlJobInfo">
        SELECT
        <include refid="Base_Column_List"/>
        FROM xxl_job_qrtz_trigger_info AS t
        WHERE t.job_group = #{jobGroup}
    </select>

    <select id="findAllCount" resultType="int">
		SELECT count(1)
		FROM xxl_job_qrtz_trigger_info
	</select>

</mapper>