/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JKKVlanIdInfoSetCC
*	ソースファイル名	：JKKVlanIdInfoSetCC.java
*	作成者				：富士通　
*	作成日				：2012年08月07日
*＜機能概要＞
*　ＶＬＡＮ−ＩＤ情報設定処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/08/07   富士通		新規作成
*	v6.00.00	2013/12/26   FJ)五十嵐  IT1-2013-0001749 多機能ルーターに対するＳＯＤが発行されない
*	v8.00.00	2014/03/04	 FJ)齋藤 	ANK-1705-00-00 VLAN-ID情報の表示対応
*	v8.01.00	2014/03/15	 FJ)齋藤	IT1-2014-0000091 同一回線のサービス契約番号が取得できない
*	v15.01.00	2015/07/17	 FJ)三浦	OM-2015-0000550 利用停止のＶＡに対するＳＯＤが発行されない。
*	v25.00.00   2016.04.13   FJ）阮     ANK-2768-00-00 対応
*	v25.01.00	2016/05/01   FJ) 阮	   【IT1-2016-0000057 】EG中のVA紐換え対応 2番号オーダ発行
*	v25.02.00	2016/06/13   FJ) 阮	   【IT2-2016-0000035 】対応
*	v25.03.00	2016/06/29   FJ) 阮	   【OM-2016-0001675 】対応
*	v29.00.00	2017/01/17   FJ)藤本   【ANK-2953-00-00】電話番号のポート割当方法改善
*	v37.00.00	2018/05/25   FJ)藤本   【ANK-3238-00-00】修理交換中の機器契約状態の改善対応
*	v41.00.00	2019/04/08   FJ)舘山   【OM-2019-0000392】対応
*	v71.00.00	2024/10/01   FJ)奥村   【#84990】VLAN-ID情報受信でOLSの変更SODに電話と紐づけされていない機器が設定された
*	v71.00.01	2024/10/25   FJ)奥村   【#84990(#85823)】VLAN-ID情報受信でOLSの変更SODに電話と紐づけされていない機器が設定された
*********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKHakkoSODConstCC;
//▼▼▼▼▼【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD START▼▼▼▼▼
import com.fujitsu.futurity.bp.custom.constant.JKKSvcConst;
//▲▲▲▲▲【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD END▲▲▲▲▲
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
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.SCCallException;
import com.fujitsu.futurity.bp.x21.sc.exception.SCException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.EKK0081B029CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191C060CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0251A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0251C030CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B021CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B021CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B025CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B025CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B504CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B504CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1041B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0081B030CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0081B030CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg1List;
//▼▼▼▼▼【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD START▼▼▼▼▼
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg1List;
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD START
//import eo.ejb.cbs.cbsmsg.EKK0081B029CBSMsg;
//import eo.ejb.cbs.cbsmsg.EKK0081B029CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0241B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0241B002CBSMsg1List;
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD END
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
//▲▲▲▲▲【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD END▲▲▲▲▲

@SuppressWarnings({"unchecked"})
public class JKKVlanIdInfoSetCC extends AbstractCommonComponent {

	//*********************************************
	//                ユーザ定義
	//*********************************************
	/** エラーメッセージ */
	private static final String ERR_MSG = "INVALID_RETURN_MESSAGE";
	
	//*********************************************
	//                サービスIF
	//*********************************************
	
	/** サービス契約回線内訳一意照会 */
	private static final String EKK0251A010 = "EKK0251A010";
	/** サービス契約回線内訳内容変更 */
	private static final String EKK0251C030 = "EKK0251C030";
	/** 機器提供サービス契約一覧照会（サービス契約番号） */
	private static final String EKK0341B002 = "EKK0341B002";
	// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 START
	/** サービス契約内訳＜eo光電話＞一覧照会（サービス契約番号） */
	private static final String EKK0191B001 = "EKK0191B001";
	// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 END
	/** オーダ設定一覧照会 */
	private static final String EKK1041B001 = "EKK1041B001";
// ▼▼▼ 2013/12/26 IT1-2013-0001749 多機能ルーターに対するＳＯＤが発行されない
	/** 機器提供サービス契約一覧照会（サービス契約回線内訳） */
	private static final String EKK0341B504 = "EKK0341B504";
// ▲▲▲ 2013/12/26 IT1-2013-0001749 多機能ルーターに対するＳＯＤが発行されない
//▼▼▼▼▼【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD START▼▼▼▼▼
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD START
//	/** 同一回線内訳サービス契約一覧照会 */
//	private static final String EKK0081B029 = "EKK0081B029";
	/** 回線対象サービス契約一覧照会 */
	private static final String EKK0241B002 = "EKK0241B002";
//IT1-2014-0000091  同一回線のサービス契約番号が取得できない MOD END
	/** サービス契約一意照会 */
	private static final String EKK0081A010 = "EKK0081A010";
	/** 進捗登録 */
	private static final String EKK1091D010 = "EKK1091D010";
//▲▲▲▲▲【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD END▲▲▲▲▲
// ANK-2768-00-00 ADD START
	/** 同一回線上サービス契約を取得するIF */
	private static final String EKK0081B029 = "EKK0081B029";
	/** 対象工事案件の一意照会結果を取得するIF */
	private static final String EKU0011A010 = "EKU0011A010";
	/** 工事案件とサービス契約の紐付結果を取得するIF */
	private static final String EKU0081B030 = "EKU0081B030";
	/** 不具合VAの型式番号を取得するIF */
	private static final String EZM0321A010 = "EZM0321A010";
	/** 機器履歴一覧照会を取得するIF */
	private static final String EKK0341B025 = "EKK0341B025";
	/** 機器提供サービス契約一意紹介を取得するIF */
	private static final String EKK0341A010 = "EKK0341A010";
	/** サービス契約内訳一意紹介を取得するIF */
	private static final String EKK0191A010 = "EKK0191A010";
	/** サービス契約内訳情報変更を行うIF */
	private static final String EKK0191C060 = "EKK0191C060";
	/** 機器オプション一覧照会を行うIF */
	private static final String EKK2811B010 = "EKK2811B010";
// ANK-2768-00-00 ADD END
// ▽▽▽ OM-2019-0000392 ADD START
	/** 機器提供サービス契約一覧照会（予約）*/
	private static final String EKK0341B021 = "EKK0341B021";
// △△△ OM-2019-0000392 ADD END
	//******************************************
	//             機能コード
	//******************************************
	/** 機能コード  1：チェック＆登録 */
	private static final String FUNC_CD_1 = "1";
	/** 機能コード：2：チェックのみ */
	private static final String FUNC_CD_2 = "2";
	// OM-2015-0000550 2015/07/17 ADD START
	/** 機能コード：9：利用停止も対象 */
	private static final String FUNC_CD_9 = "9";
	// OM-2015-0000550 2015/07/17 ADD END
	// IT2-2016-0000034 ADD START
	/** 機能コード：10：交換中機器の取得*/
	private static final String FUNC_CD_10 = "10";
	// IT2-2016-0000034 ADD END

	//******************************************
	//             ユーザ定義文字列
	//******************************************
	// IT1-2013-0000291 2013/02/26 MOD START
//	private static String fixText = null;
	private String fixText = null;
	// IT1-2013-0000291 2013/02/26 MOD END
	
	/** VLAN-ID確定フラグ 1:確定 */
	private static final String VLAN_ID_FIX_FLG_1 = "1";
	/** ＫＥＹ＿オーダ種別コード 2：電話 */
	private static final String KEY_ORDER_SBT_CD_2 = "2";
	/** ＫＥＹ＿サービスオーダコード 23：Radius */
	private static final String KEY_SVC_ORDER_CD_23 = "23";
	/** サービスコード 2：電話サービス */
	private static final String SVC_CD_02 = "02";
// ANK-2768-00-00 ADD START
	/** ｅｏ光ネットホームタイプ */
	private static final String HOME_NET = "02";
	/** ｅｏ光ネットメゾンタイプ */
	private static final String MEZON_NET = "03";
	/** ｅｏ光ネットマンションタイプ */
	private static final String MANTION_NET = "04";
	/** サービス契約ステータス：解約済 */
	private static final String SVC_KEI_STAT_DSL = "910";
	/** サービス契約ステータス：キャンセル */
	private static final String SVC_KEI_STAT_CANCLE = "920";
// ANK-2768-00-00 ADD END
//▼▼▼▼▼【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD START▼▼▼▼▼
	/** 異動理由コード 56：その他 */
	private static final String IDO_RSN_CD_OTHER = "56";
	/** 進捗ステータス 9702：VLAN-ID設定完了 */
	private static final String PRG_STAT_VLANID = "9702";
	/** サービスコード（ネット） */
	private static final String SVC_CD_01 = "01"; 
//▲▲▲▲▲【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD END▲▲▲▲▲
// ANK-2768-00-00 ADD START
	/** 業務パラメータ（不具合VA型式） */
	private static final String KK_BUG_VA_MODEL_01 = "KK_BUG_VA_MODEL_01"; 
// ANK-2768-00-00 ADD END
	
	/**
	 * VLAN-ID情報設定
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite excuteVlanIdInfoSet(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
			throws Throwable
	{
		
		fixText = fixedText;
		ArrayList<HashMap<String, Object>> userDataList = (ArrayList<HashMap<String, Object>>)param.getData(fixText);
		
		// リスト数分ループ
		for (int i=0; i < userDataList.size(); i++)
		{
			HashMap<String, Object> vlanData = (HashMap<String, Object>)userDataList.get(i);
			// 【引継ぎ項目】
			// ・サービス契約番号
			// ・SYSID
			// ・サービス契約回線内訳番号
			// ・依頼フラグ
			// ・電話BASホストID
			// ・電話VLAN-ID
			// ・VLAN-ID取込年月日
			// ・サービスコード
// ANK-2768-00-00 ADD START
			//
			// ・依頼時工事案件番号
			// 
// ANK-2768-00-00 ADD END

			// 登録処理
			HashMap<String, Object> vlanInfoData = this.executeResist(handle, param, vlanData);
			if (vlanInfoData == null || vlanInfoData.isEmpty())
			{
				continue;
			}
// ANK-2768-00-00 ADD START
			// 不具合ＶＡ交換処理
			// 従来SOD発行機能の実施要否判定FLG
			boolean SodHakkoSkipFlg = false;
			HashMap<String, Object> bugVaChangreq = this.executeBugVaChangReq(handle, param, vlanData);
			// 不具合VA交換が発生した場合、リターン値が空白にならない
			if (bugVaChangreq != null && bugVaChangreq.size() > 0)
			{
				SodHakkoSkipFlg = true;
			}

			if(!SodHakkoSkipFlg)
			{
// ANK-2768-00-00 ADD END
			// SOD発行対象チェック処理
			// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 START
			HashMap<String, Object> vaInfo = new HashMap<String, Object>();
//			if (!this.executeSodCheck(handle, param, vlanData, vlanInfoData))
			if (!this.executeSodCheck(handle, param, vlanData, vaInfo))
			// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 END
			{
// ▽▽▽ OM-2019-0000392 ADD START
				JSYejbLog.println(JSYejbLog.EXECUTION, this.getClass(), "VLAN SOD未発行キー(サービス契約番号)：" + vlanData.get("svc_kei_no"));
// △△△ OM-2019-0000392 ADD END
				continue;
			}
			
			// SOD発行処理
			// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 START
//			callHakkoSodCC(param, handle, vlanData);
			callHakkoSodCC(param, handle, vlanData, vaInfo);
			// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 END
// ANK-2768-00-00 ADD START
			}
// ANK-2768-00-00 ADD END

		}
		
		// 処理終了
		return param;
	}
	
	/**
	 * 登録処理
	 * @param userData
	 * @throws Throwable 
	 */
	private HashMap<String, Object> executeResist(SessionHandle handle, 
			IRequestParameterReadWrite param, HashMap<String, Object> userData) throws Throwable
	{
		HashMap<String, Object> resultHash = new HashMap<String, Object>();
		HashMap<String, Object> work = new HashMap<String, Object>();
		HashMap<String, Object> EKK0251A010CBSMSG1 = new HashMap<String, Object>();
		
		// 引数の設定
		work.put("svc_kei_kaisen_ucwk_no", (String)userData.get("svc_kei_kaisen_ucwk_no"));
		
		// 照会用のSIF:サービス契約回線内訳一意照会(EKK0251A010)の呼び出し
		int resCdNo = callEKK0251A010SC(param,  handle, work, resultHash, userData);
		
		// 取得結果の確認
		if (resCdNo != 0) 
		{
			return null;
		}
		
		CAANMsg[] EKK0251A010CBSMSG1list = (CAANMsg[])resultHash.get(EKK0251A010CBSMsg.EKK0251A010CBSMSG1LIST);
		// 取得結果内容の存在確認
		if (null == EKK0251A010CBSMSG1list || 0 == EKK0251A010CBSMSG1list.length)
		{
			return null;
		}
		else
		{
			EKK0251A010CBSMSG1 = EKK0251A010CBSMSG1list[0].getMsgData();
		}
		//▼▼▼▼▼【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD START▼▼▼▼▼
		// 進捗登録
		addPrg(param, handle, work, userData);
		//▲▲▲▲▲【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD END▲▲▲▲▲
		// 登録用のSIF:サービス契約回線内訳内容変更(EKK0251C030)の呼び出し
		resCdNo = callEKK0251C030SC(param, handle, EKK0251A010CBSMSG1, resultHash, userData);
		
		// 取得結果の確認
		if (resCdNo != 0) 
		{
			return null;
		}
		else
		{
			return resultHash;
		}
	}
	//▼▼▼▼▼【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD START▼▼▼▼▼
	/**
	 * 進捗登録
	 * 
	 * @param param
	 * @param handle
	 * @param paramHash
	 * @return
	 * @throws RequestParameterException
	 * @throws SCException
	 */
	private int addPrg(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> work, HashMap<String, Object> userData)
			throws Throwable
	{
		int statusCode = 0;
		// ファイルから連携されたサービス契約番号
		work.put("user_svc_kei_no", (String)userData.get("svc_kei_no"));
		// ファイルから連携され電話VLAN-ID
		work.put("tel_vlan_id", (String)userData.get("tel_vlan_id"));
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD START
		//予約適用年月日を運用日に設定
		work.put("rsvAplyYmd",JCCBPCommon.getOpeDate(null));
//		// 同一回線内訳サービス契約一覧照会結果
//		HashMap<String, Object> resultHashSvcKeiList = new HashMap<String, Object>();
//		// 登録対象となるサービス契約を取得する
//		// 同一回線内訳サービス契約一覧照会
//		this.callEKK0081B029SC(param, handle, work, resultHashSvcKeiList, userData);
//		HashMap<String, Object> eKK0081B029Hash = new HashMap<String, Object>();
//		CAANMsg[] eKK0081B029CBSMsg1List = (CAANMsg[])resultHashSvcKeiList.get(EKK0081B029CBSMsg.EKK0081B029CBSMSG1LIST);
//		
//		//同一回線内訳サービス契約一覧リストが1以上の場合
//		if (eKK0081B029CBSMsg1List != null && eKK0081B029CBSMsg1List.length > 0)
//		{
//			// 同一回線内訳サービス契約のリスト数分繰り返し処理
//			for (int i = 0; i < eKK0081B029CBSMsg1List.length; i++) 
//				{
//				HashMap<String, Object> eKK0081B029CBSMsg1 = eKK0081B029CBSMsg1List[i].getMsgData();
//				// サービス契約一意照会用のサービス契約番号を入れる
//				String eKK0081B029_svc_kei_no = (String)eKK0081B029CBSMsg1.get(EKK0081B029CBSMsg1List.SVC_KEI_NO);
//				work.put("eKK0081B029_svc_kei_no", eKK0081B029_svc_kei_no);
		// 回線対象サービス契約一覧照会照会結果
		HashMap<String, Object> resultHashSvcKeiList = new HashMap<String, Object>();
		// 登録対象となるサービス契約を取得する
		// 回線対象サービス契約一覧照会照会
		this.callEKK0241B002SC(param, handle, work, resultHashSvcKeiList, userData);
		HashMap<String, Object> eKK0241B002Hash = new HashMap<String, Object>();
		CAANMsg[] eKK0241B002CBSMsg1List = (CAANMsg[])resultHashSvcKeiList.get(EKK0241B002CBSMsg.EKK0241B002CBSMSG1LIST);
		
		//回線対象サービス契約一覧照会リストが1以上の場合
		if (eKK0241B002CBSMsg1List != null && eKK0241B002CBSMsg1List.length > 0)
		{
			// 回線対象サービス契約一覧照会のリスト数分繰り返し処理
			for (int i = 0; i < eKK0241B002CBSMsg1List.length; i++) 
				{
				HashMap<String, Object> eKK0241B002CBSMsg1 = eKK0241B002CBSMsg1List[i].getMsgData();
				// サービス契約一意照会用のサービス契約番号を入れる
				work.put("eKK0241B002_svc_kei_no", (String)eKK0241B002CBSMsg1.get(EKK0241B002CBSMsg1List.SVC_KEI_NO));
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD END
				// サービス契約一意照会サービスIF呼出処理を実施
				HashMap<String, Object> ekk0081a010Hash = new HashMap<String, Object>();
				callEKK0081A010SC(param, handle, work, ekk0081a010Hash,userData);
				// サービス契約情報を取得
				CAANMsg[] ekk0081a010List = (CAANMsg[])ekk0081a010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
				// サービス契約情報からサービスコードを取得
				String svc_cd = ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_CD);			
				// サービスコードがネット または 電話 の場合進捗登録処理				
					if(SVC_CD_01.equals(svc_cd) || SVC_CD_02.equals(svc_cd))
						{
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD START
//						// 進捗登録用申込み明細番号
//						// サービス契約情報から申込み明細番号を取得
//						String prg_mskm_dtl_no = ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.MSKM_DTL_NO);
//						work.put("prg_mskm_dtl_no",prg_mskm_dtl_no);	
						// 進捗登録用サービス契約番号
						work.put("prg_svc_kei_no",ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_NO));
						// 進捗登録用申込み明細番号
						work.put("prg_mskm_dtl_no",ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.MSKM_DTL_NO));
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD END	
						//進捗登録SIF呼び出し
						HashMap<String, Object> eKK1091D010Hash = new HashMap<String, Object>();
						callEKK1091D010SC(param,handle,eKK1091D010Hash, work,userData);
					}
				//それ以外の場合はループ処理を続行
					else
					{
						continue;
					}
				

			}
			
		}
		
	
		return statusCode;
	}
	
// ANK-2768-00-00 ADD START
	/**
	 * 不具合VA交換処理
	 * @param userData
	 * @throws Throwable 
	 */
	private HashMap<String, Object> executeBugVaChangReq(SessionHandle handle, 
			IRequestParameterReadWrite param, HashMap<String, Object> userData) throws Throwable
	{
		HashMap<String, Object> resultHash = new HashMap<String, Object>();
		HashMap<String, Object> work = new HashMap<String, Object>();

		//サービス契約番号の取得
		//依頼時工事案件番号の取得
		
		String svcKeiNo = (String)userData.get("svc_kei_no");
		String rsvAplyYmd = JCCBPCommon.getOpeDate(null);
		
		work.put("eKK0241B002_svc_kei_no", svcKeiNo);
		work.put("rsvAplyYmd",rsvAplyYmd);
		
		// サービス契約一意照会
		HashMap<String, Object> ekk0081a010Hash = new HashMap<String, Object>();
		callEKK0081A010SC(param, handle, work, ekk0081a010Hash,userData);
		// サービス契約情報を取得
		CAANMsg[] ekk0081a010List = (CAANMsg[])ekk0081a010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		// 対象サービス契約情報の保持領域
		CAANMsg[] tgSvcKeiInfoMap =null;
		
		// サービス契約情報からサービスコードを取得
		String svc_cd = ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_CD);
		// サービス契約情報からサービス契約ステータスを取得
		String svc_kei_stat = ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
		
		// サービスコードが電話でない場合
		if(!SVC_CD_02.equals(svc_cd))
		{
			// EKK0081B029_同一回線内訳サービス契約一覧照会を実施
			HashMap<String, Object> EKK0081B029Hash = new HashMap<String, Object>();
			// 同一回線上に電話サービスの有無を確認しその契約情報を取得する
			callEKK0081B029SC(param, handle, svcKeiNo, EKK0081B029Hash ,userData); // 履歴一覧を取得
			// 同一回線内訳サービス契約一覧照会結果を取り出す
			CAANMsg[] eKK0081B029List = (CAANMsg[])EKK0081B029Hash.get(EKK0081B029CBSMsg.EKK0081B029CBSMSG1LIST);
			
			// 同一回線内訳サービス契約一覧照会にデータある場合
			if (eKK0081B029List != null && !"".equals(eKK0081B029List) && eKK0081B029List.length > 0) {
				for (int i = 0; i < eKK0081B029List.length ; i ++) {
					CAANMsg eKK0081B029Msg = eKK0081B029List[i];
					String tgSvcKeiNo = eKK0081B029Msg.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO);
					work.clear();
					work.put("eKK0241B002_svc_kei_no", tgSvcKeiNo);
					work.put("rsvAplyYmd",rsvAplyYmd);
					// サービス契約一意照会
					HashMap<String, Object> telFkk0081a010Hash = new HashMap<String, Object>();
					callEKK0081A010SC(param, handle, work, telFkk0081a010Hash,userData);
					// サービス契約情報を取得
					CAANMsg[] telEkk0081a010List = (CAANMsg[])telFkk0081a010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
					// サービスコードが電話の場合
					if (SVC_CD_02.equals((String)telEkk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_CD)))
					{
						// 解約・キャンセル済以外
						if (!SVC_KEI_STAT_DSL.equals((String)telEkk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT)) 
								&& !SVC_KEI_STAT_CANCLE.equals((String)telEkk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT)))
						{
							tgSvcKeiInfoMap = telEkk0081a010List;
							break;
						}
					}
				}
			}
		}
		else
		{
			if (SVC_KEI_STAT_DSL.equals(svc_kei_stat) || SVC_KEI_STAT_CANCLE.equals(svc_kei_stat))
			{
				//回線情報の電話サービスが解約済の場合はVA交換はありえないので「NULL」をリターンする
				return null;
			}
			else
			{
				tgSvcKeiInfoMap = ekk0081a010List;
			}
		}
		
		// 対象の電話サービスが存在する場合のみ後続処理を実施する
// OM-2016-0001675 MOD START
//		if (tgSvcKeiInfoMap == null && tgSvcKeiInfoMap.length <= 0)
		if (tgSvcKeiInfoMap == null || tgSvcKeiInfoMap.length <= 0)
// OM-2016-0001675 MOD END
		{
			// 対象VLAN設定する回線上に有効な電話サービスが存在しない場合は不具合VA紐換えは発生し得ないためNULLでリターンする
			return null;
		}
		
		// 依頼工事案件番号が空白の場合は後続確認不要のためNULLでリターンする
		if ("".equals((String)userData.get("tel_vlan_req_ji_kjak_no"))){
			return null;
		}
		
		// 後続処理に必要な対象電話サービス契約番号を冒頭で変数に代入する
		String telTgSvcKeiNo = tgSvcKeiInfoMap[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_NO);
		// 依頼時工事案件番号
		String kojiakNo = (String)userData.get("tel_vlan_req_ji_kjak_no");
		// 工事案件の一意照会を実施し、工事の状況と工事の種類にて後続要否を判定
		// EKU0011A010_工事案件一意照会を実施する
		HashMap<String, Object> EKU0011A010Hash = new HashMap<String, Object>();
		// 工事案件の情報を取得する
		callEKU0011A010SC(param, handle, kojiakNo, EKU0011A010Hash ,userData); 
		// 工事案件一意照会結果を取り出す
		CAANMsg[] eKU0011A010List = (CAANMsg[])EKU0011A010Hash.get(EKU0011A010CBSMsg.EKU0011A010CBSMSG1LIST);
		
		
// 不具合VA交換後機器情報を保持するマップの宣言
		HashMap<String, Object> bugVaChangAftInfMap = new HashMap<String, Object>();
		
		// 異動区分が『E-PON→GE-PON設備切替』で工事種別が「001：新設または003：住変新設」の場合のみ後続
		if("00067".equals((String)eKU0011A010List[0].getString(EKU0011A010CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV))
				&& ("001".equals((String)eKU0011A010List[0].getString(EKU0011A010CBSMsg1List.KOJIAK_SBT_CD))
						|| "003".equals((String)eKU0011A010List[0].getString(EKU0011A010CBSMsg1List.KOJIAK_SBT_CD))
						))
		{
			//工事案件ステータスが有効かどうかを判定する
			if ("140".equals((String)eKU0011A010List[0].getString(EKU0011A010CBSMsg1List.KOJIAK_STAT))
					|| "150".equals((String)eKU0011A010List[0].getString(EKU0011A010CBSMsg1List.KOJIAK_STAT))
					|| "160".equals((String)eKU0011A010List[0].getString(EKU0011A010CBSMsg1List.KOJIAK_STAT))
					|| "170".equals((String)eKU0011A010List[0].getString(EKU0011A010CBSMsg1List.KOJIAK_STAT))
					|| "180".equals((String)eKU0011A010List[0].getString(EKU0011A010CBSMsg1List.KOJIAK_STAT))
					|| "190".equals((String)eKU0011A010List[0].getString(EKU0011A010CBSMsg1List.KOJIAK_STAT))
					)
			{
				// 有効な工事のため、後続処理を実施する
				// 工事とサービスの紐付けを確認するために、サービス契約_工事案件の一意照会を実施する
				// EKU0081B030_サービス契約_工事案件一覧照会(工事中取得)
				// 工事案件の一意照会を実施し、工事の状況と工事の種類にて後続要否を判定
				// EKU0081B030_工事案件一意照会を実施する
				work.clear();
				// 電話サービス契約を入力パラメータにセットする
				work.put("key_svc_kei_no", telTgSvcKeiNo);
				// 対象回線の回線対象サービス契約番号の設定
				work.put("svc_kei_kaisen_ucwk_no", (String)userData.get("svc_kei_kaisen_ucwk_no"));
				
				HashMap<String, Object> EKU0081B030Hash = new HashMap<String, Object>();
				// サービス契約_工事案件一覧照会(工事中取得)を取得する
				callEKU0081B030SC(param, handle, work, EKU0081B030Hash ,userData); 
				// サービス契約_工事案件一覧照会(工事中取得)結果を取り出す
				CAANMsg[] eKU0081B030List = (CAANMsg[])EKU0081B030Hash.get(EKU0081B030CBSMsg.EKU0081B030CBSMSG1LIST);
				if (eKU0081B030List != null && eKU0081B030List.length > 0) {
					// 電話サービスと依頼中工事の紐付きを確認し、有効かどうかを判断するフラグ
					boolean telSvcKojiFlg = false;
					for (int i = 0; i < eKU0081B030List.length ; i ++) {
						
						CAANMsg eKU0081B030Msg = eKU0081B030List[i];
						String getKojiakno =(String)eKU0081B030Msg.getString(EKU0081B030CBSMsg1List.KOJIAK_NO);
						if(kojiakNo.equals(getKojiakno))
						{
							// 依頼工事は対象電話サービスと紐付きあると判定し後続します
							telSvcKojiFlg = true;
							break;
						}
					}
					// 工事中の工事案件が電話サービスに紐付かないため、NULLでリターンする
					if (!telSvcKojiFlg)
					{
						return null;
					}
				}
				else
				{
					//　工事中の工事案件情報ないため、NULLでリターンする
					return null;
				}
				
				// EKK0191B001_サービス契約内訳＜eo光電話＞一覧照会（サービス契約番号）←電話のサービス契約番号を入力値とする
				// 機能コード「８」サービス契約に紐付くサービス契約内訳＜電話＞のカレント情報の取得、ソート順は「電話番号順」の昇順とする
				// 工事案件の一意照会を実施し、工事の状況と工事の種類にて後続要否を判定
				//EKK0191B001_サービス契約内訳＜eo光電話＞一覧照会（サービス契約番号）を実施する
				HashMap<String, Object> EKK0191B001Hash = new HashMap<String, Object>();
				// EKK0191B001_サービス契約内訳＜eo光電話＞一覧照会（サービス契約番号）を取得する
				work.clear();
				// 電話サービス契約を入力パラメータにセットする
				work.put("svc_kei_no", telTgSvcKeiNo);
				work.put("set_func_cd", JPCModelConstant.FUNC_CD_4);
				callEKK0191B001SC(param, handle, work, EKK0191B001Hash, userData);
				// EKK0191B001_サービス契約内訳＜eo光電話＞一覧照会（サービス契約番号）を取り出す
				CAANMsg[] eKK0191B001List = (CAANMsg[])EKK0191B001Hash.get(EKK0191B001CBSMsg.EKK0191B001CBSMSG1LIST);
				
				// 有効な内訳を割り出し
				// 利用中のサービス契約内訳
				HashMap<String, Object> useSvcKeiUcwk = null;
				if (null != eKK0191B001List)
				{
					String maxSvcKeiUcwkStat = "000";
					for (int i = 0; i < eKK0191B001List.length; i++)
					{
						HashMap<String, Object> eKK0191B001CBSMSG1 = eKK0191B001List[i].getMsgData();
						String svcKeiUcwkStat = (String)eKK0191B001CBSMSG1.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_STAT);
						// 解約済・キャンセル済でなく、サービス契約内訳ステータスが最も大きいものを利用中の内訳とする
						if (!JKKStrConst.CD00037_DSL_ZM.equals(svcKeiUcwkStat) && !JKKStrConst.CD00037_CANCEL_ZM.equals(svcKeiUcwkStat)
							&& maxSvcKeiUcwkStat.compareTo(svcKeiUcwkStat) < 0)
						{
							useSvcKeiUcwk = eKK0191B001CBSMSG1;
							maxSvcKeiUcwkStat = svcKeiUcwkStat;
						}
					}
				}
				
				// 有効な内訳が存在する場合
				if (useSvcKeiUcwk != null && useSvcKeiUcwk.size() > 0)
				{
					// 内訳に紐付く機器変更番号を取得する
					String vaKikiChgNo = (String)useSvcKeiUcwk.get(EKK0191B001CBSMsg1List.VA_KIKI_CHG_NO);
					
					// EKK0341B002_機器提供サービス契約一覧照会（サービス契約番号）
					HashMap<String, Object> EKK0341B002Hash = new HashMap<String, Object>();
					work.clear();
					// 引数の設定
					work.put("svc_kei_no", telTgSvcKeiNo);
					
					// 機器提供サービス契約一覧照会（サービス契約番号）(EKK0341B002)呼び出し
					callEKK0341B002SC(
							param, 
							handle, 
							work, 
							EKK0341B002Hash,
							userData);
					
					CAANMsg[] EKK0341B002CBSMSG1list = (CAANMsg[])EKK0341B002Hash.get(EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST);
					
					HashMap<String, Object> tgVAkikiInfMap = null;
					if (EKK0341B002CBSMSG1list != null && EKK0341B002CBSMSG1list.length > 0)
					{
						for (int i = 0 ;i < EKK0341B002CBSMSG1list.length ;i++)
						{
							// 機器提供サービスコード
							String kktkSvcCd = (String)EKK0341B002CBSMSG1list[i].getMsgData().get(EKK0341B002CBSMsg1List.KKTK_SVC_CD);
							// 機器変更番号
							String kikiChgNo = (String)EKK0341B002CBSMSG1list[i].getMsgData().get(EKK0341B002CBSMsg1List.KIKI_CHG_NO);
							
							// VA機器であり、機器変更番号が電話紐付きVA機器変更番号と一致している場合
							if ("C004".equals(kktkSvcCd) && vaKikiChgNo.equals(kikiChgNo))
							{
								tgVAkikiInfMap =  (HashMap<String, Object>)EKK0341B002CBSMSG1list[i].getMsgData();
								break;
							}
						}
					}
					// 不具合VA候補が存在する場合
					if (tgVAkikiInfMap != null && tgVAkikiInfMap.size() > 0)
					{
						// 業務パラメータより、不具合機器の型式を取得し、カンマ区切りで細分
						// EKU0011A010_工事案件一意照会を実施する
						HashMap<String, Object> EZM0321A010Hash = new HashMap<String, Object>();
						// 業務パラメータより、不具合機器の型式を取得する
						callEZM0321A010SC(param, handle, KK_BUG_VA_MODEL_01, EZM0321A010Hash ,userData); 
						// 業務パラメータより、不具合機器の型式取得結果を取り出す
						CAANMsg[] eZM0321A010List = (CAANMsg[])EZM0321A010Hash.get(EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST);
						// 業務パラメータ設定値から不具合機器の型式一覧を取得する
						String[] splitWorkparamSetteValue = ((String)eZM0321A010List[0].getMsgData().get(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE)).split(",", 0);
						// 宅内機器型式コード
						String taknaiKikiModelCd = (String)tgVAkikiInfMap.get(EKK0341B002CBSMsg1List.TAKNKIKI_MODEL_CD);
						HashMap<String, Object> bugVAkikiInfMap = null;
						for (int i = 0; i < splitWorkparamSetteValue.length ;i ++) {
							// 不具合VA型式と一致する機器あれば、特定済
							if (taknaiKikiModelCd.equals((String)splitWorkparamSetteValue[i]))
							{
								// 不具合機器の型式が一致した場合、不具合VA機器存在すると判定し、不具合VA機器情報マップに格納
								bugVAkikiInfMap = tgVAkikiInfMap;
								break;
							}
						}
						
						//多機能VA情報の補完を行う
						HashMap<String, Object> rtKkopSvckeiInfMap = new HashMap<String, Object>();
						HashMap<String, Object> vaKkopSvckeiInfMap = new HashMap<String, Object>();
						// 不具合VA機器情報マップが空リストでなければ、不具合交換発生特定済と判断
						if (bugVAkikiInfMap != null && bugVAkikiInfMap.size() > 0)
						{
							// 後続処理はその不具合VA機器の交換パターンを特定する
// 不具合VA交換後機器情報を保持　開始
							// ■■■■■ VAからVAへ交換するパターンの機器情報取得 ■■■■■
							// EKK0341B025_機器提供サービス契約履歴一覧照会
							HashMap<String, Object> EKK0341B025Hash = new HashMap<String, Object>();
							// _機器提供サービス契約履歴一覧照会を取得する
							callEKK0341B025SC(param, handle, telTgSvcKeiNo, EKK0341B025Hash ,userData); 
							// _機器提供サービス契約履歴一覧照会結果を取り出す
							CAANMsg[] eEKK0341B025List = (CAANMsg[])EKK0341B025Hash.get(EKK0341B025CBSMsg.EKK0341B025CBSMSG1LIST);
							
							// 契約及び回線機器の履歴含全レコードを抽出
							if (eEKK0341B025List != null && eEKK0341B025List.length > 0)
							{
								// 履歴の逆算ループを行う(VA機器特定)
								for (int i = eEKK0341B025List.length-1; i >= 0; i--)
								{
									String kktkSvcKeiNo = (String)eEKK0341B025List[i].getMsgData().get(EKK0341B025CBSMsg1List.KKTK_SVC_KEI_NO);
									String kktkSvcKeiStat = (String)eEKK0341B025List[i].getMsgData().get(EKK0341B025CBSMsg1List.KKTK_SVC_KEI_STAT);
									String geneAddDtm = (String)eEKK0341B025List[i].getMsgData().get(EKK0341B025CBSMsg1List.GENE_ADD_DTM);
									
									// 機器提供サービス契約番号が交換VA機器の契約番号と一致する場合、ステータスを確認し「交換中」であれば対象として扱う
									if (bugVAkikiInfMap.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO).equals(kktkSvcKeiNo)
											&& JKKStrConst.CD00056_STAT_KEI_CHG_CHU.equals(kktkSvcKeiStat))
									{
										// 機器提供サービス契約一意紹介を行う（VA交換中機器・世代年月日時分秒）
										// EKK0341A010_機器提供サービス契約一意紹介
										HashMap<String, Object> EKK0341A010Hash = new HashMap<String, Object>();
										// _機器提供サービス契約一意紹介を取得する
										callEKK0341A010SC(param, handle, kktkSvcKeiNo, geneAddDtm, "", EKK0341A010Hash ,userData); 
										// _機器提供サービス契約一意紹介を取り出す
										CAANMsg[] eKK0341A010List = (CAANMsg[])EKK0341A010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
										
										// 予約中の状態かつ異動区分が「00067:EG切替」の場合のみ実施する
										if ("1".equals((String)eKK0341A010List[0].getMsgData().get(EKK0341A010CBSMsg1List.RSV_APLY_CD))
												&& "00067".equals((String)eKK0341A010List[0].getMsgData().get(EKK0341A010CBSMsg1List.IDO_DIV)))
										{
											// 不具合VA交換後機器情報領域
											bugVaChangAftInfMap = eKK0341A010List[0].getMsgData();
										}
										break;
									}
								}
								
								if (bugVaChangAftInfMap == null || bugVaChangAftInfMap.size() <= 0) {
									// VAから多機能へ交換するパターンの機器情報取得
									// 履歴の純増ループを行う(多機能RTの特定)
									for (int i = 0; i < eEKK0341B025List.length; i++)
									{
										// 機器提供サービスコードを取得
										String kktkSvcCd = (String)eEKK0341B025List[i].getMsgData().get(EKK0341B025CBSMsg1List.KKTK_SVC_CD);
										String idoDiv =(String)eEKK0341B025List[i].getMsgData().get(EKK0341B025CBSMsg1List.IDO_DIV);
										String kktkSvcKeiNo = (String)eEKK0341B025List[i].getMsgData().get(EKK0341B025CBSMsg1List.KKTK_SVC_KEI_NO);
										
										// 機器提供サービスコード「C024：多機能RT」かつ異動区分が「EG切替」であること
										if ("C024".equals(kktkSvcCd) && "00067".equals(idoDiv))
										{
											// 機器提供サービス契約一意紹介を行う（多機能現状・カレント検索）
											// EKK0341A010_機器提供サービス契約一意紹介
											HashMap<String, Object> EKK0341A010Hash = new HashMap<String, Object>();
											// _機器提供サービス契約一意紹介を取得する(カレント)
											callEKK0341A010SC(param, handle, kktkSvcKeiNo, "", rsvAplyYmd, EKK0341A010Hash ,userData); 
											// _機器提供サービス契約一意紹介を取り出す
											CAANMsg[] eKK0341A010List = (CAANMsg[])EKK0341A010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
											
											if (eKK0341A010List != null && eKK0341A010List.length > 0)
											{
												if (!JKKStrConst.CD00037_DSL_ZM.equals((String)eKK0341A010List[0].getMsgData().get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT)) 
														&& !JKKStrConst.CD00037_CANCEL_ZM.equals((String)eKK0341A010List[0].getMsgData().get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT))) 
												{
													// 機器オプションの整合性を確認
													// 機器オプションサービス契約一覧照会を実施し、VA機能とルータ機能が共に有効であることを確認
													// EKK2811B010_機器オプションサービス契約一覧紹介
													HashMap<String, Object> EKK2811B010Hash = new HashMap<String, Object>();
													// _機器オプションサービス契約一覧紹介を取得する(カレント)
													callEKK2811B010SC(param, handle, kktkSvcKeiNo, "", rsvAplyYmd, EKK2811B010Hash ,userData); 
													// _機器オプションサービス契約一覧紹介を取り出す
													CAANMsg[] eKK2811B010List = (CAANMsg[])EKK2811B010Hash.get(EKK2811B010CBSMsg.EKK2811B010CBSMSG1LIST);
													int vacount = 0,rtcount = 0;
													
													for (int a = 0; a < eKK2811B010List.length; a++) {
														HashMap<String, Object> kkopMap = (HashMap<String, Object>)eKK2811B010List[a].getMsgData();
														// ルータ機能が有効な場合COUNT++
														if ("G01".equals((String)kkopMap.get("kkop_svc_cd")) && !JKKStrConst.CD00037_CANCEL_ZM.equals((String)kkopMap.get("kkop_svc_kei_stat")) && !JKKStrConst.CD00037_DSL_ZM.equals((String)kkopMap.get("kkop_svc_kei_stat")))
														{
															// RT機器オプションが有効なデータの補完
															rtKkopSvckeiInfMap = kkopMap;
														}
														if ("G02".equals((String)kkopMap.get("kkop_svc_cd")) && !JKKStrConst.CD00037_CANCEL_ZM.equals((String)kkopMap.get("kkop_svc_kei_stat")) && !JKKStrConst.CD00037_DSL_ZM.equals((String)kkopMap.get("kkop_svc_kei_stat")))
														{
															// VA機器オプションが有効なデータの補完
															vaKkopSvckeiInfMap = kkopMap;
														}
													}
													// VA機能が有効なものが１件以上の場合、紐換えとSODは必要
													// RTが途中で解約される場合でも紐換えSODは行う
													if (vaKkopSvckeiInfMap != null && vaKkopSvckeiInfMap.size() > 0)
													{
														// 不具合VA交換後機器情報領域
														bugVaChangAftInfMap = eKK0341A010List[0].getMsgData();
														break;
													}
												}
											}
										}
									}
									
								}
							}
// 不具合VA交換後機器情報を保持　終了
						}
						else
						{
							// 不具合VA機器が特定できない場合はNULLで返却する
							return null;
						}
					}
					// 不具合VAが存在する場合は紐換えを実施する
					if (bugVaChangAftInfMap != null && bugVaChangAftInfMap.size() > 0)
					{
						
						// 紐換えを実施する
						// 有効な内訳情報を取り出す
// IT1-2016-0000057	MOD START
//						work.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM, new String());		
						HashMap<String, Object> workUwInfo = new HashMap<String, Object>();
// IT1-2016-0000057	MOD END					
						for (int i = 0; i < eKK0191B001List.length; i ++)
						{
							HashMap<String, Object> eKK0191B001CBSMSG1 = eKK0191B001List[i].getMsgData();
							String svcKeiUcwkStat = (String)eKK0191B001CBSMSG1.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_STAT);
							// 解約済・キャンセル済ではないものを取り出す／EKK0191B001にて手続き中の内訳は排除している（機能コード６）
							if (!JKKStrConst.CD00037_DSL_ZM.equals(svcKeiUcwkStat) && !JKKStrConst.CD00037_CANCEL_ZM.equals(svcKeiUcwkStat))
							{
								// サービス契約内訳の一意照会を実施する
								
								// EKK0191A010_サービス契約内訳＜eo光電話＞一意照会を実施する
								HashMap<String, Object> EKK0191A010Hash = new HashMap<String, Object>();
								// EKK0191A010_サービス契約内訳＜eo光電話＞一意照会を取得する
								work.clear();
								// 電話サービス契約を入力パラメータにセットする
								work.put("svc_kei_ucwk_no", (String)eKK0191B001CBSMSG1.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_NO));
								callEKK0191A010SC(param, handle, work, EKK0191A010Hash, userData);
								// EKK0191A010_サービス契約内訳＜eo光電話＞一意照会を取り出す
								CAANMsg[] eKK0191A010List = (CAANMsg[])EKK0191A010Hash.get(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST);
								
								// EKK0191C060_INパラメータの編集／共通部
								work.clear();
								// 基本部は一意照会の結果を転記する
								work = eKK0191A010List[0].getMsgData();
								                       ;
								// EKK0191C060_INパラメータの編集／固有部
								// 申込明細番号 mskm_dtl_no 交換後機器より転記
								work.put("mskm_dtl_no", (String)bugVaChangAftInfMap.get(EKK0341A010CBSMsg1List.MSKM_DTL_NO));
								// 異動区分 ido_div　固定：00067（EG切替）
								work.put("ido_div", "00067");
								// VA宅内機器型式コード	va_taknkiki_model_cd　交換後機器より転記
								work.put("va_taknkiki_model_cd", (String)bugVaChangAftInfMap.get(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD));
								// VA機器製造番号	va_kiki_seizo_no　交換後機器より転記
								work.put("va_kiki_seizo_no", (String)bugVaChangAftInfMap.get(EKK0341A010CBSMsg1List.KIKI_SEIZO_NO));
								// 事務手数料自動適用要否 rule0059_auto_aply 固定：0
								work.put("rule0059_auto_aply", "0");
								// VA機器変更番号 va_kiki_chg_no　交換後機器より転記
								work.put("va_kiki_chg_no", (String)bugVaChangAftInfMap.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO));
								// 多機能の場合
								if ("C024".equals((String)bugVaChangAftInfMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_CD)))
								{
									// ANK-2953-00-00 ADD START
									// ポート番号が空の場合
									if (JKKStringUtil.isNullBlank((String)work.get(EKK0191B001CBSMsg1List.VA_PORT_NO)))
									{
									// ANK-2953-00-00 ADD END
										// １番号目の場合、VAポートも１番号
										if ("1".equals(work.get(EKK0191B001CBSMsg1List.TELNO_JUN)) || "".equals(work.get(EKK0191B001CBSMsg1List.TELNO_JUN)))
										{
											work.put("va_port_no", "1");
										}
										else if ("2".equals(work.get(EKK0191B001CBSMsg1List.TELNO_JUN)) )
										{
											work.put("va_port_no", "2");
										}
									// ANK-2953-00-00 ADD START
									}
									// ANK-2953-00-00 ADD END
								}
								// ポート番号が設定されている場合、またはVAの場合、ポート番号は内訳一意より転記（カレント引継ぎ）のため、設定し直さない
								
								
								//EKK0191C060_サービス契約内訳<eo光電話>情報変更を実施する
								HashMap<String, Object> EKK0191C060Hash = new HashMap<String, Object>();
								callEKK0191C060SC(param,handle,EKK0191C060Hash, work,userData ,eKK0191A010List);
								// 紐換え後の世代年月日時分秒
								String ucwkGeneAddDtm = (String)EKK0191C060Hash.get(EKK0191C060CBSMsg.KK0161_GENE_ADD_DTM);
								// サービス契約内訳番号
								String ucwkSvcKeiNo = (String)EKK0191C060Hash.get(EKK0191C060CBSMsg.SVC_KEI_UCWK_NO);
								// 電話番号順
								String telNoJun = (String)EKK0191C060Hash.get(EKK0191C060CBSMsg.TELNO_JUN);
								// 1番号のサービス契約内訳番号と世代を確保する・なお、番号変更中はより小さいサービス契約内訳番号を内訳の代表として選定する
// IT1-2016-0000057	MOD START								
//								if ("1".equals(telNoJun) && work.get(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM) == null
//										|| ("1".equals(telNoJun) && work.get(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM) != null
//										&& ucwkSvcKeiNo.compareToIgnoreCase((String)work.get(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO)) > 0)
//									)
//								{
//									work.put(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO, ucwkSvcKeiNo);
//									work.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM, ucwkGeneAddDtm);
//								}
								if ("1".equals(telNoJun) && "0".equals(eKK0191B001CBSMSG1.get(EKK0191B001CBSMsg1List.KEIZK_AF_KEI_CHGECHU_FLG)))
								{
									workUwInfo.put("svc_kei_ucwk_no_1", ucwkSvcKeiNo);
									workUwInfo.put("svc_kei_ucwk_gene_add_dtm_1", ucwkGeneAddDtm);
								}
								else if ("2".equals(telNoJun) && "0".equals(eKK0191B001CBSMSG1.get(EKK0191B001CBSMsg1List.KEIZK_AF_KEI_CHGECHU_FLG)))
								{
									workUwInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO_2, ucwkSvcKeiNo);
									workUwInfo.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM_2, ucwkGeneAddDtm);
								}
// IT1-2016-0000057	MOD END
							}
						}
// IT1-2016-0000057	MOD START	
						work.put("svc_kei_ucwk_no_1", workUwInfo.get("svc_kei_ucwk_no_1"));
						work.put("svc_kei_ucwk_gene_add_dtm_1", workUwInfo.get("svc_kei_ucwk_gene_add_dtm_1"));
						work.put(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO_2, workUwInfo.get(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO_2));
						work.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM_2, workUwInfo.get(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM_2));
// IT1-2016-0000057	MOD END
						work.put("sysid", (String)userData.get("sysid"));
						work.put("svc_kei_no", telTgSvcKeiNo);
						work.put("kktk_svc_kei_no", (String)bugVaChangAftInfMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
						work.put("gene_add_dtm", (String)bugVaChangAftInfMap.get(EKK0341A010CBSMsg1List.GENE_ADD_DTM));
						// SOD発行まで実施できた場合のみ有効なハッシュマップをリターンする
						// なお、ハッシュマップに登録する値はSOD発行CCからの戻り値とする
						callVaChangeHakkoSodCC(param, handle, work);
						
						return bugVaChangAftInfMap;
					}
				}
			}
			else {
				// 有効な工事ではない場合は後続実施不要
				return null;
			}
		}
		else
		{
			// 依頼工事がEG切替以外の場合後続処理不要
			return null;
		}
		
		return null;
	}
// ANK-2768-00-00 ADD END
	
	/**
	 * 進捗登録SIF呼び出し
	 * @param param
	 * @param handle
	 * @param resultHash
	 * @param work
	 * @return
	 * @throws Throwable
	 */
	private int callEKK1091D010SC(IRequestParameterReadWrite param, SessionHandle handle,
			HashMap<String, Object> resultHash, HashMap<String, Object> work, HashMap<String, Object> userData) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK1091D010への呼び出しパラメータ設定
		template = new CAANMsg(EKK1091D010CBSMsg.class.getName());
		mappingEKK1091D010InMsg(template, work);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}
	/**
	 * templateに対してEKK1091D010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK1091D010InMsg(CAANMsg template, HashMap work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK1091D010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK1091D010CBSMsg.TEMPLATEID, EKK1091D010);

		// 機能コード--進捗登録
		template.set(EKK1091D010CBSMsg.FUNC_CODE, FUNC_CD_1);

		// 申込詳細番号
		template.set(EKK1091D010CBSMsg.MSKM_DTL_NO, (String)work.get("prg_mskm_dtl_no"));
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD START
//		// サービス契約番号
//		template.set(EKK1091D010CBSMsg.SVC_KEI_NO, (String)work.get("eKK0081B029_svc_kei_no"));		
		template.set(EKK1091D010CBSMsg.SVC_KEI_NO, (String)work.get("prg_svc_kei_no"));
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD END

		// 異動区分
		template.set(EKK1091D010CBSMsg.IDO_DIV, "00083");

		// 異動年月日時分秒
		template.set(EKK1091D010CBSMsg.IDO_DTM, JCCBPCommon.getSysDateTimeStamp());
		
		// 進捗ステータス
		template.set(EKK1091D010CBSMsg.PRG_STAT, PRG_STAT_VLANID);
		
		template.set(EKK1091D010CBSMsg.PRG_TKJK_1, "VLAN-ID:"+work.get("tel_vlan_id"));
		
		// 異動理由明細の枠を作成
		CAANMsg[] eKK1091D010CBSMSG1LIST = null;

		CAANMsg  eKK1091D010CBSMSG1 = new CAANMsg(EKK1091D010CBSMsg1List.class.getName());
		eKK1091D010CBSMSG1.set(EKK1091D010CBSMsg1List.IDO_RSN_CD, IDO_RSN_CD_OTHER);
		eKK1091D010CBSMSG1.setNull(EKK1091D010CBSMsg1List.IDO_RSN_MEMO);
		eKK1091D010CBSMSG1LIST = new CAANMsg[]
		{
				eKK1091D010CBSMSG1
		};
		
		template.set(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST, eKK1091D010CBSMSG1LIST);
	}
//▲▲▲▲▲【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD END▲▲▲▲▲	
	/**
	 * SOD発行対象チェック処理<br>
	 * 利用中のVAをVA情報に設定します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param 業務データ取得用I/F
	 * @param userData 入力情報
	 * @param vaInfo VAまたは多機能ルーター情報
	 * @return SOD発行対象の場合はtrue、そうでない場合はfalse
	 * @throws Throwable 例外が発生した場合
	 */
	// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 START
//	private boolean executeSodCheck(SessionHandle handle, IRequestParameterReadWrite param, 
//			HashMap<String, Object> userData, HashMap<String, Object> vlanInfoData) throws Throwable
	private boolean executeSodCheck(SessionHandle handle, IRequestParameterReadWrite param, 
			HashMap<String, Object> userData, HashMap<String, Object> vaInfo)
	throws Throwable
	// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 END
	{
		boolean blnRtnCd = false;
		HashMap<String, Object> resultHash = new HashMap<String, Object>();
		HashMap<String, Object> work = new HashMap<String, Object>();
		
		// サービス契約のチェック（サービス契約.サービスコード＝02：光電話サービス）
		String wkSvcCd = (String)userData.get("svc_cd");
		if (wkSvcCd == null || !wkSvcCd.equals(SVC_CD_02))
		{
			return blnRtnCd;
		}
		
		// 引数の設定
		work.put("svc_kei_no", (String)userData.get("svc_kei_no"));
		// 20131205 OM-2013-0004684 サービス契約回線内訳番号の項目名が誤っている MOD START
//		work.put("svc_kei_kaisen_ucwk_no", (String)userData.get("SVC_KEI_KAISEN_UCWK_NO"));
		work.put("svc_kei_kaisen_ucwk_no", (String)userData.get("svc_kei_kaisen_ucwk_no"));
		// 20131205 OM-2013-0004684 サービス契約回線内訳番号の項目名が誤っている MOD END
		
		// 機器提供サービス契約一覧照会（サービス契約番号）(EKK0341B002)呼び出し
		callEKK0341B002SC(
				param, 
				handle, 
				work, 
				resultHash,
				userData);
		
		CAANMsg[] EKK0341B002CBSMSG1list = (CAANMsg[])resultHash.get(EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST);

		// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 START
		// サービス契約内訳＜eo光電話＞一覧照会（サービス契約番号）(EKK0191B001)呼び出し
		callEKK0191B001SC(
				param, 
				handle, 
				work, 
				resultHash,
				userData);

		CAANMsg[] eKK0191B001CBSMSG1List = (CAANMsg[])resultHash.get(EKK0191B001CBSMsg.EKK0191B001CBSMSG1LIST);
		// 利用中のサービス契約内訳
		HashMap<String, Object> useSvcKeiUcwk = null;
		if (null != eKK0191B001CBSMSG1List)
		{
			String maxSvcKeiUcwkStat = "000";
			for (int i = 0; i < eKK0191B001CBSMSG1List.length; i++)
			{
				HashMap<String, Object> eKK0191B001CBSMSG1 = eKK0191B001CBSMSG1List[i].getMsgData();
				String svcKeiUcwkStat = (String)eKK0191B001CBSMSG1.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_STAT);
				// 解約済・キャンセル済でなく、サービス契約内訳ステータスが最も大きいものを利用中の内訳とする
				if (!JKKStrConst.CD00037_DSL_ZM.equals(svcKeiUcwkStat) && !JKKStrConst.CD00037_CANCEL_ZM.equals(svcKeiUcwkStat)
					&& maxSvcKeiUcwkStat.compareTo(svcKeiUcwkStat) < 0)
				{
					useSvcKeiUcwk = eKK0191B001CBSMSG1;
					maxSvcKeiUcwkStat = svcKeiUcwkStat;
				}
			}
			// #84990(#85823) DEL START
//			// #84990 ADD START
//			if (null != useSvcKeiUcwk)
//			{
//				work.put("svc_kei_ucwk_no", useSvcKeiUcwk.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_NO));
//				callEKK0191A010SC(param, handle, work, resultHash, userData);
//				CAANMsg[] EKK0191A010CBSMSG1list = (CAANMsg[])resultHash.get(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST);
//				vaInfo.put("jdg_svc_kei_ucwk_no", EKK0191A010CBSMSG1list[0].getString(EKK0191A010CBSMsg1List.SVC_KEI_UCWK_NO));
//				vaInfo.put("jdg_svc_kei_ucwk_gene_add_dtm", EKK0191A010CBSMSG1list[0].getString(EKK0191A010CBSMsg1List.GENE_ADD_DTM));
//			}
//			// #84990 ADD END
			// #84990(#85823) DEL END
		}
		// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 END
// IT2-2016-0000035 ADD START
		// 機器提供サービス契約一覧照会（サービス契約番号）(EKK0341B002)呼び出し
		callEKK0341B002_02SC(
				param, 
				handle, 
				work, 
				resultHash,
				userData);
		
		CAANMsg[] EKK0341B002_02CBSMSG1list = (CAANMsg[])resultHash.get(EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST);
		
		if (EKK0341B002_02CBSMSG1list != null && EKK0341B002_02CBSMSG1list.length != 0 && null != useSvcKeiUcwk)
		{
			for(int i = 0 ; i < EKK0341B002_02CBSMSG1list.length ; i++)
			{
				HashMap<String, Object> chkMap = EKK0341B002_02CBSMSG1list[i].getMsgData();
				
				String kikiChgNo = (String)chkMap.get(EKK0341B002CBSMsg1List.KIKI_CHG_NO);
				String vaKikiChgNo = (String)useSvcKeiUcwk.get(EKK0191B001CBSMsg1List.VA_KIKI_CHG_NO);
				if (kikiChgNo != null && !"".equals(kikiChgNo))
				{
					// VA機器と内訳がすでに紐付いている場合
					if (vaKikiChgNo.equals(vaKikiChgNo))
					{
						EKK0341B002CBSMSG1list = EKK0341B002_02CBSMSG1list;
					}
				}
			}
		}
// IT2-2016-0000035 ADD END

		// 光電話サービスチェック
		// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 START
//		if (EKK0341B002CBSMSG1list != null && EKK0341B002CBSMSG1list.length != 0)
		if (EKK0341B002CBSMSG1list != null && EKK0341B002CBSMSG1list.length != 0 && null != useSvcKeiUcwk)
		// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 END
		{
			// 20140112 IT2-2014-0000033 利用中のVAが取得できなかった場合、後続の多機能ルーター用の処理を行う DEL START
//			// チェック成否フラグ変数の宣言 true:ＯＫ false:ＮＧ
//			// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 START
////			boolean chkFlg = true;
//			boolean chkFlg = false;
			// 20140112 IT2-2014-0000033 利用中のVAが取得できなかった場合、後続の多機能ルーター用の処理を行う DEL END
			String vaKikiChgNo = (String)useSvcKeiUcwk.get(EKK0191B001CBSMsg1List.VA_KIKI_CHG_NO);
			// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 END

			// 全取得データのチェック
			for(int i = 0 ; i < EKK0341B002CBSMSG1list.length ; i++)
			{
				HashMap<String, Object> chkMap = EKK0341B002CBSMSG1list[i].getMsgData();
				// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 START
//				if (chkMap.get("kiki_seizo_no") == null)
//				{
//					chkFlg = false;
//				}
//				
//				// チェック中止判定
//				if (!chkFlg)
//				{
//					break;
//				}

				String kikiChgNo = (String)chkMap.get(EKK0341B002CBSMsg1List.KIKI_CHG_NO);
				String kikiSeizoNo = (String)chkMap.get(EKK0341B002CBSMsg1List.KIKI_SEIZO_NO);
				// ANK-3238-00-00 ADD START
				String kktkSvcKeiStat = (String)chkMap.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);
				// ANK-3238-00-00 ADD END
				// 機器変更番号がVA機器変更番号と一致する場合
				if (null != kikiChgNo && kikiChgNo.equals(vaKikiChgNo) && null != kikiSeizoNo && !kikiSeizoNo.isEmpty())
				{
					// 20140112 IT2-2014-0000033 利用中のVAが取得できなかった場合、後続の多機能ルーター用の処理を行う DEL START
//					chkFlg = true;
					// 20140112 IT2-2014-0000033 利用中のVAが取得できなかった場合、後続の多機能ルーター用の処理を行う DEL END
					// SOD発行CCに引き渡す機器提供サービス契約番号を設定
					String kktkSvcKeiNo = (String)chkMap.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
					vaInfo.put("kktk_svc_kei_no", kktkSvcKeiNo);
					break;
				}
				// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 END
				// ANK-3238-00-00 ADD START
				else if (JKKStrConst.CD00037_DSL_ZM.compareTo(kktkSvcKeiStat) > 0 && JKKStringUtil.isNullBlank(kikiSeizoNo))
				{
					// 修理交換中かどうかを判定する
					Map<String, Object> kokanBfKiki = new JKKHakkoSODCC().getShuriKokanBfKiki(handle, param, (String)work.get("svc_kei_no"),
							(String)useSvcKeiUcwk.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_NO), vaKikiChgNo,
							(String)chkMap.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO),
							(String)chkMap.get(EKK0341B002CBSMsg1List.GENE_ADD_DTM));

					// 修理交換中の場合
					if (kokanBfKiki != null && !kokanBfKiki.isEmpty())
					{
						// SOD発行CCに引き渡す機器提供サービス契約番号を設定
						String kktkSvcKeiNo = (String)kokanBfKiki.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO);
						vaInfo.put("kktk_svc_kei_no", kktkSvcKeiNo);
						break;
					}
				}
				// ANK-3238-00-00 ADD END
			}
			
		// 20140112 IT2-2014-0000033 利用中のVAが取得できなかった場合、後続の多機能ルーター用の処理を行う DEL START
		// チェック結果判定（エラーがあればfalseを呼び元に返す）
//			if (!chkFlg)
//			{
//				return blnRtnCd;
//			}
			// 20140112 IT2-2014-0000033 利用中のVAが取得できなかった場合、後続の多機能ルーター用の処理を行う DEL END
		}
		// 20140112 IT2-2014-0000033 利用中のVAが取得できなかった場合、後続の多機能ルーター用の処理を行う MOD START
//		else
		if (vaInfo.isEmpty() && null != useSvcKeiUcwk)
		// 20140112 IT2-2014-0000033 利用中のVAが取得できなかった場合、後続の多機能ルーター用の処理を行う MOD EMD
		{
// ▼▼▼ 2013/12/26 IT1-2013-0001749 多機能ルーターに対するＳＯＤが発行されない
			callEKK0341B504SC(
					param, 
					handle, 
					work, 
					resultHash,
					userData);
			
			CAANMsg[] EKK0341B504CBSMSG1list = (CAANMsg[])resultHash.get(EKK0341B504CBSMsg.EKK0341B504CBSMSG1LIST);
			
			// 光電話サービスチェック
			if (EKK0341B504CBSMSG1list != null && EKK0341B504CBSMSG1list.length != 0)
			{
				// 20140112 IT2-2014-0000033 chkFlgは使用せずにvaInfoを使用するよう修正 MOD START
//				// チェック成否フラグ変数の宣言 true:ＯＫ false:ＮＧ
//				boolean chkFlg = true;
//				// 全取得データのチェック
//				for(int i = 0 ; i < EKK0341B504CBSMSG1list.length ; i++)
//				{
//					HashMap<String, Object> chkMap = EKK0341B504CBSMSG1list[i].getMsgData();
//					if (chkMap.get("kktk_svc_cd") == null || !JKKHakkoSODConstCC.KKTK_SVC_CD_MRT.equals((String)chkMap.get("kktk_svc_cd")))
//					{
//						chkFlg = false;
//					}else{
//						chkFlg = true;
//						if (chkMap.get("kktk_svc_kei_stat") == null ||
//							!("010".equals((String)chkMap.get("kktk_svc_kei_stat")) ||
//							  "020".equals((String)chkMap.get("kktk_svc_kei_stat")) ||
//							  "030".equals((String)chkMap.get("kktk_svc_kei_stat")) ||
//							  "100".equals((String)chkMap.get("kktk_svc_kei_stat"))) )
//						{
//							chkFlg = false;
//						}
//						if (chkMap.get("kiki_seizo_no") == null)
//						{
//							chkFlg = false;
//						}
//					}
//				}
//				
//				// チェック結果判定（エラーがあればfalseを呼び元に返す）
//				if (!chkFlg)
//				{
//					return blnRtnCd;
//				}
				// サービス契約内訳.VA機器変更番号
				String vaKikiChgNo = (String)useSvcKeiUcwk.get(EKK0191B001CBSMsg1List.VA_KIKI_CHG_NO);
				// 全取得データのチェック
				for(int i = 0 ; i < EKK0341B504CBSMSG1list.length ; i++)
				{
					HashMap<String, Object> chkMap = EKK0341B504CBSMSG1list[i].getMsgData();
					String kktkSvcKeiStat = (String)chkMap.get(EKK0341B504CBSMsg1List.KKTK_SVC_KEI_STAT);
					String kikiChgNo = (String)chkMap.get(EKK0341B504CBSMsg1List.KIKI_CHG_NO);
					String kikiSeizoNo = (String)chkMap.get(EKK0341B504CBSMsg1List.KIKI_SEIZO_NO);
					
					// サービス契約内訳のVA機器変更番号に紐付く機器
					// 且つ、機器提供サービス契約ステータスが利用中（解約、キャンセル以外）
					// 且つ、出荷済（機器製造番号が設定済）
					if (null != kikiChgNo && kikiChgNo.equals(vaKikiChgNo)
							&& JKKStrConst.CD00037_DSL_ZM.compareTo(kktkSvcKeiStat) > 0
							&& null != kikiSeizoNo && !kikiSeizoNo.isEmpty()
						)
					{
						// SOD発行CCに引き渡す機器提供サービス契約番号を設定
						String kktkSvcKeiNo = (String)chkMap.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
						vaInfo.put("kktk_svc_kei_no", kktkSvcKeiNo);
						break;
					}
					// ANK-3238-00-00 ADD START
					else if (JKKStrConst.CD00037_DSL_ZM.compareTo(kktkSvcKeiStat) > 0 && JKKStringUtil.isNullBlank(kikiSeizoNo))
					{
						// 修理交換中かどうかを判定する
						Map<String, Object> kokanBfKiki = new JKKHakkoSODCC().getShuriKokanBfKiki(handle, param, (String)work.get("svc_kei_no"),
								(String)useSvcKeiUcwk.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_NO), vaKikiChgNo,
								(String)chkMap.get(EKK0341B504CBSMsg1List.KKTK_SVC_KEI_NO),
								(String)chkMap.get(EKK0341B504CBSMsg1List.GENE_ADD_DTM));

						// 修理交換中の場合
						if (kokanBfKiki != null && !kokanBfKiki.isEmpty())
						{
							// SOD発行CCに引き渡す機器提供サービス契約番号を設定
							String kktkSvcKeiNo = (String)kokanBfKiki.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO);
							vaInfo.put("kktk_svc_kei_no", kktkSvcKeiNo);
							break;
						}
					}
					// ANK-3238-00-00 ADD END
				}
				// 20140112 IT2-2014-0000033 chkFlgは使用せずにvaInfoを使用するよう修正 MOD END
			}
			// 20140112 IT2-2014-0000033 chkFlgは使用せずにvaInfoを使用するよう修正 DEL START
//			else
//			{
//// ▲▲▲ 2013/12/26 IT1-2013-0001749 多機能ルーターに対するＳＯＤが発行されない
//			// 機器提供サービス契約一覧照会（サービス契約番号）で取得できない ＝ 解約済みのためチェックＮＧ
//			return blnRtnCd;
//// ▼▼▼ 2013/12/26 IT1-2013-0001749 多機能ルーターに対するＳＯＤが発行されない
//			}
//// ▲▲▲ 2013/12/26 IT1-2013-0001749 多機能ルーターに対するＳＯＤが発行されない
			// 20140112 IT2-2014-0000033 chkFlgは使用せずにvaInfoを使用するよう修正 DEL END
		}
// ▽▽▽ OM-2019-0000392 ADD START
		// 本来は、最初のEKK0341B002の条件を変更する方が簡単だが、
		// この資産だけで対応できるように、予約レコードの対応をここに追加する。
		if (vaInfo.isEmpty() && null != useSvcKeiUcwk)
		{
			// サービス契約内訳の機器変更番号を取得
			String vaKikiChgNo = (String)useSvcKeiUcwk.get(EKK0191B001CBSMsg1List.VA_KIKI_CHG_NO);
			if (!JKKStringUtil.isNullBlank(vaKikiChgNo))
			{
				// サービス契約番号を用いて、機器提供サービス契約一覧照会（予約）実施
				callEKK0341B021SC(handle, 
								  param,
								  (String)userData.get("svc_kei_no"),
								  resultHash,
								  userData);
				CAANMsg[] EKK0341B021CBSMSG1list = (CAANMsg[])resultHash.get(EKK0341B021CBSMsg.EKK0341B021CBSMSG1LIST);
				if (EKK0341B021CBSMSG1list != null && EKK0341B021CBSMSG1list.length > 0)
				{
					// 機器変更番号と一致する予約が存在するかを確認する
					for(int i = 0 ; i < EKK0341B021CBSMSG1list.length ; i++)
					{
						HashMap<String, Object> chkMap = EKK0341B021CBSMSG1list[i].getMsgData();
						String kikiChgNo = (String)chkMap.get(EKK0341B021CBSMsg1List.RSV_KIKI_CHG_NO);
						String kikiSeizoNo = (String)chkMap.get(EKK0341B021CBSMsg1List.RSV_KIKI_SEIZO_NO);
						String idoDiv = (String)chkMap.get(EKK0341B021CBSMsg1List.RSV_IDO_DIV);
						
						// サービス契約内訳のVA機器変更番号に紐付く機器 且つ、出荷済（機器製造番号が設定済）
						if (vaKikiChgNo.equals(kikiChgNo) && !JKKStringUtil.isNullBlank(kikiSeizoNo) && !"00019".equals(idoDiv))
						{
							// SOD発行CCに引き渡す機器提供サービス契約番号を設定
							String kktkSvcKeiNo = (String)chkMap.get(EKK0341B021CBSMsg1List.KKTK_SVC_KEI_NO);
							String geneAddDtm = (String)chkMap.get(EKK0341B021CBSMsg1List.RSV_GENE_ADD_DTM);
							vaInfo.put("kktk_svc_kei_no", kktkSvcKeiNo);
							vaInfo.put("gene_add_dtm", geneAddDtm);
							
							// サービス契約内訳一意照会を実施
							work.put("svc_kei_ucwk_no", useSvcKeiUcwk.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_NO));
							callEKK0191A010SC(param, handle, work, resultHash, userData);
							CAANMsg[] EKK0191A010CBSMSG1list = (CAANMsg[])resultHash.get(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST);

							vaInfo.put("jdg_svc_kei_ucwk_no", EKK0191A010CBSMSG1list[0].getString(EKK0191A010CBSMsg1List.SVC_KEI_UCWK_NO));
							vaInfo.put("jdg_svc_kei_ucwk_gene_add_dtm", EKK0191A010CBSMSG1list[0].getString(EKK0191A010CBSMsg1List.GENE_ADD_DTM));
							break;
						}
					}
				}
			}
		}
// △△△ OM-2019-0000392 ADD END
		// 20140112 IT2-2014-0000033 利用中のVAor多機能ルーターが取得できなかった場合、SOD発行対象外として処理終了 ADD START
		if (vaInfo.isEmpty())
		{
			return blnRtnCd;
		}
		// 20140112 IT2-2014-0000033 利用中のVAor多機能ルーターが取得できなかった場合、SOD発行対象外として処理終了 ADD END
		// 初回電話SODの発行済チェック
		// オーダ設定一覧照会(EKK1041B001)呼び出し
		callEKK1041B001SC(
				param, 
				handle, 
				work, 
				resultHash,
				userData);
		
		CAANMsg[] EKK1041B001CBSMSG1list = (CAANMsg[])resultHash.get(EKK1041B001CBSMsg.EKK1041B001CBSMSG1LIST);
		
		// 初回電話SODの発行済チェック（オーダ設定一覧照会での存在チェック）
		if (EKK1041B001CBSMSG1list == null || EKK1041B001CBSMSG1list.length == 0)
		{
			return blnRtnCd;
		}
		
		// #84990(#85823) ADD START
		if (null != useSvcKeiUcwk)
		{
			work.put("svc_kei_ucwk_no", useSvcKeiUcwk.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_NO));
			callEKK0191A010SC(param, handle, work, resultHash, userData);
			CAANMsg[] EKK0191A010CBSMSG1list = (CAANMsg[])resultHash.get(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST);
			vaInfo.put("jdg_svc_kei_ucwk_no", EKK0191A010CBSMSG1list[0].getString(EKK0191A010CBSMsg1List.SVC_KEI_UCWK_NO));
			vaInfo.put("jdg_svc_kei_ucwk_gene_add_dtm", EKK0191A010CBSMSG1list[0].getString(EKK0191A010CBSMsg1List.GENE_ADD_DTM));
		}
		// #84990(#85823) ADD END
		
		// 上記チェックをクリアできればtrueを返す
		blnRtnCd = true;
		return blnRtnCd;
	}
	
	/**
	 * SOD発行CC呼出
	 * 
	 * @param param 業務データ取得用I/F
	 * @param handle セッションハンドル
	 * @param work 入力データ
	 * @param vaInfo VA情報
	 * @throws Throwable 例外が発生した場合
	 */
	// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 START
//	private void callHakkoSodCC(IRequestParameterReadWrite param, SessionHandle handle, 
//			HashMap<String, Object> work) throws Throwable
	private void callHakkoSodCC(IRequestParameterReadWrite param, SessionHandle handle, 
			HashMap<String, Object> work, HashMap<String, Object> vaInfo)
	throws Throwable
	// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 END
	{
		HashMap<String, Object> sodMap = new HashMap<String, Object>();
		
		ArrayList<HashMap<String, Object>> sodDataList = new ArrayList<HashMap<String, Object>>();
		// SOD対象データマップ
		HashMap<String, Object> sodTrgtData = new HashMap<String, Object>();

		// SOD基本情報
		HashMap<String, Object> sodKihonInfo = new HashMap<String, Object>();
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_SYSID, (String)work.get("sysid"));
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_SYORI_DIV, JKKHakkoSODConstCC.KEI_SVC_CTL_YOKYU_ODR_SKCD_031);
		sodMap.put(JKKHakkoSODConstCC.SOD_KIHON_INFO, sodKihonInfo);
		
		// サービス契約情報
		HashMap<String, Object> svcKeiInfo = new HashMap<String, Object>();
		
		svcKeiInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_NO, work.get("svc_kei_no"));
		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_INFO, svcKeiInfo);

		// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 START
		// 機器提供サービス契約情報
		HashMap<String, Object> kktsvkeiInfo = new HashMap<String, Object>();
		// 変更後機器提供サービス契約番号として設定する
		kktsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_KKTSVKEI_NO, vaInfo.get("kktk_svc_kei_no"));
		sodMap.put(JKKHakkoSODConstCC.KKTSVKEI_INFO, kktsvkeiInfo);
		// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 END
// ▽▽▽ OM-2019-0000392 ADD START
		HashMap<String,Object> svKeiucwkInfoMap = new HashMap<String, Object>();

		// 変更後サービス契約内訳番号＆変更後サービス契約内訳世代登録年月日時分秒
		svKeiucwkInfoMap.put(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO, vaInfo.get("jdg_svc_kei_ucwk_no"));	
		svKeiucwkInfoMap.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM, vaInfo.get("jdg_svc_kei_ucwk_gene_add_dtm"));	
		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_INFO, svKeiucwkInfoMap);
// △△△ OM-2019-0000392 ADD END

		sodDataList.add(sodMap);
		
		sodTrgtData.put(JKKHakkoSODConstCC.TRGT_DATA_LIST, sodDataList);
		sodTrgtData.put(JCMConstants.FUNC_CODE_KEY, FUNC_CD_1);
		
		// サービスオーダ発行CCを呼び出す
		JKKHakkoSODCC hakkoSODCC = new JKKHakkoSODCC();
		param.setData("sodTrgtData", sodTrgtData);
		try {
			hakkoSODCC.hakkoSOD(handle, param, "sodTrgtData");
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	
// ANK-2768-00-00 ADD START
	private void callVaChangeHakkoSodCC(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> work)
	throws Throwable
	{
		HashMap<String, Object> sodMap = new HashMap<String, Object>();
		
		ArrayList<HashMap<String, Object>> sodDataList = new ArrayList<HashMap<String, Object>>();
		// SOD対象データマップ
		HashMap<String, Object> sodTrgtData = new HashMap<String, Object>();

		// SOD基本情報
		HashMap<String, Object> sodKihonInfo = new HashMap<String, Object>();
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_SYSID, (String)work.get("sysid"));
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_SYORI_DIV, JKKHakkoSODConstCC.KEI_SVC_CTL_YOKYU_ODR_SKCD_031);
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_IDO_DIV, JKKHakkoSODConstCC.IDO_DIV_EGCHANGE);
		sodMap.put(JKKHakkoSODConstCC.SOD_KIHON_INFO, sodKihonInfo);
		
		// サービス契約情報
		HashMap<String, Object> svcKeiInfo = new HashMap<String, Object>();
		
		svcKeiInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_NO, work.get("svc_kei_no"));
		// EKK0081B029_同一回線内訳サービス契約一覧照会を実施
		HashMap<String, Object> EKK0081B029Hash = new HashMap<String, Object>();
		// 同一回線上に電話サービスの有無を確認しその契約情報を取得する
		callEKK0081B029SC(param, handle, (String)work.get("svc_kei_no"), EKK0081B029Hash ,EKK0081B029Hash); // 
		// 同一回線内訳サービス契約一覧照会結果を取り出す
		CAANMsg[] eKK0081B029List = (CAANMsg[])EKK0081B029Hash.get(EKK0081B029CBSMsg.EKK0081B029CBSMSG1LIST);
		
		// 同一回線内訳サービス契約一覧照会にデータある場合
		if (eKK0081B029List != null && !"".equals(eKK0081B029List) && eKK0081B029List.length > 0) {
			for (int i = 0; i < eKK0081B029List.length ; i ++) {
				CAANMsg eKK0081B029Msg = eKK0081B029List[i];
				String tgSvcKeiNo = eKK0081B029Msg.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO);
				HashMap<String, Object> map = new HashMap<String, Object>();
				map.put("eKK0241B002_svc_kei_no", tgSvcKeiNo);
				map.put("rsvAplyYmd",JCCBPCommon.getOpeDate(null));
				// サービス契約一意照会
				HashMap<String, Object> telFkk0081a010Hash = new HashMap<String, Object>();
				callEKK0081A010SC(param, handle, map, telFkk0081a010Hash, telFkk0081a010Hash);
				// サービス契約情報を取得
				CAANMsg[] telEkk0081a010List = (CAANMsg[])telFkk0081a010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
				// サービスコードネットの場合
				if (HOME_NET.equals((String)telEkk0081a010List[0].getString(EKK0081A010CBSMsg1List.PRC_GRP_CD))
						|| MEZON_NET.equals((String)telEkk0081a010List[0].getString(EKK0081A010CBSMsg1List.PRC_GRP_CD))
						|| MANTION_NET.equals((String)telEkk0081a010List[0].getString(EKK0081A010CBSMsg1List.PRC_GRP_CD)))
				{
					// 解約・キャンセル済以外
					if (!SVC_KEI_STAT_DSL.equals((String)telEkk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT)) 
							&& !SVC_KEI_STAT_CANCLE.equals((String)telEkk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT)))
					{
						svcKeiInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_NO_EGCHG_NET, tgSvcKeiNo);
					}
				}
			}
		}
		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_INFO, svcKeiInfo);
		
		// サービス契約内訳情報
		HashMap<String, Object> svcKeiUcwkInfo = new HashMap<String, Object>();
// IT1-2016-0000057	MOD START
//		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO, work.get(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO));
//		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM, work.get(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM));
		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO, work.get("svc_kei_ucwk_no_1"));
		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM, work.get("svc_kei_ucwk_gene_add_dtm_1"));
		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO_2, work.get(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO_2));
		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM_2, work.get(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM_2));
// IT1-2016-0000057	MOD END
		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_INFO, svcKeiUcwkInfo);
		
		
		// 機器提供サービス契約情報
		HashMap<String, Object> kktsvkeiInfo = new HashMap<String, Object>();
		// 変更後機器提供サービス契約番号として設定する
		kktsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_KKTSVKEI_NO, work.get("kktk_svc_kei_no"));
		kktsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_KKTSVKEI_GENE_ADD_DTM, work.get("gene_add_dtm"));
		sodMap.put(JKKHakkoSODConstCC.KKTSVKEI_INFO, kktsvkeiInfo);
		
		sodDataList.add(sodMap);
		
		sodTrgtData.put(JKKHakkoSODConstCC.TRGT_DATA_LIST, sodDataList);
		sodTrgtData.put(JCMConstants.FUNC_CODE_KEY, FUNC_CD_1);
		
		// サービスオーダ発行CCを呼び出す
		JKKHakkoSODCC hakkoSODCC = new JKKHakkoSODCC();
		param.setData("sodTrgtData", sodTrgtData);
		try {
			hakkoSODCC.hakkoSOD(handle, param, "sodTrgtData");
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
// ANK-2768-00-00 ADD END
	
	/**
	 * サービス契約回線内訳一意照会SIF呼び出し
	 * @param param
	 * @param handle
	 * @param paramMap
	 * @param resultHash
	 * @return
	 * @throws Throwable
	 */
	private int callEKK0251A010SC(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> work,
			HashMap<String, Object> resultHash, HashMap<String, Object> userData) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0251A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0251A010CBSMsg.class.getName());
		mappingEKK0251A010InMsg(template, work);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}
	
	/**
	 * templateに対してEKK0251A010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0251A010InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0251A010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0251A010CBSMsg.TEMPLATEID, EKK0251A010);
		
		// 機能コード：2　カレント
		template.set(EKK0251A010CBSMsg.FUNC_CODE, FUNC_CD_2);

		// ＫＥＹ＿サービス契約回線内訳番号
		template.set(EKK0251A010CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, (String)work.get("svc_kei_kaisen_ucwk_no"));

		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 START
//		// ＫＥＹ＿サービス契約回線内訳番号（エラー）
//		template.set(EKK0251A010CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO_ERR, (String)work.get("svc_kei_kaisen_ucwk_no"));
		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 END
	}
	
	/**
	 * サービス契約回線内訳内容変更SIFを呼び出し
	 * @param param
	 * @param handle
	 * @param inHash
	 * @param resultHash
	 * @return
	 * @throws RequestParameterException
	 * @throws SCException
	 */
	private int callEKK0251C030SC(IRequestParameterReadWrite param, SessionHandle handle,
			HashMap<String, Object> work, HashMap<String, Object> resultHash, HashMap<String, Object> userData) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0251C030への呼び出しパラメータ設定
		template = new CAANMsg(EKK0251C030CBSMsg.class.getName());
		mappingEKK0251C030InMsg(template, work, userData, param);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		// エラーチェック処理
		errChk(sIFResult);
		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}
	
	/**
	 * templateに対してEKK0251C030の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0251C030InMsg(CAANMsg template, HashMap<String, Object> work, 
			HashMap<String, Object> userData, IRequestParameterReadOnly param) throws RequestParameterException
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0251C030CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0251C030CBSMsg.TEMPLATEID, EKK0251C030);

		// 機能コード
		template.set(EKK0251C030CBSMsg.FUNC_CODE, FUNC_CD_1);

		// サービス契約回線内訳番号
		template.set(EKK0251C030CBSMsg.SVC_KEI_KAISEN_UCWK_NO, (String)work.get("svc_kei_kaisen_ucwk_no"));

		// 申込明細番号
		template.set(EKK0251C030CBSMsg.MSKM_DTL_NO, (String)work.get("mskm_dtl_no"));

		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 START
//		// 申込明細番号（エラー）
//		template.set(EKK0251C030CBSMsg.MSKM_DTL_NO_ERR, (String)work.get("mskm_dtl_no"));
		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 END
		
		// 回線場所住所未確定フラグ
		template.set(EKK0251C030CBSMsg.KISN_PLC_AD_MI_FIX_FLG, (String)work.get("kisn_plc_ad_mi_fix_flg"));

		// 回線場所住所未確定解除年月日
		template.set(EKK0251C030CBSMsg.KISN_PLC_AD_MI_FIX_RLS_YMD, (String)work.get("kisn_plc_ad_mi_fix_rls_ymd"));

		// 回線場所_契約者住所差異フラグ
		template.set(EKK0251C030CBSMsg.KAISEN_PLC_KSH_AD_SAI_FLG, (String)work.get("kaisen_plc_ksh_ad_sai_flg"));

		// お客様申告住所未確定フラグ
		template.set(EKK0251C030CBSMsg.CUST_SKK_AD_MI_FIX_FLG, (String)work.get("cust_skk_ad_mi_fix_flg"));

		// お客様SOS利用有無
		template.set(EKK0251C030CBSMsg.CUST_SOS_USE_UM, (String)work.get("cust_sos_use_um"));

		// マンション物件番号
		template.set(EKK0251C030CBSMsg.MANSION_BUKKEN_NO, (String)work.get("mansion_bukken_no"));

		// 回線場所電話番号
		template.set(EKK0251C030CBSMsg.KAISEN_PLACE_TELNO, (String)work.get("kaisen_place_telno"));

		// 回線場所カナ名
		template.set(EKK0251C030CBSMsg.KAISEN_PLC_KANA, (String)work.get("kaisen_plc_kana"));

		// 回線場所住所コード
		template.set(EKK0251C030CBSMsg.KAISEN_PLACE_AD_CD, (String)work.get("kaisen_place_ad_cd"));

		// 回線場所郵便番号
		template.set(EKK0251C030CBSMsg.KAISEN_PLACE_PCD, (String)work.get("kaisen_place_pcd"));

		// 回線場所都道府県名
		template.set(EKK0251C030CBSMsg.KAISEN_PLACE_STATE_NM, (String)work.get("kaisen_place_state_nm"));

		// 回線場所市区町村名
		template.set(EKK0251C030CBSMsg.KAISEN_PLACE_CITY_NM, (String)work.get("kaisen_place_city_nm"));

		// 回線場所大字通称名
		template.set(EKK0251C030CBSMsg.KAISEN_PLACE_OAZTSU_NM, (String)work.get("kaisen_place_oaztsu_nm"));

		// 回線場所字丁目名
		template.set(EKK0251C030CBSMsg.KAISEN_PLACE_AZCHO_NM, (String)work.get("kaisen_place_azcho_nm"));

		// 回線場所番地号
		template.set(EKK0251C030CBSMsg.KAISEN_PLACE_BNCHIGO, (String)work.get("kaisen_place_bnchigo"));

		// 回線場所住所補記・建物名
		template.set(EKK0251C030CBSMsg.KAISEN_PLACE_ADRTTM, (String)work.get("kaisen_place_adrttm"));

		// 回線場所住所補記・部屋番号
		template.set(EKK0251C030CBSMsg.KAISEN_PLACE_ADRRM, (String)work.get("kaisen_place_adrrm"));

		// 回線場所番号
		template.set(EKK0251C030CBSMsg.KAISEN_PLACE_NO, (String)work.get("kaisen_place_no"));

		// 回線場所区画整理中フラグ
		template.set(EKK0251C030CBSMsg.KISN_PLC_KKK_SEIRI_CHU_FLG, (String)work.get("kisn_plc_kkk_seiri_chu_flg"));

		// 回線場所補足コード1
		template.set(EKK0251C030CBSMsg.KISN_PLC_HSK_CD_1, (String)work.get("kisn_plc_hsk_cd_1"));

		// 回線場所補足コード2
		template.set(EKK0251C030CBSMsg.KISN_PLC_HSK_CD_2, (String)work.get("kisn_plc_hsk_cd_2"));

		// 回線場所補足メモ
		template.set(EKK0251C030CBSMsg.KISN_PLC_HSK_MEMO, (String)work.get("kisn_plc_hsk_memo"));

		// 住所形態コード
		template.set(EKK0251C030CBSMsg.AD_FORM_CD, (String)work.get("ad_form_cd"));

		// 竣工予定年月日
		template.set(EKK0251C030CBSMsg.SHUNKO_RSV_YMD, (String)work.get("shunko_rsv_ymd"));

		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 START
//		// 竣工予定年月日（エラー）
//		template.set(EKK0251C030CBSMsg.SHUNKO_RSV_YMD_ERR, (String)work.get("shunko_rsv_ymd"));
		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 END
		
		// 電力送電予定年月日
		template.set(EKK0251C030CBSMsg.EPOWER_SODEN_RSV_YMD, (String)work.get("epower_soden_rsv_ymd"));

		// 入居予定年月日
		template.set(EKK0251C030CBSMsg.NYUKYO_RSV_YMD, (String)work.get("nyukyo_rsv_ymd"));

		// 引渡し予定年月日
		template.set(EKK0251C030CBSMsg.HIKIWATASHI_RSV_YMD, (String)work.get("hikiwatashi_rsv_ymd"));

		// 引越し予定年月日
		template.set(EKK0251C030CBSMsg.HIKKOSHI_RSV_YMD, (String)work.get("hikkoshi_rsv_ymd"));

		// X座標
		template.set(EKK0251C030CBSMsg.XZAHYO, (String)work.get("xzahyo"));

		// Y座標
		template.set(EKK0251C030CBSMsg.YZAHYO, (String)work.get("yzahyo"));

		// 経度
		template.set(EKK0251C030CBSMsg.LGTD, (String)work.get("lgtd"));

		// 緯度
		template.set(EKK0251C030CBSMsg.LTTD, (String)work.get("lttd"));

		// 座標補正有無
		template.set(EKK0251C030CBSMsg.ZAHYO_HOSEI_UM, (String)work.get("zahyo_hosei_um"));

		// テレビ個別対応コード
		template.set(EKK0251C030CBSMsg.TV_KOBET_TAIO_CD, (String)work.get("tv_kobet_taio_cd"));

		// TVアンテナ有無
		template.set(EKK0251C030CBSMsg.TV_ANTENNA_UM, (String)work.get("tv_antenna_um"));

		// 方角コード1
		template.set(EKK0251C030CBSMsg.DIRECTION_CD_1, (String)work.get("direction_cd_1"));

		// 方角コード2
		template.set(EKK0251C030CBSMsg.DIRECTION_CD_2, (String)work.get("direction_cd_2"));

		// 戸建建築階数コード
		template.set(EKK0251C030CBSMsg.KODATE_KCKU_FLR_CNT_CD, (String)work.get("kodate_kcku_flr_cnt_cd"));

		// 集合住宅入居階数コード
		template.set(EKK0251C030CBSMsg.SHUGJ_NYUKYO_FLR_CNT_CD, (String)work.get("shugj_nyukyo_flr_cnt_cd"));

		// PON種別コード
		template.set(EKK0251C030CBSMsg.PON_SBT_CD, (String)work.get("pon_sbt_cd"));

		// 回線提供会社コード
		template.set(EKK0251C030CBSMsg.KAISEN_TK_COMP_CD, (String)work.get("kaisen_tk_comp_cd"));

		// VDSL利用電話回線種別コード
		template.set(EKK0251C030CBSMsg.VDSL_USE_TEL_KISN_SBT_CD, (String)work.get("vdsl_use_tel_kisn_sbt_cd"));

		// VDSL利用電話回線切替予定年月日
		template.set(EKK0251C030CBSMsg.VDSL_USE_DKSN_SWCH_RSV_YMD, (String)work.get("vdsl_use_dksn_swch_rsv_ymd"));

		// VDSL利用対象電話番号回線種別コード
		template.set(EKK0251C030CBSMsg.VDSL_USE_TG_DBKSN_SBT_CD, (String)work.get("vdsl_use_tg_dbksn_sbt_cd"));

		// VDSL利用対象電話番号
		template.set(EKK0251C030CBSMsg.VDSL_USE_TG_TELNO, (String)work.get("vdsl_use_tg_telno"));
		
		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 START
//		// VDSL利用対象電話番号（エラー）
//		template.set(EKK0251C030CBSMsg.VDSL_USE_TG_TELNO_ERR, (String)work.get("vdsl_use_tg_telno"));
		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 END
		
		// 引越し年月日
		template.set(EKK0251C030CBSMsg.HIKKOSHI_YMD, (String)work.get("hikkoshi_ymd"));

		// 該当エリアサービス開始年月日
		template.set(EKK0251C030CBSMsg.GAITO_AREA_SVC_STAYMD, (String)work.get("gaito_area_svc_staymd"));

		// 撤去工事希望年月日
		template.set(EKK0251C030CBSMsg.TEKKYO_KOJI_KIBO_YMD, (String)work.get("tekkyo_koji_kibo_ymd"));

		// 起点変電所コード
		template.set(EKK0251C030CBSMsg.KITEN_HDSHO_CD, (String)work.get("kiten_hdsho_cd"));

		// 集約局コード
		template.set(EKK0251C030CBSMsg.SHYAKK_CD, (String)work.get("shyakk_cd"));

		// 関電営業所コード
		template.set(EKK0251C030CBSMsg.KEPCO_BUSIOFFICE_CD, (String)work.get("kepco_busioffice_cd"));

		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 START
//		// 無効フラグ
//		template.set(EKK0251C030CBSMsg.MK_FLG, (String)work.get("mk_flg"));
		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 END
		
		// 更新年月日時分秒(更新前)
		// ST1-2013-0000232 2013/01/26 MOD START
		//template.set(EKK0251C030CBSMsg.UPD_DTM_BF_ERR, (String)work.get("last_upd_dtm"));
		template.set(EKK0251C030CBSMsg.UPD_DTM_BF, (String)work.get("last_upd_dtm"));
		// ST1-2013-0000232 2013/01/26 MOD END

		// 請求書用回線場所住所部屋番号
		template.set(EKK0251C030CBSMsg.SKS_YO_KISN_PLACE_AD_RM_NO, (String)work.get("sks_yo_kisn_place_ad_rm_no"));

		// 電話BASホストID
		template.set(EKK0251C030CBSMsg.TEL_BAS_HOST_ID, (String)userData.get("tel_bas_host_id"));

		// 電話VLAN-ID
		template.set(EKK0251C030CBSMsg.TEL_VLAN_ID, (String)userData.get("tel_vlan_id"));

		// VLAN-ID確定フラグ
		template.set(EKK0251C030CBSMsg.VLAN_ID_FIX_FLG, VLAN_ID_FIX_FLG_1);

		// 電話VLAN-ID取込年月日
		template.set(EKK0251C030CBSMsg.TEL_VLAN_ID_TRKM_YMD, (String)JCCBPCommon.getOpeDate(null));

		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 START
//		// 電話VLAN-ID取込年月日（エラー）
//		template.set(EKK0251C030CBSMsg.TEL_VLAN_ID_TRKM_YMD_ERR, (String)userData.get("tel_vlan_id_trkm_ymd"));
		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 END
		
		// 請求書送付先住所変更有無
		template.set(EKK0251C030CBSMsg.SKS_SHS_AD_CHG_UM, (String)work.get("sks_shs_ad_chg_um"));

		// 請求書送付先住所変更希望年月日
		template.set(EKK0251C030CBSMsg.SKS_SHS_AD_CHG_KIBO_YMD, (String)work.get("sks_shs_ad_chg_kibo_ymd"));

		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 START
//		// 請求書送付先住所変更希望年月日（エラー）
//		template.set(EKK0251C030CBSMsg.SKS_SHS_AD_CHG_KIBO_YMD_ERR, (String)work.get("sks_shs_ad_chg_kibo_ymd"));
		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 END
		
		// 契約者住所変更有無
		template.set(EKK0251C030CBSMsg.KSHAD_CHG_UM, (String)work.get("kshad_chg_um"));

		// 契約者住所変更希望年月日
		template.set(EKK0251C030CBSMsg.KSHAD_CHG_KIBO_YMD, (String)work.get("kshad_chg_kibo_ymd"));

		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 START
//		// 契約者住所変更希望年月日（エラー）
//		template.set(EKK0251C030CBSMsg.KSHAD_CHG_KIBO_YMD_ERR, (String)work.get("kshad_chg_kibo_ymd"));
		// 20131205 OM-2013-0004684 障害とは直接関係ないが、マッピング不要のため削除 END
	}
	
	/**
	 * 機器提供サービス契約一覧照会（サービス契約番号）SIF呼び出し
	 * @param param
	 * @param handle
	 * @param paramMap
	 * @param resultHash
	 * @return
	 * @throws Throwable
	 */
	private int callEKK0341B002SC(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> work,
			HashMap<String, Object> resultHash, HashMap<String, Object> userData) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0341B002への呼び出しパラメータ設定
		template = new CAANMsg(EKK0341B002CBSMsg.class.getName());
		mappingEKK0341B002InMsg(template, work);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}
	
// IT2-2016-0000035 ADD START
	/**
	 * 機器提供サービス契約一覧照会（サービス契約番号）SIF呼び出し
	 * @param param
	 * @param handle
	 * @param paramMap
	 * @param resultHash
	 * @return
	 * @throws Throwable
	 */
	private int callEKK0341B002_02SC(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> work,
			HashMap<String, Object> resultHash, HashMap<String, Object> userData) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0341B002への呼び出しパラメータ設定
		template = new CAANMsg(EKK0341B002CBSMsg.class.getName());
		mappingEKK0341B002_02InMsg(template, work);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}
// IT2-2016-0000035 ADD END
	
	/**
	 * templateに対してEKK0341B002の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0341B002InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0341B002CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0341B002CBSMsg.TEMPLATEID, EKK0341B002);
		
		// 機能コード：1　機器提供サービス契約一覧照会（サービス契約番号）
		// OM-2015-0000550 2015/7/17 MOD START
		// template.set(EKK0341B002CBSMsg.FUNC_CODE, FUNC_CD_1);
		template.set(EKK0341B002CBSMsg.FUNC_CODE, FUNC_CD_9);
		// OM-2015-0000550 2015/7/17 MOD END

		// ＫＥＹ＿サービス契約番号
		template.set(EKK0341B002CBSMsg.KEY_SVC_KEI_NO, (String)work.get("svc_kei_no"));
	}

// IT2-2016-0000035 ADD START
	/**
	 * templateに対してEKK0341B002の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0341B002_02InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0341B002CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0341B002CBSMsg.TEMPLATEID, EKK0341B002);
		
		// 機能コード：10　機器提供サービス契約一覧照会（サービス契約番号）
		template.set(EKK0341B002CBSMsg.FUNC_CODE, FUNC_CD_10);

		// ＫＥＹ＿サービス契約番号
		template.set(EKK0341B002CBSMsg.KEY_SVC_KEI_NO, (String)work.get("svc_kei_no"));
	}
// IT2-2016-0000035 ADD END
	
// ▼▼▼ 2013/12/26 IT1-2013-0001749 多機能ルーターに対するＳＯＤが発行されない
	/**
	 * 機器提供サービス契約一覧照会（サービス契約回線内訳）SIFを呼び出し
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param work 条件用Hash
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースのリターンコード
	 * @throws RequestParameterException, SCException 例外時にスローされます
	 */
	private int callEKK0341B504SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> work,
			HashMap<String, Object> resultHash,
			HashMap<String, Object> userData)
			throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;
		
		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//EKK0341B504への呼び出しパラメータ設定
		template = new CAANMsg(EKK0341B504CBSMsg.class.getName());
		mappingEKK0341B504SCInMsg(template, work);
		editBasicCmn(param, template);
		
		//リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		//SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();
		
		//SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		editResultRP(sIFResult, param, userData);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;

	}
	
	/**
	 * templateに対してEKK0341B504の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param work 設定条件
	 * @param requestParam アプリ固有のパラメータ
	 */
	private void mappingEKK0341B504SCInMsg(CAANMsg template, HashMap<String, Object> work)
	{

		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0341B504CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK0341B504CBSMsg.TEMPLATEID, "EKK0341B504");

		//機能コード
		template.set(EKK0341B504CBSMsg.FUNC_CODE, FUNC_CD_1);
		
		//ＫＥＹ＿サービス契約番号
		template.set(EKK0341B504CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, (String)work.get("svc_kei_kaisen_ucwk_no"));

	}
// ▲▲▲ 2013/12/26 IT1-2013-0001749 多機能ルーターに対するＳＯＤが発行されない
	
	/**
	 * オーダ設定一覧照会SIF呼び出し
	 * @param param
	 * @param handle
	 * @param paramMap
	 * @param resultHash
	 * @return
	 * @throws Throwable
	 */
	private int callEKK1041B001SC(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> work,
			HashMap<String, Object> resultHash, HashMap<String, Object> userData) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK1041B001への呼び出しパラメータ設定
		template = new CAANMsg(EKK1041B001CBSMsg.class.getName());
		mappingEKK1041B001InMsg(template, work);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}
	
	/**
	 * templateに対してEKK1041B001の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK1041B001InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK1041B001CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK1041B001CBSMsg.TEMPLATEID, EKK1041B001);
		
		// 機能コード：1　オーダ設定一覧照会
		template.set(EKK1041B001CBSMsg.FUNC_CODE, FUNC_CD_1);

		// ＫＥＹ＿オーダ種別コード
		template.set(EKK1041B001CBSMsg.KEY_ORDER_SBT_CD, KEY_ORDER_SBT_CD_2);
		
		// ＫＥＹ＿サービスオーダコード
		template.set(EKK1041B001CBSMsg.KEY_SVC_ORDER_CD, KEY_SVC_ORDER_CD_23);
		
		// ＫＥＹ＿サービス契約番号
		template.set(EKK1041B001CBSMsg.KEY_SVC_KEI_NO, (String)work.get("svc_kei_no"));
		
		// ＫＥＹ＿サービス契約回線内訳番号
		// 20131205 OM-2013-0004684 サービス契約回線内訳番号の項目名が誤っている MOD START
//		template.set(EKK1041B001CBSMsg.KEY_SVC_KEI_UCWK_NO, 
//				(String)work.get("svc_kei_kaisen_ucwk_no"));
		template.set(EKK1041B001CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, 
				(String)work.get("svc_kei_kaisen_ucwk_no"));
		// 20131205 OM-2013-0004684 サービス契約回線内訳番号の項目名が誤っている MOD END
	}

	// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 START
	/**
	 * サービス契約内訳＜eo光電話＞一覧照会（サービス契約番号）SIF呼び出し
	 * @param param 業務データ取得用I/F
	 * @param handle セッションハンドル
	 * @param work 入力情報（一時使用）
	 * @param resultHash 出力情報
	 * @param userData 入力情報
	 * @return サービス契約内訳＜eo光電話＞一覧照会（サービス契約番号）結果
	 * @throws Throwable 例外が発生した場合
	 */
	private int callEKK0191B001SC(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> work,
			HashMap<String, Object> resultHash, HashMap<String, Object> userData) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0191B001への呼び出しパラメータ設定
		template = new CAANMsg(EKK0191B001CBSMsg.class.getName());
		mappingEKK0191B001InMsg(template, work);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}
	
	/**
	 * templateに対してEKK0191B001の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0191B001InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0191B001CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0191B001CBSMsg.TEMPLATEID, EKK0191B001);
		
		// 機能コード：1　サービス契約内訳＜eo光電話＞一覧照会（サービス契約番号）
// ANK-2768-00-00 MOD START
//		template.set(EKK0191B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_6);


		// 外部指定の機能コードがあれば、それを使用する
		if ((String)work.get("set_func_cd") != null && !"".equals((String)work.get("set_func_cd"))) {
			template.set(EKK0191B001CBSMsg.FUNC_CODE, (String)work.get("set_func_cd"));
		}
		else
		{
			template.set(EKK0191B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_6);
		}
// ANK-2768-00-00 MOD END

		// ＫＥＹ＿サービス契約番号
		template.set(EKK0191B001CBSMsg.KEY_SVC_KEI_NO, (String)work.get("svc_kei_no"));
	}
	// OM-2013-0005090 VLAN-ID変更オーダが紐付いていないVAに対して発行される 2013/12/26 END
	//▼▼▼▼▼【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD START▼▼▼▼▼
	/**
	 * EKK0241B002_回線対象サービス契約一覧照会照会SIFを呼び出します。<br>
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param resultHash 同一回線内訳サービス契約一覧照会結果格納用
	 * @param resultHash 回線対象サービス契約一覧照会照会結果格納用
	 * @param fixedText ユーザ任意文字列	
	 * @return SIF呼び出し結果のステータス
	 * @throws Throwable 例外時にスローします。
	 */
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD START
//	private int callEKK0081B029SC(
	private int callEKK0241B002SC(
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD END
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> work,
			HashMap<String, Object> resultHash,
			HashMap<String, Object> userData
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = this.editInMsgCmn(param);

		// 呼び出しパラメータ設定
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD START
//		template = new CAANMsg(EKK0081B029CBSMsg.class.getName());
//		mappingEKK0081B029InMsg(template, work);		
		template = new CAANMsg(EKK0241B002CBSMsg.class.getName());
		mappingEKK0241B002InMsg(template, work);
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD END
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{ template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング
		editResultRP(sIFResult, param, userData);

		// エラーチェック処理
		errChk(sIFResult);

		resultHash.putAll(getWorkCAANMsg(sIFResult));

		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD START
///**
//	 * templateに対してEKK0081B029_同一回線内訳サービス契約一覧照会の条件に関する部分を設定します。<br>
//	 * 
//	 * @param template テンプレート
//	 * @param work SIF入力項目
//	 */
//	private void mappingEKK0081B029InMsg(CAANMsg template, HashMap<String, Object> work)
//	{
//		// templateID
//		template.set(EKK0081B029CBSMsg.TEMPLATEID, EKK0081B029);
//
//		// ＫＥＹ＿サービス契約番号
//		template.set(EKK0081B029CBSMsg.KEY_SVC_KEI_NO, (String)work.get("user_svc_kei_no"));
//		
//		// 機能コード
//		template.set(EKK0081B029CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
//	}

	/**
	 * templateに対してEKK0241B002_回線対象サービス契約一覧照会照会の条件に関する部分を設定します。<br>
	 * 
	 * @param template テンプレート
	 * @param work SIF入力項目
	 */
	private void mappingEKK0241B002InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// templateID
		template.set(EKK0241B002CBSMsg.TEMPLATEID, EKK0241B002);

		// ＫＥＹ＿サービス契約番号
		template.set(EKK0241B002CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, (String)work.get("svc_kei_kaisen_ucwk_no"));
		
		// 機能コード
		template.set(EKK0241B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
	}
//IT1-2014-0000091同一回線のサービス契約番号が取得できない  MOD END
	/**
	 * サービス契約一意照会サービスIF呼出処理
	 * 
	 * @param param 業務データ取得用I/F
	 * @param handle セッションハンドル
	 * @param work 入力情報（一時使用）
	 * @param resultHash 出力情報
	 * @param userData 入力情報
	 * @return サービス契約一意照会結果
	 * @throws Throwable 例外が発生した場合
	 */
	private int callEKK0081A010SC(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> work,
			HashMap<String, Object> resultHash, HashMap<String, Object> userData) throws Throwable
	{
			HashMap<String, Object> sIFRequest = null;
			CAANMsg template = null;
			ServiceComponentRequestInvoker scCall = null;
			Map<?, ?> sIFResult = null;
			int status = 0;

		
		// サービスIF共通の情報を設定
		sIFRequest = this.editInMsgCmn(param);
		// 呼び出しパラメータ設定
		template = new CAANMsg(EKK0081A010CBSMsg.class.getName());
		mappingEKK0081A010InMsg(template, work,userData);
		editBasicCmn(param, template);
		
		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{ template });
		
		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();
		
		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		
		return status;
		
	}
	/**
	 * templateに対してEKK0081A010_サービス契約一意照会の条件に関する部分を設定します。<br>
	 * 
	 * @param template テンプレート
	 * @param work SIF入力項目
	 */
	private void mappingEKK0081A010InMsg(CAANMsg template, HashMap<String, Object> work,HashMap<String, Object> userData)
	{
		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0081A010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0081A010CBSMsg.TEMPLATEID, EKK0081A010);

		// 機能コード--サービス契約一意照会(ここだけはカレント)
		template.set(EKK0081A010CBSMsg.FUNC_CODE,        JPCModelConstant.FUNC_CD_2);
		// ＫＥＹ＿サービス契約番号
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD START
//		template.set(EKK0081A010CBSMsg.KEY_SVC_KEI_NO,  work.get("eKK0081B029_svc_kei_no"));
		template.set(EKK0081A010CBSMsg.KEY_SVC_KEI_NO,  work.get("eKK0241B002_svc_kei_no"));
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD END
		// ＫＥＹ＿予約適用年月日
		template.set(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, work.get("rsvAplyYmd"));
		// ＫＥＹ＿世代登録年月日時分（形だけの設定）
		template.set(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM, work.get("rsvAplyYmd") + "000000000");
	}
	//▲▲▲▲▲【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD END▲▲▲▲▲
	/**
	 * チェック処理<br>
	 * サービスコンポーネント実行用CAANMsgを返却します。<br>
	 * <br>
	 * 
	 * @param handle セッションハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Throwableがスローされます 。
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		HashMap<String, Object> map = new HashMap<String, Object>();
		// SCインプット共通データ
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		map.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		map.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		map.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		map.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		map.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		map.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		map.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		map.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		map.put(JCMConstants.TEMPLATE_LIST_KEY, null);

		return map;
	}
	
	/**
	 * サービスインターフェイス処理結果(エラー情報)の取得<br>
	 * 業務データ取得・書込用I/Fをそのまま返却します。<br>
	 * <br>
	 * @param param デルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param templates CAANMsgクラス配列
	 * @param returnCode リターンコード
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param,
			CAANMsg[] templates, int returnCode) throws Throwable
	{
		return param;
	}
	
	/**
	 * 業務データの取得処理です。
	 * 
	 * @param rslt SVIFの実行結果データ
	 * @return 業務データ
	 */
	private HashMap<String, Object> getWorkCAANMsg(Map<?, ?> rslt)
	{
		CAANMsg[] templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		return parentTemplate.getMsgData();
	}
	
	/**
	 * Nullマッピングで埋める
	 * @param msg 対象クラス
	 * @param contents 対応クラスのフィールド列挙
	 */
	private void fillCAANMSGNullMapping(CAANMsg msg, Object[][] contents)
	{
		
		//要素ごとのループ
		for(int i = 0 ; i < contents.length ; i++)
		{
			
			Object element = null;
			
			//キーに該当する箇所の取得
			element = contents[i][0];

			//Nullでマッピング
			msg.setNull((String)element);
			
		}
		
	}
	
	/**
	 * 条件部の共通する項目の設定
	 * @param param リクエストパラメータ
	 * @param template template 条件の設定先
	 * @throws RequestParameterException
	 */
	public void editBasicCmn(IRequestParameterReadOnly param, CAANMsg template)
	throws RequestParameterException
	{
		
		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
		
	}
	
	/**
	 * サービスI/F実行用の共通部を設定します<br>
	 * <br>
	 * 
	 * @param param (I) 業務データ取得用I/F
	 * @param msg データ登録内容
	 * @return オプションサービス契約作成数
	 * @throws RequestParameterException
	 * @exception RequestParameterExceptionがスローされます 。
	 */
	private HashMap<String, Object> editInMsgCmn(IRequestParameterReadOnly param) 
	throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		//電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		
		//ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		
		//オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		
		//サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
		
		//依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		
		//依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		
		//依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		
		//オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
				
		return paramMap;
		
	}
	
	/**
	 * エラーチェック処理です。 <br>
	 * 
	 * @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];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// ステータス取得
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if ((0 != returnCode.intValue()) || (0 != templateStatus))
		{
			String errMsg = ERR_MSG;
			throw new SCCallException(errMsg, String.valueOf(returnCode), templateStatus);
		}
	}
	
	/**
	 * <pre>
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 * 
	 * @param msgList CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite editResultRP(Map<?, ?> msgList, IRequestParameterReadWrite param, HashMap<String, Object> inMap)
			throws Throwable
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// テンプレートID、ステータス取得
		String templateId = template.getString(JCMConstants.TEMPLATE_ID_KEY);
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if (returnCode.intValue() != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		/* ユーザデータ情報 */
		//HashMap inMap = (HashMap)param.getData(fixText);
		
		// ユーザデータ情報にエラー情報をマッピング
		Object[][] contents = null;
		
		if (EKK0251A010.equals(templateId))
		{
			contents = new EKK0251A010CBSMsg().getContents();
		}
		else if (EKK0251C030.equals(templateId))
		{
			contents = new EKK0251C030CBSMsg().getContents();
		}
		else if (EKK0341B002.equals(templateId))
		{
			contents = new EKK0341B002CBSMsg().getContents();
		}
		else if (EKK1041B001.equals(templateId))
		{
			contents = new EKK1041B001CBSMsg().getContents();
		}
// ▼▼▼ 2013/12/26 IT1-2013-0001749 多機能ルーターに対するＳＯＤが発行されない
		else if (EKK0341B504.equals(templateId))
		{
			contents = new EKK0341B504CBSMsg().getContents();
		}
// ▲▲▲ 2013/12/26 IT1-2013-0001749 多機能ルーターに対するＳＯＤが発行されない
//▼▼▼▼▼【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD START▼▼▼▼▼
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD START
//		else if (EKK0081B029.equals(templateId))
//		{
//			contents = new EKK0081B029CBSMsg().getContents();
		else if (EKK0241B002.equals(templateId))
		{
			contents = new EKK0241B002CBSMsg().getContents();
		}
//IT1-2014-0000091 同一回線のサービス契約番号が取得できない MOD END
		else if (EKK0081A010.equals(templateId))
		{
			contents = new EKK0081A010CBSMsg().getContents();
		}
		else if (EKK1091D010.equals(templateId))
		{
			contents = new EKK1091D010CBSMsg().getContents();
		}
		
//▲▲▲▲▲【ANK-1705-00-00】VLAN-ID情報の表示対応 ADD END▲▲▲▲▲
// ANK-2768-00-00 ADD START
		else if (EKK0081B029.equals(templateId))
		{
				contents = new EKK0081B029CBSMsg().getContents();
		}
		else if (EKU0011A010.equals(templateId))
		{
				contents = new EKU0011A010CBSMsg().getContents();
		}
		else if (EKU0081B030.equals(templateId))
		{
				contents = new EKU0081B030CBSMsg().getContents();
		}
		else if (EKK0341B025.equals(templateId))
		{
				contents = new EKK0341B025CBSMsg().getContents();
		}
		else if (EKK0341A010.equals(templateId))
		{
				contents = new EKK0341A010CBSMsg().getContents();
		}
		else if (EKK0191A010.equals(templateId))
		{
				contents = new EKK0191A010CBSMsg().getContents();
		}
		else if (EKK2811B010.equals(templateId))
		{
				contents = new EKK2811B010CBSMsg().getContents();
		}
// ▽▽▽ OM-2019-0000392 ADD START
		else if (EKK0341B021.equals(templateId))
		{
			contents = new EKK0341B021CBSMsg().getContents();
		}
// △△△ OM-2019-0000392 ADD END
// ANK-2768-00-00 ADD START		
		for (int i = 0; contents != null && i < contents.length; i++)
		{
			String element = null;
			element = (String)contents[i][0];
			if (element.indexOf("_err") > 0)
			{
				if (!template.isNull(element))
				{
					if (!inMap.containsKey(element))
					{
						inMap.put(element, template.getString(element));
					}
				}
			}
		}

		// エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}
// ANK-2768-00-00 ADD START
	/**
	 * EKK0081B029_同一回線内訳サービス契約一覧照会
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param rsvAplyYmd 予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0081B029SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String SvcKeiNo,
			HashMap<String, Object> resultHash,
			HashMap<String, Object> userData)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;

		Map<?, ?> sIFResult = null;
		int status = 0;
		
		// サービスIF共通の情報を設定
		sIFRequest = this.editInMsgCmn(param);
		// 呼び出しパラメータ設定
		template = new CAANMsg(EKK0081B029CBSMsg.class.getName());
		mappingEKK0081B029InMsg(template, SvcKeiNo, userData);
		editBasicCmn(param, template);
		
		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{ template });
		
		// SIFの呼び出し
		ServiceComponentRequestInvoker scCall = null;
		scCall = new ServiceComponentRequestInvoker();
		sIFResult = scCall.run(sIFRequest, handle);

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();
		
		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}
	
	/**
	 * templateに対してEKK0081B029_同一回線内訳サービス契約一覧照会の条件に関する部分を設定します。<br>
	 * 
	 * @param template テンプレート
	 * @param work SIF入力項目
	 */
	private void mappingEKK0081B029InMsg(CAANMsg template, String svcKeiNo, HashMap<String, Object> userData)
	{
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK0081B029CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0081B029CBSMsg.TEMPLATEID, "EKK0081B029");

		// 機能コード
		template.set(EKK0081B029CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);	// 世代指定

		// ＫＥＹ＿サービス契約番号
		template.set(EKK0081B029CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		
		String key_kisuw_stdardymd = JCCBPCommon.getOpeDate(null);
		
		// ＫＥＹ＿回線内訳基準年月日
		template.set(EKK0081B029CBSMsg.KEY_KISUW_STDARDYMD, key_kisuw_stdardymd);
		
	}
	
	/**
	 * EKU0011A010_工事案件一意照会の実施IF
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param rsvAplyYmd 予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKU0011A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kojiakNo,
			HashMap<String, Object> resultHash,
			HashMap<String, Object> userData)
			throws Throwable
	{
		
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;
		
		// サービスIF共通の情報を設定
		sIFRequest = this.editInMsgCmn(param);
		// 呼び出しパラメータ設定
		template = new CAANMsg(EKU0011A010CBSMsg.class.getName());
		mappingEKU0011A010InMsg(template, kojiakNo, userData);
		editBasicCmn(param, template);
		
		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{ template });

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();
		
		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}
	
	/**
	 * templateに対してEKU0011A010_工事案件一意照会の条件に関する部分を設定します。<br>
	 * 
	 * @param template テンプレート
	 * @param work SIF入力項目
	 */
	private void mappingEKU0011A010InMsg(CAANMsg template, String kojiakNo, HashMap<String, Object> userData)
	{
		
		// テンプレートID(SIFのID)
		template.set(EKU0011A010CBSMsg.TEMPLATEID, EKU0011A010);

		// 機能コード
		template.set(EKU0011A010CBSMsg.FUNC_CODE, "1");

		// ＫＥＹ＿サービス契約番号
		template.set(EKU0011A010CBSMsg.KEY_KOJIAK_NO, kojiakNo);
		
	}
	
	/**
	 * EKU0011A010_工事案件一意照会の実施IF
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param rsvAplyYmd 予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKU0081B030SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> work,
			HashMap<String, Object> resultHash,
			HashMap<String, Object> userData)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;

		Map<?, ?> sIFResult = null;
		int status = 0;
		
		// サービスIF共通の情報を設定
		sIFRequest = this.editInMsgCmn(param);
		// 呼び出しパラメータ設定
		template = new CAANMsg(EKU0081B030CBSMsg.class.getName());
		mappingEKU0081B030InMsg(template, work, userData);
		editBasicCmn(param, template);
		
		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{ template });
		
		// SIFの呼び出し
		ServiceComponentRequestInvoker scCall = null;
		scCall = new ServiceComponentRequestInvoker();
		sIFResult = scCall.run(sIFRequest, handle);

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();
		
		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}
	
	/**
	 * templateに対してEKU0011A010_工事案件一意照会の条件に関する部分を設定します。<br>
	 * 
	 * @param template テンプレート
	 * @param work SIF入力項目
	 */
	private void mappingEKU0081B030InMsg(CAANMsg template,HashMap<String, Object> work, HashMap<String, Object> userData)
	{
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKU0081B030CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKU0081B030CBSMsg.TEMPLATEID, "EKU0081B030");

		// 機能コード
		template.set(EKU0081B030CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);	

		// ＫＥＹ＿サービス契約番号
		template.set(EKU0081B030CBSMsg.KEY_SVC_KEI_NO, work.get("key_svc_kei_no"));
		
		// ＫＥＹ＿サービス契約回線内訳番号
		template.set(EKU0081B030CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, work.get("svc_kei_kaisen_ucwk_no"));
		
	}
	
	/**
	 * EKU0011A010_工事案件一意照会の実施IF
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param rsvAplyYmd 予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEZM0321A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String key_work_param_id,
			HashMap<String, Object> resultHash,
			HashMap<String, Object> userData)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;

		Map<?, ?> sIFResult = null;
		int status = 0;
		
		// サービスIF共通の情報を設定
		sIFRequest = this.editInMsgCmn(param);
		// 呼び出しパラメータ設定
		template = new CAANMsg(EZM0321A010CBSMsg.class.getName());
		mappingEZM0321A010InMsg(template, key_work_param_id, userData);
		editBasicCmn(param, template);
		
		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{ template });
		
		// SIFの呼び出し
		ServiceComponentRequestInvoker scCall = null;
		scCall = new ServiceComponentRequestInvoker();
		sIFResult = scCall.run(sIFRequest, handle);

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();
		
		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}
	
	/**
	 * templateに対してEKU0011A010_工事案件一意照会の条件に関する部分を設定します。<br>
	 * 
	 * @param template テンプレート
	 * @param work SIF入力項目
	 */
	private void mappingEZM0321A010InMsg(CAANMsg template, String key_work_param_id, HashMap<String, Object> userData)
	{
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EZM0321A010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EZM0321A010CBSMsg.TEMPLATEID, "EZM0321A010");

		// 機能コード
		template.set(EZM0321A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);	

		// ＫＥＹ＿業務パラメータID
		template.set(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID, key_work_param_id);
		
	}
	
	/**
	 * EKU0011A010_工事案件一意照会の実施IF
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param rsvAplyYmd 予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341B025SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svcKeiNo,
			HashMap<String, Object> resultHash,
			HashMap<String, Object> userData)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;

		Map<?, ?> sIFResult = null;
		int status = 0;
		
		// サービスIF共通の情報を設定
		sIFRequest = this.editInMsgCmn(param);
		// 呼び出しパラメータ設定
		template = new CAANMsg(EKK0341B025CBSMsg.class.getName());
		mappingEKK0341B025InMsg(template, svcKeiNo, userData);
		editBasicCmn(param, template);
		
		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{ template });
		
		// SIFの呼び出し
		ServiceComponentRequestInvoker scCall = null;
		scCall = new ServiceComponentRequestInvoker();
		sIFResult = scCall.run(sIFRequest, handle);

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();
		
		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}
	
	
	/**
	 * templateに対してEKU0011A010_工事案件一意照会の条件に関する部分を設定します。<br>
	 * 
	 * @param template テンプレート
	 * @param work SIF入力項目
	 */
	private void mappingEKK0341B025InMsg(CAANMsg template,String svcKeiNo, HashMap<String, Object> userData)
	{
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK0341B025CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0341B025CBSMsg.TEMPLATEID, "EKK0341B025");

		// 機能コード
		template.set(EKK0341B025CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);	

		// ＫＥＹ＿サービス契約番号
		template.set(EKK0341B025CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		
	}
	
	/**
	 * EKU0011A010_工事案件一意照会の実施IF
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param rsvAplyYmd 予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String geneAddDtm,
			String rsvAplyYmd,
			HashMap<String, Object> resultHash,
			HashMap<String, Object> userData)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;

		Map<?, ?> sIFResult = null;
		int status = 0;
		
		// サービスIF共通の情報を設定
		sIFRequest = this.editInMsgCmn(param);
		// 呼び出しパラメータ設定
		template = new CAANMsg(EKK0341A010CBSMsg.class.getName());
		mappingEKK0341A010InMsg(template, kktkSvcKeiNo, geneAddDtm, rsvAplyYmd, userData);
		editBasicCmn(param, template);
		
		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{ template });
		
		// SIFの呼び出し
		ServiceComponentRequestInvoker scCall = null;
		scCall = new ServiceComponentRequestInvoker();
		sIFResult = scCall.run(sIFRequest, handle);

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();
		
		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}
	
	/**
	 * templateに対してEKU0011A010_工事案件一意照会の条件に関する部分を設定します。<br>
	 * 
	 * @param template テンプレート
	 * @param work SIF入力項目
	 */
	private void mappingEKK0341A010InMsg(CAANMsg template, String kktkSvcKeiNo, String geneAddDtm, String rsvAplyYmd, HashMap<String, Object> userData)
	{
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK0341A010CBSMsg().getContents());

		template.set(EKK0341A010CBSMsg.TEMPLATEID, "EKK0341A010");

		// テンプレートID(SIFのID)
		if (!"".equals(geneAddDtm)) {
			// 機能コード
			template.set(EKK0341A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
			// ＫＥＹ＿世代年月日時分秒
			template.set(EKK0341A010CBSMsg.KEY_GENE_ADD_DTM, geneAddDtm);
		}
		else
		{
			// 機能コード
			template.set(EKK0341A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);
			// ＫＥＹ＿世代年月日時分秒
			template.set(EKK0341A010CBSMsg.KEY_RSV_APLY_YMD, rsvAplyYmd);
		}
		
		// ＫＥＹ＿機器提供サービス契約番号
		template.set(EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo);
	}
	
	/**
	 * EKK2811B010_機器オプションサービス契約一覧照会（機器提供ＳＶ）
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param rsvAplyYmd 予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK2811B010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String geneAddDtm,
			String rsvAplyYmd,
			HashMap<String, Object> resultHash,
			HashMap<String, Object> userData)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;

		Map<?, ?> sIFResult = null;
		int status = 0;
		
		// サービスIF共通の情報を設定
		sIFRequest = this.editInMsgCmn(param);
		// 呼び出しパラメータ設定
		template = new CAANMsg(EKK2811B010CBSMsg.class.getName());
		mappingEKK2811B010InMsg(template, kktkSvcKeiNo, geneAddDtm, rsvAplyYmd, userData);
		editBasicCmn(param, template);
		
		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{ template });
		
		// SIFの呼び出し
		ServiceComponentRequestInvoker scCall = null;

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();
		
		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}
	
	/**
	 * templateに対してEKU0011A010_工事案件一意照会の条件に関する部分を設定します。<br>
	 * 
	 * @param template テンプレート
	 * @param work SIF入力項目
	 */
	private void mappingEKK2811B010InMsg(CAANMsg template, String kktkSvcKeiNo, String geneAddDtm, String rsvAplyYmd, HashMap<String, Object> userData)
	{
		// nullマッピングを実施
		fillCAANMSGNullMapping(template, new EKK2811B010CBSMsg().getContents());

		template.set(EKK2811B010CBSMsg.TEMPLATEID, "EKK2811B010");
		
		// 機能コード
		template.set(EKK2811B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		
		// ＫＥＹ＿機器提供サービス契約番号
		template.set(EKK2811B010CBSMsg.KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo);
	}
	
	/**
	 * サービス契約内訳＜eo光電話＞一覧照会（サービス契約番号）SIF呼び出し
	 * @param param 業務データ取得用I/F
	 * @param handle セッションハンドル
	 * @param work 入力情報（一時使用）
	 * @param resultHash 出力情報
	 * @param userData 入力情報
	 * @return サービス契約内訳＜eo光電話＞一覧照会（サービス契約番号）結果
	 * @throws Throwable 例外が発生した場合
	 */
	private int callEKK0191A010SC(IRequestParameterReadWrite param, SessionHandle handle, HashMap<String, Object> work,
			HashMap<String, Object> resultHash, HashMap<String, Object> userData) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0191B001への呼び出しパラメータ設定
		template = new CAANMsg(EKK0191A010CBSMsg.class.getName());
		mappingEKK0191A010InMsg(template, work);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}
	
	/**
	 * templateに対してEKK0191B001の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0191A010InMsg(CAANMsg template, HashMap<String, Object> work)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0191A010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0191B001CBSMsg.TEMPLATEID, EKK0191A010);
		
		// 機能コード：2　カレント検索
		template.set(EKK0191A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);

		// ＫＥＹ＿サービス契約内訳番号
		template.set(EKK0191A010CBSMsg.KEY_SVC_KEI_UCWK_NO, (String)work.get("svc_kei_ucwk_no"));
		
	}
	
	/**
	 * 進捗登録SIF呼び出し
	 * @param param
	 * @param handle
	 * @param resultHash
	 * @param work
	 * @return
	 * @throws Throwable
	 */
	private int callEKK0191C060SC(IRequestParameterReadWrite param, SessionHandle handle,
			HashMap<String, Object> resultHash, HashMap<String, Object> work, HashMap<String, Object> userData,
			CAANMsg[] eKK0191A010List) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0191C060への呼び出しパラメータ設定
		template = new CAANMsg(EKK0191C060CBSMsg.class.getName());
		mappingEKK0191C060InMsg(template, work, eKK0191A010List);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}
	
	
	/**
	 * templateに対してEKK1091D010の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0191C060InMsg(CAANMsg template, HashMap work, CAANMsg[] eKK0191A010List)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0191C060CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0191C060CBSMsg.TEMPLATEID, EKK0191C060);

		// 機能コード
		template.set(EKK0191C060CBSMsg.FUNC_CODE, FUNC_CD_1);
		
		
		// サービス契約内訳<eo光電話>一意照会の結果を転記
		if (eKK0191A010List != null && eKK0191A010List.length > 0)
		{
			createUpdMsg(template, eKK0191A010List[0], new EKK0191C060CBSMsg().getContents());
		}

		// サービス契約内訳番号
		template.set(EKK0191C060CBSMsg.SVC_KEI_UCWK_NO, work.get(EKK0191A010CBSMsg1List.SVC_KEI_UCWK_NO));
		
		// 申込明細番号
		template.set(EKK0191C060CBSMsg.MSKM_DTL_NO, work.get("mskm_dtl_no"));
		
		// 異動区分
		template.set(EKK0191C060CBSMsg.IDO_DIV, work.get("ido_div"));
		
		// VA宅内機器型式コード
		template.set(EKK0191C060CBSMsg.VA_TAKNKIKI_MODEL_CD, work.get("va_taknkiki_model_cd"));
		
		// VA機器製造番号
		template.set(EKK0191C060CBSMsg.VA_KIKI_SEIZO_NO, work.get("va_kiki_seizo_no"));
		
		// VAポート番号
		template.set(EKK0191C060CBSMsg.VA_PORT_NO, work.get("va_port_no"));
		
		// 更新年月日時分秒(更新前)
		template.set(EKK0191C060CBSMsg.UPD_DTM_BF, work.get(EKK0191A010CBSMsg1List.LAST_UPD_DTM));
		
		// 事務手数料自動適用要否
		template.set(EKK0191C060CBSMsg.RULE0059_AUTO_APLY, work.get("rule0059_auto_aply"));
		
		// 同番移転判定コード
		template.set(EKK0191C060CBSMsg.DOBANITEN_JDG_CD, work.get(EKK0191A010CBSMsg1List.DOBANITEN_JDG_CD));
		
		// 緊急通報用契約者個別指定フラグ
		template.set(EKK0191C060CBSMsg.EMG_KSH_KSITEI_FLG, work.get(EKK0191A010CBSMsg1List.EMG_KSH_KSITEI_FLG));
		
		// VA機器変更番号
		template.set(EKK0191C060CBSMsg.VA_KIKI_CHG_NO, work.get("va_kiki_chg_no"));

	}
	/**
	 * 照会系メッセージから更新メッセージを作成する
	 * 
	 * @param updMsg 更新メッセージ
	 * @param shokaiMsg 照会メッセージ
	 * @param updContents 更新コンテンツ
	 */
	public void createUpdMsg(CAANMsg updMsg, CAANMsg shokaiMsg, Object[][] updContents)
	{
		if (updMsg == null || shokaiMsg == null)
		{
			return;
		}
		
		for(int i = 0 ; updContents != null && i < updContents.length ; i++)
		{
			String element = null;
			element = (String)updContents[i][0];
			if (element.indexOf("_err") > 0)
			{
				element = element.substring(0, element.indexOf("_err"));
				if (shokaiMsg.containsKeyOfMsgData(element))
				{
					if (shokaiMsg.isNull(element))
					{
						updMsg.setNull(element);
					}
					else
					{
						updMsg.set(element, shokaiMsg.getObject(element));
					}
				}
			}
		}
	}
// ANK-2768-00-00 ADD END
// ▽▽▽ OM-2019-0000392 ADD START
	/**
	 * 機器提供サービス契約一覧照会（サービス契約番号）SIF呼び出し
	 * @param param
	 * @param handle
	 * @param paramMap
	 * @param resultHash
	 * @return
	 * @throws Throwable
	 */
	private int callEKK0341B021SC(SessionHandle handle,
			IRequestParameterReadWrite param,
			String svcKeiNo ,
			HashMap<String, Object> resultHash, 
			HashMap<String, Object> userData) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0341B021への呼び出しパラメータ設定
		template = new CAANMsg(EKK0341B021CBSMsg.class.getName());
		
		mappingEKK0341B021InMsg(template, svcKeiNo);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);
		// エラーマッピング
		editResultRP(sIFResult, param, userData);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		return status;
	}
	
	/**
	 * templateに対してEKK0341B021の条件に関する部分を設定する
	 * 
	 * @param template
	 * @param inHash
	 */
	private void mappingEKK0341B021InMsg(CAANMsg template, String svcKeiNo)
	{
		// 全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0341B021CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0341B021CBSMsg.TEMPLATEID, EKK0341B021);
		
		// 機能コード
		template.set(EKK0341B021CBSMsg.FUNC_CODE, FUNC_CD_1);

		// ＫＥＹ＿サービス契約番号
		template.set(EKK0341B021CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
	}
// △△△ OM-2019-0000392 ADD END
}
