<?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.beiyin.mapper.Transfer">
	
	<!-- 根据账号更新借方账户余额 -->
    <update id="transferFrom" parameterType="com.beiyin.pojo.Account">
        update account set account_bale=account_bale-${account_bale} where account_id=#{account_id}
    </update>
    
    <!-- 根据账号更新借方科目余额 -->
    <update id="transferFromSjno" parameterType="com.beiyin.pojo.Sjno">
        update sjno set sjno_bale=sjno_bale-${sjno_bale} where sjno_id=#{sjno_id} and sjno_branchid=#{sjno_branchid}
    </update>
    
    <!-- 根据账号更新贷方账户余额 -->
    <update id="transferTo" parameterType="com.beiyin.pojo.Account">
        update account set account_bale=account_bale+${account_bale} where account_id=#{account_id}
    </update>
    
    <!-- 根据账号更新贷方科目余额 -->
    <update id="transferToSjno" parameterType="com.beiyin.pojo.Sjno">
        update sjno set sjno_bale=sjno_bale+${sjno_bale} where sjno_id=#{sjno_id} and sjno_branchid=#{sjno_branchid}
    </update>
    
    <!-- 不加锁根据账号获取账户信息 -->
    <select id="readAccount" parameterType="java.lang.String" resultType="com.beiyin.pojo.Account" flushCache="true" >
        select account_id,account_sjnoid,account_stat,account_custid,account_bale,account_pswd,account_name,
               account_amrz,account_inmod,account_itrz,account_branchid,account_mdate,account_mtime
        from account where account_id = #{account_id}
    </select>
    
    <!-- 根据账号获取账户信息，并锁定结果行 -->
    <select id="readTransactionalAccount" parameterType="java.lang.String" resultType="com.beiyin.pojo.Account">
        select account_id,account_sjnoid,account_stat,account_custid,account_bale,account_pswd,account_name,
               account_amrz,account_inmod,account_itrz,account_branchid,account_mdate,account_mtime
        from account where account_id = #{account_id} for update
    </select>
    
    <!-- 根据网点号获取网点信息，并锁定结果行 -->
    <select id="readTransactionalBranchSeq" parameterType="java.lang.String" resultType="com.beiyin.pojo.Branch">
        select branch_id,branch_seq,branch_dacno from branch where branch_id = #{branch_id} for update
    </select>
    
    <!-- 插入借贷双方交易信息 -->
    <insert id="insertTranlist" parameterType="com.beiyin.pojo.Tranlist">
        insert into tranlist (tranlist_date,tranlist_branchid,tranlist_seq,tranlist_time,
        tranlist_accountid1,tranlist_bale,tranlist_dcdir,tranlist_accountid2,tranlist_fld1,tranlist_fld2,tranlist_fld3)
        values (#{tranlist_date},#{tranlist_branchid},#{tranlist_seq},#{tranlist_time},
        #{tranlist_accountid1},#{tranlist_bale},#{tranlist_dcdir},#{tranlist_accountid2},#{tranlist_fld1},#{tranlist_fld2},#{tranlist_fld3})
    </insert>
    
    <!-- 根据网点id更新网点流水号 -->
     <update id="updateBranch" parameterType="java.lang.String">
        update branch set branch_seq=branch_seq+1 where branch_id=#{branch_id}
    </update>
    
    <!-- 记录业务库业务日志 -->
    <insert id="insertTranlog" parameterType="com.beiyin.pojo.Tranlog">
        insert into tranlog (tranlog_date,tranlog_branchid,tranlog_branchseq,tranlog_trancfgid,
        tranlog_strtime,tranlog_endtime,tranlog_tmcost,tranlog_success,tranlog_note,tranlog_fld1)
        values (#{tranlog_date},#{tranlog_branchid},#{tranlog_branchseq},#{tranlog_trancfgid},
        #{tranlog_strtime},#{tranlog_endtime},#{tranlog_tmcost},#{tranlog_success},#{tranlog_note},#{tranlog_fld1})
    </insert>
    
    <!-- 更新客户表借方余额 -->
    <update id="updateCustomerFrom" parameterType="com.beiyin.pojo.Customer">
        update customer set customer_bale=customer_bale-${customer_bale} where customer_id=#{customer_id}
    </update>
    
    <!-- 更新客户表贷方余额 -->
     <update id="updateCustomerTo" parameterType="com.beiyin.pojo.Customer">
        update customer set customer_bale=customer_bale+${customer_bale} where customer_id=#{customer_id}
    </update>
</mapper>