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.plugin.daemon;
017
018 import org.opengion.hayabusa.common.HybsSystem;
019 import org.opengion.hayabusa.common.HybsSystemException;
020 import org.opengion.hayabusa.report.GE50Access;
021 import org.opengion.hayabusa.report.ReportProcessing;
022 import org.opengion.fukurou.util.LogWriter;
023 import org.opengion.fukurou.util.StringUtil;
024 import org.opengion.fukurou.util.HybsTimerTask;
025 import org.opengion.fukurou.util.ApplicationInfo;
026 import org.opengion.fukurou.db.DBUtil;
027
028 import java.util.Map;
029 import java.util.HashMap;
030 import java.util.Date;
031
032 /**
033 * 【レポã?トå?力ã?帳票要求テーブルを監視して、帳票処ç�??ログラãƒ?‚’呼び出しますã?
034 * こã?クラスは、HybsTimerTask を継承した タイマã?タスククラスですã?
035 * startDaemon() がタイマã?タスクによって、呼び出されますã?
036 *
037 * @og.rev 4.3.4.4 (2009/01/01) プラグインåŒ?
038 * @og.group ãƒ??モン
039 *
040 * @version 4.0
041 * @author Kazuhiko Hasegawa
042 * @since JDK5.0,
043 */
044 public class Daemon_Report extends HybsTimerTask {
045 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
046 private static final String VERSION = "5.7.3.2 (2014/02/28)" ;
047
048 // 3.7.0.0 (2005/01/18) è¤?•°同時ãƒ??モン時ã?、同ä¸?¸³票IDは処ç�?�§きなã�??
049 // 実行中の帳票ID をセãƒ?ƒˆする、static Map
050 private static final Map<String,String> USE_LISTID = new HashMap<String,String>();
051
052 // 3.8.5.0 (2006/03/06) EXCELをオープンするファイル名に要求番号を使ã�??合ã?、true
053 private static final boolean EXCEL_NAME_USE_YKNO = HybsSystem.sysBool( "REPORT_EXCEL_NAME_USE_YKNO" );
054
055 // 5.2.0.0 (2010/09/01) Ver4互換モード対å¿?
056 private static final String OUT_FILE = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "OUTFILE" : "OUT_FILE";
057 private static final String OUT_DIR = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "OUTDIR" : "OUT_DIR";
058
059 // 3.7.0.0 (2005/01/18) GE53 に DMN_GRP追åŠ?�«よる、検索条件の変更
060 // 5.1.0.0 (2009/11/04) OUTDIR �OUT_DIR , OUTFILE �OUT_FILE
061 // 5.2.0.0 (2010/09/01) Ver4互換モード対å¿?
062 private static final String GE50_SELECT =
063 // "SELECT A.SYSTEM_ID,A.YKNO,A.GROUPID,A.LISTID,A.JOKEN,A.OUT_DIR,A.OUT_FILE,A.USRSET" +
064 "SELECT A.SYSTEM_ID,A.YKNO,A.GROUPID,A.LISTID,A.JOKEN,A."+OUT_DIR+",A."+OUT_FILE+",A.USRSET" +
065 " FROM GE50 A,GE53 B" +
066 " WHERE A.SYSTEM_ID = B.SYSTEM_ID" +
067 " AND A.JOKEN = B.JOKEN" +
068 " AND A.FGJ = '1'" +
069 " AND B.FGJ = '1'" +
070 " AND A.FGKAN = '1'" ;
071
072 private ReportProcessing rc = null;
073
074 // 3.5.4.9 (2004/02/25) メãƒ?‚»ージ出力時のループカウンãƒ?を追åŠ?
075 private int loopCnt = 0;
076 private static final int LOOP_COUNTER = 24; // カウンタã‚?4回に設å®?
077
078 // 3.7.0.0 (2005/01/18) GE53 に DMN_GRP追åŠ?�«よる、検索条件の変更
079 private String GE_SELECT = null;
080
081 // 3.8.5.0 (2006/03/06) プリンタIDがã?引数から渡されるå?合ã?対å¿?
082 private String PRTID = null;
083 // 3.8.5.0 (2006/03/06) ãƒ??モン名を設定しますã?
084 private String DMN_NAME = null;
085 // 3.8.5.0 (2006/03/06) ãƒ?ƒ�ãƒ?‚°用のフラグを追åŠ?�—ますã?
086 private boolean debug = false; // 小文字に修正
087
088 // 3.8.5.3 (2006/06/30) タイマã?タスクがキャンセルされたå?合ã?停止フラグ
089 private boolean running = true;
090
091 /** コネクションにアプリケーションæƒ??を追記するかどã�?�‹æŒ?®?*/
092 public static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
093
094 // 3.8.7.0 (2006/12/15) アクセスログ取得ã?為,ApplicationInfoオブジェクトを設å®?
095 private ApplicationInfo appInfo;
096 private final String DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対å¿?
097
098 /**
099 * こã?タイマã?タスクによって初期化されるアクションですã?
100 * パラメータを使用した初期化を行いますã?
101 *
102 * @og.rev 3.6.0.7 (2004/11/12) 新規追åŠ?
103 * @og.rev 3.7.0.0 (2005/01/18) 帳票定義マスタ(GE54)を参照するように仕様変更
104 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得ã?為,ApplicationInfoオブジェクトを設å®?
105 * @og.rev 4.0.1.0 (2007/12/19) GE50の検索é ?‚’シスãƒ?ƒ リソースで設定可能にする
106 * @og.rev 5.7.3.2 (2014/02/28) GE53の検索条件修正
107 */
108 @Override
109 public void initDaemon() {
110
111 // 3.7.0.0 (2005/01/18) GE50, GE54 の USRUPD に、デーモン名をセãƒ?ƒˆしますã?
112 // 3.7.1.1 (2005/05/31) GE50Access を使用して、DB登録を行いますã?
113
114 // 3.8.5.0 (2006/03/06) ãƒ??モン名を設定しますã?
115 DMN_NAME = getName();
116
117 StringBuilder buf = new StringBuilder();
118 buf.append( GE50_SELECT );
119
120 // SYSTEM_ID は、指定がなければ、å?件検索対象になりますã?
121 String systemId = getValue( "SYSTEM_ID" );
122 if( ! StringUtil.isNull( systemId ) ) {
123 // if( systemId != null && systemId.trim().length() > 0 ) {
124 buf.append( " AND A.SYSTEM_ID='" ).append( systemId ).append( "'" );
125 }
126
127 // 3.8.5.0 (2006/03/06) DMN_GRP は、å¿??æŒ?®?
128 // 5.1.9.0 (2010/08/01) Avoid if (x != y) ..; else ..;
129 String dmnGroup = getValue( "DMN_GRP" );
130 if( StringUtil.isNull( dmnGroup ) ) {
131 String errMsg = "ãƒ??モングループã?å¿??æŒ?®šですã?" ;
132 throw new HybsSystemException( errMsg );
133 }
134 else {
135 buf.append( " AND B.DMN_GRP='" ).append( dmnGroup ).append( "'" );
136 }
137
138 // 3.8.5.0 (2006/03/06) GE50 の検索条件に、MODBASE と MODNO を使用するã€?
139 // ãƒ??モン起動時に æœ?¤§数(MODBASE)と余り番号(MODNO)を渡しますã?
140 // æœ?¤§数(MODBASE)をå?に、検索時に、YKNOの余りを求め、これがã€?
141 // 引数の余り番号(MODNO)とä¸??する場合ã?み、å?ç�?‚’しますã?
142 String modBase = StringUtil.nval( getValue( "MODBASE" ),null );
143 String modNo = StringUtil.nval( getValue( "MODNO" ),null );
144 if( modBase != null && modNo != null ) {
145 buf.append( " AND MOD(A.YKNO," ).append( modBase ).append( ")=" ).append( modNo );
146 }
147
148 // 3.8.5.0 (2006/03/06) PRTID が指定されてã�?‚Œば、その値を使用する。なければ NULL
149 PRTID = StringUtil.nval( getValue( "PRTID" ), null );
150
151 // 3.8.5.0 (2006/03/06) PRT_GRP が指定されてã�?‚Œば、振åˆ?�¡件検索時に使用するã€?
152 String prtGgrp = getValue( "PRT_GRP" );
153 if( ! StringUtil.isNull( prtGgrp ) ) {
154 // if( prtGgrp != null && prtGgrp.trim().length() > 0 ) {
155 // buf.append( " AND B.PRT_GRP='" ).append( prtGgrp ).append( "'" );
156 buf.append( " AND B.PRTID='" ).append( prtGgrp ).append( "'" ); // 5.7.3.2 (2014/02/28) GE53ではPRTIDにPRI_GRPが指定されてã�?‚‹
157 }
158
159 // buf.append( " ORDER BY A.SYSTEM_ID,A.LISTID,A.GROUPID,A.YKNO
160 buf.append( " ORDER BY " ); // 4.0.1.0 (2007/12/19)
161 buf.append( HybsSystem.sys( "REPORT_DAEMON_ORDER_BY" ) );
162
163 GE_SELECT = buf.toString() ;
164
165 // 3.8.5.0 (2006/03/06) ãƒ?ƒ�ãƒ?‚°用のフラグを追åŠ?�—ますã?
166 debug = StringUtil.nval( getValue( "DEBUG" ),debug ) ;
167
168 if( debug ) {
169 System.out.println( "DMN_NAME=[" + DMN_NAME + "]" );
170 System.out.println( "MODNO=[" + modNo + "]" );
171 System.out.println( "QUERY=[" + GE_SELECT + "]" );
172 System.out.println( "EXCEL_NAME_USE_YKNO=[" + EXCEL_NAME_USE_YKNO + "]" );
173 }
174
175 // 3.8.7.0 (2006/12/15) アクセスログ取得ã?為,ApplicationInfoオブジェクトを設å®?
176 if( USE_DB_APPLICATION_INFO ) {
177 appInfo = new ApplicationInfo();
178 // ユーザーID,IPアドレス,ホスト名
179 appInfo.setClientInfo( systemId,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME );
180 // 画面ID,操ä½?プログラãƒ?D
181 appInfo.setModuleInfo( "ReportDaemon",PRTID,DMN_NAME );
182 }
183 else {
184 appInfo = null;
185 }
186 }
187
188 /**
189 * タイマã?タスクのãƒ??モン処ç�??開始ã?イントですã?
190 *
191 * @og.rev 3.5.2.0 (2003/10/20) vals 変数をã?ローカルに移å‹?
192 * @og.rev 3.5.4.8 (2004/02/23) タイãƒ?‚¹タンプをã€?¼‘0回に?‘回とするã€?
193 * @og.rev 3.6.0.0 (2004/09/17) タイãƒ?‚¹タンプをã€?¼’4回に?‘回とするã€?
194 * @og.rev 3.6.1.0 (2005/01/05) tyr ??catch ã‚?Exception から Throwable に変更ã€?
195 * @og.rev 3.7.0.0 (2005/01/18) è¤?•°同時ãƒ??モンでもã?同ä¸?¸³票IDは処ç�?�§きなã�?‚º、スキãƒ??しますã?
196 * @og.rev 3.7.0.4 (2005/03/18) エラー発生時に vals ã�?null ならã?HybsSystemException ã‚?throw するã€?
197 * @og.rev 3.7.1.1 (2005/05/31) GE50Access を使用して、DB登録を行いますã?
198 * @og.rev 3.8.0.0 (2005/06/07) EXCEL 取込時ã?完æ?フラグは、FG_DBIN としますã?
199 * @og.rev 3.8.0.0 (2005/06/07) rc.execute() 実行結果ã‚?boolean ではなくã?æ–?—å?(FGKAN_XX)で返しますã?
200 * @og.rev 3.8.5.0 (2006/03/06) EXCELファイル名に要求番号を使ã�??合ã?、帳票IDでの排他制御は不要ã?
201 * @og.rev 3.8.5.2 (2006/05/31) DEBUG æƒ??の強åŒ?
202 * @og.rev 3.8.6.0 (2006/06/30) タイマã?タスクがキャンセルされたå?合ã?処ç�?‚’追åŠ?running フラグ)
203 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得ã?為,ApplicationInfoオブジェクトを設å®?
204 * @og.rev 5.3.0.0 (2010/12/01) エラーハンドリングを修正
205 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対ç?
206 * @og.rev 5.7.0.4 (2013/11/29) listIdをGE50Accessに渡すよã�?�«する
207 */
208 @Override
209 protected void startDaemon() {
210 if( loopCnt % LOOP_COUNTER == 0 ) {
211 loopCnt = 1;
212 System.out.println();
213 System.out.print( toString() + " " + new Date() + " " );
214 }
215 else {
216 System.out.print( "." );
217 loopCnt++ ;
218 }
219
220 // 3.7.1.1 (2005/05/31) GE50Access を使用して、DB登録を行いますã?
221 GE50Access ge50 = null ;
222
223 int row = 0;
224 String[][] vals = null;
225 try {
226 // vals = DBUtil.dbExecute( GE_SELECT,null,appInfo ); // 3.8.7.0 (2006/12/15)
227 vals = DBUtil.dbExecute( GE_SELECT,null,appInfo, DBID ); // 5.5.5.1 (2012/08/07)
228 if( vals != null && vals.length > 0 ) {
229
230 // 3.7.1.1 (2005/05/31) GE50Access を使用して、DB登録を行いますã?
231 // 毎回 オブジェクトを構築しますã?登録日付が初期化されますã?
232 ge50 = new GE50Access( null,null,DMN_NAME ) ; // 3.8.5.0 (2006/03/06)
233
234 if( rc == null ) { rc = new ReportProcessing(); }
235 // 3.8.6.0 (2006/06/30) タイマã?タスクがキャンセルされたå?合ã?処ç�?‚’追åŠ?running フラグ)
236 for( row=0; running && row<vals.length; row++ ) {
237 // 3.7.0.0 (2005/01/18) 使用中の帳票IDのチェãƒ?‚¯と、使用時ã?登録
238 String systemId = vals[row][0] ;
239 String ykno = vals[row][1] ;
240 String listId = vals[row][3] ;
241 // 3.8.5.0 (2006/03/06) EXCELファイル名に要求番号を使ã�??合ã?、帳票IDでの排他制御は不要ã?
242 if( ! EXCEL_NAME_USE_YKNO ) {
243 synchronized( USE_LISTID ) {
244 if( USE_LISTID.get( listId ) != null ) {
245 continue; // 使用中ならã?飛ã?すã?
246 }
247 else {
248 USE_LISTID.put( listId,"DUMMY" );
249 }
250 }
251 }
252
253 // ãƒ?ƒ�ãƒ?‚°æƒ??をå?力しますã?
254 if( debug ) {
255 System.out.println();
256 System.out.print( "[" + DMN_NAME + "]:[" + ykno + "] START = " );
257 System.out.println( new Date() );
258 }
259
260 // 3.7.1.1 (2005/05/31) GE50Access を使用して、DB登録を行いますã?
261 ge50.setSystemId( systemId );
262 ge50.setYkno( ykno );
263 ge50.updateGE50( GE50Access.FG_RUN );
264
265 ge50.setListId( listId ); // 5.7.0.4 (2013/11/29)
266
267 // system_id,ykno,groupid,listid,joken,outdir,outfile,usrset
268 rc.setSystemId( systemId );
269 rc.setYkno( ykno );
270 rc.setGroupId( vals[row][2] );
271 rc.setListId( listId );
272 rc.setJoken( vals[row][4] );
273 // rc.setPrtid( PRTID ); // 3.8.5.0 (2006/03/06) PRTIDを使用するã€?
274 rc.setPrtId( PRTID ); // 4.3.4.4 (2009/01/01) メソãƒ?ƒ‰名変更
275 rc.setOutDir( vals[row][5] );
276 rc.setOutFile( vals[row][6] );
277 rc.setDebug( debug ); // 3.8.5.0 (2006/03/06) DEBUGを追åŠ??
278
279 // 3.8.0.0 (2005/06/07) 実行結果ã‚?boolean ではなくã?æ–?—å?(FGKAN_XX)で返しますã?
280 String fgkan = rc.execute();
281 if( fgkan == null ) {
282 fgkan = GE50Access.FG_ERR2 ;
283 String errMsg = rc.getErrMsg();
284 // 3.7.1.1 (2005/05/31) GE50Access を使用して、DB登録を行いますã?
285 ge50.insertErrorGE56( errMsg );
286 }
287
288 // 3.7.1.1 (2005/05/31) GE50Access を使用して、DB登録を行いますã?
289 ge50.updateGE50( fgkan );
290
291 rc.clear();
292 // 3.8.5.0 (2006/03/06) EXCELファイル名に要求番号を使ã�??合ã?、帳票IDでの排他制御は不要ã?
293 if( ! EXCEL_NAME_USE_YKNO ) {
294 // 3.7.0.0 (2005/01/18) 使用中の帳票IDの削除
295 synchronized( USE_LISTID ) {
296 USE_LISTID.remove( listId );
297 }
298 }
299
300 // ãƒ?ƒ�ãƒ?‚°æƒ??をå?力しますã?
301 if( debug ) {
302 System.out.println();
303 System.out.print( "[" + DMN_NAME + "]:[" + ykno + "] END = " );
304 System.out.println( new Date() );
305 }
306 }
307 }
308 }
309 // catch( Throwable ex ) { // 3.6.1.0 (2005/01/05)
310 // String errMsg = StringUtil.stringStackTrace( ex ) ;
311 // LogWriter.log( errMsg );
312 //
313 // // 3.7.1.1 (2005/05/31) GE50Access を使用して、DB登録を行いますã?
314 // if( ge50 != null ) {
315 // ge50.insertErrorGE56( errMsg );
316 // ge50.updateGE50( GE50Access.FG_ERR1 );
317 // }
318 //
319 // // 3.7.0.4 (2005/03/18) vals ã�?null ならã?DB接続エラーがæ¿?Žš
320 // if( vals == null ) { throw new HybsSystemException( ex ); }
321 //
322 // if( ! EXCEL_NAME_USE_YKNO ) {
323 // // 3.7.0.0 (2005/01/18) エラー発生時の、使用中の帳票IDの削除
324 // synchronized( USE_LISTID ) {
325 // USE_LISTID.remove( vals[row][3] ); // listId
326 // }
327 // }
328 //
329 // rc = null;
330 // }
331 // 5.3.0.0 (2010/12/01) エラーハンドリングを修正
332 catch( Throwable ex ) { // 3.6.1.0 (2005/01/05)
333 rc = null;
334
335 String errMsg = StringUtil.stringStackTrace( ex ) ;
336 System.out.println( errMsg );
337 LogWriter.log( errMsg );
338
339 if( ! EXCEL_NAME_USE_YKNO ) {
340 // 3.7.0.0 (2005/01/18) エラー発生時の、使用中の帳票IDの削除
341 synchronized( USE_LISTID ) {
342 USE_LISTID.remove( vals[row][3] ); // listId
343 }
344 }
345
346 // 3.7.1.1 (2005/05/31) GE50Access を使用して、DB登録を行いますã?
347 if( ge50 != null ) {
348 ge50.insertErrorGE56( errMsg );
349 ge50.updateGE50( GE50Access.FG_ERR1 );
350 }
351
352 // 3.7.0.4 (2005/03/18) vals ã�?null ならã?DB接続エラーがæ¿?Žš
353 if( vals == null ) {
354 errMsg += "(vals == null)" ;
355 System.out.println( errMsg );
356 LogWriter.log( errMsg );
357 throw new HybsSystemException( ex );
358 }
359 }
360 }
361
362 /**
363 * こã?タイマã?タスクのcancel() メソãƒ?ƒ‰をオーバã?ライドしますã?
364 * HybsTimerTaskManager#cancelTask( int ) を実行しますã?
365 *
366 * @og.rev 3.8.5.3 (2006/06/30) 新規追åŠ?
367 *
368 * @return スケジュールされてã�?‚‹ 1 回以上実行されなã�??合に true
369 * @see java.util.TimerTask#cancel()
370 */
371 @Override
372 public boolean cancel() {
373 running = false;
374 return super.cancel();
375 }
376 }