<?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.aizuda.snailjob.template.datasource.persistence.mapper.RetryTaskLogMapper">
    <resultMap id="BaseResultMap" type="com.aizuda.snailjob.template.datasource.persistence.po.RetryTaskLog">
        <id column="id" jdbcType="BIGINT" property="id"/>
        <result column="unique_id" jdbcType="VARCHAR" property="uniqueId"/>
        <result column="namespace_id" jdbcType="VARCHAR" property="namespaceId"/>
        <result column="group_name" jdbcType="VARCHAR" property="groupName"/>
        <result column="scene_name" jdbcType="VARCHAR" property="sceneName"/>
        <result column="idempotent_id" jdbcType="VARCHAR" property="idempotentId"/>
        <result column="biz_no" jdbcType="VARCHAR" property="bizNo"/>
        <result column="executor_name" jdbcType="VARCHAR" property="executorName"/>
        <result column="args_str" jdbcType="VARCHAR" property="argsStr"/>
        <result column="ext_attrs" jdbcType="VARCHAR" property="extAttrs"/>
        <result column="retry_status" jdbcType="TINYINT" property="retryStatus"/>
        <result column="task_type" jdbcType="TINYINT" property="taskType"/>
        <result column="create_dt" jdbcType="TIMESTAMP" property="createDt"/>
    </resultMap>

    <sql id="Base_Column_List">
        id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, retry_status,
        create_dt, task_type, namespace_id
    </sql>

    <!-- 定义批量新增的 SQL 映射 -->
    <insert id="batchInsert" parameterType="java.util.List">
        INSERT INTO sj_retry_task_log (unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name,
                                    args_str, ext_attrs, task_type, create_dt, namespace_id)
        VALUES
        <foreach collection="list" item="item" separator=",">
            (#{item.uniqueId}, #{item.groupName}, #{item.sceneName}, #{item.idempotentId},
             #{item.bizNo}, #{item.executorName}, #{item.argsStr}, #{item.extAttrs},
             #{item.taskType}, #{item.createDt}, #{item.namespaceId})
        </foreach>
    </insert>

    <!-- 重试统计 -->
    <select id="retrySummaryRetryTaskLogList"
            resultType="com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryResponseDO">
        SELECT namespace_id                                        AS namespaceId,
               group_name                                          AS groupName,
               scene_name                                          AS sceneName,
               SUM(CASE WHEN (retry_status = 0) THEN 1 ELSE 0 END) AS runningNum,
               SUM(CASE WHEN (retry_status = 1) THEN 1 ELSE 0 END) AS finishNum,
               SUM(CASE WHEN (retry_status = 2) THEN 1 ELSE 0 END) AS maxCountNum,
               SUM(CASE WHEN (retry_status = 3) THEN 1 ELSE 0 END) AS suspendNum
        FROM sj_retry_task_log
        ${ew.customSqlSegment}
    </select>
</mapper>