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 }