<?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.CwTjkOutcwVoucherMapper"> <!-- 插入凭证主表数据 --> <insert id="insertVoucherMainInfo" parameterType="java.util.Map"> insert into cw_gl_voucher(PK_VOUCHER, PK_GLORGBOOK, PK_VOUCHERTY, PK_SYSTEM, VOUCHERTYPE, ABSTRACTS, PK_PREPARED, PREPAREDATE, ISAUDIT, PK_AUDIT, AUDITDATE, ISSIGN, PK_SIGN, SIGNDATE, VOUCHERNO, ISMODIFY, YEAR, PERIOD, TEMPSAVE, TOTALDEBIT, TOTALCREDIT, OCC_DATE,USE_STATE, CREATE_USER, CREATE_TIME, UPDATE_USER, UPDATE_TIME, REMARK) SELECT concat('HS',a.ID), #{glorgbookCode,jdbcType=VARCHAR}, '2', '02', '1' AS VOUCHERTYPE, CASE WHEN a.VC_IMPORT_DESCRIBE IS NULL THEN q.ABSTRACTS else a.VC_IMPORT_DESCRIBE end ABSTRACTS, #{userId,jdbcType=VARCHAR}, <choose> <when test="newPreparedate != null and newPreparedate != ''"> #{newPreparedate,jdbcType=DATE} </when> <otherwise> PREPAREDDATE </otherwise> </choose>, null,null,null,null,null,null, VOUCHER_ID, '1', FISCAL_YEAR, #{period,jdbcType=VARCHAR}, '0', q.PRIMARY_DEBIT_AMOUNT, q.PRIMARY_DEBIT_AMOUNT, PREPAREDDATE as OCC_DATE, case when a.DR='0' then '1' else '0' end DR, NULL, now(), NULL, NULL, NULL FROM cw_hs_outcw_voucher a INNER JOIN ( SELECT b.L_MAINID,b.ABSTRACTS, sum( cast( PRIMARY_DEBIT_AMOUNT AS DECIMAL (20, 2))) AS PRIMARY_DEBIT_AMOUNT, sum( cast( PRIMARY_CREDIT_AMOUNT AS DECIMAL (20, 2))) AS PRIMARY_CREDIT_AMOUNT FROM cw_hs_outcw_vouchers b LEFT JOIN ( SELECT DISTINCT L_MAINID FROM cw_hs_outcw_vouchers c INNER JOIN ( SELECT distinct SUB_CODE_V FROM cw_hs_subcodemap WHERE IMPORT_FLAG="2" and PRODUCT_ID in <foreach collection="list" open="(" item="item" separator="," close=")"> #{item.productId,jdbcType=VARCHAR} </foreach> ) f ON c.ACCOUNT_CODE = f.SUB_CODE_V ) e ON e.L_MAINID = b.L_MAINID WHERE e.L_MAINID IS NULL GROUP BY b.L_MAINID ) q ON a.ID = q.L_MAINID where a.L_ZTBH in <foreach collection="ztList" open="(" item="item" separator="," close=")"> #{item,jdbcType=VARCHAR} </foreach> <if test="beginDate!=null"> <![CDATA[ and prepareddate >= #{beginDate,jdbcType=VARCHAR} ]]> </if> <if test="endDate!=null"> <![CDATA[and prepareddate <= #{endDate,jdbcType=VARCHAR} ]]> </if> </insert> <!-- 插入分录表数据 --> <insert id="insertDetailSideInfo" parameterType="java.util.Map"> insert into cw_gl_detail(PK_DETAIL,PK_GLORGBOOK, PK_VOUCHER,PREPAREDATE, DETAILINDEX, ABSTRACTS, PK_ACCSUBJ, SUBJCODE, SUBJNAME, PK_CURRTYPE, DEBITAMOUNT, CREDITAMOUNT, LOCALDEBITAMOUNT, LOCALCREDITAMOUNT, ASSID, QTY, USE_STATE, CREATE_USER, CREATE_TIME, UPDATE_USER, UPDATE_TIME, REMARK) select MD5(uuid()),#{glorgbookCode,jdbcType=VARCHAR} PK_GLORGBOOK,concat('HS',q.L_MAINID), <choose> <when test="newPreparedate != null and newPreparedate != ''"> #{newPreparedate,jdbcType=DATE} </when> <otherwise> c.PREPAREDDATE </otherwise> </choose>, ENTRY_ID, ABSTRACTS, t.PK_ACCSUBJ,t.SUBJCODE,t.SUBJNAME,q.CURRENCY, PRIMARY_DEBIT_AMOUNT,PRIMARY_CREDIT_AMOUNT, NATURAL_DEBIT_CURRENCY, NATURAL_CREDIT_CURRENCY, case when q.L_ZQNM is not null then MD5(uuid()) else null end ASSID, DEBIT_QUANTITY, case when DR='0' then '1' else '0' end DR,null,now(),null,null,q.L_ZQNM from cw_hs_outcw_vouchers q left join (select distinct L_MAINID from cw_hs_outcw_vouchers a inner join (select distinct SUB_CODE_V from cw_hs_subcodemap where IMPORT_FLAG="2" and PRODUCT_ID in <foreach collection="list" open="(" item="item" separator="," close=")"> #{item.productId,jdbcType=VARCHAR} </foreach> ) b on a.ACCOUNT_CODE=b.SUB_CODE_V) x on q.L_MAINID = x.L_MAINID inner join (select ID ,PREPAREDDATE from cw_hs_outcw_voucher where L_ZTBH in <foreach collection="ztList" open="(" item="item" separator="," close=")"> #{item,jdbcType=VARCHAR} </foreach> <if test="beginDate!=null"> <![CDATA[and prepareddate >= #{beginDate,jdbcType=VARCHAR} ]]> </if> <if test="endDate!=null"> <![CDATA[and prepareddate <= #{endDate,jdbcType=VARCHAR}]]> </if> ) c on c.ID=q.L_MAINID left join (select distinct PK_ACCSUBJ,SUBJCODE,SUBJNAME,SUB_CODE_V from cw_hs_subcodemap t left join cw_bd_accsubj s on t.SUB_CODE=s.SUBJCODE where IMPORT_FLAG = "1" and s.PK_SUBJSCHEME=(SELECT PK_SUBJSCHEME FROM cw_bd_subjscheme WHERE ENABLESTATE='1') and PRODUCT_ID in <foreach collection="list" open="(" item="item" separator="," close=")"> #{item.productId,jdbcType=VARCHAR} </foreach>) t on t.SUB_CODE_V=q.ACCOUNT_CODE where x.L_MAINID is null </insert> <!-- 科目对照关系表是否对应匹配 --> <select id="selectExistSubjectCount" parameterType="java.util.Map" resultType="java.lang.String"> select GROUP_CONCAT(ACCOUNT_CODE ) from( select distinct ACCOUNT_CODE from cw_hs_outcw_vouchers a inner join (select ID from cw_hs_outcw_voucher where L_ZTBH in <foreach collection="ztList" open="(" item="item" separator="," close=")"> #{item,jdbcType=VARCHAR} </foreach> <if test="beginDate!=null"> <![CDATA[and PREPAREDDATE >= #{beginDate,jdbcType=VARCHAR}]]> </if> <if test="endDate!=null"> <![CDATA[and PREPAREDDATE <= #{endDate,jdbcType=VARCHAR}]]> </if> )b on a.L_MAINID=b.ID where a.ACCOUNT_CODE not in (select distinct SUB_CODE_V from cw_hs_subcodemap where PRODUCT_ID in <foreach collection="list" open="(" item="item" separator="," close=")"> #{item.productId,jdbcType=VARCHAR} </foreach>) )a </select> <!-- 查询对照关系是否存在非末级科目 --> <select id="selectIsFinalstage" parameterType="java.util.Map" resultType="java.lang.String"> select GROUP_CONCAT(a.SUB_CODE ) from ( select distinct SUB_CODE from cw_hs_subcodemap where PRODUCT_ID in <foreach collection="list" open="(" item="item" separator="," close=")"> #{item.productId,jdbcType=VARCHAR} </foreach> and SUB_CODE_V in( select distinct a.ACCOUNT_CODE from cw_hs_outcw_vouchers a inner join (select ID from cw_hs_outcw_voucher where L_ZTBH in <foreach collection="ztList" open="(" item="item" separator="," close=")"> #{item,jdbcType=VARCHAR} </foreach> <![CDATA[and PREPAREDDATE >= #{beginDate,jdbcType=VARCHAR} and PREPAREDDATE <= #{endDate,jdbcType=VARCHAR}]]> )b on a.L_MAINID=b.ID ) )a left join ( select SUBJCODE, FINALSTAGE from cw_bd_accsubj where USE_STATE='1' and PK_SUBJSCHEME =(select PK_SUBJSCHEME from cw_bd_glorgbook where PK_GLORGBOOK=#{glorgbookCode,jdbcType=VARCHAR}) )b on a.SUB_CODE=b.SUBJCODE where <![CDATA[ b.FINALSTAGE <> '1' or b.FINALSTAGE is null]]> </select> <!-- 插入辅助项 --> <insert id="insertForFreevalue" parameterType="java.util.Map"> insert into cw_gl_freevalue (PK_FREEVALUE, ASSID, CHECKTYPE, CHECKVALUE, VALUECODE, VALUENAME, DEBITAMOUNT, CREDITAMOUNT,PK_SYSTEM, USE_STATE,CREATE_TIME) select a.PK_FREEVALUE,a.ASSID ,a.CHECKTYPE,b.L_ZQNM, b.L_ZQNM,concat(b.VC_ZQDM, '_', b.VC_ZQJC),a.LOCALDEBITAMOUNT,a.LOCALCREDITAMOUNT,'02' PK_SYSTEM ,'1' USE_STATE,now() CREATE_TIME from ( select MD5(uuid()) PK_FREEVALUE ,ASSID,'2019032120300101100012' as CHECKTYPE ,REMARK as CHECKVALUE,LOCALDEBITAMOUNT,LOCALCREDITAMOUNT from cw_gl_detail d inner join ( select PK_VOUCHER from cw_gl_voucher where pk_glorgbook=#{glorgbookCode,jdbcType=VARCHAR} and <![CDATA[ OCC_DATE>=#{beginDate,jdbcType=VARCHAR} and OCC_DATE<=#{endDate,jdbcType=VARCHAR} and pk_system='02']]> )c on c.PK_VOUCHER=d.PK_VOUCHER where d.REMARK is not null )a left join cw_hs_outcw_zqxx b on a.CHECKVALUE=L_ZQNM </insert> <!-- 删除凭证--> <delete id="deleteForVoucher" parameterType="java.util.Map"> delete from cw_gl_voucher where pk_glorgbook=#{glorgbookCode,jdbcType=VARCHAR} and PERIOD = #{period,jdbcType=VARCHAR} and <![CDATA[ OCC_DATE>=#{beginDate,jdbcType=VARCHAR} and OCC_DATE<=#{endDate,jdbcType=VARCHAR} and pk_system='02']]> </delete> <!-- 删除分录 --> <delete id="deleteForDetail" parameterType="java.util.Map"> delete a from cw_gl_detail a inner join (select pk_voucher from cw_gl_voucher where pk_glorgbook=#{glorgbookCode,jdbcType=VARCHAR} and PERIOD = #{period,jdbcType=VARCHAR} and <![CDATA[ OCC_DATE>=#{beginDate,jdbcType=VARCHAR} and OCC_DATE<=#{endDate,jdbcType=VARCHAR} and pk_system='02']]>) b on a.pk_voucher=b.pk_voucher </delete> <!-- 删除辅助项 --> <delete id="deleteForFreevalue" parameterType="java.util.Map"> delete a from cw_gl_freevalue a inner join ( select assid from cw_gl_detail where pk_voucher in(select pk_voucher from cw_gl_voucher where pk_glorgbook=#{glorgbookCode,jdbcType=VARCHAR} and PERIOD = #{period,jdbcType=VARCHAR} and <![CDATA[ OCC_DATE>=#{beginDate,jdbcType=VARCHAR} and OCC_DATE<=#{endDate,jdbcType=VARCHAR} and pk_system='02']]>)) b on a.assid =b.assid </delete> <select id="countExistThisBatch" parameterType="java.lang.String" resultType="java.lang.Long"> <![CDATA[select count(1) from cw_gl_voucher where PK_GLORGBOOK=#{pkGlorgbook,jdbcType=VARCHAR} and pk_system='02' and OCC_DATE>=#{beginDate,jdbcType=VARCHAR} and OCC_DATE <=#{endDate,jdbcType=VARCHAR} and USE_STATE='1' ]]> </select> </mapper>