/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKCtrlCisStubImpl
*   ソースファイル名：JKKCtrlCisStubImpl.java
*   作成者          ：富士通
*   日付            ：2015年06月08日
*＜機能概要＞
*   eo電気契約一意照会（Stub向け）コマンド発行部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v16.00.00   2015/06/08   FJ) 松尾    【ANK-2480-00-00】対応 新電力
*   v32.00.00   2017/05/26   FJ)河邊     【OM-2017-0000488】オープンカーソルエラー
*
**********************************************************************/

package eo.ejb.common;

import static eo.ejb.common.JCRModelCommon.resultSetToListOfMap;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbs.cbsmsg.EKKA0020001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020001CBSMsg2List;
import eo.ejb.cbs.cbsmsg.EKKA0040001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0040001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0040001CBSMsg2List;

public class JKKCtrlCisStubImpl extends JZMCtrlCisInfo {

	private static JKKCtrlCisStubImpl instance = null;
	private Connection connection = null;
	
	private static final String SQL_SELECT_0001 = " SELECT * " +
													 " FROM CI_T_EOELEC_KEI  " +
													 " WHERE  SVC_KEI_NO = ? ";
	
	private AgentDispatchContext inContext;
	
	public void setInContext(AgentDispatchContext inContext) {
		this.inContext = inContext;
	}
	
	/**
	 * インスタンス取得用のメソッド
	 * 
	 * @return JWCCtrlTnInfoStubImpl
	 */
	public static JKKCtrlCisStubImpl getInstance() {
		synchronized (JKKCtrlCisStubImpl.class) {
			if(instance == null) 
			{
				JKKCtrlCisStubImpl.instance= new JKKCtrlCisStubImpl();
			}
		}
		
		return instance;
	}
	
	/**
	 * コマンド発行部品
	 * 
	 * @param serviceMap サービスマップハッシュテーブル
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	@SuppressWarnings("unchecked")
	public Map ctrlCisInfo_ZMA0001(Map serviceMap) throws Exception 
	{
		// TODO 自動生成されたメソッドスタブ
		if(this.connection == null)
		{
			// エラー
			throw new Exception("");
		}
		
		ArrayList<Hashtable<String,  Object>>list = (ArrayList<Hashtable<String,  Object>>)serviceMap.get(EKKA0040001CBSMsg.EKKA0040001CBSMSG1LIST);
		
		Hashtable<String, Object> ret = new Hashtable<String, Object>();
		
		Hashtable<String, Object> ret2 = new Hashtable<String, Object>();
		
		List<Map<String, Object>> resultList2 = new ArrayList<Map<String, Object>>();
		
		List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
		ResultSet rs = null;
		
		if(list != null)
		{
			//list.remove(0);
		}
		
		for(Hashtable<String, Object>serviceMapList :list )
		{
		
			String svcKeiCd = (String)serviceMapList.get("svc_kei_no");
			
			if(null != svcKeiCd && !"".equals(svcKeiCd))
			{
				// Stub用ＳＱＬ実行（ＪＤＢＣ）を行う。
				PreparedStatement prstmt = null;
				StringBuffer sql = new StringBuffer();
				
				int columnnum = 1;
				
				sql.append(SQL_SELECT_0001);
				try 
				{
					prstmt = this.connection.prepareStatement(sql.toString());
					
					//prstmt.setString(columnnum, sysid);
					//columnnum++;
					prstmt.setString(columnnum, svcKeiCd);
					
					rs = prstmt.executeQuery();

					// 実行結果の返却
					//List<Map<String, Object>> aaa= resultSetToListOfMap(rs);
					//resultList.addAll(resultSetToListOfMap(rs));
					
					// 実行結果の返却
					while(rs.next())
					{
						Hashtable<String,Object> data = new Hashtable<String, Object>();

						int columnnumOut = 1;
						
						//機能コード
						data.put(EKKA0040001CBSMsg2List.FUNC_CODE, "1");
						
						//サービス契約番号
						String setplace_no = rs.getString(columnnumOut++);
						if(setplace_no != null)
						{
							data.put(EKKA0040001CBSMsg2List.SVC_KEI_NO, setplace_no.toString());
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.SVC_KEI_NO, "");
						}

						//利用場所契約者住所コード
						//レプリカデータにて不要な値を回避用に変数に二回設定
						String setplace_ad_cd = rs.getString(columnnumOut++);
						setplace_ad_cd = rs.getString(columnnumOut++);
						if(setplace_ad_cd != null)
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_AD_CD, setplace_ad_cd);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_AD_CD, "");
						}

						//利用場所郵便番号
						String setplace_pcd = rs.getString(columnnumOut++);
						if(setplace_pcd != null)
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_PCD, setplace_pcd);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_PCD, "");
						}
						
						//利用場所都道府県名
						String ryobsh_state_nm = rs.getString(columnnumOut++);
						if(ryobsh_state_nm != null)
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_STATE_NM, ryobsh_state_nm);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_STATE_NM, "");
						}
						
						//利用場所市区町村名
						String ryobsh_city_nm = rs.getString(columnnumOut++);
						if(ryobsh_city_nm != null)
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_CITY_NM, ryobsh_city_nm);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_CITY_NM, "");
						}
						
						//利用場所大字通称名
						String ryobsh_oaztsu_nm = rs.getString(columnnumOut++);
						if(ryobsh_oaztsu_nm != null)
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_OAZTSU_NM, ryobsh_oaztsu_nm);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_OAZTSU_NM, "");
						}
						
						//利用場所字丁目名
						String ryobsh_azcho_nm = rs.getString(columnnumOut++);
						if(ryobsh_azcho_nm != null)
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_AZCHO_NM, ryobsh_azcho_nm);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_AZCHO_NM, "");
						}
						
						//利用場所番地号名
						String ryobsh_bnchigo = rs.getString(columnnumOut++);
						if(ryobsh_bnchigo != null)
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_BNCHIGO, ryobsh_bnchigo);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_BNCHIGO, "");
						}
						
						//利用場所住所補記・建物名
						String ryobsh_adrttm = rs.getString(columnnumOut++);
						if(ryobsh_adrttm != null)
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_ADRTTM, ryobsh_adrttm);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_ADRTTM, "");
						}
						
						//利用場所住所補記・部屋番号
						String ryobsh_adrrm = rs.getString(columnnumOut++);
						if(ryobsh_adrrm != null)
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_ADRRM, ryobsh_adrrm);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.RYOBSH_ADRRM, "");
						}
						
						//利用開始希望年月日
						String ryo_sta_kibo_ymd = rs.getString(columnnumOut++);
						if(ryo_sta_kibo_ymd != null)
						{
							data.put(EKKA0040001CBSMsg2List.RYO_STA_KIBO_YMD, ryo_sta_kibo_ymd);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.RYO_STA_KIBO_YMD, "");
						}
						
						//料金メニュー名
						String rykn_menu_nm = rs.getString(columnnumOut++);
						if(rykn_menu_nm != null)
						{
							data.put(EKKA0040001CBSMsg2List.RYKN_MENU_NM, rykn_menu_nm);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.RYKN_MENU_NM, "");
						}
						
						//供給地点特定番号
						String kykychtn_tkt_no = rs.getString(columnnumOut++);
						if(rykn_menu_nm != null)
						{
							data.put(EKKA0040001CBSMsg2List.KYKYCHTN_TKT_NO, kykychtn_tkt_no);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.KYKYCHTN_TKT_NO, "");
						}
						
						//契約区分
						String keiyaku_kbn = rs.getString(columnnumOut++);
						if(keiyaku_kbn != null)
						{
							data.put(EKKA0040001CBSMsg2List.KEIYAKU_KBN, keiyaku_kbn);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.KEIYAKU_KBN, "");
						}
						
						//託送連携住所名
						String tks_rnkei_add_nm = rs.getString(columnnumOut++);
						if(tks_rnkei_add_nm != null)
						{
							data.put(EKKA0040001CBSMsg2List.TKS_RNKEI_ADD_NM, tks_rnkei_add_nm);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.TKS_RNKEI_ADD_NM, "");
						}
						
						//関連サービス契約番号
						String knrn_svc_kei_no = rs.getString(columnnumOut++);
						if(knrn_svc_kei_no != null)
						{
							data.put(EKKA0040001CBSMsg2List.KNRN_SVC_KEI_NO, knrn_svc_kei_no);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.KNRN_SVC_KEI_NO, "");
						}
						
						//関連サービス契約コード
						String knrn_svc_kei_cd = rs.getString(columnnumOut++);
						if(knrn_svc_kei_cd != null)
						{
							data.put(EKKA0040001CBSMsg2List.KNRN_SVC_KEI_CD, knrn_svc_kei_cd);
						}
						else
						{
							data.put(EKKA0040001CBSMsg2List.KNRN_SVC_KEI_CD, "");
						}
						
						resultList.add(data);
					}
					
					
				}
				finally
				{
					if(prstmt != null)
					{
						
						prstmt.close();
					}
// OM-2017-0000488 2017/05/26 ADD START
					if(rs != null)
					{
						
						rs.close();
					}
// OM-2017-0000488 2017/05/26 ADD END
				}
			}
		}
		
		//XML電文のOUTイメージにあわせる為に、ごちゃごちゃと入れ替え
		ret2.put("service_if", resultList);
		
		resultList2.add(ret2);
		
		ret.put("KKSV004007SC", resultList2);
		
		return ret;
	}
	
	@Override
	public void setConnection(Connection con)
	{
		this.connection = con;
	}
	public Connection getConnection()
	{
		return this.connection;
	}
	
}
