<?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.daoSe.SeClientCardMapper"> 
 | 
    <resultMap id="BaseResultMap" type="com.dy.pipIrrGlobal.pojoSe.SeClientCard"> 
 | 
        <!--@mbg.generated--> 
 | 
        <!--@Table se_client_card--> 
 | 
        <id column="id" jdbcType="BIGINT" property="id"/> 
 | 
        <result column="protocol" jdbcType="VARCHAR" property="protocol"/> 
 | 
        <result column="cardAddr" jdbcType="VARCHAR" property="cardaddr"/> 
 | 
        <result column="cardNum" jdbcType="BIGINT" property="cardnum"/> 
 | 
        <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="createDt" jdbcType="TIMESTAMP" property="createdt"/> 
 | 
        <result column="replaceDt" jdbcType="TIMESTAMP" property="replacedt"/> 
 | 
        <result column="rechargeDt" jdbcType="TIMESTAMP" property="rechargedt"/> 
 | 
        <result column="lossDtDt" jdbcType="TIMESTAMP" property="lossdtdt"/> 
 | 
        <result column="cancelDt" jdbcType="TIMESTAMP" property="canceldt"/> 
 | 
        <result column="unlockDt" jdbcType="TIMESTAMP" property="unlockdt"/> 
 | 
        <result column="reversalDt" jdbcType="TIMESTAMP" property="reversaldt"/> 
 | 
        <result column="refundDt" jdbcType="TIMESTAMP" property="refunddt"/> 
 | 
        <result column="consumeDt" jdbcType="TIMESTAMP" property="consumedt"/> 
 | 
        <result column="lastOper" jdbcType="TINYINT" property="lastoper"/> 
 | 
        <result column="remarks" jdbcType="VARCHAR" property="remarks"/> 
 | 
    </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 
 | 
    </sql> 
 | 
    <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> 
 | 
        <!--@mbg.generated--> 
 | 
        select 
 | 
        <include refid="Base_Column_List"/> 
 | 
        from se_client_card 
 | 
        where id = #{id,jdbcType=BIGINT} 
 | 
    </select> 
 | 
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> 
 | 
        <!--@mbg.generated--> 
 | 
        delete 
 | 
        from se_client_card 
 | 
        where id = #{id,jdbcType=BIGINT} 
 | 
    </delete> 
 | 
  
 | 
    <!--依据水卡地址获取水卡编号(12月19日废弃)--> 
 | 
    <!--2024-06-30取消废弃,恢复使用--> 
 | 
    <select id="getCardIdByAddr" resultType="java.lang.Long"> 
 | 
        SELECT id AS cardId 
 | 
        FROM se_client_card 
 | 
        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> 
 | 
  
 | 
    <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard"> 
 | 
        <!--@mbg.generated--> 
 | 
        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}, 
 | 
                #{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}) 
 | 
    </insert> 
 | 
    <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard" 
 | 
            useGeneratedKeys="true"> 
 | 
        <!--@mbg.generated--> 
 | 
        insert into se_client_card 
 | 
        <trim prefix="(" suffix=")" suffixOverrides=","> 
 | 
            <if test="id != null"> 
 | 
                id, 
 | 
            </if> 
 | 
            <if test="protocol != null"> 
 | 
                protocol, 
 | 
            </if> 
 | 
            <if test="cardaddr != null"> 
 | 
                cardAddr, 
 | 
            </if> 
 | 
            <if test="cardnum != null"> 
 | 
                cardNum, 
 | 
            </if> 
 | 
            <if test="clientid != null"> 
 | 
                clientId, 
 | 
            </if> 
 | 
            <if test="money != null"> 
 | 
                money, 
 | 
            </if> 
 | 
            <if test="state != null"> 
 | 
                `state`, 
 | 
            </if> 
 | 
            <if test="originalCardId != null"> 
 | 
                original_card_id, 
 | 
            </if> 
 | 
            <if test="createdt != null"> 
 | 
                createDt, 
 | 
            </if> 
 | 
            <if test="replacedt != null"> 
 | 
                replaceDt, 
 | 
            </if> 
 | 
            <if test="rechargedt != null"> 
 | 
                rechargeDt, 
 | 
            </if> 
 | 
            <if test="lossdtdt != null"> 
 | 
                lossDtDt, 
 | 
            </if> 
 | 
            <if test="canceldt != null"> 
 | 
                cancelDt, 
 | 
            </if> 
 | 
            <if test="unlockdt != null"> 
 | 
                unlockDt, 
 | 
            </if> 
 | 
            <if test="reversaldt != null"> 
 | 
                reversalDt, 
 | 
            </if> 
 | 
            <if test="refunddt != null"> 
 | 
                refundDt, 
 | 
            </if> 
 | 
            <if test="consumedt != null"> 
 | 
                consumeDt, 
 | 
            </if> 
 | 
            <if test="lastoper != null"> 
 | 
                lastOper, 
 | 
            </if> 
 | 
            <if test="remarks != null"> 
 | 
                remarks, 
 | 
            </if> 
 | 
        </trim> 
 | 
        <trim prefix="values (" suffix=")" suffixOverrides=","> 
 | 
            <if test="id != null"> 
 | 
                #{id,jdbcType=BIGINT}, 
 | 
            </if> 
 | 
            <if test="protocol != null"> 
 | 
                #{protocol,jdbcType=VARCHAR}, 
 | 
            </if> 
 | 
            <if test="cardaddr != null"> 
 | 
                #{cardaddr,jdbcType=VARCHAR}, 
 | 
            </if> 
 | 
            <if test="cardnum != null"> 
 | 
                #{cardnum,jdbcType=BIGINT}, 
 | 
            </if> 
 | 
            <if test="clientid != null"> 
 | 
                #{clientid,jdbcType=BIGINT}, 
 | 
            </if> 
 | 
            <if test="money != null"> 
 | 
                #{money,jdbcType=FLOAT}, 
 | 
            </if> 
 | 
            <if test="state != null"> 
 | 
                #{state,jdbcType=TINYINT}, 
 | 
            </if> 
 | 
            <if test="originalCardId != null"> 
 | 
                #{originalCardId,jdbcType=BIGINT}, 
 | 
            </if> 
 | 
            <if test="createdt != null"> 
 | 
                #{createdt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="replacedt != null"> 
 | 
                #{replacedt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="rechargedt != null"> 
 | 
                #{rechargedt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="lossdtdt != null"> 
 | 
                #{lossdtdt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="canceldt != null"> 
 | 
                #{canceldt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="unlockdt != null"> 
 | 
                #{unlockdt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="reversaldt != null"> 
 | 
                #{reversaldt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="refunddt != null"> 
 | 
                #{refunddt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="consumedt != null"> 
 | 
                #{consumedt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="lastoper != null"> 
 | 
                #{lastoper,jdbcType=TINYINT}, 
 | 
            </if> 
 | 
            <if test="remarks != null"> 
 | 
                #{remarks,jdbcType=VARCHAR}, 
 | 
            </if> 
 | 
        </trim> 
 | 
    </insert> 
 | 
    <update id="updateByPrimaryKeySelective" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard"> 
 | 
        <!--@mbg.generated--> 
 | 
        update se_client_card 
 | 
        <set> 
 | 
            <if test="protocol != null"> 
 | 
                protocol = #{protocol,jdbcType=VARCHAR}, 
 | 
            </if> 
 | 
            <if test="cardaddr != null"> 
 | 
                cardAddr = #{cardaddr,jdbcType=VARCHAR}, 
 | 
            </if> 
 | 
            <if test="cardnum != null"> 
 | 
                cardNum = #{cardnum,jdbcType=BIGINT}, 
 | 
            </if> 
 | 
            <if test="clientid != null"> 
 | 
                clientId = #{clientid,jdbcType=BIGINT}, 
 | 
            </if> 
 | 
            <if test="money != null"> 
 | 
                money = #{money,jdbcType=FLOAT}, 
 | 
            </if> 
 | 
            <if test="state != null"> 
 | 
                `state` = #{state,jdbcType=TINYINT}, 
 | 
            </if> 
 | 
            <if test="originalCardId != null"> 
 | 
                `original_card_id` = #{originalCardId,jdbcType=BIGINT}, 
 | 
            </if> 
 | 
            <if test="createdt != null"> 
 | 
                createDt = #{createdt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="replacedt != null"> 
 | 
                replaceDt = #{replacedt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="rechargedt != null"> 
 | 
                rechargeDt = #{rechargedt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="lossdtdt != null"> 
 | 
                lossDtDt = #{lossdtdt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="canceldt != null"> 
 | 
                cancelDt = #{canceldt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="unlockdt != null"> 
 | 
                unlockDt = #{unlockdt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="reversaldt != null"> 
 | 
                reversalDt = #{reversaldt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="refunddt != null"> 
 | 
                refundDt = #{refunddt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="consumedt != null"> 
 | 
                consumeDt = #{consumedt,jdbcType=TIMESTAMP}, 
 | 
            </if> 
 | 
            <if test="lastoper != null"> 
 | 
                lastOper = #{lastoper,jdbcType=TINYINT}, 
 | 
            </if> 
 | 
            <if test="remarks != null"> 
 | 
                remarks = #{remarks,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}, 
 | 
            cardNum          = #{cardnum,jdbcType=BIGINT}, 
 | 
            clientId         = #{clientid,jdbcType=BIGINT}, 
 | 
            money            = #{money,jdbcType=FLOAT}, 
 | 
            `state`          = #{state,jdbcType=TINYINT}, 
 | 
            original_card_id = #{originalCardId,jdbcType=BIGINT}, 
 | 
            createDt         = #{createdt,jdbcType=TIMESTAMP}, 
 | 
            replaceDt        = #{replacedt,jdbcType=TIMESTAMP}, 
 | 
            rechargeDt       = #{rechargedt,jdbcType=TIMESTAMP}, 
 | 
            lossDtDt         = #{lossdtdt,jdbcType=TIMESTAMP}, 
 | 
            cancelDt         = #{canceldt,jdbcType=TIMESTAMP}, 
 | 
            unlockDt         = #{unlockdt,jdbcType=TIMESTAMP}, 
 | 
            reversalDt       = #{reversaldt,jdbcType=TIMESTAMP}, 
 | 
            refundDt         = #{refunddt,jdbcType=TIMESTAMP}, 
 | 
            consumeDt        = #{consumedt,jdbcType=TIMESTAMP}, 
 | 
            lastOper         = #{lastoper,jdbcType=TINYINT}, 
 | 
            remarks          = #{remarks,jdbcType=VARCHAR} 
 | 
        where id = #{id,jdbcType=BIGINT} 
 | 
    </update> 
 | 
    <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 
 | 
            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,jdbcType=BIGINT} 
 | 
    </select> 
 | 
  
 | 
    <!--根据水卡编号获取充值总额--> 
 | 
    <select id="sumRechargeByCardNum" resultType="java.lang.Float"> 
 | 
        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,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 '已挂失' 
 | 
                    WHEN state = 4 THEN '无效卡片' 
 | 
            END) AS stateName 
 | 
        FROM se_client_card 
 | 
        WHERE cardNum = #{cardNum,jdbcType=BIGINT} 
 | 
    </select> 
 | 
  
 | 
    <!--根据指定条件获取水卡列表记录数,应用程序使用--> 
 | 
    <select id="getCardsCount" parameterType="java.util.Map" resultType="java.lang.Long"> 
 | 
        SELECT COUNT(*) AS recordCount 
 | 
        FROM se_client_card card 
 | 
            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> 
 | 
  
 | 
            <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> 
 | 
        </where> 
 | 
    </select> 
 | 
  
 | 
    <!--根据指定条件获取水卡列表,应用程序使用--> 
 | 
    <select id="getCards" resultType="com.dy.pipIrrGlobal.voSe.VoCards"> 
 | 
        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 
 | 
            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> 
 | 
  
 | 
            <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> 
 | 
        </where> 
 | 
        ORDER BY card.id 
 | 
        <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="getUnreplacedRecordCount" resultType="java.lang.Long"> 
 | 
        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) 
 | 
    </select> 
 | 
  
 | 
    <!--获取已挂失未补卡的记录--> 
 | 
    <select id="getUnreplaced" resultType="com.dy.pipIrrGlobal.voSe.VoCards"> 
 | 
        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 
 | 
        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 "> 
 | 
            <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 
 | 
        FROM se_client_card card 
 | 
        <where> 
 | 
            AND card.state = 3 
 | 
            <if test="cardNum != null and cardNum > 0"> 
 | 
                AND card.cardNum = #{cardNum} 
 | 
            </if> 
 | 
        </where> 
 | 
    </select> 
 | 
  
 | 
    <!--根据指定水卡编号获取已补卡数量(补卡、解锁使用)--> 
 | 
    <select id="getReplacedCount" resultType="java.lang.Integer"> 
 | 
        SELECT COUNT(*) AS recordCount 
 | 
        FROM se_client_card card 
 | 
                 INNER JOIN se_client_card card2 ON card2.original_card_id = card.id 
 | 
        <where> 
 | 
            <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 
 | 
        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> 
 | 
  
 | 
            <if test="phone != null and phone != ''"> 
 | 
                AND cli.phone like CONCAT('%', #{phone}, '%') 
 | 
            </if> 
 | 
        </where> 
 | 
    </select> 
 | 
    <!--根据农户姓名和手机号获取水卡列表,应用程序使用--> 
 | 
    <select id="getCardsByClientNameAndPhone" resultType="com.dy.pipIrrGlobal.voSe.VoCards2"> 
 | 
        SELECT card.id               AS clientCardId, 
 | 
               cli.id                AS clientId, 
 | 
               cli.clientNum, 
 | 
               cli.name              AS clientName, 
 | 
               card.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 cardType, 
 | 
               FORMAT(card.money, 2) AS money 
 | 
        FROM se_client_card card 
 | 
            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> 
 | 
  
 | 
            <if test="phone != null and phone != ''"> 
 | 
                AND cli.phone like CONCAT('%', #{phone}, '%') 
 | 
            </if> 
 | 
        </where> 
 | 
        ORDER BY card.id 
 | 
        <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="getCardsByClientID" resultType="com.dy.pipIrrGlobal.voWe.VoCards3"> 
 | 
        SELECT card.id               AS clientCardId, 
 | 
               cli.id                AS clientId, 
 | 
               cli.clientNum, 
 | 
               cli.name              AS clientName, 
 | 
               card.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 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}, '%') 
 | 
  
 | 
  
 | 
        ORDER BY card.id 
 | 
    </select> 
 | 
    <!--当前余额总量(物理卡)--> 
 | 
    <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 
 | 
        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> 
 | 
  
 | 
    <!--根据水卡ID获取原水卡ID,补卡通知中使用--> 
 | 
    <select id="getOriginalCardIdByCardId" resultType="java.lang.Long"> 
 | 
        SELECT original_card_id AS originalCardId FROM se_client_card WHERE id = #{cardId}; 
 | 
    </select> 
 | 
</mapper> 
 |