Files
ctg-app-cap/base/etc/OFRTRDO1/TransactionInvoker_CTL.XML
2021-01-12 23:30:48 +08:00

119 lines
4.5 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<Root>
<!--事务控制轮询处理-->
<!--======================-->
<!--输入:MMAXFLX最大流量 -->
<!--输出:无 -->
<!--======================-->
<Transaction code="TransactionInvoker" >
<Function name="_after">
<Process>
<If condition="~NEED_CLOSE_CURSOR=1">
<Exec func="PUB:CloseCursor"/>
</If>
<If condition="IS_SUCC($GWA.MSG_CD)">
<Exec func="PUB:CommitWork"/>
</If>
<Else>
<Exec func="PUB:RollbackWork"/>
</Else>
</Process>
</Function>
<DynSentence name="upd1"><!--发起超过最大次数停止补偿-->
<Sentence>
UPDATE %s SET STS = '4', TM_SMP = ? WHERE REG_ID=? and NOD_ID=? and STS = '2' AND FAL_TMS &gt; MAX_TMS
</Sentence>
<Fields>TBL_NM|TM_SMP|REG_ID|NOD_ID|</Fields>
</DynSentence>
<DynSentence name="upd2"><!--修改超时未提交的记录状态为需要补偿-->
<Sentence>
UPDATE %s SET STS = '1', TM_SMP = ? WHERE REG_ID=? and NOD_ID=? and STS = '0' AND OPR_CLK + TIM_OUT &lt; ?
</Sentence>
<Fields>TBL_NM|TM_SMP|REG_ID|NOD_ID|CUR_CLK|</Fields>
</DynSentence>
<DynSentence name="upd3"><!--修改发起补偿服务超时的记录为需要补偿-->
<Sentence>
UPDATE %s SET STS = '1', FAL_TMS = FAL_TMS + 1, TM_SMP = ? WHERE REG_ID=? and NOD_ID=? and STS = '2' AND (OPR_CLK + TM_OUT) &lt; ?
</Sentence>
<Fields>TBL_NM|TM_SMP|REG_ID|NOD_ID|CUR_CLK|</Fields>
</DynSentence>
<DynSentence name="upd4"><!--修改状态为正在发起-->
<Sentence>
UPDATE %s SET STS = '2', OPR_CLK = ?, TM_SMP = ?
WHERE REG_ID=? and NOD_ID=? and TRAN_ID = ?
</Sentence>
<Fields>TBL_NM|CUR_CLK|TM_SMP|REG_ID|NOD_ID|TRAN_ID|</Fields>
</DynSentence>
<DynSentence name="QryJnl"><!--打开游标sql-->
<Sentence>
SELECT TRAN_ID,LOG_NO,EXP_SER,OBJ_SVR,TM_OUT,OPR_CLK,FAL_TMS,ITV,DATA FROM %s WHERE REG_ID=? and NOD_ID=? and STS = '1' ORDER BY OPR_CLK FOR UPDATE
</Sentence>
<Fields>TBL_NM|REG_ID|NOD_ID|</Fields>
</DynSentence>
<FlowCtrl>
<Set>GWA.MSG_CD=SCM99999</Set>
<Set>MAX_FLX=100</Set>
<!-- Set>TBL_NM=@SYS.ics.plt.rdojnl_tablename</Set -->
<Set>REG_ID=@SYS.ics.plt.regionid</Set>
<Set>NOD_ID=@SYS.ics.plt.nodeid</Set>
<Set>TM_SMP=GETDATETIME()</Set>
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="upd1"/>
</Exec>
<Set>CUR_CLK=GETSECOND()</Set>
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="upd2"/>
</Exec>
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="upd3"/>
</Exec>
<Exec func="PUB:CommitWork"/>
<Set>MSG_TYP=N</Set>
<Set>RSP_CD=000000</Set>
<Exec func="PUB:OpenCursor" >
<Arg name="SqlCmd" value="QryJnl"/>
</Exec>
<Set>~NEED_CLOSE_CURSOR=1</Set>
<Set>count=0</Set>
<While condition="$count &lt; $MAX_FLX"> <!--进行流量控制-->
<Set>count=ADD($count,1)</Set>
<Exec func="PUB:FetchCursor" error="IGNORE"/>
<If condition="~RetCod=2">
<Break/>
</If>
<ElseIf condition="~RetCod=-1">
<Return/>
</ElseIf>
<Set>CUR_CLK=GETSECOND()</Set> <!--当前时间-->
<Set>TIM_DIF=SUB($CUR_CLK,$OPR_CLK)</Set> <!--时间间隔-->
<Set>TIM_LAX=MUL($Itv,SHORTPOWER($FAL_TMS,2))</Set><!--时间散列-->
<If condition="$TIM_DIF &gt; $TIM_LAX">
<If condition="$TIM_DIF &lt; $TM_OUT">
<Continue/>
</If>
</If>
<Else>
<Continue/>
</Else>
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="upd4"/>
</Exec>
<Exec func="PUB:XML2ETF">
<Arg name="Data" value="$data"/>
</Exec>
<Set>data=</Set>
<Set>RTXN_CD=$TXN_CD</Set>
<Exec func="PUB:InvokeService">
<Arg name="ServiceName" value="$EXP_SER" />
<Arg name="ObjSvr" value="$OBJ_SVR" />
<Arg name="LogID" value="S.RDOSVR" />
<Arg name="Mode" value="ASYNC" />
<Arg name="LogLevel" value="auto" />
</Exec>
<Set>GWA.MSG_CD=SCM00000</Set>
</While>
</FlowCtrl>
</Transaction>
</Root>