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 }