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 }