init
This commit is contained in:
@@ -0,0 +1,322 @@
|
||||
package com.eactive.eai.adapter.ftp;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
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.ftp.FTPUtil;
|
||||
import com.eactive.eai.batch.running.BatchRunningJobManager;
|
||||
import com.eactive.eai.common.exception.ExceptionUtil;
|
||||
import com.eactive.eai.common.property.PropManager;
|
||||
import com.eactive.eai.common.util.DatetimeUtil;
|
||||
import com.eactive.eai.common.util.Logger;
|
||||
|
||||
// NICE CB 자료 송수신 ( SFTP )
|
||||
// IP : 10.94.50.207 PORT : 22
|
||||
// ID : kjb01 PWD: kjb1111
|
||||
// 파일명
|
||||
// 송신:
|
||||
// F13_MXALINF 90 당행CB정보송신
|
||||
// F13_CSALINB 90 당행CB정보송신
|
||||
// 1A9_REWOINF 90 당행조기경보회원등록(부동산)
|
||||
// 수신:
|
||||
// NICE_MXALINF_F13 Y 90 나이스CB정보수신
|
||||
// NICE_CSALINB_F13 Y 90 나이스CB정보수신
|
||||
// NICE_MXALINF_F13_CARD N 90 나이스CB정보수신
|
||||
// NICE_REWORLT_1A9 N 90 나이스부동산권리정보(정상분)
|
||||
// NICE_REWOERR_1A9 N 90 나이스부동산권리정보(오류분)
|
||||
// NICE_EWRECHG_1A9 N 90 나이스부동산권리정보(변경분)
|
||||
// TEST / PROD 구분이 없음, TEST파일의 경우 파일명 어딘가에 TEST라는 표시가 있으면 됨.
|
||||
// 김효희 과장. 02-2122-4033
|
||||
public class FTPNC extends Transfer implements SocketService{
|
||||
|
||||
private static final String PROP_GROUP_NAME_PREFIX = "TelegramInfo";
|
||||
private static final String REMOTE_PATH = "remote.path";
|
||||
private static final String POSTFIX = "post.fix";
|
||||
|
||||
public void sendFile(BatchDoc batchDoc) throws Exception {
|
||||
logger.info("[FTPNC] ■ FEP → 대외기관파일 송신 시작...... [" + batchDoc.getBatchMsg().getHeader().getUUID()+ "]");
|
||||
|
||||
firstActivity = System.currentTimeMillis();
|
||||
setLastActivity();
|
||||
BatchRunningJobManager.getInstance().addRunningJobInfo( batchDoc.getBatchMsg().getHeader().getUUID(), this, batchDoc);
|
||||
//Shell 명령어를 Runtime 으로 실행
|
||||
try {
|
||||
String ipaddress = batchDoc.getBatchMsg().getHeader().getRemoteIP();
|
||||
int port = Integer.parseInt(batchDoc.getBatchMsg().getHeader().getPort());
|
||||
String userid = batchDoc.getBatchMsg().getHeader().getUserID();
|
||||
String passwd = batchDoc.getBatchMsg().getHeader().getUserPassword();
|
||||
String propName = PROP_GROUP_NAME_PREFIX + "{" +
|
||||
batchDoc.getBatchMsg().getHeader().getProcessCode() +
|
||||
"_" +
|
||||
batchDoc.getBatchMsg().getHeader().getInstitutionCode() + "}";
|
||||
PropManager pmanager = PropManager.getInstance();
|
||||
|
||||
String remotePath = pmanager.getProperties(propName).getProperty(REMOTE_PATH);
|
||||
if ( remotePath == null ){
|
||||
throw new Exception("해당 기관에 전송 경로가 지정되어 있지 않습니다. -propName:" + propName + "," + REMOTE_PATH);
|
||||
}
|
||||
|
||||
String authType = pmanager.getProperties(propName).getProperty(AUTH_TYPE);
|
||||
if (StringUtils.isBlank(authType)) {
|
||||
authType = AUTH_TYPE_ID; // id
|
||||
}
|
||||
|
||||
//20220712
|
||||
String connTimeoutStr = pmanager.getProperties(propName).getProperty(CONNECTION_TIMEOUT, "10");
|
||||
int connTimeout = Integer.parseInt(connTimeoutStr);
|
||||
String setTimeoutStr = pmanager.getProperties(propName).getProperty(READ_TIMEOUT, "10");
|
||||
int setTimeout = Integer.parseInt(setTimeoutStr);
|
||||
String bandWidthLimit = pmanager.getProperties(propName).getProperty(BADNWIDTH, "0");
|
||||
bandWidthLimit = bandWidthLimit.replace("K", "000").replace("M", "000000").replaceAll(",", "");
|
||||
int bandWidth = Integer.parseInt(bandWidthLimit);
|
||||
|
||||
String sendFileName = batchDoc.getBatchMsg().getHeader().getFilePath() + "/" + batchDoc.getBatchMsg().getHeader().getRenamedFileName();
|
||||
//String remoteFileName = remotePath + batchDoc.getBatchMsg().getHeader().getFileName();
|
||||
String remoteFileName = batchDoc.getBatchMsg().getHeader().getFileName();
|
||||
setFileHeaderAndTrailer(batchDoc, new File(sendFileName));
|
||||
|
||||
//나이스 테스트 파일명 "TEST_" 운영path는 반드시 "/"로 끝나야 한다.
|
||||
String fullPath = remotePath+remoteFileName;
|
||||
String [] arr = fullPath.split("/");
|
||||
|
||||
remoteFileName = arr[arr.length-1];
|
||||
remotePath = fullPath.replace(remoteFileName, "");
|
||||
|
||||
batchDoc.getBatchMsg().getBody().setPhaseStartTime(CalendarUtil.getCurrentTimeNoDash());
|
||||
LogUtil.setLogFileStart(batchDoc);
|
||||
|
||||
//FTPUtil.store(ipaddress, port, userid, passwd, remoteFileName, sendFileName, true, batchDoc.getLogger(ElinkLogger.LOGGER_ADAPTER));
|
||||
FTPUtil.store(batchDoc, ipaddress, port, userid, passwd, remotePath, remoteFileName, sendFileName,
|
||||
connTimeout, setTimeout, true, bandWidth, batchDoc.getLogger(Logger.LOGGER_ADAPTER), authType);
|
||||
//FTPUtil.store(batchDoc, ipaddress, port, userid, passwd, remoteFileName, sendFileName,
|
||||
// connTimeout, setTimeout, false, bandWidth, batchDoc.getLogger(ElinkLogger.LOGGER_ADAPTER));
|
||||
logger.debug("guid ["+batchDoc.getBatchMsg().getHeader().getUUID()+"]"+"FTPUtil.store finish<<<<<<<<<<<<<<<<<<<<<<<");
|
||||
batchDoc.getBatchMsg().getBody().setPhaseEndTime(CalendarUtil.getCurrentTimeNoDash());
|
||||
LogUtil.setLogFileEnd(batchDoc);
|
||||
|
||||
} 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 {
|
||||
BatchRunningJobManager.getInstance().removeRunningJobInfo( batchDoc.getBatchMsg().getHeader().getUUID());
|
||||
this.disconnect();
|
||||
}
|
||||
logger.info("[FTPNC] ■ FEP → 대외기관 파일 송신 완료. [" + batchDoc.getBatchMsg().getHeader().getUUID()+ "]");
|
||||
}
|
||||
|
||||
public void recvFile(BatchDoc batchDoc) throws Exception {
|
||||
logger.info("[FTPNC] ■ 대외기관→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();
|
||||
int port = Integer.parseInt(batchDoc.getBatchMsg().getHeader().getPort());
|
||||
String userid = batchDoc.getBatchMsg().getHeader().getUserID();
|
||||
String passwd = batchDoc.getBatchMsg().getHeader().getUserPassword();
|
||||
|
||||
String propName = PROP_GROUP_NAME_PREFIX + "{" +
|
||||
batchDoc.getBatchMsg().getHeader().getProcessCode() +
|
||||
"_" +
|
||||
batchDoc.getBatchMsg().getHeader().getInstitutionCode() + "}";
|
||||
String jobName = PROP_GROUP_NAME_PREFIX + "{" +
|
||||
batchDoc.getBatchMsg().getHeader().getBizCode() +
|
||||
"_" +
|
||||
batchDoc.getBatchMsg().getHeader().getInstitutionCode() + "}";
|
||||
PropManager pmanager = PropManager.getInstance();
|
||||
|
||||
String remotePath = pmanager.getProperties(propName).getProperty(REMOTE_PATH);
|
||||
String postfix = null;
|
||||
try{
|
||||
postfix = pmanager.getProperties(jobName).getProperty(POSTFIX);
|
||||
}catch( Exception e ){}
|
||||
|
||||
if ( remotePath == null ){
|
||||
throw new Exception("해당 기관에 전송 경로가 지정되어 있지 않습니다. -propName:" + propName + "," + REMOTE_PATH);
|
||||
}
|
||||
if ( !remotePath.endsWith("/") )
|
||||
remotePath = remotePath + "/";
|
||||
|
||||
String authType = pmanager.getProperties(propName).getProperty(AUTH_TYPE);
|
||||
if (StringUtils.isBlank(authType)) {
|
||||
authType = AUTH_TYPE_ID; // id
|
||||
}
|
||||
|
||||
//20220712
|
||||
String connTimeoutStr = pmanager.getProperties(propName).getProperty(CONNECTION_TIMEOUT, "10");
|
||||
int connTimeout = Integer.parseInt(connTimeoutStr);
|
||||
String setTimeoutStr = pmanager.getProperties(propName).getProperty(READ_TIMEOUT, "10");
|
||||
int setTimeout = Integer.parseInt(setTimeoutStr);
|
||||
String bandWidthLimit = pmanager.getProperties(propName).getProperty(BADNWIDTH, "0");
|
||||
bandWidthLimit = bandWidthLimit.replace("K", "000").replace("M", "000000").replaceAll(",", "");
|
||||
int bandWidth = Integer.parseInt(bandWidthLimit);
|
||||
|
||||
|
||||
logger.debug( "[FTPNC]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 = "NICE_" + batchDoc.getBatchMsg().getHeader().getBizCode() + "." + baseDate.substring(2);
|
||||
if ( postfix != null && !!postfix.equals("")){
|
||||
reqFileName = reqFileName + postfix;
|
||||
}
|
||||
logger.debug( "[FTPNC]reqFileName:" + reqFileName );
|
||||
|
||||
|
||||
try {
|
||||
FTPFile[] list = FTPUtil.listFiles(ipaddress, port, userid, passwd, remotePath, null, true, batchDoc.getLogger(Logger.LOGGER_ADAPTER), authType);
|
||||
for ( int inx = 0 ; inx < list.length; inx++){
|
||||
FTPFile file = list[inx];
|
||||
if ( file.getName().equals(reqFileName) ){
|
||||
batchDoc.getBatchMsg().getHeader().setFileSize(file.getSize());
|
||||
batchDoc.getBatchMsg().getBody().setRecCnt(1);
|
||||
batchDoc.getBatchMsg().getBody().setPhaseStartTime(CalendarUtil.getCurrentTimeNoDash());
|
||||
batchDoc.getBatchMsg().getHeader().setFileName(file.getName());
|
||||
LogUtil.setLogFileStart(batchDoc);
|
||||
//FTPUtil.retrieve(ipaddress, port, userid, passwd, remotePath + "/" + file.getName(), batchDoc.getBatchMsg().getHeader().getFilePath(), true, batchDoc.getLogger(ElinkLogger.LOGGER_ADAPTER));
|
||||
FTPUtil.retrieve(batchDoc, ipaddress, port, userid, passwd, remotePath, file.getName(), batchDoc.getBatchMsg().getHeader().getFilePath(),
|
||||
connTimeout, setTimeout, true, bandWidth, batchDoc.getLogger(Logger.LOGGER_ADAPTER), authType);
|
||||
|
||||
//batchDoc.getBatchMsg().getHeader().setFileSize(fileSize);
|
||||
batchDoc.getBatchMsg().getHeader().setTotRecCnt(1);
|
||||
String recvFile = batchDoc.getBatchMsg().getHeader().getFilePath() + File.separator + file.getName();
|
||||
File rcvRealFile = new File( recvFile );
|
||||
File rcvChkFile = new File( StringUtil.realToRootDir(recvFile) );
|
||||
|
||||
try {
|
||||
File rcvArchFile = new File( StringUtil.realToArchDir(recvFile) );
|
||||
if (rcvRealFile.exists() && rcvRealFile.length() == batchDoc.getBatchMsg().getHeader().getFileSize() ) {
|
||||
//setFileHeaderAndTrailer(batchDoc, rcvRealFile);
|
||||
rcvRealFile.renameTo(rcvArchFile);
|
||||
rcvChkFile.createNewFile();
|
||||
}else{
|
||||
throw new Exception("파일수신에 실패하였습니다.");
|
||||
}
|
||||
//File 종료시간 설정
|
||||
batchDoc.getBatchMsg().getBody().setPhaseEndTime(CalendarUtil.getCurrentTimeNoDash());
|
||||
LogUtil.setLogFileEnd(batchDoc);
|
||||
} catch (Exception e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
}catch ( Exception e ){
|
||||
if ( !e.getMessage().contains("No such file"))
|
||||
throw e;
|
||||
}
|
||||
|
||||
|
||||
} 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);
|
||||
LogUtil.setErrorLog(batchDoc, ex.getMessage());
|
||||
logger.error( errMsg, ex );
|
||||
throw ex;
|
||||
} finally {
|
||||
this.disconnect();
|
||||
}
|
||||
logger.info("[FTPNC] ■ VAN사 → FEP 파일 수신 완료.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void shutdown() {
|
||||
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user