    001/*
    002 * Copyright (c) 2009 The openGion Project.
    003 *
    004 * Licensed under the Apache License, Version 2.0 (the "License");
    005 * you may not use this file except in compliance with the License.
    006 * You may obtain a copy of the License at
    007 *
    008 *     http://www.apache.org/licenses/LICENSE-2.0
    009 *
    010 * Unless required by applicable law or agreed to in writing, software
    011 * distributed under the License is distributed on an "AS IS" BASIS,
    012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
    013 * either express or implied. See the License for the specific language
    014 * governing permissions and limitations under the License.
    015 */
    016package org.opengion.fukurou.transfer;
    017
    018import org.opengion.fukurou.db.DBUtil;
    019import org.opengion.fukurou.db.Transaction;
    020import org.opengion.fukurou.util.StringUtil;
    021import org.opengion.fukurou.util.HybsDateUtil;
    022
    023/**
    024 * 伝送要求に対して旧伝送DB(CB01)に登録を行います。
    025 *
    026 * 旧伝送DB登録時のデータコード、送り先、テキスト種別は、伝送定義マスタの実行対象で指定します。
    027 * 具体的には以下の形式で定義します。
    028 *   (データコード) (送り先) (テキスト種別) [(レコード長)] 例):"3 D9 B119 [400]"
    029 * 4番目のパラメーターであるレコード長は任意です。レコード長が指定されない場合、
    030 * デフォルト値として 400 が定義されます。
    031 *
    032 * CB01の各項目のセット基準は以下の通りです。
    033 *
    034 *                                              ヘッダーデータ         明細データ
    035 *  ---------------------------------------------------
    036 *  HCDJ(状況)                    1                                       5
    037 *  HCDD(カードコード)        [実行対象]                  [実行対象]
    038 *  HTO(送り先)                    [実行対象]                  [実行対象]
    039 *  HSYU(テキスト種別)        [実行対象]                  [実行対象]
    040 *  HLDAY(登録日)          システム日付          システム日付
    041 *  HLTIME(登録時間)        システム日付          システム日付
    042 *  HDPDAY(削除日)         システム日付+14日      システム日付+14日
    043 *  HFROM(送り元)          [システムリソース]      [システムリソース]      ※TRANSFER_HOST_CODEの値
    044 *  HTCNO(通番NO)         CB010001.NEXTVAL        CB010001.NEXTVAL
    045 *  HTC(通番)                     CB010002.NEXTVAL        CB010002.NEXTVAL
    046 *  HTEXT(データ)          送り先+登録件数                データ
    047 *  DYUNYOU(運用日)                CJ03.DYUNYOU            CJ03.DYUNYOU
    048 *  RECL(レコード長) [実行対象]                  [実行対象]                  ※初期値400
    049 *
    050 *  この_CB01を利用する場合CB01テーブル以外に次のテーブル及びシーケンスが必要です
    051 *  テーブル：CB02
    052 *  シーケンス：CB010001,CB010002
    053 *
    054 * @og.rev 5.4.4.1 コメント修正
    055 * @og.rev 5.5.7.3 CB01登録時のHPASS,HNAME変更
    056 * @og.group 伝送システム
    057 *
    058 * @version  5.0
    059 * @author   Hiroki.Nakamura
    060 * @since    JDK1.6
    061 */
    062public class TransferExec_CB01 implements TransferExec {
    063
    064        // 旧伝送DB(CB01)登録
    065        // 5.5.7.3 (2012/10/12) HPASS,HNAMEがnullでは駄目なのでスペース
    066        private static final String CB01_INSERT =
    067                "INSERT INTO CB01 ("
    068                + "HCDJ,HCDD,HTO,HSYU,HLDAY,HLTIME,HDPDAY,HTEXT1,HTEXT2"
    069                + ",HPASS,HFROM,HNAME,HTCNO,HTC,HTEXT,DYUNYOU,RECL"
    070                + ") VALUES ("
    071                + "?,?,?,?,?,?,?,null,null"
    072                + ",'        ',?,'                    ',?,?,?,?,?"
    073                + ")";
    074
    075        // 通番NO取得
    076        private static final String HTCNO_GET = "SELECT CB010001.NEXTVAL FROM DUAL";
    077
    078        // 通番取得
    079        private static final String HTC_GET = "SELECT CB010002.NEXTVAL FROM DUAL";
    080
    081        // 運用日取得
    082        private static final String DYUNYOU_GET = "SELECT DYUNYOU FROM CJ03";
    083
    084        // 削除日付基準日数
    085        private static final int HDAY = 14;
    086
    087        // レコード長の初期値
    088        private static final String DEFAULT_RECL = "400";
    089
    090        /**
    091         * CB01に登録します。
    092         *
    093         * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用するように修正します。
    094         *
    095         * @param vals 伝送データ(配列)
    096         * @param config 伝送設定オブジェクト
    097         * @param tran トランザクションオブジェクト
    098         */
    099        @Override
    100        public void execute( final String[] vals, final TransferConfig config, final Transaction tran ) {
    101                if( vals == null || vals.length == 0 ) { return; }
    102
    103                String execObj = config.getExecObj();
    104                String[] obj = StringUtil.csv2Array( execObj, ' ' );
    105                if( obj.length < 3 ) {
    106                        String errMsg = "実行対象は、(データコード) (送り先) (テキスト種別) の形式で指定して下さい。"
    107                                                        + "EXECOBJ=[" + execObj + "]";
    108                        throw new RuntimeException( errMsg );
    109                }
    110                String hcdd = obj[0];
    111                String hto = obj[1];
    112                String hsyu = obj[2];
    113                if( hcdd == null || hcdd.length() == 0
    114                 || hto  == null || hto.length()  == 0
    115                 || hsyu == null || hsyu.length() == 0 ) {
    116                        String errMsg = "実行対象は、(データコード) (送り先) (テキスト種別) は必須です。"
    117                                                        + "EXECOBJ=[" + execObj + "]";
    118                        throw new RuntimeException( errMsg );
    119                }
    120                String recl = ( obj.length > 3 ) ? obj[3] : DEFAULT_RECL;
    121
    122                String execDbid = config.getExecDbid();
    123
    124                String htcno = getHtcno( tran, execDbid );
    125                String hlday  = HybsDateUtil.getDate( "yyyyMMdd" );                     // 5.5.7.2 (2012/10/09) HybsDateUtil を利用
    126                String hltime = HybsDateUtil.getDate( "HHmm" );                         // 5.5.7.2 (2012/10/09) HybsDateUtil を利用
    127                String hdpday = HybsDateUtil.getDatePlus( hlday, HDAY );        // 5.5.7.2 (2012/10/09) HybsDateUtil を利用
    128
    129                // ヘッダー行追加
    130                String[] headerArgs = new String[] {
    131                                "1",                                                            // HCDJ
    132                                hcdd ,                                                          // HCDD
    133                                hto,                                                            // HTO
    134                                hsyu,                                                           // HSYU
    135                                hlday.substring( 2 ),                           // HLDAY
    136                                hltime,                                                         // HLTIME
    137                                hdpday.substring( 2 ),                          // HDPDAY
    138                                config.getHfrom(),                                      // HFROM
    139                                htcno,                                                          // HTCNO
    140                                getHtc( tran, execDbid ),                       // HTC
    141                                getHeaderText( hto, vals.length ),      // HTEXT
    142                                getDyunyou( tran, execDbid ),           // DYUNYOU
    143                                recl                                                            // RECL
    144                        };
    145                DBUtil.dbExecute( CB01_INSERT, headerArgs, tran, execDbid );
    146
    147                // 明細行追加
    148                for( String text : vals ) {
    149                        String[] dataArgs = new String[] {
    150                                        "5",                                                            // HCDJ
    151                                        hcdd ,                                                          // HCDD
    152                                        hto,                                                            // HTO
    153                                        hsyu,                                                           // HSYU
    154                                        hlday.substring( 2 ),                           // HLDAY
    155                                        hltime,                                                         // HLTIME
    156                                        hdpday.substring( 2 ),                          // HDPDAY
    157                                        config.getHfrom(),                                      // HFROM
    158                                        htcno,                                                          // HTCNO
    159                                        getHtc( tran, execDbid ),                       // HTC
    160                                        text,                                                           // HTEXT
    161                                        getDyunyou( tran, execDbid ),           // DYUNYOU
    162                                        recl                                                            // RECL
    163                                };
    164                        DBUtil.dbExecute( CB01_INSERT, dataArgs, tran, execDbid );
    165                }
    166        }
    167
    168        /**
    169         * ヘッダーデータのテキストを返します。
    170         * (CSP00007と同じ仕様で実装)
    171         *
    172         * @param hto 送り先
    173         * @param cnt 登録件数
    174         *
    175         * @return ヘッダーデータのテキスト
    176         */
    177        private static String getHeaderText( final String hto, final int cnt ) {
    178                return StringUtil.stringFill( hto, 8, "UTF-8" )
    179                                                + " 登録件数 = " + cnt;
    180        }
    181
    182        /**
    183         * 通番NOを採番します。
    184         * (CSP00007と同じ仕様で実装)
    185         *
    186         * @param tran トランザクションオブジェクト
    187         * @param execDbid 実行接続先DBID
    188         *
    189         * @return 通番NO
    190         */
    191        private static String getHtcno( final Transaction tran, final String execDbid ) {
    192                String[][] rtn = DBUtil.dbExecute( HTCNO_GET, new String[0], tran, execDbid );
    193                return rtn[0][0];
    194        }
    195
    196        /**
    197         * 通番を採番します。
    198         * (CSP00007と同じ仕様で実装)
    199         *
    200         * @param tran トランザクションオブジェクト
    201         * @param execDbid 実行接続先DBID
    202         *
    203         * @return 通番
    204         */
    205        private static String getHtc( final Transaction tran, final String execDbid ) {
    206                String[][] rtn = DBUtil.dbExecute( HTC_GET, new String[0], tran, execDbid );
    207                return rtn[0][0];
    208        }
    209
    210        /**
    211         * 運用日を取得します。(CJ03>運用日)
    212         * (CSP00007と同じ仕様で実装)
    213         *
    214         * @param tran トランザクションオブジェクト
    215         * @param execDbid 実行接続先DBID
    216         *
    217         * @return 運用日
    218         */
    219        private static String getDyunyou( final Transaction tran, final String execDbid ) {
    220                String[][] rtn = DBUtil.dbExecute( DYUNYOU_GET, new String[0], tran, execDbid );
    221                return rtn[0][0];
    222        }
    223}