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}