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.fukurou.util.LogWriter;
020 import org.opengion.fukurou.util.StringUtil;
021 import org.opengion.fukurou.util.ApplicationInfo;
022 import org.opengion.fukurou.db.DBUtil;
023 import org.opengion.fukurou.mail.MailTX ;
024
025 import java.util.Arrays;
026
027 /**
028 * 帳票要求テーブル(GE50)と、エラー??ブル(GE56)に対して、データ書込みを行います?
029 *
030 * こ?クラスでは?つの機?を実?て?す?
031 *
032 * ●要求番号採番機???makeYkno()
033 * 新たな要求番号を採番しま?シーケンスより取?
034 * 採番後??の要求番号(ykno)もこの値に再セ?されます?
035 * ●帳票要求テーブル??タセ?機???insertGE50( final String fgkan )
036 * ?変数にセ?されて?値を利用して、データ登録を行います?
037 * 繰返し登録した??合?、変更する値のみを??変数にセ?してから?
038 * こ?メソ?を呼び出してください?
039 * なお?完?フラグ(fgkan)は、?部変数に持って??め?外部から?してください?
040 * ●完?フラグ設定機???updateGE50( final String fgkan )
041 * ?変数にセ?されて?、systemId と ykno を利用して、データ登録を行います?
042 * なお?完?フラグ(fgkan)は、?部変数に持って??め?外部から?してください?
043 * ●エラーメ?ージ登録機???insertErrorGE56( final String inErrMsg )
044 * エラー発生時に、エラーメ?ージを登録します?
045 * ?変数にセ?されて?、systemId と ykno を利用して、データ登録を行います?
046 * なお?こ?メソ?は、要求テーブルの完?フラグは、なにもしませんので?
047 * 完?フラグ設定機?と併用してください?
048 * また?シス?パラメータ の COMMON_MAIL_SERVER(メールサーバ?)と
049 * ERROR_MAIL_FROM_USER(エラーメール発信?と、ERROR_MAIL_TO_USERS(エラーメール受信?
050 * がすべて設定されて?場合に、エラー??のメール送信を行います?
051 *
052 * @og.rev 3.8.0.0 (2005/06/07) 新規追?
053 * @og.group 帳票シス?
054 *
055 * @version 4.0
056 * @author Kazuhiko Hasegawa
057 * @since JDK5.0,
058 */
059 public class GE50Access {
060 /** 完?フラグのフラグ定義(登録) {@value} */
061 public static final String FG_SET = "1"; // 登録
062 /** 完?フラグのフラグ定義(済み) {@value} */
063 public static final String FG_OK = "2"; // 済み
064 /** 完?フラグのフラグ定義(実行中) {@value} */
065 public static final String FG_RUN = "3"; // 実行中
066 /** 完?フラグのフラグ定義(手動) {@value} */
067 public static final String FG_HAND = "4"; // 手動
068 /** 完?フラグのフラグ定義(印刷?) {@value} */
069 public static final String FG_WAIT = "5"; // 印刷?
070 /** 完?フラグのフラグ定義(取込? {@value} */
071 public static final String FG_DBIN = "6"; // 取込?Ver 3.8.0.0
072 /** 完?フラグのフラグ定義(??モンエラー) {@value} */
073 public static final String FG_ERR1 = "7"; // ??モンエラー
074 /** 完?フラグのフラグ定義(アプリエラー) {@value} */
075 public static final String FG_ERR2 = "8"; // アプリエラー
076
077 // GE50 の要求番号のシーケンスを取得します?
078 private static final String GE50_SEQ = "SELECT GE50_SEQUENCE.NEXTVAL FROM DUAL" ;
079
080 // 5.2.0.0 (2010/09/01) Ver4互換モード対?
081 private static final String OUT_FILE = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "OUTFILE" : "OUT_FILE";
082 private static final String OUT_DIR = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "OUTDIR" : "OUT_DIR";
083
084 // GE50 に要求データを設定します?
085 // 5.0.3.0 (2009/11/04) OUTFILE ?OUT_FILE , OUTDIR ?OUT_DIR
086 // 5.2.0.0 (2010/09/01) Ver4互換モード対?
087 private static final String GE50_INSERT =
088 "INSERT INTO GE50" +
089 // " (SYSTEM_ID,YKNO,LISTID,JOKEN,FGKAN,OUT_DIR,OUT_FILE,COMMENTS," +
090 " (SYSTEM_ID,YKNO,LISTID,JOKEN,FGKAN,"+OUT_DIR+","+OUT_FILE+",COMMENTS," +
091 " FGJ,DYSET,DYUPD,USRSET,USRUPD,PGUPD,DMN_NAME,DMN_HOST )" +
092 " VALUES" +
093 " (?,?,?,?,?,?,?,SUBSTRB(?,1,100)," +
094 " '1',?,?,?,?,?,?,? )" ;
095
096 // GE50 の完?フラグを設定するSQL?す?
097 // 3.8.0.4 (2005/08/08) PGUPD も更新するように変更
098 private static final String GE50_UPDATE =
099 "UPDATE GE50 SET FGKAN = ? , DYUPD = ? , DMN_NAME = ? , DMN_HOST = ? " +
100 " WHERE FGJ = '1'" +
101 " AND SYSTEM_ID = ?" +
102 " AND YKNO = ?" ;
103
104 // GE56 のエラー??を書き込?め?SQL?す?
105 private static final String GE56_ERRMSG =
106 "INSERT INTO GE56" +
107 " ( FGJ,SYSTEM_ID,YKNO,ERRMSG,DYSET,DYUPD,USRSET,USRUPD,PGUPD )" +
108 " VALUES ( '1',? ,? ,? ,? ,? ,? ,? ,? )" ;
109
110 /** コネクションにアプリケーション??を追記するかど???*/
111 public static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
112
113 // 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
114 private final ApplicationInfo appInfo;
115 private final String DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
116
117 private final String USRSET ;
118 private final String PGUPD ;
119 private final String DMN_NAME ; // 3.8.5.0 (2006/03/02)
120
121 private String systemId = null;
122 private String ykno = null;
123 private String listid = null;
124 private String joken = null;
125 private String outdir = null;
126 private String outfile = null;
127 private String comments = null;
128
129 /**
130 * ユーザーとプログラ?Dを指定して、オブジェクトを構築します?
131 * こ?オブジェクトを構築した時刻を?DYSET、DYUPD にセ?します?
132 * つまり?こ?オブジェクトで登録する??の??タは、すべて同?刻での登録になります?
133 *
134 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
135 *
136 * @param usrset ユーザー
137 * @param prgupd プログラ?D
138 * @param dmnName 更新??モン?
139 */
140 public GE50Access( final String usrset, final String prgupd ,final String dmnName) {
141 USRSET = substr( usrset, 10, "UNNONE" ) ;
142 PGUPD = substr( prgupd, 10, "UNNONE" ) ;
143 DMN_NAME = substr( dmnName,50, "UNNONE" ) ;
144
145 // 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
146 if( USE_DB_APPLICATION_INFO ) {
147 appInfo = new ApplicationInfo();
148 // ユーザーID,IPアドレス,ホスト名
149 appInfo.setClientInfo( USRSET,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME );
150 // 画面ID,操?プログラ?D
151 appInfo.setModuleInfo( "GE50Access",null,DMN_NAME );
152 }
153 else {
154 appInfo = null;
155 }
156 }
157
158 /**
159 * systemId をセ?します?
160 *
161 * @param systemId シス?ID
162 */
163 public void setSystemId ( final String systemId ) { this.systemId = systemId; }
164
165 /**
166 * systemId を取得します?
167 *
168 * @return シス?ID
169 */
170 public String getSystemId() { return systemId; }
171
172 /**
173 * listid をセ?します?
174 *
175 * @param listid 帳票ID
176 */
177 public void setListId( final String listid ) { this.listid = listid; }
178
179 /**
180 * joken をセ?します?
181 *
182 * @param joken 振?件
183 */
184 public void setJoken( final String joken ) { this.joken = joken; }
185
186 /**
187 * outdir をセ?します?
188 *
189 * @param outdir 出力DIR
190 */
191 public void setOutDir( final String outdir ) { this.outdir = outdir; }
192
193 /**
194 * outfile をセ?します?
195 *
196 * @param outfile 出力ファイル
197 */
198 public void setOutFile( final String outfile ) { this.outfile = outfile; }
199
200 /**
201 * comments をセ?します?
202 *
203 * @param comments コメン?
204 */
205 public void setComments( final String comments ) { this.comments = comments; }
206
207 /**
208 * ykno をセ?します?
209 *
210 * @param ykno 要求番号
211 */
212 public void setYkno( final String ykno ) { this.ykno = ykno; }
213
214 /**
215 * ykno を取得します?
216 *
217 * @return 要求番号
218 */
219 public String getYkno() { return ykno; }
220
221 /**
222 * 新たな要求番号を採番しま?シーケンスより取?
223 * 採番後??の要求番号(ykno)もこの値に再セ?されます?
224 *
225 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
226 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
227 *
228 * @return 要求番号
229 */
230 public String makeYkno() {
231 try {
232 // String[][] vals = DBUtil.dbExecute( GE50_SEQ,null,appInfo ); // 3.8.7.0 (2006/12/15)
233 String[][] vals = DBUtil.dbExecute( GE50_SEQ,null,appInfo, DBID ); // 5.5.5.1 (2012/08/07)
234 ykno = vals[0][0].trim();
235 }
236 catch( RuntimeException ex ) {
237 String errMsg = "要求番号の採番に失敗しました? + HybsSystem.CR
238 + " SQL=" + GE50_SEQ + HybsSystem.CR
239 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正
240 LogWriter.log( errMsg );
241 LogWriter.log( ex );
242 }
243 return ykno ;
244 }
245
246 /**
247 * 帳票要求テーブルに??タをセ?します?
248 * ?変数にセ?されて?値を利用して、データ登録を行います?
249 * 繰返し登録した??合?、変更する値のみを??変数にセ?してから?
250 * こ?メソ?を呼び出してください?
251 * なお?完?フラグ(fgkan)は、?部変数に持って??め?外部から?してください?
252 *
253 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
254 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
255 *
256 * @param fgkan 完?フラグ
257 */
258 public void insertGE50( final String fgkan ) {
259 String DYSET = HybsSystem.getDate( "yyyyMMddHHmmss" ) ; // 3.8.5.0 (2006/03/02)
260
261 // GE50_INSERT の引数
262 String[] args = new String[] {
263 systemId, // SYSTEM_ID
264 ykno , // YKNO
265 StringUtil.nval( listid,"NO_LIST" ), // LISTID
266 StringUtil.nval( joken,"NO_JOKEN" ), // JOKEN
267 fgkan, // FGKAN
268 StringUtil.nval( outdir,"" ), // OUT_DIR
269 StringUtil.nval( outfile,"" ), // OUT_FILE
270 StringUtil.nval( comments,"" ), // COMMENTS
271 DYSET, // DYSET
272 DYSET, // DYUPD
273 USRSET, // USRSET
274 USRSET, // USRUPD
275 PGUPD, // PGUPD
276 DMN_NAME, // DMN_NAME
277 HybsSystem.HOST_NAME // DMN_HOST
278 } ;
279
280 try {
281 // DBUtil.dbExecute( GE50_INSERT,args,appInfo ); // 3.8.7.0 (2006/12/15)
282 DBUtil.dbExecute( GE50_INSERT,args,appInfo, DBID ); // 5.5.5.1 (2012/08/07)
283 }
284 catch( RuntimeException ex ) {
285 String errMsg = "帳票要求テーブル??タセ?に失敗しました? + HybsSystem.CR
286 + " SQL=" + GE50_INSERT + HybsSystem.CR
287 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正
288 LogWriter.log( errMsg );
289 LogWriter.log( ex );
290 }
291 }
292
293 /**
294 * 処??に完?フラグを設定します?
295 * ?変数にセ?されて?、systemId と ykno を利用して、データ登録を行います?
296 * なお?完?フラグ(fgkan)は、?部変数に持って??め?外部から?してください?
297 *
298 * @og.rev 3.8.0.4 (2005/08/08) PGUPDを追?
299 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
300 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
301 *
302 * @param fgkan 完?フラグ
303 */
304 public void updateGE50( final String fgkan ) {
305 String DYSET = HybsSystem.getDate( "yyyyMMddHHmmss" ) ; // 3.8.5.0 (2006/03/02)
306
307 String[] args = new String[] {
308 fgkan, // FGKAN
309 DYSET, // DYUPD
310 DMN_NAME, // DMN_NAME
311 HybsSystem.HOST_NAME, // DMN_HOST
312 systemId, // SYSTEM_ID
313 ykno // YKNO
314 } ;
315
316 try {
317 // DBUtil.dbExecute( GE50_UPDATE,args,appInfo ); // 3.8.7.0 (2006/12/15)
318 DBUtil.dbExecute( GE50_UPDATE,args,appInfo, DBID ); // 5.5.5.1 (2012/08/07)
319 }
320 catch( RuntimeException ex ) {
321 String errMsg = "完?フラグ設定に失敗しました? + HybsSystem.CR
322 + " SQL=" + GE50_UPDATE + HybsSystem.CR
323 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正
324 LogWriter.log( errMsg );
325 LogWriter.log( ex );
326 }
327 }
328
329 /**
330 * エラー発生時に、エラーメ?ージを登録します?
331 * ?変数にセ?されて?、systemId と ykno を利用して、データ登録を行います?
332 *
333 * @og.rev 3.8.5.3 (2006/06/30) エラーメ?ージ?4000Byte以下にする?
334 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
335 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
336 *
337 * @param inErrMsg エラーメ?ージ
338 */
339 public void insertErrorGE56( final String inErrMsg ) {
340
341 String outErrMsg = (inErrMsg == null) ? "" : inErrMsg.trim();
342 if( outErrMsg.length() > 2000 ) {
343 String code = HybsSystem.sys( "DB_ENCODE" );
344 byte[] byteValue = StringUtil.makeByte( outErrMsg,code );
345 if( byteValue.length > 4000 ) {
346 outErrMsg = StringUtil.makeString( byteValue,0,4000,code );
347 }
348 }
349 String DYSET = HybsSystem.getDate( "yyyyMMddHHmmss" ) ; // 3.8.5.0 (2006/03/02)
350
351 String[] args = new String[] {
352 systemId,
353 ykno,
354 outErrMsg , // ERRMSG
355 DYSET, // DYSET
356 DYSET, // DYUPD
357 USRSET, // USRSET
358 USRSET, // USRUPD
359 PGUPD }; // PGUPD
360
361 try {
362 // DBUtil.dbExecute( GE56_ERRMSG,args,appInfo ); // 3.8.7.0 (2006/12/15)
363 DBUtil.dbExecute( GE56_ERRMSG,args,appInfo, DBID ); // 5.5.5.1 (2012/08/07)
364 }
365 catch( RuntimeException ex ) {
366 String errMsg = "エラーメ?ージ??ブルセ?に失敗しました? + HybsSystem.CR
367 + " SYSTEM_ID=[" + systemId + "] , YKNO=[" + ykno + "]" + HybsSystem.CR
368 + " SQL=" + GE56_ERRMSG + HybsSystem.CR
369 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正
370 LogWriter.log( errMsg );
371 LogWriter.log( ex );
372 }
373 sendMail( outErrMsg ); // 3.8.0.4 (2005/08/08)
374 }
375
376 /**
377 * substring を補完する簡易メソ?
378 *
379 * substring で、文字をカ?する場合???長が?カ?する?数より
380 * 長??があります?ここでは、最大長に制限をかけることが目?ので
381 * 入力文字長が指定文字数より小さ?ースがあります?そ?チェ??
382 * 簡易的に実行できるように、このメソ?で処?ます?
383 *
384 * @param in 入力文?
385 * @param len ??数
386 * @param defVal NULL 時?初期値
387 *
388 * @return ???数でカ?された新しい??
389 */
390 private String substr( final String in, final int len, final String defVal ) {
391 String rtn = in;
392 if( in == null ) {
393 rtn = defVal;
394 }
395 else if( in.length() > len ) {
396 rtn = in.substring( 1,len );
397 }
398
399 return rtn ;
400 }
401
402 /**
403 * エラー??のメール送信を行います?
404 * エラーメールは、シス?パラメータ の COMMON_MAIL_SERVER(メールサーバ?)と
405 * ERROR_MAIL_FROM_USER(エラーメール発信?と、ERROR_MAIL_TO_USERS(エラーメール受信?
406 * がすべて設定されて?場合に??信されます?
407 *
408 * @og.rev 3.8.0.4 (2005/08/08) 新規追?
409 * @og.rev 5.7.0.4 (2013/11/29) listIdの絞込み
410 *
411 * @param inErrMsg エラーメ?ージ
412 */
413 private void sendMail( final String inErrMsg ) {
414
415 String host = HybsSystem.sys( "COMMON_MAIL_SERVER" );
416 String from = HybsSystem.sys( "ERROR_MAIL_FROM_USER" );
417 String[] to = StringUtil.csv2Array( HybsSystem.sys( "ERROR_MAIL_TO_USERS" ) );
418 String match_txt = HybsSystem.sys( "REPORT_ERRMAIL_REGEX" ); // 5.7.0.4 (2013/11/29)
419
420 if( host != null && from != null && to.length > 0 ) {
421 if( match_txt == null || match_txt.length() == 0
422 || listid == null || listid.length() == 0
423 || listid.matches( match_txt ) ){ // 5.7.0.4 (2013/11/29)
424 // 3.8.5.0 (2006/03/02) DMN_NAME、DMN_HOST 追?
425 // 5.7.0.4 (2013/11/29) listid追?
426 String subject = "SYSTEM_ID=[" + systemId + "] , YKNO=[" + ykno + "] , "
427 + "DMN_NAME=[" + DMN_NAME + "] , DMN_HOST=[" + HybsSystem.HOST_NAME + "]"
428 + "LISTID=[" + listid +"]";
429 try {
430 MailTX tx = new MailTX( host );
431 // tx.setHost( host );
432 tx.setFrom( from );
433 tx.setTo( to );
434 tx.setSubject( "帳票エラー?? + subject );
435 tx.setMessage( inErrMsg );
436 tx.sendmail();
437 }
438 catch( Throwable ex ) {
439 String errMsg = "エラー時メール送信に失敗しました? + HybsSystem.CR
440 + " SUBJECT:" + subject + HybsSystem.CR
441 + " HOST:" + host + HybsSystem.CR
442 + " FROM:" + from + HybsSystem.CR
443 + " TO:" + Arrays.toString( to ) + HybsSystem.CR
444 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正
445 LogWriter.log( errMsg );
446 LogWriter.log( ex );
447 }
448 }
449 }
450 }
451 }