| <?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> |