|  |  | 
 |  |  |     <!--@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="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" /> | 
 |  |  |     <result column="order_no" jdbcType="VARCHAR" property="orderNo" /> | 
 |  |  |   </resultMap> | 
 |  |  |   <sql id="Base_Column_List"> | 
 |  |  |     <!--@mbg.generated--> | 
 |  |  |     id, cardAddr, clientId, money, `state`, createDt, replaceDt, rechargeDt, lossDtDt,  | 
 |  |  |     cancelDt, unlockDt, reversalDt, 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--> | 
 |  |  | 
 |  |  |     delete from se_client_card | 
 |  |  |     where id = #{id,jdbcType=BIGINT} | 
 |  |  |   </delete> | 
 |  |  |  | 
 |  |  |   <!--依据水卡地址获取水卡编号(主键)--> | 
 |  |  |   <select id="getCardIdByAddr" resultType="java.lang.Long"> | 
 |  |  |     SELECT id AS cardId FROM se_client_card WHERE cardAddr = #{cardAddr} | 
 |  |  |   </select> | 
 |  |  |  | 
 |  |  |   <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard" useGeneratedKeys="true"> | 
 |  |  |   <insert id="insert" parameterType="com.dy.pipIrrGlobal.pojoSe.SeClientCard"> | 
 |  |  |     <!--@mbg.generated--> | 
 |  |  |     insert into se_client_card (cardAddr, clientId, money,  | 
 |  |  |       `state`, createDt, replaceDt,  | 
 |  |  |       rechargeDt, lossDtDt, cancelDt,  | 
 |  |  |       unlockDt, reversalDt, consumeDt,  | 
 |  |  |       lastOper, remarks) | 
 |  |  |     values (#{cardaddr,jdbcType=VARCHAR}, #{clientid,jdbcType=BIGINT}, #{money,jdbcType=FLOAT},  | 
 |  |  |       #{state,jdbcType=TINYINT}, #{createdt,jdbcType=TIMESTAMP}, #{replacedt,jdbcType=TIMESTAMP},  | 
 |  |  |       #{rechargedt,jdbcType=TIMESTAMP}, #{lossdtdt,jdbcType=TIMESTAMP}, #{canceldt,jdbcType=TIMESTAMP},  | 
 |  |  |       #{unlockdt,jdbcType=TIMESTAMP}, #{reversaldt,jdbcType=TIMESTAMP}, #{consumedt,jdbcType=TIMESTAMP},  | 
 |  |  |       #{lastoper,jdbcType=TINYINT}, #{remarks,jdbcType=VARCHAR}) | 
 |  |  |     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, 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}, #{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> | 
 |  |  |       <if test="cardaddr != null"> | 
 |  |  |         cardAddr, | 
 |  |  |       </if> | 
 |  |  |       <if test="cardnum != null"> | 
 |  |  |         cardNum, | 
 |  |  |       </if> | 
 |  |  |       <if test="clientid != null"> | 
 |  |  |         clientId, | 
 |  |  | 
 |  |  |       </if> | 
 |  |  |       <if test="state != null"> | 
 |  |  |         `state`, | 
 |  |  |       </if> | 
 |  |  |       <if test="originalCardId != null"> | 
 |  |  |         original_card_id, | 
 |  |  |       </if> | 
 |  |  |       <if test="createdt != null"> | 
 |  |  |         createDt, | 
 |  |  | 
 |  |  |       <if test="reversaldt != null"> | 
 |  |  |         reversalDt, | 
 |  |  |       </if> | 
 |  |  |       <if test="refunddt != null"> | 
 |  |  |         refundDt, | 
 |  |  |       </if> | 
 |  |  |       <if test="consumedt != null"> | 
 |  |  |         consumeDt, | 
 |  |  |       </if> | 
 |  |  | 
 |  |  |       <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> | 
 |  |  |       <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="state != null"> | 
 |  |  |         #{state,jdbcType=TINYINT}, | 
 |  |  |       </if> | 
 |  |  |       <if test="originalCardId != null"> | 
 |  |  |         #{originalCardId,jdbcType=BIGINT}, | 
 |  |  |       </if> | 
 |  |  |       <if test="createdt != null"> | 
 |  |  |         #{createdt,jdbcType=TIMESTAMP}, | 
 |  |  | 
 |  |  |       <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="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"> | 
 |  |  |     <!--@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="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 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="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 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}, | 
 |  |  |       `state` = #{state,jdbcType=TINYINT}, | 
 |  |  |       original_card_id = #{originalCardId,jdbcType=BIGINT}, | 
 |  |  |       createDt = #{createdt,jdbcType=TIMESTAMP}, | 
 |  |  |       replaceDt = #{replacedt,jdbcType=TIMESTAMP}, | 
 |  |  |       rechargeDt = #{rechargedt,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} | 
 |  |  |       remarks = #{remarks,jdbcType=VARCHAR}, | 
 |  |  |       order_no = #{orderNo,jdbcType=VARCHAR} | 
 |  |  |     where id = #{id,jdbcType=BIGINT} | 
 |  |  |   </update> | 
 |  |  |  | 
 |  |  |   <!--依据水卡地址获取水卡编号(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> | 
 |  |  |  | 
 |  |  |   <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> | 
 |  |  |  | 
 |  |  |   <!--充值机用根据订单号将水卡改为有效--> | 
 |  |  |   <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> | 
 |  |  |  | 
 |  |  |   <!--充值机用根据补卡的订单号将挂失水卡余额置零--> | 
 |  |  |   <update id="emptyCardBalance"> | 
 |  |  |     UPDATE se_client_card | 
 |  |  |     SET money = 0 | 
 |  |  |     WHERE id = (SELECT original_card_id FROM se_client_card WHERE id = (SELECT card_id FROM se_card_operate WHERE order_no = #{orderNumber})) | 
 |  |  |   </update> | 
 |  |  |  | 
 |  |  |   <!--充值机用获取农户水卡信息--> | 
 |  |  |   <select id="getTermCardInfo" resultType="com.dy.pipIrrGlobal.voSe.VoTermCard"> | 
 |  |  |     SELECT | 
 |  |  |         card.cardNum, | 
 |  |  |         1 AS cardType, | 
 |  |  |         card.money, | 
 |  |  |         card.state, | 
 |  |  |         cli.name AS userName, | 
 |  |  |         cli.clientNum, | 
 |  |  |         cli.phone, | 
 |  |  |         cli.address, | 
 |  |  |         card.rechargeDt AS lastRechargeTime, | 
 |  |  |         card.protocol AS cardAgreement | 
 |  |  |     FROM se_client_card card | 
 |  |  |         INNER JOIN se_client cli ON cli.id = card.clientId | 
 |  |  |     WHERE card.cardAddr = #{cardAddr} | 
 |  |  |     LIMIT 1 | 
 |  |  |   </select> | 
 |  |  | </mapper> |