Files
bapweb/src/com/eactive/eai/adapter/ftp/FTPCC.java
T
Rinjae d6bf8e1943 init
2025-10-23 13:21:43 +09:00

203 lines
6.1 KiB
Java

package com.eactive.eai.adapter.ftp;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.Socket;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPFile;
import com.eactive.eai.adapter.socket.config.ConfigurationContext;
import com.eactive.eai.adapter.socket.service.SocketService;
import com.eactive.eai.batch.common.CalendarUtil;
import com.eactive.eai.batch.common.LogUtil;
import com.eactive.eai.batch.common.StringUtil;
import com.eactive.eai.batch.doc.BatchDoc;
import com.eactive.eai.batch.running.BatchRunningJobManager;
import com.eactive.eai.common.exception.ExceptionUtil;
import com.eactive.eai.common.util.DatetimeUtil;
// 신용회복 위원회 파일 수신 ( FTP )
// IP : 114.108.166.14 PORT : 21 PASSIVE 방식
// ID : kjbk_ccrs PWD: ccrskjbk!@#
// 파일명: SNTFTP.${YYYYMMDD}.tar.gz
public class FTPCC extends Transfer implements SocketService{
public void sendFile(BatchDoc batchDoc) throws Exception {
throw new Exception("해당 Component 에 의한 FTP 송신이 구현되지 않았습니다.");
}
public void recvFile(BatchDoc batchDoc) throws Exception {
logger.info("[FTPCC] ■ 대외기관→FEP 파일 수신 시작...... ");
firstActivity = System.currentTimeMillis();
setLastActivity();
BatchRunningJobManager.getInstance().addRunningJobInfo( batchDoc.getBatchMsg().getHeader().getUUID(), this, batchDoc);
//2. System FTP Shell 명령어를 Runtime 으로 실행
try {
String ipaddress = batchDoc.getBatchMsg().getHeader().getRemoteIP();
String port = batchDoc.getBatchMsg().getHeader().getPort();
String userid = batchDoc.getBatchMsg().getHeader().getUserID();
String passwd = batchDoc.getBatchMsg().getHeader().getUserPassword();
if (ftpClient == null || !ftpClient.isConnected()) this.connect(ipaddress, Integer.parseInt(port) );
ftpClient.login(userid, passwd);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
setLastActivity();
logger.debug( "[FTPCC]FileName:" + batchDoc.getBatchMsg().getHeader().getFileName());
String reqFileName = batchDoc.getBatchMsg().getHeader().getFileName();
String baseDate = DatetimeUtil.getCurrentDate();
if ( reqFileName != null && reqFileName.length() > 8 ){
if ( DatetimeUtil.isRightDate(reqFileName.substring(reqFileName.length() - 8 )) ){
baseDate = reqFileName.substring(reqFileName.length() - 8 );
batchDoc.getBatchMsg().getHeader().setBaseDate(baseDate);
}
}
reqFileName = batchDoc.getBatchMsg().getHeader().getBizCode() + "." + baseDate + ".tar.gz";
ftpClient.setDataTimeout(600*1000);
ftpClient.setConnectTimeout(300);
FTPFile[] files = ftpClient.listFiles();
setLastActivity();
for (int inx = 0; inx < files.length; inx++) {
if ( !files[inx].isFile() || !files[inx].getName().equals(reqFileName) ) continue;
FileOutputStream fos = null;
batchDoc.getBatchMsg().getHeader().setFileName(reqFileName);
batchDoc.getBatchMsg().getHeader().setFileSize(files[inx].getSize());
batchDoc.getBatchMsg().getHeader().setTotRecCnt(1);
String recvFile = batchDoc.getBatchMsg().getHeader().getFilePath() + File.separator + reqFileName;
File rcvRealFile = new File( recvFile );
File rcvChkFile = new File( StringUtil.realToRootDir(recvFile) );
batchDoc.getBatchMsg().getBody().setPhaseStartTime(CalendarUtil.getCurrentTimeNoDash());
LogUtil.setLogFileStart(batchDoc);
try {
fos = new FileOutputStream( rcvRealFile );
ftpClient.retrieveFile(reqFileName, fos);
setLastActivity();
} catch (Exception e) {
setLastActivity();
logger.error(e.getMessage(), e);
throw new Exception("파일수신에 실패하였습니다. -" + e.getMessage());
} finally {
fos.close();
}
try {
File rcvArchFile = new File( StringUtil.realToArchDir(recvFile) );
if (rcvRealFile.exists() && rcvRealFile.length() == batchDoc.getBatchMsg().getHeader().getFileSize() ) {
rcvRealFile.renameTo(rcvArchFile);
rcvChkFile.createNewFile();
}else{
throw new Exception("파일수신에 실패하였습니다.");
}
} catch (Exception e) {
throw e;
}
//File 종료시간 설정
batchDoc.getBatchMsg().getBody().setPhaseEndTime(CalendarUtil.getCurrentTimeNoDash());
LogUtil.setLogFileEnd(batchDoc);
break;
}
} catch(Exception ex) {
String[] msgArgs = new String[1];
msgArgs[0] = batchDoc.getBatchMsg().getHeader().getProcessCode();
String errCode = "BECEAIFJI002";
String errMsg = ExceptionUtil.getErrorCode (ex, errCode, msgArgs);
batchDoc.getBatchMsg().getBody().setErrorMsg(errMsg);
batchDoc.getBatchMsg().getBody().setPhaseEndTime(CalendarUtil.getCurrentTimeNoDash());
LogUtil.setErrorLog(batchDoc, ex.getMessage());
logger.error( errMsg, ex );
throw ex;
} finally {
this.disconnect();
}
logger.info("[FTPCC] ■ VAN사 → FEP 파일 수신 완료.");
}
@Override
public void shutdown() {
disconnect();
}
@Override
public Socket getCurrentSocket() {
return null;
}
@Override
public boolean connect() {
return false;
}
@Override
public ConfigurationContext getContext() {
return null;
}
@Override
public void setControl(Object control) {
}
@Override
public void notifyMessage() {
}
@Override
public boolean idle(long timeout) {
return false;
}
@Override
public int getCurrentState() {
return 0;
}
@Override
public boolean isConnected() throws IOException {
return false;
}
@Override
public boolean isActive() {
return false;
}
@Override
public void checkActivity() {
}
@Override
public String getRemoteIPAddress() {
return null;
}
@Override
public void setLastActivity() {
lastActivity = System.currentTimeMillis();
}
@Override
public long getFirstActivity() {
return firstActivity;
}
@Override
public long getLastActivity() {
return lastActivity;
}
}