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.StringUtil; 020 021 import org.opengion.fukurou.mail.MailReceiveListener ; 022 import org.opengion.fukurou.mail.MailTX ; 023 import org.opengion.fukurou.mail.MailMessage ; 024 import org.opengion.fukurou.mail.MailAttachFiles ; 025 026 import java.util.Date; 027 028 /** 029 * MailReceiveListener ã®å®Ÿè£?‚¯ãƒ©ã‚¹ã§ã™ã? 030 * MailRX クラスã«ã‚»ãƒ?ƒˆã™ã‚‹ã“ã¨ã§ã€ãƒ¡ãƒ¼ãƒ«?‘ä»¶ã”ã¨ã« receive( MailMessage ) メソãƒ?ƒ‰ã? 031 * 呼ã³å‡ºã•れã¾ã™ã? 032 * メール?‘ä»¶ã«ã€æ·»ä»˜ãƒ•ァイルãŒè¤?•°ç™»éŒ²ã•れã¦ã?‚‹å ´åˆã?処ç?‚’行ã£ã¦ã?¾ã™ã? 033 * 添付ファイルã”ã¨ã«è¦æ±‚番å·ã‚’採番ã—ã¦ã€è¦æ±‚番å·.xls ã¨ã—ã¦ã‚»ãƒ¼ãƒ–ã—ã€å¸³ç¥¨è¦æ±‚テーブル㫠034 * 書ãè¾¼ã¿ã¾ã™ã? 035 * 036 * @og.rev 3.8.0.0 (2005/06/07) æ–°è¦è¿½åŠ? 037 * @og.group 帳票シスãƒ?ƒ 038 * 039 * @version 4.0 040 * @author Kazuhiko Hasegawa 041 * @since JDK5.0, 042 */ 043 public class ExcelInsertReceiveListener implements MailReceiveListener { 044 045 // EXCELå–込時ã«ä½¿ç”¨ã™ã‚‹ãƒ?ƒ³ãƒãƒ©ãƒªãƒ•ォルãƒ?。ファイルåã?ã€è¦æ±‚番å·.xls 046 private final String EXCELIN_URL = 047 HybsSystem.url2dir( StringUtil.nval( 048 HybsSystem.sys( "EXCEL_IN_FILE_URL" ) , 049 HybsSystem.sys( "FILE_URL" ) + "EXCELIN/" ) ) ; 050 051 private GE50Access ge50 = null; 052 053 /** 054 * メールå—信処ç?§ã€?¼‘メールå—ä¿¡ã”ã¨ã«å‘¼ã³å‡ºã•れã¾ã™ã? 055 * 処ç?µæžœã‚’ã?boolean ã§è¿”ã—ã¾ã™ã? 056 * 057 * @param message MailMessageオブジェクãƒ? 058 * 059 * @return 処ç?µæžœ(æ£å¸¸:true / 異常:false) 060 */ 061 public boolean receive( final MailMessage message ) { 062 System.out.println(); 063 System.out.println( "Receive " + new Date() ); 064 065 String errMsg ; 066 boolean okFlag = false; 067 068 // 毎回 オブジェクトを構築ã—ã¾ã™ã?登録日付ãŒåˆæœŸåŒ–ã•れã¾ã™ã? 069 ge50 = new GE50Access( "CXXXXX","M_RECEIVE","ExcelInsert" ); 070 071 try { 072 String from = message.getHeader( "From" ); 073 String subject = message.getSubject(); 074 String content = message.getContent(); 075 String msgid = message.getMessageID(); 076 String comments = from + " " + subject + " " + msgid ; 077 078 String systemId = getContentParam( content,"SYSTEM_ID" ); 079 if( systemId == null ) { 080 errMsg = "メール本æ–?« SYSTEM_ID=[xx] ã®ã‚ーワードãŒå˜åœ¨ã—ã¾ã›ã‚“ã€? ; 081 errorReport( message,errMsg ) ; 082 return okFlag; 083 } 084 085 System.out.println( " From:" + from ); 086 String joken = getContentParam( content,"JOKEN" ); 087 if( joken == null ) { joken = "EXCELIN"; } 088 089 ge50.setSystemId( systemId ); 090 ge50.setJoken ( joken ); 091 ge50.setComments( comments ); 092 093 MailAttachFiles attFiles = new MailAttachFiles( message.getMessage() ); 094 String[] files = attFiles.getNames(); 095 if( files == null || files.length == 0 ) { 096 errMsg = "メール㫠EXCEL 添付ファイルãŒå˜åœ¨ã—ã¾ã›ã‚“ã€? ; 097 errorReport( message,errMsg ) ; 098 return okFlag; 099 } 100 101 // æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ã®æ•°ã?‘処ç?—ã¾ã™ã? 102 for( int i=0; i<files.length; i++ ) { 103 String ykno = ge50.makeYkno(); // æ–°ãŸãªè¦æ±‚番å·ãŒå?部ã«ã‚‚ã‚»ãƒ?ƒˆã•れるã? 104 String file = ykno + ".xls" ; 105 String attFile = files[i]; 106 107 // LISTID ã‚’å–å¾—ã—ã¾ã™ã? EXCELファイルåã«(帳票ID)ã‚’å?れã¾ã™ã? 108 int st = attFile.indexOf( '(' ); 109 int ed = attFile.indexOf( ')',st ); 110 if( st < 0 || ed < 0 ) { 111 errMsg = "EXCEL 添付ファイルã«(帳票ID)ãŒå˜åœ¨ã—ã¾ã›ã‚“ã€?" + attFile + "]" ; 112 errorReport( message,errMsg ) ; 113 return okFlag; 114 } 115 116 String listId = attFile.substring( st+1,ed ); 117 if( listId.length() == 0 ) { 118 errMsg = "EXCEL 添付ファイルã®(帳票ID)ã‚’å?りå?ã›ã¾ã›ã‚“ã€?" + attFile + "]" ; 119 errorReport( message,errMsg ) ; 120 return okFlag; 121 } 122 123 String fileDir = EXCELIN_URL + systemId + "/" + listId + "/" ; 124 125 attFiles.saveFileName( fileDir,file,i ); 126 127 ge50.setListId( listId ); 128 ge50.setOutDir( fileDir ); 129 ge50.setOutFile( files[i] ); 130 131 ge50.insertGE50( GE50Access.FG_SET ); 132 133 System.out.println( attFile + " -> " + file ); 134 } 135 System.out.println( " End." ); 136 okFlag = true; 137 } 138 catch( Throwable ex ) { 139 errMsg = StringUtil.stringStackTrace( ex ); 140 errorReport( message,errMsg ) ; 141 okFlag = false; 142 } 143 return okFlag; 144 } 145 146 /** 147 * メール処ç?¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå?åˆã?処ç?‚’行ã„ã¾ã™ã? 148 * 処ç??ã€?¼“種類ã‚りã¾ã™ã? 149 * ?‘.エラーメールをã?EXCELIN_URL/ERROR_MAIL フォルãƒ?«ã€ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ID.txt ã§ä¿å˜ã—ã¾ã™ã? 150 * ?’.COMMON_MAIL_SERVER 㨠ERROR_MAIL_TO_USERS ãŒè¨å®šã•れã¦ã?‚‹å ´åˆã«ã€? 151 * ãã?ã‚ã¦å…ˆã«ã€è¿”信メールをé?ä¿¡ã—ã¾ã™ã? 152 * ?“.GE50(å¸³ç¥¨è¦æ±‚テーブル)ã¨ã€GE51(帳票エラーãƒ??ブル)ã«ã‚¨ãƒ©ãƒ¼çжæ³ã‚’書ãè¾¼ã¿ã¾ã™ã? 153 * 154 * @param message MailMessageオブジェクãƒ? 155 * @param errorMessage エラーメãƒ?‚»ãƒ¼ã‚¸ 156 */ 157 private void errorReport( final MailMessage message,final String errorMessage ) { 158 // エラーメールã‚?æ‰?®šã?ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã«å‡ºåŠ›ã—ã¾ã™ã? 159 message.saveSimpleMessage( EXCELIN_URL + "/ERROR_MAIL/" ); 160 161 String subject = "EXCELå–込メールå—ä¿¡ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€?; 162 String org_from = message.getHeader( "From" ) ; 163 String ord_subject = message.getSubject(); 164 String content = message.getContent(); 165 String errMsg = subject + HybsSystem.CR 166 + " Subject=" + ord_subject + " From=" + org_from + HybsSystem.CR 167 + " MessageID=" + message.getMessageID() + HybsSystem.CR 168 + " Save ErrorMail=" + EXCELIN_URL + "/ERROR_MAIL/" + HybsSystem.CR 169 + errorMessage + HybsSystem.CR 170 + "===========================================================" 171 + HybsSystem.CR 172 + content ; 173 174 if( ge50 != null ) { 175 String systemId = ge50.getSystemId() ; 176 if( systemId == null ) { ge50.setSystemId( "ERR" ); } 177 178 // エラー時ã?è¦æ±‚番å·ã¯ã€æ–°ãŸã«æŽ¡ç•ªã—ãªãŠã—ã¾ã™ã? 179 ge50.makeYkno(); 180 181 ge50.insertGE50( GE50Access.FG_ERR2 ); 182 ge50.insertErrorGE56( errMsg ); 183 } 184 185 // host 㨠user ã®ãƒ¡ãƒ¼ãƒ«é€ä¿¡å…ˆãŒè¨˜è¿°ã•れã¦ã?‚‹å ´åˆã?ã€ãƒ¡ãƒ¼ãƒ«ã§ã‚‚転é€ã™ã‚‹ã? 186 String host = message.getHost(); 187 String from = message.getUser(); 188 189 if( host != null && from != null ) { 190 String[] to = new String[] { org_from }; 191 String[] cc = StringUtil.csv2Array( HybsSystem.sys( "ERROR_MAIL_TO_USERS" ) ); 192 193 MailTX tx = new MailTX( host ); 194 // tx.setHost( host ); 195 tx.setFrom( from ); 196 tx.setTo( to ); 197 if( cc.length > 0 ) { tx.setCc( cc ); } 198 tx.setSubject( subject ); 199 tx.setMessage( errMsg ); 200 tx.sendmail(); 201 } 202 } 203 204 /** 205 * メãƒ?‚»ãƒ¼ã‚¸æœ¬æ–?‚ˆã‚Šã?æŒ?®šã?ã‚ーã«é–¢é€£ä»˜ã‘られã¦ã?‚‹æƒ??ã‚’å?りå?ã—ã¾ã™ã? 206 * ã“れã¯ã€æŒ‡å®šã?æ–?—å?=[è¨å®šå?] ã¨ã?†ã‚ーワードã‹ã‚‰ã?è¨å®šå?ã‚’å–りå?ã—ã¾ã™ã? 207 * æŒ?®šã?æ–?—å?ã¨=ã®ã¨é–“ã«ã€ã‚¹ãƒšã?スをå?れãªã?§ãã ã•ã„ã€? 208 * è¨å®šå?ã®åˆ?‚Šå‡ºã—ã?ã€?æŒ?®šã?æ–?—å?=[" 㨠"]" ã®é–“ã?æ–?—å?ã‚’å?りå?ã—ã¾ã™ã? 209 * å†?ƒ¨ã«ã‚¹ãƒšã?スãŒå?ã£ã¦ã?¦ã‚‚ã?å•題ã‚りã¾ã›ã‚“。ãŸã?—ã€] ãŒå?ã£ã¦ã?‚‹å ´åˆã?ã€? 210 * æ£å¸¸ã«åˆ?‚Šå‡ºã™ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“ã—ã?エスケープ文å—も用æ„ã—ã¦ã?¾ã›ã‚“ã€? 211 * 212 * @param content コンãƒ?ƒ³ãƒ??æ–?—å? 213 * @param key æƒ??ã‚’å?りå?ã™æ™‚ã®ã‚ー 214 * 215 * @return è¨å®šå? (è¨å®šå?ãŒè¦‹ã¤ã‹ã‚‰ãªã??å?null 216 */ 217 private String getContentParam( final String content,final String key ) { 218 if( content == null || key == null ) { return null; } 219 220 String newKey = key + "=[" ; 221 222 // ã‚ーã®å˜åœ¨ãƒã‚§ãƒ?‚¯ã¨å ´æ‰?‚’求ã‚ã‚‹ã? 223 int keyAd = content.indexOf( newKey ); 224 if( keyAd >= 0 ) { 225 // [è¨å®šå?] ã®çµ‚äº??æ‰?‚’求ã‚ã‚‹ã?(見ã¤ã‘ãŸä½ç½®?‹æ–‡å—å?æ•°) 226 int st = keyAd + newKey.length() ; 227 int ed = content.indexOf( ']' , st ); 228 if( ed >= 0 ) { 229 return content.substring( st,ed ); 230 } 231 } 232 return null; 233 } 234 }