From fe1e65520172d8c365d2fe75a843a44243f4faf6 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期一, 28 十月 2024 20:31:48 +0800
Subject: [PATCH] 2024-10-28 代码优化
---
pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml | 67 +++++++++++----------------------
1 files changed, 22 insertions(+), 45 deletions(-)
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
index 6fcfe5d..509381e 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
@@ -231,14 +231,9 @@
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 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 cont.rtuAddr = rtus.rtuAddr
+ <if test = "bindNumber != null and bindNumber > 0">
+ 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
@@ -255,10 +250,10 @@
AND blo.id = #{blockId}
</if>
- <if test="isBinded == 0">
+ <if test="isBinded != null and isBinded == 0">
AND ge.id NOT IN (SELECT intakeId FROM pr_controller where deleted = 0)
</if>
- <if test="isBinded == 1">
+ <if test="isBinded != null and isBinded == 1">
AND ge.id IN (SELECT intakeId FROM pr_controller where deleted = 0)
</if>
<if test="isBinded == null">
@@ -269,21 +264,20 @@
<if test = "rtuAddr != null and rtuAddr !=''">
AND cont.rtuAddr like CONCAT('%',#{rtuAddr},'%')
</if>
- <if test="isOnLine != null and isOnLine !='' ">
- AND rtus.isOnLine = #{isOnLine}
- </if>
<if test="protocol != null and protocol !='' ">
AND cont.protocol = #{protocol}
</if>
<if test = "bindNumber != null and bindNumber > 0">
- AND (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) = #{bindNumber}
+ AND bindNumTb.num = #{bindNumber}
</if>
</where>
</select>
<!--鏍规嵁鎸囧畾鏉′欢鑾峰彇鍙栨按鍙h褰�-->
<select id="getIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntake">
- SELECT CAST(ge.id AS char) AS intakeId,
+ 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,
@@ -293,18 +287,14 @@
cont.rtuAddr AS rtuAddr,
cont.protocol AS protocol,
cont.findDt AS findDt,
- rtus.isOnLine AS isOnLine,
- (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) AS bindNumber,
+ bindNumTb.num AS bindNumber,
ge.lng,
ge.lat,
ge.remarks,
ge.operator,
ge.operateDt As operateDt,
- (CASE
- WHEN ge.id NOT IN (SELECT intakeId FROM pr_controller where deleted = 0) THEN '鏈粦瀹�'
- WHEN ge.id IN (SELECT intakeId FROM pr_controller where deleted = 0) THEN '宸茬粦瀹�'
- END) AS isBind,
- CONCAT(country.`name`, town.`name`, village.`name`) AS address
+ 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
@@ -312,14 +302,7 @@
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 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 cont.rtuAddr = rtus.rtuAddr
+ 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
@@ -327,19 +310,16 @@
<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 == 0">
+ <if test="isBinded != null and isBinded == 0">
AND ge.id NOT IN (SELECT intakeId FROM pr_controller where deleted = 0)
</if>
- <if test="isBinded == 1">
+ <if test="isBinded != null and isBinded == 1">
AND ge.id IN (SELECT intakeId FROM pr_controller where deleted = 0)
</if>
<if test="isBinded == null">
@@ -347,17 +327,14 @@
<if test="address != null and address != ''">
AND CONCAT(country.`name`, town.`name`, village.`name`) LIKE CONCAT('%', #{address}, '%')
</if>
- <if test = "rtuAddr != null and rtuAddr !=''">
+ <if test="rtuAddr != null and rtuAddr !=''">
AND cont.rtuAddr like CONCAT('%',#{rtuAddr},'%')
- </if>
- <if test="isOnLine != null and isOnLine !='' ">
- AND rtus.isOnLine = #{isOnLine}
</if>
<if test="protocol != null and protocol !='' ">
AND cont.protocol = #{protocol}
</if>
- <if test = "bindNumber != null and bindNumber > 0">
- AND (SELECT COUNT(*) FROM pr_intake_controller WHERE intakeId = ge.id AND operateType = 1) = #{bindNumber}
+ <if test="bindNumber != null and bindNumber > 0">
+ AND bindNumTb.num = #{bindNumber}
</if>
</where>
ORDER BY ge.operateDt DESC
@@ -668,8 +645,8 @@
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
- INNER JOIN JSON_TABLE(
- <!--'[{"rtuAddr":"620201000030","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',-->
+ LEFT JOIN JSON_TABLE(
+ <!--'[{"rtuAddr":"530115059980","isOnLine":true},{"rtuAddr":"620201000030","isOnLine":true}]',-->
#{onLineMap},
'$[*]' COLUMNS (
rtuAddr VARCHAR(20) PATH '$.rtuAddr',
@@ -677,8 +654,8 @@
)
) rtus ON con.rtuAddr = rtus.rtuAddr
<where>
- <if test="operator != null">
- com.operator_id = #{operator}
+ <if test="operatorId != null">
+ AND com.operator_id = #{operatorId}
</if>
</where>
ORDER BY com.last_used_time DESC,com.usage_count DESC
--
Gitblit v1.8.0