119 lines
4.5 KiB
XML
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 > 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 < ?
|
|
</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) < ?
|
|
</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 < $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 > $TIM_LAX">
|
|
<If condition="$TIM_DIF < $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>
|