Files
2021-01-12 22:04:24 +08:00

464 lines
17 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version='1.0' encoding='UTF-8'?>
<Inq>
<Macro name="PRIMARY_KEY_SQL">
<DynSentence name="QRY_ECPTSMMT_ByKey"> <!-- 用队列的PRIMARY_KEY查找上行表 -->
<Sentence>
SELECT MSG_ID,OBJ_SVR,TX_CD,TM_OUT,OPR_CLK,FAL_TMS,ITV,INP_DAT FROM ECPTSMMT WHERE MSG_ID='%s' AND STS=0
</Sentence>
<Fields>$PRIMARY_KEY|</Fields>
</DynSentence>
<DynSentence name="upd4"> <!--更新上行表为成功STS=7-->
<Sentence>
UPDATE ECPTSMMT SET STS = '7',SUC_TM='%s',SUC_CLK='%s'
WHERE MSG_ID='%s'
</Sentence>
<Fields>SUC_TM|SUC_CLK|MSG_ID|</Fields>
</DynSentence>
</Macro>
<!--ETF 树化-->
<Macro name="InputDatETF"> <!-- 增加数据队列方式的ETF 树化 -->
<Quote name="PRIMARY_KEY_SQL"/>
<Exec func="PUB:ReadRecord" error="IGNORE"> <!-- 读一条记录 -->
<Arg name="SqlCmd" value="QRY_ECPTSMMT_ByKey"/>
</Exec>
<If condition="~RetCod=0">
<Exec func="PUB:ExecSql" error="IGNORE"> <!-- 读取成功,更新上行表,STS=7 -->
<Arg name="SqlCmd" value="upd4"/>
</Exec>
</If>
<ElseIf condition="~RetCod=2"> <!-- 未找到PRIMARY_KEY相关的上行短信,该如何处理???? -->
<Set>RSP_MSG=STRCAT($RSP_MSG,--未找到PRIMARY_KEY相关的上行短信)</Set>
<Return/>
</ElseIf>
<Else> <!--查找数据库失败,再加到队列里-->
<Exec func="SMS:OfferQueue">
<Arg name="Data" value="STRCAT($OBJ_SVR,**,$TX_CD,**,$PRIMARY_KEY)"/>
<Arg name="QueNam" value="SMS_UP_QUEUE"/>
<Arg name="Scope" value="ROOT"/>
</Exec>
<Return/>
</Else>
<Exec func="PUB:XML2ETF" error="IGNORE">
<Arg name="Data" value="$INP_DAT"/>
</Exec>
<If condition="~RetCod!=0">
<Set>RSP_CD=259400</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--XML2ETF错误)</Set>
<Quote name="RollbackSmuWork"/>
<Return/>
</If>
<Delete>INP_DAT</Delete>
</Macro>
<!--开户 by yangyi-->
<Macro name="CreateNewAccount">
<Set>@MSG.SRN=FRT_REGION</Set>
<Exec func="PUB:CallThirdService" error="IGNORE">
<Arg name="HTxnCd" value="101000"/>
<Arg name="ObjSvr" value="OFRTMPS1"/>
<Arg name="In" value="CNL_TYP|MBL_NO|CNL_FLG|AGR_VER|CRD_TYP"/>
<Arg name="Out" value="REL_FLG|PAY_PSW|SVR_PSW|USR_CNM|RSP_CD"/>
</Exec>
<Set>~RetCod=0</Set> <!-- 压力测试 -->
<Delete>@MSG.SRN</Delete>
<Set>MSG_CD=$RSP_CD</Set>
<If condition="~RetCod=0"> <!--交易成功-->
<Set>RSP_CD=000000</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--IG开户成功)</Set>
</If>
<ElseIf condition="~RetCod=1"> <!--交易超时-->
<Set>SRC_NO=#SVR_NO</Set>
<Set>RSP_CD=259200</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--IG开户超时)</Set>
<Quote name="RollbackSmuWork"/>
<Return/>
</ElseIf>
<ElseIf condition="~RetCod=3"> <!--交易失败-->
<Set>SRC_NO=#SVR_NO</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--IG开户失败)</Set>
<!--如果下发失败,相关信息会在此更新,以便查找-->
<If condition="$CMD_CD=A">
<Quote name="UpdateEcpttxnCurCmd"/>
</If>
<Return/>
</ElseIf>
<Else> <!--交易异常-->
<Set>SRC_NO=#SVR_NO</Set>
<Set>RSP_CD=259201</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--IG开户异常)</Set>
<Quote name="RollbackSmuWork"/>
<Return/>
</Else>
</Macro>
<!--充值卡短信充值by yangyi-->
<Macro name="PhoneCardRecharge">
<Set>@MSG.SRN=FRT_REGION</Set>
<Exec func="PUB:CallThirdService" error="IGNORE">
<Arg name="HTxnCd" value="111070"/>
<Arg name="ObjSvr" value="OFRTMPS3"/>
<Arg name="In" value="CNL_TYP|MBL_NO|CRD_NO|CRD_TXN_TYP|JRN_NO"/>
<Arg name="Out" value="JRN_NO|LOG_NO|UDRW_BAL|RSP_CD"/> <!--会话流水号,交易流水,充值卡账户余额-->
</Exec>
<Set>~RetCod=0</Set> <!-- 压力测试 -->
<Delete>@MSG.SRN</Delete>
<Set>MSG_CD=$RSP_CD</Set>
<If condition="~RetCod=0"> <!--充值成功-->
<Set>RSP_CD=000000</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--IG充值卡充值成功)</Set>
</If>
<ElseIf condition="~RetCod=1"> <!--交易超时-->
<Set>SRC_NO=$SP_NO</Set>
<Set>RSP_CD=259200</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--IG充值卡充值超时)</Set>
<Quote name="RollbackSmuWork"/>
<Return/>
</ElseIf>
<ElseIf condition="~RetCod=3"> <!--交易失败,需判断卡密错误,卡密错误不同的SP_NO返回消息不同-->
<If condition="$SP_NO=STRCAT(#SVR_NO,52)">
<Set>SRC_NO=$SP_NO</Set>
<If condition="NOT(AND(STRCMP($RSP_CD,000003),STRCMP($RSP_CD,000004)))">
<Set>RSP_CD=250200</Set>
</If>
<Set>RSP_MSG=STRCAT($RSP_MSG,--IG充值卡充值失败)</Set>
<If condition="$SP_NO=STRCAT(#SVR_NO,52)">
<Quote name="UpdateEcpttxnCurCmd"/>
</If>
</If>
<Else>
<Set>SRC_NO=#SVR_NO</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--IG充值卡充值失败)</Set>
</Else>
<Return/>
</ElseIf>
<Else> <!--交易异常-->
<Set>SRC_NO=$SP_NO</Set>
<Set>RSP_CD=259201</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--IG充值卡充值异常)</Set>
<Quote name="RollbackSmuWork"/>
<Return/>
</Else>
</Macro>
<!--缴话费 by yangyi-->
<!--
BAL_TY1现金901,充值卡902
-->
<Macro name="PayPhoneFare">
<Set>@MSG.SRN=FRT_REGION</Set>
<Exec func="PUB:CallThirdService" error="IGNORE">
<Arg name="HTxnCd" value="113070"/>
<Arg name="ObjSvr" value="OFRTMPS2"/>
<Arg name="In" value="CNL_TYP|MBL_NO|TX_AMT1|PAY_PSW|BAL_TY1|JRN_NO|WCLO_FLG|SLF_FLG"/>
<Arg name="Out" value="JRN_NO|LOG_NO|UDRW_BAL|RSP_CD"/>
</Exec>
<Set>~RetCod=0</Set> <!-- 压力测试 -->
<Delete>@MSG.SRN</Delete>
<Set>MSG_CD=$RSP_CD</Set>
<If condition="~RetCod=0"> <!--缴费成功-->
<Set>SRC_NO=$SP_NO</Set>
<Set>SMS_CD=EC018</Set>
<Set>REP_FLD=STRCAT($AMT,|)</Set>
<Set>RSP_CD=000000</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--IG操作成功)</Set>
<Set>APP_MO=EC</Set>
<!-- 直接下发短信 -->
<Quote name="SendShortMessage"/>
</If>
<ElseIf condition="~RetCod=1"> <!--交易超时-->
<Set>SRC_NO=#SVR_NO</Set>
<Set>RSP_CD=259200</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--IG缴话费超时)</Set>
<Quote name="RollbackSmuWork"/>
<Return/>
</ElseIf>
<ElseIf condition="~RetCod=3"> <!--交易失败-->
<Set>SRC_NO=STRCAT(#SVR_NO,50)</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--IG缴话费失败)</Set>
<Quote name="UpdateEcpttxnCurCmd"/>
<Return/>
</ElseIf>
<Else> <!--交易异常-->
<Set>SRC_NO=#SVR_NO</Set>
<Set>RSP_CD=259201</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--IG缴话费异常)</Set>
<Quote name="RollbackSmuWork"/>
<Return/>
</Else>
</Macro>
<!--登记交易缓存 by yangyi-->
<!--字段默认值说明 前面的为字段默认值,如果不是默认值,请在调用宏前设置
CMD_STS 0-无效,1-有效(重要字段)
TXN_TYP LS(LocalService),调用前置的设置为TS(ThirdService)
REL_FLG N-非实名,Y-实名
CMD_TYP 0-低级指令,1-高级指令
-->
<Macro name="InsertEcpttxn">
<Set>SESS_ID=$MSG_ID</Set>
<Set>SRC_NO=$SP_NO</Set>
<Set>CMD_TM=$FTX_TM</Set>
<Set>REL_FLG=N</Set> <!--Y 强实名 N 弱实名-->
<If condition="ISNULL($CMD_MSG)">
<Set>CMD_MSG=NULL</Set>
</If>
<If condition="ISNULL($REL_FLG)">
<Set>CMD_MSG=N</Set>
</If>
<Exec func="PUB:InsertRecord" error="IGNORE">
<Arg name="TblNam" value="ECPTTXN"/>
</Exec>
<If condition="~RetCod=0">
</If>
<Else>
<Set>SRC_NO=#SVR_NO</Set>
<Set>RSP_CD=259000</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--登记缓存,$CMD_MSG,失败)</Set>
<Quote name="RollbackSmuWork"/>
<Return/>
</Else>
</Macro>
<!--查询交易缓存宏定义by yangyi-->
<!--必需事先设置的参数-->
<!--
LST_CMD_SEQ 查找上条记录的顺序号
TMP_SRC_NO 没有找到合法记录时返回消息的SP号
TMP_SMS_CD 买有找到记录时返回消息编号
-->
<Macro name="QueryEcpttxnLastCmdSql">
<DynSentence name="QRY_ECPTTXN_LCMD">
<Sentence>
SELECT *
FROM
(SELECT CMD_TM ORG_CMD_TM,EXP_TM ORG_EXP_TM,CMD_MSG ORG_CMD_MSG,CMD_SEQ ORG_CMD_SEQ,CMD_RSP_MSG ORG_CMD_RSP_MSG
FROM ECPTTXN
WHERE MBL_NO='%s'
AND TX_CD='%s'
AND CMD_SEQ='%s'
AND CMD_STS='1'
AND CMD_TM >= to_char(sysdate-(1/(24*60))*EXP_TM,'yyyymmddhh24miss')
ORDER BY CMD_TM DESC)
WHERE ROWNUM &lt;= 1
</Sentence>
<Fields>MBL_NO|TX_CD|LST_CMD_SEQ|</Fields>
</DynSentence>
</Macro>
<Macro name="QueryEcpttxnLastCmd">
<Quote name="QueryEcpttxnLastCmdSql"/>
<Exec func="PUB:ReadRecord" error="IGNORE"> <!--查找前交易缓存KT-->
<Arg name="SqlCmd" value="QRY_ECPTTXN_LCMD"/>
</Exec>
<If condition="~RetCod=0">
</If>
<ElseIf condition="~RetCod=2">
<Set>SRC_NO=$TMP_SRC_NO</Set>
<Set>SMS_CD=$TMP_SMS_CD</Set>
<Set>RSP_CD=000000</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--未找到缓存记录)</Set>
<!-- 直接下发短信 -->
<Quote name="SendShortMessage"/>
<If condition="$SP_NO=STRCAT(#SVR_NO,5)">
<Set>NOTFOUND=1</Set>
</If>
<ElseIf condition="$SP_NO=STRCAT(#SVR_NO,97)">
<Set>NOTFOUND=1</Set>
</ElseIf>
<Else>
<Return/>
</Else>
</ElseIf>
<Else>
<!--查找数据库失败-->
<Set>SRC_NO=#SVR_NO</Set>
<Set>RSP_CD=259001</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--查找缓存记录失败)</Set>
<Quote name="RollbackSmuWork"/>
<Return/>
</Else>
</Macro>
<!--更新本条交易缓存by yangyi-->
<Macro name="UpdateEcpttxnCurCmdSql">
<DynSentence name="UPD_ECPTTXN_CCMD">
<Sentence>
UPDATE ECPTTXN SET CMD_STS='%s',RSP_TM='%s',CMD_RSP_MSG='%s',MSG_CD='%s' WHERE MBL_NO='%s' and TX_CD='%s' and CMD_TM = '%s'
</Sentence>
<Fields>CMD_STS|RSP_TM|RSP_MSG|MSG_CD|MBL_NO|TX_CD|FTX_TM|</Fields>
</DynSentence>
</Macro>
<Macro name="UpdateEcpttxnCurCmd">
<Quote name="UpdateEcpttxnCurCmdSql"/>
<Set>RSP_TM=GETDATETIME()</Set>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_ECPTTXN_CCMD"/>
</Exec>
<If condition="~RetCod=0">
<Set>RSP_MSG=STRCAT($RSP_MSG,--更新本条缓存记录成功)</Set>
</If>
<Else>
<Set>SRC_NO=#SVR_NO</Set>
<Set>RSP_CD=259003</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--更新本条缓存记录失败)</Set>
<Return/>
</Else>
</Macro>
<!--更新全部交易缓存by yangyi-->
<Macro name="UpdateEcpttxnAllCmdSql">
<DynSentence name="UPD_ECPTTXN_ACMD">
<Sentence>
UPDATE ECPTTXN SET CMD_STS='0', MSG_CD='%s' WHERE MBL_NO='%s' and TX_CD='%s' and CMD_STS='1' and SUBSTR(CMD_TM,5,10) &gt;= '%s'
</Sentence>
<Fields>MSG_CD|MBL_NO|TX_CD|BEG_CMD_TM|</Fields>
</DynSentence>
</Macro>
<Macro name="UpdateEcpttxnAllCmd">
<Quote name="UpdateEcpttxnAllCmdSql"/>
<Set>BEG_CMD_TM=CALCTIME(SUBSTR($FTX_TM,5,10),-,m,$ORG_EXP_TM)</Set>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_ECPTTXN_ACMD"/>
</Exec>
<If condition="~RetCod=0">
<Set>RSP_MSG=STRCAT($RSP_MSG,--更新全部交易缓存成功)</Set>
</If>
<Else>
<Set>SRC_NO=#SVR_NO</Set>
<Set>RSP_CD=259003</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--更新全部交易缓存失败)</Set>
<Return/>
</Else>
</Macro>
<!--交易处理失败,事务回滚 by yangyi-->
<Macro name="RollbackSmuWork">
<Exec func="PUB:InvokeService" error="IGNORE">
<Arg name="ObjSvr" value="S.SMUSVR" />
<Arg name="ServiceName" value="RollbackSmuWork"/>
<Arg name="LogID" value="S.SMUSVR" />
</Exec>
<If condition="~RetCod=-1"> <!--系统错误,提醒用户重操作-->
<Set>RSP_CD=259300</Set>
<Set>RSP_MSG=STRCAT($RSP_MAG,--事物回滚失败)</Set>
</If>
</Macro>
<!--发送短信 by yangyi-->
<!--一般在调用该宏之前设置如下参数:
SRC_NO,SMS_CD,REP_FLD(如果需要),RSP_CD
如果前置直接给短信内容,请设置SMS_CNL为IG
-->
<Macro name="SendShortMessage">
<Call package="SMS" function="SendShortMessage">
<Input>ACT_DT|OMSG_ID|MBL_NO|APP_MO|SMS_CNL|DAT_SMS_FLG|SM_TYP|SMS_CD|REP_FLD|SRC_NO|MSG_DAT|OBJ_SEVR|TX_COD|</Input>
<Output>RSP_CD|RSP_MSG1|</Output>
</Call>
<Set>RSP_MSG=STRCAT($RSP_MSG,$RSP_MSG1)</Set>
</Macro>
<!--ECAP交易缓存动态语句宏定义-->
<Macro name="ECPTxnSQL">
<!--按交易日期查询交易缓存-->
<DynSentence name="QRY_ECPTTXN_BYDATE">
<Sentence>
SELECT A.* FROM (SELECT CMD_SEQ AS ORG_CMD_SEQ,CMD_MSG AS ORG_CMD_MSG,CMD_RSP_MSG AS ORG_CMD_RSP_MSG,CMD_TM AS ORG_CMD_TM,EXP_TM AS ORG_EXP_TM FROM ECPTTXN WHERE TX_CD='%s' AND MBL_NO='%s' AND CMD_STS='1' AND SUBSTR(CMD_TM,1,8)='%s' ORDER BY CMD_TM DESC)A WHERE ROWNUM=1
</Sentence>
<Fields>TX_CD|MBL_NO|TX_DT|</Fields>
</DynSentence>
</Macro>
<!--按日期查询交易缓存-->
<Macro name="QueryTxnByDate">
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_ECPTTXN_BYDATE"/>
</Exec>
<If condition="~RetCod=-1"> <!--数据库异常-->
<Set>RSP_CD=259201</Set>
<Set>RSP_MSG=查询数据库异常</Set>
<Return/>
</If>
</Macro>
<!--调前置子系统查询订单历史-->
<Macro name="QueryTransHistory">
<Set>@MSG.SRN=FRT_REGION</Set>
<Set>CNL_FLG=ECAP</Set>
<Exec func="PUB:CallThirdService" error="IGNORE">
<Arg name="HTxnCd" value="115001"/>
<Arg name="ObjSvr" value="OFRTMPS4"/>
<Arg name="In" value="CNL_TYP|MBL_NO|BEG_DT|"/>
<Arg name="Out" value="TXN_GRP|RSP_CD|"/>
</Exec>
<Set>~RetCod=0</Set> <!-- 压力测试 -->
<Delete>@MSG.SRN</Delete>
<Set>MSG_CD=$RSP_CD</Set>
<If condition="~RetCod=1"> <!-- 交易超时 -->
<Set>RSP_CD=259200</Set>
<Return/>
</If>
<ElseIf condition="~RetCod=3"> <!-- 交易失败 -->
<Set>RSP_MSG=STRCAT(前置子系统返回码:,$RSP_CD)</Set>
<Return/>
</ElseIf>
<ElseIf condition="~RetCod=0"> <!-- 交易成功 -->
</ElseIf>
<Else> <!--交易异常-->
<Set>RSP_CD=259201</Set>
<Return/>
</Else>
</Macro>
<!--查询历史下发历史短信-->
<Macro name="SendHisSMS">
<!--处理返回的条数,至多返回三条-->
<Set>SRC_NO=STRCAT(#SVR_NO,97)</Set>
<Set>SMS_CNL=IG</Set>
<Set>APP_MO=IG</Set>
<!--交易笔数-->
<Set>TXN_CNT=STRGETCOUNT($TXN_GRP,CHAR(35))</Set>
<If condition="$TXN_CNT=0"> <!--没有记录-->
<!-- 直接下发短信 -->
<Set>SMS_CNL=SMS</Set>
<Set>APP_MO=EC</Set>
<Set>SRC_NO=$SP_NO</Set>
<Set>SMS_CD=EC969</Set>
<Set>RSP_CD=000000</Set>
<Set>RSP_MSG=STRCAT($RSP_MSG,--未找到交易历史)</Set>
<Quote name="SendShortMessage"/>
</If>
<Set>NUM=1</Set>
<While condition="INTCMP($NUM,2,$TXN_CNT)">
<Set>HIS_LST=STRCAT($BK_LST,|,HIS,$NUM)</Set>
<Set>NUM=ADD($NUM,1)</Set>
</While>
<Set>SPT_CNT=SPLITCMD($TXN_GRP,1,CHAR(35),$HIS_LST)</Set>
<Exec func="PUB:DumpMsg"/>
<Set>PRE_DAT=STRCAT(共查询到,$TXN_CNT,笔订单记录!)</Set>
<Set>NUM=1</Set>
<While condition="INTCMP($NUM,2,$TXN_CNT)">
<Exec func="PUB:GetValue" error="IGNORE">
<Arg name="SourName" value="STRCAT(HIS,$NUM)" />
<Arg name="DestName" value="MSG_DAT" />
</Exec>
<If condition="$NUM=1">
<Set>MSG_DAT=STRCAT($PRE_DAT,第,$NUM,笔:,$MSG_DAT)</Set>
</If>
<Else>
<Set>MSG_DAT=STRCAT(第,$NUM,笔:,$MSG_DAT)</Set>
</Else>
<Quote name="SendShortMessage"/>
<Set>NUM=ADD($NUM,1)</Set>
</While>
</Macro>
</Inq>