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.hayabusa.report; 017 018 import org.opengion.hayabusa.common.HybsSystem; 019 import org.opengion.hayabusa.common.HybsSystemException; 020 import org.opengion.fukurou.util.StringUtil; 021 import org.opengion.fukurou.util.ApplicationInfo; 022 import org.opengion.fukurou.db.DBUtil; 023 024 import java.io.File; 025 026 /** 027 * DBTableModelオブジェクトをレポ?ト形式に返還するタグリブクラスです? 028 * こ?オブジェクトに???タ(DBTableModel)と、コントローラ(DBTableReport クラス)を与えて? 029 * 外部からコントロールすることで、各種形式で ??タ(DBTableModel)を表示させること? 030 * 可能です? 031 * 032 * @og.group 帳票シス? 033 * 034 * @version 4.0 035 * @author Kazuhiko Hasegawa 036 * @since JDK5.0, 037 */ 038 public class ReportProcessing { 039 040 private static final String FGRUN_1 = "1"; // HTMLのみ 041 private static final String FGRUN_2 = "2"; // 印刷のみ 042 private static final String FGRUN_3 = "3"; // 出力+印刷 043 044 // 3.8.0.0 (2005/06/07) 実行方?FGRUN)に、EXCEL取込関連のフラグ値を追?? 045 private static final String FGRUN_5 = "5"; // 取込のみ 046 private static final String FGRUN_6 = "6"; // PG起動?み 047 private static final String FGRUN_7 = "7"; // 取込+PG起? 048 049 private static final String FGRUN_A = "A"; // RFID(通常印刷) 4.0.3.0 (2007/12/26) 050 private static final String FGRUN_B = "B"; // RFID(全印刷) 4.0.3.0 (2007/12/26) 051 private static final String FGRUN_C = "C"; // RFID(全消去) 4.0.3.0 (2007/12/26) 052 private static final String FGRUN_D = "D"; // RFID(連続消去) 4.1.1.0 (2008/02/21) 053 054 private static final String CR = HybsSystem.CR ; 055 056 // 印刷時に使用する?ポラリフォル? 057 private final String REPORT_URL = 058 HybsSystem.url2dir( StringUtil.nval( 059 HybsSystem.sys( "REPORT_FILE_URL" ) , 060 HybsSystem.sys( "FILE_URL" ) + "REPORT/" ) ) ; 061 062 // 3.8.0.0 (2005/06/07) 追? 063 // EXCEL取込時に使用する?ポラリフォル?。ファイル名?、要求番号.xls 064 private final String EXCELIN_URL = 065 HybsSystem.url2dir( StringUtil.nval( 066 HybsSystem.sys( "EXCEL_IN_FILE_URL" ) , 067 HybsSystem.sys( "FILE_URL" ) + "EXCELIN/" ) ) ; 068 069 private StringBuilder errMsg = new StringBuilder(); 070 071 // ?DBを検索するときに、キー?? 072 private String SYSTEM_ID = null; 073 private String YKNO = null; 074 private String GROUPID = null; 075 private String LISTID = null; 076 private String JOKEN = null; 077 private String OUT_DIR = null; // 5.1.0.0 (2009/11/04) OUTDIR ?OUT_DIR 078 private String OUT_FILE = null; // 5.1.0.0 (2009/11/04) OUTFILE ?OUT_FILE 079 private String outputFile = null; 080 private boolean isDebug = false; // 3.8.5.0 (2006/03/06) ??用のフラグを追? 081 082 // GE53 検索結果 083 private String FGRUN = null; 084 private String PRTID = null; 085 private String LANG = "ja"; 086 private String PRGDIR = null; 087 private String PRGFILE = null; 088 private String DMN_GRP = null; // 3.8.0.5 (2005/08/26) 089 private String programFile = null; 090 091 // GE53 の帳票振?報を取得するSQL?す? 092 // 3.8.0.5 (2005/08/26) ??モングループ追? 093 // 4.0.0 (2005/01/31) 共?system_id を??? 094 private static final String GE53_SELECT = 095 "SELECT FGRUN,PRTID,LANG,PRGDIR,PRGFILE,SYSTEM_ID,DMN_GRP" + 096 " FROM GE53" + 097 " WHERE FGJ = '1'" + 098 " AND SYSTEM_ID IN (?,'**')" + 099 " AND JOKEN = ?" ; 100 101 private static final int GE53_FGRUN = 0; 102 private static final int GE53_PRTID = 1; 103 private static final int GE53_LANG = 2; 104 private static final int GE53_PRGDIR = 3; 105 private static final int GE53_PRGFILE = 4; 106 private static final int GE53_SYSTEM_ID = 5; 107 private static final int GE53_DMN_GRP = 6; 108 109 /** コネクションにアプリケーション??を追記するかど???*/ 110 public static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ; 111 112 // 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設? 113 private ApplicationInfo appInfo; 114 private final String DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対? 115 116 /** 117 * 処?実行します? 118 * こ?メソ?を実行すると、レポ?ト変換、レポ?ト?力を?処?て?ます? 119 * 120 * @og.rev 3.0.0.4 (2003/02/26) FGRUN ?PRT のみのとき??MODELFILE のみセ?して終?る? 121 * @og.rev 3.8.0.0 (2005/06/07) ReportConverter の initialDataSet() を呼び出して?MODELFILE をセ?する? 122 * @og.rev 3.8.0.0 (2005/06/07) EXCEL 登録機?を追?ます? 123 * @og.rev 3.8.0.0 (2005/06/07) 実行結果?boolean ではなく???(FGKAN_XX)で返します? 124 * @og.rev 3.8.0.5 (2005/08/26) ??モングループ追? 125 * @og.rev 3.8.0.9 (2005/10/17) エラーメ?ージ強? 126 * @og.rev 3.8.5.0 (2006/03/06) 標準画面出力メ?ージの変更。日付??゚リン?Dの表示 127 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設? 128 * @og.rev 4.0.3.0 (2007/12/26) RFID対?実行方?'A','B','C'の処?? 129 * @og.rev 4.1.1.0 (2008/02/21) RFID対?実行方?'D'の処?? 130 * @og.rev 4.3.3.0 (2008/10/01) 板金RFID対?PRGDIR,PRGFILEの渡し? 131 * @og.rev 5.4.3.9 (2012/01/25) RFIDの雛形ファイル名私?旧帳票は無視す? 132 * 133 * @return 結果 (FGKAN_XX エラー時?、null) 134 */ 135 public String execute() { 136 System.out.println(); 137 System.out.println( "Process Start:" + HybsSystem.getDate( "yyyy/MM/dd HH:mm:ss" ) ); 138 System.out.println( " SYSTEM_ID=[" + SYSTEM_ID + "] YKNO=[" + YKNO + "] GROUPID=[" + GROUPID + "]" ); 139 System.out.println( " PRTID=[" + PRTID + "] LISTID=[" + LISTID + "] JOKEN=[" + JOKEN + "]" ); 140 String fgkan = null; 141 142 // 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設? 143 if( USE_DB_APPLICATION_INFO ) { 144 appInfo = new ApplicationInfo(); 145 // ユーザーID,IPアドレス,ホスト名 146 appInfo.setClientInfo( SYSTEM_ID,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME ); 147 // 画面ID,操?プログラ?D 148 appInfo.setModuleInfo( "ReportProcessing",YKNO,LISTID ); 149 } 150 else { 151 appInfo = null; 152 } 153 154 boolean flag ; 155 try { 156 flag = initialDataSet( appInfo ); 157 System.out.print( "INIT=" + flag + "," ); 158 String reportDir = REPORT_URL + SYSTEM_ID + HybsSystem.FS + LISTID ; 159 String modelFile = null; 160 161 // ================== FGRUN_1,2,3 は、帳票印刷処?=========================================== 162 // 3.8.0.0 (2005/06/07) 実行方?FGRUN)に、EXCEL取込関連のフラグ値を追??Stringからintに変更 163 if( flag && ( FGRUN.equals( FGRUN_1 ) || FGRUN.equals( FGRUN_2 ) || FGRUN.equals( FGRUN_3 ) ) ) { 164 System.out.println( "RUN_" + FGRUN ); 165 ReportConverter rc = new ReportConverter( SYSTEM_ID,YKNO,LISTID,reportDir,LANG,isDebug ); 166 167 // 3.8.0.0 (2005/06/07) MODELFILE のセ?は、initialDataSet() で行う? 168 flag = rc.initialDataSet(); 169 modelFile = rc.modelFile(); // 4.0.1.0 (2007/12/18) 170 171 if( flag && ( FGRUN.equals( FGRUN_1 ) || FGRUN.equals( FGRUN_3 ) ) ) { 172 flag = rc.execute(); 173 } 174 175 if( flag ) { fgkan = GE50Access.FG_OK; } 176 errMsg.append( rc.getErrMsg() ).append( CR ); 177 } 178 if( flag && ( FGRUN.equals( FGRUN_2 ) || FGRUN.equals( FGRUN_3 ) ) ) { 179 System.out.println( "RUN_" + FGRUN ); 180 fgkan = null; 181 // 3.8.0.5 (2005/08/26) ??モングループ追? 182 ReportPrint rp = new ReportPrint( SYSTEM_ID,YKNO,PRTID,programFile,reportDir,modelFile,outputFile,DMN_GRP,isDebug ); 183 flag = rp.execute(); 184 if( flag ) { fgkan = GE50Access.FG_OK; } 185 errMsg.append( rp.getErrMsg() ).append( CR ); 186 } 187 188 // ================== FGRUN_4,5,6 は、EXCEL取込処?=========================================== 189 // 3.8.0.0 (2005/06/07) EXCEL 登録機?を追?ます? 190 String excelinDir = EXCELIN_URL + SYSTEM_ID + HybsSystem.FS + LISTID; 191 if( flag && ( FGRUN.equals( FGRUN_5 ) || FGRUN.equals( FGRUN_7 ) ) ) { 192 System.out.println( "RUN_" + FGRUN ); 193 ExcelInsert ei = new ExcelInsert( SYSTEM_ID,YKNO,LISTID,excelinDir,isDebug ); 194 195 flag = ei.execute(); 196 if( flag ) { fgkan = GE50Access.FG_DBIN; } 197 errMsg.append( ei.getErrMsg() ).append( CR ); 198 } 199 if( flag && ( FGRUN.equals( FGRUN_6 ) || FGRUN.equals( FGRUN_7 ) ) ) { 200 System.out.println( "RUN_" + FGRUN ); 201 fgkan = null; 202 ProgramRun pr = new ProgramRun( SYSTEM_ID,YKNO,LISTID,isDebug ); 203 flag = pr.execute(); 204 if( flag ) { fgkan = GE50Access.FG_OK; } 205 errMsg.append( pr.getErrMsg() ).append( CR ); 206 } 207 208 // ================== FGRUN_A,B,C,D は、RFID出力??=========================================== 209 if( flag && ( FGRUN.equals( FGRUN_A ) || FGRUN.equals( FGRUN_B ) || FGRUN.equals( FGRUN_C ) || FGRUN.equals( FGRUN_D ) ) ) { 210 System.out.println( "RUN_" + FGRUN ); 211 //RFIDPrintRequest rpr = new RFIDPrintRequest( SYSTEM_ID,YKNO,LISTID,LANG,FGRUN,PRTID,isDebug ); 212 // 4.3.3.0 (2008/10/01) RFIDPrintRequestのコンストラクタ引数追? 213 // 5.4.3.9 (2012/01/25) 雛形ファイル名?新帳票のみ対? 214 RFIDPrintRequest rpr = new RFIDPrintRequest( SYSTEM_ID,YKNO,LISTID,LANG,FGRUN,PRTID,PRGDIR,PRGFILE,OUT_DIR,null,isDebug ); 215 flag = rpr.initialDataSet(); 216 if( flag ) { flag = rpr.execute(); } 217 //if( flag ) { fgkan = GE50Access.FG_RUN; } 218 // 4.3.3.0 (2008/10/01) 完?フラグの取り方変更 219 if( flag ) { fgkan = rpr.getFgkan(); } 220 errMsg.append( rpr.getErrMsg() ).append( CR ); 221 } 222 } 223 catch ( RuntimeException ex ) { 224 errMsg.append( "ReportProcessing Execute Error! " ).append( CR ) ; 225 errMsg.append( "==============================" ).append( CR ); 226 errMsg.append( StringUtil.stringStackTrace( ex ) ).append( CR ) ; 227 flag = false; 228 } 229 230 return flag ? fgkan : null ; // 正常なら?fgkan を?異常な?null を返します? 231 } 232 233 /** 234 * ?変数をクリアします? 235 * こ?オブジェクトを再利用する場合?、?こ?メソ?で?変数の 236 * クリアが?です? 237 * 注意:このクラス自身は、同期???入って?せん 238 * 239 * @og.rev 3.8.0.5 (2005/08/26) ??モングループ追? 240 * 241 */ 242 public void clear() { 243 SYSTEM_ID = null; 244 YKNO = null; 245 GROUPID = null; 246 LISTID = null; 247 JOKEN = null; 248 OUT_DIR = null; // 5.1.0.0 (2009/11/04) OUTDIR ?OUT_DIR 249 OUT_FILE = null; // 5.1.0.0 (2009/11/04) OUTFILE ?OUT_FILE 250 outputFile = null; 251 isDebug = false; // 3.8.5.0 (2006/03/06) ??用のフラグを追? 252 253 FGRUN = null; 254 PRTID = null; 255 LANG = null; 256 PRGDIR = null; 257 PRGFILE = null; 258 DMN_GRP = null; // 3.8.0.5 (2005/08/26) 259 programFile = null; 260 261 errMsg = new StringBuilder() ; 262 } 263 264 /** 265 * シス?ID(SYSTEM_ID)をセ?します? 266 * 267 * @param val シス?ID 268 */ 269 public void setSystemId( final String val ) { SYSTEM_ID = val; } 270 271 /** 272 * 要求番号(YKNO)をセ?します? 273 * 274 * @param val 要求番号 275 */ 276 public void setYkno( final String val ) { YKNO = val; } 277 278 /** 279 * グループID(GROUPID)をセ?します? 280 * 281 * @param val グループID 282 */ 283 public void setGroupId( final String val ) { GROUPID = val; } 284 285 /** 286 * 帳票ID(LISTID)をセ?します? 287 * 288 * @param val 帳票ID 289 */ 290 public void setListId( final String val ) { LISTID = val; } 291 292 /** 293 * 処?件(JOKEN)をセ?します? 294 * 295 * @param val 処?件 296 */ 297 public void setJoken( final String val ) { JOKEN = val; } 298 299 /** 300 * プリンターID(PRTID)をセ?します? 301 * 302 * @og.rev 3.8.5.0 (2006/03/06) PRTID が指定されて?ば、その値を使用する。なければ NULL 303 * @og.rev 4.3.4.4 (2009/01/01) メソ?名変更 304 * 305 * @param val プリンターID 306 */ 307 public void setPrtId( final String val ) { PRTID = val; } 308 309 /** 310 * 出力??レクトリ(OUT_DIR)をセ?します? 311 * 312 * @param val 出力??レクトリ 313 */ 314 public void setOutDir( final String val ) { OUT_DIR = val; } 315 316 /** 317 * 出力?ファイル(OUT_FILE)をセ?します? 318 * 319 * @param val 出力?ファイル 320 */ 321 public void setOutFile( final String val ) { OUT_FILE = val; } 322 323 /** 324 * debugフラグをセ?します? 325 * 326 * @og.rev 3.8.5.0 (2006/03/06) ??用のフラグを追?ます? 327 * 328 * @param flag ??フラグ[true:??/false:通常] 329 */ 330 public void setDebug( final boolean flag ) { isDebug = flag; } 331 332 /** 333 * 初期??タセ?を行います? 334 * ここでは、GE53 ??ブルより?な??を取得します? 335 * 336 * @og.rev 3.8.0.5 (2005/08/26) ??モングループ追? 337 * @og.rev 3.8.5.0 (2006/03/06) プリンタIDが引数から、渡される?合?対? 338 * @og.rev 3.8.6.0 (2006/09/29) 出力?フォル??自動生成を行います? 339 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設? 340 * @og.rev 5.1.0.0 (2009/11/04) OUTDIR ?OUT_DIR , OUTFILE ?OUT_FILE カラ?変更 341 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対? 342 * 343 * @param appInfo アプリ??オブジェク? 344 * 345 * @return 結果[true:正常/false:異常] 346 */ 347 private boolean initialDataSet( final ApplicationInfo appInfo ) { 348 String[] args = new String[] { SYSTEM_ID,JOKEN }; 349 // fgrun,prtid,lang,prgdir,prgfile 350 // String[][] vals = DBUtil.dbExecute( GE53_SELECT,args,appInfo ); // 3.8.7.0 (2006/12/15) 351 String[][] vals = DBUtil.dbExecute( GE53_SELECT,args,appInfo, DBID ); // 5.5.5.1 (2012/08/07) 352 if( vals == null || vals.length == 0 ) { 353 errMsg.append( "Data does not exist in GE53 table." ).append( CR ); 354 errMsg.append( "==============================" ).append( CR ); 355 errMsg.append( "SYSTEM_ID=[" ).append( SYSTEM_ID ).append( "] , " ); 356 errMsg.append( "JOKEN=[" ).append( JOKEN ).append( "]" ); 357 errMsg.append( CR ); 358 return false; 359 } 360 361 int row = 0; 362 // 検索結果が?帰ったとき?SYSTEM_ID ??されて?方の??タ(?を採用する? 363 for( int i=0; i<vals.length; i++ ) { 364 if( SYSTEM_ID.equalsIgnoreCase( vals[i][GE53_SYSTEM_ID] ) ) { row = i; break; } 365 } 366 367 // 3.8.5.0 (2006/03/06) プリンタIDが引数から、渡される?合?対? 368 if( PRTID == null ) { 369 PRTID = StringUtil.nval( vals[row][GE53_PRTID],PRTID ); 370 } 371 372 FGRUN = StringUtil.nval( vals[row][GE53_FGRUN], FGRUN ); 373 LANG = StringUtil.nval( vals[row][GE53_LANG], LANG ); 374 PRGDIR = StringUtil.nval( vals[row][GE53_PRGDIR], PRGDIR ); 375 PRGFILE = StringUtil.nval( vals[row][GE53_PRGFILE], PRGFILE ); 376 DMN_GRP = StringUtil.nval( vals[row][GE53_DMN_GRP], DMN_GRP ); // 3.8.0.5 (2005/08/26) 377 programFile = PRGDIR + HybsSystem.FS + PRGFILE ; 378 379 if( ( OUT_DIR != null && OUT_DIR.length() > 0 ) && 380 ( OUT_FILE != null && OUT_FILE.length() > 0 ) ) { 381 outputFile = OUT_DIR + HybsSystem.FS + OUT_FILE ; 382 // 3.8.6.0 (2006/09/29) 出力?フォル??自動生成を行います? 383 File dir = new File(OUT_DIR); 384 if( ! dir.exists() && ! dir.mkdirs() ) { 385 String errMsg = "?レクトリの作?に失敗しました?" + OUT_DIR + "]"; 386 throw new HybsSystemException( errMsg ); 387 } 388 } 389 390 return true; 391 } 392 393 /** 394 * エラーが存在した場合に、エラーメ?ージを返します? 395 * 396 * @return エラーメ?ージ String 397 */ 398 public String getErrMsg() { 399 return errMsg.toString(); 400 } 401 }