Files

1197 lines
46 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<Tran>
<Transaction code="initBatch_ICBC" log_switch='1' desc="生成工行批次">
<Quote name="SQL_RcvConfirm" />
<DynSentence name="QryBatCnt"><!-- 查询该批次有多少记录 -->
<Sentence>
SELECT COUNT(*) BAT_CNT FROM CAPTXNJNL
WHERE DSK_NAM=? AND ORD_DT=? AND CORG_NO=? AND TXN_MOD=? AND BNK_FLG=? AND DSK_NAM_STS='0' AND TXN_STS='U' AND CORG_DSK_NO = '0' AND ROWNUM &lt;= ?
</Sentence>
<Fields>DSK_NAM|ORD_DT|CORG_NO|TXN_MOD|BNK_FLG|MAX_CNT|</Fields>
</DynSentence>
<DynSentence name="QryBatCnt1"><!-- 查询该批次有多少记录 -->
<Sentence>
SELECT COUNT(*) BAT_CNT FROM CAPTXNJNL
WHERE DSK_NAM=? AND ORD_DT=? AND CORG_NO=? AND TXN_MOD=? AND BNK_FLG=? AND ROUT_FLG=? AND DSK_NAM_STS='0' AND TXN_STS='U' AND CORG_DSK_NO = '0' AND ROWNUM &lt;= ?
</Sentence>
<Fields>DSK_NAM|ORD_DT|CORG_NO|TXN_MOD|BNK_FLG|ROUT_FLG|MAX_CNT|</Fields>
</DynSentence>
<DynSentence name="UpdDskNo">
<Sentence>
UPDATE CAPTXNJNL SET CORG_DSK_NO = ?,CORG_BUS_TYP =?,TXN_CD = '204020', TTXN_CD = ?,ACC_VER_STS= 'S'
WHERE DSK_NAM=? AND ORD_DT=? AND CORG_NO=? AND TXN_MOD=? AND BNK_FLG=? AND DSK_NAM_STS='0' AND TXN_STS='U' AND CORG_DSK_NO = '0' AND ROWNUM &lt;= ?
</Sentence>
<Fields>CORG_DSK_NO|CORG_BUS_TYP|TTXN_CD|DSK_NAM|ORD_DT|CORG_NO|TXN_MOD|BNK_FLG|MAX_CNT|</Fields>
</DynSentence>
<DynSentence name="UpdDskNo1">
<Sentence>
UPDATE CAPTXNJNL SET CORG_DSK_NO = ?,CORG_BUS_TYP =?,TXN_CD = '204020', TTXN_CD = ?,ACC_VER_STS= 'S'
WHERE DSK_NAM=? AND ORD_DT=? AND CORG_NO=? AND TXN_MOD=? AND BNK_FLG=? AND ROUT_FLG=? AND DSK_NAM_STS='0' AND TXN_STS='U' AND CORG_DSK_NO = '0' AND ROWNUM &lt;= ?
</Sentence>
<Fields>CORG_DSK_NO|CORG_BUS_TYP|TTXN_CD|DSK_NAM|ORD_DT|CORG_NO|TXN_MOD|BNK_FLG|ROUT_FLG|MAX_CNT|</Fields>
</DynSentence>
<DynSentence name="QryBatAmt">
<Sentence>
SELECT COUNT(*) BAT_CNT,NVL(SUM(TXN_AMT),0) BAT_SUM FROM CAPTXNJNL
WHERE DSK_NAM=? AND ORD_DT = ? AND CORG_NO=? AND CORG_DSK_NO = ? AND DSK_NAM_STS='0' AND TXN_STS='U'
</Sentence>
<Fields>DSK_NAM|ORD_DT|CORG_NO|CORG_DSK_NO</Fields>
</DynSentence>
<DynSentence name="QRY_ICBCCORGBUSTYP_VAL">
<Sentence>
SELECT ICBCCORGBUSTYP.NEXTVAL CORG_BUS_TYP FROM DUAL
</Sentence>
</DynSentence>
<DynSentence name="QRY_CAPTXNJNL_GRP"><!-- 获取行内行外标志, 行内交易打一个包 行外交易根据汇路分别打包 -->
<Sentence>
SELECT BATCH_TYPE FROM (
SELECT case when BNK_FLG='Y' then 'Y' when BNK_FLG='N' then ROUT_FLG end BATCH_TYPE FROM CAPTXNJNL
WHERE DSK_NAM=? AND ORD_DT=? AND CORG_NO=? AND TXN_MOD=? AND DSK_NAM_STS='0' AND TXN_STS='U' AND CORG_DSK_NO = '0')
GROUP BY BATCH_TYPE
</Sentence>
<Fields>DSK_NAM|ORD_DT|CORG_NO|TXN_MOD|</Fields>
</DynSentence>
<DynSentence name="QryBatTacNo"><!-- 查询付款账号 -->
<Sentence>
SELECT TAC_NO ICBC_BUS_TYP_SEQ FROM CAPTXNJNL
WHERE DSK_NAM=? AND ORD_DT=? AND CORG_NO=? AND ROWNUM =1
</Sentence>
<Fields>DSK_NAM|ORD_DT|CORG_NO|</Fields>
</DynSentence>
<FlowCtrl>
<!--清理数据 -->
<Delete>RSP_CD</Delete>
<Delete>RSP_MSG</Delete>
<Exec func="PUB:DumpETF" />
<!--读取参数配置 -->
<Quote name="Batch_Cfg_ICBC" />
<!--设置机构编号(工行) -->
<Set>CORG_NO=ICBC</Set>
<Set>MAX_CNT=$PARA.MAX_CNT</Set>
<!--获取第三方业务种类编号1到999 当日不重复 每一个大批次获取一个-->
<!--Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_ICBCCORGBUSTYP_VAL"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=获取业务种类编号失败</Set>
<Return/>
</If-->
<!--查询付款账号-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QryBatTacNo"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=获取业务种类编号失败</Set>
<Return/>
</If>
<Set>BR_NO=999999</Set> <!--公共序号表pubseqrec中的字段BR_NO -->
<Set>ICBC_BUS_TYP_SEQ=$ICBC_BUS_TYP_SEQ</Set> <!--公共序号表pubseqrec中的字段BR_NO -->
<Exec func="PUB:GetPubSeqNoCircle" error="IGNORE">
<Arg name="SeqNam" value="ICBC_CORG_BUS_TYP" />
<Arg name="Len" value="3" />
<Arg name="SeqCnd" value="$ICBC_BUS_TYP_SEQ" />
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=获取序号失败</Set>
<Return/>
</If>
<Set>CORG_BUS_TYP=$SEL_VAL</Set>
<Set>CORG_BUS_TYP=ADD($CORG_BUS_TYP,0)</Set>
<!--打开游标 对系统内系统外的数据分别处理-->
<Exec func="PUB:OpenCursor" error="IGNORE">
<Arg name="SqlCmd" value="QRY_CAPTXNJNL_GRP"/>
<Arg name="CursorName" value="CURSOR_1"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=游标打开失败</Set>
<Return/>
</If>
<While>
<Exec func="PUB:FetchCursor" error="IGNORE"/>
<If condition="~RetCod=2">
<Exec func="PUB:CloseCursor">
<Arg name="CursorName" value="CURSOR_1"/>
</Exec>
<Break/>
</If>
<ElseIf condition="~RetCod!=0">
<Exec func="PUB:RollbackWork" />
<Exec func="PUB:CloseCursor">
<Arg name="CursorName" value="CURSOR_1"/>
</Exec>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=读取游标失败</Set>
<Return />
<Break/>
</ElseIf>
<If condition="IS_EQUAL_STRING($BATCH_TYPE,Y)"> <!--行内交易打包 不根据汇路-->
<Set>CHECK_TMPE=QryBatCnt</Set>
<Set>UPDATE_TMPE=UpdDskNo</Set>
<Set>BNK_FLG=Y</Set>
</If>
<Else><!--行外交易打包 根据汇路打包 拼接查询WHERE 条件-->
<Set>CHECK_TMPE=QryBatCnt1</Set>
<Set>UPDATE_TMPE=UpdDskNo1</Set>
<Set>BNK_FLG=N</Set>
<Set>ROUT_FLG=$BATCH_TYPE</Set>
</Else>
<While>
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="$CHECK_TMPE" />
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询数据库失败</Set>
<Exec func="PUB:RollbackWork" />
<Return />
</If>
<Set>BAT_CNT=$BAT_CNT</Set>
<!--无数据 -->
<If condition="INTCMP($BAT_CNT,2,0)">
<Break />
</If>
<Set>BAT_TYP=$FIL_TYP</Set> <!-- 交易模式 01 批扣 02 批付 99 联机 -->
<Set>SND_DT=SUBSTR($TACC_TM,1,8)</Set>
<Set>SND_TM=SUBSTR($TACC_TM,9,6)</Set>
<!--获取批次号 -->
<Quote name="GET_CUP_BAT_NO" />
<Set>CORG_DSK_NO=STRCAT(GETDATETIME(),$CORG_DSK_NO)</Set>
<Set>CORG_SND_DT=GETDATE()</Set>
<!--交易类型 -->
<Set>TTXN_CD=PAYPERCOL_BAT</Set>
<!--更新批次号-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="$UPDATE_TMPE"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新批次号失败</Set>
<Exec func="PUB:RollbackWork"/>
<Return/>
</If>
<!--查询金额笔数数-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QryBatAmt"/>
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询数据库失败</Set>
<Exec func="PUB:RollbackWork"/>
<Return/>
</If>
<Set>BAT_STS=0</Set>
<Set>BAT_VER_STS=1</Set>
<Set>BAT_ORN_AMT=$BAT_SUM</Set>
<Set>BAT_ORN_CNT=$BAT_CNT</Set>
<Set>CORG_MERC_ID=ICBC</Set> <!--单位编号 -->
<Set>Rsp_Cd=STRCAT( , )</Set>
<Set>Rsp_Msg=STRCAT( , )</Set>
<!--登记接出批量信息登记表 -->
<Exec func="PUB:InsertRecord" error="IGNORE">
<Arg name="TblNam" value="CAPBATINF" />
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=登记接出批量信息登记表失败</Set>
<Exec func="PUB:RollbackWork" />
<Return />
</If>
<ElseIf condition="~RetCod=1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=批次重复</Set>
<Exec func="PUB:RollbackWork" />
<Return />
</ElseIf>
</While>
</While>
<!--提交事务-->
<Exec func="PUB:CommitWork"/>
<!-- 交易成功 -->
<Set>RSP_CD=00</Set>
<Set>RSP_MSG=交易成功</Set>
</FlowCtrl>
</Transaction>
<!--发送工行批次交易 -->
<Transaction code="sendBatch_ICBC" log_switch='1' desc="发送工行批次交易">
<Quote name="SQL_RcvConfirm" />
<DynSentence name="QRYBATINF"> <!--查询批次信息-->
<Sentence>
SELECT *
FROM CAPBATINF
WHERE CORG_DSK_NO=?
AND ORD_DT=?
AND CORG_NO='ICBC'
AND PRO_JRL='1'
</Sentence>
<Fields>CORG_DSK_NO|ORD_DT|</Fields>
</DynSentence>
<!--更新该批次记录 -->
<DynSentence name="UpdJnlSts">
<Sentence>
UPDATE CAPTXNJNL
SET DSK_NAM_STS='1'
WHERE DSK_NAM=?
AND
ORD_DT=?
AND CORG_NO=?
AND CORG_DSK_NO = ?
AND TXN_MOD=?
AND
DSK_NAM_STS='0'
AND TXN_STS='U'
</Sentence>
<Fields>DSK_NAM|ORD_DT|CORG_NO|CORG_DSK_NO|TXN_MOD|</Fields>
</DynSentence>
<!--更新该批次失败记录 -->
<DynSentence name="UpdJnlStsF">
<Sentence>
UPDATE CAPTXNJNL
SET DSK_NAM_STS='4',
TXN_STS='F',
TTXN_ST='F',
RSP_CD = '80',
RSP_MSG = ? ,
TM_SMP=to_char(sysdate,'yyyymmddhh24miss')
WHERE DSK_NAM=?
AND
ORD_DT=?
AND CORG_NO=?
AND CORG_DSK_NO = ?
AND TXN_MOD=?
AND
DSK_NAM_STS='0'
AND TXN_STS='U'
</Sentence>
<Fields>RSP_MSG|DSK_NAM|ORD_DT|CORG_NO|CORG_DSK_NO|TXN_MOD|</Fields>
</DynSentence>
<!--更新批次状态 -->
<DynSentence name="UpdBatSts">
<Sentence>
UPDATE CAPBATINF
SET
HNULL(END_TM{1}=?),
HNULL(END_DT{2}=?),
BAT_STS=?,
RSP_CD = ?,
RSP_MSG = ?,
S_RSP_CD = ?,
S_RSP_MSG = ?,
CORG_JRN_NO=?,
BAT_FAL_CNT =?,
BAT_FAL_AMT=?
WHERE
ORD_DT=?
AND CORG_NO=?
AND CORG_DSK_NO=?
AND BAT_STS='0'
</Sentence>
<Fields>END_TM|END_DT|BAT_STS|RSP_CD|RSP_MSG|RSP_CD|RSP_MSG|CORG_JRN_NO|BAT_FAL_CNT|BAT_FAL_AMT|ORD_DT|CORG_NO|CORG_DSK_NO
</Fields>
</DynSentence>
<DynSentence name="Qry_Export"> <!--代付查询需要打包的记录 系统内交易 城市名称和银行名称上送空 修改 20220523 postscript 字段传值 DSK_NAM-->
<Sentence>
SELECT TAC_NO AS payer_account,TAC_NAM AS payer_cnname,
'' AS payer_enname,'' AS payee_enname,'' AS manager_card_no,
'' AS manager_card_name,'' AS erp_serial_no,'' AS busi_code,'' AS erp_check_no,'' AS ori_voucher_type,
'' AS ori_voucher_name,'' AS ori_voucher_no,'' AS related_ref_no,CAP_ORD_NO AS i_seq_no,AC_NO AS payee_account,
CUS_NAM AS payee_cnname,LBNK_NO AS payee_bank_no,'CNY' AS currency,
TXN_AMT * 100 AS amount,'工资' AS purpose,
CASE WHEN LENGTH(POSTSCRIPT) &lt;= 20 THEN POSTSCRIPT
WHEN NVL(INSTR(TRIM(POSTSCRIPT),' '),0) !=0
THEN SUBSTR(SUBSTR(TRIM(POSTSCRIPT),1,INSTR(TRIM(POSTSCRIPT),' ') - 1),1,20)
ELSE SUBSTR(TRIM(POSTSCRIPT),1,20) END summary,
DSK_NAM||substr(POSTSCRIPT,1,80) AS postscript,CAP_ORD_NO AS ref_no,case when BNK_FLG='Y' then '' ELSE CITY END payee_city,
case when BNK_FLG='Y' then '' when BNK_FLG='N' AND ROUT_FLG='SUPER' then '' ELSE LBNK_NAM END payee_bank_name,'' AS purpose_code,'' AS summary_en,
case when BNK_FLG='Y' then '2' when BNK_FLG='N' then decode(ROUT_FLG,'SUPER','3','LARGE','1','SMALL','2') end pay_type,
decode(BNK_FLG,'Y','1','N','2') AS io_flag
FROM CAPTXNJNL
WHERE DSK_NAM=?
AND CORG_NO = ?
AND CORG_DSK_NO = ?
AND ORD_DT=?
AND TXN_MOD=?
AND DSK_NAM_STS='0'
AND TXN_STS='U'
</Sentence>
<Fields>DSK_NAM|CORG_NO|CORG_DSK_NO|ORD_DT|TXN_MOD|</Fields>
</DynSentence>
<DynSentence name="InitPRO_JRL"> <!--初始化PRO_JRL-->
<Sentence>
UPDATE CAPBATINF SET PRO_JRL ='0'
WHERE ORD_DT=? AND CORG_NO=? AND CORG_DSK_NO=? AND PRO_JRL='1'
</Sentence>
<Fields>ORD_DT|CORG_NO|CORG_DSK_NO|</Fields>
</DynSentence>
<Function name="_before">
<Process>
<Exec func="PUB:DumpETF"/>
<Set>LockKey=STRCAT($CORG_NO,$CORG_DSK_NO)</Set>
<!-- 应用加锁,防止并发 -->
<Exec func="PUB:Lock">
<Arg name="RecKey" value="$LockKey" error="IGNORE"/>
<Arg name="TimOut" value="1800" />
<Arg name="AutoUnlock" value="no" />
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=加锁失败</Set>
<Exit/>
</If>
<Set>IS_LOCKED=TRUE</Set>
</Process>
</Function>
<Function name="_after">
<Process>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="InitPRO_JRL"/>
</Exec>
<If condition="IS_EQUAL_STRING($IS_LOCKED,TRUE)">
<!--解锁-->
<Exec func="PUB:UnLock">
<Arg name="RecKey" value="$LockKey" />
</Exec>
<Exec func="PUB:DumpETF"/>
</If>
<Set>SMS_FLAG=$SMS_FLAG</Set>
<If condition="IS_EQUAL_STRING($SMS_FLAG,1)">
<!--是否发送短信标志-->
<Set>EVENT.DSK_NO=$DSK_NAM</Set>
<Set>EVENT.BAT_NO=$CORG_DSK_NO</Set>
<Set>EVENT.ERR_MSG=工行通道批量代付发送接口调用异常</Set>
<Set>EVT_TYP=EVT_BATCH_SEND_FAILURE</Set>
<Exec func="PUB:InvokeService" error="IGNORE">
<Arg name="ServiceName" value="PUSH_EVENT" />
<Arg name='Mode' value='NOTIFY'/>
</Exec>
</If>
</Process>
</Function>
<FlowCtrl>
<!--清理数据 -->
<Delete>SERIAL_NO</Delete>
<Delete>RSP_CD</Delete>
<Delete>RSP_MSG</Delete>
<Delete>SUM</Delete>
<Delete>REC</Delete>
<Delete>RD</Delete>
<Exec func="PUB:DeleteGroup" error="IGNORE">
<Arg name="GroupName" value="REC"/>
</Exec>
<Exec func="PUB:DeleteGroup" error="IGNORE">
<Arg name="GroupName" value="RD"/>
</Exec>
<Exec func="PUB:DumpETF" />
<Quote name="Init_CAP01"/> <!--交易初始化-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRYBATINF"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询数据库出错</Set>
<Return/>
</If>
<!--查询合作机构检查-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QryBnkInf"/>
</Exec>
<If condition="~RetCod=2">
<Set>Rsp_Cd=31</Set>
<Set>Rsp_Msg=该合作机构不存在</Set>
<Return/>
</If>
<ElseIf condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询数据库失败</Set>
<Return/>
</ElseIf>
<If condition="INTCMP($ENB_FLG,4,1)">
<Set>Rsp_Cd=31</Set>
<Set>Rsp_Msg=该合作机构未启用</Set>
<Return/>
</If>
<Set>BatCnt=$BAT_ORN_CNT</Set>
<Set>BatAmt=$BAT_ORN_AMT</Set>
<!--读取参数配置 -->
<Set>TXN_DT=GETDATE()</Set>
<Set>TXN_TM=GETDATETIME(HHMISS)</Set>
<Quote name="Batch_Cfg_ICBC" />
<Set>MAX_CNT=$PARA.MAX_CNT</Set>
<Set>BAT_SEQ=0</Set>
<Set>TTXNSERVICE=PAYPER</Set> <!--交易代码 必输项 字符 10 PAYPER -->
<Set>TTXNSERVICE1=PAYPER_BAT</Set> <!--交易代码 必输项 10 PAYPER -->
<Set>QryExport=Qry_Export</Set> <!--代付需要发往工行的数据 -->
<Set>ICBC_CYC_CD=001</Set>
<!--业务数据初始化 -->
<Set>CORG_DSK_NO=$CORG_DSK_NO</Set>
<Set>CORG_MERC_ID=$CORG_MERC_ID</Set>
<Set>TACC_TM=$TACC_TM</Set>
<Set>BAT_TYP=$BAT_TYP</Set>
<Set>RSP_CD=STRCAT( , )</Set>
<Set>RSP_MSG=STRCAT( , )</Set>
<!--第三方数据拼接 -->
<Set>CIS=$GRP_CIS</Set> <!--集团CIS号 必输项 字符 60 客户注册时的归属编码(发卡机构代码) -->
<Set>Bank_Code=102</Set> <!--归属银行编号 必输项 长度为3 客户注册时的归属单位 -->
<!--新接口 第三方通讯报文头 代付提交-->
<Set>@MSG.className=com.icbc.api.request.MybankEnterpriseSalaryFinancialofficeMesfinstrsubmitRequestV1</Set>
<Set>@MSG.uri=mybank/enterprise/salary/financialoffice/mesfinstrsubmit/V1</Set>
<!--新接口第三方数据拼接 -->
<Set>trans_code=PAYPER</Set>
<Set>tran_date=$TXN_DT</Set>
<Set>tran_time=STRCAT($TXN_TM,000)</Set>
<Set>f_seq_no=$CORG_DSK_NO</Set>
<Set>language=zh_CN</Set>
<Set>settle_mode=2</Set>
<Set>busi_type=$CORG_BUS_TYP</Set> <!--待定 是按照大批还是小批进行合并记账 -->
<Set>total_amount=AMTPOWER($BatAmt,2)</Set> <!--总金额 分为单位 -->
<Set>instr_count=$BatCnt</Set> <!--总笔数 -->
<Set>summary_total=$summary_total</Set> <!-- 合并记账使用 具体取值 待定 -->
<Set>batch_sum_flag=$batch_sum_flag</Set> <!--批量合并记账使用-->
<If condition="INTCMP($BAT_ORN_CNT,2,$PARA.ZIP_CNT)">
<Set>zip_flag=0</Set>
</If>
<Else>
<Set>zip_flag=1</Set>
</Else>
<Exec func="PUB:QueryInGroup" error="IGNORE">
<Arg name="SqlCmd" value="$QryExport"/>
<Arg name="RecordName" value="REC"/>
<Arg name="limit" value="$MAX_CNT"/>
</Exec>
<If condition="~RetCod=-1">
<Return />
</If>
<Set>SMS_FLAG=1</Set><!-- 设置发送预警短信 -->
<Exec func="PUB:CallThirdComm" error="IGNORE">
<Arg name="HTxnCd" value="$TTXNSERVICE1"/> <!-- 交易发往银行 -->
<Arg name="ObjSvr" value="SCAICBC"/><!-- 服务名 -->
</Exec>
<Switch expression="~RetCod">
<Case value="1">
<!--第三方失败-->
<Set>BAT_STS=3</Set>
<Set>RSP_CD=80</Set>
<Set>RSP_MSG=批次已发送</Set>
<Break/>
</Case>
<Case value="-1">
<Set>BAT_STS=3</Set>
<Set>RSP_CD=80</Set>
<Set>RSP_MSG=批次已发送</Set>
<Break/>
</Case>
<Case value="3">
<Set>TRSP_CD=$TRSP_CD</Set>
<If condition="INTCMP($TRSP_CD,1,0)"> <!--错误码小于0时 默认为疑账处理-->
<Set>BAT_STS=3</Set>
<Set>RSP_CD=$TRSP_CD</Set>
<Set>RSP_MSG=SUBSTR($TRSP_MSG,1,100)</Set>
<Break/>
</If>
<Else>
<Set>BAT_STS=2</Set>
<Set>RSP_CD=$TRSP_CD</Set>
<Set>RSP_MSG=SUBSTR($TRSP_MSG,1,100)</Set>
<Set>BAT_FAL_CNT=$BAT_ORN_CNT</Set>
<Set>BAT_FAL_AMT=$BAT_ORN_AMT</Set>
<Set>END_TM=$TXN_TM</Set>
<Set>END_DT=$TXN_DT</Set>
<!--更新流水状态为处理-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdJnlStsF"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次状态失败</Set>
</If>
<Break/>
</Else>
</Case>
<Case value="0"> <!-- 成功 -->
<Set>SMS_FLAG=0</Set> <!-- 取消发送预警短信 -->
<!--更新流水状态为发送处理成功-->
<Set>BAT_STS=1</Set>
<Set>Rsp_Cd=$TRsp_Cd</Set>
<Set>TRsp_Msg=批次提交成功</Set>
<Set>Rsp_Msg=$TRsp_Msg</Set>
<!-- 更新流水状态为发送处理完成 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdJnlSts"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次流水处理状态失败</Set>
</If>
<Break/>
</Case>
<Default>
<!--第三方失败-->
<Set>BAT_STS=3</Set>
<Set>RSP_CD=80</Set>
<Set>RSP_MSG=批次已发送</Set>
</Default>
</Switch>
<Set>CORG_JRN_NO=$SERIAL_NO</Set>
<!-- 更新批次状态 -->
<Quote name="UpdSendBatSts" />
<!--提交事务-->
<Exec func="PUB:CommitWork"/>
<!--清理数据 -->
<Exec func="PUB:DeleteGroup" error="IGNORE">
<Arg name="GroupName" value="REC"/>
</Exec>
<Exec func="PUB:DeleteGroup" error="IGNORE">
<Arg name="GroupName" value="RD"/>
</Exec>
<Delete>SERIAL_NO</Delete>
<Delete>RSP_CD</Delete>
<Delete>RSP_MSG</Delete>
<Delete>SUM</Delete>
<Delete>REC</Delete>
<Delete>RD</Delete>
</FlowCtrl>
</Transaction>
<!--获取工行批次回盘文件 -->
<Transaction code="getBatch_ICBC" log_switch='1' desc="获取工行批次回盘文件">
<DynSentence name="UpdCUPS_DSK_NO">
<Sentence>
UPDATE CAPBATINF
SET BAT_STS=? ,
END_TM=? ,
END_DT=?,
BAT_SUC_AMT=?,
BAT_SUC_CNT=?,
BAT_FAL_AMT=?,
BAT_FAL_CNT=?,
RSP_CD = ?,
RSP_MSG = ?
WHERE ORD_DT=?
AND CORG_NO=?
AND CORG_DSK_NO=?
AND BAT_STS=?
</Sentence>
<Fields>BAT_STS|END_TM|END_DT|BAT_SUC_AMT|BAT_SUC_CNT|BAT_FAL_AMT|BAT_FAL_CNT|RSP_CD|RSP_MSG|OORD_DT|OCORG_NO|OCORG_DSK_NO|OBAT_STS|
</Fields>
</DynSentence>
<DynSentence name="UpdICBCTxnJnl"> <!--更新批扣流水 -->
<Sentence>
UPDATE CAPTXNJNL A
SET
(TTXN_ST,TXN_STS,DSK_NAM_STS,TACC_DT,TACC_TM,TRSP_CD,TRSP_MSG,RSP_MSG,CORG_JRN_NO,TM_SMP)
=
( SELECT TTXN_ST TTXN_ST,
TTXN_ST TXN_STS,
'4',
?,
?,
TRSP_CD,
TRSP_MSG,
TRSP_MSG,
I_SEQ_NO CORG_JRN_NO,
to_char(sysdate,'yyyymmddhh24miss') TM_SMP
FROM CAPICBCPERDTMP B
WHERE B.QRY_I_SEQ_NO = A.CAP_ORD_NO
)
WHERE
A.CORG_NO = 'ICBC'
AND A.CORG_DSK_NO = ?
AND (A.TTXN_ST = 'U' OR
A.TTXN_ST = 'P')
AND ORD_DT=?
</Sentence>
<Fields>TACC_DT|TACC_TM|OCORG_DSK_NO|OORD_DT|</Fields>
</DynSentence>
<DynSentence name="UpdDskInf">
<Sentence>
UPDATE CAPDSKINF
SET SUC_CNT=TO_NUMBER(NVL(TRIM(SUC_CNT),0))
+
TO_NUMBER(NVL(TRIM(?),0)),
SUC_AMT=TO_NUMBER(NVL(TRIM(SUC_AMT),0)) +
TO_NUMBER(NVL(TRIM(?),0)),
FAL_CNT=TO_NUMBER(NVL(TRIM(FAL_CNT),0)) +
TO_NUMBER(NVL(TRIM(?),0)),
FAL_AMT=TO_NUMBER(NVL(TRIM(FAL_AMT),0)) +
TO_NUMBER(NVL(TRIM(?),0))
WHERE DSK_NAM=?
</Sentence>
<Fields>BAT_SUC_CNT|BAT_SUC_AMT|BAT_FAL_CNT|BAT_FAL_AMT|ODSK_NAM
</Fields>
</DynSentence>
<DynSentence name="QryExport"> <!--查询请求回盘所需的记录 -->
<Sentence>
SELECT ROWNUM,t.*
FROM CAPTXNJNL t
WHERE DSK_NAM='%s'
AND
CORG_NO = '%s'
AND CORG_DSK_NO = '%s'
AND ORD_DT='%s'
AND
DSK_NAM_STS='1'
AND TXN_STS='U'
</Sentence>
<Fields>ODSK_NAM|OCORG_NO|OCORG_DSK_NO|OORD_DT|</Fields>
</DynSentence>
<DynSentence name="TotFai"> <!--统计失败笔数 -->
<Sentence>
SELECT COUNT(*) BAT_FAL_CNT,NVL(SUM(TXN_AMT),0) BAT_FAL_AMT
FROM CAPTXNJNL
WHERE ORD_DT = ? AND CORG_NO = ? AND CORG_DSK_NO = ?
AND TTXN_ST =
'F'
</Sentence>
<Fields>OORD_DT|CORG_NO|OCORG_DSK_NO</Fields>
</DynSentence>
<DynSentence name="TotSuc"> <!--统计成功笔数 -->
<Sentence>
SELECT COUNT(*) BAT_SUC_CNT,NVL(SUM(TXN_AMT),0) BAT_SUC_AMT
FROM CAPTXNJNL
WHERE ORD_DT = ? AND CORG_NO = ? AND CORG_DSK_NO = ?
AND TTXN_ST =
'S'
</Sentence>
<Fields>OORD_DT|CORG_NO|OCORG_DSK_NO</Fields>
</DynSentence>
<DynSentence name="QryCAPICBCPERD"> <!-- 查询临时表批次记录状态为P的记录数 -->
<Sentence>
SELECT COUNT(*) AS UNDO_CNT FROM CAPICBCPERD WHERE Result
in
('0','1','2','3','4','5','9','10','95')
</Sentence>
</DynSentence>
<DynSentence name="QRY_ICBC_TXNSTS"> <!--统计本批次数据处理结果中状态未明数据,具体状态待补充完善-->
<Sentence>
SELECT COUNT(*) UNDO_CNT FROM CAPTXNJNL
WHERE CORG_NO = 'ICBC' AND CORG_DSK_NO = ? AND ORD_DT = ? AND TTXN_ST IN ('P','U')
</Sentence>
<Fields>OCORG_DSK_NO|OORD_DT|</Fields>
</DynSentence>
<!--更新该批次失败记录 -->
<DynSentence name="UpdJnlStsF">
<Sentence>
UPDATE CAPTXNJNL
SET DSK_NAM_STS='4',
TXN_STS='F',
TTXN_ST='F',
RSP_CD = '80',
RSP_MSG = ?,
TRSP_CD = ?,
TRSP_MSG = ?,
TM_SMP=to_char(sysdate,'yyyymmddhh24miss')
WHERE DSK_NAM=?
AND
ORD_DT=?
AND CORG_NO=?
AND CORG_DSK_NO = ?
AND
DSK_NAM_STS='0'
AND TXN_STS='U'
</Sentence>
<Fields>RSP_MSG|TRSP_CD|TRSP_MSG|ODSK_NAM|OORD_DT|OCORG_NO|OCORG_DSK_NO|</Fields>
</DynSentence>
<DynSentence name="DelCAPICBCPERD"> <!-- 导入临时表数据之前删除临时表数据 -->
<Sentence>
DELETE FROM CAPICBCPERDTMP
</Sentence>
</DynSentence>
<DynSentence name="InitPRO_JRL"> <!--初始化PRO_JRL-->
<Sentence>
UPDATE CAPBATINF SET PRO_JRL ='0'
WHERE ORD_DT=? AND CORG_NO=? AND CORG_DSK_NO=? AND PRO_JRL='1'
</Sentence>
<Fields>OORD_DT|OCORG_NO|OCORG_DSK_NO|</Fields>
</DynSentence>
<Function name="_before">
<Process>
<Exec func="PUB:DumpETF"/>
<Set>LockKey=STRCAT($OCORG_NO,$OCORG_DSK_NO)</Set>
<!-- 应用加锁,防止并发 -->
<Exec func="PUB:Lock">
<Arg name="RecKey" value="$LockKey" error="IGNORE"/>
<Arg name="TimOut" value="1800" />
<Arg name="AutoUnlock" value="no" />
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=加锁失败</Set>
<Exit/>
</If>
<Set>IS_LOCKED=TRUE</Set>
</Process>
</Function>
<Function name="_after">
<Process>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="InitPRO_JRL"/>
</Exec>
<If condition="IS_EQUAL_STRING($IS_LOCKED,TRUE)">
<!--解锁-->
<Exec func="PUB:UnLock">
<Arg name="RecKey" value="$LockKey" />
</Exec>
<Exec func="PUB:DumpETF"/>
</If>
<Set>SMS_FLAG=$SMS_FLAG</Set>
<If condition="IS_EQUAL_STRING($SMS_FLAG,1)">
<!--是否发送短信标志-->
<Set>EVENT.DSK_NO=$ODSK_NM</Set>
<Set>EVENT.BAT_NO=$OCORG_DSK_NO</Set>
<Set>EVENT.ERR_MSG=工行通道回盘查询接口调用异常</Set>
<Set>EVT_TYP=EVT_BATCH_BACK_FAILURE</Set>
<Exec func="PUB:InvokeService" error="IGNORE">
<Arg name="ServiceName" value="PUSH_EVENT" />
<Arg name='Mode' value='NOTIFY'/>
</Exec>
</If>
</Process>
</Function>
<FlowCtrl>
<!--清理数据 -->
<Delete>RSP_CD</Delete>
<Delete>RSP_MSG</Delete>
<Delete>SUM</Delete>
<Delete>REC</Delete>
<Delete>rd</Delete>
<Exec func="PUB:DeleteGroup" error="IGNORE">
<Arg name="GroupName" value="rd"/>
</Exec>
<Exec func="PUB:DumpETF" />
<Set>ORD_TYP=$OBAT_TYP</Set>
<Quote name="Batch_Cfg_ICBC" />
<Set>TXN_DT=GETDATE()</Set>
<Set>TXN_TM=GETDATETIME(HHMISS)</Set> <!--交易时间 -->
<Set>TACC_DT=$TXN_DT</Set>
<Set>TACC_TM=$TXN_TM</Set>
<Quote name="GET_JRN_NO" /> <!--取交易流水号 -->
<Set>ORN_JRN_NO=$OCORG_DSK_NO</Set> <!--原批次号 -->
<Set>END_TM=GETDATETIME(HHMISS)</Set>
<Set>END_DT=GETDATE()</Set>
<Set>BAT_SUC_AMT=0</Set>
<Set>BAT_SUC_CNT=0</Set>
<Set>BAT_FAL_CNT=0</Set>
<Set>BAT_FAL_AMT=0</Set>
<Set>RSP_CD=STRCAT( , )</Set>
<Set>RSP_MSG=STRCAT( , )</Set>
<Set>CORG_NO=$OCORG_NO</Set>
<!--第三方数据拼接-->
<Set>TTXNSERVICE=QPAYPER</Set>
<Exec func="PUB:GetUniqueNo">
<Arg name="Name" value="fSeqno" />
<Arg name="SeqNam" value="jrn_no_sequence" />
<Arg name="Len" value="10" />
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=平台取流水号失败</Set>
<Return />
</If>
<Set>fSeqno=STRCAT(Q,SUBSTR($TXN_DT,3,6),$fSeqno)</Set>
<!--新接口第三方数据拼接 -->
<Set>trans_code=QPAYPER</Set>
<Set>tran_date=$TXN_DT</Set>
<Set>tran_time=STRCAT($TXN_TM,000)</Set>
<Set>f_seq_no=$fSeqno</Set>
<Set>language=zh_CN</Set>
<Set>qry_f_seq_no=$ORN_JRN_NO</Set>
<Set>qry_serial_no=$qry_serial_no</Set>
<!--新接口 第三方通讯报文头 代付提交-->
<Set>@MSG.className=com.icbc.api.request.MybankEnterpriseSalaryFinancialofficeMesfinstrqryRequestV1</Set>
<Set>@MSG.uri=mybank/enterprise/salary/financialoffice/mesfinstrqry/V1</Set>
<Set>SMS_FLAG=1</Set> <!--设置短信告警-->
<Exec func="PUB:CallThirdComm" error="IGNORE">
<Arg name="HTxnCd" value="$TTXNSERVICE" />
<Arg name="ObjSvr" value="SCAICBC" /> <!-- 交易发往银行 -->
</Exec>
<Switch expression="~RetCod">
<Case value="1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询第三方失败</Set>
<Break/>
</Case>
<Case value="-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询第三方失败</Set>
<Break/>
</Case>
<Case value="3">
<Set>RSP_CD=$TRSP_CD</Set>
<Set>RSP_MSG=$TRSP_MSG</Set>
<If condition="IS_EQUAL_STRING($TRSP_CD,BIB008,D0055)"> <!--交易请求已受理,处理中-->
<Set>SMS_FLAG=0</Set> <!--取消短信告警-->
<Set>BAT_STS=3</Set>
<!--更新批次信息-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdCUPS_DSK_NO"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次为发送处理状态失败</Set>
<Break/>
</If>
</If>
<ElseIf condition="IS_EQUAL_STRING($TRSP_CD,10660116)"> <!--无符合条件的数据 根据发送时间判断-->
<Set>TIME_TEMP= SUBSTR(CALCTIME(GETDATETIME(MMDDHHMISS),-,m,30),3,8)</Set>
<If condition="INTCMP($OSND_TIME,2,$TIME_TEMP)"> <!--时间间隔大于等于30分钟时认为该批次整批提交失败 否则继续查询-->
<Set>RSP_MSG=STRCAT(发往工行批次,$OCORG_DSK_NO,整批失败)</Set>
<Set>BAT_STS=2</Set>
<!--更新流水状态为处理-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdJnlStsF"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次状态失败</Set>
<Break/>
</If>
<Set>BAT_FAL_AMT=$OBAT_ORN_AMT</Set>
<Set>BAT_FAL_CNT=$OBAT_ORN_CNT</Set>
<!--更新批次信息-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdCUPS_DSK_NO"/>
</Exec>
<If condition="~RetCod != 0">
<Exec func="PUB:RollbackWork" />
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次为发送处理状态失败</Set>
<Break/>
</If>
</If>
<Else>
<Set>SMS_FLAG=0</Set> <!--取消短信告警-->
<Set>BAT_STS=3</Set>
<!--更新批次信息-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdCUPS_DSK_NO"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次为发送处理状态失败</Set>
<Break/>
</If>
</Else>
</ElseIf>
<ElseIf condition="INTCMP($TRSP_CD,1,0)"> <!--错误码为负数,代表系统异常,存在可疑账需要重新获取交易明细-->
<Set>SMS_FLAG=0</Set>
<Set>BAT_STS=3</Set>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdCUPS_DSK_NO"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次为发送处理状态失败</Set>
<Break/>
</If>
</ElseIf>
<Else> <!--其他错误-->
<Set>BAT_STS=5</Set>
<!--更新批次信息-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdCUPS_DSK_NO"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次为发送处理状态失败</Set>
<Break/>
</If>
</Else>
<Break/>
</Case>
<Case value="0">
<!--导入临时表数据之前删除临时表数据 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="DelCAPICBCPERD" />
</Exec>
<Set>SMS_FLAG=0</Set> <!--取消短信告警-->
<Exec func="PUB:InsertRecord"><!--登记工行临时表-->
<Arg name="TblNam" value="CAPICBCPERDTMP" />
<Arg name="GrpNam" value="rd" />
<Arg name="FldLst" value="qry_f_seq_no|" />
</Exec>
<If condition="~RetCod!=0">
<Return />
</If>
<!--更新流水状态 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdICBCTxnJnl" />
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新流水交易状态失败</Set>
<Return />
</If>
<!--查询临时表批次记录状态为P的记录数 -->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_ICBC_TXNSTS" />
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询临时表批次记录状态为P的记录数失败</Set>
<Return />
</If>
<Set>UNDO_CNT=$UNDO_CNT</Set>
<!--统计成功,失败笔数 -->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="TotSuc" />
</Exec>
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="TotFai" />
</Exec>
<Set>BAT_SUC_AMT=$BAT_SUC_AMT</Set>
<Set>BAT_SUC_CNT=$BAT_SUC_CNT</Set>
<Set>BAT_FAL_AMT=$BAT_FAL_AMT</Set>
<Set>BAT_FAL_CNT=$BAT_FAL_CNT</Set>
<If condition="$UNDO_CNT != 0">
<Set>BAT_STS=3</Set>
<Set>Rsp_Cd=00</Set>
<Set>Rsp_Msg=交易处理中...</Set>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdCUPS_DSK_NO"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次状态失败</Set>
<Break/>
</If>
<Return />
</If>
<!--更新文件信息 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdDskInf" />
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=累加更新接入批量信息表成功失败总笔数及总金额失败</Set>
<Break />
</If>
<Set>Rsp_Cd=00</Set>
<Set>Rsp_Msg=批次处理完成</Set>
<Set>BAT_STS=4</Set> <!-- 接收处理完成 -->
<!--更新批次信息 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdCUPS_DSK_NO" />
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次为发送处理状态失败</Set>
<Break />
</If>
<Exec func="PUB:CommitWork" /> <!--提交事务 -->
<Set>TXN_MOD_FLG=$OBAT_TYP</Set>
<Set>CAP_TYP=CAP_PAY_BAT</Set>
<Set>RUL_TYP=HRO</Set><!-- 转码规则类型 -->
<Set>CAP_TYP=$CAP_TYP</Set><!-- 交易类型 -->
<Set>CORG_NO=$OCORG_NO</Set><!-- 合作机构号 -->
<Set>CSW_TYP=0</Set><!-- 匹配类型 -->
<Set>ORD_DT=$OORD_DT</Set>
<Set>CORG_DSK_NO=$OCORG_DSK_NO</Set>
<Call package="CSW" function="CAP_BAT_CSW">
<Input>RUL_TYP|CAP_TYP|CORG_NO|CSW_TYP|ORD_DT|CORG_DSK_NO|</Input>
<Output></Output>
</Call>
</Case>
<Default>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=系统错误</Set>
<Break/>
</Default>
</Switch>
<!--提交事务-->
<Exec func="PUB:CommitWork"/>
<!--清理数据 -->
<Delete>TRSP_CD</Delete>
<Delete>RSP_CD</Delete>
<Delete>RSP_MSG</Delete>
<Delete>SUM</Delete>
<Delete>REC</Delete>
<Delete>RD</Delete>
<Exec func="PUB:DeleteGroup" error="IGNORE">
<Arg name="GroupName" value="RD"/>
</Exec>
</FlowCtrl>
</Transaction>
<!--工行心跳检查 -->
<Transaction code="HEARTBEAT_ICBC" log_switch='0' desc="心跳检查">
<FlowCtrl>
<Set>TXN_DT=GETDATE()</Set>
<Set>TXN_TM=GETDATETIME(HHMISS)</Set> <!--交易时间 -->
<Exec func="PUB:GetUniqueNo">
<Arg name="Name" value="fSeqno" />
<Arg name="SeqNam" value="jrn_no_sequence" />
<Arg name="Len" value="10" />
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=平台取流水号失败</Set>
<Return />
</If>
<Set>fSeqno=STRCAT(Q,SUBSTR($TXN_DT,3,6),$fSeqno)</Set>
<!--新接口第三方数据拼接 -->
<Set>trans_code=QPAYPER</Set>
<Set>tran_date=$TXN_DT</Set>
<Set>tran_time=STRCAT($TXN_TM,000)</Set>
<Set>f_seq_no=STRCAT(Q,SUBSTR($TXN_DT,3,6),$fSeqno)</Set>
<Set>language=zh_CN</Set>
<Set>qry_f_seq_no=1</Set> <!--202103080000000007 测试可成功-->
<Set>qry_serial_no=$qry_serial_no</Set>
<!--新接口 第三方通讯报文头 代付提交-->
<Set>@MSG.className=com.icbc.api.request.MybankEnterpriseSalaryFinancialofficeMesfinstrqryRequestV1</Set>
<Set>@MSG.uri=mybank/enterprise/salary/financialoffice/mesfinstrqry/V1</Set>
<Exec func="PUB:CallThirdComm" error="IGNORE">
<Arg name="HTxnCd" value="QPAYPER" />
<Arg name="ObjSvr" value="SCAICBC" /> <!-- 交易发往银行 -->
</Exec>
<Switch expression="~RetCod">
<Case value="0">
<Set>Rsp_Cd=00</Set>
<Set>Rsp_Msg=心跳检查成功</Set>
<Break/>
</Case>
<Case value="3">
<Set>Rsp_Cd=00</Set>
<Set>Rsp_Msg=心跳检查成功</Set>
<Break/>
</Case>
<Default> <!-- 告警 需要调用短信预警函数 -->
<Set>EVENT.CORG_NO=ICBC</Set>
<Set>EVENT.ERR_MSG=工行通道通讯异常</Set>
<Set>EVT_TYP=EVT_CHANNEL_COMMU_FAILURE</Set>
<Exec func="PUB:InvokeService" error="IGNORE">
<Arg name="ServiceName" value="PUSH_EVENT" />
<Arg name='Mode' value='NOTIFY'/>
</Exec>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=系统错误短信告警</Set>
<Break/>
</Default>
</Switch>
</FlowCtrl>
</Transaction>
</Tran>