zhubaomin
5 天以前 ee1800e3988e4913f5328c2cba07735fb4d06eff
pipIrr-platform/pipIrr-global/src/main/resources/mapper/SeClientCardMapper.xml
@@ -11,7 +11,7 @@
    <result column="clientId" jdbcType="BIGINT" property="clientid" />
    <result column="money" jdbcType="FLOAT" property="money" />
    <result column="state" jdbcType="TINYINT" property="state" />
    <result column="original_card_id" jdbcType="BIGINT" property="originalCardId"/>
    <result column="original_card_id" jdbcType="BIGINT" property="originalCardId" />
    <result column="createDt" jdbcType="TIMESTAMP" property="createdt" />
    <result column="replaceDt" jdbcType="TIMESTAMP" property="replacedt" />
    <result column="rechargeDt" jdbcType="TIMESTAMP" property="rechargedt" />
@@ -23,11 +23,13 @@
    <result column="consumeDt" jdbcType="TIMESTAMP" property="consumedt" />
    <result column="lastOper" jdbcType="TINYINT" property="lastoper" />
    <result column="remarks" jdbcType="VARCHAR" property="remarks" />
    <result column="order_no" jdbcType="VARCHAR" property="orderNo" />
  </resultMap>
  <sql id="Base_Column_List">
    <!--@mbg.generated-->
    id, protocol, cardAddr, cardNum, clientId, money, `state`, original_card_id, createDt, replaceDt, rechargeDt,
    lossDtDt, cancelDt, unlockDt, reversalDt, refundDt, consumeDt, lastOper, remarks
    id, protocol, cardAddr, cardNum, clientId, money, `state`, original_card_id, createDt,
    replaceDt, rechargeDt, lossDtDt, cancelDt, unlockDt, reversalDt, refundDt, consumeDt,
    lastOper, remarks, order_no
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
    <!--@mbg.generated-->
@@ -41,69 +43,30 @@
    delete from se_client_card
    where id = #{id,jdbcType=BIGINT}
  </delete>
  <!--依据水卡地址获取水卡编号(12月19日废弃)-->
  <select id="getCardIdByAddr" resultType="java.lang.Long">
    SELECT id AS cardId FROM se_client_card WHERE cardAddr = #{cardAddr}
  </select>
  <!--根据水卡编号获取水卡表主键(12月19日添加后废弃)-->
  <select id="getCardIdByNum" resultType="java.lang.Long">
    SELECT id AS cardId FROM se_client_card WHERE cardNum = #{cardNum}
  </select>
  <!--根据水卡编号获取水卡表主键及农户编号-->
  <select id="getCardIdAndClientNum" resultType="java.util.Map">
    <!--    SELECT id AS cardId, clientNum FROM se_client_card WHERE cardNum = #{cardNum}-->
    SELECT
      card.id AS cardId,
      cli.clientNum,
      cli.id AS clientId,
      protocol
    FROM se_client_card card
    INNER JOIN se_client cli ON card.clientId = cli.id
    WHERE card.cardNum = #{cardNum}
  </select>
  <!-- 根据水卡编号获取水卡对应的农户id和姓名 -->
  <select id="getClientIdAndNameByCardAddrAndCardNo" resultType="java.util.Map">
    SELECT
    cli.id AS clientId,
    cli.name AS clientName
    FROM se_client_card card
    INNER JOIN se_client cli ON card.clientId = cli.id
    WHERE card.cardAddr = #{cardAddr} and  card.cardNum = #{cardNum}
  </select>
  <!--根据行政区划串模糊查询水卡编号-->
  <select id="getCardNumOfMax"  resultType="java.lang.String">
    SELECT cardNum
    FROM se_client_card
    WHERE cardNum LIKE CONCAT(#{areaCode},'%')
    ORDER BY cardNum desc
    LIMIT 0,1
  </select>
  <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard">
  <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard">
    <!--@mbg.generated-->
    insert into se_client_card (id, protocol, cardAddr, cardNum, clientId,
      money, `state`, original_card_id, createDt,
    insert into se_client_card (id, protocol, cardAddr,
      cardNum, clientId, money,
      `state`, original_card_id, createDt,
      replaceDt, rechargeDt, lossDtDt, 
      cancelDt, unlockDt, reversalDt, refundDt,
      consumeDt, lastOper, remarks
      )
    values (#{id,jdbcType=BIGINT}, #{protocol,jdbcType=VARCHAR}, #{cardaddr,jdbcType=VARCHAR}, #{cardnum,jdbcType=BIGINT}, #{clientid,jdbcType=BIGINT},
      #{money,jdbcType=FLOAT}, #{state,jdbcType=TINYINT}, #{originalCardId,jdbcType=BIGINT}, #{createdt,jdbcType=TIMESTAMP},
      cancelDt, unlockDt, reversalDt,
      refundDt, consumeDt, lastOper,
      remarks, order_no)
    values (#{id,jdbcType=BIGINT}, #{protocol,jdbcType=VARCHAR}, #{cardaddr,jdbcType=VARCHAR},
      #{cardnum,jdbcType=BIGINT}, #{clientid,jdbcType=BIGINT}, #{money,jdbcType=FLOAT},
      #{state,jdbcType=TINYINT}, #{originalCardId,jdbcType=BIGINT}, #{createdt,jdbcType=TIMESTAMP},
      #{replacedt,jdbcType=TIMESTAMP}, #{rechargedt,jdbcType=TIMESTAMP}, #{lossdtdt,jdbcType=TIMESTAMP}, 
      #{canceldt,jdbcType=TIMESTAMP}, #{unlockdt,jdbcType=TIMESTAMP}, #{reversaldt,jdbcType=TIMESTAMP},
      #{refunddt,jdbcType=TIMESTAMP}, #{consumedt,jdbcType=TIMESTAMP}, #{lastoper,jdbcType=TINYINT}, #{remarks,jdbcType=VARCHAR}
      )
      #{canceldt,jdbcType=TIMESTAMP}, #{unlockdt,jdbcType=TIMESTAMP}, #{reversaldt,jdbcType=TIMESTAMP},
      #{refunddt,jdbcType=TIMESTAMP}, #{consumedt,jdbcType=TIMESTAMP}, #{lastoper,jdbcType=TINYINT},
      #{remarks,jdbcType=VARCHAR}, #{orderNo,jdbcType=VARCHAR})
  </insert>
  <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard" useGeneratedKeys="true">
  <insert id="insertSelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard">
    <!--@mbg.generated-->
    insert into se_client_card
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">
        id,
      </if>
      <if test="protocol != null">
        protocol,
      </if>
@@ -158,8 +121,14 @@
      <if test="remarks != null">
        remarks,
      </if>
      <if test="orderNo != null">
        order_no,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="id != null">
        #{id,jdbcType=BIGINT},
      </if>
      <if test="protocol != null">
        #{protocol,jdbcType=VARCHAR},
      </if>
@@ -214,6 +183,9 @@
      <if test="remarks != null">
        #{remarks,jdbcType=VARCHAR},
      </if>
      <if test="orderNo != null">
        #{orderNo,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard">
@@ -239,7 +211,7 @@
        `state` = #{state,jdbcType=TINYINT},
      </if>
      <if test="originalCardId != null">
        `original_card_id` = #{originalCardId,jdbcType=BIGINT},
        original_card_id = #{originalCardId,jdbcType=BIGINT},
      </if>
      <if test="createdt != null">
        createDt = #{createdt,jdbcType=TIMESTAMP},
@@ -274,14 +246,17 @@
      <if test="remarks != null">
        remarks = #{remarks,jdbcType=VARCHAR},
      </if>
      <if test="orderNo != null">
        order_no = #{orderNo,jdbcType=VARCHAR},
      </if>
    </set>
    where id = #{id,jdbcType=BIGINT}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard">
    <!--@mbg.generated-->
    update se_client_card
    set protocol = #{protocol,jdbcType=VARCHAR}
    cardAddr = #{cardaddr,jdbcType=VARCHAR},
    set protocol = #{protocol,jdbcType=VARCHAR},
      cardAddr = #{cardaddr,jdbcType=VARCHAR},
      cardNum = #{cardnum,jdbcType=BIGINT},
      clientId = #{clientid,jdbcType=BIGINT},
      money = #{money,jdbcType=FLOAT},
@@ -297,130 +272,231 @@
      refundDt = #{refunddt,jdbcType=TIMESTAMP},
      consumeDt = #{consumedt,jdbcType=TIMESTAMP},
      lastOper = #{lastoper,jdbcType=TINYINT},
      remarks = #{remarks,jdbcType=VARCHAR}
      remarks = #{remarks,jdbcType=VARCHAR},
      order_no = #{orderNo,jdbcType=VARCHAR}
    where id = #{id,jdbcType=BIGINT}
  </update>
  <!--根据农户主键获取水卡列表-->
  <select id="getCardInfoByClientId" resultType="com.dy.pipIrrGlobal.voSe.VoCardInfo">
    SELECT
        cardNum,
        '用户卡' AS cardType,
        money,
        (CASE
            WHEN state = 1 THEN "正常"
            WHEN state = 2 THEN "已注销"
            ELSE "已挂失"
        END) AS state
  <!--依据水卡地址获取水卡编号(12月19日废弃)-->
  <!--2024-06-30取消废弃,恢复使用-->
  <select id="getCardIdByAddr" resultType="java.lang.Long">
    SELECT id AS cardId
    FROM se_client_card
    WHERE clientId = ${clientId}
    WHERE cardAddr = #{cardAddr}
    ORDER BY id DESC
    LIMIT 1
  </select>
  <!--根据水卡编号获取水卡表主键(12月19日添加后废弃)-->
  <select id="getCardIdByNum" resultType="java.lang.Long">
    SELECT id AS cardId
    FROM se_client_card
    WHERE cardNum = #{cardNum}
  </select>
  <!--根据水卡编号获取水卡表主键及农户编号-->
  <select id="getCardIdAndClientNum" resultType="java.util.Map">
    <!--    SELECT id AS cardId, clientNum FROM se_client_card WHERE cardNum = #{cardNum}-->
    SELECT card.id AS cardId,
    cli.clientNum,
    cli.id  AS clientId,
    protocol
    FROM se_client_card card
    INNER JOIN se_client cli ON card.clientId = cli.id
    WHERE card.cardNum = #{cardNum}
  </select>
  <!-- 根据水卡编号获取水卡对应的农户id和姓名 -->
  <select id="getClientIdAndNameByCardAddrAndCardNo" resultType="java.util.Map">
    SELECT cli.id   AS clientId,
    cli.name AS clientName,
    cli.address AS clientAddress
    FROM se_client_card card
    INNER JOIN se_client cli ON card.clientId = cli.id
    WHERE card.cardAddr = #{cardAddr}
    and card.cardNum = #{cardNum}
  </select>
  <!-- 根据水卡编号获取水卡 -->
  <select id="getCardsByAddrAndNum" resultType="com.dy.pipIrrGlobal.voSe.VoCardInfo1">
    SELECT id,
    money
    FROM se_client_card
    WHERE cardAddr = #{cardAddr}
    and cardNum = #{cardNum}
  </select>
  <!--根据行政区划串模糊查询水卡编号-->
  <select id="getCardNumOfMax" resultType="java.lang.String">
    SELECT cardNum
    FROM se_client_card
    WHERE cardNum LIKE CONCAT(#{areaCode}, '%')
    ORDER BY cardNum desc
    LIMIT 0,1
  </select>
  <update id="updateMoney">
    update se_client_card
    set money = #{money,jdbcType=FLOAT}
    where id = #{id,jdbcType=BIGINT}
  </update>
  <!--根据农户主键获取水卡列表(物理卡+虚拟卡)-->
  <select id="getCardInfoByClientId" resultType="com.dy.pipIrrGlobal.voSe.VoCardInfo">
    SELECT *
    FROM (SELECT
    '物理卡' AS cardType,
    card.cardNum AS cardNum,
    card.money   AS money,
    (CASE
    WHEN card.state = 1 THEN '正常'
    WHEN card.state = 2 THEN '已注销'
    ELSE '已挂失'
    END) AS state
    FROM se_client_card card
    INNER JOIN se_client cli ON cli.id = card.clientId
    WHERE state != 4 AND card.clientId = #{clientId,jdbcType=BIGINT}
    UNION ALL
    SELECT
    '虚拟卡' AS cardType,
    vc.vc_num AS cardNum,
    ROUND(vc.money /100, 2)  AS money,
    (CASE
    WHEN vc.in_use = 0 THEN '未使用'
    WHEN vc.in_use = 1 THEN '使用中'
    END) AS state
    FROM se_virtual_card vc
    INNER JOIN se_client cli ON cli.id = vc.client_id
    WHERE vc.state = 1 AND vc.client_id = #{clientId,jdbcType=BIGINT}
    ) card
    ORDER BY card.Money DESC, card.State DESC
  </select>
  <!--根据水卡编号获取操作记录列表-->
  <select id="getOperateRecordsByCardNum" resultType="java.util.HashMap">
    SELECT * FROM v_operate WHERE cardNum = ${cardNum}
    SELECT
    ope.id AS orderNumber,
    cli.villageId,
    cli.districtTitle,
    cli.clientNum,
    cli.`name`,
    card.cardNum,
    cli.idCard,
    cli.phone,
    IFNULL(ope.money,0) AS money,
    IFNULL(ope.gift,0) AS gift,
    IFNULL(ope.card_cost,0) AS cardCost,
    IFNULL((ope.money + ope.trade_amount + ope.gift),0) AS afterRecharge,
    ope.payment_id AS paymentId,
    pay.name AS paymentMethod,
    CASE
    WHEN ope.operate_type = 1 THEN '开卡'
    WHEN ope.operate_type = 2 THEN '充值'
    WHEN ope.operate_type = 3 THEN '销卡'
    END AS operateType,
    ope.operate_dt AS operateDt,
    user.name AS operatorName
    FROM se_card_operate ope
    LEFT JOIN se_client cli ON cli.id = ope.client_id
    LEFT JOIN se_client_card card ON card.id = ope.card_id
    LEFT JOIN se_payment_method pay ON pay.id = ope.payment_id
    LEFT JOIN ba_user user ON user.id = ope.operator
    WHERE ope.operate_valid = 2 AND ope.operate_type in (1,2,3) AND cardNum = #{cardNum,jdbcType=BIGINT}
    <!--        SELECT *-->
    <!--        FROM v_operate-->
    <!--        WHERE cardNum = #{cardNum,jdbcType=BIGINT}-->
  </select>
  <!--根据水卡编号获取余额-->
  <select id="getMoneyByCardNum" resultType="java.lang.Float">
    SELECT money FROM se_client_card WHERE cardNum = ${cardNum}
    SELECT money
    FROM se_client_card
    WHERE cardNum = #{cardNum,jdbcType=BIGINT}
  </select>
  <!--根据水卡编号获取充值总额-->
  <select id="sumRechargeByCardNum" resultType="java.lang.Float">
    SELECT
      SUM(his.amount) AS amount
    SELECT SUM(his.amount) AS amount
    FROM se_recharge_history his
        INNER JOIN se_client_card card ON his.cardId = card.id
    WHERE card.cardNum = ${cardNum}
    INNER JOIN se_client_card card ON his.cardId = card.id
    WHERE card.cardNum = #{cardNum,jdbcType=BIGINT}
  </select>
  <!--根据水卡编号获取卡片状态:1-开卡,2-补卡,3-充值,4-挂失,5-注销,6-解锁,7-冲正,8-消费-->
  <select id="getCardStateByCardNum" resultType="java.lang.String">
<!--    SELECT-->
<!--      (CASE-->
<!--         WHEN lastOper = 1 THEN "开卡"-->
<!--         WHEN lastOper = 2 THEN "补卡"-->
<!--         WHEN lastOper = 3 THEN "充值"-->
<!--         WHEN lastOper = 4 THEN "挂失"-->
<!--         WHEN lastOper = 5 THEN "注销"-->
<!--         WHEN lastOper = 6 THEN "解锁"-->
<!--         WHEN lastOper = 7 THEN "冲正"-->
<!--         WHEN lastOper = 8 THEN "消费"-->
<!--        END) AS stateName-->
<!--    FROM se_client_card-->
<!--    WHERE cardNum = ${cardNum}-->
    SELECT
        (CASE
            WHEN state = 1 THEN '正常'
            WHEN state = 2 THEN '已注销'
            WHEN state = 3 THEN '已挂失'
        END) AS stateName
    <!--    SELECT-->
    <!--      (CASE-->
    <!--         WHEN lastOper = 1 THEN "开卡"-->
    <!--         WHEN lastOper = 2 THEN "补卡"-->
    <!--         WHEN lastOper = 3 THEN "充值"-->
    <!--         WHEN lastOper = 4 THEN "挂失"-->
    <!--         WHEN lastOper = 5 THEN "注销"-->
    <!--         WHEN lastOper = 6 THEN "解锁"-->
    <!--         WHEN lastOper = 7 THEN "冲正"-->
    <!--         WHEN lastOper = 8 THEN "消费"-->
    <!--        END) AS stateName-->
    <!--    FROM se_client_card-->
    <!--    WHERE cardNum = ${cardNum}-->
    SELECT (CASE
    WHEN state = 1 THEN '正常'
    WHEN state = 2 THEN '已注销'
    WHEN state = 3 THEN '已挂失'
    WHEN state = 4 THEN '无效卡片'
    END) AS stateName
    FROM se_client_card
    WHERE cardNum = ${cardNum}
    WHERE cardNum = #{cardNum,jdbcType=BIGINT}
  </select>
  <!--根据指定条件获取水卡列表记录数,应用程序使用-->
  <select id="getCardsCount" parameterType="java.util.Map" resultType="java.lang.Long">
    SELECT
        COUNT(*) AS recordCount
    SELECT COUNT(*) AS recordCount
    FROM se_client_card card
      INNER JOIN se_client cli ON card.clientId = cli.id
    LEFT JOIN se_client cli ON card.clientId = cli.id
    <where>
      AND card.state = 1
      <if test = "clientNum != null and clientNum !=''">
        AND cli.clientNum like CONCAT('%',#{clientNum},'%')
      <if test="clientNum != null and clientNum != ''">
        AND cli.clientNum like CONCAT('%', #{clientNum}, '%')
      </if>
      <if test = "clientName != null and clientName !=''">
        AND cli.name like CONCAT('%',#{clientName},'%')
      <if test="clientName != null and clientName != ''">
        AND cli.name like CONCAT('%', #{clientName}, '%')
      </if>
      <if test = "cardNum != null and cardNum !=''">
        AND card.cardNum like CONCAT('%',#{cardNum},'%')
      <if test="cardNum != null and cardNum != ''">
        AND card.cardNum like CONCAT('%', #{cardNum}, '%')
      </if>
    </where>
  </select>
  <!--根据指定条件获取水卡列表,应用程序使用-->
  <select id="getCards" resultType="com.dy.pipIrrGlobal.voSe.VoCards">
    SELECT
        cli.clientNum,
        cli.name AS clientName,
        cardNum,
<!--        CASE-->
<!--            WHEN card.cardNum LIKE '10%' THEN CONCAT(SUBSTRING(card.cardNum, 7, 6),SUBSTRING(card.cardNum, 14, 4))-->
<!--            ELSE card.cardNum-->
<!--        END AS cardNum,-->
        cli.phone,
        cli.idCard,
        card.state AS cardState,
<!--        (CASE-->
<!--            WHEN card.state = 1 THEN '正常'-->
<!--            WHEN card.state = 2 THEN '已注销'-->
<!--            WHEN card.state = 3 THEN '已挂失'-->
<!--        End) AS stateName,-->
        '正常' AS stateName,
        '农户卡' AS cardType,
        FORMAT(card.money, 2) AS money
    SELECT cli.clientNum,
    cli.name AS clientName,
    cardNum,
    cli.phone,
    cli.idCard,
    card.state AS cardState,
    '正常' AS stateName,
    '农户卡' AS cardType,
    FORMAT(card.money, 2) AS money
    FROM se_client_card card
        INNER JOIN se_client cli ON card.clientId = cli.id
    LEFT JOIN se_client cli ON card.clientId = cli.id
    <where>
      AND card.state = 1
      <if test = "clientNum != null and clientNum !=''">
        AND cli.clientNum like CONCAT('%',#{clientNum},'%')
      <if test="clientNum != null and clientNum != ''">
        AND cli.clientNum like CONCAT('%', #{clientNum}, '%')
      </if>
      <if test = "clientName != null and clientName !=''">
        AND cli.name like CONCAT('%',#{clientName},'%')
      <if test="clientName != null and clientName != ''">
        AND cli.name like CONCAT('%', #{clientName}, '%')
      </if>
      <if test = "cardNum != null and cardNum !=''">
        AND card.cardNum like CONCAT('%',#{cardNum},'%')
      <if test="cardNum != null and cardNum != ''">
        AND card.cardNum like CONCAT('%', #{cardNum}, '%')
      </if>
    </where>
    ORDER BY card.id
    <trim prefix="limit " >
    <trim prefix="limit ">
      <if test="start != null and count != null">
        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
      </if>
@@ -429,48 +505,44 @@
  <!--获取已挂失未补卡的记录数量-->
  <select id="getUnreplacedRecordCount" resultType="java.lang.Long">
    SELECT
        COUNT(*) AS recordCount
    SELECT COUNT(*) AS recordCount
    FROM se_client_card card
           INNER JOIN se_client cli ON card.clientId = cli.id
    WHERE card.state = 3 AND NOT EXISTS (SELECT * FROM se_client_card card2 WHERE card2.original_card_id = card.cardNum)
    WHERE card.state = 3
      AND NOT EXISTS(SELECT * FROM se_client_card card2 WHERE card2.original_card_id = card.cardNum)
  </select>
  <!--获取已挂失未补卡的记录-->
  <select id="getUnreplaced" resultType="com.dy.pipIrrGlobal.voSe.VoCards">
    SELECT
        cli.clientNum,
        cli.name AS clientName,
        cardNum,
<!--        CASE-->
<!--          WHEN card.cardNum LIKE '10%' THEN CONCAT(SUBSTRING(card.cardNum, 7, 6),SUBSTRING(card.cardNum, 14, 4))-->
<!--          ELSE card.cardNum-->
<!--        END AS cardNum,-->
        cli.phone,
        cli.idCard,
        card.state AS cardState,
        '已挂失' AS stateName,
        '农户卡' AS cardType,
        FORMAT(card.money,2) AS money
    cli.clientNum,
    cli.name AS clientName,
    cardNum,
    cli.phone,
    cli.idCard,
    card.state AS cardState,
    '已挂失' AS stateName,
    '农户卡' AS cardType,
    FORMAT(card.money, 2) AS money
    FROM se_client_card card
        INNER JOIN se_client cli ON card.clientId = cli.id
    WHERE card.state = 3 AND NOT EXISTS (SELECT * FROM se_client_card card2 WHERE card2.original_card_id = card.id)
    INNER JOIN se_client cli ON card.clientId = cli.id
    WHERE card.state = 3
    AND NOT EXISTS(SELECT * FROM se_client_card card2 WHERE card2.original_card_id = card.id)
    ORDER BY card.id
    <trim prefix="limit " >
    <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="getLostCount" resultType="java.lang.Integer">
    SELECT
        COUNT(*) AS recordCount
    SELECT COUNT(*) AS recordCount
    FROM se_client_card card
    <where>
      AND card.state = 3
      <if test = "cardNum != null and cardNum > 0">
      <if test="cardNum != null and cardNum > 0">
        AND card.cardNum = #{cardNum}
      </if>
    </where>
@@ -478,65 +550,62 @@
  <!--根据指定水卡编号获取已补卡数量(补卡、解锁使用)-->
  <select id="getReplacedCount" resultType="java.lang.Integer">
    SELECT
        COUNT(*) AS recordCount
    SELECT COUNT(*) AS recordCount
    FROM se_client_card card
        INNER JOIN se_client_card card2 ON card2.original_card_id = card.id
    INNER JOIN se_client_card card2 ON card2.original_card_id = card.id
    <where>
      <if test = "cardNum != null and cardNum > 0">
      <if test="cardNum != null and cardNum > 0">
        AND card.cardNum = #{cardNum}
      </if>
    </where>
  </select>
  <!--根据农户姓名和手机号获取水卡列表记录数,应用程序使用-->
  <select id="getCardsByClientNameAndPhoneCount" resultType="java.lang.Long">
    SELECT
      COUNT(*) AS recordCount
    SELECT COUNT(*) AS recordCount
    FROM se_client_card card
    INNER JOIN se_client cli ON card.clientId = cli.id
    <where>
      card.state = 1
      <if test = "clientName != null and clientName !=''">
        AND cli.name like CONCAT('%',#{clientName},'%')
      <if test="clientName != null and clientName != ''">
        AND cli.name like CONCAT('%', #{clientName}, '%')
      </if>
      <if test = "phone != null and phone !=''">
        AND cli.phone like CONCAT('%',#{phone},'%')
      <if test="phone != null and phone != ''">
        AND cli.phone like CONCAT('%', #{phone}, '%')
      </if>
    </where>
    </select>
  </select>
  <!--根据农户姓名和手机号获取水卡列表,应用程序使用-->
  <select id="getCardsByClientNameAndPhone" resultType="com.dy.pipIrrGlobal.voSe.VoCards2">
    SELECT
    card.id AS clientCardId,
    cli.id AS clientId,
    SELECT card.id               AS clientCardId,
    cli.id                AS clientId,
    cli.clientNum,
    cli.name AS clientName,
    cli.name              AS clientName,
    card.cardNum,
    cli.phone,
    cli.idCard,
    card.state AS cardState,
    card.state            AS cardState,
    (CASE
    WHEN card.state = 1 THEN '正常'
    WHEN card.state = 2 THEN '已注销'
    WHEN card.state = 3 THEN '已挂失'
    End) AS stateName,
    '农户卡' AS cardType,
    End)              AS stateName,
    '农户卡'                 AS cardType,
    FORMAT(card.money, 2) AS money
    FROM se_client_card card
    INNER JOIN se_client cli ON card.clientId = cli.id
    LEFT JOIN se_client cli ON card.clientId = cli.id
    <where>
      card.state = 1
      <if test = "clientName != null and clientName !=''">
        AND cli.name like CONCAT('%',#{clientName},'%')
      <if test="clientName != null and clientName != ''">
        AND cli.name like CONCAT('%', #{clientName}, '%')
      </if>
      <if test = "phone != null and phone !=''">
        AND cli.phone like CONCAT('%',#{phone},'%')
      <if test="phone != null and phone != ''">
        AND cli.phone like CONCAT('%', #{phone}, '%')
      </if>
    </where>
    ORDER BY card.id
    <trim prefix="limit " >
    <trim prefix="limit ">
      <if test="start != null and count != null">
        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
      </if>
@@ -544,38 +613,172 @@
  </select>
  <!--根据农户ID查询正常状态的水卡列表,小程序使用-->
  <select id="getCardsByClientID" resultType="com.dy.pipIrrGlobal.voWe.VoCards3">
    SELECT
    card.id AS clientCardId,
    cli.id AS clientId,
    SELECT card.id               AS clientCardId,
    cli.id                AS clientId,
    cli.clientNum,
    cli.name AS clientName,
    cli.name              AS clientName,
    card.cardNum,
    cli.phone,
    cli.idCard,
    card.state AS cardState,
    card.state            AS cardState,
    (CASE
    WHEN card.state = 1 THEN '正常'
    WHEN card.state = 2 THEN '已注销'
    WHEN card.state = 3 THEN '已挂失'
    End) AS stateName,
    '农户卡' AS cardType,
    End)              AS stateName,
    '农户卡'                 AS cardType,
    FORMAT(card.money, 2) AS money
    FROM se_client_card card
    INNER JOIN se_client cli ON card.clientId = cli.id
    where
      card.state = 1
      AND cli.id like CONCAT('%',#{clientId},'%')
    where card.state = 1
    AND cli.id like CONCAT('%', #{clientId}, '%')
    ORDER BY card.id
  </select>
  <!--指定时间段内开卡总数量(物理卡)-->
  <select id="getOpenCountIcCardsCount" resultType="java.lang.Long">
  <!--当前余额总量(物理卡)-->
  <select id="getTotalMoneyIcCards" resultType="java.lang.Double">
    SELECT IFNULL(SUM(money), 0) AS totalMoney
    FROM `se_client_card`
    WHERE state = 1
  </select>
  <!--根据水卡地址获取水卡数量,无效卡片排除在外-->
  <select id="getCountByCardAddr" resultType="java.lang.Long">
    SELECT COUNT(*) AS recordCount
    FROM se_client_card
    WHERE cardAddr = #{cardAddr} AND se_client_card.state != 4
  </select>
  <!--根据水卡地址获取指定状态的水卡数量-->
  <select id="getCountByCardAddrAndState" resultType="java.lang.Long">
    SELECT COUNT(*) AS recordCount
    FROM se_client_card
    WHERE cardAddr = #{cardAddr}
    AND state IN (1, 3)
  </select>
  <!--获取指定时间段水卡使用情况记录数量-->
  <select id="getCardUsagesCount" resultType="com.dy.pipIrrGlobal.voSt.VoCardUsage">
    SELECT
      count(*)
    FROM
      `se_client_card`
    WHERE
      createDt BETWEEN #{timeStart} AND #{timeStop}
    </select>
    card.id as cardId,
    cli.name AS clientName,
    card.cardNum,
    a.cl_ic_card_no,
    card.money AS balance,
    a.totalConsumption,
    b.totalRecharge
    FROM  se_client_card card
    INNER JOIN se_client cli ON cli.id = card.clientId
    LEFT JOIN  (
    SELECT his.cl_ic_card_no, SUM(his.cl_this_money) AS totalConsumption
    FROM rm_open_close_valve_history his
    WHERE his.cl_dt BETWEEN #{timeStart} AND #{timeStop}
    GROUP BY his.cl_ic_card_no
    ) a ON  a.cl_ic_card_no = CAST(card.cardNum AS CHAR)
    LEFT JOIN  (
    SELECT rch.cardId,ROUND(SUM(rch.amount),2) as totalRecharge
    FROM se_recharge_history rch
    WHERE rch.operate_valid = 2  AND rch.operateDt BETWEEN #{timeStart} AND #{timeStop}
    GROUP BY rch.cardId
    ) b ON b.cardId = card.id
    <where>
      <if test="clientName != null and clientName != ''">
        AND cli.name like CONCAT('%', #{clientName}, '%')
      </if>
      <if test="cardNum != null and cardNum != ''">
        AND card.cardNum like CONCAT('%', #{cardNum}, '%')
      </if>
      <if test="clientNum != null and clientNum != ''">
        AND cli.clientNum like CONCAT('%', #{clientNum}, '%')
      </if>
    </where>
  </select>
  <!--获取指定时间段水卡使用情况:充值合计、消费合计、余额-->
  <select id="getCardUsages" resultType="com.dy.pipIrrGlobal.voSt.VoCardUsage">
    SELECT
    card.id as cardId,
    cli.name AS clientName,
    card.cardNum,
    a.cl_ic_card_no,
    card.money AS balance,
    a.totalConsumption,
    b.totalRecharge
    FROM  se_client_card card
    INNER JOIN se_client cli ON cli.id = card.clientId
    LEFT JOIN  (
    SELECT his.cl_ic_card_no, SUM(his.cl_this_money) AS totalConsumption
    FROM rm_open_close_valve_history his
    WHERE his.cl_dt BETWEEN #{timeStart} AND #{timeStop}
    GROUP BY his.cl_ic_card_no
    ) a ON  a.cl_ic_card_no = CAST(card.cardNum AS CHAR)
    LEFT JOIN  (
    SELECT rch.cardId,ROUND(SUM(rch.amount),2) as totalRecharge
    FROM se_recharge_history rch
    WHERE rch.operate_valid = 2  AND rch.operateDt BETWEEN #{timeStart} AND #{timeStop}
    GROUP BY rch.cardId
    ) b ON b.cardId = card.id
    <where>
      <if test="clientName != null and clientName != ''">
        AND cli.name like CONCAT('%', #{clientName}, '%')
      </if>
      <if test="cardNum != null and cardNum != ''">
        AND card.cardNum like CONCAT('%', #{cardNum}, '%')
      </if>
      <if test="clientNum != null and clientNum != ''">
        AND cli.clientNum like CONCAT('%', #{clientNum}, '%')
      </if>
    </where>
    ORDER BY cli.name, card.cardNum
    <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="getTotalRecharge" resultType="java.lang.Float">
    SELECT ROUND(SUM(amount),2) AS totalRecharge
    FROM se_recharge_history
    WHERE operateDt BETWEEN #{timeStart} AND #{timeStop}
  </select>
  <!--获取指定时间段内水卡消费总计-->
  <select id="getTotalConsumption" resultType="java.lang.Float">
    SELECT ROUND(SUM(cl_this_money),2) AS totalConsumption
    FROM rm_open_close_valve_history
    WHERE cl_dt BETWEEN #{timeStart} AND #{timeStop}
  </select>
  <!--依据水卡地址将最后一条无效状态的指定操作记录改为有效-->
  <update id="turnCardValidByAddr">
    UPDATE se_client_card
    SET state = 1
    WHERE id = (
    SELECT id FROM (
    SELECT id
    FROM se_client_card
    WHERE state = 4 AND cardAddr = #{cardAddr} AND lastOper  = #{operateType}
    ORDER BY id DESC
    LIMIT 1) AS subquery
    );
  </update>
  <!--充值机用根据订单号将水卡改为有效-->
  <update id="turnCardValidByOrderNumber">
    UPDATE se_client_card
    SET state = 1
    WHERE state = 4 AND order_no = #{orderNumber}
  </update>
  <!--根据水卡ID获取原水卡ID,补卡通知中使用-->
  <select id="getOriginalCardIdByCardId" resultType="java.lang.Long">
    SELECT original_card_id AS originalCardId FROM se_client_card WHERE id = #{cardId};
  </select>
</mapper>