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.hayabusa.report; 017 018import java.util.HashMap; 019import java.util.Map; 020 021import org.opengion.fukurou.db.DBUtil; 022import org.opengion.fukurou.util.ApplicationInfo; 023import org.opengion.fukurou.util.StringUtil; 024import org.opengion.hayabusa.common.HybsSystem; 025import org.opengion.hayabusa.db.DBTableModel; 026import org.opengion.hayabusa.report2.QueueManager_DB.DBTableModelCreator; 027import org.opengion.hayabusa.resource.ResourceFactory; 028import org.opengion.hayabusa.resource.ResourceManager; 029 030/** 031 * DBTableModelオブジェクトをレポート形式に返還するタグリブクラスです。 032 * このオブジェクトに、 データ(DBTableModel)と、コントローラ(DBTableReport クラス)を与えて、 033 * 外部からコントロールすることで、各種形式で データ(DBTableModel)を表示させることが 034 * 可能です。 035 * 036 * @og.group 帳票システム 037 * 038 * @version 4.0 039 * @author Hiroki Nakamura 040 * @since JDK5.0, 041 */ 042public class RFIDPrintRequest { 043 044 private static final String CR = HybsSystem.CR ; 045 046 private final StringBuilder errMsg = new StringBuilder(); 047 048 // DBTableModel に対して設定する情報 049 private ResourceManager resource = null; 050 051 // 受け渡し変数 052 private final String SYSTEM_ID ; 053 private final String YKNO ; 054 private final String LISTID ; 055 private final String LANG ; 056 private final String FGRUN ; 057 private final String PRTID ; 058 private final String PRGDIR ; // 4.3.3.0 (2008/10/01) 板金RFID対応で追加 059 private final String PRGFILE ; // 4.3.3.0 (2008/10/01) 追加 060 private final String OUTDIR ; // 4.3.3.0 (2008/10/01) 追加 061 private final boolean DEBUG ; 062 private final String FILENAME ; // 5.4.3.9 (2012/01/25) 063 064 // オブジェクト変数 065 private boolean fgLOCAL = false; 066 private String prtName = null; 067 private String hostName = null; 068 private String portnm = null; 069 private String fgkan = GE50Access.FG_ERR2; // 4.3.3.0 (2008/10/01) 初期値エラー 070 private final Map<String,String[]> rfidLayout = new HashMap<String,String[]>(); 071 072 // GE54 の帳票定義情報を取得するSQL文です。 073 private static final String GE54_SELECT = 074 "SELECT BSQL,FGLOCAL,SYSTEM_ID" + 075 " FROM GE54" + 076 " WHERE FGJ = '1'" + 077 " AND SYSTEM_ID IN (?,'**')" + 078 " AND LISTID = ?" ; 079 private static final int GE54_FGLOCAL = 1; 080 private static final int GE54_SYSTEM_ID = 2; 081 082 // 5.4.4.0 (2012/02/01) 互換モード対応漏れ 083 private static final String HOST = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "HOST" : "HOST_ID"; 084 085 // GE55 の出力先マスタ情報を取得するSQL文です。 086 // 5.1.0.0 (2009/11/04) HOST ⇒ HOST_ID 087 // 5.4.3.1 (2011/12/27) PORTNM 088 // 5.4.4.0 (2012/02/01) 互換モード 089 private static final String GE55_SELECT = 090 "SELECT PRTNM,"+HOST+",SYSTEM_ID,PORTNM" + 091 " FROM GE55" + 092 " WHERE FGJ = '1'" + 093 " AND SYSTEM_ID IN (?,'**')" + 094 " AND PRTID = ?" ; 095 private static final int GE55_PRTNM = 0; 096 private static final int GE55_HOST_ID = 1; 097 private static final int GE55_SYSTEM_ID = 2; 098 private static final int GE55_PORTNM = 3; 099 100 // 5.2.0.0 (2010/09/01) Ver4互換モード対応 101 private static final String CLM = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "COLUMN_NAME" : "CLM"; 102 103 // GE58 の帳票レイアウトテーブルを取得するSQL文です。 104 // 5.2.0.0 (2010/09/01) Ver4互換モード対応 105 private static final String GE58_SELECT = 106 "SELECT KBOUT,DATA1,DATA2,DATA3,DATA4,DATA5,DATA6,DATA7,DATA8" + 107 " ,DATA9,DATA10,DATA11,DATA12,DATA13,DATA14,DATA15,"+CLM + 108 " FROM GE58 WHERE SYSTEM_ID IN (?,'**')" + 109 " AND LISTID = ?"; 110 public static final int GE58_KBOUT = 0; 111 public static final int GE58_DATA1 = 1; 112 public static final int GE58_DATA2 = 2; 113 public static final int GE58_DATA3 = 3; 114 public static final int GE58_DATA4 = 4; 115 public static final int GE58_DATA5 = 5; 116 public static final int GE58_DATA6 = 6; 117 public static final int GE58_DATA7 = 7; 118 public static final int GE58_DATA8 = 8; 119 public static final int GE58_DATA9 = 9; 120 public static final int GE58_DATA10 = 10; 121 public static final int GE58_DATA11 = 11; 122 public static final int GE58_DATA12 = 12; 123 public static final int GE58_DATA13 = 13; 124 public static final int GE58_DATA14 = 14; 125 public static final int GE58_DATA15 = 15; 126 public static final int GE58_CLM_NAME = 16; 127 128 // コネクションにアプリケーション情報を追記するかどうか指定 129 public static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ; 130 private final ApplicationInfo appInfo; 131 private final String DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対応 132 133 /** 134 * コンストラクター 135 * 引数を受けとって、インスタンスを作成します。 136 * @param systemId システムID 137 * @param ykno 要求番号 138 * @param listId 帳票ID 139 * @param lang 言語 140 * @param fgrun 実行方法 141 * @param prtid プリンタID 142 * @param prgdir プログラムディレクトリ 143 * @param prgfile プログラムファイル 144 * @param outdir 出力ディレクトリ 145 * @param layoutFile レイアウトファイル 146 * @param isDebug デバッグフラグ 147 * 148 * @og.rev 4.3.3.0 (2008/10/01) 板金 RFID対応。引数にprgdir,prgfile,outdir追加 149 * @og.rev 5.4.3.1 (2011/12/27) portnm追加 150 * @og.rev 5.4.3.9 (2012/01/25) 雛形ファイル名追加 151 * 152 */ 153 public RFIDPrintRequest( final String systemId, final String ykno 154 , final String listId, final String lang, final String fgrun, final String prtid 155 , final String prgdir, final String prgfile, final String outdir , final String layoutFile, final boolean isDebug ) { 156 SYSTEM_ID = systemId; 157 YKNO = ykno; 158 LISTID = listId; 159 LANG = lang; 160 FGRUN = fgrun; 161 PRTID = prtid; 162 PRGDIR = prgdir; // 4.3.3.0 (2008/10/01) 163 PRGFILE = prgfile; // 4.3.3.0 (2008/10/01) 164 OUTDIR = outdir; // 4.3.3.0 (2008/10/01) 165 DEBUG = isDebug; 166 FILENAME = layoutFile; // 5.4.3.9 (2012/01/25) 167 168 // アクセスログ取得の為,ApplicationInfoオブジェクトを設定 169 if( USE_DB_APPLICATION_INFO ) { 170 appInfo = new ApplicationInfo(); 171 // ユーザーID,IPアドレス,ホスト名 172 appInfo.setClientInfo( SYSTEM_ID,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME ); 173 // 画面ID,操作,プログラムID 174 appInfo.setModuleInfo( "ReportConverter",YKNO,LISTID ); 175 } 176 else { 177 appInfo = null; 178 } 179 } 180 181 /** 182 * 初期データセットを行います。 183 * ここでは、GE54,GE58,GE55 テーブルより必要な情報を取得します。 184 * 185 * @og.rev 4.3.3.0 (2008/10/01) 板金 RFID対応(PRGDIR,PRGFILE追加等) 186 * @og.rev 5.4.3.0 (2011/12/26) GE54のbSQLは取らないようにする 187 * @og.rev 5.4.3.9 (2012/01/25) GE58はなくてもよい 188 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対策 189 * 190 * @return 結果 [true:正常/false:異常] 191 */ 192 public boolean initialDataSet() { 193 194 // ===== GE54 から帳票定義情報を取得します ========================================= 195 String[] args = new String[] { SYSTEM_ID,LISTID }; 196 String[][] vals = DBUtil.dbExecute( GE54_SELECT,args,appInfo, DBID ); // 5.5.5.1 (2012/08/07) 197 if( vals == null || vals.length == 0 ) { 198 errMsg.append( "Data does not exist in GE54 table." ).append( CR ); 199 errMsg.append( "==============================" ).append( CR ); 200 errMsg.append( "SYSTEM_ID=[" ).append( SYSTEM_ID ).append( "] , " ); 201 errMsg.append( "LISTID=[" ).append( LISTID ).append( "]" ); 202 errMsg.append( CR ); 203 return false; 204 } 205 206 // 検索結果が複数帰ったとき、SYSTEM_ID が 指定されている方のデータ(行)を採用する。 207 int row = 0; 208 for( int i=0; i<vals.length; i++ ) { 209 if( SYSTEM_ID.equalsIgnoreCase( vals[i][GE54_SYSTEM_ID] ) ) { row = i; break; } 210 } 211 212 // ローカルリソースフラグ 213 // 4.3.3.0 (2008/10/01) 214 // fgLOCAL = ( vals[row][GE54_FGLOCAL] != null && vals[row][GE54_FGLOCAL].trim().equals( "1" ) ) ? true : false ; 215 String localFlag = vals[row][GE54_FGLOCAL]; 216 fgLOCAL = localFlag != null && "1".equals( localFlag.trim() ) ; 217 218 // ===== GE58 から帳票定義情報を取得します ========================================= 219 String[] argsGe58 = new String[] { SYSTEM_ID,LISTID }; 220 String[][] valsGe58 = DBUtil.dbExecute( GE58_SELECT,argsGe58,appInfo, DBID ); // 5.5.5.1 (2012/08/07) 221 222 for( int i=0; i<valsGe58.length; i++ ) { 223 rfidLayout.put( valsGe58[i][GE58_CLM_NAME], valsGe58[i] ); 224 } 225 226 // ===== GE55 から出力先マスタ情報を取得します ========================================= 227 String[] argsGe55 = new String[] { SYSTEM_ID,PRTID }; 228 String[][] valsGe55 = DBUtil.dbExecute( GE55_SELECT,argsGe55,appInfo, DBID ); // 5.5.5.1 (2012/08/07) 229 if( valsGe55 == null || valsGe55.length == 0 ) { 230 errMsg.append( "Data does not exist in GE55 table." ).append( CR ); 231 errMsg.append( "==============================" ).append( CR ); 232 errMsg.append( "SYSTEM_ID=[" ).append( SYSTEM_ID ).append( "] , " ); 233 errMsg.append( "PRTID=[" ).append( PRTID ).append( "]" ); 234 errMsg.append( CR ); 235 return false; 236 } 237 238 // 検索結果が複数帰ったとき、SYSTEM_ID が 指定されている方のデータ(行)を採用する。 239 int rowGe55 = 0; 240 for( int i=0; i<vals.length; i++ ) { 241 if( SYSTEM_ID.equalsIgnoreCase( vals[i][GE55_SYSTEM_ID] ) ) { rowGe55 = i; break; } 242 } 243 244 prtName = valsGe55[rowGe55][GE55_PRTNM]; 245 hostName = valsGe55[rowGe55][GE55_HOST_ID]; 246 portnm = valsGe55[rowGe55][GE55_PORTNM]; 247 248 return true; 249 } 250 251 /** 252 * RFID発行用データを作成し、発行リクエストの処理を行います。 253 * 254 * @og.rev 5.4.3.0 (2011/12/26) _DEFAULT対応 255 * @og.rev 5.4.3.4 (2012/01/12) listid追加 256 * @og.rev 5.4.3.9 (2012/01/25) FILENAME追加 257 * 258 * @return 結果 [true:正常/false:異常] 259 */ 260 public boolean execute() { 261 System.out.print( "RRID RequestData Creating ... " ); 262 263 // FGLOCAL 指定時は、SYSTEM_ID を指定してリソース作成 264 if( fgLOCAL ) { 265 // ローカルリソース指定時は、SYSTEM_ID,LANG を使用します。先読みは、使用しません。 266 resource = ResourceFactory.newInstance( SYSTEM_ID,LANG,false ); 267 } 268 else { 269 // 従来と互換性のあるモード(ローカルリソースは使用しない。 270 resource = ResourceFactory.newInstance( LANG ); 271 } 272 273 // ボディー情報の取得 274 // 5.2.3.0 tableのとり方変更 275 DBTableModelCreator tmc = new DBTableModelCreator( SYSTEM_ID, LISTID, YKNO, "B", resource ); 276 DBTableModel table = tmc.getTable(); 277 if( table.getRowCount() <= 0 ) { 278 errMsg.append( "Database Body row count is Zero." ).append( CR ); 279 errMsg.append( "==============================" ).append( CR ); 280 // 5.5.2.4 (2012/05/16) 廃止の消し忘れ。 281 errMsg.append( "SYSTEM_ID=" ).append( SYSTEM_ID ); 282 errMsg.append( ",LISTID=" ).append( LISTID ); 283 errMsg.append( ",YKNO=" ).append( YKNO ); 284 errMsg.append( CR ); 285 return false; 286 } 287 // 検索時の最大件数での打ち切りをエラーとする。 288 if( table.isOverflow() ) { 289 errMsg.append( "Database is Overflow. [" ); 290 errMsg.append( table.getRowCount() ); 291 errMsg.append( "]" ).append( CR ).append( CR ); 292 errMsg.append( "==============================" ).append( CR ); 293 errMsg.append( "Check SystemParameter Data in DB_MAX_ROW_COUNT Overflow" ); 294 errMsg.append( CR ); 295 return false; 296 } 297 298 // RFID発行用クラスを実行する。 299 RFIDPrintPointService service = null; 300 try { 301 service = (RFIDPrintPointService)StringUtil.newInstance( HybsSystem.sys( "REPORT_RFID_SERVICE_CLASS" ) ); 302 service.setYkno( YKNO ); 303 service.setSystemId( SYSTEM_ID ); 304 service.setFgrun( FGRUN ); 305 service.setHostName( hostName ); 306 service.setPrinterName( prtName ); 307 service.setTable( table ); 308 service.setLayout( rfidLayout ); 309 service.setPrgDir( PRGDIR ); // 4.3.3.0 (2008/10/01) 板金 RFID対応 310 service.setPrgFile( PRGFILE ); // 4.3.3.0 (2008/10/01) 311 service.setOutDir( OUTDIR ); // 4.3.3.0 (2008/10/01) 312 service.setPrtId( PRTID ); // 5.4.3.0 (2011/12/26) 313 service.setPortnm( portnm ); // 5.4.3.1 (2011/12/27) 314 service.setListId( LISTID ); // 5.4.3.4 (2012/01/12) 315 service.setLayoutFile( FILENAME ); // 5.4.3.9 (2012/01/25) 316 317 // service.execute(); 318 boolean flag = service.execute(); // 4.3.3.0 (2008/10/01) booleanを返す 319 320 fgkan = service.getFgkan(); // 4.3.3.0 (2008/10/01) FGKANを受け取るようにする 321 322 if( DEBUG ) { 323 System.out.println( service ); 324 } 325 326 if( ! flag ){ // 4.3.3.0 (2008/10/01) 327 errMsg.append( service.getErrMsg() ); 328 return false; 329 } 330 } 331 catch ( Throwable ex ) { 332 fgkan = GE50Access.FG_ERR2; // 4.3.3.0 (2008/10/01) エラー時はアプリエラーにしておく 333 errMsg.append( "RFID Print Request Execution Error. " ).append( CR ); 334 errMsg.append( "==============================" ).append( CR ); 335 errMsg.append( "SYSTEM_ID=[" ).append( SYSTEM_ID ).append( "] , " ); 336 errMsg.append( "YKNO=[" ).append( YKNO ).append( "]" ).append( CR ); 337 errMsg.append( HybsSystem.sys( "REPORT_RFID_SERVICE_CLASS" ) ).append( CR ); 338 errMsg.append( ex.toString() ); 339 errMsg.append( CR ); 340 if( service != null ) { errMsg.append( service.getErrMsg() ); } // 5.5.2.6 (2012/05/25) findbugs対応 341 return false; 342 } 343 344 System.out.println( "End." ); 345 return true ; 346 } 347 348 /** 349 * エラーが存在した場合に、エラーメッセージを返します。 350 * 351 * @return エラーメッセージ String 352 */ 353 public String getErrMsg() { 354 return errMsg.toString(); 355 } 356 357 /** 358 * 完了フラグを返します。 359 * 360 * @og.rev 4.3.3.0 (2008/10/01) 板金RFID メソッド追加 361 * 362 * @return 完了フラグ String 363 */ 364 public String getFgkan() { 365 return fgkan; 366 } 367}