<?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.dy.pipIrrGlobal.daoPr.PrIntakeMapper">
|
<resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoPr.PrIntake">
|
<!--@mbg.generated-->
|
<!--@Table pr_intake-->
|
<id column="id" jdbcType="BIGINT" property="id"/>
|
<result column="countyId" jdbcType="BIGINT" property="countyId"/>
|
<result column="townId" jdbcType="BIGINT" property="townId"/>
|
<result column="villageId" jdbcType="BIGINT" property="villageId"/>
|
<result column="divideId" jdbcType="BIGINT" property="divideId"/>
|
<result column="blockId" jdbcType="BIGINT" property="blockId"/>
|
<result column="name" jdbcType="VARCHAR" property="name"/>
|
<result column="lng" jdbcType="DOUBLE" property="lng"/>
|
<result column="lat" jdbcType="DOUBLE" property="lat"/>
|
<result column="remarks" jdbcType="VARCHAR" property="remarks"/>
|
<result column="operator" jdbcType="BIGINT" property="operator"/>
|
<result column="operateDt" jdbcType="TIMESTAMP" property="operateDt"/>
|
<result column="deleted" jdbcType="TINYINT" property="deleted"/>
|
</resultMap>
|
<sql id="Base_Column_List">
|
<!--@mbg.generated-->
|
id,
|
countyId,
|
townId,
|
villageId,
|
divideId,
|
blockId,
|
`name`,
|
lng,
|
lat,
|
remarks,
|
`operator`,
|
operateDt,
|
deleted
|
</sql>
|
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultType="com.dy.pipIrrGlobal.voPr.VoAllIntake">
|
<!--@mbg.generated-->
|
select
|
ge.id,
|
ge.countyId,
|
ge.townId,
|
ge.villageId,
|
ge.divideId,
|
ge.blockId,
|
ge.`name`,
|
ge.lng,
|
ge.lat,
|
ge.remarks,
|
ge.`operator`,
|
ge.operateDt,
|
blo.`name` AS blockName,
|
CONCAT(country.`name`, town.`name`, village.`name`) AS address
|
FROM pr_intake ge
|
INNER JOIN pr_divide divi ON ge.divideId = divi.id
|
INNER JOIN ba_block blo ON divi.blockId = blo.id
|
LEFT JOIN ba_district country ON ge.countyId = country.id
|
LEFT JOIN ba_district town ON ge.townId = town.id
|
LEFT JOIN ba_district village ON ge.villageId = village.id
|
where ge.id = #{id,jdbcType=BIGINT}
|
AND ge.deleted = 0
|
AND divi.deleted = 0
|
AND blo.deleted = 0
|
</select>
|
|
<delete id="deleteLogicById" parameterType="java.lang.Long">
|
<!--@mbg.generated-->
|
update pr_intake
|
set deleted = 1
|
where id = #{id,jdbcType=BIGINT}
|
</delete>
|
|
<select id="selectAll" resultType="com.dy.pipIrrGlobal.voPr.VoAllIntake">
|
<!--@mbg.generated-->
|
select
|
ge.id,
|
ge.countyId,
|
ge.townId,
|
ge.villageId,
|
ge.divideId,
|
ge.blockId,
|
ge.`name`,
|
ge.lng,
|
ge.lat,
|
ge.remarks,
|
ge.`operator`,
|
ge.operateDt,
|
blo.`name` AS blockName,
|
CONCAT(country.`name`, town.`name`, village.`name`) AS address
|
FROM pr_intake ge
|
INNER JOIN pr_divide divi ON ge.divideId = divi.id
|
INNER JOIN ba_block blo ON divi.blockId = blo.id
|
LEFT JOIN ba_district country ON ge.countyId = country.id
|
LEFT JOIN ba_district town ON ge.townId = town.id
|
LEFT JOIN ba_district village ON ge.villageId = village.id
|
where
|
ge.deleted = 0
|
AND divi.deleted = 0
|
AND blo.deleted = 0
|
</select>
|
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
|
<!--@mbg.generated-->
|
delete
|
from pr_intake
|
where id = #{id,jdbcType=BIGINT}
|
</delete>
|
<insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoPr.PrIntake">
|
<!--@mbg.generated-->
|
insert into pr_intake (id, countyId, townId,
|
villageId, divideId, blockId,
|
`name`, lng, lat, remarks,
|
`operator`, operateDt, deleted)
|
values (#{id,jdbcType=BIGINT}, #{countyId,jdbcType=BIGINT}, #{townId,jdbcType=BIGINT},
|
#{villageId,jdbcType=BIGINT}, #{divideId,jdbcType=BIGINT}, #{blockId,jdbcType=BIGINT},
|
#{name,jdbcType=VARCHAR}, #{lng,jdbcType=DOUBLE}, #{lat,jdbcType=DOUBLE}, #{remarks,jdbcType=VARCHAR},
|
#{operator,jdbcType=BIGINT}, #{operateDt,jdbcType=TIMESTAMP}, #{deleted,jdbcType=TINYINT})
|
</insert>
|
<insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoPr.PrIntake">
|
<!--@mbg.generated-->
|
insert into pr_intake
|
<trim prefix="(" suffix=")" suffixOverrides=",">
|
<if test="id != null">
|
id,
|
</if>
|
<if test="countyId != null">
|
countyId,
|
</if>
|
<if test="townId != null">
|
townId,
|
</if>
|
<if test="villageId != null">
|
villageId,
|
</if>
|
<if test="divideId != null">
|
divideId,
|
</if>
|
<if test="blockId != null">
|
blockId,
|
</if>
|
<if test="name != null">
|
`name`,
|
</if>
|
<if test="lng != null">
|
lng,
|
</if>
|
<if test="lat != null">
|
lat,
|
</if>
|
<if test="remarks != null">
|
remarks,
|
</if>
|
<if test="operator != null">
|
`operator`,
|
</if>
|
<if test="operateDt != null">
|
operateDt,
|
</if>
|
<if test="deleted != null">
|
deleted,
|
</if>
|
</trim>
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
<if test="id != null">
|
#{id,jdbcType=BIGINT},
|
</if>
|
<if test="countyId != null">
|
#{countyId,jdbcType=BIGINT},
|
</if>
|
<if test="townId != null">
|
#{townId,jdbcType=BIGINT},
|
</if>
|
<if test="villageId != null">
|
#{villageId,jdbcType=BIGINT},
|
</if>
|
<if test="divideId != null">
|
#{divideId,jdbcType=BIGINT},
|
</if>
|
<if test="blockId != null">
|
#{blockId,jdbcType=BIGINT},
|
</if>
|
<if test="name != null">
|
#{name,jdbcType=VARCHAR},
|
</if>
|
<if test="lng != null">
|
#{lng,jdbcType=DOUBLE},
|
</if>
|
<if test="lat != null">
|
#{lat,jdbcType=DOUBLE},
|
</if>
|
<if test="remarks != null">
|
#{remarks,jdbcType=VARCHAR},
|
</if>
|
<if test="operator != null">
|
#{operator,jdbcType=BIGINT},
|
</if>
|
<if test="operateDt != null">
|
#{operateDt,jdbcType=TIMESTAMP},
|
</if>
|
<if test="deleted != null">
|
#{deleted,jdbcType=TINYINT},
|
</if>
|
</trim>
|
</insert>
|
<update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoPr.PrIntake">
|
<!--@mbg.generated-->
|
update pr_intake
|
<set>
|
<if test="countyId != null">
|
countyId = #{countyId,jdbcType=BIGINT},
|
</if>
|
<if test="townId != null">
|
townId = #{townId,jdbcType=BIGINT},
|
</if>
|
<if test="villageId != null">
|
villageId = #{villageId,jdbcType=BIGINT},
|
</if>
|
<if test="divideId != null">
|
divideId = #{divideId,jdbcType=BIGINT},
|
</if>
|
<if test="blockId != null">
|
blockId = #{blockId,jdbcType=BIGINT},
|
</if>
|
<if test="name != null">
|
`name` = #{name,jdbcType=VARCHAR},
|
</if>
|
<if test="lng != null">
|
lng = #{lng,jdbcType=DOUBLE},
|
</if>
|
<if test="lat != null">
|
lat = #{lat,jdbcType=DOUBLE},
|
</if>
|
<if test="remarks != null">
|
remarks = #{remarks,jdbcType=VARCHAR},
|
</if>
|
<if test="operator != null">
|
`operator` = #{operator,jdbcType=BIGINT},
|
</if>
|
<if test="operateDt != null">
|
operateDt = #{operateDt,jdbcType=TIMESTAMP},
|
</if>
|
<if test="deleted != null">
|
deleted = #{deleted,jdbcType=TINYINT},
|
</if>
|
</set>
|
where id = #{id,jdbcType=BIGINT}
|
</update>
|
<update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoPr.PrIntake">
|
<!--@mbg.generated-->
|
update pr_intake
|
set countyId = #{countyId,jdbcType=BIGINT},
|
townId = #{townId,jdbcType=BIGINT},
|
villageId = #{villageId,jdbcType=BIGINT},
|
divideId = #{divideId,jdbcType=BIGINT},
|
blockId = #{blockId,jdbcType=BIGINT},
|
`name` = #{name,jdbcType=VARCHAR},
|
lng = #{lng,jdbcType=DOUBLE},
|
lat = #{lat,jdbcType=DOUBLE},
|
remarks = #{remarks,jdbcType=VARCHAR},
|
`operator` = #{operator,jdbcType=BIGINT},
|
operateDt = #{operateDt,jdbcType=TIMESTAMP},
|
deleted = #{deleted,jdbcType=TINYINT}
|
where id = #{id,jdbcType=BIGINT}
|
</update>
|
|
<!--根据指定条件获取取水口记录数-->
|
<select id="getRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
|
SELECT COUNT(*) AS recordCount
|
FROM pr_intake ge
|
INNER JOIN pr_divide divi ON ge.divideId = divi.id
|
INNER JOIN ba_block blo ON divi.blockId = blo.id
|
LEFT JOIN ba_district country ON ge.countyId = country.id
|
LEFT JOIN ba_district town ON ge.townId = town.id
|
LEFT JOIN ba_district village ON ge.villageId = village.id
|
LEFT JOIN pr_controller cont ON ge.id = cont.intakeId
|
<if test = "bindNumber != null and bindNumber > 0">
|
LEFT JOIN (SELECT intakeId, COUNT(*) num FROM pr_intake_controller WHERE operateType = 1 group by intakeId) AS bindNumTb on bindNumTb.intakeId= ge.id
|
</if>
|
<where>
|
ge.deleted = 0
|
AND divi.deleted = 0
|
AND blo.deleted = 0
|
<if test="intakeName != null and intakeName != ''">
|
AND ge.name LIKE CONCAT('%', #{intakeName}, '%')
|
</if>
|
|
<if test="divideId != null and divideId != ''">
|
AND divi.id = #{divideId}
|
</if>
|
|
<if test="blockId != null and blockId != ''">
|
AND blo.id = #{blockId}
|
</if>
|
|
<if test="isBinded != null and isBinded == 0">
|
AND ge.id NOT IN (SELECT intakeId FROM pr_controller where deleted = 0)
|
</if>
|
<if test="isBinded != null and isBinded == 1">
|
AND ge.id IN (SELECT intakeId FROM pr_controller where deleted = 0)
|
</if>
|
<if test="isBinded == null">
|
</if>
|
<if test="address != null and address != ''">
|
AND CONCAT(country.`name`, town.`name`, village.`name`) LIKE CONCAT('%', #{address}, '%')
|
</if>
|
<if test = "rtuAddr != null and rtuAddr !=''">
|
AND cont.rtuAddr like CONCAT('%',#{rtuAddr},'%')
|
</if>
|
<if test="protocol != null and protocol !='' ">
|
AND cont.protocol = #{protocol}
|
</if>
|
<if test = "bindNumber != null and bindNumber > 0">
|
AND bindNumTb.num = #{bindNumber}
|
</if>
|
</where>
|
</select>
|
|
<!--根据指定条件获取取水口记录-->
|
<select id="getIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntake">
|
WITH intakeIds AS(SELECT intakeId FROM pr_controller where deleted = 0)
|
|
SELECT CAST(ge.id AS char) AS intakeId,
|
ge.`name` AS intakeName,
|
CAST(divi.id AS char) AS divideId,
|
divi.`name` AS divideName,
|
CAST(blo.id AS char) AS blockId,
|
blo.`name` AS blockName,
|
CAST(cont.id AS char) AS controllerId,
|
cont.rtuAddr AS rtuAddr,
|
cont.protocol AS protocol,
|
cont.findDt AS findDt,
|
bindNumTb.num AS bindNumber,
|
ge.lng,
|
ge.lat,
|
ge.remarks,
|
ge.operator,
|
ge.operateDt As operateDt,
|
IF(ge.id IN (SELECT intakeId FROM intakeIds),'已绑定','未绑定') AS isBind,
|
CONCAT(country.`name`, town.`name`, village.`name`) AS address
|
FROM pr_intake ge
|
INNER JOIN pr_divide divi ON ge.divideId = divi.id
|
INNER JOIN ba_block blo ON divi.blockId = blo.id
|
LEFT JOIN ba_district country ON ge.countyId = country.id
|
LEFT JOIN ba_district town ON ge.townId = town.id
|
LEFT JOIN ba_district village ON ge.villageId = village.id
|
LEFT JOIN pr_controller cont ON ge.id = cont.intakeId
|
LEFT JOIN (SELECT intakeId, COUNT(*) num FROM pr_intake_controller WHERE operateType = 1 group by intakeId) AS bindNumTb on bindNumTb.intakeId= ge.id
|
<where>
|
ge.deleted = 0
|
AND divi.deleted = 0
|
AND blo.deleted = 0
|
<if test="intakeName != null and intakeName != ''">
|
AND ge.name LIKE CONCAT('%', #{intakeName}, '%')
|
</if>
|
<if test="divideId != null and divideId != ''">
|
AND divi.id = #{divideId}
|
</if>
|
<if test="blockId != null and blockId != ''">
|
AND blo.id = #{blockId}
|
</if>
|
<if test="isBinded != null and isBinded == 0">
|
AND ge.id NOT IN (SELECT intakeId FROM pr_controller where deleted = 0)
|
</if>
|
<if test="isBinded != null and isBinded == 1">
|
AND ge.id IN (SELECT intakeId FROM pr_controller where deleted = 0)
|
</if>
|
<if test="isBinded == null">
|
</if>
|
<if test="address != null and address != ''">
|
AND CONCAT(country.`name`, town.`name`, village.`name`) LIKE CONCAT('%', #{address}, '%')
|
</if>
|
<if test="rtuAddr != null and rtuAddr !=''">
|
AND cont.rtuAddr like CONCAT('%',#{rtuAddr},'%')
|
</if>
|
<if test="protocol != null and protocol !='' ">
|
AND cont.protocol = #{protocol}
|
</if>
|
<if test="bindNumber != null and bindNumber > 0">
|
AND bindNumTb.num = #{bindNumber}
|
</if>
|
</where>
|
ORDER BY ge.operateDt DESC
|
<trim prefix="limit ">
|
<if test="start != null and count != null">
|
#{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
|
</if>
|
</trim>
|
</select>
|
|
<!--根据下级获取上一级地址-->
|
<select id="getSupperByVillageId" parameterType="_long" resultType="java.lang.Long">
|
select dis_tow.*
|
from ba_district dis_vil
|
inner join
|
ba_district dis_tow
|
on dis_vil.supperId = dis_tow.id
|
where dis_vil.id = #{vaId,jdbcType=BIGINT}
|
</select>
|
|
<!--根据取水口编号获取未删除的取水口数量-->
|
<select id="getRecordCountOfIntake" resultType="java.lang.Integer">
|
SELECT COUNT(*) AS recordCount
|
FROM pr_intake
|
WHERE deleted = 0
|
AND id = #{intakeId}
|
</select>
|
|
<!--根据村ID获取全部地址-->
|
<select id="getNameById" resultType="java.lang.String">
|
select name
|
from pr_intake
|
where id = #{intakeId, jdbcType=BIGINT}
|
</select>
|
|
<!--根据村ID获取全部地址-->
|
<select id="getAddressByVillageId" parameterType="_long" resultType="java.lang.String">
|
select CONCAT(dis_province.`name`, dis_city.`name`, dis_county.`name`, dis_town.`name`,
|
dis_village.`name`) AS address
|
from ba_district dis_village
|
inner join ba_district dis_town on dis_village.supperId = dis_town.id
|
inner join ba_district dis_county on dis_town.supperId = dis_county.id
|
inner join ba_district dis_city on dis_county.supperId = dis_city.id
|
inner join ba_district dis_province on dis_city.supperId = dis_province.id
|
where dis_village.id = #{villageId,jdbcType=BIGINT}
|
</select>
|
|
<!--根据区域Id获取区域等级-->
|
<select id="getLevelByRegionId" parameterType="_long" resultType="java.lang.Integer">
|
select region.level
|
from ba_district region
|
where region.id = #{regionId,jdbcType=BIGINT}
|
</select>
|
|
<!--获取未绑控制器的取水口列表-->
|
<select id="getNoBindingIntakes" resultType="java.util.HashMap">
|
SELECT CAST(inta.id AS char) AS intakeId,
|
name AS intakeName
|
FROM pr_intake inta
|
WHERE id NOT IN (SELECT intakeId FROM pr_controller)
|
AND deleted = 0
|
</select>
|
|
<!--获取取水口数量(在线和不在先)-->
|
<select id="getOnLineIntakesCount" resultType="java.lang.Long">
|
SELECT COUNT(*) AS recordCount
|
FROM pr_intake inta
|
LEFT JOIN pr_controller con ON con.intakeId = inta.id
|
LEFT JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id
|
LEFT JOIN(
|
SELECT intake_id AS intakeId,
|
CONCAT(
|
IF(alarm_loss = 1, IF(alarm_water_meter_fault = 1, '流量计故障,', ''),
|
IF(alarm_water_meter_fault = 1, '流量计故障', '')),
|
IF(alarm_battery_volt = 1, IF(alarm_loss = 1, '漏损(偷水)报警,', ''),
|
IF(alarm_loss = 1, '漏损(偷水)报警', '')),
|
IF(alarm_valve = 1, IF(alarm_battery_volt = 1, '蓄电池电压报警,', ''),
|
IF(alarm_battery_volt = 1, '蓄电池电压报警', '')),
|
IF(alarm_valve = 1, '阀门报警', '')
|
) AS alarm
|
FROM rm_alarm_state_last
|
WHERE (alarm_water_meter_fault = 1 OR alarm_loss = 1 OR alarm_battery_volt = 1 OR alarm_valve = 1)
|
AND dt >= DATE_SUB(NOW(), INTERVAL 12 HOUR)
|
) alarm ON alarm.intakeId = inta.id
|
LEFT JOIN JSON_TABLE(
|
<!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',-->
|
#{onLineMap},
|
'$[*]' COLUMNS (
|
rtuAddr VARCHAR(20) PATH '$.rtuAddr',
|
isOnLine BOOLEAN PATH '$.isOnLine'
|
)
|
) rtus ON con.rtuAddr = rtus.rtuAddr
|
<where>
|
<if test="isOnLine != null">
|
rtus.isOnLine = #{isOnLine}
|
</if>
|
<if test="intakeNum != null and intakeNum != ''">
|
AND inta.name = #{intakeNum}
|
</if>
|
<if test="isBinded == false">
|
AND con.rtuAddr IS NULL
|
</if>
|
<if test="isBinded == true">
|
AND con.rtuAddr IS NOT NULL
|
</if>
|
</where>
|
</select>
|
|
<!--获取取水口列表(在线和不在先)-->
|
<select id="getOnLineIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake">
|
SELECT
|
inta.id AS intakeId,
|
con.rtuAddr,
|
inta.name AS intakeNum,
|
inta.lng,
|
inta.lat,
|
IFNULL(hou.total_amount, 0) AS totalAmount,
|
(CASE
|
WHEN con.rtuAddr IS NULL THEN false
|
WHEN con.rtuAddr IS NOT NULL THEN true
|
END) AS isBinded,
|
rtus.isOnLine,
|
alarm.alarm
|
FROM pr_intake inta
|
LEFT JOIN pr_controller con ON con.intakeId = inta.id
|
LEFT JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id
|
LEFT JOIN(
|
SELECT intake_id AS intakeId,
|
CONCAT(
|
IF(alarm_loss = 1, IF(alarm_water_meter_fault = 1, '流量计故障,', ''),
|
IF(alarm_water_meter_fault = 1, '流量计故障', '')),
|
IF(alarm_battery_volt = 1, IF(alarm_loss = 1, '漏损(偷水)报警,', ''),
|
IF(alarm_loss = 1, '漏损(偷水)报警', '')),
|
IF(alarm_valve = 1, IF(alarm_battery_volt = 1, '蓄电池电压报警,', ''),
|
IF(alarm_battery_volt = 1, '蓄电池电压报警', '')),
|
IF(alarm_valve = 1, '阀门报警', '')
|
) AS alarm
|
FROM rm_alarm_state_last
|
WHERE (alarm_water_meter_fault = 1 OR alarm_loss = 1 OR alarm_battery_volt = 1 OR alarm_valve = 1)
|
AND dt >= DATE_SUB(NOW(), INTERVAL 12 HOUR)
|
) alarm ON alarm.intakeId = inta.id
|
LEFT JOIN JSON_TABLE(
|
<!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',-->
|
#{onLineMap},
|
'$[*]' COLUMNS (
|
rtuAddr VARCHAR(20) PATH '$.rtuAddr',
|
isOnLine BOOLEAN PATH '$.isOnLine'
|
)
|
) rtus ON con.rtuAddr = rtus.rtuAddr
|
<where>
|
<if test="isOnLine != null">
|
rtus.isOnLine = #{isOnLine}
|
</if>
|
<if test="intakeNum != null and intakeNum != ''">
|
AND inta.name = #{intakeNum}
|
</if>
|
<if test="isBinded == false">
|
AND con.rtuAddr IS NULL
|
</if>
|
<if test="isBinded == true">
|
AND con.rtuAddr IS NOT NULL
|
</if>
|
</where>
|
order by con.id ASC
|
<trim prefix="limit ">
|
<if test="start != null and count != null">
|
#{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
|
</if>
|
</trim>
|
</select>
|
|
|
|
|
|
|
|
<!--获取取水口数量(在线或离线或不设状态)-->
|
<select id="selectIntakesCountForOnLine" resultType="java.lang.Long">
|
SELECT COUNT(*) AS recordCount
|
FROM pr_intake inta
|
INNER JOIN pr_controller con ON con.intakeId = inta.id
|
<if test="onLineMap != null and onLineMap !='' and isOnLine != null">
|
LEFT JOIN JSON_TABLE(
|
<!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',-->
|
#{onLineMap},
|
'$[*]' COLUMNS (
|
rtuAddr VARCHAR(20) PATH '$.rtuAddr',
|
isOnLine BOOLEAN PATH '$.isOnLine'
|
)
|
) rtus ON con.rtuAddr = rtus.rtuAddr
|
</if>
|
WHERE con.intakeId is not null
|
<if test="isOnLine != null and isOnLine == false">
|
<choose>
|
<when test="onLineMap != null and onLineMap !=''">
|
AND (rtus.isOnLine = false OR rtus.rtuAddr IS NULL)
|
</when>
|
<otherwise>
|
AND rtus.rtuAddr IS NULL
|
</otherwise>
|
</choose>
|
</if>
|
<if test="isOnLine != null and isOnLine == true">
|
AND rtus.isOnLine = true
|
</if>
|
<if test="intakeNum != null and intakeNum != ''">
|
AND inta.name = #{intakeNum}
|
</if>
|
</select>
|
|
|
<!--获取取水口列表(在线或离线或不设状态)-->
|
<select id="selectIntakesForOnLine" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake">
|
SELECT
|
inta.id AS intakeId,
|
con.rtuAddr,
|
inta.name AS intakeNum,
|
inta.lng,
|
inta.lat,
|
IFNULL(hou.instant_amount, 0) AS instantAmount,
|
IFNULL(hou.total_amount, 0) AS totalAmount,
|
<if test="onLineMap != null and onLineMap !='' and isOnLine != null">
|
rtus.isOnLine,
|
</if>
|
alarm.alarm,
|
alarm.alarmDt
|
FROM pr_intake inta
|
INNER JOIN pr_controller con ON con.intakeId = inta.id
|
LEFT JOIN rm_on_hour_report_last hou ON hou.intake_id = inta.id
|
LEFT JOIN(
|
SELECT intake_id AS intakeId,
|
CONCAT(
|
IF(alarm_loss = 1, '漏损报警,', ''),
|
IF(alarm_battery_volt = 1, '电池电压报警,', ''),
|
IF(alarm_valve = 1, '阀门报警,', ''),
|
IF(alarm_water_meter_fault = 1, '流量计故障报警,', '')
|
) AS alarm,
|
dt AS alarmDt
|
FROM rm_alarm_state_last
|
WHERE (alarm_loss = 1 OR alarm_battery_volt = 1 OR alarm_valve = 1 OR alarm_water_meter_fault = 1)
|
AND dt >= DATE_SUB(NOW(), INTERVAL 12 HOUR)
|
) alarm ON alarm.intakeId = inta.id
|
<if test="onLineMap != null and onLineMap !='' and isOnLine != null">
|
LEFT JOIN JSON_TABLE(
|
<!--'[{"rtuAddr":"37142501020100215","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',-->
|
#{onLineMap},
|
'$[*]' COLUMNS (
|
rtuAddr VARCHAR(20) PATH '$.rtuAddr',
|
isOnLine BOOLEAN PATH '$.isOnLine'
|
)
|
) rtus ON con.rtuAddr = rtus.rtuAddr
|
</if>
|
WHERE con.intakeId is not null
|
<if test="isOnLine != null and isOnLine == false">
|
<choose>
|
<when test="onLineMap != null and onLineMap !=''">
|
AND (rtus.isOnLine = false OR rtus.rtuAddr IS NULL)
|
</when>
|
<otherwise>
|
AND rtus.rtuAddr IS NULL
|
</otherwise>
|
</choose>
|
</if>
|
<if test="isOnLine != null and isOnLine == true">
|
AND rtus.isOnLine = true
|
</if>
|
<if test="intakeNum != null and intakeNum != ''">
|
AND inta.name = #{intakeNum}
|
</if>
|
order by inta.id ASC
|
<trim prefix="limit ">
|
<if test="start != null and count != null">
|
#{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
|
</if>
|
</trim>
|
</select>
|
|
<!--根据取水口编号获取取水口对象-->
|
<select id="getIntakeByName" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake">
|
SELECT
|
con.intakeId,
|
con.rtuAddr,
|
inta.name AS intakeNum
|
FROM pr_controller con
|
INNER JOIN pr_intake inta ON con.intakeId = inta.id
|
<where>
|
<if test="intakeNum != null and intakeNum != ''">
|
AND LOWER(inta.name) = #{intakeNum}
|
</if>
|
</where>
|
LIMIT 0,1
|
</select>
|
|
<!--根据操作员获取常用取水口-->
|
<select id="getUsedIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake">
|
SELECT
|
com.intake_id AS intakeId,
|
con.rtuAddr,
|
inta.name AS intakeNum,
|
rtus.isOnLine
|
FROM pr_common_intakes com
|
INNER JOIN pr_intake inta ON inta.id = com.intake_id
|
INNER JOIN pr_controller con ON con.intakeId = com.intake_id
|
LEFT JOIN JSON_TABLE(
|
<!--'[{"rtuAddr":"530115059980","isOnLine":true},{"rtuAddr":"620201000030","isOnLine":true}]',-->
|
#{onLineMap},
|
'$[*]' COLUMNS (
|
rtuAddr VARCHAR(20) PATH '$.rtuAddr',
|
isOnLine BOOLEAN PATH '$.isOnLine'
|
)
|
) rtus ON con.rtuAddr = rtus.rtuAddr
|
<where>
|
<if test="operatorId != null">
|
AND com.operator_id = #{operatorId}
|
</if>
|
</where>
|
ORDER BY com.last_used_time DESC,com.usage_count DESC
|
</select>
|
|
<!--取水口名称换取水口ID,扫码开阀使用-->
|
<select id="getIntakeIdByName" resultType="java.lang.Long">
|
SELECT id AS intakeId
|
FROM pr_intake
|
WHERE `name` = #{intakeName}
|
</select>
|
|
<!--取水口名称换取水口ID,验证是否重复名称使用-->
|
<select id="getIntakeIdsByName" resultType="java.lang.Long">
|
SELECT id AS intakeId
|
FROM pr_intake
|
WHERE `name` = #{intakeName}
|
</select>
|
|
<!--取水口名称换取水口ID,验证是否重复名称使用-->
|
<select id="getIntakeIdByNameExcludeId" resultType="java.lang.Long">
|
SELECT id AS intakeId
|
FROM pr_intake
|
WHERE id != #{id}
|
and `name` = #{intakeName}
|
</select>
|
<!--app修改取水口经纬度-->
|
<update id="updateByPrimaryKeySelective1" parameterType="com.dy.pipIrrGlobal.voPr.IntakeUpdateLngLat">
|
<!--@mbg.generated-->
|
update pr_intake
|
<set>
|
<if test="lng != null">
|
lng = #{lng,jdbcType=DOUBLE},
|
</if>
|
<if test="lat != null">
|
lat = #{lat,jdbcType=DOUBLE},
|
</if>
|
<if test="operator != null">
|
`operator` = #{operator,jdbcType=BIGINT},
|
</if>
|
<if test="operateDt != null">
|
operateDt = #{operateDt,jdbcType=TIMESTAMP},
|
</if>
|
</set>
|
where id = #{id,jdbcType=BIGINT}
|
</update>
|
|
<!--获取未绑定到轮灌组的取水口列表-->
|
<select id="getFreeIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntakeSimple">
|
SELECT
|
id AS intakeId,
|
name AS intakeName
|
FROM pr_intake inta
|
<where>
|
AND inta.deleted = 0
|
AND NOT EXISTS (SELECT 1 FROM ir_group_intake gi WHERE gi.intake_id = inta.id)
|
<if test="intakeName != null and intakeName != ''">
|
AND LOWER(inta.name) LIKE CONCAT('%', #{intakeName}, '%')
|
</if>
|
</where>
|
</select>
|
|
<!--获取未绑定虚拟卡的取水口列表,给取水口绑虚拟卡使用-->
|
<select id="getNotLinkVcIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntakeSimple">
|
SELECT
|
id AS intakeId,
|
name AS intakeName
|
FROM pr_intake inta
|
WHERE NOT EXISTS (
|
SELECT 1
|
FROM pr_intake_vc iv
|
WHERE iv.intake_id = inta.id
|
) AND inta.deleted = 0
|
</select>
|
|
|
|
<!-- 为wechat,根据指定取水口名称模糊(后端)查询水口记录数 -->
|
<select id="getSomeIntakesCount4Wx" parameterType="java.util.Map" resultType="java.lang.Long">
|
SELECT COUNT(*) AS recordCount
|
FROM pr_intake tb
|
<where>
|
tb.deleted = 0
|
<if test="intakeName != null and intakeName != ''">
|
AND tb.name LIKE CONCAT('%', #{intakeName})
|
</if>
|
</where>
|
</select>
|
|
<!-- 为wechat,根据指定取水口名称模糊(后端)查询水口记录 -->
|
<select id="getSomeIntakes4Wx" parameterType="java.util.Map" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake">
|
SELECT
|
inta.id AS intakeId,
|
con.rtuAddr,
|
inta.name AS intakeNum
|
FROM pr_intake inta
|
INNER JOIN pr_controller con ON con.intakeId = inta.id
|
<where>
|
inta.deleted = 0
|
<if test="intakeName != null and intakeName != ''">
|
AND inta.name LIKE CONCAT('%', #{intakeName})
|
</if>
|
</where>
|
ORDER BY inta.id DESC
|
</select>
|
|
|
</mapper>
|