/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*   モジュール名    ：JCCsvlCC011DTPMA
*   ソースファイル名：JCCsvlCC011DTPMA.java
*   作成者          ：富士通
*   日付            ：2011年04月15日
*＜機能概要＞
*   ディレイド処理依頼登録独自処理部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v1.00.00    2011/04/15  富士通      新規作成
*   v56.00.00   2021/10/25  FJ)星野     ANK-4069-00-00_バッチ・DBサーバーリプレース対応
*   v71.00.00   2024/05/01  FJ)山岡     ANK-4491-00-00_セット割補正機能の自動化対応
**********************************************************************/

package eo.ejb.cbs.mainproc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.common.JCCWebAddTrnId;
import com.fujitsu.futurity.model.base.CAANConnectionMgr;
import com.fujitsu.futurity.model.base.CAANJDBCUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;

import eo.common.constant.JACStrConst;
import eo.common.util.JCCComExecUtil;
import eo.common.util.JCCFrameworkException;
import eo.common.util.JCRUtilCommon;
import eo.ejb.cbm.entity.CC0041ETMsg;
import eo.ejb.cbm.entity.CC0111ETMsg;
import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbs.cbsmsg.EAC0591D010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECC0041D010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECC0111D010CBSMsg;
import eo.ejb.common.EventIDList;
import eo.ejb.common.JCCModelCommon;
import eo.ejb.common.JCCejbEFile;
import eo.ejb.common.JPCModelCommon;
/**
 * <p>
 * ディレイド処理依頼登録独自処理部品クラスです。
 * </p>
 * @author 富士通
 */
public class JECC0111D010TPMA implements TemplateMainHandler {
	
	// HashMapキー
	private final static String ASSHUKU_FILE_PATH = "ASSHUKU_FILE_PATH";
	private final static String BUTSURI_FILE_NM = "BUTSURI_FILE_NM";
	private final static String ASSHUKU_FILE_SIZE = "ASSHUKU_FILE_SIZE";
	private final static String FILE_SIZE = "FILE_SIZE";
	private final static String FILE_DEL_YMD = "FILE_DEL_YMD";
	private final static String REMOVE_TEMP_DIR = "REMOVE_TEMP_DIR";  
	private final static String EFILE_KANRI_NO = "EFILE_KANRI_NO";
	/**
	 * コンストラクタです。
	 */
	public JECC0111D010TPMA()
	{
		super();
	}

	/**
	 * <p>
	 * ディレイド処理依頼登録の副次処理を呼び出します。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public static void invoke(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		try 
		{
			
			JCCejbEFile jCCejbEFile = new JCCejbEFile();							// 電子ファイル情報チェック部品
			HashMap<String, String> eFileInfo = new HashMap<String, String>();		// 電子ファイル情報チェック部品の結果

// ANK-4491-00-00対応　20240501 ADD START
			//依頼ジョブIDがEO61W0110J0(料金調整一括登録)の場合
			//ディレイド処理依頼データ抽出処理を行う
			//抽出したレコードのステータスが依頼中または処理中の場合はエラーメッセージを表示
			if(inCBSMsg.getObject(ECC0111D010CBSMsg.REQ_JOB_ID).equals("EO61W0110J0")){

				//ディレイド処理依頼データ抽出処理
				String Dlyd = selectDlyd(inCBSMsg, jCCejbEFile,inContext);
				
				if( null != Dlyd ){
					return;
				}
			}
//ANK-4491-00-00対応　20240501 ADD END
			  
			// 機能コード３、４以外の場合
			if ( !"3".equals( inCBSMsg.getObject(ECC0111D010CBSMsg.FUNC_CODE).toString() ) &&
					!"4".equals( inCBSMsg.getObject(ECC0111D010CBSMsg.FUNC_CODE).toString() )) {
				// 電子ファイル情報チェック
				eFileInfo = eFileInfoCheck(inCBSMsg, jCCejbEFile, eFileInfo);
	
			}
			
			if(null == eFileInfo ){
				return;
			}
			
			// 機能コード１の場合
			if ( "1".equals( inCBSMsg.getObject(ECC0111D010CBSMsg.FUNC_CODE).toString() ) ) {
				// 電子ファイル管理番号取得
				eFileInfo = getEFileKanriNo(inCBSMsg, jCCejbEFile, eFileInfo);
				if(null == eFileInfo ){
					return;
				}
				inCBSMsg.setPrivate("input_efile_kanri_no", eFileInfo.get(EFILE_KANRI_NO));
				
				// 電子ファイル情報の登録
				createEFileInfo(inCBSMsg, jCCejbEFile, eFileInfo);

			}
			
			// 機能コード２、４の場合
			if ( "2".equals( inCBSMsg.getObject(ECC0111D010CBSMsg.FUNC_CODE).toString() ) ||
					"4".equals( inCBSMsg.getObject(ECC0111D010CBSMsg.FUNC_CODE).toString() )) {
					try {
						JCCejbEFile.removeDir(eFileInfo.get(REMOVE_TEMP_DIR));
					} catch (Exception func2_e)
					{
					}
					inCBSMsg.setNull("butsuri_file_nm");
					inCBSMsg.setNull("gene_add_dtm");
			}
			
			// 処理依頼番号採番
			inCBSMsg.setPrivate("dlyd_trn_req_no", JCCModelCommon.getFormatedNextSeq("SEQ_DLYD_TRN_REQ_NO","D",14));
			
			inCBSMsg.setPrivate("dlyd_trn_req_stat", "001");
			
			if (inCBSMsg.isNull(ECC0111D010CBSMsg.DLYD_TRN_REQ_SBT_CD)) { 
				inCBSMsg.set(ECC0111D010CBSMsg.DLYD_TRN_REQ_SBT_CD, "00000" );
			}
			
			if (inCBSMsg.isNull(ECC0111D010CBSMsg.DLYD_TRN_JSSI_UNYO_DTM) ) { 
				inCBSMsg.set(ECC0111D010CBSMsg.DLYD_TRN_JSSI_UNYO_DTM,"00000000000000000" );
			}
			
			// オペレーションIDからシステムIDを取得
			if (inCBSMsg.isNull("operationID")) { 
				inCBSMsg.setPrivate("sys_cd", "99");
			}else{
				String sys_cd = inCBSMsg.getString("operationID");
				sys_cd = sys_cd.substring(0,2);
				inCBSMsg.setPrivate("sys_cd", sys_cd);
			}
			inCBSMsg.setPrivate("add_dtm", JCCModelCommon.getSysDateTimeStamp());
			inCBSMsg.setPrivate("add_opeacnt", inCBSMsg.getObject(ECC0111D010CBSMsg.OPERATORID));
			inCBSMsg.setPrivate("upd_dtm", JCCModelCommon.getSysDateTimeStamp());
			inCBSMsg.setPrivate("upd_opeacnt", inCBSMsg.getObject(ECC0111D010CBSMsg.OPERATORID));
			inCBSMsg.setPrivate("del_dtm",null);
			inCBSMsg.setPrivate("del_opeacnt",null);
			inCBSMsg.setPrivate("mk_flg", "0");
			
// 2012/03/05 FST)arata ディレイド処理依頼時にシェルの即時実行処理を行う。 start
			// 機能コード１、３の場合
			if ( "1".equals( inCBSMsg.getObject(ECC0111D010CBSMsg.FUNC_CODE).toString() ) ||
					"3".equals( inCBSMsg.getObject(ECC0111D010CBSMsg.FUNC_CODE).toString() ))
			{
				HashMap<String, Object> comMsg = new HashMap<String, Object>();
				// 引き渡すプロパティ情報およびコマンドの作成
				// プロパティ情報
				HashMap<String, Object> propMap = new HashMap<String, Object>();
				JCCComExecUtil execCmd = new JCCComExecUtil();
				
				// コマンド実行バッファサイズ
				String execBuffSize = JCCModelCommon.getApplicationConst(execCmd.EXEC_BUFF_SIZE);
				if (null == execBuffSize || execBuffSize.isEmpty())
				{
					String errMsg = "コマンド実行バッファサイズ（キー：EXEC_BUFF_SIZE）が"+
						  "アプリケーションプロパティファイル（AplConst）にて設定されていません。";
					throw new JCCFrameworkException(errMsg);
				}
				// コマンド実行空きメモリサイズ
				String execPermitMemory = JCCModelCommon.getApplicationConst(execCmd.EXEC_PERMIT_MEMORY);
				if (null == execPermitMemory || execPermitMemory.isEmpty())
				{
					String errMsg = "コマンド実行空きメモリサイズ（キー：EXEC_PERMIT_MEMORY）が"+
						  "アプリケーションプロパティファイル（AplConst）にて設定されていません。";
						throw new JCCFrameworkException(errMsg);
				}
				propMap.put(execCmd.EXEC_BUFF_SIZE, execBuffSize);
				propMap.put(execCmd.EXEC_PERMIT_MEMORY, execPermitMemory);
				comMsg.put("PROP", propMap);
				// コマンドの作成
				// バッチユーザー名
				String batchUserNm = JCCModelCommon.getApplicationConst("BATCH_USER_NM");
				// バッチユーザー名が取得できない場合、システムエラーとして終了する。
				if (null == batchUserNm || batchUserNm.isEmpty())
				{
					String errMsg = "バッチユーザー名（キー：BATCH_USER_NM）が"+
						  "アプリケーションプロパティファイル（AplConst）にて設定されていません。";
					throw new JCCFrameworkException(errMsg);
				}
				// バッチサーバーのIP/host名
				String batchHost = JCCModelCommon.getApplicationConst("BATCH_SERVER_HOST");
				// バッチサーバーのIP/host名が取得できない場合、システムエラーとして終了する。
				if (null == batchHost || batchHost.isEmpty())
				{
					String errMsg = "バッチサーバーポスト名（キー：BATCH_SERVER_HOST）が"+
						  "アプリケーションプロパティファイル（AplConst）にて設定されていません。";
					throw new JCCFrameworkException(errMsg);
				}
				// シェル格納パス
				String shlPath = JCCModelCommon.getApplicationConst("SHL_DIRECTORY_PATH");
				// シェル格納パスが取得できない場合、システムエラーとして終了する。
				if (null == shlPath || shlPath.isEmpty())
				{
					String errMsg = "シェル格納パス（キー：SHL_DIRECTORY_PATH）が"+
						  "アプリケーションプロパティファイル（AplConst）にて設定されていません。";
					throw new JCCFrameworkException(errMsg);
				}
// ssh鍵の配置先の変更対応 fst)yanagihara start
				// 環境識別コード
				String kankyo_skbt_cd = JCCModelCommon.getApplicationConst("KANKYO_SKBT_CD");
				// 環境識別コードが取得できない場合、システムエラーとして終了する。
				if (null == kankyo_skbt_cd || kankyo_skbt_cd.isEmpty())
				{
					String errMsg = "環境識別コード（キー：KANKYO_SKBT_CD）が"+
						  "アプリケーションプロパティファイル（AplConst）にて設定されていません。";
					throw new JCCFrameworkException(errMsg);
				}
// ssh鍵の配置先の変更対応 fst)yanagihara end
				
// ANK-4069-00-00対応 20211025 星野 ADD START
				// SSHポート
				String sshPort = JCCModelCommon.getApplicationConst("BATCH_SERVER_SSH_PORT");
// ANK-4069-00-00対応 20211025 星野 ADD END
				
				ArrayList<String[]> msgList = new ArrayList<String[]>();
				
// ANK-4069-00-00対応 20211025 星野 ADD START
				// SSHポートが取得できない場合、ポート指定なし
				if (null == sshPort || sshPort.isEmpty())
				{
// ANK-4069-00-00対応 20211025 星野 ADD END
					//ssh <バッチサーバのIP/host名> -l <ユーザー名> -i <秘密鍵のパス>  <実行cmd>
					String[] cmd = new String[7];
					cmd[0] = "ssh";
					cmd[1] = batchHost;
					cmd[2] = "-l";
					cmd[3] = batchUserNm;
					cmd[4] = "-i";
	// ssh鍵の配置先の変更対応 fst)yanagihara start
					//cmd[5] = "/home/" + batchUserNm + "/.ssh/id_rsa";
					cmd[5] = "/apl/" + kankyo_skbt_cd + "/.ssh/id_rsa";
	// ssh鍵の配置先の変更対応 fst)yanagihara end
					cmd[6] = "export LANG=ja_JP.UTF-8;source ~/.delayed_profile; cd " + shlPath + " ;nohup sh ./" + inCBSMsg.getObject(ECC0111D010CBSMsg.REQ_JOB_ID) + ".sh";
					msgList.add(cmd);
					comMsg.put("CMD", msgList);
					// スレッドローカル情報へ設定
					JCCWebAddTrnId.set("DLYD_FLG",comMsg);
					JSYejbLog.println(JSYejbLog.EXECUTION, JECC0111D010TPMA.class, "DELAYED_COMMAND:" + 
							cmd[0] + " " + cmd[1] + " " + cmd[2] + " " + cmd[3] + " " + cmd[4] + " " + cmd[5] + " " + cmd[6]);
// ANK-4069-00-00対応 20211025 星野 ADD START
				}
				else
				{
					// SSHポートが取得できた場合、ポート指定して接続
					//ssh <バッチサーバのIP/host名> -p ポート -l <ユーザー名> -i <秘密鍵のパス>  <実行cmd>
					String[] cmd = new String[9];
					cmd[0] = "ssh";
					cmd[1] = batchHost;
					cmd[2] = "-p";
					cmd[3] = sshPort;
					cmd[4] = "-l";
					cmd[5] = batchUserNm;
					cmd[6] = "-i";
					cmd[7] = "/apl/" + kankyo_skbt_cd + "/.ssh/id_rsa";
					cmd[8] = "export LANG=ja_JP.UTF-8;source ~/.delayed_profile; cd " + shlPath + " ;nohup sh ./" + inCBSMsg.getObject(ECC0111D010CBSMsg.REQ_JOB_ID) + ".sh";
					msgList.add(cmd);
					comMsg.put("CMD", msgList);
					// スレッドローカル情報へ設定
					JCCWebAddTrnId.set("DLYD_FLG",comMsg);
					JSYejbLog.println(JSYejbLog.EXECUTION, JECC0111D010TPMA.class, "DELAYED_COMMAND:" + 
							cmd[0] + " " + cmd[1] + " " + cmd[2] + " " + cmd[3] + " " + cmd[4] + " " + cmd[5] + " " + cmd[6] + " " + cmd[7] + " " + cmd[8]);
				}
// ANK-4069-00-00対応 20211025 星野 ADD END
				
			}
		}catch(Exception e){
			
			throw new CAANRuntimeException(e);
		}
		
	}
	/**
	 * <p>
	 * 電子ファイル情報チェック部品の呼び出し
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param 電子ファイル情報チェック部品インスタンス
	 * @param 電子ファイル情報チェック部品の結果
	 * @return 電子ファイル情報チェック部品の結果
	 * </p>
	 * @throws Exception 
	 */
	private static HashMap<String, String> eFileInfoCheck(CAANMsg inCBSMsg, JCCejbEFile jCCejbEFile, HashMap<String, String> eFileInfo ) throws Exception
	{

		// 変数定義
		//圧縮後電子ファイルパス
		String asshukuFilePath;
		//圧縮後ファイル名
		String butsuriFileName;
		//圧縮後ファイルサイズ
		String assukuFileSize;
		//圧縮前ファイルサイズ
		String fileSize ;
		//ファイル削除年月日
		String fileDelYmd;
		//作業用ディレクトリパス
		String removeTmpDir;  
		//電子ファイル管理番号
		String eFileKanriNo;
		try
		{
		
			//@ 電子ファイル情報チェック部品の呼び出しを行い、圧縮後電子ファイルパス、
			//圧縮後ファイル名、圧縮後ファイルサイズ、圧縮前ファイルサイズ、
			//ファイル削除年月日、作業用ディレクトリパスを取得する。
			eFileInfo = jCCejbEFile.eFileInfoCheck((byte[])inCBSMsg.getObject(ECC0111D010CBSMsg.EFILE),
			inCBSMsg.getString(ECC0111D010CBSMsg.FILE_DEL_YMD));
		
			//A 部品からの返却値がnullの場合、CBSMsgに以下の値を設定し、処理を終了する。
			if(eFileInfo == null) {
				// ファイルサイズエラーに"E5"を設定
				inCBSMsg.set(ECC0111D010CBSMsg.EFILE_ERR, "E5");  
				// ステータスに「単項目でチェックエラー」を設定
				inCBSMsg.set(ECC0111D010CBSMsg.STATUS, StatusCodes.ITEM_RELATION_ERR);
				
				return null;
			}
					
			asshukuFilePath = eFileInfo.get(ASSHUKU_FILE_PATH);
			butsuriFileName = eFileInfo.get(BUTSURI_FILE_NM);
			assukuFileSize = eFileInfo.get(ASSHUKU_FILE_SIZE);
			fileSize = eFileInfo.get(FILE_SIZE);
			fileDelYmd = eFileInfo.get(FILE_DEL_YMD);
			removeTmpDir = eFileInfo.get(REMOVE_TEMP_DIR);  
			
			}
		catch(Exception e)
		{
			throw new CAANRuntimeException(e);
		}
		// B 上記以外の場合
		// CBSMsg物理ファイル名へ圧縮後ファイル名を設定
        inCBSMsg.setPrivate("butsuri_file_nm",butsuriFileName);
		// CBSMsg圧縮ファイルサイズへ圧縮後ファイルサイズを設定
        inCBSMsg.setPrivate("asshuku_file_size",assukuFileSize);        
		// CBSMsgファイルサイズへ圧縮前ファイルサイズを設定
        inCBSMsg.setPrivate("file_size", fileSize);
		// CBSMsgファイル削除年月日へファイル削除年月日を設定
		inCBSMsg.set(ECC0111D010CBSMsg.FILE_DEL_YMD, fileDelYmd);
		//CBSMsg(世代登録年月日時分秒)へオンラインシステム日付取得部品より取得できるシステム日付を設定する。
		inCBSMsg.setPrivate("gene_add_dtm", JCCModelCommon.getSysDateTimeStamp());
		inCBSMsg.setPrivate("input_efile_gane_add_dtm",JCCModelCommon.getSysDateTimeStamp());
		// CBSMsg(ファイルコード)がnullまたは空白の場合「0000」を設定する。
		if(null == inCBSMsg.getString(ECC0111D010CBSMsg.FILE_CD) || (inCBSMsg.getString(ECC0111D010CBSMsg.FILE_CD).isEmpty()))
		{
			inCBSMsg.set(ECC0111D010CBSMsg.FILE_CD, "0000");
		}
		
		return eFileInfo;
	}
	
	/**
	 * <p>
	 * 電子ファイル管理番号取得
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param 電子ファイル情報チェック部品インスタンス
	 * @param 電子ファイル情報チェック部品の結果
	 * @return 電子ファイル情報チェック部品の結果
	 * </p>
	 * @throws Exception 
	 */
	private static HashMap<String, String> getEFileKanriNo(CAANMsg inCBSMsg, JCCejbEFile jCCejbEFile, HashMap<String, String> eFileInfo ) throws Exception
	{
		//@ 電子ファイル管理番号取得部品の呼び出しを行い、電子ファイル管理番号を取得する。（引数：コネクションオブジェクト）
		//A 部品からJCCFrameworkExceptionが返却された場合、CBSMsgに以下の値を設定し、JCCFrameworkExceptionをスローし、処理を終了する。
		//ステータス：「検索時DBエラー」
		
		//電子ファイル管理番号
		String eFileKanriNo;
		try
		{
			//B 部品より返却された電子ファイル管理番号がnullの場合、CBSMsgに以下の値を設定し、処理を終了する。
			//また、(1)で取得した作業用ディレクトリの削除を行う。
			//電子ファイル管理番号エラーに"EA"を付与
			//ステータス：「関連チェックでエラー」
			eFileKanriNo = jCCejbEFile.getEFileKanriNo();
			if(eFileKanriNo == null)
			{
				inCBSMsg.set(ECC0041D010CBSMsg.EFILE_ERR, "EA");
				inCBSMsg.set(ECC0041D010CBSMsg.STATUS, StatusCodes.RELATION_ERR);
				//また、(1)で取得した作業用ディレクトリの削除を行う。
				try
				{
					JCCejbEFile.removeDir(eFileInfo.get(REMOVE_TEMP_DIR));
				}catch(JCCFrameworkException e)
				{
				}
				
				return null;
			}
			else
			{
				//C AまたはB以外の場合、CBSMsg(電子ファイル管理番号)へ電子ファイル管理番号を設定する。
				inCBSMsg.set(ECC0111D010CBSMsg.EFILE_KANRI_NO, eFileKanriNo);
				eFileInfo.put(EFILE_KANRI_NO, eFileKanriNo);
			}
		
		}
		catch(JCCFrameworkException e)
		{
			inCBSMsg.set(ECC0041D010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			try
			{
				JCCejbEFile.removeDir(eFileInfo.get(REMOVE_TEMP_DIR));
			}
			catch(JCCFrameworkException ex)
			{
			}
			throw e;
		}
		return eFileInfo;
	}

	/**
	 * <p>
	 * 電子ファイル情報の登録
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param 電子ファイル情報チェック部品インスタンス
	 * @param 電子ファイル情報チェック部品の結果
	 * </p>
	 * @throws Exception 
	 */
	private static HashMap<String, String> createEFileInfo(CAANMsg inCBSMsg, JCCejbEFile jCCejbEFile, HashMap<String, String> eFileInfo ) throws Exception
	{
		//(3) 電子ファイル情報の登録(機能コードが"2"の場合は呼び出しは行わない。)
		//@ 電子ファイル登録部品を呼び出し、電子ファイル管理テーブルへ電子ファイルの登録を行う。
		//（引数：コネクションオブジェクト、圧縮後電子ファイルパス、作業用ディレクトリパス、CBSMsg(電子ファイル管理番号)、CBSMsg(世代登録年月日時分秒)、
		//CBSMsg(システムコード)、CBSMsg(ファイルコード)、CBSMsg(物理ファイル名)、CBSMsg(ファイルサイズ)、CBSMsg(圧縮ファイルサイズ)、CBSMsg(ファイル削除年月日時分秒）
		//A 部品からJCCFrameworkExceptionが返却された場合、CBSMsgに以下の値を設定し、JCCFrameworkExceptionをスローし、処理を終了する。
		//ステータス：「更新時DBエラー」
		
		try
		{
			String eventId = EventIDList.ICC0041D001;
			String templateId = inCBSMsg.getString(ECC0111D010CBSMsg.TEMPLATEID);
			String identifyCd = inCBSMsg.getString(ECC0111D010CBSMsg.IDENTIFYCD);
			int status = inCBSMsg.getInt(ECC0111D010CBSMsg.STATUS);
			String operatorId = inCBSMsg.getString(ECC0111D010CBSMsg.OPERATORID);
			String operatedate = inCBSMsg.getString(ECC0111D010CBSMsg.OPERATEDATE);
			String operateDtm = inCBSMsg.getString(ECC0111D010CBSMsg.OPERATEDATETIME);
			String acGroupCd = inCBSMsg.getString(ECC0111D010CBSMsg.AC_GROUP_CD);
			String functionCd = inCBSMsg.getString(ECC0111D010CBSMsg.FUNC_CODE);
			String eFilePath = eFileInfo.get(ASSHUKU_FILE_PATH);
			String geneAddDtm =inCBSMsg.getString("gene_add_dtm");
			// オペレーションIDからシステムIDを取得
			String sysCd = null;
			if (inCBSMsg.isNull("operationID")) { 
				sysCd = "99";
			}else{
				String sys_cd = inCBSMsg.getString("operationID");
				sys_cd = sys_cd.substring(0,2);
				sysCd = sys_cd;
			}
			String fileCd = inCBSMsg.getString(ECC0111D010CBSMsg.FILE_CD);
			String butsuriFileNm = inCBSMsg.getString("butsuri_file_nm");
			String asshukuFileSize = inCBSMsg.getString("asshuku_file_size");
			
			CAANMsg cAANMsg = jCCejbEFile.createEFileInfo(eventId, templateId, identifyCd, status, operatorId, operatedate,
					operateDtm, acGroupCd, functionCd, eFilePath, eFileInfo.get(REMOVE_TEMP_DIR), eFileInfo.get(EFILE_KANRI_NO), geneAddDtm, sysCd,
					fileCd, butsuriFileNm, eFileInfo.get(FILE_SIZE), asshukuFileSize, eFileInfo.get(FILE_DEL_YMD)); 

			inCBSMsg.setPrivate("sys_cd",cAANMsg.getObject(CC0041ETMsg.SYS_CD));
			inCBSMsg.set(ECC0111D010CBSMsg.FILE_CD, cAANMsg.getObject(CC0041ETMsg.FILE_CD));
			inCBSMsg.set(ECC0111D010CBSMsg.EFILE, cAANMsg.getObject(CC0041ETMsg.EFILE));
			inCBSMsg.setPrivate("mk_flg", "0");
			
		}
		catch(JCCFrameworkException e)
		{
			inCBSMsg.set(ECC0041D010CBSMsg.STATUS, StatusCodes.UPDATE_DB_ERR);
			throw e;
		}
		return eFileInfo;
	}

	
	/**
	 * <p>
	 * ディレイド処理依頼データ抽出
	 *
	 *@param inCBSMsg,jCCejbEFile,inContext
	 * @return 
	 * @return eFileInfo
	 * </p>
	 * @throws Exception 
	 */

	private static  String selectDlyd(CAANMsg inCBSMsg, JCCejbEFile jCCejbEFile, AgentDispatchContext inContext) throws Exception
	{
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;
		
		
		String Dlyd = null;
		/******************** 
		 * SQL文の作成
		 ********************/
		
		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());
			
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT ")
					.append("  CC0111.DLYD_TRN_REQ_NO, ")
					.append("  CC0111.DLYD_TRN_REQ_STAT, ")
					.append("  CC0111.DLYD_TRN_JSSI_UNYO_DTM, ")
					.append("  CC0111.INPUT_EFILE_GENE_ADD_DTM, ")
					.append("  CC0111.INPUT_EFILE_KANRI_NO, ")
					.append("  CC0111.REQ_JOB_ID ")
					.append(" FROM ")
					.append("  CC_T_DLYD_TRN_REQ CC0111 ")
					.append(" WHERE ")
					.append("  CC0111.REQ_JOB_ID = 'EO61W0110J0' ")
					.append(" AND CC0111.MK_FLG = '0' ");
			
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, JECC0111D010TPMA.class, sql_Buff);
			
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			
			
			while(rsltQuery.next()){
				// ディレイド処理依頼ステータスを判定する
				String sDLYD_TRN_REQ_STAT = rsltQuery.getString(CC0111ETMsg.DLYD_TRN_REQ_STAT);

				//ディレイド処理依頼ステータスが依頼中または処理中の場合
				//エラー
				if(sDLYD_TRN_REQ_STAT.equals("001")||sDLYD_TRN_REQ_STAT.equals("004")){
					// 依頼ジョブＩＤエラーに"EB"を設定
					inCBSMsg.set(ECC0111D010CBSMsg.REQ_JOB_ID_ERR, "EB");  
					// ステータスに「単項目でチェックエラー」を設定
					inCBSMsg.set(ECC0111D010CBSMsg.STATUS, StatusCodes.RELATION_ERR);
					
					//エラーコード
					
					Dlyd = inCBSMsg.getString(ECC0111D010CBSMsg.REQ_JOB_ID_ERR);

			}
		}
		}catch(SQLException e){
				
				inCBSMsg.set(ECC0111D010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			
		} finally {
				// 資源の解放
				try{
					if(rsltQuery != null){
						rsltQuery.close();
					}
					if(pstmt != null){
						pstmt.close();
					}
					if(con1 != null){
						CAANConnectionMgr.getInstance().close(con1);
					}
				}catch(SQLException e){
					inCBSMsg.set(EAC0591D010CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
					throw new CAANRuntimeException(e);
				}
		}

		return Dlyd;
	}
	
}
