<?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.zc.business.mapper.StatusMapper" >
<resultMap id= "BaseResultMap" type= "com.zc.business.domain.Status" >
<result column= "id" jdbcType= "BIGINT" property= "id" />
<result column= "device_no" jdbcType= "VARCHAR" property= "deviceNo" />
<result column= "device_name" jdbcType= "VARCHAR" property= "deviceName" />
<result column= "device_status" jdbcType= "INTEGER" property= "deviceStatus" />
<result column= "device_id" jdbcType= "INTEGER" property= "deviceId" />
<result column= "device_ip" jdbcType= "VARCHAR" property= "deviceIp" />
<result column= "success_rate" jdbcType= "VARCHAR" property= "successRate" />
<result column= "lost_rate" jdbcType= "VARCHAR" property= "lostRate" />
<result column= "success_rate" jdbcType= "VARCHAR" property= "successRate" />
<result column= "direction" jdbcType= "VARCHAR" property= "direction" />
<result column= "manufacturer" jdbcType= "VARCHAR" property= "production" />
<result column= "model" jdbcType= "VARCHAR" property= "model" />
<result column= "facilities_type" jdbcType= "VARCHAR" property= "network" />
<result column= "remark" jdbcType= "VARCHAR" property= "content" />
<result column= "type" jdbcType= "VARCHAR" property= "type" />
<result column= "use_state" jdbcType= "VARCHAR" property= "useState" />
</resultMap>
<insert id= "Add" parameterType= "com.zc.business.domain.Status" >
INSERT INTO status
<trim prefix= "(" suffix= ")" suffixOverrides= "," >
<if test= "status.deviceNo != null" >
device_no,
</if>
<if test= "status.deviceName != null" >
device_name,
</if>
<if test= "status.deviceStatus != null" >
device_status,
</if>
<if test= "status.deviceId != null" >
device_id,
</if>
<if test= "status.time != null" >
time,
</if>
<if test= "status.successRate != null" >
success_rate,
</if>
<if test= "status.lostRate != null" >
lost_rate,
</if>
<if test= "status.deviceIp != null" >
device_ip,
</if>
</trim>
<trim prefix= "VALUES (" suffix= ")" suffixOverrides= "," >
<if test= "status.deviceNo != null" >
#{status.deviceNo,jdbcType=VARCHAR},
</if>
<if test= "status.deviceName != null" >
#{status.deviceName,jdbcType=VARCHAR},
</if>
<if test= "status.deviceStatus != null" >
#{status.deviceStatus,jdbcType=INTEGER},
</if>
<if test= "status.deviceId != null" >
#{status.deviceId,jdbcType=BIGINT},
</if>
<if test= "status.time != null" >
#{status.time,jdbcType=DATE},
</if>
<if test= "status.successRate != null" >
#{status.successRate,jdbcType=VARCHAR},
</if>
<if test= "status.lostRate != null" >
#{status.lostRate,jdbcType=VARCHAR},
</if>
<if test= "status.deviceIp != null" >
#{status.deviceIp,jdbcType=VARCHAR}
</if>
</trim>
</insert>
<sql id= "selectStatus" >
select id, device_no, device_name, device_status, time from status
</sql>
<select id= "export" parameterType= "com.zc.business.domain.Status" resultMap= "BaseResultMap" >
select s.id, s.device_no, s.device_name,s.time,
d.device_ip,s.success_rate,s.lost_rate,e.manufacturer,e.model,d.facilities_type,d.remark,COALESCE(d.child_type,
d.device_type) AS type,
CASE
WHEN d.direction = 1 THEN '菏泽方向'
WHEN d.direction = 3 THEN '济南方向'
ELSE '双向'
END AS direction,
CASE
WHEN s.device_status = 1 THEN '在线'
WHEN s.device_status = 0 THEN '离线'
ELSE '设备未接入'
END AS device_status
from dc_device d
LEFT JOIN status s on (s.device_id = d.id)
LEFT JOIN dc_product e on e.id = d.product_id
<where >
<if test= "status.time != null" >
AND s.time BETWEEN #{status.startTime,jdbcType=DATE} AND #{status.time,jdbcType=DATE}
</if>
<if test= "status.deviceNo != null" >
AND s.device_no = #{status.deviceNo}
</if>
<if test= "status.type != null" >
AND (d.device_type in
<foreach item= "typeItem" collection= "status.types" open= "(" separator= "," close= ")" >
#{typeItem}
</foreach>
or d.child_type in
<foreach item= "typeItem" collection= "status.types" open= "(" separator= "," close= ")" >
#{typeItem}
</foreach>
)
</if>
<if test= "status.deviceId != null" >
AND s.device_id = #{status.deviceId}
</if>
<if test= "status.useState != null and status.useState != 0" >
AND d.use_state = #{status.useState}
</if>
<if test= "status.deviceName != null and status.deviceName != ''" >
AND s.device_name like concat('%', #{status.deviceName}, '%')
</if>
<if test= "status.direction != null" >
AND d.direction = #{status.direction}
</if>
</where>
<if test= "status.orderByField != null and status.orderDirection != null" >
ORDER BY ${status.orderByField} ${status.orderDirection}
</if>
</select>
<select id= "listStatus" parameterType= "com.zc.business.domain.Status" resultMap= "BaseResultMap" >
select s.id, s.device_no, s.device_name, s.device_status,s.time, d.device_ip,s.success_rate,s.lost_rate,d.direction,e.manufacturer,e.model,d.facilities_type,d.remark,COALESCE(d.child_type, d.device_type) AS type
from dc_device d
LEFT JOIN status s on (s.device_id=d.id)
LEFT JOIN dc_product e on e.id=d.product_id
<where >
<if test= "status.time != null" >
AND s.time BETWEEN #{status.startTime,jdbcType=DATE} AND #{status.time,jdbcType=DATE}
</if>
<if test= "status.deviceNo != null" >
AND s.device_no = #{status.deviceNo}
</if>
<if test= "status.type != null" >
AND (d.device_type = #{status.type} or d.child_type=#{status.type})
</if>
<if test= "status.deviceId != null" >
AND s.device_id = #{status.deviceId}
</if>
<if test= "status.useState != null and status.useState != 0" >
AND d.use_state = #{status.useState}
</if>
<if test= "status.deviceName != null and status.deviceName != ''" >
AND s.device_name like concat('%', #{status.deviceName}, '%')
</if>
<if test= "status.direction != null" >
AND d.direction = #{status.direction}
</if>
</where>
<if test= "status.orderByField != null and status.orderDirection != null" >
ORDER BY ${status.orderByField} ${status.orderDirection}
</if>
</select>
<select id= "listStatusByTypes" parameterType= "com.zc.business.domain.Status" resultMap= "BaseResultMap" >
select s.id, s.device_no, s.device_name, s.device_status,s.time,
d.device_ip,s.success_rate,s.lost_rate,d.direction,e.manufacturer,e.model,d.facilities_type,d.remark,COALESCE(d.child_type,
d.device_type) AS type
from dc_device d
LEFT JOIN status s on (s.device_id=d.id)
LEFT JOIN dc_product e on e.id=d.product_id
<where >
<if test= "status.time != null" >
AND s.time BETWEEN #{status.startTime,jdbcType=DATE} AND #{status.time,jdbcType=DATE}
</if>
<if test= "status.deviceNo != null" >
AND s.device_no = #{status.deviceNo}
</if>
<if test= "status.type != null" >
AND (d.device_type in
<foreach item= "typeItem" collection= "status.types" open= "(" separator= "," close= ")" >
#{typeItem}
</foreach>
or d.child_type in
<foreach item= "typeItem" collection= "status.types" open= "(" separator= "," close= ")" >
#{typeItem}
</foreach>
)
</if>
<if test= "status.deviceId != null" >
AND s.device_id = #{status.deviceId}
</if>
<if test= "status.useState != null and status.useState != 0" >
AND d.use_state = #{status.useState}
</if>
<if test= "status.deviceName != null and status.deviceName != ''" >
AND s.device_name like concat('%', #{status.deviceName}, '%')
</if>
<if test= "status.direction != null" >
AND d.direction = #{status.direction}
</if>
</where>
<if test= "status.orderByField != null and status.orderDirection != null" >
ORDER BY ${status.orderByField} ${status.orderDirection}
</if>
<!-- <if test="status.pageNum != null and status.pageSize != null"> -->
<!-- LIMIT #{status.pageSize} OFFSET #{status.pageNum} -->
<!-- </if> -->
</select>
<select id= "getStatusList" parameterType= "com.zc.business.domain.Status" resultMap= "BaseResultMap" >
SELECT COALESCE
(d.child_type,d.device_type ) AS type,
s.time,
ROUND( avg( s.success_rate ), 2 ) success_rate
FROM
status s
LEFT JOIN dc_device d ON s.device_id = d.id
<where >
<if test= "status.time != null" >
AND s.time BETWEEN #{status.startTime,jdbcType=DATE} AND #{status.time,jdbcType=DATE}
</if>
<if test= "status.type != null" >
AND (d.device_type in
<foreach item= "typeItem" collection= "status.types" open= "(" separator= "," close= ")" >
#{typeItem}
</foreach>
or d.child_type in
<foreach item= "typeItem" collection= "status.types" open= "(" separator= "," close= ")" >
#{typeItem}
</foreach>
)
</if>
<if test= "status.deviceId != null" >
AND s.device_id = #{status.deviceId}
</if>
<if test= "status.useState != null and status.useState != 0" >
AND d.use_state = #{status.useState}
</if>
<if test= "status.deviceName != null and status.deviceName != ''" >
AND s.device_name like concat('%', #{status.deviceName}, '%')
</if>
<if test= "status.direction != null" >
AND d.direction = #{status.direction}
</if>
GROUP BY
d.child_type,
d.device_type,
DAY (s.time)
</where>
<if test= "status.orderByField != null and status.orderDirection != null" >
ORDER BY ${status.orderByField} ${status.orderDirection}
</if>
</select>
<select id= "listStatusBySection" parameterType= "com.zc.business.domain.Status" resultMap= "BaseResultMap" >
select s.id, s.device_no, s.device_name, s.device_status,s.time,
d.device_ip,s.success_rate,s.lost_rate,d.direction,e.manufacturer,e.model,d.facilities_type,m.section_id,d.remark,COALESCE(d.child_type,
d.device_type) AS type
from dc_device d
LEFT JOIN dc_stake_mark m on m.stake_mark=d.stake_mark and m.direction = d.direction
LEFT JOIN dc_road_section r on r.id=m.section_id
LEFT JOIN status s on (s.device_id=d.id)
LEFT JOIN dc_product e on e.id=d.product_id
<where >
<if test= "status.time != null" >
AND s.time BETWEEN #{status.startTime,jdbcType=DATE} AND #{status.time,jdbcType=DATE}
</if>
<if test= "status.deviceNo != null" >
AND s.device_no = #{status.deviceNo}
</if>
<if test= "status.type != null" >
AND (d.device_type = #{status.type} or d.child_type=#{status.type})
</if>
<if test= "status.deviceId != null" >
AND s.device_id = #{status.deviceId}
</if>
<if test= "status.useState != null and status.useState != 0" >
AND d.use_state = #{status.useState}
</if>
<if test= "status.deviceName != null and status.deviceName != ''" >
AND s.device_name like concat('%', #{status.deviceName}, '%')
</if>
<if test= "status.direction != null" >
AND d.direction = #{status.direction}
</if>
</where>
<if test= "status.orderByField != null and status.orderDirection != null" >
ORDER BY ${status.orderByField} ${status.orderDirection}
</if>
</select>
<select id= "deviceStatusListById" parameterType= "com.zc.business.domain.Status" resultMap= "BaseResultMap" >
select s.id,s.time,s.success_rate,s.lost_rate
from status s
<where >
<if test= "status.time != null" >
AND s.time BETWEEN #{status.startTime,jdbcType=DATE} AND #{status.time,jdbcType=DATE}
</if>
<if test= "status.deviceId != null" >
AND s.device_id = #{status.deviceId}
</if>
<if test= "status.deviceName != null and status.deviceName != ''" >
AND s.device_name like concat('%', #{status.deviceName}, '%')
</if>
<if test= "status.direction != null" >
AND d.direction = #{status.direction}
</if>
</where>
<if test= "status.orderByField != null and status.orderDirection != null" >
ORDER BY ${status.orderByField} ${status.orderDirection}
</if>
</select>
<delete id= "delStatusByTime" parameterType= "com.zc.business.domain.Status" >
DELETE FROM status
<where >
<if test= "startTime != null" >
AND status.time < #{startTime,jdbcType=DATE}
</if>
</where>
</delete>
</mapper>