diff --git a/cap/etc/batch/BAT_GET_TIMER_CTL.XML b/cap/etc/batch/BAT_GET_TIMER_CTL.XML
index 551b170..a6f5b85 100644
--- a/cap/etc/batch/BAT_GET_TIMER_CTL.XML
+++ b/cap/etc/batch/BAT_GET_TIMER_CTL.XML
@@ -6,22 +6,36 @@
- SELECT SND_TIME OSND_TIME, TXN_CNL,DSK_NAM ODSK_NAM,ORD_DT OORD_DT,CORG_MERC_ID OCORG_MERC_ID,CORG_NO OCORG_NO,CORG_DSK_NO OCORG_DSK_NO
- ,AC_DT OAC_DT,SND_DT OSND_DT,SND_TM OSND_TM,BAT_STS OBAT_STS,BAT_ORN_AMT OBAT_ORN_AMT,BAT_ORN_CNT OBAT_ORN_CNT,
- BAT_TYP OBAT_TYP,CORG_FIL_NAM OCORG_FIL_NAM,SND_DT,SND_TM,MERC_ID OMERC_ID,TCORG_DSK_NO,'批量代发' RMK ,GET_TIME,CORG_JRN_NO
- FROM CAPBATINF
- where Corg_Dsk_No in (select Corg_Dsk_No from ( SELECT A.Corg_Dsk_No
- FROM CAPBATINF A,CAPDSKINF B,CAPCUSINF C
- WHERE (A.BAT_STS='1' OR A.BAT_STS='3')
- AND A.ORD_DT > ?
- AND A.CORG_NO =?
- AND A.PRO_JRL = '0'
- AND (SND_TIME<=?)
- AND (A.GET_TIME <=? OR A.GET_TIME IS NULL)
- AND A.DSK_NAM = B.DSK_NAM AND B.Customer_Id = C.Customer_Id
- order by rank desc,nvl(a.GET_TIME,0) asc,A.SND_TIME asc )
- where ROWNUM = '1' )
- FOR UPDATE skip locked
+ SELECT SND_TIME OSND_TIME, TXN_CNL, DSK_NAM ODSK_NAM, ORD_DT OORD_DT, CORG_MERC_ID OCORG_MERC_ID, CORG_NO OCORG_NO, CORG_DSK_NO OCORG_DSK_NO,
+ AC_DT OAC_DT, SND_DT, SND_TM, BAT_STS OBAT_STS, BAT_ORN_AMT OBAT_ORN_AMT, BAT_ORN_CNT OBAT_ORN_CNT, BAT_TYP OBAT_TYP,
+ CORG_FIL_NAM OCORG_FIL_NAM, MERC_ID OMERC_ID, TCORG_DSK_NO, '批量代发' RMK, GET_TIME, CORG_JRN_NO
+ FROM CAPBATINF A
+ WHERE A.CORG_DSK_NO = (
+ SELECT CORG_DSK_NO
+ FROM (
+ SELECT CORG_DSK_NO, RAND_VAL
+ FROM (
+ SELECT A.CORG_DSK_NO, C.rank, A.GET_TIME, A.SND_TIME, DBMS_RANDOM.VALUE AS RAND_VAL
+ FROM CAPBATINF A
+ INNER JOIN CAPDSKINF B ON A.DSK_NAM = B.DSK_NAM
+ INNER JOIN CAPCUSINF C ON B.Customer_Id = C.Customer_Id
+ WHERE A.BAT_STS IN ('1', '3')
+ AND A.ORD_DT > ?
+ AND A.CORG_NO = ?
+ AND A.PRO_JRL = '0'
+ AND A.SND_TIME <=?
+ AND (A.GET_TIME <=? OR A.GET_TIME IS NULL)
+ ORDER BY
+ C.rank DESC,
+ NVL(A.GET_TIME, 0) ASC,
+ A.SND_TIME ASC
+ ) TOP_20
+ WHERE ROWNUM <= 20
+ ORDER BY RAND_VAL
+ ) RANDOM_ORDER
+ WHERE ROWNUM = 1
+ )
+ FOR UPDATE SKIP LOCKED
TOD_DT|CORG_NO|C_SND_TIME|C_GET_TIME|
diff --git a/cap/etc/batch/BAT_SEND_TIMER_CTL.XML b/cap/etc/batch/BAT_SEND_TIMER_CTL.XML
index 38e7a2b..af7e036 100644
--- a/cap/etc/batch/BAT_SEND_TIMER_CTL.XML
+++ b/cap/etc/batch/BAT_SEND_TIMER_CTL.XML
@@ -6,18 +6,35 @@
- select * from CAPBATINF
- where Corg_Dsk_No in (select Corg_Dsk_No from ( SELECT A.Corg_Dsk_No
- FROM CAPBATINF A,CAPDSKINF B,CAPCUSINF C
- WHERE A.BAT_STS = '0'
- AND A.ORD_DT > ?
- AND A.PRO_JRL = '0'
- AND (A.SND_TIME<=? OR A.SND_TIME IS NULL)
- AND A.CORG_NO = ?
- AND A.DSK_NAM = B.DSK_NAM AND B.Customer_Id = C.Customer_Id
- order by rank desc,corg_dsk_no asc)
- where ROWNUM = '1' )
- FOR UPDATE skip locked
+ SELECT *
+ FROM CAPBATINF A
+ WHERE A.CORG_DSK_NO = (
+ SELECT CORG_DSK_NO
+ FROM (
+ SELECT CORG_DSK_NO, RAND_VAL
+ FROM (
+ SELECT
+ A.CORG_DSK_NO,
+ C.rank,
+ DBMS_RANDOM.VALUE AS RAND_VAL
+ FROM CAPBATINF A
+ INNER JOIN CAPDSKINF B ON A.DSK_NAM = B.DSK_NAM
+ INNER JOIN CAPCUSINF C ON B.Customer_Id = C.Customer_Id
+ WHERE A.BAT_STS = '0'
+ AND A.ORD_DT > ?
+ AND A.PRO_JRL = '0'
+ AND (A.SND_TIME <= ? OR A.SND_TIME IS NULL)
+ AND A.CORG_NO = ?
+ ORDER BY
+ C.rank DESC,
+ A.CORG_DSK_NO ASC
+ ) TOP_20
+ WHERE ROWNUM <= 20
+ ORDER BY RAND_VAL
+ ) RANDOM_ORDER
+ WHERE ROWNUM = 1
+ )
+ FOR UPDATE SKIP LOCKED
TOD_DT|C_SND_TIME|CORG_NO|