/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEDK0011B090TPDA
*	ソースファイル名：JSYejbEDK0011B090TPDA.java
*	作成者			：EK909141
*	日付			：2011年11月18日
*＜機能概要＞
*	SQLFacility
*	テンプレート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.ArrayList;

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.DK0011ETMsg;
import eo.ejb.cbs.cbsmsg.EDK0011B090CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0011B090CBSMsg1List;

/**
*
*  テンプレートDBアクセス部品　EDK0011B090_SQLF<br>
*  入力された項目からSQL文を動的に組み立て、<br>
*  検索結果をCBSMsgにセットします。<br>
*/
public class JSYejbEDK0011B090TPDA extends CAANSQLFacility implements TemplateDBAccessHandler{
	
	/**
	 * コンストラクタ
	 */
	public JSYejbEDK0011B090TPDA()	{
	}
	
	/**
	*   EDK0011B090_SQLF<br>
	*   @param inMsg    入力値の格納されたCBSMsg <br>
	*   @return void
	*/
	public void invoke(CAANMsg inMsg,AgentDispatchContext inContext){
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;
		
		/******************** 
		 * SQL文の作成
		 ********************/

		try{
			
			//コネクション取得
			con1 = JSYejbConnection.getConnection(DK0011ETMsg.getTableName());
			
			// バインド変数格納用配列
			ArrayList<Object> bindValues = new ArrayList<Object>();
			
			// SQL文_基本部1
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT DK0011.HAISO_NO, ")
					.append("        DK0011.HAISO_STAT, ")
					.append("     DK0011.HISOS_KOCOMP_CD, ")
					.append("        DK0011.HAISO_DIV, ")
					.append("        DK0011.HAISO_MEMO, ")
					.append("        DK0011.HISOS_KSITEI_FLG, ")
					.append("        DK0011.HISOS_NM, ")
					.append("        DK0011.HISOS_AD_CD, ")
					.append("        DK0011.HISOS_PCD, ")
					.append("        DK0011.HISOS_STATE_NM, ")
					.append("        DK0011.HISOS_CITY_NM, ")
					.append("        DK0011.HISOS_OAZTSU_NM, ")
					.append("        DK0011.HISOS_AZCHO_NM, ")
					.append("        DK0011.HISOS_BNCHIGO, ")
					.append("        DK0011.HISOS_ADRTTM, ")
					.append("        DK0011.HISOS_ADRRM, ")
					.append("        DK0011.HISOS_TELNO, ")
					.append("        DK0021.KIKI_STC_SAKI_PLACE_NO PLACE_NO, ")
					.append("     DK0011.HAISO_MOTO_SOKO_CD, ")
					.append("     DK0021.HAISO_MOTO_SKDN_CD, ")
					.append("        DK0011.AD_MI_FIX_FLG, ")
					.append("        DK0011.SHUKKA_TAIKI_FLG, ")
					.append("        DK0011.SHUKKA_YMD, ")
					.append("        DK0011.BTRYHOZN_NO, ")
					.append("        DK0011.HAISO_KIGEN_YMD, ")
					.append("        DK0011.HAISO_ARIV_SHITEI_YMD, ")
					.append("        DK0011.MSKM_NO, ")
					.append("        DK0011.HAISO_ARIV_SHITEI_TIME_CD, ")
					.append("        DK0011.TCHISHO_TEMP_CD, ")
					.append("        DK0011.UPD_DTM AS UPD_DTM_HAISO, ")
					.append("        DK0021.HAISO_TAIBPIN_NO, ")
					.append("        DK0021.KKTK_SVC_KEI_NO, ")
					.append("        DK0021.TAKNKIKI_SBT_CD, ")
					.append("        DK0021.HUZOKUHIN_SBT_CD, ")
					.append("        DK0021.TAKNKIKI_MODEL_CD, ")
					.append("        DK0021.HUZOKUHIN_MODEL_CD, ")
					.append("        DK0021.TAKNKIKI_SETHIN_MODEL_CD, ")
					.append("        DK0021.KIKI_SEIZO_NO, ")
					.append("        DK0021.TAKNKIKI_SETHIN_NO, ")
					.append("        DK0021.DENPYO_NO, ")
					.append("        DK0021.MSKM_DTL_NO, ")
					.append("        DK0021.KOJIAK_NO, ")
					.append("        DK0021.MSKMSHO_NO, ")
					.append("        DK0021.KIKI_HUKA_INFO_CD, ")
					.append("        DK0021.PCRS_CD, ")
					.append("        DK0021.UPD_DTM, ")
					.append("        DK0021.ADD_OPTNTY_KEI_IDO_DIV, ")
					.append("        DK0021.ADD_OPTNTY_KEI_IDO_DTM, ")
					.append("        DK0011.HAISO_UK_YMD, ")
					.append("        DK0011.HOJIN_SVC_KEI_UK_NO, ")
					.append("        DK0021.HOJIN_SVC_KEI_UK_NOPARTS, ")
					.append("        DK0021.HJIN_EO_YKAE_SVKEI_NO, ")
					.append("        DK0011.HOJIN_KEISHA_NM, ")
					.append("        DK0011.HOJIN_RRKS_KTAI_TELNO, ")
					.append("        DK0011.TA_SYS_RNKI_FLG, ")
					.append("        DK0011.TA_SYS_RNKI_YMD, ")
					.append("        DK0011.TA_SYS_RNKS_CD, ")
					.append("        DK0011.HOJIN_PRC_GRP_CD, ")
					.append("        DK0011.HOJIN_PCRS_CD, ")
					.append("        DK0011.HOJIN_PPLAN_CD, ")
					.append("        DK0011.HAITATSU_FIN_RSV_DTM, ")
					.append("        DK0011.HAISO_SJI_YMD, ")
					.append("        DK0011.MODEL_CHGE_CD, ")
					.append("        DK0011.SHUKKA_LOT_NO, ")
					.append("        DK0011.HAISO_FIN_YMD, ")
					.append("        DK0011.HAISO_STP_ID, ")
					.append("        DK0011.HAISO_STP_CD, ")
					.append("        DK0011.HAISO_STP_YMD, ")
					.append("        DK0021.SHUKKA_LOT_NO, ")
					.append("        DK0021.SHUKKA_LOT_KIKI_SEQ, ")
					.append("        DK0021.KIKI_CHG_NO, ")
					.append("        DK0021.HAISO_KIKI_CHGE_CD, ")
					.append("        DK0021.TCASE_NO, ")
					.append("        DK0021.HOJIN_HAMBAI_SBT_CD, ")
					.append("        DK0021.HOJIN_TK_SBT_CD, ")
					.append("        DK0011.HAISO_RSV_YMD, ")
					.append("     DK0011.IDOMOTO_KRIPLACE_SKCD, ")
					.append("     DK0011.IDOMOTO_KOCOMP_CD, ")
					.append("     DK0011.IDOMOTO_YTKSKOF_CD, ")
//					.append("     DK0011.HAISO_SBT_CD, ")
//					.append("     DK0011.STC_JSK_SBT_CD, ")
					.append("     DK0021.IDOMOTO_KOCOMP_SLF_CD, ")
					.append("     DK0021.IDOMOTO_YTKSKOF_SLF_CD ");
			// SQL文_個別部1
			if ( "1".equals( inMsg.getObject(EDK0011B090CBSMsg.FUNC_CODE).toString() ) ) {
				
				// 機器提供サービス契約番号のみが指定された場合は、最大登録年月日に該当するデータのみを抽出
				if (inMsg.isNull(EDK0011B090CBSMsg.KEY_HAISO_TAIBPIN_NO) &&
					  !inMsg.isNull(EDK0011B090CBSMsg.KEY_KKTK_SVC_KEI_NO) &&
					  inMsg.isNull(EDK0011B090CBSMsg.KEY_HAISO_NO))
				{
	 				sql_Buff.append("   FROM DK_T_HAISO DK0011")
							.append("        INNER JOIN DK_T_HAISO_TG_BPIN DK0021")
							.append("                ON DK0011.HAISO_NO = DK0021.HAISO_NO")
							.append("               AND DK0021.MK_FLG = '0'")
							.append("               AND DK0021.KKTK_SVC_KEI_NO = ?")
							.append("               AND DK0021.ADD_DTM = ")
							.append("                     (SELECT MAX(DK0021_GENE.ADD_DTM)")
							.append("                        FROM DK_T_HAISO_TG_BPIN DK0021_GENE")
							.append("                       WHERE DK0021.HAISO_TAIBPIN_NO = DK0021_GENE.HAISO_TAIBPIN_NO")
							.append("                         AND DK0021_GENE.MK_FLG = '0')")
							.append("               WHERE DK0011.MK_FLG = '0'")
							.append("               ORDER BY DK0021.KKTK_SVC_KEI_NO");
					
					bindValues.add(inMsg.getObject(EDK0011B090CBSMsg.KEY_KKTK_SVC_KEI_NO));
				}
				else
				{
	 				sql_Buff.append("   FROM DK_T_HAISO DK0011 ")
							.append("        INNER JOIN DK_T_HAISO_TG_BPIN DK0021 ")
							.append("                ON DK0011.HAISO_NO = DK0021.HAISO_NO ")
							.append("               AND DK0021.MK_FLG = '0' ");
					// ＫＥＹ＿配送対象物品番号
					if (!inMsg.isNull(EDK0011B090CBSMsg.KEY_HAISO_TAIBPIN_NO))
					{
						sql_Buff.append("               AND DK0021.HAISO_TAIBPIN_NO = ? ");
						bindValues.add(inMsg.getObject(EDK0011B090CBSMsg.KEY_HAISO_TAIBPIN_NO));
					}
					// ＫＥＹ＿機器提供サービス契約番号
					if (!inMsg.isNull(EDK0011B090CBSMsg.KEY_KKTK_SVC_KEI_NO))
					{
						sql_Buff.append("               AND DK0021.KKTK_SVC_KEI_NO = ? ");
						bindValues.add(inMsg.getObject(EDK0011B090CBSMsg.KEY_KKTK_SVC_KEI_NO));
					}
					sql_Buff.append("  WHERE DK0011.MK_FLG = '0' ");
					// ＫＥＹ＿配送番号
					if (!inMsg.isNull(EDK0011B090CBSMsg.KEY_HAISO_NO))
					{
						sql_Buff.append("    AND DK0011.HAISO_NO = ? ");
						bindValues.add(inMsg.getObject(EDK0011B090CBSMsg.KEY_HAISO_NO));
					}
					sql_Buff.append("  ORDER BY DK0021.KKTK_SVC_KEI_NO ");
				}
				
			}
			
			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);
			
			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			if ( "1".equals( inMsg.getString(EDK0011B090CBSMsg.FUNC_CODE) ) ) {
				for (int i=0; i<bindValues.size(); i++)
				{
					CAANJDBCUtil.setParam(pstmt, (i + 1), bindValues.get(i));
				}
			}
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// EDK0011B090CBSMsgの明細にセットする項目
			String[] msgKeyList1 = {
					  EDK0011B090CBSMsg1List.HAISO_NO
					, EDK0011B090CBSMsg1List.HAISO_STAT
					, EDK0011B090CBSMsg1List.HISOS_KOCOMP_CD
					, EDK0011B090CBSMsg1List.HAISO_DIV
					, EDK0011B090CBSMsg1List.HAISO_MEMO
					, EDK0011B090CBSMsg1List.HISOS_KSITEI_FLG
					, EDK0011B090CBSMsg1List.HISOS_NM
					, EDK0011B090CBSMsg1List.HISOS_AD_CD
					, EDK0011B090CBSMsg1List.HISOS_PCD
					, EDK0011B090CBSMsg1List.HISOS_STATE_NM
					, EDK0011B090CBSMsg1List.HISOS_CITY_NM
					, EDK0011B090CBSMsg1List.HISOS_OAZTSU_NM
					, EDK0011B090CBSMsg1List.HISOS_AZCHO_NM
					, EDK0011B090CBSMsg1List.HISOS_BNCHIGO
					, EDK0011B090CBSMsg1List.HISOS_ADRTTM
					, EDK0011B090CBSMsg1List.HISOS_ADRRM
					, EDK0011B090CBSMsg1List.HISOS_TELNO
					, EDK0011B090CBSMsg1List.PLACE_NO
					, EDK0011B090CBSMsg1List.HAISO_MOTO_SOKO_CD
					, EDK0011B090CBSMsg1List.HAISO_MOTO_SKDN_CD
					, EDK0011B090CBSMsg1List.AD_MI_FIX_FLG
					, EDK0011B090CBSMsg1List.SHUKKA_TAIKI_FLG
					, EDK0011B090CBSMsg1List.SHUKKA_YMD
					, EDK0011B090CBSMsg1List.BTRYHOZN_NO
					, EDK0011B090CBSMsg1List.HAISO_KIGEN_YMD
					, EDK0011B090CBSMsg1List.HAISO_ARIV_SHITEI_YMD
					, EDK0011B090CBSMsg1List.MSKM_NO
					, EDK0011B090CBSMsg1List.HAISO_ARIV_SHITEI_TIME_CD
					, EDK0011B090CBSMsg1List.TCHISHO_TEMP_CD
					, EDK0011B090CBSMsg1List.UPD_DTM_HAISO
					, EDK0011B090CBSMsg1List.HAISO_TAIBPIN_NO
					, EDK0011B090CBSMsg1List.KKTK_SVC_KEI_NO
					, EDK0011B090CBSMsg1List.TAKNKIKI_SBT_CD
					, EDK0011B090CBSMsg1List.HUZOKUHIN_SBT_CD
					, EDK0011B090CBSMsg1List.TAKNKIKI_MODEL_CD
					, EDK0011B090CBSMsg1List.HUZOKUHIN_MODEL_CD
					, EDK0011B090CBSMsg1List.TAKNKIKI_SETHIN_MODEL_CD
					, EDK0011B090CBSMsg1List.KIKI_SEIZO_NO
					, EDK0011B090CBSMsg1List.TAKNKIKI_SETHIN_NO
					, EDK0011B090CBSMsg1List.DENPYO_NO
					, EDK0011B090CBSMsg1List.MSKM_DTL_NO
					, EDK0011B090CBSMsg1List.KOJIAK_NO
					, EDK0011B090CBSMsg1List.MSKMSHO_NO
					, EDK0011B090CBSMsg1List.KIKI_HUKA_INFO_CD
					, EDK0011B090CBSMsg1List.PCRS_CD
					, EDK0011B090CBSMsg1List.UPD_DTM
					, EDK0011B090CBSMsg1List.ADD_OPTNTY_KEI_IDO_DIV
					, EDK0011B090CBSMsg1List.ADD_OPTNTY_KEI_IDO_DTM
					, EDK0011B090CBSMsg1List.HAISO_UK_YMD
					, EDK0011B090CBSMsg1List.HOJIN_SVC_KEI_UK_NO
					, EDK0011B090CBSMsg1List.HOJIN_SVC_KEI_UK_NOPARTS
					, EDK0011B090CBSMsg1List.HJIN_EO_YKAE_SVKEI_NO
					, EDK0011B090CBSMsg1List.HOJIN_KEISHA_NM
					, EDK0011B090CBSMsg1List.HOJIN_RRKS_KTAI_TELNO
					, EDK0011B090CBSMsg1List.TA_SYS_RNKI_FLG
					, EDK0011B090CBSMsg1List.TA_SYS_RNKI_YMD
					, EDK0011B090CBSMsg1List.TA_SYS_RNKS_CD
					, EDK0011B090CBSMsg1List.HOJIN_PRC_GRP_CD
					, EDK0011B090CBSMsg1List.HOJIN_PCRS_CD
					, EDK0011B090CBSMsg1List.HOJIN_PPLAN_CD
					, EDK0011B090CBSMsg1List.HAITATSU_FIN_RSV_DTM
					, EDK0011B090CBSMsg1List.HAISO_SJI_YMD
					, EDK0011B090CBSMsg1List.MODEL_CHGE_CD
					, EDK0011B090CBSMsg1List.DK0011_SHUKKA_LOT_NO
					, EDK0011B090CBSMsg1List.HAISO_FIN_YMD
					, EDK0011B090CBSMsg1List.HAISO_STP_ID
					, EDK0011B090CBSMsg1List.HAISO_STP_CD
					, EDK0011B090CBSMsg1List.HAISO_STP_YMD
					, EDK0011B090CBSMsg1List.DK0021_SHUKKA_LOT_NO
					, EDK0011B090CBSMsg1List.SHUKKA_LOT_KIKI_SEQ
					, EDK0011B090CBSMsg1List.KIKI_CHG_NO
					, EDK0011B090CBSMsg1List.HAISO_KIKI_CHGE_CD
					, EDK0011B090CBSMsg1List.TCASE_NO
					, EDK0011B090CBSMsg1List.HOJIN_HAMBAI_SBT_CD
					, EDK0011B090CBSMsg1List.HOJIN_TK_SBT_CD
					, EDK0011B090CBSMsg1List.HAISO_RSV_YMD
					, EDK0011B090CBSMsg1List.IDOMOTO_KRIPLACE_SKCD
					, EDK0011B090CBSMsg1List.IDOMOTO_KOCOMP_CD
					, EDK0011B090CBSMsg1List.IDOMOTO_YTKSKOF_CD
//					, EDK0011B090CBSMsg1List.STC_JSK_SBT_CD
//					, EDK0011B090CBSMsg1List.HAISO_SBT_CD
					, EDK0011B090CBSMsg1List.IDOMOTO_KOCOMP_SLF_CD
					, EDK0011B090CBSMsg1List.IDOMOTO_YTKSKOF_SLF_CD
				};
			
			// 明細に処理結果(ResultSet)をマッピング
			CAANMsg[] outMsg1 = mapMessageList(rsltQuery,msgKeyList1,"eo.ejb.cbs.cbsmsg.EDK0011B090CBSMsg1List",0);
			// inMsg(CBSMsg)に明細をセット
			inMsg.set("EDK0011B090CBSMsg1List", outMsg1);
			

		} catch(SQLException e) {
			inMsg.set(EDK0011B090CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} finally {
			// 資源の解放
			try{
				if(rsltQuery != null){
					rsltQuery.close();
				}
				if(pstmt != null){
					pstmt.close();
				}
				if(con1 != null){
					closeConnection(con1);
				}
			}catch(SQLException e){
				inMsg.set(EDK0011B090CBSMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
}
