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     */
016    package org.opengion.fukurou.transfer;
017    
018    // import java.text.DateFormat;
019    // import java.text.SimpleDateFormat;
020    // import java.util.Calendar;
021    // import java.util.Date;
022    // import java.util.Locale;
023    
024    import org.opengion.fukurou.db.DBUtil;
025    import org.opengion.fukurou.db.Transaction;
026    import org.opengion.fukurou.util.StringUtil;
027    import org.opengion.fukurou.util.HybsDateUtil;
028    
029    /**
030     * ä¼é?è¦æ±‚ã«å¯¾ã—ã¦æ—§ä¼é?DB(CB01)ã«ç™»éŒ²ã‚’行ã„ã¾ã™ã?
031     *
032     * æ—§ä¼é?DB登録時ã?ãƒ??タコードã?é€ã‚Šå…ˆã?ãƒ?‚­ã‚¹ãƒˆç¨®åˆ¥ã¯ã€ä¼é?定義マスタã®å®Ÿè¡Œå¯¾è±¡ã§æŒ?®šã—ã¾ã™ã?
033     * 具体的ã«ã¯ä»¥ä¸‹ã?å½¢å¼ã§å®šç¾©ã—ã¾ã™ã?
034     *   (ãƒ??タコーãƒ? (é€ã‚Šå…? (ãƒ?‚­ã‚¹ãƒˆç¨®åˆ¥) [(レコード長)] ä¾?:"3 D9 B119 [400]"
035     * 4番目ã®ãƒ‘ラメーターã§ã‚るレコード長ã¯ä»»æ„ã§ã™ã?ãƒ¬ã‚³ãƒ¼ãƒ‰é•·ãŒæŒ‡å®šã•れãªã??åˆã?
036     * ãƒ?ƒ•ォルトå?ã¨ã—㦠400 ãŒå®šç¾©ã•れã¾ã™ã?
037     *
038     * CB01ã®å??ç›®ã®ã‚»ãƒ?ƒˆåŸºæº–ã?以下ã?通りã§ã™ã?
039     *
040     *                                              ヘッ�?�?タ             明細�?タ
041     *  ---------------------------------------------------
042     *  HCDJ(状�                   1                                       5
043     *  HCDD(カードコー�    [実行対象]                      [実行対象]
044     *  HTO(é€ã‚Šå…?                   [実行対象]                      [実行対象]
045     *  HSYU(ãƒ?‚­ã‚¹ãƒˆç¨®åˆ¥)   [実行対象]                      [実行対象]
046     *  HLDAY(登録日)               シスãƒ?ƒ æ—¥ä»?     シスãƒ?ƒ æ—¥ä»?
047     *  HLTIME(登録時間)     シスãƒ?ƒ æ—¥ä»?     シスãƒ?ƒ æ—¥ä»?
048     *  HDPDAY(削除日)               シスãƒ?ƒ æ—¥ä»?14æ—¥ シスãƒ?ƒ æ—¥ä»?14æ—¥
049     *  HFROM(é€ã‚Šå…?         [シスãƒ?ƒ ãƒªã‚½ãƒ¼ã‚¹]       [シスãƒ?ƒ ãƒªã‚½ãƒ¼ã‚¹]       ※TRANSFER_HOST_CODEã®å€¤
050     *  HTCNO(通番NO)                CB010001.NEXTVAL        CB010001.NEXTVAL
051     *  HTC(通番)                    CB010002.NEXTVAL        CB010002.NEXTVAL
052     *  HTEXT(ãƒ??ã‚¿)                é€ã‚Šå…?登録件数           ãƒ??ã‚¿
053     *  DYUNYOU(é‹ç”¨æ—¥)              CJ03>DYUNYOU         CJ03>DYUNYOU
054     *  RECL(レコード長)     [実行対象]                      [実行対象]                      â€»åˆæœŸå€¤400
055     *
056     *  ã“ã?_CB01を利用ã™ã‚‹å ´å?B01ãƒ??ãƒ–ãƒ«ä»¥å¤–ã«æ¬¡ã®ãƒ??ブルåŠã?シーケンスãŒå¿?¦ã§ã?
057     *  ãƒ??ブル?šCB02
058     *  シーケンス?šCB010001,CB010002
059     *
060     * @og.rev 5.4.4.1 コメント修正
061     * @og.rev 5.5.7.3 CB01登録時ã?HPASS,HNAME変更
062     * @og.group ä¼é?シスãƒ?ƒ 
063     *
064     * @version  5.0
065     * @author   Hiroki.Nakamura
066     * @since    JDK1.6
067     */
068    public class TransferExec_CB01 implements TransferExec {
069    
070            // æ—§ä¼é?DB(CB01)登録
071            // 5.5.7.3 (2012/10/12) HPASS,HNAMEãŒnullã§ã¯é§?›®ãªã®ã§ã‚¹ãƒšã?ス
072            private static final String CB01_INSERT =
073                    "INSERT INTO CB01 ("
074                    + "HCDJ,HCDD,HTO,HSYU,HLDAY,HLTIME,HDPDAY,HTEXT1,HTEXT2"
075                    + ",HPASS,HFROM,HNAME,HTCNO,HTC,HTEXT,DYUNYOU,RECL"
076                    + ") VALUES ("
077                    + "?,?,?,?,?,?,?,null,null"
078    //              + ",null,?,null,?,?,?,?,?"
079                    + ",'        ',?,'                    ',?,?,?,?,?"
080                    + ")";
081    
082            // 通番NOå–å¾?
083            private static final String HTCNO_GET = "SELECT CB010001.NEXTVAL FROM DUAL";
084    
085            // 通番å–å¾?
086            private static final String HTC_GET = "SELECT CB010002.NEXTVAL FROM DUAL";
087    
088            // é‹ç”¨æ—¥å–å¾?
089            private static final String DYUNYOU_GET = "SELECT DYUNYOU FROM CJ03";
090    
091            // 削除日付基準日数
092            private static final int HDAY = 14;
093    
094            // レコード長ã®åˆæœŸå€¤
095            private static final String DEFAULT_RECL = "400";
096    
097            /**
098             * CB01ã«ç™»éŒ²ã—ã¾ã™ã?
099             *
100             * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用ã™ã‚‹ã‚ˆã†ã«ä¿®æ­£ã—ã¾ã™ã?
101             *
102             * @param vals ä¼é?ãƒ??ã‚¿(é…å?)
103             * @param config ä¼é?設定オブジェクãƒ?
104             * @param tran トランザクションオブジェク�
105             */
106            @Override
107            public void execute( final String[] vals, final TransferConfig config, final Transaction tran ) {
108                    if( vals == null || vals.length == 0 ) { return; }
109    
110                    String execObj = config.getExecObj();
111                    String[] obj = StringUtil.csv2Array( execObj, ' ' );
112                    if( obj.length < 3 ) {
113                            String errMsg = "実行対象ã¯ã€?ãƒ??タコーãƒ? (é€ã‚Šå…? (ãƒ?‚­ã‚¹ãƒˆç¨®åˆ¥) ã®å½¢å¼ã§æŒ?®šã—ã¦ä¸‹ã•ã??"
114                                                            + "EXECOBJ=[" + execObj + "]";
115                            throw new RuntimeException( errMsg );
116                    }
117                    String hcdd = obj[0];
118                    String hto = obj[1];
119                    String hsyu = obj[2];
120                    if( hcdd == null || hcdd.length() == 0
121                     || hto  == null || hto.length()  == 0
122                     || hsyu == null || hsyu.length() == 0 ) {
123                            String errMsg = "実行対象ã¯ã€?ãƒ??タコーãƒ? (é€ã‚Šå…? (ãƒ?‚­ã‚¹ãƒˆç¨®åˆ¥) ã¯å¿??ã§ã™ã?"
124                                                            + "EXECOBJ=[" + execObj + "]";
125                            throw new RuntimeException( errMsg );
126                    }
127                    String recl = ( obj.length > 3 ) ? obj[3] : DEFAULT_RECL;
128    
129                    String execDbid = config.getExecDbid();
130    
131                    String htcno = getHtcno( tran, execDbid );
132    //              String hlday = getDate( "yyyyMMdd" );
133    //              String hltime = getDate( "HHmm" );
134    //              String hdpday = getDate( hlday, HDAY );
135                    String hlday  = HybsDateUtil.getDate( "yyyyMMdd" );                     // 5.5.7.2 (2012/10/09) HybsDateUtil を利用
136                    String hltime = HybsDateUtil.getDate( "HHmm" );                         // 5.5.7.2 (2012/10/09) HybsDateUtil を利用
137                    String hdpday = HybsDateUtil.getDatePlus( hlday, HDAY );        // 5.5.7.2 (2012/10/09) HybsDateUtil を利用
138    
139                    // ヘッ�?行追�
140                    String[] headerArgs = new String[] {
141                                    "1",                                                            // HCDJ
142                                    hcdd ,                                                          // HCDD
143                                    hto,                                                            // HTO
144                                    hsyu,                                                           // HSYU
145                                    hlday.substring( 2 ),                           // HLDAY
146                                    hltime,                                                         // HLTIME
147                                    hdpday.substring( 2 ),                          // HDPDAY
148                                    config.getHfrom(),                                      // HFROM
149                                    htcno,                                                          // HTCNO
150                                    getHtc( tran, execDbid ),                       // HTC
151                                    getHeaderText( hto, vals.length ),      // HTEXT
152                                    getDyunyou( tran, execDbid ),           // DYUNYOU
153                                    recl                                                            // RECL
154                            };
155                    DBUtil.dbExecute( CB01_INSERT, headerArgs, tran, execDbid );
156    
157                    // 明細行追�
158                    for( String text : vals ) {
159                            String[] dataArgs = new String[] {
160                                            "5",                                                            // HCDJ
161                                            hcdd ,                                                          // HCDD
162                                            hto,                                                            // HTO
163                                            hsyu,                                                           // HSYU
164                                            hlday.substring( 2 ),                           // HLDAY
165                                            hltime,                                                         // HLTIME
166                                            hdpday.substring( 2 ),                          // HDPDAY
167                                            config.getHfrom(),                                      // HFROM
168                                            htcno,                                                          // HTCNO
169                                            getHtc( tran, execDbid ),                       // HTC
170                                            text,                                                           // HTEXT
171                                            getDyunyou( tran, execDbid ),           // DYUNYOU
172                                            recl                                                            // RECL
173                                    };
174                            DBUtil.dbExecute( CB01_INSERT, dataArgs, tran, execDbid );
175                    }
176            }
177    
178            /**
179             * ヘッãƒ??ãƒ??ã‚¿ã®ãƒ?‚­ã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã?
180             * (CSP00007ã¨åŒã˜ä»•様ã§å®Ÿè£?
181             *
182             * @param hto é€ã‚Šå…?
183             * @param cnt 登録件数
184             *
185             * @return ヘッãƒ??ãƒ??ã‚¿ã®ãƒ?‚­ã‚¹ãƒ?
186             */
187            private static String getHeaderText( final String hto, final int cnt ) {
188                    return StringUtil.stringFill( hto, 8, "UTF-8" )
189    //                                              + " 登録件数 = " + String.valueOf( cnt );
190                                                    + " 登録件数 = " + cnt;
191            }
192    
193            /**
194             * 通番NOを採番ã—ã¾ã™ã?
195             * (CSP00007ã¨åŒã˜ä»•様ã§å®Ÿè£?
196             *
197             * @param tran トランザクションオブジェク�
198             * @param execDbid 実行接続å?DBID
199             *
200             * @return 通番NO
201             */
202            private static String getHtcno( final Transaction tran, final String execDbid ) {
203                    String[][] rtn = DBUtil.dbExecute( HTCNO_GET, new String[0], tran, execDbid );
204                    return rtn[0][0];
205            }
206    
207            /**
208             * 通番を採番ã—ã¾ã™ã?
209             * (CSP00007ã¨åŒã˜ä»•様ã§å®Ÿè£?
210             *
211             * @param tran トランザクションオブジェク�
212             * @param execDbid 実行接続å?DBID
213             *
214             * @return 通番
215             */
216            private static String getHtc( final Transaction tran, final String execDbid ) {
217                    String[][] rtn = DBUtil.dbExecute( HTC_GET, new String[0], tran, execDbid );
218                    return rtn[0][0];
219            }
220    
221            /**
222             * é‹ç”¨æ—¥ã‚’å–å¾—ã—ã¾ã™ã?(CJ03>é‹ç”¨æ—¥)
223             * (CSP00007ã¨åŒã˜ä»•様ã§å®Ÿè£?
224             *
225             * @param tran トランザクションオブジェク�
226             * @param execDbid 実行接続å?DBID
227             *
228             * @return é‹ç”¨æ—¥
229             */
230            private static String getDyunyou( final Transaction tran, final String execDbid ) {
231                    String[][] rtn = DBUtil.dbExecute( DYUNYOU_GET, new String[0], tran, execDbid );
232                    return rtn[0][0];
233            }
234    
235            /**
236             * ç¾åœ¨æ—¥ä»˜ã?時刻をフォーマットをæŒ?®šã—ã¦ã€æ‰€å¾—ã—ã¾ã™ã?
237             * フォーマットã?æŒ?®šæ–¹æ³•ã?ã€java.text.SimpleDateFormat ã®æŒ?®šæ–¹æ³•ã¨åŒä¸?§ã™ã?
238             *
239             * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用ã™ã‚‹ãŸã‚å»?­¢
240             *
241             * @param       form フォーãƒ?–‡å­—å? ( ä¾?"yyyy/MM/dd HH:mm:ss.SSS" )
242             *
243             * @return      ç¾åœ¨æ—¥ä»˜ã?時刻
244             */
245    //      private static String getDate( final String form ) {
246    //              DateFormat formatter = new SimpleDateFormat( form,Locale.JAPAN );
247    //              return formatter.format(new Date());
248    //      }
249    
250            /**
251             * æŒ?®šã?å¼•æ•°ã®æ—¥ä»˜ã‘æ–?­—å?(YYYYMMDDHHMMSS)よりã€ã‚«ãƒ¬ãƒ³ãƒ?‚ªãƒ–ジェクトを作æ?ã—ã¾ã™ã?
252             * 引数ã¯ã€YYYYMMDD ã®?˜æ–‡å­—ã‹ã€YYYYMMDDHHMMSS ã®?‘4文字ã?ã©ã¡ã‚‰ã‹ã§ã™ã?
253             *
254             * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用ã™ã‚‹ãŸã‚å»?­¢
255             *
256             * @param value æ—¥ä»˜ã‘æ–?­—å?(YYYYMMDD ã¾ãŸã? YYYYMMDDHHMMSS)
257             *
258             * @return      カレンãƒ?‚ªãƒ–ジェクãƒ?
259             */
260    //      private static Calendar getCalendar( final String value ) {
261    //              if ( value == null || ( value.length() != 8 && value.length() != 14 ) ) {
262    //                      String errMsg = "引数ã¯ã€YYYYMMDD ã¾ãŸã? YYYYMMDDHHMMSS å½¢å¼ã?æ—¥ä»˜ã‘æ–?­—å?ã®ã¿ã§ã™ã?"
263    //                                      + " value=[" + value + "]" ;
264    //                      throw new RuntimeException( errMsg );
265    //              }
266    // 
267    //              Calendar cal = Calendar.getInstance();
268    //              cal.clear();
269    // 
270    //              int hour=0,minute=0,second=0;
271    // 
272    //              int year   = Integer.parseInt( value.substring( 0,4 ) );
273    //              int month  = Integer.parseInt( value.substring( 4,6 ) ) - 1;
274    //              int date   = Integer.parseInt( value.substring( 6,8 ) );
275    // 
276    //              if( value.length() == 14 ) {
277    //                      hour   = Integer.parseInt( value.substring( 8,10 ) );
278    //                      minute = Integer.parseInt( value.substring( 10,12 ) );
279    //                      second = Integer.parseInt( value.substring( 12,14 ) );
280    //              }
281    // 
282    //              cal.set( year,month,date,hour,minute,second );
283    // 
284    //              return cal;
285    //      }
286    
287            /**
288             * æŒ?®šã?å¼•æ•°ã®æ—¥ä»˜ã‘æ–?­—å?(YYYYMMDD)よりã€å·®åˆ??日付を計算ã—ã¦è¿”ã—ã¾ã™ã?
289             * 引数ã¯ã€YYYYMMDD 㨠差åˆ??日数ã€?
290             *
291             * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用ã™ã‚‹ãŸã‚å»?­¢
292             * ※ diffã®ã‚³ãƒ¡ãƒ³ãƒ?éŽåŽ»ã®æ—¥ä»˜[+]ã€å°?¥ã®æ—¥ä»˜ã?[-])ã¨å†?ƒ¨ãƒ­ã‚¸ãƒ?‚¯ãŒç•°ãªã‚‹ã‚ˆã?«æ€ã„ã¾ã™ã?
293             *    ç§»ã—ãŸå…ˆã? HybsDateUtil.getDatePlus ã§ã‚‚åŒã˜å?ç?§ã™ã?ãƒã‚°ã‹ã©ã?‹ãƒ?‚¹ãƒˆã§ãã¦ã?¾ã›ã‚“ã€?
294             *
295             * @param baseDate æ—¥ä»˜ã‘æ–?­—å?(YYYYMMDD)
296             * @param diff     å·®åˆ??日数(éŽåŽ»ã®æ—¥ä»˜[+]ã€å°?¥ã®æ—¥ä»˜ã?[-])
297             *
298             * @return      çµæžœã®æ—¥ä»?YYYYMMDD)
299             */
300    //      private static String getDate( final String baseDate,final int diff ) {
301    //              if ( baseDate == null || ( baseDate.length() != 8 ) ) {
302    //                      String errMsg = "引数 baseDate ã¯ã€YYYYMMDD å½¢å¼ã?æ—¥ä»˜ã‘æ–?­—å?ã®ã¿ã§ã™ã?"
303    //                                      + " baseDate=[" + baseDate + "]" ;
304    //                      throw new RuntimeException( errMsg );
305    //              }
306    // 
307    //              Calendar cal = getCalendar( baseDate );
308    //              cal.add( Calendar.DATE,diff );
309    //              String rtn = null;
310    // 
311    //              int calYear             = cal.get( Calendar.YEAR );
312    //              int calMonth    = cal.get( Calendar.MONTH ) + 1;
313    //              int calDay              = cal.get( Calendar.DATE );
314    //              rtn = String.valueOf( calYear );
315    //              if( calMonth < 10 ) {
316    //                      rtn = rtn + "0" + calMonth;
317    //              }
318    //              else {
319    //                      rtn = rtn + calMonth;
320    //              }
321    //              if( calDay < 10 ) {
322    //                      rtn = rtn + "0" + calDay;
323    //              }
324    //              else {
325    //                      rtn = rtn + calDay;
326    //              }
327    //              return rtn;
328    //      }
329    
330    }