/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEKU0081B110TPDA
*	ソースファイル名：JSYejbEKU0081B110TPDA.java
*	作成者			：EK909411
*	日付			：2023年01月27日
*＜機能概要＞
*	工事進捗状況照会テンプレートDBアクセス部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*
********************************************************************************/

package eo.ejb.cbs.sqlf;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Set;
import java.util.Map.Entry;

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.base.CAANSQLFacility;
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.TemplateDBAccessHandler;

import eo.ejb.cbm.entity.KU0081ETMsg;
import eo.ejb.cbs.cbsmsg.EKU0081B110CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0081B110CBSMsg1List;
import eo.ejb.common.JCCModelCommon;

/**
*
*  テンプレートDBアクセス部品　EKU0081B110_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*/
public class JSYejbEKU0081B110TPDA extends CAANSQLFacility implements TemplateDBAccessHandler{

	/**
	 * コンストラクタ
	 */
	public JSYejbEKU0081B110TPDA()	{
	}

	/**
	*   EKU0081B110_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	public void invoke(CAANMsg inMsg,AgentDispatchContext inContext){

		// コネクション
		Connection con1 = null;

		// プリペアステートメント
		PreparedStatement pstmt = null;

		// リザルトセット
		ResultSet rsltQuery = null;

		// プリペアステートメント
		PreparedStatement pstmt2 = null;

		// リザルトセット
		ResultSet rsltQuery2 = null;

		/********************
		 * SQL文の作成
		 ********************/

		try{

			//コネクション取得
			con1 = JSYejbConnection.getConnection(KU0081ETMsg.getTableName());

			// SQL文_基本部1
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append("SELECT ")
					.append(" KU0081.SVC_KEI_NO, ")
					.append(" KU0081.SVC_CD, ")
					.append(" KU0081.SYSID, ")
					.append(" KU0081.SVC_KEI_KAISEN_UCWK_NO, ")
					.append(" KU0011.KOJIAK_NO, ")
					.append(" KU0011.KOJIAK_STAT, ")
					.append(" KU0011.KOJIAK_SBT_CD, ")
					.append(" KU0011.RCNT_KIHON_KOJI_FLG, ")
					.append(" KU0011.MSKM_UK_YMD, ")
					.append(" KU0011.KOJI_KIBO_YMD, ")
					.append(" KU0011.KOJIAK_REQYMD, ")
					.append(" KU0011.TAKNI_KOJI_FIN_RSV_YMD, ")
					.append(" KU0011.NYUKYO_RSV_YMD, ")
					.append(" KU0011.DOJI_DAIHYO_KOJIAK_NO, ")
					.append(" KU0011.TEL_RRK_KIBO_YMD, ")
					.append(" KU0011.KOJIAK_STAT_CHGE_YMD, ")
					.append(" KU0011.KOJI_UK_OPTNTY_IDO_DIV, ")
					.append(" KU0011.TAKCHO_KIBO_YMD, ")
					.append(" KU0011.TAKCHO_JSSI_YMD, ")
					.append(" KU0011.TAKCHO_FIN_YMD, ")
					.append(" KU0011.KOJIAK_JSSI_YMD, ")
					.append(" KU0011.KOJIAK_FIN_DTM, ")
					.append(" KU0011.KOJIAK_CANCEL_YMD, ")
					.append(" KU0011.KOJIAK_STP_UK_YMD, ")
					.append(" KU0011.KOJIAK_STP_ADD_YMD, ")
					.append(" KU0011.KOJIAK_STP_YMD, ")
					.append(" KU0011.MANS_KOJIAK_STAT_CD, ")
					.append(" KU0151.KOJI_STEP_PRG_YMD, ")
					.append(" KU0151.KOJI_STEP_PRG_STAT_CD, ")
					.append(" KU0151.OPMS_STAT_UPD_YMD, ")
					.append(" KU0151.KOJI_STEP_PRG_PCD, ")
					.append(" KU0151.STEP_TAKCHO_SDAKS_RCP_YMD, ")
					.append(" KU0151.TAKCHO_FIN_YMD, ")
					.append(" KU0151.KOJIAK_FIN_RSV_YMD, ")
					.append(" KU0151.KOKI_FLOW_CD, ")
					.append(" KU0151.TAKNIKJ_RSV_YMD, ")
					.append(" KU0151.STEP_UK_FIN_CD, ")
					.append(" KU0151.STEP_HROUTE_CHOSA_DSGN_CD, ")
					.append(" KU0151.STEP_CUST_TAKCHO_NTADJ_CD, ")
					.append(" KU0151.STEP_CUST_TAKCHO_CD, ")
					.append(" KU0151.STEP_VARI_KYOKA_SHINSEI_CD, ")
					.append(" KU0151.STEP_TAKCHO_SDAKS_RCP_CD, ")
					.append(" KU0151.STEP_HCABLE_LINE_KOJI_CD, ")
					.append(" KU0151.STEP_CUST_TAKNI_KOJI_CD, ")
					.append(" KU0151.STEP_USE_STA_CD, ")
					.append(" KU0151.DSGN_NG_FLG, ")
					.append(" KU0151.CHOSA_NG_FLG, ")
					.append(" KU0151.CANCEL_FLG, ")
					.append(" KU0151.IRREGULAR_FLG, ")
					.append(" KU0151.TAKCHO_JSSI_FLG, ")
					.append(" KU0151.KOKI_CHGRE_MEMO, ")
					.append(" KU0151.TAKCHO_FIN_HM, ")
					.append(" KU0151.TAKNIKJ_RSV_HM, ")
					.append(" KU0151.KJ_RSV_SBT_CD ");
			// SQL文_個別部1
			if ( "1".equals( inMsg.getObject(EKU0081B110CBSMsg.FUNC_CODE).toString() ) ) {
 				sql_Buff.append(" FROM ")
						.append(" KU_T_SVKEI_KOJIAK KU0081 ")
						.append(" INNER JOIN KU_T_KOJIAK KU0011 ")
						.append(" ON KU0011.KOJIAK_NO = KU0081.KOJIAK_NO ")
 						.append(" AND KU0011.SYSID = KU0081.SYSID ");

						if (!(inMsg.isNull(EKU0081B110CBSMsg.KEY_SYSID))){
							sql_Buff.append(" AND KU0081.SYSID = ? ");
						}
						if (!(inMsg.isNull(EKU0081B110CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO))){
							sql_Buff.append(" AND KU0081.SVC_KEI_KAISEN_UCWK_NO = ? ");
						}
						if (!(inMsg.isNull(EKU0081B110CBSMsg.KEY_SVC_KEI_NO))){
							sql_Buff.append(" AND KU0081.SVC_KEI_NO = ? ");
						}

						sql_Buff.append(" AND ? BETWEEN KU0081.SVKEI_KOJIAK_TSTAYMD AND KU0081.SVKEI_KOJIAK_TENDYMD ")
						.append(" AND KU0081.MK_FLG = '0' ")
						.append(" AND KU0011.KOJIAK_SBT_CD IN ('001', '003', '009') ")
						.append(" AND KU0011.KOJIAK_STAT <> '900' ")
						.append(" AND ( KU0011.MANS_KOJIAK_STAT_CD <> '900' OR KU0011.MANS_KOJIAK_STAT_CD IS NULL ) ")
						.append(" AND KU0011.MK_FLG = '0' ")
						.append(" LEFT OUTER JOIN ( ")
						.append(" SELECT ")
						.append(" KU0151_MAIN.KOJIAK_NO, ")
						.append(" KU0151_MAIN.KOJI_STEP_PRG_YMD, ")
						.append(" KU0151_MAIN.KOJI_STEP_PRG_STAT_CD, ")
						.append(" KU0151_MAIN.OPMS_STAT_UPD_YMD, ")
						.append(" KU0151_MAIN.KOJI_STEP_PRG_PCD, ")
						.append(" KU0151_MAIN.STEP_TAKCHO_SDAKS_RCP_YMD, ")
						.append(" KU0151_MAIN.TAKCHO_FIN_YMD, ")
						.append(" KU0151_MAIN.KOJIAK_FIN_RSV_YMD, ")
						.append(" KU0151_MAIN.KOKI_FLOW_CD, ")
						.append(" KU0151_MAIN.TAKNIKJ_RSV_YMD, ")
						.append(" KU0151_MAIN.STEP_UK_FIN_CD, ")
						.append(" KU0151_MAIN.STEP_HROUTE_CHOSA_DSGN_CD, ")
						.append(" KU0151_MAIN.STEP_CUST_TAKCHO_NTADJ_CD, ")
						.append(" KU0151_MAIN.STEP_CUST_TAKCHO_CD, ")
						.append(" KU0151_MAIN.STEP_VARI_KYOKA_SHINSEI_CD, ")
						.append(" KU0151_MAIN.STEP_TAKCHO_SDAKS_RCP_CD, ")
						.append(" KU0151_MAIN.STEP_HCABLE_LINE_KOJI_CD, ")
						.append(" KU0151_MAIN.STEP_CUST_TAKNI_KOJI_CD, ")
						.append(" KU0151_MAIN.STEP_USE_STA_CD, ")
						.append(" KU0151_MAIN.DSGN_NG_FLG, ")
						.append(" KU0151_MAIN.CHOSA_NG_FLG, ")
						.append(" KU0151_MAIN.CANCEL_FLG, ")
						.append(" KU0151_MAIN.IRREGULAR_FLG, ")
						.append(" KU0151_MAIN.TAKCHO_JSSI_FLG, ")
						.append(" KU0151_MAIN.KOKI_CHGRE_MEMO, ")
						.append(" KU0151_MAIN.TAKCHO_FIN_HM, ")
						.append(" KU0151_MAIN.TAKNIKJ_RSV_HM, ")
						.append(" KU0151_MAIN.KJ_RSV_SBT_CD ")
						.append(" FROM ")
						.append(" KU_T_KOJI_STEP_PRG KU0151_MAIN ")
						.append(" WHERE ")
						.append(" KU0151_MAIN.MK_FLG = '0' ")
						.append(" AND (KU0151_MAIN.KOJIAK_NO, KU0151_MAIN.KOJI_STEP_PRG_YMD) = ( ")
						.append(" SELECT ")
						.append(" KU0151_SUB.KOJIAK_NO, MAX(KU0151_SUB.KOJI_STEP_PRG_YMD) ")
						.append(" FROM ")
						.append(" KU_T_KOJI_STEP_PRG KU0151_SUB ")
						.append(" WHERE ")
						.append(" KU0151_SUB.KOJIAK_NO = KU0151_MAIN.KOJIAK_NO ")
						.append(" AND KU0151_SUB.MK_FLG = '0' ")
						.append(" GROUP BY ")
						.append(" KU0151_SUB.KOJIAK_NO ")
						.append(" ) ")
						.append(" ) KU0151 ")
						.append(" ON KU0151.KOJIAK_NO = KU0081.KOJIAK_NO ")
						.append(" ORDER BY ")
						.append("     KU0011.KOJIAK_REQYMD DESC,KU0081.SVC_CD,KU0011.RCNT_KIHON_KOJI_FLG DESC ");
			}

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);

			int num = 1;
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			if ( "1".equals( inMsg.getString(EKU0081B110CBSMsg.FUNC_CODE) ) ) {

				if (!(inMsg.isNull(EKU0081B110CBSMsg.KEY_SYSID))){
					// パラメータの設定(ＫＥＹ＿ＳＹＳＩＤを指定)
					CAANJDBCUtil.setParam(pstmt, num++, inMsg.getObject(EKU0081B110CBSMsg.KEY_SYSID));
				}
				if (!(inMsg.isNull(EKU0081B110CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO))){
					// パラメータの設定(ＫＥＹ＿サービス契約回線内訳番号を指定)
					CAANJDBCUtil.setParam(pstmt, num++, inMsg.getObject(EKU0081B110CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO));
				}
				if (!(inMsg.isNull(EKU0081B110CBSMsg.KEY_SVC_KEI_NO))){
					// パラメータの設定(ＫＥＹ＿サービス契約番号を指定)
					CAANJDBCUtil.setParam(pstmt, num++, inMsg.getObject(EKU0081B110CBSMsg.KEY_SVC_KEI_NO));
				}

				// パラメータの設定(運用日付を設定)
				CAANJDBCUtil.setParam(pstmt, num++, JCCModelCommon.getOpeDate(inMsg, null));
			}

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// EKU0081B110CBSMsgの明細にセットする項目
			String[] msgKeyList1 = {
					  EKU0081B110CBSMsg1List.SVC_KEI_NO
					, EKU0081B110CBSMsg1List.SVC_CD
					, EKU0081B110CBSMsg1List.SYSID
					, EKU0081B110CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO
					, EKU0081B110CBSMsg1List.KOJIAK_NO
					, EKU0081B110CBSMsg1List.KOJIAK_STAT
					, EKU0081B110CBSMsg1List.KOJIAK_SBT_CD
					, EKU0081B110CBSMsg1List.RCNT_KIHON_KOJI_FLG
					, EKU0081B110CBSMsg1List.MSKM_UK_YMD
					, EKU0081B110CBSMsg1List.KOJI_KIBO_YMD
					, EKU0081B110CBSMsg1List.KOJIAK_REQYMD
					, EKU0081B110CBSMsg1List.TAKNI_KOJI_FIN_RSV_YMD
					, EKU0081B110CBSMsg1List.NYUKYO_RSV_YMD
					, EKU0081B110CBSMsg1List.DOJI_DAIHYO_KOJIAK_NO
					, EKU0081B110CBSMsg1List.TEL_RRK_KIBO_YMD
					, EKU0081B110CBSMsg1List.KOJIAK_STAT_CHGE_YMD
					, EKU0081B110CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV
					, EKU0081B110CBSMsg1List.TAKCHO_KIBO_YMD
					, EKU0081B110CBSMsg1List.TAKCHO_JSSI_YMD
					, EKU0081B110CBSMsg1List.KOJIAK_TAKCHO_FIN_YMD
					, EKU0081B110CBSMsg1List.KOJIAK_JSSI_YMD
					, EKU0081B110CBSMsg1List.KOJIAK_FIN_DTM
					, EKU0081B110CBSMsg1List.KOJIAK_CANCEL_YMD
					, EKU0081B110CBSMsg1List.KOJIAK_STP_UK_YMD
					, EKU0081B110CBSMsg1List.KOJIAK_STP_ADD_YMD
					, EKU0081B110CBSMsg1List.KOJIAK_STP_YMD
					, EKU0081B110CBSMsg1List.MANS_KOJIAK_STAT_CD
					, EKU0081B110CBSMsg1List.KOJI_STEP_PRG_YMD
					, EKU0081B110CBSMsg1List.KOJI_STEP_PRG_STAT_CD
					, EKU0081B110CBSMsg1List.OPMS_STAT_UPD_YMD
					, EKU0081B110CBSMsg1List.KOJI_STEP_PRG_PCD
					, EKU0081B110CBSMsg1List.STEP_TAKCHO_SDAKS_RCP_YMD
					, EKU0081B110CBSMsg1List.TAKCHO_FIN_YMD
					, EKU0081B110CBSMsg1List.KOJIAK_FIN_RSV_YMD
					, EKU0081B110CBSMsg1List.KOKI_FLOW_CD
					, EKU0081B110CBSMsg1List.TAKNIKJ_RSV_YMD
					, EKU0081B110CBSMsg1List.STEP_UK_FIN_CD
					, EKU0081B110CBSMsg1List.STEP_HROUTE_CHOSA_DSGN_CD
					, EKU0081B110CBSMsg1List.STEP_CUST_TAKCHO_NTADJ_CD
					, EKU0081B110CBSMsg1List.STEP_CUST_TAKCHO_CD
					, EKU0081B110CBSMsg1List.STEP_VARI_KYOKA_SHINSEI_CD
					, EKU0081B110CBSMsg1List.STEP_TAKCHO_SDAKS_RCP_CD
					, EKU0081B110CBSMsg1List.STEP_HCABLE_LINE_KOJI_CD
					, EKU0081B110CBSMsg1List.STEP_CUST_TAKNI_KOJI_CD
					, EKU0081B110CBSMsg1List.STEP_USE_STA_CD
					, EKU0081B110CBSMsg1List.DSGN_NG_FLG
					, EKU0081B110CBSMsg1List.CHOSA_NG_FLG
					, EKU0081B110CBSMsg1List.CANCEL_FLG
					, EKU0081B110CBSMsg1List.IRREGULAR_FLG
					, EKU0081B110CBSMsg1List.TAKCHO_JSSI_FLG
					, EKU0081B110CBSMsg1List.KOKI_CHGRE_MEMO
					, EKU0081B110CBSMsg1List.TAKCHO_FIN_HM
					, EKU0081B110CBSMsg1List.TAKNIKJ_RSV_HM
					, EKU0081B110CBSMsg1List.KJ_RSV_SBT_CD
			};

			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg1 = mapMessageList(rsltQuery,msgKeyList1,"eo.ejb.cbs.cbsmsg.EKU0081B110CBSMsg1List",0);

			if (outMsg1 != null && outMsg1.length != 0)
			{
				// SQL文(KU0291_工事進捗率定義_KU_M_KJSC_RT_TEIGI)
				StringBuffer sql_Buff2 = new StringBuffer();
				sql_Buff2.append("SELECT ")
							.append("    KU0291.KJSC_RT_TEIGI_ID, ")
							.append("    KU0291.YUSEN_JUN, ")
							.append("    KU0291.STEP_HROUTE_CHOSA_DSGN_CD, ")
							.append("    KU0291.STEP_CUST_TAKCHO_NTADJ_CD, ")
							.append("    KU0291.STEP_CUST_TAKCHO_CD, ")
							.append("    KU0291.STEP_VARI_KYOKA_SHINSEI_CD, ")
							.append("    KU0291.STEP_TAKCHO_SDAKS_RCP_CD, ")
							.append("    KU0291.STEP_HCABLE_LINE_KOJI_CD, ")
							.append("    KU0291.STEP_CUST_TAKNI_KOJI_CD, ")
							.append("    KU0291.STEP_USE_STA_CD, ")
							.append("    KU0291.TAKCHO_JSSI_FLG, ")
							.append("    KU0291.NOW_KOJI_STEP_PRG_STAT_CD, ")
							.append("    KU0291.NEXT_KOJI_STEP_PRG_STAT_CD, ")
							.append("    KU0291.KOJI_STEP_PRG_RT, ")
							.append("   (SELECT ZM0171.CD_DIV_NM ")
							.append("    FROM   ZM_M_CD_NM_KANRI ZM0171 ")
							.append("    WHERE  ZM0171.CD_SBT_CD = 'CD01805' ")
							.append("    AND    ZM0171.CD_DIV = KU0291.NOW_KOJI_STEP_PRG_STAT_CD ")
							.append("    AND    ? BETWEEN ZM0171.CD_TSTAYMD AND ZM0171.CD_TENDYMD ")
							.append("    AND    ZM0171.MK_FLG = '0' ")
							.append("    ) AS NOW_KOJI_STEP_PRG_STAT_NM, ")
							.append("   (SELECT ZM0171.CD_DIV_NM ")
							.append("    FROM   ZM_M_CD_NM_KANRI ZM0171 ")
							.append("    WHERE  ZM0171.CD_SBT_CD = 'CD01805' ")
							.append("    AND    ZM0171.CD_DIV = KU0291.NEXT_KOJI_STEP_PRG_STAT_CD ")
							.append("    AND    ? BETWEEN ZM0171.CD_TSTAYMD AND ZM0171.CD_TENDYMD ")
							.append("    AND    ZM0171.MK_FLG = '0' ")
							.append("    ) AS NEXT_KOJI_STEP_PRG_STAT_NM ")
							.append("FROM ")
							.append("    KU_M_KJSC_RT_TEIGI KU0291 ")
							.append("WHERE ")
							.append("    KU0291.MK_FLG = '0' ")
							.append("ORDER BY ")
							.append("    KU0291.YUSEN_JUN ");

				//prepareStatementにSQL文をセット
				pstmt2 = con1.prepareStatement(sql_Buff2.toString());

				// ●運用日付取得
				String opeDate = JCCModelCommon.getOpeDate(inMsg, null);
				// パラメータの設定(運用日付を設定)
				CAANJDBCUtil.setParam(pstmt2, 1, opeDate);
				// パラメータの設定(運用日付を設定)
				CAANJDBCUtil.setParam(pstmt2, 2, opeDate);

				//ログ出力(SQL文の出力)
				JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff2);

				// ResultSetの取得
				rsltQuery2 = pstmt2.executeQuery();

				LinkedList<HashMap<String, String>> kjscRtTeigiList = new LinkedList<HashMap<String, String>>();

				while (rsltQuery2.next())
				{
					HashMap<String, String> kjscRtTeigiMap = new HashMap<String, String>();

					// 工事進捗率定義ID
					String kjscRtTeigiId = rsltQuery2.getString("KJSC_RT_TEIGI_ID");
					kjscRtTeigiMap.put("KJSC_RT_TEIGI_ID", toEmpty(kjscRtTeigiId));

					// 優先順位
					String yusenJun = rsltQuery2.getString("YUSEN_JUN");
					kjscRtTeigiMap.put("YUSEN_JUN", toEmpty(yusenJun));

					// 現在工事工程進捗状態コード
					String nowKojiStepPrgStatCd = rsltQuery2.getString(EKU0081B110CBSMsg1List.NOW_KOJI_STEP_PRG_STAT_CD);
					kjscRtTeigiMap.put(EKU0081B110CBSMsg1List.NOW_KOJI_STEP_PRG_STAT_CD, toEmpty(nowKojiStepPrgStatCd));

					// 現在工事工程進捗状態名称
					String nowKojiStepPrgStatNm = rsltQuery2.getString(EKU0081B110CBSMsg1List.NOW_KOJI_STEP_PRG_STAT_NM);
					kjscRtTeigiMap.put(EKU0081B110CBSMsg1List.NOW_KOJI_STEP_PRG_STAT_NM, toEmpty(nowKojiStepPrgStatNm));

					// 次回工事工程進捗状態コード
					String nextKojiStepPrgStatCd = rsltQuery2.getString(EKU0081B110CBSMsg1List.NEXT_KOJI_STEP_PRG_STAT_CD);
					kjscRtTeigiMap.put(EKU0081B110CBSMsg1List.NEXT_KOJI_STEP_PRG_STAT_CD, toEmpty(nextKojiStepPrgStatCd));

					// 次回工事工程進捗状態名称
					String nextKojiStepPrgStatNm = rsltQuery2.getString(EKU0081B110CBSMsg1List.NEXT_KOJI_STEP_PRG_STAT_NM);
					kjscRtTeigiMap.put(EKU0081B110CBSMsg1List.NEXT_KOJI_STEP_PRG_STAT_NM, toEmpty(nextKojiStepPrgStatNm));

					// 工事工程進捗率
					String kojiStepPrgRt = rsltQuery2.getString(EKU0081B110CBSMsg1List.KOJI_STEP_PRG_RT);
					kjscRtTeigiMap.put(EKU0081B110CBSMsg1List.KOJI_STEP_PRG_RT, toEmpty(kojiStepPrgRt));

					// 工程光ルート調査設計コード
					String stepHrouteChosaDsgnCd = rsltQuery2.getString(EKU0081B110CBSMsg1List.STEP_HROUTE_CHOSA_DSGN_CD);
					if (!isEmpty(stepHrouteChosaDsgnCd))
					{
						kjscRtTeigiMap.put(EKU0081B110CBSMsg1List.STEP_HROUTE_CHOSA_DSGN_CD, stepHrouteChosaDsgnCd);
					}

					// 工程お客様宅内調査日程調整コード
					String stepCustTakchoNtadjCd = rsltQuery2.getString(EKU0081B110CBSMsg1List.STEP_CUST_TAKCHO_NTADJ_CD);
					if (!isEmpty(stepCustTakchoNtadjCd))
					{
						kjscRtTeigiMap.put(EKU0081B110CBSMsg1List.STEP_CUST_TAKCHO_NTADJ_CD, stepCustTakchoNtadjCd);
					}

					// 工程お客様宅内調査コード
					String stepCustTakchoCd = rsltQuery2.getString(EKU0081B110CBSMsg1List.STEP_CUST_TAKCHO_CD);
					if (!isEmpty(stepCustTakchoCd))
					{
						kjscRtTeigiMap.put(EKU0081B110CBSMsg1List.STEP_CUST_TAKCHO_CD, stepCustTakchoCd);
					}

					// 工程各種許可申請コード
					String stepVariKyokaShinseiCd = rsltQuery2.getString(EKU0081B110CBSMsg1List.STEP_VARI_KYOKA_SHINSEI_CD);
					if (!isEmpty(stepVariKyokaShinseiCd))
					{
						kjscRtTeigiMap.put(EKU0081B110CBSMsg1List.STEP_VARI_KYOKA_SHINSEI_CD, stepVariKyokaShinseiCd);
					}

					// 工程宅内調査承諾書受領コード
					String stepTakchoSdaksRcpCd = rsltQuery2.getString(EKU0081B110CBSMsg1List.STEP_TAKCHO_SDAKS_RCP_CD);
					if (!isEmpty(stepTakchoSdaksRcpCd))
					{
						kjscRtTeigiMap.put(EKU0081B110CBSMsg1List.STEP_TAKCHO_SDAKS_RCP_CD, stepTakchoSdaksRcpCd);
					}

					// 工程光ケーブル線路工事コード
					String stepHcableLineKojiCd = rsltQuery2.getString(EKU0081B110CBSMsg1List.STEP_HCABLE_LINE_KOJI_CD);
					if (!isEmpty(stepHcableLineKojiCd))
					{
						kjscRtTeigiMap.put(EKU0081B110CBSMsg1List.STEP_HCABLE_LINE_KOJI_CD, stepHcableLineKojiCd);
					}

					// 工程お客様宅内工事コード
					String stepCustTakniKojiCd = rsltQuery2.getString(EKU0081B110CBSMsg1List.STEP_CUST_TAKNI_KOJI_CD);
					if (!isEmpty(stepCustTakniKojiCd))
					{
						kjscRtTeigiMap.put(EKU0081B110CBSMsg1List.STEP_CUST_TAKNI_KOJI_CD, stepCustTakniKojiCd);
					}

					// 工程ご利用開始コード
					String stepUseStaCd = rsltQuery2.getString(EKU0081B110CBSMsg1List.STEP_USE_STA_CD);
					if (!isEmpty(stepUseStaCd))
					{
						kjscRtTeigiMap.put(EKU0081B110CBSMsg1List.STEP_USE_STA_CD, stepUseStaCd);
					}

					// 宅内調査実施フラグ
					String takchoJssiFlg = rsltQuery2.getString(EKU0081B110CBSMsg1List.TAKCHO_JSSI_FLG);
					if (!isEmpty(takchoJssiFlg))
					{
						kjscRtTeigiMap.put(EKU0081B110CBSMsg1List.TAKCHO_JSSI_FLG, takchoJssiFlg);
					}

					kjscRtTeigiList.add(kjscRtTeigiMap);
				}

				for (CAANMsg outMsg : outMsg1)
				{
					// 抽出した工事工程進捗情報のレコード数分、以下の処理を行う。

					if (outMsg.isNull(EKU0081B110CBSMsg1List.KOJI_STEP_PRG_YMD))
					{
						// 工事工程進捗年月日が未設定の場合、工事工程進捗なしと判断してスキップ。
						continue;
					}

					// 工事進捗率定義の全一致判断(全一致:true、全一致以外:false)
					boolean isAllMatchKjscRtTeigi = false;

					for (Iterator<HashMap<String, String>> iterator = kjscRtTeigiList.iterator(); iterator.hasNext();)
					{
						// 抽出した工事進捗率定義マスタのレコード数分、以下の処理を行う。

						// 工事進捗率定義マスタの1レコードを取得。
						HashMap<String, String> kjscRtTeigiMap = (HashMap<String, String>)iterator.next();

						// 工事進捗率定義マスタとの一致件数の初期化(工事進捗率定義ID、優先順位、現在工事工程進捗状態コード、現在工事工程進捗状態名称、次回工事工程進捗状態コード、次回工事工程進捗状態名称、工事工程進捗率の7件)
						int kjscRtTeigiMatchCnt = 7;

						Set<Entry<String, String>> kjscRtTeigiInfo = kjscRtTeigiMap.entrySet();

						for (Iterator<Entry<String, String>> iterator2 = kjscRtTeigiInfo.iterator(); iterator2.hasNext();)
						{
							// 工事進捗率定義マスタの1レコードの項目数分、以下の処理を行う。

							// 工事進捗率定義マスタの1レコードの1項目取得。
							Entry<String, String> entry = (Entry<String, String>)iterator2.next();

							if (entry.getValue().equals(outMsg.getString(entry.getKey())))
							{
								// 工事進捗率定義マスタの1レコード内の項目値と工事工程進捗情報の同項目値が一致した場合

								// 工事進捗率定義マスタとの一致件数をカウントアップ
								kjscRtTeigiMatchCnt++;

								if (kjscRtTeigiMatchCnt == kjscRtTeigiMap.size())
								{
									//工事進捗率定義マスタとの一致件数と工事進捗率定義マスタの1レコードの項目数が同じ場合（全一致）

									//工事進捗率定義全一致判断を「true」にする。
									isAllMatchKjscRtTeigi = true;

									// 全一致の為、forを抜ける。
									break;
								}
							}
						}

						if (isAllMatchKjscRtTeigi)
						{
							// 工事進捗率定義と全一致した場合

							// 現在工事工程進捗状態コード
							outMsg.set(EKU0081B110CBSMsg1List.NOW_KOJI_STEP_PRG_STAT_CD, toEmpty(kjscRtTeigiMap.get(EKU0081B110CBSMsg1List.NOW_KOJI_STEP_PRG_STAT_CD)));
							// 現在工事工程進捗状態名称
							outMsg.set(EKU0081B110CBSMsg1List.NOW_KOJI_STEP_PRG_STAT_NM, toEmpty(kjscRtTeigiMap.get(EKU0081B110CBSMsg1List.NOW_KOJI_STEP_PRG_STAT_NM)));
							// 次回工事工程進捗状態コード
							outMsg.set(EKU0081B110CBSMsg1List.NEXT_KOJI_STEP_PRG_STAT_CD, toEmpty(kjscRtTeigiMap.get(EKU0081B110CBSMsg1List.NEXT_KOJI_STEP_PRG_STAT_CD)));
							// 次回工事工程進捗状態名称
							outMsg.set(EKU0081B110CBSMsg1List.NEXT_KOJI_STEP_PRG_STAT_NM, toEmpty(kjscRtTeigiMap.get(EKU0081B110CBSMsg1List.NEXT_KOJI_STEP_PRG_STAT_NM)));
							// 工事工程進捗率
							outMsg.set(EKU0081B110CBSMsg1List.KOJI_STEP_PRG_RT, toEmpty(kjscRtTeigiMap.get(EKU0081B110CBSMsg1List.KOJI_STEP_PRG_RT)));

							// マッピングした為、forを抜ける。
							break;
						}
					}
				}
			}

			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EKU0081B110CBSMsg1List", outMsg1);

		}
		catch (SQLException e)
		{
			inMsg.set(EKU0081B110CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		finally
		{
			// 資源の解放
			try
			{

				if (rsltQuery != null)
				{
					rsltQuery.close();
				}
				if (pstmt != null)
				{
					pstmt.close();
				}

				if (rsltQuery2 != null)
				{
					rsltQuery2.close();
				}
				if (pstmt2 != null)
				{
					pstmt2.close();
				}

				if (con1 != null)
				{
					closeConnection(con1);
				}
			}
			catch (SQLException e)
			{
				inMsg.set(EKU0081B110CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}

	/**
	 * 空文字判断
	 * 
	 * @param value
	 * @return
	 */
	private boolean isEmpty(String value)
	{
		return value == null || value.trim().length() == 0;
	}

	/**
	 * 未設定時に空文字を取得
	 * <br/>
	 * 
	 * 値がnull、又はトリム後に空文字の場合は空文字を返却。
	 * 
	 * @param value
	 * @return 値がnull、又はトリム後に空文字の場合は空文字を返却。
	 */
	private String toEmpty(String value)
	{
		return value == null || value.trim().length() == 0 ? "" : value.trim();
	}
}
