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 }