wuzeyu
2024-07-11 288fd4f39fae6bcd0a26cdbcbf0a17c3bd3a877d
pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrIntakeMapper.xml
@@ -214,12 +214,12 @@
  <select id="getRecordCount" parameterType="java.util.Map" resultType="java.lang.Long">
    SELECT COUNT(*) AS recordCount
    FROM pr_intake ge
    INNER JOIN ba_divide divi ON ge.divideId = divi.id
    INNER JOIN pr_divide divi ON ge.divideId = divi.id
    INNER JOIN ba_block blo ON divi.blockId = blo.id
    INNER JOIN ba_district country ON ge.countyId = country.id
    INNER JOIN ba_district town ON ge.townId = town.id
    INNER JOIN ba_district village ON ge.villageId = village.id
    , (SELECT @i:=0) AS itable
    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
    <where>
      ge.deleted = 0
      AND divi.deleted = 0
@@ -228,31 +228,57 @@
        AND ge.name LIKE CONCAT('%', #{intakeName}, '%')
      </if>
      <if test="divideName != null and divideName != ''">
        AND divi.name LIKE CONCAT('%', #{divideName}, '%')
      <if test = "divideId != null and divideId !=''">
        AND divi.id = #{divideId}
      </if>
      <if test="blockName != null and blockName != ''">
        AND blo.name = #{blockName}
      <if test = "blockId != null and blockId !=''">
        AND blo.id = #{blockId}
      </if>
      <if test="isBinded == 0">
        AND ge.id NOT IN(SELECT intakeId FROM pr_controller where deleted = 0)
      </if>
      <if test="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>
    </where>
  </select>
  <!--根据指定条件获取取水口记录-->
  <select id="getIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoIntake">
    SELECT (@i:=@i+1)                                          AS id,
    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,
    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
    FROM pr_intake ge
    INNER JOIN pr_divide divi ON ge.divideId = divi.id
    INNER JOIN ba_block blo ON divi.blockId = blo.id
    INNER JOIN ba_district country ON ge.countyId = country.id
    INNER JOIN ba_district town ON ge.townId = town.id
    INNER JOIN ba_district village ON ge.villageId = village.id
    , (SELECT @i:=0) AS itable
    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
    <where>
      ge.deleted = 0
      AND divi.deleted = 0
@@ -260,29 +286,35 @@
      <if test="intakeName != null and intakeName != ''">
        AND ge.name LIKE CONCAT('%', #{intakeName}, '%')
      </if>
      <if test="divideName != null and divideName != ''">
        AND divi.name LIKE CONCAT('%', #{divideName}, '%')
      <if test = "divideId != null and divideId !=''">
        AND divi.id = #{divideId}
      </if>
      <if test="blockName != null and blockName != ''">
        AND blo.name = #{blockName}
      <if test = "blockId != null and blockId !=''">
        AND blo.id = #{blockId}
      </if>
      <if test="isBinded == 0">
        AND ge.id NOT IN(SELECT intakeId FROM pr_controller where deleted = 0)
      </if>
      <if test="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>
    </where>
    ORDER BY ge.operateDt DESC
    <if test="pageCurr != null and pageSize != null">
      LIMIT ${pageCurr}, ${pageSize}
      LIMIT ${(pageCurr-1)*pageSize}, ${pageSize}
    </if>
  </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="getSupperByVillageId" parameterType="_long" resultType="java.lang.Long">
    select dis_tow.*
    from ba_district dis_vil
@@ -296,4 +328,131 @@
  <select id="getRecordCountOfIntake" resultType="java.lang.Integer">
    SELECT COUNT(*) AS recordCount FROM pr_intake WHERE deleted = 0 AND id = ${intakeId}
  </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_controller con
        INNER JOIN pr_intake inta ON con.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 LIKE CONCAT('%', #{intakeNum}, '%')
      </if>
    </where>
  </select>
  <!--获取取水口列表(在线和不在先)-->
  <select id="getOnLineIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake">
    SELECT
      con.intakeId,
      con.rtuAddr,
      inta.name AS intakeNum,
      rtus.isOnLine
    FROM pr_controller con
        INNER JOIN pr_intake inta ON con.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>
    </where>
    order by con.id ASC
    <if test="pageCurr != null and pageSize != null">
      LIMIT ${(pageCurr-1)*pageSize}, ${pageSize}
    </if>
  </select>
  <!--根据操作员获取常用取水口-->
  <select id="getUsedIntakes" resultType="com.dy.pipIrrGlobal.voPr.VoOnLineIntake">
    SELECT
      DISTINCT con.intakeId,
               con.rtuAddr,
               inta.name AS intakeNum,
               rtus.isOnLine
    FROM pr_controller con
           INNER JOIN pr_intake inta ON con.intakeId = inta.id
           INNER JOIN rm_command_history com ON con.rtuAddr = com.rtu_addr
           INNER 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="operator != null">
        com.operator = #{operator}
      </if>
    </where>
  </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>
</mapper>