pipIrr-platform/pipIrr-global/src/main/resources/mapper/PrControllerMapper.xml
@@ -5,22 +5,34 @@
    <!--@mbg.generated-->
    <!--@Table pr_controller-->
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="rtuAddr" jdbcType="VARCHAR" property="rtuaddr" />
    <result column="intakeId" jdbcType="BIGINT" property="intakeId" />
    <result column="rtuAddr" jdbcType="VARCHAR" property="rtuAddr" />
    <result column="protocol" jdbcType="VARCHAR" property="protocol" />
    <result column="onlineState" jdbcType="TINYINT" property="onlinestate" />
    <result column="reportTime" jdbcType="TIMESTAMP" property="reporttime" />
    <result column="addWays" jdbcType="TINYINT" property="addways" />
    <result column="protocol_version" jdbcType="INTEGER" property="protocolVersion" />
    <result column="findDt" jdbcType="TIMESTAMP" property="findDt" />
    <result column="orgTag" jdbcType="VARCHAR" property="orgTag" />
    <result column="addWays" jdbcType="TINYINT" property="addWays" />
    <result column="operator" jdbcType="BIGINT" property="operator" />
    <result column="operateDt" jdbcType="TIMESTAMP" property="operatedt" />
    <result column="operateDt" jdbcType="TIMESTAMP" property="operateDt" />
    <result column="deleted" jdbcType="TINYINT" property="deleted" />
  </resultMap>
  <resultMap id="PartResultMap" type="com.dy.pipIrrGlobal.pojoPr.PrController">
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="intakeId" jdbcType="BIGINT" property="intakeId" />
    <result column="rtuAddr" jdbcType="VARCHAR" property="rtuAddr" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--@mbg.generated-->
    id, rtuAddr, protocol, onlineState, reportTime, addWays, `operator`, operateDt, deleted
    id, intakeId, rtuAddr, protocol, protocol_version, findDt, orgTag, addWays, `operator`, operateDt, deleted
  </sql>
  <sql id="Part_Column_List">
    <!--@mbg.generated-->
    id, rtuAddr, intakeId
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
    <!--@mbg.generated-->
    select
    select
    <include refid="Base_Column_List" />
    from pr_controller
    where id = #{id,jdbcType=BIGINT}
@@ -32,13 +44,14 @@
  </delete>
  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoPr.PrController">
    <!--@mbg.generated-->
    insert into pr_controller (id, rtuAddr, protocol,
      onlineState, reportTime, addWays,
    insert into pr_controller (id, intakeId, rtuAddr,
      protocol, protocol_version, findDt, orgTag, addWays,
      `operator`, operateDt, deleted
      )
    values (#{id,jdbcType=BIGINT}, #{rtuaddr,jdbcType=VARCHAR}, #{protocol,jdbcType=VARCHAR},
      #{onlinestate,jdbcType=TINYINT}, #{reporttime,jdbcType=TIMESTAMP}, #{addways,jdbcType=TINYINT},
      #{operator,jdbcType=BIGINT}, #{operatedt,jdbcType=TIMESTAMP}, #{deleted,jdbcType=TINYINT}
    values (#{id,jdbcType=BIGINT}, #{intakeId,jdbcType=BIGINT}, #{rtuAddr,jdbcType=VARCHAR},
      #{protocol,jdbcType=VARCHAR}, #{protocolVersion,jdbcType=INTEGER}, #{findDt,jdbcType=TIMESTAMP}, #{orgTag,jdbcType=VARCHAR},
      #{addWays,jdbcType=TINYINT}, #{operator,jdbcType=BIGINT}, #{operateDt,jdbcType=TIMESTAMP},
      #{deleted,jdbcType=TINYINT}
      )
  </insert>
  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoPr.PrController">
@@ -48,25 +61,31 @@
      <if test="id != null">
        id,
      </if>
      <if test="rtuaddr != null">
      <if test="intakeId != null">
        intakeId,
      </if>
      <if test="rtuAddr != null">
        rtuAddr,
      </if>
      <if test="protocol != null">
        protocol,
      </if>
      <if test="onlinestate != null">
        onlineState,
     <if test="protocolVersion != null">
       protocol_version,
      </if>
      <if test="reporttime != null">
        reportTime,
      <if test="findDt != null">
        findDt,
      </if>
      <if test="addways != null">
      <if test="orgTag != null">
        orgTag,
      </if>
      <if test="addWays != null">
        addWays,
      </if>
      <if test="operator != null">
        `operator`,
      </if>
      <if test="operatedt != null">
      <if test="operateDt != null">
        operateDt,
      </if>
      <if test="deleted != null">
@@ -77,26 +96,32 @@
      <if test="id != null">
        #{id,jdbcType=BIGINT},
      </if>
      <if test="rtuaddr != null">
        #{rtuaddr,jdbcType=VARCHAR},
      <if test="intakeId != null">
        #{intakeId,jdbcType=BIGINT},
      </if>
      <if test="rtuAddr != null">
        #{rtuAddr,jdbcType=VARCHAR},
      </if>
      <if test="protocol != null">
        #{protocol,jdbcType=VARCHAR},
      </if>
      <if test="onlinestate != null">
        #{onlinestate,jdbcType=TINYINT},
      <if test="protocolVersion != null">
        #{protocolVersion,jdbcType=INTEGER},
      </if>
      <if test="reporttime != null">
        #{reporttime,jdbcType=TIMESTAMP},
      <if test="findDt != null">
        #{findDt,jdbcType=TIMESTAMP},
      </if>
      <if test="addways != null">
        #{addways,jdbcType=TINYINT},
      <if test="orgTag != null">
        #{orgTag,jdbcType=VARCHAR},
      </if>
      <if test="addWays != null">
        #{addWays,jdbcType=TINYINT},
      </if>
      <if test="operator != null">
        #{operator,jdbcType=BIGINT},
      </if>
      <if test="operatedt != null">
        #{operatedt,jdbcType=TIMESTAMP},
      <if test="operateDt != null">
        #{operateDt,jdbcType=TIMESTAMP},
      </if>
      <if test="deleted != null">
        #{deleted,jdbcType=TINYINT},
@@ -107,26 +132,32 @@
    <!--@mbg.generated-->
    update pr_controller
    <set>
      <if test="rtuaddr != null">
        rtuAddr = #{rtuaddr,jdbcType=VARCHAR},
      <if test="intakeId != null">
        intakeId = #{intakeId,jdbcType=BIGINT},
      </if>
      <if test="rtuAddr != null">
        rtuAddr = #{rtuAddr,jdbcType=VARCHAR},
      </if>
      <if test="protocol != null">
        protocol = #{protocol,jdbcType=VARCHAR},
      </if>
      <if test="onlinestate != null">
        onlineState = #{onlinestate,jdbcType=TINYINT},
     <if test="protocolVersion != null">
        protocol_version = #{protocolVersion,jdbcType=INTEGER},
      </if>
      <if test="reporttime != null">
        reportTime = #{reporttime,jdbcType=TIMESTAMP},
      <if test="findDt != null">
        findDt = #{findDt,jdbcType=TIMESTAMP},
      </if>
      <if test="addways != null">
        addWays = #{addways,jdbcType=TINYINT},
     <if test="orgTag != null">
       orgTag = #{orgTag,jdbcType=VARCHAR},
      </if>
      <if test="addWays != null">
        addWays = #{addWays,jdbcType=TINYINT},
      </if>
      <if test="operator != null">
        `operator` = #{operator,jdbcType=BIGINT},
      </if>
      <if test="operatedt != null">
        operateDt = #{operatedt,jdbcType=TIMESTAMP},
      <if test="operateDt != null">
        operateDt = #{operateDt,jdbcType=TIMESTAMP},
      </if>
      <if test="deleted != null">
        deleted = #{deleted,jdbcType=TINYINT},
@@ -137,97 +168,149 @@
  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoPr.PrController">
    <!--@mbg.generated-->
    update pr_controller
    set rtuAddr = #{rtuaddr,jdbcType=VARCHAR},
    set intakeId = #{intakeId,jdbcType=BIGINT},
      rtuAddr = #{rtuAddr,jdbcType=VARCHAR},
      protocol = #{protocol,jdbcType=VARCHAR},
      onlineState = #{onlinestate,jdbcType=TINYINT},
      reportTime = #{reporttime,jdbcType=TIMESTAMP},
      addWays = #{addways,jdbcType=TINYINT},
      protocol_version = #{protocolVersion,jdbcType=INTEGER},
      findDt = #{findDt,jdbcType=TIMESTAMP},
      orgTag = #{orgTag,jdbcType=VARCHAR},
      addWays = #{addWays,jdbcType=TINYINT},
      `operator` = #{operator,jdbcType=BIGINT},
      operateDt = #{operatedt,jdbcType=TIMESTAMP},
      operateDt = #{operateDt,jdbcType=TIMESTAMP},
      deleted = #{deleted,jdbcType=TINYINT}
    where id = #{id,jdbcType=BIGINT}
  </update>
  <!--根据指定获取控制器记录数-->
  <!--根据控制器编号删除取水口编号-->
  <update id="deleteIntakeId">
    UPDATE pr_controller SET intakeId = null WHERE id = #{controllerId}
  </update>
  <!--根据指定条件获取控制器记录数-->
  <select id="getRecordCount" resultType="java.lang.Long">
    SELECT
        COUNT(*) AS recordCount
    FROM pr_controller con
        INNER JOIN pr_intake_controller ic ON ic.controllerId = con.id
        INNER JOIN pr_intake inta ON ic.intakeId = inta.id
    LEFT JOIN pr_intake_controller ic ON ic.controllerId = con.id
    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>
      AND ic.operateType = 1
      AND con.deleted = 0
      <if test = "id != null and id > 0">
        AND con.id = ${id}
        AND con.id = #{id}
      </if>
      <if test = "rtuAddr != null and rtuAddr !=''">
        AND con.rtuAddr like CONCAT('%',#{rtuAddr},'%')
      </if>
      <if test = "onlineState != null and onlineState > 0">
        AND con.onlineState = ${onlineState}
      <if test="isOnLine != null and isOnLine !='' ">
        AND rtus.isOnLine = #{isOnLine}
      </if>
      <if test = "bindNumber != null and bindNumber > 0">
        AND (SELECT COUNT(*) FROM pr_intake_controller WHERE controllerId = con.id AND intakeId = inta.id AND operateType = 1) = ${bindNumber}
        AND (SELECT COUNT(*) FROM pr_intake_controller WHERE controllerId = con.id AND intakeId = inta.id AND operateType = 1) = #{bindNumber}
      </if>
    </where>
  </select>
  <!--根据指定获取控制器记录-->
  <!--根据指定条件获取控制器记录-->
  <select id="getControllers" resultType="com.dy.pipIrrGlobal.voPr.VoController">
    SELECT
        CAST(con.id AS char) AS id,
        con.rtuAddr AS rtuAddr,
        (CASE
            WHEN con.onlineState = 1 THEN "在线"
            WHEN con.onlineState = 2 THEN "离线"
        END) AS onlineState,
        inta.name AS intakeName,
        (SELECT COUNT(*) FROM pr_intake_controller WHERE controllerId = con.id AND intakeId = inta.id AND operateType = 1) AS bindNumber,
        con.reportTime
        con.protocol,
        con.protocol_version,
        inta.remarks,
        rtus.isOnLine,
        (SELECT COUNT(*) FROM pr_intake_controller WHERE controllerId = con.id AND operateType = 1) AS bindNumber,
        con.findDt AS findDt
    FROM pr_controller con
        INNER JOIN pr_intake_controller ic ON ic.controllerId = con.id
        INNER JOIN pr_intake inta ON ic.intakeId = inta.id
        LEFT JOIN pr_intake_controller ic ON ic.controllerId = con.id
        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>
      AND ic.operateType = 1
      AND con.deleted = 0
      <if test = "id != null and id > 0">
        AND con.id = ${id}
        AND con.id = #{id}
      </if>
      <if test = "rtuAddr != null and rtuAddr !=''">
        AND con.rtuAddr like CONCAT('%',#{rtuAddr},'%')
      </if>
      <if test = "onlineState != null and onlineState > 0">
        AND con.onlineState = ${onlineState}
      <if test="isOnLine != null and isOnLine !='' ">
        AND rtus.isOnLine = #{isOnLine}
      </if>
      <if test = "bindNumber != null and bindNumber > 0">
        AND (SELECT COUNT(*) FROM pr_intake_controller WHERE controllerId = con.id AND intakeId = inta.id AND operateType = 1) = ${bindNumber}
        AND (SELECT COUNT(*) FROM pr_intake_controller WHERE controllerId = con.id AND operateType = 1) = #{bindNumber}
      </if>
    </where>
    ORDER BY con.operateDt DESC
    <if test="pageCurr != null and pageSize != null">
      LIMIT ${pageCurr}, ${pageSize}
    </if>
    <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="getControllersByCode" resultType="java.util.Map">
    SELECT id, rtuAddr FROM pr_controller WHERE rtuAddr LIKE CONCAT('%',#{rtuAddr},'%')
  <!--根据控制器地址获取控制器列表-->
  <select id="getControllersByAddr" resultType="java.util.Map">
    SELECT id, rtuAddr FROM pr_controller WHERE deleted = 0 AND rtuAddr LIKE CONCAT('%',#{rtuAddr},'%')
  </select>
  <!--根据控制器地址获取控制器列表-->
  <select id="getControllersByRtuAddrAndIntakeNotNull" parameterType="java.lang.String" resultType="com.dy.pipIrrGlobal.pojoPr.PrController">
    SELECT tb.id id,
    tb.rtuAddr rtuAddr,
    tb.intakeId intakeId,
    tb.findDt findDt,
    tb.operateDt operateDt,
    itb.name intakeName
    FROM pr_controller tb
    INNER JOIN pr_intake itb on tb.intakeId = itb.id
    WHERE tb.deleted = 0 AND tb.intakeId is not null AND tb.rtuAddr=#{rtuAddr,jdbcType=VARCHAR}
  </select>
  <!--根据控制器编号逻辑删除控制-->
  <update id="deleteControllerById">
    UPDATE pr_controller SET deleted = 1 WHERE id = ${controllerId}
    UPDATE pr_controller SET deleted = 1 WHERE id = #{controllerId}
  </update>
  <!--根据控制器编号获取未删除的控制器数量-->
  <select id="getRecordCountOfController" resultType="java.lang.Integer">
    SELECT COUNT(*) AS recordCount FROM pr_controller WHERE deleted = 0 AND id = ${controllerId}
    SELECT COUNT(*) AS recordCount FROM pr_controller WHERE deleted = 0 AND id = #{controllerId}
  </select>
  <!--根据流浪控制器编号获取已绑定记录数-->
  <select id="getBindedCount" resultType="java.lang.Integer">
    SELECT COUNT(*) AS recordCount FROM pr_controller WHERE rtuAddr = (SELECT rtuAddr FROM pr_controller_tramp WHERE id = #{controllerId}) AND intakeId IS NOT NULL
  </select>
  <!--根据取水口ID或阀控器地址获取阀控器对象-->
  <select id="getRtu" resultType="com.dy.pipIrrGlobal.pojoPr.PrController">
    SELECT * FROM pr_controller
    <where>
      AND deleted = 0
      <if test = "intakeId != null">
        AND intakeId = #{intakeId}
      </if>
      <if test = "rtuAddr != null">
        AND rtuAddr = #{rtuAddr}
      </if>
    </where>
    LIMIT 0,1
  </select>
</mapper>