zhubaomin
2025-04-07 e67870fff62635cd14beb0d5988f08aeef4b22fa
pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmCommandHistoryMapper.xml
@@ -1,248 +1,405 @@
<?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.daoRm.RmCommandHistoryMapper">
  <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoRm.RmCommandHistory">
    <!--@mbg.generated-->
    <!--@Table rm_command_history-->
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="command_code" jdbcType="VARCHAR" property="commandCode" />
    <result column="command_name" jdbcType="VARCHAR" property="commandName" />
    <result column="intake_id" jdbcType="BIGINT" property="intakeId" />
    <result column="rtu_addr" jdbcType="VARCHAR" property="rtuAddr" />
    <result column="protocol" jdbcType="VARCHAR" property="protocol" />
    <result column="param" property="param" jdbcType="JAVA_OBJECT" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
    <result column="send_time" jdbcType="TIMESTAMP" property="sendTime" />
    <result column="operator" jdbcType="BIGINT" property="operator" />
    <result column="result" jdbcType="TINYINT" property="result" />
    <result column="result_time" jdbcType="TIMESTAMP" property="resultTime" />
    <result column="result_text" property="resultText" jdbcType="JAVA_OBJECT" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--@mbg.generated-->
    id, command_code, command_name, intake_id, rtu_addr, protocol, param, send_time, `operator`,
    `result`, result_time, result_text
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
    <!--@mbg.generated-->
    select
    <include refid="Base_Column_List" />
    from rm_command_history
    where id = #{id,jdbcType=BIGINT}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
    <!--@mbg.generated-->
    delete from rm_command_history
    where id = #{id,jdbcType=BIGINT}
  </delete>
  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoRm.RmCommandHistory">
    <!--@mbg.generated-->
    insert into rm_command_history (id, command_code, command_name,
      intake_id, rtu_addr, protocol, param,
      send_time, `operator`, `result`,
      result_time, result_text)
    values (#{id,jdbcType=BIGINT}, #{commandCode,jdbcType=VARCHAR}, #{commandName,jdbcType=VARCHAR}, #{intakeId,jdbcType=BIGINT},
      #{rtuAddr,jdbcType=VARCHAR}, #{protocol,jdbcType=VARCHAR}, #{param,jdbcType= JAVA_OBJECT, typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler},
      #{sendTime,jdbcType=TIMESTAMP}, #{operator,jdbcType=BIGINT}, #{result,jdbcType=TINYINT},
      #{resultTime,jdbcType=TIMESTAMP}, #{resultText,jdbcType= JAVA_OBJECT, typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler})
  </insert>
  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoRm.RmCommandHistory">
    <!--@mbg.generated-->
    insert into rm_command_history
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">
        id,
      </if>
      <if test="commandCode != null">
    <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoRm.RmCommandHistory">
        <!--@mbg.generated-->
        <!--@Table rm_command_history-->
        <id column="com_id" jdbcType="BIGINT" property="comId"/>
        <result column="command_code" jdbcType="VARCHAR" property="commandCode"/>
        <result column="command_name" jdbcType="VARCHAR" property="commandName"/>
        <result column="intake_id" jdbcType="BIGINT" property="intakeId"/>
        <result column="rtu_addr" jdbcType="VARCHAR" property="rtuAddr"/>
        <result column="protocol" jdbcType="VARCHAR" property="protocol"/>
        <result column="param" property="param" jdbcType="JAVA_OBJECT"
                typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
        <result column="send_time" jdbcType="TIMESTAMP" property="sendTime"/>
        <result column="operator" jdbcType="BIGINT" property="operator"/>
        <result column="result" jdbcType="TINYINT" property="result"/>
        <result column="result_time" jdbcType="TIMESTAMP" property="resultTime"/>
        <result column="result_text" jdbcType="LONGVARCHAR" property="resultText"/>
    </resultMap>
    <sql id="Base_Column_List">
        <!--@mbg.generated-->
        com_id,
        command_code,
      </if>
      <if test="commandName != null">
        command_name,
      </if>
      <if test="intakeId != null">
        intake_id,
      </if>
      <if test="rtuAddr != null">
        rtu_addr,
      </if>
      <if test="protocol != null">
        protocol,
      </if>
      <if test="param != null">
        param,
      </if>
      <if test="sendTime != null">
        send_time,
      </if>
      <if test="operator != null">
        `operator`,
      </if>
      <if test="result != null">
        `result`,
      </if>
      <if test="resultTime != null">
        result_time,
      </if>
      <if test="resultText != null">
        result_text,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="id != null">
        #{id,jdbcType=BIGINT},
      </if>
      <if test="commandCode != null">
        #{commandCode,jdbcType=VARCHAR},
      </if>
      <if test="commandName != null">
        #{commandName,jdbcType=VARCHAR},
      </if>
      <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="param != null">
        #{param,jdbcType= JAVA_OBJECT, typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler},
      </if>
      <if test="sendTime != null">
        #{sendTime,jdbcType=TIMESTAMP},
      </if>
      <if test="operator != null">
        #{operator,jdbcType=BIGINT},
      </if>
      <if test="result != null">
        #{result,jdbcType=TINYINT},
      </if>
      <if test="resultTime != null">
        #{resultTime,jdbcType=TIMESTAMP},
      </if>
      <if test="resultText != null">
        #{resultText,jdbcType= JAVA_OBJECT, typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoRm.RmCommandHistory">
    <!--@mbg.generated-->
    update rm_command_history
    <set>
      <if test="commandCode != null">
        command_code = #{commandCode,jdbcType=VARCHAR},
      </if>
      <if test="commandName != null">
        command_name = #{commandName,jdbcType=VARCHAR},
      </if>
      <if test="intakeId != null">
        intake_id = #{intakeId,jdbcType=BIGINT},
      </if>
      <if test="rtuAddr != null">
        rtu_addr = #{rtuAddr,jdbcType=VARCHAR},
      </if>
      <if test="protocol != null">
        protocol = #{protocol,jdbcType=VARCHAR},
      </if>
      <if test="param != null">
        param = #{param,jdbcType= JAVA_OBJECT, typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler},
      </if>
      <if test="sendTime != null">
        send_time = #{sendTime,jdbcType=TIMESTAMP},
      </if>
      <if test="operator != null">
        `operator` = #{operator,jdbcType=BIGINT},
      </if>
      <if test="result != null">
        `result` = #{result,jdbcType=TINYINT},
      </if>
      <if test="resultTime != null">
        result_time = #{resultTime,jdbcType=TIMESTAMP},
      </if>
      <if test="resultText != null">
        result_text = #{resultText,jdbcType= JAVA_OBJECT, typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler},
      </if>
    </set>
    where id = #{id,jdbcType=BIGINT}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoRm.RmCommandHistory">
    <!--@mbg.generated-->
    update rm_command_history
    set command_code = #{commandCode,jdbcType=VARCHAR},
      command_name = #{commandName,jdbcType=VARCHAR},
      intake_id = #{intakeId,jdbcType=BIGINT},
      rtu_addr = #{rtuAddr,jdbcType=VARCHAR},
      protocol = #{protocol,jdbcType=VARCHAR},
      param = #{param,jdbcType= JAVA_OBJECT, typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler},
      send_time = #{sendTime,jdbcType=TIMESTAMP},
      `operator` = #{operator,jdbcType=BIGINT},
      `result` = #{result,jdbcType=TINYINT},
      result_time = #{resultTime,jdbcType=TIMESTAMP},
      result_text = #{resultText,jdbcType= JAVA_OBJECT, typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler}
    where id = #{id,jdbcType=BIGINT}
  </update>
        result_text
    </sql>
    <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
        <!--@mbg.generated-->
        select
        <include refid="Base_Column_List"/>
        from rm_command_history
        where com_id = #{comId,jdbcType=BIGINT}
    </select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
        <!--@mbg.generated-->
        delete
        from rm_command_history
        where com_id = #{comId,jdbcType=BIGINT}
    </delete>
    <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoRm.RmCommandHistory">
        <!--@mbg.generated-->
        insert into rm_command_history (com_id, command_code, command_name,
                                        intake_id, rtu_addr, protocol,
                                        param, send_time, `operator`,
                                        `result`, result_time, result_text)
        values (#{comId,jdbcType=BIGINT}, #{commandCode,jdbcType=VARCHAR}, #{commandName,jdbcType=VARCHAR},
                #{intakeId,jdbcType=BIGINT}, #{rtuAddr,jdbcType=VARCHAR}, #{protocol,jdbcType=VARCHAR},
                #{param,jdbcType= JAVA_OBJECT, typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler},
                #{sendTime,jdbcType=TIMESTAMP}, #{operator,jdbcType=BIGINT},
                #{result,jdbcType=TINYINT}, #{resultTime,jdbcType=TIMESTAMP}, #{resultText,jdbcType=LONGVARCHAR})
    </insert>
    <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoRm.RmCommandHistory">
        <!--@mbg.generated-->
        insert into rm_command_history
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="comId != null">
                com_id,
            </if>
            <if test="commandCode != null">
                command_code,
            </if>
            <if test="commandName != null">
                command_name,
            </if>
            <if test="intakeId != null">
                intake_id,
            </if>
            <if test="rtuAddr != null">
                rtu_addr,
            </if>
            <if test="protocol != null">
                protocol,
            </if>
            <if test="param != null">
                param,
            </if>
            <if test="sendTime != null">
                send_time,
            </if>
            <if test="operator != null">
                `operator`,
            </if>
            <if test="result != null">
                `result`,
            </if>
            <if test="resultTime != null">
                result_time,
            </if>
            <if test="resultText != null">
                result_text,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="comId != null">
                #{comId,jdbcType=BIGINT},
            </if>
            <if test="commandCode != null">
                #{commandCode,jdbcType=VARCHAR},
            </if>
            <if test="commandName != null">
                #{commandName,jdbcType=VARCHAR},
            </if>
            <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="param != null">
                #{param,jdbcType= JAVA_OBJECT, typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler},
            </if>
            <if test="sendTime != null">
                #{sendTime,jdbcType=TIMESTAMP},
            </if>
            <if test="operator != null">
                #{operator,jdbcType=BIGINT},
            </if>
            <if test="result != null">
                #{result,jdbcType=TINYINT},
            </if>
            <if test="resultTime != null">
                #{resultTime,jdbcType=TIMESTAMP},
            </if>
            <if test="resultText != null">
                #{resultText,jdbcType=LONGVARCHAR},
            </if>
        </trim>
    </insert>
    <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoRm.RmCommandHistory">
        <!--@mbg.generated-->
        update rm_command_history
        <set>
            <if test="commandCode != null">
                command_code = #{commandCode,jdbcType=VARCHAR},
            </if>
            <if test="commandName != null">
                command_name = #{commandName,jdbcType=VARCHAR},
            </if>
            <if test="intakeId != null">
                intake_id = #{intakeId,jdbcType=BIGINT},
            </if>
            <if test="rtuAddr != null">
                rtu_addr = #{rtuAddr,jdbcType=VARCHAR},
            </if>
            <if test="protocol != null">
                protocol = #{protocol,jdbcType=VARCHAR},
            </if>
            <if test="param != null">
                param = #{param,jdbcType= JAVA_OBJECT, typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler},
            </if>
            <if test="sendTime != null">
                send_time = #{sendTime,jdbcType=TIMESTAMP},
            </if>
            <if test="operator != null">
                `operator` = #{operator,jdbcType=BIGINT},
            </if>
            <if test="result != null">
                `result` = #{result,jdbcType=TINYINT},
            </if>
            <if test="resultTime != null">
                result_time = #{resultTime,jdbcType=TIMESTAMP},
            </if>
            <if test="resultText != null">
                result_text = #{resultText,jdbcType=LONGVARCHAR},
            </if>
        </set>
        where com_id = #{comId,jdbcType=BIGINT}
    </update>
    <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoRm.RmCommandHistory">
        <!--@mbg.generated-->
        update rm_command_history
        set command_code = #{commandCode,jdbcType=VARCHAR},
            command_name = #{commandName,jdbcType=VARCHAR},
            intake_id    = #{intakeId,jdbcType=BIGINT},
            rtu_addr     = #{rtuAddr,jdbcType=VARCHAR},
            protocol     = #{protocol,jdbcType=VARCHAR},
            param        = #{param,jdbcType= JAVA_OBJECT, typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler},
            send_time    = #{sendTime,jdbcType=TIMESTAMP},
            `operator`   = #{operator,jdbcType=BIGINT},
            `result`     = #{result,jdbcType=TINYINT},
            result_time  = #{resultTime,jdbcType=TIMESTAMP},
            result_text  = #{resultText,jdbcType=LONGVARCHAR}
        where com_id = #{comId,jdbcType=BIGINT}
    </update>
  <!--根据操作员ID获取未关阀记录(包含在线情况)-->
  <select id="getUnclosedValves" resultType="com.dy.pipIrrGlobal.voRm.VoUnclosedValve">
    SELECT
        com.command_code AS commandCode,
        inta.name AS intakeNum,
        rtus.isOnLine,
        com.rtu_addr AS rtuAddr,
        com.param ->>'$.orderNo' AS orderNo,
        com.param ->>'$.icCardNo' AS vcNum,
        com.send_time AS openTime
    FROM rm_command_history com
        INNER JOIN pr_controller con ON com.rtu_addr = con.rtuAddr
        INNER JOIN pr_intake inta ON con.intakeId = inta.id
        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 com.rtu_addr = rtus.rtuAddr
    <where>
      AND (com.command_code = '92' OR com.command_code = 'A2' OR com.command_code = '97')
      AND com.operator = #{operator}
      AND NOT EXISTS (
        SELECT *
    <!--根据operator获取未关阀的RTU地址及虚拟卡编号数据对,获取未关阀记录使用-->
    <select id="getUnclosedRtus" resultType="com.dy.pipIrrGlobal.voRm.VoRtuAndVc">
        SELECT
            com.rtu_addr AS rtuAddr,
            com.param ->> '$.icCardNo' AS vcNum
        FROM rm_command_history com
        where 1=1
          AND com.operator = #{operator}
          AND com.result = 1
          AND ((com.protocol = 'p206V1' OR com.protocol = 'p206V2') AND (com.command_code = '92' OR com.command_code = '97' OR com.command_code = '99' OR com.command_code = 'A0' OR com.command_code = 'A1' OR com.command_code = 'A2'))
          AND (
            SELECT op_dt FROM rm_open_close_valve_last
            WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo'
            ORDER BY op_dt DESC
            LIMIT 1
        ) IS NOT NULL
          AND (
            SELECT cl_dt FROM rm_open_close_valve_last
            WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo'
            ORDER BY op_dt DESC
            LIMIT 1
        ) IS NULL
        GROUP BY com.rtu_addr, com.param ->> '$.icCardNo'
    </select>
    <!--根据RTU地址和虚拟卡编号获取成功开阀的最后一条记录,获取未关阀记录使用-->
    <select id="getLastComId" resultType="java.lang.Long">
        SELECT com_id AS comId
        FROM rm_command_history
        WHERE (result IS NULL OR result = 1 )
            AND (command_code = '93' OR command_code = 'A3' OR command_code = '98')
            AND param ->>'$.orderNo' = com.param ->>'$.orderNo'
      )
    </where>
    ORDER BY com.send_time DESC
  </select>
        WHERE result = 1
            AND ((protocol = 'p206V1' OR protocol = 'p206V2')
            AND (command_code = '92' OR command_code = '97' OR command_code = '99' OR command_code = 'A0' OR command_code = 'A1' OR command_code = 'A2'))
            AND rtu_addr = #{rtuAddr} AND param ->> '$.icCardNo' = #{vcNum}
        ORDER BY send_time DESC
        LIMIT 1
    </select>
  <!--根据取水口ID获取该取水口未关阀参数-->
  <select id="getUncloseParam" resultType="com.dy.pipIrrGlobal.voRm.VoUnclosedParam">
    SELECT
      com.rtu_addr AS rtuAddr,
      com.param ->>'$.orderNo' AS orderNo,
      com.param ->>'$.icCardNo' AS vcNum
    FROM rm_command_history com
      INNER JOIN pr_controller con ON com.rtu_addr = con.rtuAddr
      INNER JOIN pr_intake inta ON con.intakeId = inta.id
      INNER JOIN JSON_TABLE(
      '[{"rtuAddr":"620201000029","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',
      '$[*]' COLUMNS(
      rtuAddr VARCHAR(20) PATH '$.rtuAddr',
      isOnLine BOOLEAN PATH '$.isOnLine'
      )
      ) rtus ON com.rtu_addr = rtus.rtuAddr
    WHERE (com.command_code = '92' OR com.command_code = 'A2' OR com.command_code = '97') AND con.intakeId = #{intakeId}
      AND NOT EXISTS (
      SELECT *
      FROM rm_command_history
      WHERE (result IS NULL OR result = 1 )
      AND (command_code = '93' OR command_code = 'A3' OR command_code = '98')
      AND param ->>'$.orderNo' = com.param ->>'$.orderNo'
      )
    ORDER BY com.send_time DESC
      LIMIT 0,1
  </select>
    <select id="getUnclosedValves" resultType="com.dy.pipIrrGlobal.voRm.VoUnclosedValve">
        SELECT
            inta.name AS intakeNum,
            IFNULL(rtus.isOnLine, false) AS isOnLine,
            com.rtu_addr AS rtuAddr,
            com.param ->> '$.icCardNo' AS vcNum,
            (
                SELECT param ->> '$.orderNo' AS orderNo
                FROM rm_command_history
                WHERE rtu_addr = com.rtu_addr
                ORDER BY send_time desc
                LIMIT 0,1
            ) AS orderNo,
            'toClose'                  AS state,
            CASE
                WHEN com.command_code = 'A1' OR com.command_code = 'A2' THEN 1
                ELSE 0
            END AS planned,
            com.send_time AS sendTime,
            (SELECT dt FROM rm_work_report_last
                WHERE rtu_addr = com.rtu_addr AND ic_card_no = com.param ->> '$.icCardNo'
                    AND dt > com.send_time
                ORDER BY dt DESC
             LIMIT 1) AS dt,
            (SELECT water_instant FROM rm_work_report_last
                WHERE rtu_addr = com.rtu_addr AND ic_card_no = com.param ->> '$.icCardNo'
                    AND dt > com.send_time
                ORDER BY dt DESC
            LIMIT 1) AS waterInstant
        FROM rm_command_history com
            INNER JOIN pr_controller con ON com.rtu_addr = con.rtuAddr
            INNER JOIN pr_intake inta ON con.intakeId = inta.id
            LEFT JOIN JSON_TABLE(
                <!--'[{"rtuAddr":"620201000030","isOnLine":true}]',-->
                #{onLineMap},
                '$[*]' COLUMNS (
                    rtuAddr VARCHAR(20) PATH '$.rtuAddr',
                    isOnLine BOOLEAN PATH '$.isOnLine'
                )
            ) rtus ON com.rtu_addr = rtus.rtuAddr
        <where>
            AND   com.com_id in (${comIds})
            AND (
                SELECT op_dt FROM rm_open_close_valve_last
                WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo'
                ORDER BY op_dt DESC
                LIMIT 1
            ) IS NOT NULL
            AND (
                SELECT cl_dt FROM rm_open_close_valve_last
                WHERE rtu_addr = com.rtu_addr AND op_ic_card_no = com.param ->> '$.icCardNo'
                ORDER BY op_dt DESC
                LIMIT 1
            ) IS NULL
        </where>
        GROUP BY inta.name, rtus.isOnLine, com.rtu_addr, com.param ->> '$.icCardNo', com.command_code, com.send_time, dt, waterInstant
        ORDER BY com.send_time DESC
    </select>
    <!--根据取水口ID获取该取水口未关阀参数-->
    <select id="getUncloseParam" resultType="com.dy.pipIrrGlobal.voRm.VoUnclosedParam">
        SELECT com.rtu_addr               AS rtuAddr,
               com.param ->> '$.orderNo'  AS orderNo,
               com.param ->> '$.icCardNo' AS vcNum
        FROM rm_command_history com
            INNER JOIN pr_controller con ON com.rtu_addr = con.rtuAddr
            INNER JOIN pr_intake inta ON con.intakeId = inta.id
            INNER JOIN JSON_TABLE(
        <!--      '[{"rtuAddr":"620201000029","isOnLine":true},{"rtuAddr":"4000004","isOnLine":true},{"rtuAddr":"dy20240325","isOnLine":false}]',-->
        #{onLineMap},
        '$[*]' COLUMNS (
            rtuAddr VARCHAR(20) PATH '$.rtuAddr',
            isOnLine BOOLEAN PATH '$.isOnLine'
            )
            ) rtus ON com.rtu_addr = rtus.rtuAddr
        WHERE (com.command_code = '92' OR com.command_code = 'A2' OR com.command_code = '97')
          AND con.intakeId = #{intakeId}
          AND NOT EXISTS(
                SELECT *
                FROM rm_command_history
                WHERE (result IS NULL OR result = 1)
                  AND (command_code = '93' OR command_code = 'A3' OR command_code = '98')
                  AND param ->> '$.orderNo' = com.param ->> '$.orderNo'
            )
        ORDER BY com.send_time DESC
        LIMIT 0,1
    </select>
    <!--根据指定条件获取命令日志历史记录总数-->
    <select id="getCommandHistoriesCount" resultType="java.lang.Long">
        SELECT COUNT(*) AS recordCount
        FROM rm_command_history his
                 INNER JOIN pr_intake inta ON inta.id = his.intake_id
        <where>
            <if test="intakeId != null">
                AND his.intake_id = #{intakeId}
            </if>
            <if test="commandName != null and commandName != ''">
                AND his.command_name LIKE CONCAT('%', #{commandName}, '%')
            </if>
            <if test="result != null">
                AND his.result = #{result}
            </if>
            <if test="timeStart != null and timeStop != null">
                AND his.send_time BETWEEN #{timeStart} AND #{timeStop}
            </if>
        </where>
    </select>
    <!--根据指定条件获取命令日志历史记录-->
    <select id="getCommandHistories" resultType="com.dy.pipIrrGlobal.voRm.VoCommand">
        SELECT his.com_id                  AS comId,
               CONCAT(his.command_name, '(', his.command_code, ')') AS commandName,
               inta.name                   AS intakeName,
               his.rtu_addr                AS rtuAddr,
               his.protocol                AS protocol,
               his.send_time               AS sendTime,
               his.result_time             AS resultTime,
               (CASE
                    WHEN his.result = 1 THEN '成功'
                    ELSE '失败'
                   END)                    AS state,
               his.result_text             AS result,
               IFNULL(cli.name, user.name) AS userName
        FROM rm_command_history his
                 INNER JOIN pr_intake inta ON inta.id = his.intake_id
                 LEFT JOIN se_client cli ON cli.id = his.operator
                 LEFT JOIN ba_user user ON user.id = his.operator
        <where>
            <if test="intakeId != null">
                AND his.intake_id = #{intakeId}
            </if>
            <if test="commandName != null and commandName != ''">
                AND his.command_name LIKE CONCAT('%', #{commandName}, '%')
            </if>
            <if test="result != null">
                AND his.result = #{result}
            </if>
            <if test="timeStart != null and timeStop != null">
                AND his.send_time BETWEEN #{timeStart} AND #{timeStop}
            </if>
        </where>
        ORDER BY his.com_id DESC
        <trim prefix="limit ">
            <if test="start != null and count != null">
                #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
            </if>
        </trim>
    </select>
    <!--根据命令日志ID获取预约时间,向虚拟卡写开阀时间用-->
    <select id="getTimeByCommId" resultType="java.lang.String">
        SELECT
            CONCAT(param ->> '$.year', '-', param ->> '$.month', '-', param ->> '$.day', ' ',  param ->> '$.hour', ':', param ->> '$.minute', ':00') AS openTime
        FROM rm_command_history
        WHERE com_id = #{commId}
    </select>
    <!--根据命令日志ID获取取水口及虚拟卡信息,终止灌溉计划时使用,用来执行远程关阀-->
    <select id="getIntakeVc" resultType="com.dy.pipIrrGlobal.voRm.VoIntakeVc">
        SELECT
            intake_id AS intakeId,
            (SELECT id FROM se_virtual_card WHERE vc_num = param ->> '$.icCardNo') AS vcId
        FROM rm_command_history WHERE com_id = #{commandId}
            LIMIT 0, 1
    </select>
</mapper>