<?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.dhcc.finance.main.dao.CwGlBalanceMapper">
  <resultMap id="BaseResultMap" type="com.dhcc.finance.main.domain.CwGlBalance">
    <id column="PK_BALANCE" jdbcType="VARCHAR" property="pkBalance" />
    <result column="PK_GLORGBOOK" jdbcType="VARCHAR" property="pkGlorgbook" />
    <result column="PERIOD" jdbcType="VARCHAR" property="period" />
    <result column="FQMJBH" jdbcType="VARCHAR" property="fqmjbh" />
    <result column="TRANSFER_TYPE" jdbcType="VARCHAR" property="transferType" />
    <result column="PK_ACCSUBJ" jdbcType="VARCHAR" property="pkAccsubj" />
    <result column="SUBJCODE" jdbcType="VARCHAR" property="subjcode" />
    <result column="SUBJNAME" jdbcType="VARCHAR" property="subjname" />
    <result column="PK_CURRTYPE" jdbcType="VARCHAR" property="pkCurrtype" />
    <result column="DEBITAMOUNT" jdbcType="DECIMAL" property="debitamount" />
    <result column="CREDITAMOUNT" jdbcType="DECIMAL" property="creditamount" />
    <result column="LOCALDEBITAMOUNT" jdbcType="DECIMAL" property="localdebitamount" />
    <result column="LOCALCREDITAMOUNT" jdbcType="DECIMAL" property="localcreditamount" />
    <result column="BALANCE" jdbcType="DECIMAL" property="balance" />
    <result column="ASSID" jdbcType="VARCHAR" property="assid" />
    <result column="QTY" jdbcType="VARCHAR" property="qty" />
    <result column="USE_STATE" jdbcType="VARCHAR" property="useState" />
    <result column="CREATE_USER" jdbcType="VARCHAR" property="createUser" />
    <result column="CREATE_TIME" jdbcType="TIMESTAMP" property="createTime" />
    <result column="UPDATE_USER" jdbcType="VARCHAR" property="updateUser" />
    <result column="UPDATE_TIME" jdbcType="TIMESTAMP" property="updateTime" />
    <result column="REMARK" jdbcType="VARCHAR" property="remark" />
  </resultMap>
    <resultMap id="BaseResultMap1" type="com.dhcc.finance.main.model.CwGlTransferExecDetail">
    <result column="SUBJCODE" jdbcType="VARCHAR" property="subjcode" />
    <result column="SUBJNAME" jdbcType="VARCHAR" property="subjname" />
    <result column="BALANORIENT" jdbcType="VARCHAR" property="balanorient" />
    <result column="BALANCE" jdbcType="VARCHAR" property="balance" />
  </resultMap>
  <sql id="Example_Where_Clause">
    <where>
      <foreach collection="oredCriteria" item="criteria" separator="or">
        <if test="criteria.valid">
          <trim prefix="(" prefixOverrides="and" suffix=")">
            <foreach collection="criteria.criteria" item="criterion">
              <choose>
                <when test="criterion.noValue">
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue">
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue">
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue">
                  and ${criterion.condition}
                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>
  <sql id="Update_By_Example_Where_Clause">
    <where>
      <foreach collection="example.oredCriteria" item="criteria" separator="or">
        <if test="criteria.valid">
          <trim prefix="(" prefixOverrides="and" suffix=")">
            <foreach collection="criteria.criteria" item="criterion">
              <choose>
                <when test="criterion.noValue">
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue">
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue">
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue">
                  and ${criterion.condition}
                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>
  <sql id="Base_Column_List">
    PK_BALANCE, PK_GLORGBOOK, PERIOD, FQMJBH, TRANSFER_TYPE, PK_ACCSUBJ, SUBJCODE, SUBJNAME, 
    PK_CURRTYPE, DEBITAMOUNT, CREDITAMOUNT, LOCALDEBITAMOUNT, LOCALCREDITAMOUNT, BALANCE, 
    ASSID, QTY, USE_STATE, CREATE_USER, CREATE_TIME, UPDATE_USER, UPDATE_TIME, REMARK
  </sql>
  <select id="selectByExample" parameterType="com.dhcc.finance.main.domain.CwGlBalanceExample" resultMap="BaseResultMap">
    select
    <if test="distinct">
      distinct
    </if>
    <include refid="Base_Column_List" />
    from cw_gl_balance
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null">
      order by ${orderByClause}
    </if>
  </select>
  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from cw_gl_balance
    where PK_BALANCE = #{pkBalance,jdbcType=VARCHAR}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
    delete from cw_gl_balance
    where PK_BALANCE = #{pkBalance,jdbcType=VARCHAR}
  </delete>
  <delete id="deleteByExample" parameterType="com.dhcc.finance.main.domain.CwGlBalanceExample">
    delete from cw_gl_balance
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
  </delete>
  <insert id="insert" parameterType="com.dhcc.finance.main.domain.CwGlBalance">
    insert into cw_gl_balance (PK_BALANCE, PK_GLORGBOOK, PERIOD, 
      FQMJBH, TRANSFER_TYPE, PK_ACCSUBJ, 
      SUBJCODE, SUBJNAME, PK_CURRTYPE, 
      DEBITAMOUNT, CREDITAMOUNT, LOCALDEBITAMOUNT, 
      LOCALCREDITAMOUNT, BALANCE, ASSID, 
      QTY, USE_STATE, CREATE_USER, 
      CREATE_TIME, UPDATE_USER, UPDATE_TIME, 
      REMARK)
    values (#{pkBalance,jdbcType=VARCHAR}, #{pkGlorgbook,jdbcType=VARCHAR}, #{period,jdbcType=VARCHAR}, 
      #{fqmjbh,jdbcType=VARCHAR}, #{transferType,jdbcType=VARCHAR}, #{pkAccsubj,jdbcType=VARCHAR}, 
      #{subjcode,jdbcType=VARCHAR}, #{subjname,jdbcType=VARCHAR}, #{pkCurrtype,jdbcType=VARCHAR}, 
      #{debitamount,jdbcType=DECIMAL}, #{creditamount,jdbcType=DECIMAL}, #{localdebitamount,jdbcType=DECIMAL}, 
      #{localcreditamount,jdbcType=DECIMAL}, #{balance,jdbcType=DECIMAL}, #{assid,jdbcType=VARCHAR}, 
      #{qty,jdbcType=VARCHAR}, #{useState,jdbcType=VARCHAR}, #{createUser,jdbcType=VARCHAR}, 
      #{createTime,jdbcType=TIMESTAMP}, #{updateUser,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, 
      #{remark,jdbcType=VARCHAR})
  </insert>
  <insert id="insertSelective" parameterType="com.dhcc.finance.main.domain.CwGlBalance">
    insert into cw_gl_balance
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="pkBalance != null">
        PK_BALANCE,
      </if>
      <if test="pkGlorgbook != null">
        PK_GLORGBOOK,
      </if>
      <if test="period != null">
        PERIOD,
      </if>
      <if test="fqmjbh != null">
        FQMJBH,
      </if>
      <if test="transferType != null">
        TRANSFER_TYPE,
      </if>
      <if test="pkAccsubj != null">
        PK_ACCSUBJ,
      </if>
      <if test="subjcode != null">
        SUBJCODE,
      </if>
      <if test="subjname != null">
        SUBJNAME,
      </if>
      <if test="pkCurrtype != null">
        PK_CURRTYPE,
      </if>
      <if test="debitamount != null">
        DEBITAMOUNT,
      </if>
      <if test="creditamount != null">
        CREDITAMOUNT,
      </if>
      <if test="localdebitamount != null">
        LOCALDEBITAMOUNT,
      </if>
      <if test="localcreditamount != null">
        LOCALCREDITAMOUNT,
      </if>
      <if test="balance != null">
        BALANCE,
      </if>
      <if test="assid != null">
        ASSID,
      </if>
      <if test="qty != null">
        QTY,
      </if>
      <if test="useState != null">
        USE_STATE,
      </if>
      <if test="createUser != null">
        CREATE_USER,
      </if>
      <if test="createTime != null">
        CREATE_TIME,
      </if>
      <if test="updateUser != null">
        UPDATE_USER,
      </if>
      <if test="updateTime != null">
        UPDATE_TIME,
      </if>
      <if test="remark != null">
        REMARK,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="pkBalance != null">
        #{pkBalance,jdbcType=VARCHAR},
      </if>
      <if test="pkGlorgbook != null">
        #{pkGlorgbook,jdbcType=VARCHAR},
      </if>
      <if test="period != null">
        #{period,jdbcType=VARCHAR},
      </if>
      <if test="fqmjbh != null">
        #{fqmjbh,jdbcType=VARCHAR},
      </if>
      <if test="transferType != null">
        #{transferType,jdbcType=VARCHAR},
      </if>
      <if test="pkAccsubj != null">
        #{pkAccsubj,jdbcType=VARCHAR},
      </if>
      <if test="subjcode != null">
        #{subjcode,jdbcType=VARCHAR},
      </if>
      <if test="subjname != null">
        #{subjname,jdbcType=VARCHAR},
      </if>
      <if test="pkCurrtype != null">
        #{pkCurrtype,jdbcType=VARCHAR},
      </if>
      <if test="debitamount != null">
        #{debitamount,jdbcType=DECIMAL},
      </if>
      <if test="creditamount != null">
        #{creditamount,jdbcType=DECIMAL},
      </if>
      <if test="localdebitamount != null">
        #{localdebitamount,jdbcType=DECIMAL},
      </if>
      <if test="localcreditamount != null">
        #{localcreditamount,jdbcType=DECIMAL},
      </if>
      <if test="balance != null">
        #{balance,jdbcType=DECIMAL},
      </if>
      <if test="assid != null">
        #{assid,jdbcType=VARCHAR},
      </if>
      <if test="qty != null">
        #{qty,jdbcType=VARCHAR},
      </if>
      <if test="useState != null">
        #{useState,jdbcType=VARCHAR},
      </if>
      <if test="createUser != null">
        #{createUser,jdbcType=VARCHAR},
      </if>
      <if test="createTime != null">
        #{createTime,jdbcType=TIMESTAMP},
      </if>
      <if test="updateUser != null">
        #{updateUser,jdbcType=VARCHAR},
      </if>
      <if test="updateTime != null">
        #{updateTime,jdbcType=TIMESTAMP},
      </if>
      <if test="remark != null">
        #{remark,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>
  <select id="countByExample" parameterType="com.dhcc.finance.main.domain.CwGlBalanceExample" resultType="java.lang.Long">
    select count(*) from cw_gl_balance
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
  </select>
  <update id="updateByExampleSelective" parameterType="map">
    update cw_gl_balance
    <set>
      <if test="record.pkBalance != null">
        PK_BALANCE = #{record.pkBalance,jdbcType=VARCHAR},
      </if>
      <if test="record.pkGlorgbook != null">
        PK_GLORGBOOK = #{record.pkGlorgbook,jdbcType=VARCHAR},
      </if>
      <if test="record.period != null">
        PERIOD = #{record.period,jdbcType=VARCHAR},
      </if>
      <if test="record.fqmjbh != null">
        FQMJBH = #{record.fqmjbh,jdbcType=VARCHAR},
      </if>
      <if test="record.transferType != null">
        TRANSFER_TYPE = #{record.transferType,jdbcType=VARCHAR},
      </if>
      <if test="record.pkAccsubj != null">
        PK_ACCSUBJ = #{record.pkAccsubj,jdbcType=VARCHAR},
      </if>
      <if test="record.subjcode != null">
        SUBJCODE = #{record.subjcode,jdbcType=VARCHAR},
      </if>
      <if test="record.subjname != null">
        SUBJNAME = #{record.subjname,jdbcType=VARCHAR},
      </if>
      <if test="record.pkCurrtype != null">
        PK_CURRTYPE = #{record.pkCurrtype,jdbcType=VARCHAR},
      </if>
      <if test="record.debitamount != null">
        DEBITAMOUNT = #{record.debitamount,jdbcType=DECIMAL},
      </if>
      <if test="record.creditamount != null">
        CREDITAMOUNT = #{record.creditamount,jdbcType=DECIMAL},
      </if>
      <if test="record.localdebitamount != null">
        LOCALDEBITAMOUNT = #{record.localdebitamount,jdbcType=DECIMAL},
      </if>
      <if test="record.localcreditamount != null">
        LOCALCREDITAMOUNT = #{record.localcreditamount,jdbcType=DECIMAL},
      </if>
      <if test="record.balance != null">
        BALANCE = #{record.balance,jdbcType=DECIMAL},
      </if>
      <if test="record.assid != null">
        ASSID = #{record.assid,jdbcType=VARCHAR},
      </if>
      <if test="record.qty != null">
        QTY = #{record.qty,jdbcType=VARCHAR},
      </if>
      <if test="record.useState != null">
        USE_STATE = #{record.useState,jdbcType=VARCHAR},
      </if>
      <if test="record.createUser != null">
        CREATE_USER = #{record.createUser,jdbcType=VARCHAR},
      </if>
      <if test="record.createTime != null">
        CREATE_TIME = #{record.createTime,jdbcType=TIMESTAMP},
      </if>
      <if test="record.updateUser != null">
        UPDATE_USER = #{record.updateUser,jdbcType=VARCHAR},
      </if>
      <if test="record.updateTime != null">
        UPDATE_TIME = #{record.updateTime,jdbcType=TIMESTAMP},
      </if>
      <if test="record.remark != null">
        REMARK = #{record.remark,jdbcType=VARCHAR},
      </if>
    </set>
    <if test="_parameter != null">
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>
  <update id="updateByExample" parameterType="map">
    update cw_gl_balance
    set PK_BALANCE = #{record.pkBalance,jdbcType=VARCHAR},
      PK_GLORGBOOK = #{record.pkGlorgbook,jdbcType=VARCHAR},
      PERIOD = #{record.period,jdbcType=VARCHAR},
      FQMJBH = #{record.fqmjbh,jdbcType=VARCHAR},
      TRANSFER_TYPE = #{record.transferType,jdbcType=VARCHAR},
      PK_ACCSUBJ = #{record.pkAccsubj,jdbcType=VARCHAR},
      SUBJCODE = #{record.subjcode,jdbcType=VARCHAR},
      SUBJNAME = #{record.subjname,jdbcType=VARCHAR},
      PK_CURRTYPE = #{record.pkCurrtype,jdbcType=VARCHAR},
      DEBITAMOUNT = #{record.debitamount,jdbcType=DECIMAL},
      CREDITAMOUNT = #{record.creditamount,jdbcType=DECIMAL},
      LOCALDEBITAMOUNT = #{record.localdebitamount,jdbcType=DECIMAL},
      LOCALCREDITAMOUNT = #{record.localcreditamount,jdbcType=DECIMAL},
      BALANCE = #{record.balance,jdbcType=DECIMAL},
      ASSID = #{record.assid,jdbcType=VARCHAR},
      QTY = #{record.qty,jdbcType=VARCHAR},
      USE_STATE = #{record.useState,jdbcType=VARCHAR},
      CREATE_USER = #{record.createUser,jdbcType=VARCHAR},
      CREATE_TIME = #{record.createTime,jdbcType=TIMESTAMP},
      UPDATE_USER = #{record.updateUser,jdbcType=VARCHAR},
      UPDATE_TIME = #{record.updateTime,jdbcType=TIMESTAMP},
      REMARK = #{record.remark,jdbcType=VARCHAR}
    <if test="_parameter != null">
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>
  <update id="updateByPrimaryKeySelective" parameterType="com.dhcc.finance.main.domain.CwGlBalance">
    update cw_gl_balance
    <set>
      <if test="pkGlorgbook != null">
        PK_GLORGBOOK = #{pkGlorgbook,jdbcType=VARCHAR},
      </if>
      <if test="period != null">
        PERIOD = #{period,jdbcType=VARCHAR},
      </if>
      <if test="fqmjbh != null">
        FQMJBH = #{fqmjbh,jdbcType=VARCHAR},
      </if>
      <if test="transferType != null">
        TRANSFER_TYPE = #{transferType,jdbcType=VARCHAR},
      </if>
      <if test="pkAccsubj != null">
        PK_ACCSUBJ = #{pkAccsubj,jdbcType=VARCHAR},
      </if>
      <if test="subjcode != null">
        SUBJCODE = #{subjcode,jdbcType=VARCHAR},
      </if>
      <if test="subjname != null">
        SUBJNAME = #{subjname,jdbcType=VARCHAR},
      </if>
      <if test="pkCurrtype != null">
        PK_CURRTYPE = #{pkCurrtype,jdbcType=VARCHAR},
      </if>
      <if test="debitamount != null">
        DEBITAMOUNT = #{debitamount,jdbcType=DECIMAL},
      </if>
      <if test="creditamount != null">
        CREDITAMOUNT = #{creditamount,jdbcType=DECIMAL},
      </if>
      <if test="localdebitamount != null">
        LOCALDEBITAMOUNT = #{localdebitamount,jdbcType=DECIMAL},
      </if>
      <if test="localcreditamount != null">
        LOCALCREDITAMOUNT = #{localcreditamount,jdbcType=DECIMAL},
      </if>
      <if test="balance != null">
        BALANCE = #{balance,jdbcType=DECIMAL},
      </if>
      <if test="assid != null">
        ASSID = #{assid,jdbcType=VARCHAR},
      </if>
      <if test="qty != null">
        QTY = #{qty,jdbcType=VARCHAR},
      </if>
      <if test="useState != null">
        USE_STATE = #{useState,jdbcType=VARCHAR},
      </if>
      <if test="createUser != null">
        CREATE_USER = #{createUser,jdbcType=VARCHAR},
      </if>
      <if test="createTime != null">
        CREATE_TIME = #{createTime,jdbcType=TIMESTAMP},
      </if>
      <if test="updateUser != null">
        UPDATE_USER = #{updateUser,jdbcType=VARCHAR},
      </if>
      <if test="updateTime != null">
        UPDATE_TIME = #{updateTime,jdbcType=TIMESTAMP},
      </if>
      <if test="remark != null">
        REMARK = #{remark,jdbcType=VARCHAR},
      </if>
    </set>
    where PK_BALANCE = #{pkBalance,jdbcType=VARCHAR}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.dhcc.finance.main.domain.CwGlBalance">
    update cw_gl_balance
    set PK_GLORGBOOK = #{pkGlorgbook,jdbcType=VARCHAR},
      PERIOD = #{period,jdbcType=VARCHAR},
      FQMJBH = #{fqmjbh,jdbcType=VARCHAR},
      TRANSFER_TYPE = #{transferType,jdbcType=VARCHAR},
      PK_ACCSUBJ = #{pkAccsubj,jdbcType=VARCHAR},
      SUBJCODE = #{subjcode,jdbcType=VARCHAR},
      SUBJNAME = #{subjname,jdbcType=VARCHAR},
      PK_CURRTYPE = #{pkCurrtype,jdbcType=VARCHAR},
      DEBITAMOUNT = #{debitamount,jdbcType=DECIMAL},
      CREDITAMOUNT = #{creditamount,jdbcType=DECIMAL},
      LOCALDEBITAMOUNT = #{localdebitamount,jdbcType=DECIMAL},
      LOCALCREDITAMOUNT = #{localcreditamount,jdbcType=DECIMAL},
      BALANCE = #{balance,jdbcType=DECIMAL},
      ASSID = #{assid,jdbcType=VARCHAR},
      QTY = #{qty,jdbcType=VARCHAR},
      USE_STATE = #{useState,jdbcType=VARCHAR},
      CREATE_USER = #{createUser,jdbcType=VARCHAR},
      CREATE_TIME = #{createTime,jdbcType=TIMESTAMP},
      UPDATE_USER = #{updateUser,jdbcType=VARCHAR},
      UPDATE_TIME = #{updateTime,jdbcType=TIMESTAMP},
      REMARK = #{remark,jdbcType=VARCHAR}
    where PK_BALANCE = #{pkBalance,jdbcType=VARCHAR}
  </update>
  <!--   反记账功能更新科目余额 -->
 <!--  <update id="updateForReveseBybooking" parameterType="java.lang.String">
    update cw_gl_balance z inner join (
    select sum(IFNULL(s.DEBITAMOUNT,0)+IFNULL(t.DEBITAMOUNT,0)) as DEBITAMOUNT ,
    sum(IFNULL(s.CREDITAMOUNT,0)+IFNULL(t.CREDITAMOUNT,0)) as CREDITAMOUNT,
    sum(IFNULL(s.LOCALDEBITAMOUNT,0)+IFNULL(t.LOCALDEBITAMOUNT,0)) as LOCALDEBITAMOUNT,
    sum(IFNULL(s.LOCALCREDITAMOUNT,0)+IFNULL(t.LOCALCREDITAMOUNT,0)) as LOCALCREDITAMOUNT,
    s.PK_BALANCE 
     from cw_gl_balance s left join (     
     select  b.PK_GLORGBOOK,b.period, a.DETAILINDEX, a.PK_ACCSUBJ, a.SUBJCODE, a.SUBJNAME, a.PK_CURRTYPE, 
    a.DEBITAMOUNT, a.CREDITAMOUNT, a.LOCALDEBITAMOUNT, a.LOCALCREDITAMOUNT, a.ASSID, a.QTY, a.USE_STATE, 
    a.CREATE_USER, a.CREATE_TIME, a.UPDATE_USER, a.UPDATE_TIME, a.REMARK 
    from cw_gl_detail a 
    join  cw_gl_voucher b 
    on  a.PK_VOUCHER=b.PK_VOUCHER )t
     on s.PK_GLORGBOOK=t.PK_GLORGBOOK 
     and s.period=t.period 
     and s.PK_ACCSUBJ=t.PK_ACCSUBJ 
     <if test="assid != null">
    		and s.ASSID=t.ASSID 
      </if>
      where s.USE_STATE='1'
        <if test="pkGlorgbook != null"> 
   and s.PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR} 
    </if>
     <if test="period != null">
    and s.period=#{period,jdbcType=VARCHAR} 
    </if>
     <if test="pkAccsubj != null">
      and s.PK_ACCSUBJ=#{pkAccsubj,jdbcType=VARCHAR} 
      </if>
     <if test="assid != null">
      and s.assid=#{assid,jdbcType=VARCHAR} 
      </if>
) l on z.PK_BALANCE=l.PK_BALANCE 
set z.DEBITAMOUNT=l.DEBITAMOUNT,
 z.CREDITAMOUNT=l.CREDITAMOUNT , 
 z.LOCALDEBITAMOUNT=l.LOCALDEBITAMOUNT,
 z.LOCALCREDITAMOUNT=l.LOCALCREDITAMOUNT
where z.PK_BALANCE=l.PK_BALANCE 
  </update> -->
  
  
  <!--查询科目辅助余额dml-->
  <select id="selectCwGlBalance" flushCache="true" parameterType="com.dhcc.finance.main.domain.CwGlBalance" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from cw_gl_balance
    where USE_STATE = '1' and
          PK_GLORGBOOK = #{pkGlorgbook,jdbcType=VARCHAR} and
          PERIOD = #{period,jdbcType=VARCHAR} and
          PK_ACCSUBJ = #{pkAccsubj,jdbcType=VARCHAR}
<!-- 如果按辅助项统计放开这块          <choose>
	        <when test="assid != null and assid != ''">
	            and ASSID = #{assid,jdbcType=VARCHAR}
	        </when>
	        <otherwise>
	            and (ASSID = '' or ASSID IS NULL)
	        </otherwise>
         </choose> -->
         <choose>
	        <when test="fqmjbh != null and fqmjbh != ''">
	            and FQMJBH = #{fqmjbh,jdbcType=VARCHAR}
	        </when>
	        <otherwise>
	            and (FQMJBH = '' or FQMJBH IS NULL)
	        </otherwise>
         </choose>
  </select>
  <!-- 新增余额表数据 -->
  <insert id="insertBalance" parameterType="com.dhcc.finance.main.domain.CwGlBalance">
    insert into cw_gl_balance (PK_BALANCE, PK_GLORGBOOK, PERIOD, 
      FQMJBH, TRANSFER_TYPE, PK_ACCSUBJ, 
      SUBJCODE, SUBJNAME, PK_CURRTYPE, 
      DEBITAMOUNT, CREDITAMOUNT, LOCALDEBITAMOUNT, 
      LOCALCREDITAMOUNT, BALANCE, ASSID, 
      QTY, USE_STATE, CREATE_USER, 
      CREATE_TIME, UPDATE_USER, UPDATE_TIME, 
      REMARK)
      select #{pkBalance,jdbcType=VARCHAR}, #{pkGlorgbook,jdbcType=VARCHAR}, #{period,jdbcType=VARCHAR}, 
      #{fqmjbh,jdbcType=VARCHAR}, #{transferType,jdbcType=VARCHAR}, #{pkAccsubj,jdbcType=VARCHAR}, 
      #{subjcode,jdbcType=VARCHAR}, #{subjname,jdbcType=VARCHAR}, #{pkCurrtype,jdbcType=VARCHAR}, 
      #{debitamount,jdbcType=DECIMAL}, #{creditamount,jdbcType=DECIMAL}, #{localdebitamount,jdbcType=DECIMAL}, 
      #{localcreditamount,jdbcType=DECIMAL}, 
	  case when BALANORIENT='1' then ifnull(#{localdebitamount,jdbcType=DECIMAL},0)-ifnull(#{localcreditamount,jdbcType=DECIMAL},0) else
	  ifnull(#{localcreditamount,jdbcType=DECIMAL},0)-ifnull(#{localdebitamount,jdbcType=DECIMAL},0) end BALANCE , 
      #{assid,jdbcType=VARCHAR}, #{qty,jdbcType=VARCHAR}, #{useState,jdbcType=VARCHAR}, #{createUser,jdbcType=VARCHAR}, 
      #{createTime,jdbcType=TIMESTAMP}, #{updateUser,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, 
      #{remark,jdbcType=VARCHAR} from cw_bd_accsubj where PK_ACCSUBJ=#{pkAccsubj,jdbcType=VARCHAR}
  </insert>
  <!-- 记账时修改余额dml -->
  <update id="updateBalanceCount" parameterType="com.dhcc.finance.main.domain.CwGlBalance">
    update cw_gl_balance cgb
    inner join 
     (
     select   DEBITAMOUNT,CREDITAMOUNT,LOCALDEBITAMOUNT,LOCALCREDITAMOUNT,PK_ACCSUBJ,
     CASE WHEN BALANORIENT ='1' THEN  LOCALDEBITAMOUNT-LOCALCREDITAMOUNT ELSE  LOCALCREDITAMOUNT-LOCALDEBITAMOUNT END BALANCE from (
	     select IFNULL(sum(del.DEBITAMOUNT),0) as DEBITAMOUNT,IFNULL(sum(del.CREDITAMOUNT),0) as CREDITAMOUNT,
	             IFNULL(sum(del.LOCALDEBITAMOUNT),0) as LOCALDEBITAMOUNT,IFNULL(sum(del.LOCALCREDITAMOUNT),0)as LOCALCREDITAMOUNT ,
	             #{pkAccsubj,jdbcType=VARCHAR} as PK_ACCSUBJ,sbj.BALANORIENT
	      from CW_GL_DETAIL del  
	      left join cw_bd_accsubj sbj  on del.PK_ACCSUBJ = sbj.PK_ACCSUBJ 
	      where del.PK_VOUCHER in (
	              select  a.PK_VOUCHER from CW_GL_VOUCHER a where a.PK_GLORGBOOK =#{pkGlorgbook,jdbcType=VARCHAR} and a.PERIOD=#{period,jdbcType=VARCHAR} 
	              and a.VOUCHERTYPE='3' and a.USE_STATE='1'
	         <choose>
		        <when test="fqmjbh != null and fqmjbh != ''">
		            and a.FQMJBH = #{fqmjbh,jdbcType=VARCHAR}
		        </when>
		        <otherwise>
		            and (a.FQMJBH = '' or a.FQMJBH IS NULL)
		        </otherwise>
	         </choose>              
	      ) 
	      and del.PK_ACCSUBJ=#{pkAccsubj,jdbcType=VARCHAR} and del.USE_STATE='1'   
<!-- 如果按辅助项统计放开这块  	          <choose>
		        <when test="assid != null and assid != ''">
		             and del.ASSID = #{assid,jdbcType=VARCHAR}
		        </when>
		        <otherwise>
		             and (del.ASSID = '' or del.ASSID IS NULL)
		        </otherwise>
	         </choose> -->
	        )a
     )as temp
          on cgb.PK_ACCSUBJ = temp.PK_ACCSUBJ
    set cgb.DEBITAMOUNT=temp.DEBITAMOUNT,cgb.CREDITAMOUNT=temp.CREDITAMOUNT,cgb.LOCALDEBITAMOUNT=temp.LOCALDEBITAMOUNT,cgb.LOCALCREDITAMOUNT=temp.LOCALCREDITAMOUNT,
    cgb.UPDATE_USER = #{updateUser,jdbcType=VARCHAR},cgb.UPDATE_TIME = #{updateTime,jdbcType=TIMESTAMP},cgb.BALANCE=temp.BALANCE
    where 
         cgb.USE_STATE = '1' and
         cgb.PK_GLORGBOOK = #{pkGlorgbook,jdbcType=VARCHAR} and
         cgb.PERIOD = #{period,jdbcType=VARCHAR} and
         cgb.PK_ACCSUBJ = #{pkAccsubj,jdbcType=VARCHAR}
<!--  如果按辅助项统计放开这块          <choose>
	        <when test="assid != null and assid != ''">
	            and cgb.ASSID = #{assid,jdbcType=VARCHAR}
	        </when>
	        <otherwise>
	            and (cgb.ASSID = '' or cgb.ASSID IS NULL)
	        </otherwise>
        </choose> -->
         <choose>
	        <when test="fqmjbh != null and fqmjbh != ''">
	            and cgb.FQMJBH = #{fqmjbh,jdbcType=VARCHAR}
	        </when>
	        <otherwise>
	            and (cgb.FQMJBH = '' or cgb.FQMJBH IS NULL)
	        </otherwise>
         </choose>        
  </update>
  <!-- 插入年初重算 -->
  <insert id="insertEarlyYearRecalculation" parameterType="java.util.Map">
    insert into cw_gl_balance (PK_BALANCE, PK_GLORGBOOK, PERIOD, FQMJBH,
      PK_ACCSUBJ, SUBJCODE, SUBJNAME, 
      PK_CURRTYPE, DEBITAMOUNT, CREDITAMOUNT, 
      LOCALDEBITAMOUNT, LOCALCREDITAMOUNT, ASSID, 
      USE_STATE, CREATE_USER, CREATE_TIME
    )select
	  MD5(uuid()) as PK_BALANCE, #{pkGlorgbook,jdbcType=VARCHAR} as PK_GLORGBOOK,#{period,jdbcType=VARCHAR} as PERIOD,b.FQMJBH,
	  c.PK_ACCSUBJ,SUBJCODE, SUBJNAME, PK_CURRTYPE,IFNULL(sum(c.DEBITAMOUNT),0) as DEBITAMOUNT,  IFNULL(sum(c.CREDITAMOUNT),0) as CREDITAMOUNT, 
	  IFNULL(sum(c.LOCALDEBITAMOUNT),0) as LOCALDEBITAMOUNT ,IFNULL(sum(c.LOCALCREDITAMOUNT),0)  as LOCALCREDITAMOUNT,c.ASSID ,'1' as USE_STATE,
	  #{createUser,jdbcType=VARCHAR} as CREATE_USER,#{createTime,jdbcType=TIMESTAMP} as CREATE_TIME
	from  CW_BD_GLORGBOOK  a
	inner join CW_GL_VOUCHER b on a.PK_GLORGBOOK=b.PK_GLORGBOOK and b.PERIOD like #{lastPeriod,jdbcType=VARCHAR}"%" and b.VOUCHERTYPE='3' and b.USE_STATE='1' 
	inner join CW_GL_DETAIL c on  b.PK_VOUCHER=c.PK_VOUCHER and c.USE_STATE='1'
	where a.PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR} and a.USE_STATE='1'
	group by  c.PK_ACCSUBJ ,c.ASSID,b.FQMJBH
  </insert>
  <!-- 插入年初重算分期上的余额 -->
<!--   <insert id="insertFqmjbhYearRecalculation" parameterType="java.util.Map">
    insert into cw_gl_balance (PK_BALANCE, PK_GLORGBOOK, PERIOD, 
      PK_ACCSUBJ, SUBJCODE, SUBJNAME, 
      PK_CURRTYPE, DEBITAMOUNT, CREDITAMOUNT, 
      LOCALDEBITAMOUNT, LOCALCREDITAMOUNT, ASSID, 
      USE_STATE, CREATE_USER, CREATE_TIME
    )select
	  MD5(uuid()) as PK_BALANCE, b.FQMJBH as PK_GLORGBOOK,#{period,jdbcType=VARCHAR} as PERIOD,
	  c.PK_ACCSUBJ,SUBJCODE, SUBJNAME, PK_CURRTYPE,IFNULL(sum(c.DEBITAMOUNT),0) as DEBITAMOUNT,  IFNULL(sum(c.CREDITAMOUNT),0) as CREDITAMOUNT, 
	  IFNULL(sum(c.LOCALDEBITAMOUNT),0) as LOCALDEBITAMOUNT ,IFNULL(sum(c.LOCALCREDITAMOUNT),0)  as LOCALCREDITAMOUNT,c.ASSID ,'1' as USE_STATE,
	  #{createUser,jdbcType=VARCHAR} as CREATE_USER,#{createTime,jdbcType=TIMESTAMP} as CREATE_TIME
	from  CW_BD_GLORGBOOK  a
	inner join CW_GL_VOUCHER b on a.PK_GLORGBOOK=b.PK_GLORGBOOK and b.PERIOD like #{lastPeriod,jdbcType=VARCHAR}"%" and b.VOUCHERTYPE='3' and b.USE_STATE='1'
	and   b.FQMJBH !='' and b.FQMJBH is not null 
	inner join CW_GL_DETAIL c on  b.PK_VOUCHER=c.PK_VOUCHER and c.USE_STATE='1'
	where a.PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR} and a.USE_STATE='1'
	group by  b.FQMJBH,c.PK_ACCSUBJ ,c.ASSID
  </insert> -->
  <!-- 删除年初重算 -->
  <delete id="deleteEarlyYearRecalculation" parameterType="java.lang.String">
    delete from  cw_gl_balance
    where 
    PK_GLORGBOOK = #{pkGlorgbook,jdbcType=VARCHAR} and
    PERIOD = #{period,jdbcType=VARCHAR}
  </delete>
  <!-- 年初重算删除分期上的年初余额 -->
<!--   <delete id="deleteByFqmjbh" parameterType="java.lang.String">
    delete from  cw_gl_balance
    where 
    PK_GLORGBOOK in (select  distinct FQMJBH from cw_gl_voucher where  PK_GLORGBOOK = #{pkGlorgbook,jdbcType=VARCHAR} and FQMJBH !='' and FQMJBH is not null  and USE_STATE='1' ) 
    and
    PERIOD = #{period,jdbcType=VARCHAR}
  </delete> -->
     <!--结转 重算科目余额 金额总和-->
  <select id="selectCwGlBalanceBytransfer" resultMap="BaseResultMap">
  		select IFNULL(sum(LOCALDEBITAMOUNT),0) as LOCALDEBITAMOUNT,
  		IFNULL(sum(LOCALCREDITAMOUNT),0) as LOCALCREDITAMOUNT,
  		IFNULL(sum(DEBITAMOUNT),0) as DEBITAMOUNT,
  		IFNULL(sum(CREDITAMOUNT),0) as CREDITAMOUNT from cw_gl_balance 
  		 where USE_STATE='1' and PK_GLORGBOOK= #{pkGlorgbook,jdbcType=VARCHAR} 
  		 and PK_ACCSUBJ in  
  		 <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">    
		 #{item,jdbcType=VARCHAR}
		</foreach>
        <if test="minPeriod !=null">
        <![CDATA[ and   PERIOD >=#{minPeriod,jdbcType=VARCHAR} ]]>   
        </if>
        <![CDATA[ and    PERIOD<=#{period,jdbcType=VARCHAR} ]]>
          <choose>
	        <when test="fqmjbh != null and fqmjbh != ''">
	            and FQMJBH = #{fqmjbh,jdbcType=VARCHAR}
	        </when>
	        <otherwise>
	            and (FQMJBH = '' or FQMJBH IS NULL)
	        </otherwise>
         </choose>
  </select>
  <!--结转 重建科目余额表-删除 -->
  <delete id="deleteBalanceforTransfer">
   delete from  cw_gl_balance where PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR} and PERIOD=#{period,jdbcType=VARCHAR} and  USE_STATE='1'
   and PK_ACCSUBJ in 
   <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">    
	 #{item,jdbcType=VARCHAR}
	</foreach>  
			<choose>
	        <when test="fqmjbh != null and fqmjbh != ''">
	            and FQMJBH = #{fqmjbh,jdbcType=VARCHAR}
	        </when>
	        <otherwise>
	            and (FQMJBH = '' or FQMJBH IS NULL)
	        </otherwise>
         </choose>
  </delete>
      <!-- 结转重建科目余额表 -插入-->
  <insert id="insertBalanceforTransfer">
     insert into cw_gl_balance (PK_BALANCE, PK_GLORGBOOK, PERIOD, FQMJBH,
      PK_ACCSUBJ, SUBJCODE, SUBJNAME, 
      PK_CURRTYPE, DEBITAMOUNT, CREDITAMOUNT, 
      LOCALDEBITAMOUNT, LOCALCREDITAMOUNT, BALANCE,ASSID, 
      USE_STATE,CREATE_USER,CREATE_TIME 
    )
    select  a.PK_BALANCE, a.PK_GLORGBOOK, a.PERIOD, a.FQMJBH,
      b.PK_ACCSUBJ, b.SUBJCODE, b.SUBJNAME, 
      a.PK_CURRTYPE, a.DEBITAMOUNT, a.CREDITAMOUNT, 
      a.LOCALDEBITAMOUNT, a.LOCALCREDITAMOUNT, 
      case when b.BALANORIENT ='1' then a.LOCALDEBITAMOUNT- a.LOCALCREDITAMOUNT else  a.LOCALCREDITAMOUNT-a.LOCALDEBITAMOUNT end BALANCE,
      a.ASSID, a.USE_STATE,a.CREATE_USER,a.CREATE_TIME 
      from(
	    select MD5(uuid()) as PK_BALANCE ,a.PK_GLORGBOOK,a.PERIOD,#{fqmjbh,jdbcType=VARCHAR} as FQMJBH,b.PK_ACCSUBJ,SUBJCODE, SUBJNAME,PK_CURRTYPE,
		IFNULL(sum(b.DEBITAMOUNT),0) as DEBITAMOUNT,IFNULL(sum(b.CREDITAMOUNT),0) as CREDITAMOUNT,
		IFNULL(sum(b.LOCALDEBITAMOUNT),0) as LOCALDEBITAMOUNT,IFNULL(sum(b.LOCALCREDITAMOUNT),0) as LOCALCREDITAMOUNT,
		 b.ASSID,'1' as USE_STATE,b.CREATE_USER,b.CREATE_TIME 
		from CW_GL_VOUCHER a inner join CW_GL_DETAIL b on a.PK_VOUCHER = b.PK_VOUCHER 
		where a.PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR} and a.PERIOD=#{period,jdbcType=VARCHAR} and a.VOUCHERTYPE='3' and a.USE_STATE='1'  and b.USE_STATE='1' 
		and b.PK_ACCSUBJ in 
		<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">    
		 #{item,jdbcType=VARCHAR}
		</foreach>  
	          <choose>
		        <when test="fqmjbh != null and fqmjbh != ''">
		            and a.FQMJBH = #{fqmjbh,jdbcType=VARCHAR}
		        </when>
		        <otherwise>
		            and (a.FQMJBH = '' or a.FQMJBH IS NULL)
		        </otherwise>
	         </choose>
		group by a.PK_GLORGBOOK,a.PERIOD,b.PK_ACCSUBJ
	 )   a left join cw_bd_accsubj b
      on a.PK_ACCSUBJ=b.PK_ACCSUBJ  
  </insert>
<!--   查询科目余额表信息(结转) -->
  <select id="selectByForTransfer" parameterType="java.lang.String" resultMap="BaseResultMap">
  select  PK_BALANCE, PK_GLORGBOOK, PERIOD, PK_ACCSUBJ, SUBJCODE, SUBJNAME, PK_CURRTYPE, IFNULL(sum(DEBITAMOUNT),0) as DEBITAMOUNT,
  		IFNULL(sum(CREDITAMOUNT),0) as CREDITAMOUNT, IFNULL(sum(LOCALDEBITAMOUNT),0) as LOCALDEBITAMOUNT,
  		IFNULL(sum(LOCALCREDITAMOUNT),0) as LOCALCREDITAMOUNT, ASSID, QTY, USE_STATE, CREATE_USER, 
    CREATE_TIME, UPDATE_USER, UPDATE_TIME, REMARK
    from (
  	   select <include refid="Base_Column_List" /> from cw_gl_balance where PK_GLORGBOOK =#{pkGlorgbook,jdbcType=VARCHAR}  and USE_STATE='1' 
  	   and PK_ACCSUBJ in <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">    
	 #{item,jdbcType=VARCHAR}
	</foreach>  
		<if test="minPeriod != null">
	<![CDATA[ and   PERIOD >=#{minPeriod,jdbcType=VARCHAR}   ]]>
		</if>
	<![CDATA[   and    PERIOD<=#{period,jdbcType=VARCHAR} ]]>
	          <choose>
	        <when test="fqmjbh != null and fqmjbh != ''">
	            and FQMJBH = #{fqmjbh,jdbcType=VARCHAR}
	        </when>
	        <otherwise>
	            and (FQMJBH = '' or FQMJBH IS NULL)
	        </otherwise>
         </choose>
   ) temp group by temp.PK_ACCSUBJ,temp.ASSID
  </select>

       <!--结转时 重建科目余额表 -插入(分期)--><!-- 无用 -->
<!--   <insert id="insertBalanceforTransferByFqmjbh" parameterType="java.lang.String">
     insert into cw_gl_balance (PK_BALANCE, PK_GLORGBOOK, PERIOD, 
      PK_ACCSUBJ, SUBJCODE, SUBJNAME, 
      PK_CURRTYPE, DEBITAMOUNT, CREDITAMOUNT, 
      LOCALDEBITAMOUNT, LOCALCREDITAMOUNT, ASSID, 
      USE_STATE,CREATE_USER,CREATE_TIME 
    )select MD5(uuid()) as PK_BALANCE ,a.FQMJBH as PK_GLORGBOOK ,a.PERIOD,b.PK_ACCSUBJ,SUBJCODE, SUBJNAME,PK_CURRTYPE,
sum(b.DEBITAMOUNT),sum(b.CREDITAMOUNT),sum(b.LOCALDEBITAMOUNT),sum(b.LOCALCREDITAMOUNT), b.ASSID,
'1' as USE_STATE,b.CREATE_USER,b.CREATE_TIME 
from CW_GL_VOUCHER a inner join CW_GL_DETAIL b on a.PK_VOUCHER = b.PK_VOUCHER 
where a.PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR} and a.FQMJBH=#{fqmjbh,jdbcType=VARCHAR} and a.PERIOD=#{period,jdbcType=VARCHAR} and a.VOUCHERTYPE='3' and a.USE_STATE='1' 
and b.PK_ACCSUBJ in (select  PK_ACCSUBJ from CW_BD_ACCSUBJ a  where a.PK_SUBJSCHEME=#{pkSubjscheme,jdbcType=VARCHAR}  and a.PK_ACCSUBJ=#{pkSrcaccsubj,jdbcType=VARCHAR} 
union 
select PK_ACCSUBJ from (
      select t1.PK_ACCSUBJ,if(find_in_set(PARENTID, CONVERT(@pids USING utf8) COLLATE utf8_unicode_ci) > 0, @pids := concat(@pids, ',', PK_ACCSUBJ), '0') as ischild
            from (
                 select PK_ACCSUBJ,PARENTID from CW_BD_ACCSUBJ t where t.PK_SUBJSCHEME=#{pkSubjscheme,jdbcType=VARCHAR}  and t.USE_STATE = '1' order by SUBJCODE,PARENTID
                  ) t1,
                 (select @pids := #{pkSrcaccsubj,jdbcType=VARCHAR} ) t2
) t3 where ischild != '0')
group by a.PK_GLORGBOOK,a.PERIOD,b.PK_ACCSUBJ,b.ASSID;    
  </insert> -->
  <!-- 借贷平衡计算dml 所有者权益类都是贷计算的-->
  <select id="balanceCount" parameterType="java.lang.String" resultType="java.util.Map">
     select 
  	   (  select   IFNULL(sum(LOCALDEBITAMOUNT),0) - IFNULL(sum(LOCALCREDITAMOUNT),0) as zcSum from CW_GL_BALANCE  a inner join  (
               select  SUBJCODE ,PK_SUBJTYPE from CW_BD_ACCSUBJ where 
                        PK_SUBJSCHEME= (select PK_SUBJSCHEME from CW_BD_GLORGBOOK WHERE PK_GLORGBOOK =  #{pkGlorgbook,jdbcType=VARCHAR} )
       )  b on a.SUBJCODE=b.SUBJCODE
         where b.PK_SUBJTYPE='01' and  a.PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR}
         and   <![CDATA[ a.PERIOD<=#{period,jdbcType=VARCHAR} ]]>   and    a.PERIOD like   concat( left(#{period,jdbcType=VARCHAR}, 4),'%') and a.USE_STATE='1'
      )as zcSum,
      (   select   IFNULL(sum(LOCALCREDITAMOUNT),0) - IFNULL(sum(LOCALDEBITAMOUNT),0) as fzSum from CW_GL_BALANCE  a inner join  (
               select  SUBJCODE ,PK_SUBJTYPE from CW_BD_ACCSUBJ where 
                        PK_SUBJSCHEME= (select PK_SUBJSCHEME from CW_BD_GLORGBOOK WHERE PK_GLORGBOOK =  #{pkGlorgbook,jdbcType=VARCHAR} )
       )  b on a.SUBJCODE=b.SUBJCODE
         where b.PK_SUBJTYPE='02'  and   a.PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR}
         and   <![CDATA[ a.PERIOD<=#{period,jdbcType=VARCHAR} ]]>   and    a.PERIOD like   concat( left(#{period,jdbcType=VARCHAR}, 4),'%') and a.USE_STATE='1'
      )as fzSum,
      (   select   IFNULL(sum(LOCALCREDITAMOUNT),0) - IFNULL(sum(LOCALDEBITAMOUNT),0) as syzqySum from CW_GL_BALANCE a inner join  (
               select  SUBJCODE ,PK_SUBJTYPE from CW_BD_ACCSUBJ where 
                        PK_SUBJSCHEME= (select PK_SUBJSCHEME from CW_BD_GLORGBOOK WHERE PK_GLORGBOOK =  #{pkGlorgbook,jdbcType=VARCHAR} )
       )  b on a.SUBJCODE=b.SUBJCODE
         where b.PK_SUBJTYPE='03' and   a.PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR}
         and   <![CDATA[ a.PERIOD<=#{period,jdbcType=VARCHAR} ]]>   and    a.PERIOD like   concat( left(#{period,jdbcType=VARCHAR}, 4),'%') and a.USE_STATE='1'
      )as syzqySum
     from dual
  </select>
  <!--结账时重算辅助余额信息  -->
  <insert id="insertRecalculatedBalance" parameterType="java.util.Map">
    insert into cw_gl_balance (
    	  PK_BALANCE, PK_GLORGBOOK, PERIOD, FQMJBH,
	      PK_ACCSUBJ, SUBJCODE, SUBJNAME, 
	      PK_CURRTYPE, DEBITAMOUNT, CREDITAMOUNT, 
	      LOCALDEBITAMOUNT, LOCALCREDITAMOUNT, BALANCE,ASSID, 
	      USE_STATE, CREATE_USER, CREATE_TIME
    )
    select  a.PK_BALANCE, a.PK_GLORGBOOK, a.PERIOD, a.FQMJBH,
	      b.PK_ACCSUBJ, b.SUBJCODE, b.SUBJNAME, 
	      a.PK_CURRTYPE, a.DEBITAMOUNT, a.CREDITAMOUNT, 
	      a.LOCALDEBITAMOUNT, a.LOCALCREDITAMOUNT, 
          case when b.BALANORIENT ='1' then a.LOCALDEBITAMOUNT- a.LOCALCREDITAMOUNT else  a.LOCALCREDITAMOUNT-a.LOCALDEBITAMOUNT end BALANCE,
	      a.ASSID, a.USE_STATE, a.CREATE_USER, a.CREATE_TIME  from 
	 (select 
		     MD5(uuid()) as PK_BALANCE, #{pkGlorgbook,jdbcType=VARCHAR} as PK_GLORGBOOK,#{period,jdbcType=VARCHAR} as PERIOD,
		     temp.FQMJBH,del.PK_ACCSUBJ,del.SUBJCODE, del.SUBJNAME, del.PK_CURRTYPE,
			 IFNULL(sum(del.DEBITAMOUNT),0) as DEBITAMOUNT,IFNULL(sum(del.CREDITAMOUNT),0) as CREDITAMOUNT,
			 IFNULL(sum(del.LOCALDEBITAMOUNT),0) as LOCALDEBITAMOUNT,IFNULL(sum(del.LOCALCREDITAMOUNT),0)as LOCALCREDITAMOUNT,
			 del.ASSID ,'1' as USE_STATE,#{createUser,jdbcType=VARCHAR} as CREATE_USER,#{createTime,jdbcType=TIMESTAMP} as CREATE_TIME
		from CW_GL_DETAIL del
		inner join  ( select  PK_VOUCHER,FQMJBH from  CW_GL_VOUCHER a  where  a.PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR} and a.PERIOD=#{period,jdbcType=VARCHAR}  and a.VOUCHERTYPE='3' and a.USE_STATE='1')   temp
		on del.PK_VOUCHER=temp.PK_VOUCHER and del.USE_STATE='1'
		group by del.PK_ACCSUBJ,temp.FQMJBH <!--如果按辅助项统计放开这块,del.ASSID  -->
	) a left join cw_bd_accsubj b
               on a.PK_ACCSUBJ=b.PK_ACCSUBJ
  </insert>
  <!--结账时重算分期辅助余额信息  -->
  <!-- 已作废 -->
  <!-- <insert id="insertFqBalance" parameterType="java.util.Map">
    insert into cw_gl_balance (PK_BALANCE, PK_GLORGBOOK, PERIOD, 
      PK_ACCSUBJ, SUBJCODE, SUBJNAME, 
      PK_CURRTYPE, DEBITAMOUNT, CREDITAMOUNT, 
      LOCALDEBITAMOUNT, LOCALCREDITAMOUNT, ASSID, 
      USE_STATE, CREATE_USER, CREATE_TIME
    )
    select 
	MD5(uuid()) as PK_BALANCE, #{fqmjbh,jdbcType=VARCHAR} as PK_GLORGBOOK,#{period,jdbcType=VARCHAR} as PERIOD,del.PK_ACCSUBJ,del.SUBJCODE, del.SUBJNAME, del.PK_CURRTYPE,
		 IFNULL(sum(del.DEBITAMOUNT),0) as DEBITAMOUNT,IFNULL(sum(del.CREDITAMOUNT),0) as CREDITAMOUNT,
		 IFNULL(sum(del.LOCALDEBITAMOUNT),0) as LOCALDEBITAMOUNT,IFNULL(sum(del.LOCALCREDITAMOUNT),0)as LOCALCREDITAMOUNT,
		 del.ASSID ,'1' as USE_STATE,#{createUser,jdbcType=VARCHAR} as CREATE_USER,#{createTime,jdbcType=TIMESTAMP} as CREATE_TIME
	from CW_GL_DETAIL del
	inner join  ( select  PK_VOUCHER from  CW_GL_VOUCHER a  where  a.PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR} and a.PERIOD=#{period,jdbcType=VARCHAR} 
	and a.FQMJBH= #{fqmjbh,jdbcType=VARCHAR} and a.VOUCHERTYPE='3' and a.USE_STATE='1' and a.FQMJBH != '' and a.FQMJBH is not null)   temp
	on del.PK_VOUCHER=temp.PK_VOUCHER and del.USE_STATE='1'
	group by del.PK_ACCSUBJ,del.ASSID
  </insert> -->
<!--   计算科目余额(余额控制方向) -->
  <select id="seachCwGlBalanceSum" resultType="java.lang.String">
  select 
  <choose>
  <when test="balanorient==1">
    (sum(LOCALDEBITAMOUNT)-sum(LOCALCREDITAMOUNT))as sum 
  </when>
  <otherwise>
    (sum(LOCALCREDITAMOUNT)-sum(LOCALDEBITAMOUNT))as sum 
  </otherwise>
  </choose>
  from cw_gl_balance  where PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR}
	and PK_ACCSUBJ=#{pkAccsubj,jdbcType=VARCHAR} 
	and period like "%"#{year,jdbcType=VARCHAR}"%" 
	<![CDATA[ and period <=#{period,jdbcType=VARCHAR} ]]>
	group by PK_GLORGBOOK,PK_ACCSUBJ 
</select>
<!--  查询分期募集编号 (结转)-->
<select id="selectFqmjbhForTransfer" resultType="java.lang.String">
	select distinct ifnull(FQMJBH,'') as FQMJBH from cw_gl_balance where PK_GLORGBOOK = #{pkGlorgbook,jdbcType=VARCHAR} and 
	PK_ACCSUBJ in <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">    
	 #{item,jdbcType=VARCHAR}
	</foreach>  
   <if test="minPeriod != null">
 <![CDATA[	and   PERIOD >=#{minPeriod,jdbcType=VARCHAR} ]]>
 	</if>
 	 <![CDATA[ and    PERIOD<=#{period,jdbcType=VARCHAR}  ]]>
and USE_STATE='1'
</select>
<!-- 获取损益平准金比例  -->
<select id="selectProportion" parameterType="java.lang.String" resultType="java.math.BigDecimal">
	<![CDATA[select   ifnull((ysxld+sr-fy)/(ysxld+sr-fy+wsxld) , 0)   as res  from (
	    select
		  ( select ifnull(sum(LOCALCREDITAMOUNT)-sum(LOCALDEBITAMOUNT),0) from  cw_gl_detail   a inner join  (select  PK_VOUCHER from  cw_gl_voucher  where PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR} 	 ) b 
                        on a.PK_VOUCHER=b.PK_VOUCHER  where SUBJCODE in ('400201','400301', '410301','410401') and USE_STATE='1' 
		      )ysxld,
		  ( select ifnull(sum(LOCALCREDITAMOUNT)-sum(LOCALDEBITAMOUNT),0) from   cw_gl_detail   a inner join  (select  PK_VOUCHER from  cw_gl_voucher  where PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR} ) b 
                        on a.PK_VOUCHER=b.PK_VOUCHER  where left(SUBJCODE,4) in ('6011','6041','6061','6101','6111','6302')  and USE_STATE='1' 
		      ) sr ,
		  ( select ifnull(sum(LOCALDEBITAMOUNT)-sum(LOCALCREDITAMOUNT),0) from   cw_gl_detail   a inner join  (select  PK_VOUCHER from  cw_gl_voucher  where PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR} ) b 
                        on a.PK_VOUCHER=b.PK_VOUCHER  where  left(SUBJCODE,4) in ('6404','6406','6407','6408','6409','6605','6403','6701','6901','6402')   and USE_STATE='1' 
		    )fy ,
		  ( select ifnull(sum(LOCALCREDITAMOUNT)-sum(LOCALDEBITAMOUNT),0) from   cw_gl_detail   a inner join  (select  PK_VOUCHER from  cw_gl_voucher  where PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR}  ) b 
                        on a.PK_VOUCHER=b.PK_VOUCHER  where SUBJCODE in ('400202','400203','400302' ,'410302','410402' ) and USE_STATE='1' 
		      )wsxld
	     from dual
	 ) temp
	]]>
</select>
 <!-- 结转-收入费用金额查询 -->
<select id="searchBalanceForIncome" resultMap="BaseResultMap1" statementType="STATEMENT">
 select SUBJCODE,SUBJNAME,IF('${orientation}'='1','2','1') as balanorient,
 CASE  
      WHEN '${orientation}'= '1' THEN  (ifnull(sum(LOCALCREDITAMOUNT),0)-ifnull(sum(LOCALDEBITAMOUNT),0))
      ELSE (ifnull(sum(LOCALDEBITAMOUNT),0)-ifnull(sum(LOCALCREDITAMOUNT),0))  END as balance 
	from cw_gl_balance where PK_GLORGBOOK ='${pkGlorgbook}' 
	and PK_ACCSUBJ in <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">    
	 '${item}'
	</foreach>  
	 <![CDATA[and   PERIOD<='${period}' ]]>and USE_STATE='1'
</select>
	<!--删除账套下分录  -->
  <delete id="deleteBypkGlorgbook" parameterType="java.lang.String">
    delete from  cw_gl_balance
    where 
    PK_GLORGBOOK = #{pkGlorgbook,jdbcType=VARCHAR}
  </delete>
  <!--科目转换是刷新余额表  -->
  <insert id="insertBalanceKmzh" parameterType="java.lang.String">
    insert into cw_gl_balance (
    	  PK_BALANCE, PK_GLORGBOOK, PERIOD, FQMJBH,
	      PK_ACCSUBJ, SUBJCODE, SUBJNAME, 
	      PK_CURRTYPE, DEBITAMOUNT, CREDITAMOUNT, 
	      LOCALDEBITAMOUNT, LOCALCREDITAMOUNT, BALANCE,ASSID, 
	      USE_STATE, CREATE_USER, CREATE_TIME
    )
    select  a.PK_BALANCE, a.PK_GLORGBOOK, a.PERIOD, a.FQMJBH,
	      b.PK_ACCSUBJ, b.SUBJCODE, b.SUBJNAME, 
	      a.PK_CURRTYPE, a.DEBITAMOUNT, a.CREDITAMOUNT, 
	      a.LOCALDEBITAMOUNT, a.LOCALCREDITAMOUNT, 
          case when b.BALANORIENT ='1' then a.LOCALDEBITAMOUNT- a.LOCALCREDITAMOUNT else  a.LOCALCREDITAMOUNT-a.LOCALDEBITAMOUNT end BALANCE,
	      a.ASSID, a.USE_STATE, a.CREATE_USER, a.CREATE_TIME  from 
	 (select 
		     MD5(uuid()) as PK_BALANCE, #{pkGlorgbook,jdbcType=VARCHAR} as PK_GLORGBOOK,temp.PERIOD as PERIOD,
		     temp.FQMJBH,del.PK_ACCSUBJ,del.SUBJCODE, del.SUBJNAME, del.PK_CURRTYPE,
			 IFNULL(sum(del.DEBITAMOUNT),0) as DEBITAMOUNT,IFNULL(sum(del.CREDITAMOUNT),0) as CREDITAMOUNT,
			 IFNULL(sum(del.LOCALDEBITAMOUNT),0) as LOCALDEBITAMOUNT,IFNULL(sum(del.LOCALCREDITAMOUNT),0)as LOCALCREDITAMOUNT,
			 del.ASSID ,'1' as USE_STATE,#{createUser,jdbcType=VARCHAR} as CREATE_USER,now() as CREATE_TIME
		from CW_GL_DETAIL del
		inner join  ( select  PK_VOUCHER,FQMJBH,PERIOD from  CW_GL_VOUCHER a  where  a.PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR}   and a.VOUCHERTYPE='3' and a.USE_STATE='1')   temp
		on del.PK_VOUCHER=temp.PK_VOUCHER and del.USE_STATE='1'
		group by temp.PERIOD,del.PK_ACCSUBJ,temp.FQMJBH
	) a left join cw_bd_accsubj b
               on a.PK_ACCSUBJ=b.PK_ACCSUBJ
  </insert>
  <!--删除某期间余额表信息  -->
   <delete id="deleteBypkPeriod">
   delete from  cw_gl_balance where PERIOD in
   <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">    
	 #{item,jdbcType=VARCHAR}
	</foreach>  
  </delete>
    <!--新增某期间余额表信息  -->
  <insert id="insertBypkPeriod" parameterType="java.util.Map">
    insert into cw_gl_balance (
    	  PK_BALANCE, PK_GLORGBOOK, PERIOD, FQMJBH,
	      PK_ACCSUBJ, SUBJCODE, SUBJNAME, 
	      PK_CURRTYPE, DEBITAMOUNT, CREDITAMOUNT, 
	      LOCALDEBITAMOUNT, LOCALCREDITAMOUNT, BALANCE,ASSID, 
	      USE_STATE, CREATE_USER, CREATE_TIME
    )
    select  a.PK_BALANCE, a.PK_GLORGBOOK, a.PERIOD, a.FQMJBH,
	      b.PK_ACCSUBJ, b.SUBJCODE, b.SUBJNAME, 
	      a.PK_CURRTYPE, a.DEBITAMOUNT, a.CREDITAMOUNT, 
	      a.LOCALDEBITAMOUNT, a.LOCALCREDITAMOUNT, 
          case when b.BALANORIENT ='1' then a.LOCALDEBITAMOUNT- a.LOCALCREDITAMOUNT else  a.LOCALCREDITAMOUNT-a.LOCALDEBITAMOUNT end BALANCE,
	      a.ASSID, a.USE_STATE, a.CREATE_USER, a.CREATE_TIME  from 
	 (select 
		     MD5(uuid()) as PK_BALANCE, temp.PK_GLORGBOOK,temp.PERIOD as PERIOD,
		     temp.FQMJBH,del.PK_ACCSUBJ,del.SUBJCODE, del.SUBJNAME, del.PK_CURRTYPE,
			 IFNULL(sum(del.DEBITAMOUNT),0) as DEBITAMOUNT,IFNULL(sum(del.CREDITAMOUNT),0) as CREDITAMOUNT,
			 IFNULL(sum(del.LOCALDEBITAMOUNT),0) as LOCALDEBITAMOUNT,IFNULL(sum(del.LOCALCREDITAMOUNT),0)as LOCALCREDITAMOUNT,
			 del.ASSID ,'1' as USE_STATE,#{createUser,jdbcType=VARCHAR} as CREATE_USER,now() as CREATE_TIME
		from CW_GL_DETAIL del
		inner join  ( select  PK_VOUCHER,PK_GLORGBOOK,FQMJBH,PERIOD from  CW_GL_VOUCHER a  where  a.VOUCHERTYPE='3' and a.USE_STATE='1' 
		and PERIOD in
		   <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">    
			 #{item,jdbcType=VARCHAR}
			</foreach>  
		)   temp
		on del.PK_VOUCHER=temp.PK_VOUCHER and del.USE_STATE='1'
		group by temp.PERIOD,temp.PK_GLORGBOOK,del.PK_ACCSUBJ,temp.FQMJBH
	) a left join cw_bd_accsubj b
               on a.PK_ACCSUBJ=b.PK_ACCSUBJ
  </insert>
<!--   科目转换更新 -->
  <update id="updateBalanceforSubjcode" parameterType="java.lang.String">
  update  cw_gl_balance
    <set>
      <if test="pkAccsubj != null">
        PK_ACCSUBJ = #{pkAccsubj,jdbcType=VARCHAR},
      </if>
      <if test="subjcodeN != null">
        SUBJCODE = #{subjcodeN,jdbcType=VARCHAR},
      </if>
      <if test="subjname != null">
        SUBJNAME = #{subjname,jdbcType=VARCHAR},
      </if>
       <if test="userId != null">
        UPDATE_USER = #{userId,jdbcType=VARCHAR},
      </if>
      <if test="userId != null">
        UPDATE_TIME = now()
      </if>
    </set>
    where PK_GLORGBOOK = #{pkGlorgbook,jdbcType=VARCHAR} and SUBJCODE = #{subjcodeO,jdbcType=VARCHAR}
    and USE_STATE='1'
  </update>
</mapper>