Newer
Older
newfiber-termite / newfiber-termites / newfiber-termites-dataup / src / main / resources / mapper / termite / DeviceMonitoringDataMapper.xml
<?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.newfiber.termite.mapper.DeviceMonitoringDataMapper">

    <!-- 通用查询映射结果 -->
    <resultMap type="com.newfiber.termite.domain.DeviceMonitoringData" id="DeviceMonitoringDataResult">
        <result property="id" column="id"/>
        <result property="sn" column="sn"/>
        <result property="date" column="date"/>
        <result property="yesnoant" column="yesnoant"/>
        <result property="rtpitcu" column="rtpitcu"/>
        <result property="idenpitcu" column="idenpitcu"/>
        <result property="idencolle" column="idencolle"/>
        <result property="antNumber" column="ant_number"/>
        <result property="otherAntNumber" column="other_ant_number"/>
        <result property="druing" column="druing"/>
        <result property="uptime" column="uptime"/>

        <result property="projectCode" column="project_code"/>
        <result property="location" column="location"/>
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        t.id
    	, t.sn
    	, t.date
    	, t.yesnoant
    	, t.rtpitcu
    	, t.idenpitcu
    	, t.idencolle
        , t.ant_number
        , t.other_ant_number
    	, t.druing
    	, t.uptime

        , di.project_code
        , di.location
        , di.location_type
        , di.lonandlat
	</sql>

    <sql id="Where_Condition">
        <if test="request.sn != null and request.sn != ''">
            and t.sn = #{request.sn}
        </if>
        <if test="request.date != null and request.date != ''">
            and t.date = #{request.date}
        </if>
        <if test="request.yesnoant != null and request.yesnoant != ''">
            and t.yesnoant = #{request.yesnoant}
        </if>
        <if test="request.idencolle != null and request.idencolle != ''">
            and t.idencolle = #{request.idencolle}
        </if>
        <if test="request.druing != null and request.druing != ''">
            and t.druing = #{request.druing}
        </if>
        <if test="request.projectCode != null and request.projectCode != ''">
            and di.project_code = #{request.projectCode}
        </if>
    </sql>

    <sql id="Join_Table">
        left join ter_device_info di on t.sn = di.sn
    </sql>

    <select id="selectByCondition" resultMap="DeviceMonitoringDataResult">
        select
        <include refid="Base_Column_List"/>
        from ter_device_monitoring_data t
        <include refid="Join_Table"/>
        where t.del_flag = 0 and di.project_code is not null
        <include refid="Where_Condition"/>
        order by t.${request.orderBy}
    </select>

    <select id="selectOneById" resultMap="DeviceMonitoringDataResult">
        select
        <include refid="Base_Column_List"/>
        from ter_device_monitoring_data t
        <include refid="Join_Table"/>
        where t.id = #{id} and t.del_flag = 0 and di.project_code is not null limit 1
    </select>

    <select id="listWarinTotalDays" resultType="com.newfiber.termite.domain.response.WarnMonitoringResponseInfo">
        SELECT
        di.sn,
        di.location,
        DATE_FORMAT(MIN(di.first_warn_datetime), '%Y-%m-%d') AS dailyFirstWarnDatetime,
        COUNT(DISTINCT DATE(dm.date)) AS countDays
        FROM
        ter_device_info di
        INNER JOIN
        ter_monitoring_warn_record dm ON di.sn = dm.sn
        WHERE
        di.project_code = #{projectCode}
        GROUP BY
        di.sn,
        di.first_warn_datetime
        ORDER BY
        countDays DESC,
        di.sn;
    </select>


    <select id="snWarinTotalDays" resultType="com.newfiber.termite.domain.response.SnWarinTotalDaysResponseInfo">
        SELECT
            di.sn,
            di.first_warn_datetime,
            COUNT(DISTINCT DATE(dm.date)) AS count
        FROM
            ter_device_info di
            INNER JOIN
            ter_monitoring_warn_record dm ON di.sn = dm.sn
        WHERE
            di.sn = #{sn} AND DATE(dm.date) BETWEEN #{startTime,jdbcType=TIMESTAMP} AND #{endTime,jdbcType=TIMESTAMP}
        GROUP BY
            di.sn,
            di.first_warn_datetime
        ORDER BY
            di.sn;
    </select>

</mapper>