/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKSVUseFailAddCC
*	ソースファイル名：JKKSVUseFailAddCC.java
*	作成者			：富士通
*	日付			：2013年07月11日
*＜機能概要＞
*	利用不可期間登録CCです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v5.00.00	2013/07/11	FJ)福永		新規作成
*	v7.01.00    2014/02/13  星野        OM-2014-0000624対応
*  v11.00.00    2014/11/26  FJ)伊藤     OM-2014-0003601対応
*  v14.00.00	2015/06/30  FJ)谷口		【OM-2015-0001228】利用不可期間更新チェック時のステータスチェックを削除(関連対応)
*  v19.00.00	2015/11/11  FJ)松岡		【OM-2015-0002752】利用不可期間の重複チェックを削除
*  v59.00.00	2022/04/27	FJ)平野		【ANK-4245-00-00】【eo】ローゼット化対応フォロー案件
*  v60.00.00	2022/08/15	FJ)平野		【OM-2022-0001103】利用不可期間登録済で住所変更した場合にシステムエラー
*  v61.00.00    2023/04/11  FJ）藤本涼  【ANK-4315-00-00】【eo定期】 eoホームゲートウェイ導入対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCCWebAddTrnId;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161B004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161B004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B008CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B008CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B019CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B019CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0401A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0401B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0441A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0441A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0441B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0441B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0961B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0961B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0961D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2811B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2811B010CBSMsg;

public class JKKSVUseFailAddCC extends AbstractCommonComponent
{
	
	/** マッパークラス */
	protected JKKUseFailMapperCC useFailMapper = null;
	
	//-- リクエストパラメータのキー
	/** 対象データ */
	private String REQ_TRGT_DATA = "trgt_data";
	
	/** エラーメッセージ */
	private static final String ERR_MSG = "INVALID_RETURN_MESSAGE";
	
	/** 利用停止期間登録 */
	private static final String TEMPLATE_ID_EKK0961D010 = "EKK0961D010";
	
	/** ステータス(各スキーマのステータス)：サービス提供中 */
	private static final String STAT_SVCTK_CHU     = "100";

	// 20141126 OM-2014-0003601 Add Start
	/** ステータス(各スキーマのステータス)：解約済 */
	private static final String STAT_DSL_SUMI     = "910";
	// 20141126 OM-2014-0003601 Add End
	
	/** 正常終了 */
	public static final int STAT_NORMAL = 0;
	
// OM-2013-0002675 2013.09.30 T.TORIKAI ADD START
	/** 回線（ネット、電話）に紐付く機器の宅内機器種別コード */
	private static final String[] KAISEN_KIKI_SBT_LIST_IP =
	{		"60"	// モデム
	 	,	"70"	// スプリッター
	 	,	"90"	// インラインフィルタ
		,	"D0"	// Ｖ−ＯＮＵ
		,	"R0"	// 多機能ルーター
		// ANK-4315-00-00 ADD START
		,	"S0"	// ＨＧＷ
		// ANK-4315-00-00 ADD END
	};

	/** 回線（テレビ）に紐付く機器の宅内機器種別コード */
	private static final String[] KAISEN_KIKI_SBT_LIST_TV =
	{ 		"E0"	// Ｖ−ＯＮＵ
	};
// OM-2013-0002675 2013.09.30 T.TORIKAI ADD END
	
	/** SC呼び出し部品 */
	ServiceComponentRequestInvoker scCall = null;

// ANK-4245-00-00 ADD START
	/** 利用停止取扱コード：住所変更 */
	private static final String USE_STP_TORIATSU_CD_ADCHG = "11";
// ANK-4245-00-00 ADD END
	/**
	 * 利用不可期間の登録を行います
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings({ "unchecked" })
	public IRequestParameterReadWrite useFailAdd(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		HashMap<String , Object>paramMap = (HashMap<String , Object>)param.getData(fixedText);
		
		// マッパークラス
		useFailMapper = new JKKUseFailMapperCC();
		
		REQ_TRGT_DATA = fixedText;
		
		// SC呼び出し部品のインスタンス生成
		if (this.scCall == null)
		{
			this.scCall = new ServiceComponentRequestInvoker();
		}
		
		int status = 0;
		
		/** サービス契約の利用不可期間登録を行う */
		
		// SIFの実行結果から取得したCAANMsg[]
		CAANMsg[] resultMsgs = null;
		// テンプレート情報部（入力時の情報）
		CAANMsg template = null;
		
		HashMap<String , Object> eKK0961D010map = new HashMap<String , Object>();

		// EKK0961D010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0961D010CBSMsg.class.getName());
		useFailMapper.mappingEKK0961D010InMsg(template, paramMap);

		// SIF実行
		resultMsgs = callScCmn(param, handle, template);

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		// ステータスが0以外はエラーとなっている
		if(status == 0)
		{
			eKK0961D010map.put(TEMPLATE_ID_EKK0961D010, useFailMapper.mappingCSCOutMsg(resultMsgs));
		} else {
			// 失敗した場合
			throw new CCException("", new SCCallException("", String.valueOf(status), status));
		}
		
		/** サービス契約内訳の利用不可期間登録を行う */
		status =  ucwkUseFailAdd(handle, param, paramMap);
		// ステータスコードの確認
		if(status != STAT_NORMAL)
		{
			// 失敗した場合
			throw new CCException("", new SCCallException("", String.valueOf(status), status));
		}
		
		/** 機器提供サービスの利用不可期間登録を行う */
		status =  kktkFailAdd(handle, param, paramMap);
		// ステータスコードの確認
		if(status != STAT_NORMAL)
		{
			// 失敗した場合
			throw new CCException("", new SCCallException("", String.valueOf(status), status));
		}
		
// OM-2013-0002675 2013.09.30 T.TORIKAI ADD START
		/** 回線に紐付く機器の利用不可期間登録を行う */
		status =  kaisenUcwkKktkSvcKeiFailAdd(handle, param, paramMap);
		if (status != STAT_NORMAL) {
			throw new CCException("", new SCCallException("", String.valueOf(status), status));
		}
// OM-2013-0002675 2013.09.30 T.TORIKAI ADD END
		
		/** オプションサービスの利用不可期間登録を行う */
		status =  optionFailAdd(handle, param, paramMap);
		// ステータスコードの確認
		if(status != STAT_NORMAL)
		{
			// 失敗した場合
			throw new CCException("", new SCCallException("", String.valueOf(status), status));
		}
		
		/** 請求オプションサービスの利用不可期間登録を行う */
		status =  seikyOpFailAdd(handle, param, paramMap);
		// ステータスコードの確認
		if(status != STAT_NORMAL)
		{
			// 失敗した場合
			throw new CCException("", new SCCallException("", String.valueOf(status), status));
		}
		
		/** 進捗登録登録を行う */
		status = callAddPrg(param, handle, paramMap);
		if(status != STAT_NORMAL)
		{
			// 失敗した場合
			throw new CCException("", new SCCallException("", String.valueOf(status), status));
		}
		
		return param;
	}

	/*********************************************************************************************************************/
	/** 各サービスインターフェイスの呼び出し処理                                                                        **/
	/*********************************************************************************************************************/

	/**
	 * 
	 */
	private CAANMsg[] callScCmn(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			CAANMsg template
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		Map<?, ?> sIFResult = null;

		// サービスIF共通の情報を設定
		sIFRequest = useFailMapper.editInMsgCmn(param);

		// 共通パラメータ設定
		useFailMapper.editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SIFの呼び出し
		sIFResult = this.scCall.run(sIFRequest, handle);

		// 結果の取得
		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);

		// エラー情報のマッピング
		useFailMapper.editResultRP(sIFResult, param, REQ_TRGT_DATA);

		errChk(sIFResult);

		return resultMsgs;
	}
	
	/**
	 * エラーチェック処理
	 * 
	 * @param msgList サービスインタフェース実行結果
	 * return void
	 * @throws SCCallException 
	 */
	private void errChk(Map<?, ?> msgList) 
	throws SCCallException
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		int returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// ステータス
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if ((0 != returnCode) || (0 != templateStatus))
		{
			throw new SCCallException(ERR_MSG, String.valueOf(returnCode), templateStatus);
		}
	}
	
	/**
	 * CAANMsg[]の結果をHashとして抽出する（一意照会用）
	 * @param workMapKey テンプレートリストのマップキー
	 * @param resultMsgs テンプレートリスト
	 * @return EKK0081A010SCの結果部分
	 */
	private HashMap<String, Object> mappingCAANOutMsgOne(String workMapKey,CAANMsg[] resultMsgs)
	{
		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		
// OM-2013-0004028対応 20131109 星野 MOD START
//		// 結果の抽出
//		msg = resultMsgs[0].getCAANMsgList(workMapKey)[0];
		// 結果の抽出
		CAANMsg[] templateArray = resultMsgs[0].getCAANMsgList(workMapKey);
		if(templateArray==null || templateArray.length < 1){
			return null;
		}
		msg = templateArray[0];
// OM-2013-0004028対応 20131109 星野 MOD END

		if(msg != null)
		{
			retHash = msg.getMsgData();
		}

		return retHash;
	}
	
	/**
	 * CAANMsg[]の結果をHashとして抽出する（一覧照会用）
	 * @param workMapKey テンプレートリストのマップキー
	 * @param resultMsgs テンプレートリスト
	 * @return サービスＩＦ実行の結果部分(ArrayListのハッシュマップ)
	 */
	private ArrayList<HashMap<String, Object>> mappingCAANOutMsg(String workMapKey,CAANMsg[] resultMsgs)
	{
		ArrayList<HashMap<String, Object>> retHashList = null;
		CAANMsg[] msgs = null;

		// 結果の抽出
		retHashList = new ArrayList<HashMap<String, Object>>();
		msgs = resultMsgs[0].getCAANMsgList(workMapKey);

		if(msgs != null)
		{
			for(int i = 0 ; i < msgs.length ; i++)
			{
				retHashList.add(msgs[i].getMsgData());
			}
		}

		return retHashList;
	}
	
	/**
	 * CAANMsg[]の結果をHashとして抽出する（登録用）
	 * @param resultMsgs EKK0451C030のテンプレートリスト
	 * @return EKK0451C030の結果部分
	 */
	private HashMap<String, Object> mappingCAANOutMsgAdd(CAANMsg[] resultMsgs)
	{
		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;

		// 結果の抽出
		msg = resultMsgs[0];

		// 結果の取得
		retHash = msg.getHashMap();

		return retHash;
	}
	
	/**
	 * サービス契約内訳の利用不可を登録する
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param trgt_data ターゲットデータ
	 * @param svcSbtCd サービス種別
	 * @param workField work領域（結果保持等）
	 * @return ステータスコード
	 * @throws Throwable 例外時にスローします
	 */
	private int ucwkUseFailAdd(
			SessionHandle handle, 
			IRequestParameterReadWrite param,
			HashMap<String, Object> trgt_data
	) throws Throwable
	{
		int statusCode = STAT_NORMAL ;
		
		// サービス契約内訳照会
		// SIFの実行結果から取得したCAANMsg[]
		CAANMsg[] resultMsgs = null;
		// テンプレート情報部（入力時の情報）
		CAANMsg template = null;
		
		HashMap<String, Object> copyMap =new HashMap<String, Object>();
		
		ArrayList<HashMap<String, Object>> eKK0161B004HashList = new ArrayList<HashMap<String, Object>>();

		// EKK0161B004への呼び出しパラメータ設定
		template = new CAANMsg(EKK0161B004CBSMsg.class.getName());
		useFailMapper.mappingEKK0161B004SCInMsg(template, trgt_data);

		// SIF実行
		resultMsgs = callScCmn(param, handle, template);

		// 結果を設定
		eKK0161B004HashList.addAll(mappingCAANOutMsg(EKK0161B004CBSMsg.EKK0161B004CBSMSG1LIST, resultMsgs));
		
		for (HashMap<String, Object> eKK0161B004map : eKK0161B004HashList ) {
			
// OM-2013-0002675 2013.09.30 T.TORIKAI MOD START
//			String ucwkState = (String)eKK0161B004map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT);
//			
//			if (!STAT_SVCTK_CHU.equals(ucwkState)) {
//				continue;
//			}
			// 20150630 OM-2015-0001228 DEL START
//			if (!isServiceTeikyochuSvcKeiUcwk(param, handle, trgt_data, eKK0161B004map)) {
//				continue;
//			}
			// 20150630 OM-2015-0001228 DEL END
// OM-2013-0002675 2013.09.30 T.TORIKAI MOD END
			
			// 設定用マップをコピー
			copyMap.clear();
			copyMap.putAll(trgt_data);
			
			copyMap.put(EKK0961D010CBSMsg.SVC_KEI_NO, null);
			copyMap.put(EKK0961D010CBSMsg.SVC_KEI_UCWK_NO, (String)eKK0161B004map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO));
			// ANK-4245-00-00 ADD START
			// 利用停止取扱コードにより利用不可期間登録スキーマへの登録内容を編集する
			// ⇒KKW17802_利用不可期間更新画面でも当共通部品を使用しており、利用不可期間への登録内容も異なる為
			//   影響の出ない様に、画面から渡している利用停止取扱コードで制御
			// 利用停止取扱コード(画面からのパラメータ）
			String jdgAddcd = (String)trgt_data.get(EKK0961D010CBSMsg.USE_STP_TORIATSU_CD); 
			if(null != jdgAddcd && !"".equals(jdgAddcd))
			{
				// 利用停止取扱コードが"11"(住所変更）の場合、EKK0161B004より取得したサービス開始日を登録する
				// サービス開始日は登録する
				if (USE_STP_TORIATSU_CD_ADCHG.equals(jdgAddcd))
				{
					// サービス開始日
					copyMap.put(EKK0961D010CBSMsg.SVC_STAYMD, (String)eKK0161B004map.get(EKK0161B004CBSMsg1List.SVC_STA_YMD));
				}
			}
			// ANK-4245-00-00 ADD END
			// EKK0961D010への呼び出しパラメータ設定
			HashMap<String , Object> eKK0961D010map = new HashMap<String , Object>();
			template = new CAANMsg(EKK0961D010CBSMsg.class.getName());
			useFailMapper.mappingEKK0961D010InMsg(template, copyMap);
			
			// SIF実行
			resultMsgs = callScCmn(param, handle, template);

			// ステータスコードの取得
			statusCode = template.getInt(JCMConstants.STATUS_INT_KEY);
			
			// ステータスが0以外はエラーとなっている
			if(statusCode == 0)
			{
				eKK0961D010map.put(TEMPLATE_ID_EKK0961D010, useFailMapper.mappingCSCOutMsg(resultMsgs));
			} else {
				// 失敗した場合
				return statusCode;
			}
		}
		
		return statusCode;
	}
	
	/**
	 * 機器提供サービスの利用不可を登録する
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param trgt_data ターゲットデータ
	 * @param svcSbtCd サービス種別
	 * @param workField work領域（結果保持等）
	 * @return ステータスコード
	 * @throws Throwable 例外時にスローします
	 */
	private int kktkFailAdd(
			SessionHandle handle, 
			IRequestParameterReadWrite param,
			HashMap<String, Object> trgt_data
	) throws Throwable
	{
		int statusCode = STAT_NORMAL ;
		
		// サービス契約内訳照会
		// SIFの実行結果から取得したCAANMsg[]
		CAANMsg[] resultMsgs = null;
		// テンプレート情報部（入力時の情報）
		CAANMsg template = null;
		
		HashMap<String, Object> copyMap =new HashMap<String, Object>();
		
		ArrayList<HashMap<String, Object>> eKK0341B008HashList = new ArrayList<HashMap<String, Object>>();

		// EKK0341B008への呼び出しパラメータ設定
		template = new CAANMsg(EKK0341B008CBSMsg.class.getName());
		useFailMapper.mappingEKK0341B008SCInMsg(template, trgt_data);

		// SIF実行
		resultMsgs = callScCmn(param, handle, template);

		// 結果を設定
		eKK0341B008HashList.addAll(mappingCAANOutMsg(EKK0341B008CBSMsg.EKK0341B008CBSMSG1LIST, resultMsgs));
		
// OM-2013-0002675 2013.09.30 T.TORIKAI ADD START
		ArrayList<String> kktkSvcKeiNoList = new ArrayList<String>();
// IT2-2013-0000780対応 20131118 星野 MOD START
//		String targetYmd = trgt_data.get(EKK0961D010CBSMsg.USE_STP_STA_DTM).toString().substring(0, 8);
		String useStpStaDtm = (String)trgt_data.get(EKK0961D010CBSMsg.USE_STP_STA_DTM);
		String targetYmd;
		if(StringUtils.isEmpty(useStpStaDtm) || useStpStaDtm.length()<8){
			targetYmd = "20991231";
		}else{
			targetYmd = useStpStaDtm.substring(0, 8);
		}
// IT2-2013-0000780対応 20131118 星野 MOD END
// OM-2013-0002675 2013.09.30 T.TORIKAI ADD END
		
		for (HashMap<String, Object> eKK0341B008map : eKK0341B008HashList ) {
			
// OM-2013-0002675 2013.09.30 T.TORIKAI MOD START
//			String kktkState = (String)eKK0341B008map.get(EKK0341B008CBSMsg1List.KKTK_SVC_KEI_STAT);
//			
//			if (!STAT_SVCTK_CHU.equals(kktkState)) {
//				continue;
//			}
			// 利用不可の開始日を基準日とし、カレントデータのみ処理する
			if (kktkSvcKeiNoList.contains(eKK0341B008map.get(EKK0341B008CBSMsg1List.KKTK_SVC_KEI_NO))) {
				continue;	// 処理済の機器
			}
			if (!"2".equals(eKK0341B008map.get(EKK0341B008CBSMsg1List.RSV_APLY_CD))) {
				continue;	// 未確定データ
			}
// IT2-2013-0000780対応 20131118 星野 MOD START
//			if (targetYmd.compareTo(eKK0341B008map.get(EKK0341B008CBSMsg1List.RSV_APLY_YMD).toString()) < 0) {
			if (targetYmd.compareTo( (String)eKK0341B008map.get(EKK0341B008CBSMsg1List.RSV_APLY_YMD) ) < 0) {
// IT2-2013-0000780対応 20131118 星野 MOD END
				continue;	// 予約レコード
			}
// IT2-2013-0000780対応 20131118 星野 MOD START
//			kktkSvcKeiNoList.add(eKK0341B008map.get(EKK0341B008CBSMsg1List.KKTK_SVC_KEI_NO).toString());
			kktkSvcKeiNoList.add( (String)eKK0341B008map.get(EKK0341B008CBSMsg1List.KKTK_SVC_KEI_NO) );
// IT2-2013-0000780対応 20131118 星野 MOD END

			// 20150630 OM-2015-0001228 DEL START
//			if (!isServiceTeikyochuKktkSvcKe(param, handle, trgt_data, eKK0341B008map)) {
//				continue;
//			}
			// 20150630 OM-2015-0001228 DEL END
// OM-2013-0002675 2013.09.30 T.TORIKAI MOD END
			
			// EKK0341A010への呼び出しパラメータ設定
			template = new CAANMsg(EKK0341A010CBSMsg.class.getName());
// OM-2013-0002675 2013.09.30 T.TORIKAI MOD START
//			useFailMapper.mappingEKK0341A010SCInMsg(template, eKK0341B008map);
			useFailMapper.mappingEKK0341A010SCInMsg(template, eKK0341B008map, null);
// OM-2013-0002675 2013.09.30 T.TORIKAI MOD START
			
			// SIF実行
			resultMsgs = callScCmn(param, handle, template);

			// 結果を設定
			HashMap<String, Object> resultHash = mappingCAANOutMsgOne(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST, resultMsgs);
// OM-2013-0004028対応 20131109 星野 ADD START
			if(resultHash==null){
				continue;
			}
// OM-2013-0004028対応 20131109 星野 ADD END
			
			// 設定用マップをコピー
			copyMap.clear();
			copyMap.putAll(trgt_data);
			
			copyMap.put(EKK0961D010CBSMsg.SVC_KEI_NO, null);
			copyMap.put(EKK0961D010CBSMsg.KKTK_SVC_KEI_NO, (String)resultHash.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
			// ANK-4245-00-00 ADD START
			// 利用停止取扱コード
			String jdgAddcd = (String)trgt_data.get(EKK0961D010CBSMsg.USE_STP_TORIATSU_CD); 
			// 住所変更番号（撤去工事）
			String adchgKJakNo = (String)trgt_data.get(EKK0961D010CBSMsg.AD_CHG_TEKKYO_KJAK_NO);
			if(null != jdgAddcd && !"".equals(jdgAddcd))
			{
				// 利用停止取扱コードが"11"(住所変更）の場合、EKK0341B008より取得したサービス開始日を登録する
				if (USE_STP_TORIATSU_CD_ADCHG.equals(jdgAddcd))
				{
					HashMap<String, Object> sendMap = new HashMap<String, Object>();
					sendMap.put("kktk_svc_kei", (String)eKK0341B008map.get(EKK0341B008CBSMsg1List.KKTK_SVC_KEI_NO));
					// 一覧格納マップ
					ArrayList<HashMap<String, Object>> eKK0961B001HashList = new ArrayList<HashMap<String, Object>>();
					
					// EKK0961B010への呼び出しパラメータ設定
					template = new CAANMsg(EKK0961B001CBSMsg.class.getName());
					useFailMapper.mappingEKK0961B001SCInMsg(template, sendMap);
					
					// SIF実行
					resultMsgs = callScCmn(param, handle, template);
					
					// 結果を設定
					eKK0961B001HashList.addAll(mappingCAANOutMsg(EKK0961B001CBSMsg.EKK0961B001CBSMSG1LIST, resultMsgs));
					// 利用不可期間登録スキーマに存在しない場合、登録に必要なパラメータを渡す
					if(!isUseStpStat(adchgKJakNo,eKK0961B001HashList))
					{
						copyMap.put(EKK0961D010CBSMsg.KIKI_SEIZO_NO, null);
						copyMap.put(EKK0961D010CBSMsg.TAKNKIKI_MODEL_CD, null);
						// サービス開始年月日
						String svcStaYmd = (String)trgt_data.get(EKK0961D010CBSMsg.SVC_STAYMD);
						copyMap.put(EKK0961D010CBSMsg.SVC_STAYMD, svcStaYmd);
					}
					// 存在する場合は登録せず正常終了
					else
					{
						return STAT_NORMAL; 
					}
				}
				else
				{
				// ANK-4245-00-00 ADD END
					copyMap.put(EKK0961D010CBSMsg.KIKI_SEIZO_NO, (String)resultHash.get(EKK0341A010CBSMsg1List.KIKI_SEIZO_NO));
					copyMap.put(EKK0961D010CBSMsg.TAKNKIKI_MODEL_CD, (String)resultHash.get(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD));
			// ANK-4245-00-00 ADD START
				}
			}
			// ANK-4245-00-00 ADD END
			
			// EKK0961D010への呼び出しパラメータ設定
			HashMap<String , Object> eKK0961D010map = new HashMap<String , Object>();
			template = new CAANMsg(EKK0961D010CBSMsg.class.getName());
			useFailMapper.mappingEKK0961D010InMsg(template, copyMap);
			
			// SIF実行
			resultMsgs = callScCmn(param, handle, template);

			// ステータスコードの取得
			statusCode = template.getInt(JCMConstants.STATUS_INT_KEY);
			
			// ステータスが0以外はエラーとなっている
			if(statusCode == 0)
			{
				eKK0961D010map.put(TEMPLATE_ID_EKK0961D010, useFailMapper.mappingCSCOutMsg(resultMsgs));
			} else {
				// 失敗した場合
				return statusCode;
			}
		}
		
		return statusCode;
	}
	
	/**
	 * オプションサービスの利用不可を登録する
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param trgt_data ターゲットデータ
	 * @param svcSbtCd サービス種別
	 * @param workField work領域（結果保持等）
	 * @return ステータスコード
	 * @throws Throwable 例外時にスローします
	 */
	private int optionFailAdd(
			SessionHandle handle, 
			IRequestParameterReadWrite param,
			HashMap<String, Object> trgt_data
	) throws Throwable
	{
		int statusCode = STAT_NORMAL ;
		
		// サービス契約内訳照会
		// SIFの実行結果から取得したCAANMsg[]
		CAANMsg[] resultMsgs = null;
		// テンプレート情報部（入力時の情報）
		CAANMsg template = null;
		
		HashMap<String, Object> copyMap =new HashMap<String, Object>();
		
		ArrayList<HashMap<String, Object>> eKK0351B010HashList = new ArrayList<HashMap<String, Object>>();

		// EKK0351B010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0351B010CBSMsg.class.getName());
		useFailMapper.mappingEKK0351B010SCInMsg(template, trgt_data);

		// SIF実行
		resultMsgs = callScCmn(param, handle, template);

		// 結果を設定
		eKK0351B010HashList.addAll(mappingCAANOutMsg(EKK0351B010CBSMsg.EKK0351B010CBSMSG1LIST, resultMsgs));
		
		for (HashMap<String, Object> eKK0351B010map : eKK0351B010HashList ) {
			
// OM-2013-0002675 2013.09.30 T.TORIKAI MOD START
//			String opState = (String)eKK0351B010map.get(EKK0351B010CBSMsg1List.OP_SVC_KEI_STAT);
//			
//			if (!STAT_SVCTK_CHU.equals(opState)) {
//				continue;
//			}
			// 20150630 OM-2015-0001228 DEL START
//			if (!isServiceTeikyochuOpSvcKe(param, handle, trgt_data, eKK0351B010map)) {
//				continue;
//			}
			// 20150630 OM-2015-0001228 DEL END
// OM-2013-0002675 2013.09.30 T.TORIKAI MOD END
			
			// 設定用マップをコピー
			copyMap.clear();
			copyMap.putAll(trgt_data);
			
			copyMap.put(EKK0961D010CBSMsg.SVC_KEI_NO, null);
			copyMap.put(EKK0961D010CBSMsg.OP_SVC_KEI_NO, (String)eKK0351B010map.get(EKK0351B010CBSMsg1List.OP_SVC_KEI_NO));
			// ANK-4245-00-00 ADD START
			// 利用停止取扱コードにより利用不可期間登録スキーマへの登録内容を変える
			// ⇒KKW17802_利用不可期間更新画面でも当共通部品を使用しており、利用不可期間への登録内容も異なる為
			//   影響の出ない様に、画面から渡している利用停止取扱コードで制御
			String jdgAddcd = (String)trgt_data.get(EKK0961D010CBSMsg.USE_STP_TORIATSU_CD); 
			if(null != jdgAddcd && !"".equals(jdgAddcd))
			{
				// 利用停止取扱コードが"11"(住所変更）の場合、
				// サービス開始日は登録する
				if (USE_STP_TORIATSU_CD_ADCHG.equals(jdgAddcd))
				{
					// オプションサービス契約一覧照会より取得したオプションサービス契約番号を基にオプションサービス契約一意照会を実施
					String dtm = (String)trgt_data.get(EKK0961D010CBSMsg.USE_STP_STA_DTM);
					template = new CAANMsg(EKK0351A010CBSMsg.class.getName());
					useFailMapper.mappingEKK0351A010SCInMsg(template, eKK0351B010map, dtm.substring(0,8));
					// SIF実行
					resultMsgs = callScCmn(param, handle, template);
					// 結果を設定
					HashMap<String, Object> resultHash = mappingCAANOutMsgOne(EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST, resultMsgs);
					if(resultHash==null){
						continue;
					}
					// オプションサービス契約一意照会よりサービス開始年月日を取得し設定
					copyMap.put(EKK0961D010CBSMsg.SVC_STAYMD, (String)resultHash.get(EKK0351A010CBSMsg1List.SVC_STAYMD));
				}
			}
			// ANK-4245-00-00 ADD END
			// EKK0961D010への呼び出しパラメータ設定
			HashMap<String , Object> eKK0961D010map = new HashMap<String , Object>();
			template = new CAANMsg(EKK0961D010CBSMsg.class.getName());
			useFailMapper.mappingEKK0961D010InMsg(template, copyMap);
			
			// SIF実行
			resultMsgs = callScCmn(param, handle, template);

			// ステータスコードの取得
			statusCode = template.getInt(JCMConstants.STATUS_INT_KEY);
			
			// ステータスが0以外はエラーとなっている
			if(statusCode == 0)
			{
				eKK0961D010map.put(TEMPLATE_ID_EKK0961D010, useFailMapper.mappingCSCOutMsg(resultMsgs));
			} else {
				// 失敗した場合
				return statusCode;
			}
		}
		
		/** サブオプションサービスの利用不可期間登録を行う */
		statusCode = subOpFailAdd(handle, param, trgt_data, eKK0351B010HashList);
		
		return statusCode;
	}
	
	/**
	 * サブオプションサービスの利用不可を登録する
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param trgt_data ターゲットデータ
	 * @param svcSbtCd サービス種別
	 * @param workField work領域（結果保持等）
	 * @return ステータスコード
	 * @throws Throwable 例外時にスローします
	 */
	private int subOpFailAdd(
			SessionHandle handle, 
			IRequestParameterReadWrite param,
			HashMap<String, Object> trgt_data,
			ArrayList<HashMap<String, Object>> eKK0351B010HashList
	) throws Throwable
	{
		int statusCode = STAT_NORMAL ;
		
		// サービス契約内訳照会
		// SIFの実行結果から取得したCAANMsg[]
		CAANMsg[] resultMsgs = null;
		// テンプレート情報部（入力時の情報）
		CAANMsg template = null;
		
		HashMap<String, Object> copyMap =new HashMap<String, Object>();
		
		for (HashMap<String, Object> eKK0351B010map : eKK0351B010HashList ) {
			
// OM-2013-0002675 2013.09.30 T.TORIKAI MOD START
//			String opState = (String)eKK0351B010map.get(EKK0351B010CBSMsg1List.OP_SVC_KEI_STAT);
//			
//			if (!STAT_SVCTK_CHU.equals(opState)) {
//				continue;
//			}
			// 20150630 OM-2015-0001228 DEL START
//			if (!isServiceTeikyochuOpSvcKe(param, handle, trgt_data, eKK0351B010map)) {
//				continue;
//			}
			// 20150630 OM-2015-0001228 DEL END
// OM-2013-0002675 2013.09.30 T.TORIKAI MOD END
			ArrayList<HashMap<String, Object>> eKK0401B001HashList = new ArrayList<HashMap<String, Object>>();

			// EKK0401B010への呼び出しパラメータ設定
			template = new CAANMsg(EKK0401B001CBSMsg.class.getName());
			useFailMapper.mappingEKK0401B001SCInMsg(template, eKK0351B010map);

			// SIF実行
			resultMsgs = callScCmn(param, handle, template);

			// 結果を設定
			eKK0401B001HashList.addAll(mappingCAANOutMsg(EKK0401B001CBSMsg.EKK0401B001CBSMSG1LIST, resultMsgs));
			
			
			for (HashMap<String, Object> eKK0401B010map : eKK0401B001HashList ) {
				
// OM-2013-0002675 2013.09.30 T.TORIKAI MOD START
//				String subOpState = (String)eKK0401B010map.get(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT);
//				
//				if (!STAT_SVCTK_CHU.equals(subOpState)) {
//					continue;
//				}
				// 20150630 OM-2015-0001228 DEL START
//				if (!isServiceTeikyochuSbOpSvcKei(param, handle, trgt_data, eKK0401B010map)) {
//					continue;
//				}
				// 20150630 OM-2015-0001228 DEL END
// OM-2013-0002675 2013.09.30 T.TORIKAI MOD END
				
				// 設定用マップをコピー
				copyMap.clear();
				copyMap.putAll(trgt_data);
				
				copyMap.put(EKK0961D010CBSMsg.SVC_KEI_NO, null);
				copyMap.put(EKK0961D010CBSMsg.SBOP_SVC_KEI_NO, (String)eKK0401B010map.get(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO));
				copyMap.put(EKK0961D010CBSMsg.OP_SVC_KEI_NO, (String)eKK0351B010map.get(EKK0351B010CBSMsg1List.OP_SVC_KEI_NO));
				// ANK-4245-00-00 ADD START
				// 利用停止取扱コードにより利用不可期間登録スキーマへの登録内容を変える
				// ⇒KKW17802_利用不可期間更新画面でも当共通部品を使用しており、利用不可期間への登録内容も異なる為
				//   影響の出ない様に、画面から渡している利用停止取扱コードで制御
				String jdgAddcd = (String)trgt_data.get(EKK0961D010CBSMsg.USE_STP_TORIATSU_CD); 
				if(null != jdgAddcd && !"".equals(jdgAddcd))
				{
					// 利用停止取扱コードが"11"(住所変更）の場合、
					// サービス開始日は登録する
					if (USE_STP_TORIATSU_CD_ADCHG.equals(jdgAddcd))
					{
						// オプションサービス契約一意照会よりサービス開始年月日を取得し設定
						copyMap.put(EKK0961D010CBSMsg.SVC_STAYMD, (String)eKK0401B010map.get(EKK0401B001CBSMsg1List.SVC_STAYMD));
					}
				}
				// ANK-4245-00-00 ADD END
				// EKK0961D010への呼び出しパラメータ設定
				HashMap<String , Object> eKK0961D010map = new HashMap<String , Object>();
				template = new CAANMsg(EKK0961D010CBSMsg.class.getName());
				useFailMapper.mappingEKK0961D010InMsg(template, copyMap);
				
				// SIF実行
				resultMsgs = callScCmn(param, handle, template);

				// ステータスコードの取得
				statusCode = template.getInt(JCMConstants.STATUS_INT_KEY);
				
				// ステータスが0以外はエラーとなっている
				if(statusCode == 0)
				{
					eKK0961D010map.put(TEMPLATE_ID_EKK0961D010, useFailMapper.mappingCSCOutMsg(resultMsgs));
				} else {
					// 失敗した場合
					return statusCode;
				}
			}
			
		}
		
		return statusCode;
	}
	
	/**
	 * 請求オプションサービスの利用不可を登録する
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param trgt_data ターゲットデータ
	 * @param svcSbtCd サービス種別
	 * @param workField work領域（結果保持等）
	 * @return ステータスコード
	 * @throws Throwable 例外時にスローします
	 */
	private int seikyOpFailAdd(
			SessionHandle handle, 
			IRequestParameterReadWrite param,
			HashMap<String, Object> trgt_data
	) throws Throwable
	{
		int statusCode = STAT_NORMAL ;
		
		// サービス契約内訳照会
		// SIFの実行結果から取得したCAANMsg[]
		CAANMsg[] resultMsgs = null;
		// テンプレート情報部（入力時の情報）
		CAANMsg template = null;
		
		HashMap<String, Object> copyMap =new HashMap<String, Object>();
		
		ArrayList<HashMap<String, Object>> eKK0441B002HashList = new ArrayList<HashMap<String, Object>>();

		// EKK0441B002への呼び出しパラメータ設定
		template = new CAANMsg(EKK0441B002CBSMsg.class.getName());
		useFailMapper.mappingEKK0441B002SCInMsg(template, trgt_data);

		// SIF実行
		resultMsgs = callScCmn(param, handle, template);

		// 結果を設定
		eKK0441B002HashList.addAll(mappingCAANOutMsg(EKK0441B002CBSMsg.EKK0441B002CBSMSG1LIST, resultMsgs));
		
		for (HashMap<String, Object> eKK0441B002map : eKK0441B002HashList ) {
			
// OM-2013-0002675 2013.09.30 T.TORIKAI MOD START
//			String seiOpState = (String)eKK0441B002map.get(EKK0441B002CBSMsg1List.SEIOPSVC_KEI_STAT);
//			
//			if (!STAT_SVCTK_CHU.equals(seiOpState)) {
//				continue;
//			}
			// 20150630 OM-2015-0001228 DEL START
//			if (!isServiceTeikyochuSeiOpSvcKei(param, handle, trgt_data, eKK0441B002map)) {
//				continue;
//			}
			// 20150630 OM-2015-0001228 DEL END
//OM-2013-0002675 2013.09.30 T.TORIKAI MOD END
			
			// 設定用マップをコピー
			copyMap.clear();
			copyMap.putAll(trgt_data);
			
			copyMap.put(EKK0961D010CBSMsg.SVC_KEI_NO, null);
			copyMap.put(EKK0961D010CBSMsg.SEIOPSVC_KEI_NO, (String)eKK0441B002map.get(EKK0441B002CBSMsg1List.SEIOPSVC_KEI_NO));
			// ANK-4245-00-00 ADD START
			// 利用停止取扱コードにより利用不可期間登録スキーマへの登録内容を変える
			// ⇒KKW17802_利用不可期間更新画面でも当共通部品を使用しており、利用不可期間への登録内容も異なる為
			//   影響の出ない様に、画面から渡している利用停止取扱コードで制御
			String jdgAddcd = (String)trgt_data.get(EKK0961D010CBSMsg.USE_STP_TORIATSU_CD); 
			if(null != jdgAddcd && !"".equals(jdgAddcd))
			{
				// 利用停止取扱コードが"11"(住所変更）の場合、
				// サービス開始日は登録する
				if (USE_STP_TORIATSU_CD_ADCHG.equals(jdgAddcd))
				{
					// 請求オプションサービス契約一覧照会よりサービス開始年月日を取得
					copyMap.put(EKK0961D010CBSMsg.SVC_STAYMD, (String)eKK0441B002map.get(EKK0441B002CBSMsg1List.SVC_STA_YMD));
				}
			}
			// ANK-4245-00-00 ADD END
			// EKK0961D010への呼び出しパラメータ設定
			HashMap<String , Object> eKK0961D010map = new HashMap<String , Object>();
			template = new CAANMsg(EKK0961D010CBSMsg.class.getName());
			useFailMapper.mappingEKK0961D010InMsg(template, copyMap);
			
			// SIF実行
			resultMsgs = callScCmn(param, handle, template);

			// ステータスコードの取得
			statusCode = template.getInt(JCMConstants.STATUS_INT_KEY);
			
			// ステータスが0以外はエラーとなっている
			if(statusCode == 0)
			{
				eKK0961D010map.put(TEMPLATE_ID_EKK0961D010, useFailMapper.mappingCSCOutMsg(resultMsgs));
			} else {
				// 失敗した場合
				return statusCode;
			}
		}
		
		return statusCode;
	}
	
// OM-2013-0002675 2013.09.30 T.TORIKAI メソッド追加
	/**
	 * サービス契約回線内訳に紐付く機器提供サービス契約の利用不可を登録する
	 * 
	 * @param handle		セッションハンドル
	 * @param request			リクエストパラメータ
	 * @param paramMap		ターゲットデータ
	 * @return				ステータスコード
	 * @throws Throwable	例外時にスローします
	 */
	private int kaisenUcwkKktkSvcKeiFailAdd(SessionHandle handle, IRequestParameterReadWrite request, HashMap<String, Object> paramMap) throws Throwable
	{
		int statusCode = STAT_NORMAL ;
		
		// サービス契約一意照会
		HashMap<String, Object> mapEKK0081A010 = getEKK0081A010(request, handle, paramMap);
// OM-2013-0004028対応 20131109 星野 ADD START
		if(mapEKK0081A010==null){
			return statusCode;
		}
// OM-2013-0004028対応 20131109 星野 ADD END
		String svcCd = (String)mapEKK0081A010.get(EKK0081A010CBSMsg1List.SVC_CD);

		// 機器提供サービス契約一覧照会（サービス契約番号より、回線内訳に紐付く機器を取得）
		ArrayList<HashMap<String, Object>> listEKK0341B019 = getEKK0341B019(request, handle, paramMap);

		// 機器提供サービス契約のループ（サービス契約回線内訳に紐付く機器）
		for (HashMap<String, Object> mapEKK0341B019 : listEKK0341B019 ) {
			// 機器提供サービス契約一意照会
			HashMap<String, Object> mapEKK0341A010 = getEKK0341A010(request, handle, paramMap, mapEKK0341B019);
// OM-2013-0004028対応 20131109 星野 ADD START
			if(mapEKK0341A010==null){
				continue;
			}
// OM-2013-0004028対応 20131109 星野 ADD END
			
			// 20141126 OM-2014-0003601 Update Start
			//// サービス提供中のみ対象
			//if (!STAT_SVCTK_CHU.equals(mapEKK0341A010.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT))) {
			// ステータスチェック
			// 20150630 OM-2015-0001228 DEL START
//			if (!useFailChgStatChk((String)mapEKK0341A010.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT))) {
//			// 20141126 OM-2014-0003601 Update End
//				continue;
//			}
			// 20150630 OM-2015-0001228 DEL END

			// 宅内機器種別コードによりIP,TVに対応する機器のみを処理する
			if (!checkTaknkikiSbtCd(svcCd, mapEKK0341A010)) {
				continue;
			}

			//OM-2015-0002752 2015/11/11 DEL START
//			// 利用不可期間の重複するレコードが既に存在する場合は登録しない
//			if (isRegisteredUseStopPrdKaisenKiki(request, handle, paramMap, mapEKK0341A010)) {
//				continue;
//			}
			//OM-2015-0002752 2015/11/11 DEL END

			// 利用不可期間登録
			statusCode = registerUseStopPrdKaisenKiki(request, handle, paramMap, mapEKK0341A010);
			if (statusCode != STAT_NORMAL) {
				break;	// 登録失敗
			}
			
			
		}
// ANK-1578-00-00 2013.12.06 KURATA ADD START
		/** 回線内訳に紐付く機器の機器オプションサービス契約の利用不可期間登録を行う */
		statusCode =  KktkSvcKeikkOpSvcKeiFailAdd(handle, request, paramMap, listEKK0341B019, svcCd);
		if (statusCode != STAT_NORMAL) {
			return statusCode;	// 登録失敗
		}
		
//ANK-1578-00-00 2013.12.06 KURATA ADD END

		return statusCode;
	}
	
	
	
// OM-2013-0002675 2013.09.30 T.TORIKAI メソッド追加
	/**
	 * サービスコードに対応する回線に紐付く機器か判定する
	 * 
	 * @param svcCd				サービスコード
	 * @param mapEKK0341A010	機器提供サービス契約の一意照会結果
	 * @return					true：サービスコードに対応する回線の機器	false：左記以外
	 */
	private boolean checkTaknkikiSbtCd(String svcCd, HashMap<String, Object> mapEKK0341A010)
	{
		String[] taknkikiSbtList = null;
		if (JKKStrConst.CD00130_01.equals(svcCd) || JKKStrConst.CD00130_02.equals(svcCd)) {
			// ネット or 電話
			taknkikiSbtList = KAISEN_KIKI_SBT_LIST_IP;
		} else if (JKKStrConst.CD00130_03.equals(svcCd)) {
			// テレビ
			taknkikiSbtList = KAISEN_KIKI_SBT_LIST_TV;
		} else {
			return false;		// 対象機器なし
		}
		
		String taknkikiSbtCd = (String)mapEKK0341A010.get(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD);
		for (String cd : taknkikiSbtList) {
			if (cd.equals(taknkikiSbtCd)) {
				return true;	// 対象機器
			}
		}
		return false;			// 対象機器なし
	}
//OM-2015-0002752 2015/11/11 DEL START
//// OM-2013-0002675 2013.09.30 T.TORIKAI メソッド追加
//	/**
//	 * 利用不可期間が既に登録されているか確認する
//	 * 
//	 * @param request			リクエストパラメータ
//	 * @param handle			セッションハンドル
//	 * @param paramMap			パラメータ
//	 * @param mapEKK0341A010	機器提供サービス契約の一意照会結果
//	 * @return					true：サービスコードに対応する回線の機器	false：左記以外
//	 * @throws Throwable 
//	 */
//	private boolean isRegisteredUseStopPrdKaisenKiki(IRequestParameterReadWrite request, SessionHandle handle,
//			HashMap<String, Object> paramMap, HashMap<String, Object> mapEKK0341A010) throws Throwable
//	{
//// IT2-2013-0000780対応 20131118 星野 MOD START
////		// 利用停止開始年月日時分秒
////		String useStpStaDtm = paramMap.get(EKK0961D010CBSMsg.USE_STP_STA_DTM).toString();
////		// 利用停止終了年月日時分秒
////		String useStpEndDtm = paramMap.get(EKK0961D010CBSMsg.USE_STP_END_DTM).toString();
//		// 利用停止開始年月日時分秒
//		String useStpStaDtm = (String)paramMap.get(EKK0961D010CBSMsg.USE_STP_STA_DTM);
//		// 利用停止終了年月日時分秒
//		String useStpEndDtm = (String)paramMap.get(EKK0961D010CBSMsg.USE_STP_END_DTM);
//		if(StringUtils.isEmpty(useStpEndDtm)){
//			useStpEndDtm = JKKStrConst.END_YMD_DEFAULT + "000000000";
//		}
//// IT2-2013-0000780対応 20131118 星野 MOD END
//		
//		// 利用停止期間一覧照会
//		ArrayList<HashMap<String, Object>> listEKK0961B001 = getEKK0961B001(request, handle, mapEKK0341A010);
//		
//		for (HashMap<String, Object> mapEKK0961B001 : listEKK0961B001) {
//// IT2-2013-0000780対応 20131118 星野 MOD START
////			String startDtm = mapEKK0961B001.get(EKK0961B001CBSMsg1List.USE_STP_STA_DTM).toString();
////			String endDtm = mapEKK0961B001.get(EKK0961B001CBSMsg1List.USE_STP_END_DTM).toString();
//			String startDtm = (String)mapEKK0961B001.get(EKK0961B001CBSMsg1List.USE_STP_STA_DTM);
//			String endDtm = (String)mapEKK0961B001.get(EKK0961B001CBSMsg1List.USE_STP_END_DTM);
//// IT2-2013-0000780対応 20131118 星野 MOD END
//			if (endDtm == null || "".equals(endDtm)) {
//// IT2-2013-0000780対応 20131118 星野 MOD START
////				endDtm = JKKStrConst.END_YMD_DEFAULT;
//				endDtm = JKKStrConst.END_YMD_DEFAULT + "000000000";
//// IT2-2013-0000780対応 20131118 星野 MOD END
//			}
//			
//			if (useStpStaDtm.compareTo(startDtm) >= 0 && useStpStaDtm.compareTo(endDtm) <= 0) {
//				// 利用停止開始年月日時分秒が期間に含まれる
//				return true;
//			}
//			if (useStpEndDtm.compareTo(startDtm) >= 0 && useStpEndDtm.compareTo(endDtm) <= 0) {
//				// 利用停止終了年月日時分秒が期間に含まれる
//				return true;
//			}
//			if (useStpStaDtm.compareTo(startDtm) < 0 && useStpEndDtm.compareTo(endDtm) > 0) {
//				// 期間が利用停止開始年月日時分秒、利用停止終了年月日時分秒に含まれる
//				return true;
//			}
//		}
//		
//		return false;			// 利用不可期間の重複レコードなし
//	}
//OM-2015-0002752 2015/11/11 DEL END
	
// OM-2013-0002675 2013.09.30 T.TORIKAI メソッド追加
	/**
	 * 回線に紐付く機器の利用不可期間を登録する
	 * 
	 * @param request			リクエストパラメータ
	 * @param handle			セッションハンドル
	 * @param paramMap			パラメータ
	 * @param mapEKK0341A010	機器提供サービス契約の一意照会結果
	 * @return					ステータスコード
	 * @throws Throwable
	 */
	private int registerUseStopPrdKaisenKiki(IRequestParameterReadWrite request, SessionHandle handle,
			HashMap<String, Object> paramMap, HashMap<String, Object> mapEKK0341A010) throws Throwable
	{
		HashMap<String, Object> insertMap = new HashMap<String, Object>();
		insertMap.putAll(paramMap);
		insertMap.put(EKK0961D010CBSMsg.SVC_KEI_NO, null);
		insertMap.put(EKK0961D010CBSMsg.KKTK_SVC_KEI_NO, (String)mapEKK0341A010.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
		// ANK-4245-00-00 ADD START
		// 利用停止取扱コードにより利用不可期間登録スキーマへの登録内容を変える
		// ⇒KKW17802_利用不可期間更新画面でも当共通部品を使用しており、利用不可期間への登録内容も異なる為
		//   影響の出ない様に、画面から渡している利用停止取扱コードで制御
		String jdgAddcd = (String)insertMap.get(EKK0961D010CBSMsg.USE_STP_TORIATSU_CD); 
		String adchgKJakNo = (String)insertMap.get(EKK0961D010CBSMsg.AD_CHG_TEKKYO_KJAK_NO);
		if(null != jdgAddcd && !"".equals(jdgAddcd))
		{
			// 利用停止取扱コードが"11"(住所変更）の場合、
			// サービス開始日は登録する
			if (USE_STP_TORIATSU_CD_ADCHG.equals(jdgAddcd))
			{
				
				// SIFの実行結果から取得したCAANMsg[]
				CAANMsg[] resultMsgs = null;
				// テンプレート情報部（入力時の情報）
				CAANMsg template = null;
				// 一覧格納マップ
				ArrayList<HashMap<String, Object>> eKK0961B001HashList = new ArrayList<HashMap<String, Object>>();
				
				HashMap<String, Object> sendMap = new HashMap<String, Object>();
				sendMap.put("kktk_svc_kei", (String)insertMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
				
				// EKK0961B010への呼び出しパラメータ設定
				template = new CAANMsg(EKK0961B001CBSMsg.class.getName());
				useFailMapper.mappingEKK0961B001SCInMsg(template, sendMap);
				
				// SIF実行
				resultMsgs = callScCmn(request, handle, template);
				
				// 結果を設定
				eKK0961B001HashList.addAll(mappingCAANOutMsg(EKK0961B001CBSMsg.EKK0961B001CBSMSG1LIST, resultMsgs));
				// 判定処理より利用不可期間登録に重複レコードが存在しない場合、登録用のパラメータを渡す
				if(!isUseStpStat(adchgKJakNo,eKK0961B001HashList))
				{
					insertMap.put(EKK0961D010CBSMsg.KIKI_SEIZO_NO, null);
					insertMap.put(EKK0961D010CBSMsg.TAKNKIKI_MODEL_CD, null);
					// 機器提供サービス契約一意照会よりサービス開始年月日を取得
					insertMap.put(EKK0961D010CBSMsg.SVC_STAYMD, (String)mapEKK0341A010.get(EKK0341A010CBSMsg1List.SVC_STA_YMD));
				}
				// 存在する場合は正常終了⇒登録しない
				else
				{
					return STAT_NORMAL;
				}
			}
			else
			{
			// ANK-4245-00-00 ADD END	
				insertMap.put(EKK0961D010CBSMsg.KIKI_SEIZO_NO, (String)mapEKK0341A010.get(EKK0341A010CBSMsg1List.KIKI_SEIZO_NO));
				insertMap.put(EKK0961D010CBSMsg.TAKNKIKI_MODEL_CD, (String)mapEKK0341A010.get(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD));
		// ANK-4245-00-00 ADD START	
			}
		}
		// ANK-4245-00-00 ADD END		
		// EKK0961D010への呼び出しパラメータ設定
		HashMap<String , Object> eKK0961D010map = new HashMap<String , Object>();
		CAANMsg template = new CAANMsg(EKK0961D010CBSMsg.class.getName());
		useFailMapper.mappingEKK0961D010InMsg(template, insertMap);
				
		// SIF実行
		CAANMsg[] resultMsgs = callScCmn(request, handle, template);
		
		// ステータスコードの取得
		int statusCode = template.getInt(JCMConstants.STATUS_INT_KEY);
// 20131111 MOD START
//		if (statusCode == STAT_NORMAL) {
		if (statusCode != STAT_NORMAL) {
// 20131111 MOD END
			eKK0961D010map.put(TEMPLATE_ID_EKK0961D010, useFailMapper.mappingCSCOutMsg(resultMsgs));
		}
		
		return statusCode;
	}

	/**
	 * 進捗登録呼び出し
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param workField 結果取得領域
	 * @return 各サービスのリターンコード
	 * @throws Throwable 例外時にスローされます。
	 */	
	private int callAddPrg(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inMap
	) throws Throwable
	{
		//ステータスコード
		int statusCode = STAT_NORMAL;	

		//結果領域の生成
		HashMap<String, Object> resultHash =  new HashMap<String, Object>();

		// SIFの実行結果から取得したCAANMsg[]
		CAANMsg[] resultMsgs = null;
		// テンプレート情報部（入力時の情報）
		CAANMsg template = null;

		// EKK1091D010への呼び出しパラメータ設定
		template = new CAANMsg(EKK1091D010CBSMsg.class.getName());
		useFailMapper.mappinEKK1091D010SCInMsg(template, inMap);

		// SIF実行
		resultMsgs = callScCmn(param, handle, template);

		// 結果を設定(登録時)
		resultHash.putAll(mappingCAANOutMsgAdd(resultMsgs));

		return statusCode;
	}

// OM-2013-0002675 2013.09.30 T.TORIKAI メソッド追加
	// 20150630 OM-2015-0001228 DEL START
//	/**
//	 * サービス契約内訳がサービス提供中か判定する
//	 * 
//	 * @param request			リクエストパラメータ
//	 * @param handle			セッションハンドル
//	 * @param paramMap			パラメータ
//	 * @param mapEKK0161B004	EKK0161B004照会結果
//	 * @return					true：サービス提供中	false：左記以外
//	 * @throws Throwable		例外時スロー
//	 */
//	private boolean isServiceTeikyochuSvcKeiUcwk(IRequestParameterReadWrite request, SessionHandle handle, HashMap<String, Object> paramMap, HashMap<String, Object> mapEKK0161B004) throws Throwable {
//
//		// サービス契約内訳一意照会
//		HashMap<String, Object> map = new HashMap<String, Object>();
//		map.put(EKK0161A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);
//		map.put(EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO, mapEKK0161B004.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO));
//		String dtm = (String)paramMap.get(EKK0961D010CBSMsg.USE_STP_STA_DTM);	// 利用不可期間の開始日にカレントとなるデータを検索
//		map.put(EKK0161A010CBSMsg.KEY_RSV_APLY_YMD, dtm.substring(0, 8));
//		
//		// EKK0161A010への呼び出しパラメータ設定
//		CAANMsg template = new CAANMsg(EKK0161A010CBSMsg.class.getName());
//		useFailMapper.mappingEKK0161A010SCInMsg(template, map);
//
//		// SIF実行
//		CAANMsg[] resultMsgs = callScCmn(request, handle, template);
//
//		// 結果を取得
//		HashMap<String, Object> resultMap = mappingCAANOutMsgOne(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST, resultMsgs);
//// OM-2013-0004028対応 20131109 星野 ADD START
//		if(resultMap==null){
//			return false;
//		}
//// OM-2013-0004028対応 20131109 星野 ADD END
//
//		// 判定
//		String stat = (String)resultMap.get(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT);
//		// 20141126 OM-2014-0003601 Update Start
//		//if (STAT_SVCTK_CHU.equals(stat)) {
//		// ステータスチェック
//		if (useFailChgStatChk(stat)) {
//		// 20141126 OM-2014-0003601 Update End
//			return true;	// サービス提供中
//		}
//
//		return false;		// サービス提供中ではない
//	}
	// 20150630 OM-2015-0001228 DEL END

// OM-2013-0002675 2013.09.30 T.TORIKAI メソッド追加
	// 20150630 OM-2015-0001228 DEL START
//	/**
//	 * 機器提供サービス契約がサービス提供中か判定する
//	 * 
//	 * @param request			リクエストパラメータ
//	 * @param handle			セッションハンドル
//	 * @param paramMap			パラメータ
//	 * @param mapEKK0341B008	EKK0341B008照会結果
//	 * @return					true：サービス提供中	false：左記以外
//	 * @throws Throwable		例外時スロー
//	 */
//	private boolean isServiceTeikyochuKktkSvcKe(IRequestParameterReadWrite request, SessionHandle handle,HashMap<String, Object> paramMap, HashMap<String, Object> mapEKK0341B008) throws Throwable {
//
//		// 機器提供サービス契約一意照会
//		HashMap<String, Object> map = new HashMap<String, Object>();
//		map.put("kktk_svc_kei_no", mapEKK0341B008.get(EKK0341B008CBSMsg1List.KKTK_SVC_KEI_NO));
//		String dtm = (String)paramMap.get(EKK0961D010CBSMsg.USE_STP_STA_DTM);	// 利用不可期間の開始日にカレントとなるデータを検索
//
//		// EKK0341A010への呼び出しパラメータ設定
//		CAANMsg template = new CAANMsg(EKK0341A010CBSMsg.class.getName());
//		useFailMapper.mappingEKK0341A010SCInMsg(template, map, dtm.substring(0, 8));
//
//		// SIF実行
//		CAANMsg[] resultMsgs = callScCmn(request, handle, template);
//
//		// 結果を取得
//		HashMap<String, Object> resultMap = mappingCAANOutMsgOne(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST, resultMsgs);
//// OM-2013-0004028対応 20131109 星野 ADD START
//		if(resultMap==null){
//			return false;
//		}
//// OM-2013-0004028対応 20131109 星野 ADD END
//
//		// 判定
//		String stat = (String)resultMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT);
//		// 20141126 OM-2014-0003601 Update Start
//		//if (STAT_SVCTK_CHU.equals(stat)) {
//		// ステータスチェック
//		if (useFailChgStatChk(stat)) {
//		// 20141126 OM-2014-0003601 Update End
//			return true;	// サービス提供中
//		}
//
//		return false;		// サービス提供中ではない
//	}
	// 20150630 OM-2015-0001228 DEL END

// OM-2013-0002675 2013.09.30 T.TORIKAI メソッド追加
	// 20150630 OM-2015-0001228 DEL START
//	/**
//	 * オプションサービス契約がサービス提供中か判定する
//	 * 
//	 * @param request			リクエストパラメータ
//	 * @param handle			セッションハンドル
//	 * @param paramMap			パラメータ
//	 * @param mapEKK0351B010	EKK0351B010照会結果
//	 * @return					true：サービス提供中	false：左記以外
//	 * @throws Throwable		例外時スロー
//	 */
//	private boolean isServiceTeikyochuOpSvcKe(IRequestParameterReadWrite request, SessionHandle handle, HashMap<String, Object> paramMap, HashMap<String, Object> mapEKK0351B010) throws Throwable {
//
//		// オプションサービス契約一意照会
//		HashMap<String, Object> map = new HashMap<String, Object>();
//		map.put(EKK0351B010CBSMsg1List.OP_SVC_KEI_NO, mapEKK0351B010.get(EKK0351B010CBSMsg1List.OP_SVC_KEI_NO));
//		String dtm = (String)paramMap.get(EKK0961D010CBSMsg.USE_STP_STA_DTM);	// 利用不可期間の開始日にカレントとなるデータを検索
//
//		// EKK0351A010への呼び出しパラメータ設定
//		CAANMsg template = new CAANMsg(EKK0351A010CBSMsg.class.getName());
//		useFailMapper.mappingEKK0351A010SCInMsg(template, map, dtm.substring(0, 8));
//
//		// SIF実行
//		CAANMsg[] resultMsgs = callScCmn(request, handle, template);
//
//		// 結果を取得
//		HashMap<String, Object> resultMap = mappingCAANOutMsgOne(EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST, resultMsgs);
//// OM-2013-0004028対応 20131109 星野 ADD START
//		if(resultMap==null){
//			return false;
//		}
//// OM-2013-0004028対応 20131109 星野 ADD END
//
//		// 判定
//		String stat = (String)resultMap.get(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);
//		// 20141126 OM-2014-0003601 Update Start
//		//if (STAT_SVCTK_CHU.equals(stat)) {
//		// ステータスチェック
//		if (useFailChgStatChk(stat)) {
//		// 20141126 OM-2014-0003601 Update Start
//			return true;	// サービス提供中
//		}
//
//		return false;		// サービス提供中ではない
//	}
	// 20150630 OM-2015-0001228 DEL END

// OM-2013-0002675 2013.09.30 T.TORIKAI メソッド追加
	// 20150630 OM-2015-0001228 DEL START
//	/**
//	 * サブオプションサービス契約がサービス提供中か判定する
//	 * 
//	 * @param request			リクエストパラメータ
//	 * @param handle			セッションハンドル
//	 * @param paramMap			パラメータ
//	 * @param mapEKK0401B010	EKK0401B010照会結果
//	 * @return					true：サービス提供中	false：左記以外
//	 * @throws Throwable		例外時スロー
//	 */
//	private boolean isServiceTeikyochuSbOpSvcKei(IRequestParameterReadWrite request, SessionHandle handle, HashMap<String, Object> paramMap, HashMap<String, Object> mapEKK0401B010) throws Throwable {
//
//		// サブオプションサービス契約一意照会
//		HashMap<String, Object> map = new HashMap<String, Object>();
//		map.put(EKK0401A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);
//		map.put(EKK0401B001CBSMsg1List.OP_SVC_KEI_NO, mapEKK0401B010.get(EKK0401B001CBSMsg1List.OP_SVC_KEI_NO));
//		map.put(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO, mapEKK0401B010.get(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO));
//		String dtm = (String)paramMap.get(EKK0961D010CBSMsg.USE_STP_STA_DTM);	// 利用不可期間の開始日にカレントとなるデータを検索
//		map.put(EKK0401A010CBSMsg.KEY_RSV_APLY_YMD, dtm.substring(0, 8));
//
//		// EKK0401A010への呼び出しパラメータ設定
//		CAANMsg template = new CAANMsg(EKK0401A010CBSMsg.class.getName());
//		useFailMapper.mappingEKK0401A010SCInMsg(template, map);
//
//		// SIF実行
//		CAANMsg[] resultMsgs = callScCmn(request, handle, template);
//
//		// 結果を取得
//		HashMap<String, Object> resultMap = mappingCAANOutMsgOne(EKK0401A010CBSMsg.EKK0401A010CBSMSG1LIST, resultMsgs);
//// OM-2013-0004028対応 20131109 星野 ADD START
//		if(resultMap==null){
//			return false;
//		}
//// OM-2013-0004028対応 20131109 星野 ADD END
//
//		// 判定
//		String stat = (String)resultMap.get(EKK0401A010CBSMsg1List.SBOP_SVC_KEI_STAT);
//		// 20141126 OM-2014-0003601 Update Start
//		//if (STAT_SVCTK_CHU.equals(stat)) {
//		// ステータスチェック
//		if (useFailChgStatChk(stat)) {
//		// 20141126 OM-2014-0003601 Update End
//			return true;	// サービス提供中
//		}
//
//		return false;		// サービス提供中ではない
//	}
	// 20150630 OM-2015-0001228 DEL END

// OM-2013-0002675 2013.09.30 T.TORIKAI メソッド追加
	// 20150630 OM-2015-0001228 DEL START
//	/**
//	 * 請求オプションサービス契約がサービス提供中か判定する
//	 * 
//	 * @param request			リクエストパラメータ
//	 * @param handle			セッションハンドル
//	 * @param paramMap			パラメータ
//	 * @param mapEKK0441B002	EKK0441B002照会結果
//	 * @return					true：サービス提供中	false：左記以外
//	 * @throws Throwable		例外時スロー
//	 */
//	private boolean isServiceTeikyochuSeiOpSvcKei(IRequestParameterReadWrite request, SessionHandle handle, HashMap<String, Object> paramMap, HashMap<String, Object> mapEKK0441B002) throws Throwable {
//
//		// 請求オプションサービス契約一意照会
//		HashMap<String, Object> map = new HashMap<String, Object>();
//		map.put(EKK0441A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);
//		map.put(EKK0441A010CBSMsg.KEY_SEIOPSVC_KEI_NO, mapEKK0441B002.get(EKK0441B002CBSMsg1List.SEIOPSVC_KEI_NO));
//		String dtm = (String)paramMap.get(EKK0961D010CBSMsg.USE_STP_STA_DTM);	// 利用不可期間の開始日にカレントとなるデータを検索
//
//		// EKK0441A010への呼び出しパラメータ設定
//		CAANMsg template = new CAANMsg(EKK0441A010CBSMsg.class.getName());
//		useFailMapper.mappingEKK0441A010SCInMsg(template, map, dtm.substring(0, 8));
//
//		// SIF実行
//		CAANMsg[] resultMsgs = callScCmn(request, handle, template);
//
//		// 結果を取得
//		HashMap<String, Object> resultMap = mappingCAANOutMsgOne(EKK0441A010CBSMsg.EKK0441A010CBSMSG1LIST, resultMsgs);
//// OM-2013-0004028対応 20131109 星野 ADD START
//		if(resultMap==null){
//			return false;
//		}
//// OM-2013-0004028対応 20131109 星野 ADD END
//
//		// 判定
//		String stat = (String)resultMap.get(EKK0441A010CBSMsg1List.SEIOPSVC_KEI_STAT);
//		// 20141126 OM-2014-0003601 Update Start
//		//if (STAT_SVCTK_CHU.equals(stat)) {
//		// ステータスチェック
//		if (useFailChgStatChk(stat)) {
//		// 20141126 OM-2014-0003601 Update End
//			return true;	// サービス提供中
//		}
//
//		return false;		// サービス提供中ではない
//	}
	// 20150630 OM-2015-0001228 DEL END
	
// OM-2013-0002675 2013.09.30 T.TORIKAI メソッド追加
	/**
	 * EKK0341B019_機器提供サービス契約一覧照会(サービス契約番号、回線対象サービス契約経由)にて<br>
	 * 回線に紐付く機器の一覧を取得する
	 * 
	 * @param request			リクエストパラメータ
	 * @param handle			セッションハンドル
	 * @throws Throwable		例外時スロー
	 */
	private ArrayList<HashMap<String, Object>> getEKK0341B019(IRequestParameterReadWrite request, SessionHandle handle, HashMap<String, Object> paramMap) throws Throwable {
		// 検索条件
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put(EKK0341B019CBSMsg.KEY_SVC_KEI_NO, paramMap.get(EKK0961D010CBSMsg.SVC_KEI_NO));
		String dtm = (String)paramMap.get(EKK0961D010CBSMsg.USE_STP_STA_DTM);	// 利用不可期間の開始日にカレントとなるデータを検索
		map.put(EKK0341B019CBSMsg.KEY_BASE_YMD, dtm.substring(0, 8));

		// EKK0341B019への呼び出しパラメータ設定
		CAANMsg template = new CAANMsg(EKK0341B019CBSMsg.class.getName());
		useFailMapper.mappingEKK0341B019SCInMsg(template, map);

		// SIF実行
		CAANMsg[] resultMsgs = callScCmn(request, handle, template);

		// 結果を取得
		return mappingCAANOutMsg(EKK0341B019CBSMsg.EKK0341B019CBSMSG1LIST, resultMsgs);
	}

// OM-2013-0002675 2013.09.30 T.TORIKAI メソッド追加
	/**
	 * EKK0081A010_サービス契約一意照会
	 * 
	 * @param request			リクエストパラメータ
	 * @param handle			セッションハンドル
	 * @param paramMap			パラメータ
	 * @throws Throwable		例外時スロー
	 */
	private HashMap<String, Object> getEKK0081A010(IRequestParameterReadWrite request, SessionHandle handle, HashMap<String, Object> paramMap) throws Throwable {
		// 検索条件
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, paramMap.get(EKK0961D010CBSMsg.SVC_KEI_NO));
		String dtm = (String)paramMap.get(EKK0961D010CBSMsg.USE_STP_STA_DTM);	// 利用不可期間の開始日にカレントとなるデータを検索
		map.put(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, dtm.substring(0, 8));

		// EKK0081A010への呼び出しパラメータ設定
		CAANMsg template = new CAANMsg(EKK0081A010CBSMsg.class.getName());
		useFailMapper.mappingEKK0081A010SCInMsg(template, map);

		// SIF実行
		CAANMsg[] resultMsgs = callScCmn(request, handle, template);

		// 結果を取得
		return mappingCAANOutMsgOne(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST, resultMsgs);
	}

// OM-2013-0002675 2013.09.30 T.TORIKAI メソッド追加
	/**
	 * EKK0341A010_機器提供サービス契約一意照会
	 * 
	 * @param request			リクエストパラメータ
	 * @param handle			セッションハンドル
	 * @param paramMap			パラメータ
	 * @param mapEKK0341B019	EKK0341B019照会結果
	 * @throws Throwable		例外時スロー
	 */
	private HashMap<String, Object> getEKK0341A010(IRequestParameterReadWrite request, SessionHandle handle, HashMap<String, Object> paramMap, HashMap<String, Object> mapEKK0341B019) throws Throwable {
		// 検索条件
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put(EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, mapEKK0341B019.get(EKK0341B019CBSMsg1List.KKTK_SVC_KEI_NO));
		String dtm = (String)paramMap.get(EKK0961D010CBSMsg.USE_STP_STA_DTM);	// 利用不可期間の開始日にカレントとなるデータを検索
		map.put(EKK0341A010CBSMsg.KEY_RSV_APLY_YMD, dtm.substring(0, 8));

		// EKK0081A010への呼び出しパラメータ設定
		CAANMsg template = new CAANMsg(EKK0341A010CBSMsg.class.getName());
		useFailMapper.mappingEKK0341A010SCInMsg(template, map);

		// SIF実行
		CAANMsg[] resultMsgs = callScCmn(request, handle, template);

		// 結果を取得
		return mappingCAANOutMsgOne(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST, resultMsgs);
	}

	// OM-2013-0002675 2013.09.30 T.TORIKAI メソッド追加
	/**
	 * getEKK0961B001_利用停止期間一覧照会<br>
	 * 
	 * @param request			リクエストパラメータ
	 * @param handle			セッションハンドル
	 * @param mapEKK0341A010	EKK0341A010照会結果
	 * @throws Throwable		例外時スロー
	 */
	private ArrayList<HashMap<String, Object>> getEKK0961B001(IRequestParameterReadWrite request, SessionHandle handle, HashMap<String, Object> mapEKK0341A010) throws Throwable {
		// 検索条件
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("kktk_svc_kei", mapEKK0341A010.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));

		// EKK0961B001への呼び出しパラメータ設定
		CAANMsg template = new CAANMsg(EKK0961B001CBSMsg.class.getName());
		useFailMapper.mappingEKK0961B001SCInMsg(template, map);

		// SIF実行
		CAANMsg[] resultMsgs = callScCmn(request, handle, template);

		// 結果を取得
		return mappingCAANOutMsg(EKK0961B001CBSMsg.EKK0961B001CBSMSG1LIST, resultMsgs);
	}
	
	
	// ANK-1578-00-00 2013.12.06 KURATA ADD START
	/**
	 * 機器提供サービスに紐付く機器オプションサービス契約の利用不可を登録する
	 * 
	 * @param handle		セッションハンドル
	 * @param request			リクエストパラメータ
	 * @param paramMap		ターゲットデータ
	 * @return				ステータスコード
	 * @throws Throwable	例外時にスローします
	 */
	private int KktkSvcKeikkOpSvcKeiFailAdd(SessionHandle handle, IRequestParameterReadWrite request, HashMap<String, Object> paramMap, ArrayList<HashMap<String, Object>> eKK0341B019HashList, String svcCd) throws Throwable
	{
		int statusCode = STAT_NORMAL ;
		
		// サービス契約内訳照会
		// SIFの実行結果から取得したCAANMsg[]
		CAANMsg[] resultMsgs = null;
		// テンプレート情報部（入力時の情報）
		CAANMsg template = null;
		
		HashMap<String, Object> copyMap =new HashMap<String, Object>();
		
		for (HashMap<String, Object> eKK0341B019map : eKK0341B019HashList ) {
			
			// 機器提供サービス契約一意照会
			HashMap<String, Object> mapEKK0341A010 = getEKK0341A010(request, handle, paramMap, eKK0341B019map);
			if(mapEKK0341A010==null){
				continue;
			}
			
			// 20141126 OM-2014-0003601 Update Start
			// サービス提供中のみ対象
			//if (!STAT_SVCTK_CHU.equals(mapEKK0341A010.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT))) {
			// ステータスチェック
			// 20150630 OM-2015-0001228 DEL START
//			if (!useFailChgStatChk((String)mapEKK0341A010.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT))) {
//			// 20141126 OM-2014-0003601 Update Start
//				continue;
//			}
			// 20150630 OM-2015-0001228 DEL END

			// 宅内機器種別コードによりIP,TVに対応する機器のみを処理する
			if (!checkTaknkikiSbtCd(svcCd, mapEKK0341A010)) {
				continue;
			}
		
			ArrayList<HashMap<String, Object>> listEKK2811B010 = new ArrayList<HashMap<String, Object>>();

			// EKK2811B010への呼び出しパラメータ設定
			template = new CAANMsg(EKK2811B010CBSMsg.class.getName());
			useFailMapper.mappingEKK2811B010SCInMsg(template, eKK0341B019map);

			// SIF実行
			resultMsgs = callScCmn(request, handle, template);

			// 結果を設定
			listEKK2811B010.addAll(mappingCAANOutMsg(EKK2811B010CBSMsg.EKK2811B010CBSMSG1LIST, resultMsgs));

			// 機器オプションサービス契約のループ
			for (HashMap<String, Object> mapEKK2811B010 : listEKK2811B010 ) {
				
// OM-2014-0000624対応 20140210 星野 ADD START
				// サービスコードに対応する機器オプションのみを対象とする
				if(!checkKkopSvcCd(svcCd, mapEKK2811B010)){
					continue;
				}
// OM-2014-0000624対応 20140210 星野 ADD END
				
				// サービス提供中のみ対象
				// 20150630 OM-2015-0001228 DEL START
//				if (!isServiceTeikyochuKkOpSvcKei(request, handle, paramMap, mapEKK2811B010)) {
//					continue;
//				}
				// 20150630 OM-2015-0001228 DEL END
				
				
				// 利用不可期間登録
				statusCode = registerUseStopPrdKkOpSvcKei(request, handle, paramMap, mapEKK2811B010);
				if (statusCode != STAT_NORMAL) {
					break;	// 登録失敗
				}
			}
		}
		return statusCode;
	}
	
// OM-2014-0000624対応 20140210 星野 ADD START
	private boolean checkKkopSvcCd(String svcCd, HashMap<String, Object> mapEKK2811B010) {
		
		if(mapEKK2811B010==null){
			return false;
		}
		
		String kkopSvcCd = (String)mapEKK2811B010.get(EKK2811B010CBSMsg1List.KKOP_SVC_CD);
		// ネット
		if(JKKStrConst.CD00130_01.equals(svcCd)){
			// ルータ機能が対象
			if( JKKStrConst.KKOP_SVC_CD_ROUTER.equals(kkopSvcCd) ){
				return true;
			}else{
				return false;
			}
			
		// 電話
		}else if( JKKStrConst.CD00130_02.equals(svcCd) ){
			// VA機能が対象
			if( JKKStrConst.KKOP_SVC_CD_TEL_ADAPT.equals(kkopSvcCd) ){
				return true;
			}else{
				return false;
			}
		}
		
		return false;
	}
// OM-2014-0000624対応 20140210 星野 ADD END

	// 20150630 OM-2015-0001228 DEL START
//	/**
//	 * 機器オプションサービス契約がサービス提供中か判定する
//	 * 
//	 * @param request			リクエストパラメータ
//	 * @param handle			セッションハンドル
//	 * @param paramMap			パラメータ
//	 * @param mapEKK0401B010	EKK0401B010照会結果
//	 * @return					true：サービス提供中	false：左記以外
//	 * @throws Throwable		例外時スロー
//	 */
//	private boolean isServiceTeikyochuKkOpSvcKei(IRequestParameterReadWrite request, SessionHandle handle, HashMap<String, Object> paramMap, HashMap<String, Object> mapEKK2811B010) throws Throwable {
//
//		// 機器オプションサービス契約一意照会
//		HashMap<String, Object> map = new HashMap<String, Object>();
//		map.put(EKK2811A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);
//		map.put(EKK2811A010CBSMsg.KEY_KKOP_SVC_KEI_NO, mapEKK2811B010.get(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_NO));
//		String dtm = (String)paramMap.get(EKK0961D010CBSMsg.USE_STP_STA_DTM);	// 利用不可期間の開始日にカレントとなるデータを検索
//		map.put(EKK2811A010CBSMsg.KEY_RSV_APLY_YMD, dtm.substring(0, 8));
//		
//		// EKK0401A010への呼び出しパラメータ設定
//		CAANMsg template = new CAANMsg(EKK2811A010CBSMsg.class.getName());
//		useFailMapper.mappingEKK2811A010SCInMsg(template, map);
//
//		// SIF実行
//		CAANMsg[] resultMsgs = callScCmn(request, handle, template);
//
//		// 結果を取得
//		HashMap<String, Object> resultMap = mappingCAANOutMsgOne(EKK2811A010CBSMsg.EKK2811A010CBSMSG1LIST, resultMsgs);
//		if(resultMap==null){
//			return false;
//		}
//
//		// 判定
//		String stat = (String)resultMap.get(EKK2811A010CBSMsg1List.KKOP_SVC_KEI_STAT);
//		// 20141126 OM-2014-0003601 Update Start
//		//if (STAT_SVCTK_CHU.equals(stat)) {
//		// ステータスチェック
//		if (useFailChgStatChk(stat)) {
//		// 20141126 OM-2014-0003601 Update End
//			return true;	// サービス提供中
//		}
//
//		return false;		// サービス提供中ではない
//	}
	// 20150630 OM-2015-0001228 DEL END
	
	
	/**
	 * 機器提供サービスに紐付く機器オプションサービス契約の利用不可期間を登録する
	 * 
	 * @param request			リクエストパラメータ
	 * @param handle			セッションハンドル
	 * @param paramMap			パラメータ
	 * @param mapEKK2811B010	機器オプションサービス契約の一意照会結果
	 * @return					ステータスコード
	 * @throws Throwable
	 */
	private int registerUseStopPrdKkOpSvcKei(IRequestParameterReadWrite request, SessionHandle handle,
			HashMap<String, Object> paramMap, HashMap<String, Object> mapEKK2811B010) throws Throwable
	{
		HashMap<String, Object> insertMap = new HashMap<String, Object>();
		insertMap.putAll(paramMap);
		insertMap.put(EKK0961D010CBSMsg.SVC_KEI_NO, null);
		insertMap.put(EKK0961D010CBSMsg.KKOP_SVC_KEI_NO, (String)mapEKK2811B010.get(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_NO));
				
		// ANK-4245-00-00 ADD START
		// 利用停止取扱コードにより利用不可期間登録スキーマへの登録内容を変える
		// ⇒KKW17802_利用不可期間更新画面でも当共通部品を使用しており、利用不可期間への登録内容も異なる為
		//   影響の出ない様に、画面から渡している利用停止取扱コードで制御
		String jdgAddcd = (String)paramMap.get(EKK0961D010CBSMsg.USE_STP_TORIATSU_CD); 
		if(null != jdgAddcd && !"".equals(jdgAddcd))
		{
			// 利用停止取扱コードが"11"(住所変更）の場合、
			// サービス開始日は登録する
			if (USE_STP_TORIATSU_CD_ADCHG.equals(jdgAddcd))
			{
				// 機器オプションサービス契約一覧照会よりサービス開始年月日を取得
				insertMap.put(EKK0961D010CBSMsg.SVC_STAYMD, (String)mapEKK2811B010.get(EKK2811B010CBSMsg1List.SVC_STAYMD));
			}
		}
		// ANK-4245-00-00 ADD END
		// EKK0961D010への呼び出しパラメータ設定
		HashMap<String , Object> eKK0961D010map = new HashMap<String , Object>();
		CAANMsg template = new CAANMsg(EKK0961D010CBSMsg.class.getName());
		useFailMapper.mappingEKK0961D010InMsg(template, insertMap);
				
		// SIF実行
		CAANMsg[] resultMsgs = callScCmn(request, handle, template);
		
		// ステータスコードの取得
		int statusCode = template.getInt(JCMConstants.STATUS_INT_KEY);
		if (statusCode != STAT_NORMAL) {
			eKK0961D010map.put(TEMPLATE_ID_EKK0961D010, useFailMapper.mappingCSCOutMsg(resultMsgs));
		}
		
		return statusCode;
	}
	
// ANK-1578-00-00 2013.12.06 KURATA ADD END

	// 20150630 OM-2015-0001228 DEL START
//	// 20141126 OM-2014-0003601 Add Start
//	/**
//	 * 利用不可期間変更可能ステータスチェック<br>
//	 * 
//	 * @param stat		ステータス
//	 * @throws Throwable		例外時スロー
//	 */
//	private boolean useFailChgStatChk(String stat) throws Throwable {
//		
//		// ステータスが、「100:サービス提供中」〜「910:解約済」の場合、true
//		// サービス提供中、休止中、中断中、停止中、解約済、強制解約
//		if (STAT_SVCTK_CHU.compareTo(stat) <= 0 && STAT_DSL_SUMI.compareTo(stat) >= 0) {
//			return true;
//		}
//		
//		return false;
//	}
//	// 20141126 OM-2014-0003601 Add End
	// 20150630 OM-2015-0001228 DEL END
	// ANK-4245-00-00 ADD START
	/**
	 * 利用不可期間スキーマに重複データが存在するかを確認する
	 * 
	 * @param adchgKJakNo			撤去元住所変更番号
	 * @param eKK0961B001HashList	利用不可期間登録の一意照会結果
	 * @return					false
	 */
	private boolean isUseStpStat(String adchgKJakNo,ArrayList<HashMap<String, Object>> eKK0961B001HashList)
	{
		// 利用不可期間登録一覧照会リストが存在しない場合
		if(0 ==eKK0961B001HashList.size() || eKK0961B001HashList == null)
		{
			return false;
		}
		// 存在する場合
		else
		{
			// リストの数分確認
			for (HashMap<String, Object> eKK0961B001map : eKK0961B001HashList ) 
			{
				// 利用不可期間登録スキーマに存在する撤去元住所変更番号を取得
				String tekkyoAddchgKojiAkNo = (String)eKK0961B001map.get(EKK0961B001CBSMsg1List.AD_CHG_TEKKYO_KJAK_NO);
				// 取得した利用不可期間登録スキーマの撤去元住所変更番号とパラメータの撤去工事の住所変更番号が
				// 一致した場合利用不可期間登録スキーマに登録済とし真とする
				// OM-2022-0001103 ADD START
				if(tekkyoAddchgKojiAkNo != null && !"".equals(tekkyoAddchgKojiAkNo))
				{
				// OM-2022-0001103 ADD END
					if(tekkyoAddchgKojiAkNo.equals(adchgKJakNo))
					{
						return true;
					}
					// OM-2022-0001103 ADD START
				}
				// OM-2022-0001103 ADD END
			}
		}
		return false;
	}
	// ANK-4245-00-00 ADD END
}
