    001package org.opengion.hayabusa.queue;
    002
    003import org.opengion.fukurou.db.ConnectionFactory;
    004import org.opengion.fukurou.db.DBFunctionName;
    005import org.opengion.fukurou.db.DBUtil;
    006import org.opengion.fukurou.db.Transaction;
    007import org.opengion.fukurou.db.TransactionReal;
    008import org.opengion.fukurou.util.ApplicationInfo;
    009import org.opengion.fukurou.util.StringUtil;
    010import org.opengion.hayabusa.common.HybsSystem;
    011
    012/**
    013 * キュー処理用のDBアクセスクラス
    014 * キューの受信と送信処理で、
    015 * データベースにアクセスして処理を行います。
    016 *
    017 * 実際のMQ,SQSとの通信そのものはfukurouで行います。
    018 *
    019 * @og.group メッセージ連携
    020 *
    021 * @og.rev 5.10.15.2 (2019/09/20) 新規作成
    022 *
    023 * @version 5
    024 * @author oota
    025 * @since JDK7
    026 *
    027 */
    028public class DBAccessQueue {
    029        private static final String DYSET_YMD  = "yyyyMMddHHmmss";
    030        private static  ApplicationInfo appInfo = null;
    031        private static final String DBID = HybsSystem.sys( "RESOURCE_DBID" );
    032        private final String SYSTEM_ID;
    033        private final String USRSET;
    034        private final String PGUPD;
    035        private final String DMN_NAME;
    036
    037        // 処理中
    038        public static final String  FGKAN_PROCESS = "2";
    039        // 完了
    040        public static final String  FGKAN_END = "3";
    041        // エラー
    042        public static final String  FGKAN_ERROR = "4";
    043
    044        /** コネクションにアプリケーション情報を追記するかどうか指定 */
    045        // パラメータ編集必要
    046        private static final boolean USE_DB_APPLICATION_INFO  = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
    047
    048        /**
    049         * コンストラクター
    050         * 初期処理を行います。
    051         *
    052         * @og.rev 5.10.16.1 (2019/10/11) fukurou利用に変更
    053         *
    054         * @param systemid システムID
    055         * @param usrset ユーザID
    056         * @param prpupd プログラムID
    057         * @param dmnName デーモン名
    058         */
    059        public DBAccessQueue(final String systemid, final String usrset, final String prpupd, final String dmnName) {
    060                SYSTEM_ID = systemid;
    061//              USRSET = StringUtils.defaultString(usrset, "UNNONE") ;
    062//              PGUPD  = StringUtils.defaultString( prpupd, "UNNONE" ) ;
    063//              DMN_NAME = StringUtils.defaultString( dmnName, "UNNONE" ) ;
    064                USRSET = StringUtil.nval( usrset, "UNKNOWN" );
    065                PGUPD  = StringUtil.nval( prpupd, "UNKNOWN" );
    066                DMN_NAME = StringUtil.nval( dmnName, "UNKNOWN" );
    067
    068
    069                if (USE_DB_APPLICATION_INFO) {
    070                        appInfo = new ApplicationInfo();
    071
    072                        // ユーザーID,IPアドレス,ホスト名
    073                        appInfo.setClientInfo(USRSET, HybsSystem.HOST_ADRS, HybsSystem.HOST_NAME);
    074                        // 画面ID,操作,プログラムID
    075                        appInfo.setModuleInfo("DBAccessQueue", null, DMN_NAME);
    076                }
    077                else {
    078                        appInfo = null;
    079                }
    080        }
    081
    082        /**
    083         * GE65検索
    084         * GE65の処理対象リストを取得します。
    085         *
    086         * @return 処理対象リスト
    087         */
    088        public String[][] selectGE65() {
    089                String sql = "SELECT A.YKNO, A.QUEUEID, A.MESSAGE, A.SFDUPID, B.QUESYU, B.JMSURL FROM GE66 A"
    090                                + " INNER JOIN GE65 B ON A.SYSTEM_ID = B.SYSTEM_ID AND A.QUEUEID = B.QUEUEID AND B.FGJ = '1'"
    091                                + " WHERE A.SYSTEM_ID = ? AND A.FGKAN = '1' AND A.FGJ = '1'";
    092
    093                String[][] vals = DBUtil.dbExecute(sql, new String[] {SYSTEM_ID}, appInfo, DBID);
    094                return vals;
    095        }
    096
    097        /**
    098         * エラー状態に更新
    099         * 完了フラグをエラー状態に更新して、
    100         * エラー情報を格納します。
    101         *
    102         * @param ykno 要求番号
    103         * @param errMsg エラーメッセージ
    104         */
    105        public void updateGE66Error(String ykno, String errMsg) {
    106                String updSql = "UPDATE GE66 SET FGKAN = ?, ERRMSG = ?"
    107                                + "WHERE SYSTEM_ID = ? AND FGJ = '1' AND YKNO = ?";
    108                DBUtil.dbExecute(updSql, new String[] {
    109                                FGKAN_ERROR, errMsg, SYSTEM_ID, ykno
    110                }, appInfo, DBID);
    111        }
    112
    113        /**
    114         * 完了フラグの更新
    115         * 完了フラグを指定された値に更新します。
    116         *
    117         * @param ykno 要求番号
    118         * @param fgkan 完了フラグ
    119         */
    120        public void updateGE66(String ykno, String fgkan) {
    121                final String dyset = HybsSystem.getDate(DYSET_YMD);
    122                String updSql = "UPDATE GE66 SET FGKAN = ?, DYUPD = ?, USRUPD = ?, PGUPD = ?"
    123                                + "WHERE SYSTEM_ID = ? AND FGJ = '1' AND YKNO = ?";
    124                DBUtil.dbExecute(updSql, new String[] {
    125                                fgkan, dyset, USRSET, PGUPD, SYSTEM_ID, ykno}, appInfo, DBID);
    126        }
    127        /**
    128         * 受信管理データ取得
    129         * 受信管理テーブルから、キューIDとbizlogic名を取得します。
    130         *
    131         * @return 受信管理リスト
    132         */
    133        public String[][] setlectGE67() {
    134                // 対象 キュー名(グループ名)とbizlogic名の取得処理
    135                final String sql = "SELECT QUEUEID, BIZLOGICID FROM GE67"
    136                                + " WHERE SYSTEM_ID = ? AND FGJ = '1'";
    137                final String[][] vals = DBUtil.dbExecute(sql, new String[] {SYSTEM_ID}, appInfo, DBID);
    138                return vals;
    139        }
    140
    141        /**
    142         * 処理番号生成
    143         * GE68_SEQUENCEからシーケンス番号を生成します。
    144         *
    145         * @return 処理番号
    146         */
    147        public String generateSyoriNo() {
    148                String syoriNo = "";
    149
    150                Transaction tran = new TransactionReal( appInfo );
    151
    152                // 処理番号生成
    153                try {
    154                        DBFunctionName dbName = DBFunctionName.getDBName( ConnectionFactory.getDBName( DBID ) );
    155                        syoriNo = Integer.toString(dbName.getSequence("GE68S01", tran, DBID));
    156                }finally {
    157                        tran.close();
    158                }
    159
    160                return syoriNo;
    161        }
    162
    163        /**
    164         * GE68(キュー受信結果テーブル)更新
    165         * キュー受信結果テーブルを指定された完了状態に更新します。
    166         *
    167         * @param syno 処理番号
    168         * @param fgkan 完了フラグ
    169         */
    170        public void updateGE68(final String syno,  final String fgkan) {
    171                final String dyset = HybsSystem.getDate(DYSET_YMD);
    172
    173                final String sql = "UPDATE GE68 SET FGKAN = ?, DYUPD = ?, USRUPD = ?, PGUPD = ?"
    174                                + "WHERE FGJ = '1'"
    175                                + " AND SYSTEM_ID = ?"
    176                                + " AND SYNO = ?";
    177
    178                String[] data = new String[] {fgkan, dyset, USRSET, PGUPD, SYSTEM_ID, syno};
    179
    180                // sql実行
    181                DBUtil.dbExecute(sql, data, appInfo, DBID);
    182        }
    183
    184        /**
    185         *  GE68(キュー受信結果テーブル)登録
    186         * キュー受信結果テーブルに受信データを登録します。
    187         *
    188         * @param queueNm キュー名
    189         * @param syno 処理NO
    190         * @param bizlogicId bizLogicId
    191         * @param messageText メッセージ
    192         */
    193        public void insertGE68(final String queueNm, final String syno, final String bizlogicId
    194                        ,final String messageText) {
    195                final String dyset = HybsSystem.getDate(DYSET_YMD);
    196                final String sql = "INSERT INTO GE68(SYSTEM_ID, QUEUEID, SYNO, BIZLOGICID, MESSAGE, FGKAN, FGJ,"
    197                                + "DYSET, DYUPD, USRSET, USRUPD, PGSET,  PGUPD)"
    198                                + " VALUES(?,?,?,?,?,?,'1'"
    199                                + ",?,?,?,?,?,?)";
    200
    201                final String[] data = new String[] {
    202                                SYSTEM_ID, queueNm, syno, bizlogicId, messageText, DBAccessQueue.FGKAN_PROCESS
    203                                ,dyset, dyset, USRSET,  USRSET, PGUPD, PGUPD
    204                };
    205
    206                // sql実行
    207                DBUtil.dbExecute(sql,  data, appInfo, DBID);
    208        }
    209
    210        /**
    211         * GE68(キュー受信結果テーブル)エラー更新
    212         * キュー受信結果テーブルをエラー状態に更新します。
    213         *
    214         * @param syoriNo 処理NO
    215         * @param errMsg エラーメッセージ
    216         */
    217        public void updateGE68Error(String syoriNo, final String errMsg) {
    218                // エラーテーブルに登録
    219                final String ymd = HybsSystem.getDate(DYSET_YMD);
    220                final String sql = "UPDATE GE68"
    221                                + " SET ERRMSG = ?, FGKAN = ?"
    222                                + " ,DYUPD = ?, USRUPD = ?, PGUPD = ?"
    223                                + " WHERE SYSTEM_ID = ? AND FGJ = '1' AND SYNO = ? ";
    224
    225                final String[] data = new String[] { errMsg // エラーメッセージ
    226                                ,DBAccessQueue.FGKAN_ERROR
    227                                ,ymd
    228                                ,USRSET
    229                                ,PGUPD
    230                                ,SYSTEM_ID
    231                                , syoriNo
    232                };
    233
    234                // sql実行
    235                DBUtil.dbExecute(sql, data, appInfo, DBID);
    236        }
    237}