OpenApiRecordTopMapper.xml 3.14 KB
<?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="org.thingsboard.server.dao.yunteng.mapper.OpenApiRecordMapper">
    <resultMap type="org.thingsboard.server.common.data.yunteng.dto.OpenApiRecordTopDTO" id="DTOMap">
        <result property="name" column="application_name"/>
        <result property="recordNum" column="recordNum"/>
        <result property="successCount" column="success_count"/>
        <result property="failureCount" column="failure_count"/>
        <result property="recordProportion" column="recordProportion"/>
    </resultMap>

    <resultMap type="org.thingsboard.server.common.data.yunteng.dto.OpenApiRecordClassifyDTO" id="map">
        <result property="classify" column="classify"/>
        <result property="time" column="time_period"/>
        <result property="count" column="call_count"/>
    </resultMap>

    <select id="getTop" resultMap="DTOMap">
        SELECT
        application_name,
        COUNT(*) AS recordNum,
        ROUND(COUNT(*) * 100.0 / (SELECT COUNT(*) FROM tk_open_api_record WHERE tenant_id = #{tenantId} ), 2) AS recordProportion,
        SUM(CASE WHEN state = 1 THEN 1 ELSE 0 END) AS success_count,
        SUM(CASE WHEN state = 0 THEN 1 ELSE 0 END) AS failure_count
        FROM  tk_open_api_record
        WHERE tenant_id = #{tenantId}
        GROUP BY application_name
        ORDER BY recordNum desc
        <if test="page != null">
            LIMIT #{pageSize}
            OFFSET (#{page} - 1) * #{pageSize};
        </if>
    </select>

    <select id="getClassify" resultMap="map">
        SELECT foo.classify,foo.time_period,count(foo.time_period) as call_count from (

              SELECT
              classify,

                  concat(

                        EXTRACT(YEAR  FROM request_time), '-',
                        EXTRACT(MONTH  FROM request_time),'-',
                        EXTRACT(DAY  FROM request_time)
                        <choose>
                            <when test="type == 'hour'">
                              , ' ',
                              EXTRACT(HOUR  FROM request_time), ':',
                              floor( EXTRACT(MINUTE  FROM request_time) / 5 ) * 5
                            </when>
                            <when test="type == 'day'">
                              , ' ',
                              floor( EXTRACT(HOUR  FROM request_time) / 2 ) * 2, ':',
                              '00'
                            </when>

                        </choose>
                  )
               as time_period
              FROM tk_open_api_record
              WHERE tenant_id = #{tenantId} AND request_time <![CDATA[ >= ]]> #{startTime} AND request_time <![CDATA[ <= ]]> #{endTime}

        ) as foo
        GROUP BY foo.classify,foo.time_period
        ORDER BY foo.time_period;
    </select>

    <delete id="deleteByAppIds">
        DELETE FROM tk_open_api_record WHERE application_id IN
        <foreach collection="applicationIds" item="applicationId" open="(" separator="," close=")">
            #{applicationId}
        </foreach>
    </delete>

</mapper>