/********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************
 *＜プログラム内容＞
 *  システム名      ：eo顧客基幹システム
 *  モジュール名    ：番ポ工事回復
 *  ソースファイル名：JKKBmpKojiKaifkCC.java
 *  作成者          ：FJ
 *  日付            ：2013年12月29日
 *＜機能概要＞
 *  サービス契約回復時の番ポ工事の回復を行う部品クラス。
 *＜修正履歴＞
 *  バージョン  修正日      修正者      修正内容
 *  v6.00.00    2013/12/29  FJ          新規作成(OM-2013-0005115)
 *  v8.00.00    2014/03/27  FJ）藤本    【OM-2013-0002656】対応履歴情報に「テスト用全機能利用権限者」と登録される
 * v25.00.00    2016/07/11  FJ）江藤    【OM-2016-0001535】番ポ工事のルーティング番号不正
 * v72.00.01	2024/10/24	FJ) 吉田賢  【ANK-4494-00-00】【eo定期】 双方向番ポ対応 STEP2
*  v72.01.00	2025/01/17	FJ) 藤井    【#86310】番ポ工事スキーマの移転元通信事業者コード、移転元通信事業者拠点コードがクリアされる
 *
 ********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKAddBmpTaiorrkiConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKBmpKojiKaifkConstCC;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKCommonUtil;
import eo.ejb.cbs.cbsmsg.ECK0201B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
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.EKK0251B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0251B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ETU0011B018CBSMsg;
import eo.ejb.cbs.cbsmsg.ETU0011B018CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ETU0011D010CBSMsg;
import eo.ejb.cbs.cbsmsg.ETU0021B017CBSMsg;
import eo.ejb.cbs.cbsmsg.ETU0101B020CBSMsg;
import eo.ejb.cbs.cbsmsg.ETU0121B011CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0121A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0121A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0301A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0301A010CBSMsg1List;

@SuppressWarnings({"unchecked"})
public class JKKBmpKojiKaifkCC extends AbstractCommonComponent {

	/** エラーメッセージ：パラメータ設定不正 */
	private static final String ERR_MSG_PARAM = "リクエストパラメータに誤りがあります。";
	
	/** エラーメッセージ */
	public static final String ERR_MSG = "INVALID_RETURN_MESSAGE";
	
	/** 番ポ申込通知 */
	private static final String MSKM_TCHI = "01";

	/** SC呼び出し部品 */
	ServiceComponentRequestInvoker scCall = null;
	
	/** サービスインタフェース呼び出しで使用するマッパー群 */
	private JKKBmpKojiKaifkMapperCC mapper = null;
	
	// #86310 ADD START
	/** 業務パラメータ管理ID : ＥＮＵＭ−ＳＯＤ・ドメイン */
	private static final String SC_ENUMSOD_DOMAIN = "SC_ENUMSOD_DOMAIN";

	/** 業務パラメータ管理ID : 申請担当電話番号 */
	private static final String TU_BMP_TNT_TELNO = "TU_BMP_TNT_TELNO";
	// #86310 ADD END

	
	/**
	 * 番ポ工事回復の初期処理です。<br>
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @throws Throwable 
	 */
	private void init(IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		// マッパーの初期化
		if (null == this.mapper)
		{
			this.mapper = new JKKBmpKojiKaifkMapperCC();
		}
		
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		if (null == this.scCall)
		{
			this.scCall = new ServiceComponentRequestInvoker();
		}

		// リターンコードに正常を設定
		param.setControlMapData(SCControlMapKeys.RETURN_CODE, JCMConstants.RET_NORMAL);
	}

	/**
	 * 番ポ工事回復<br>
	 * 回復した番ポ番号に紐付く有効な番ポ工事が存在しない場合、<br>
	 * 番ポ工事の再登録を行い、対応履歴に登録します。<br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite bmpKojiKaifk(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
			throws Throwable
	{
		
		init(param, fixedText);
		
		// 入力パラメータチェック処理
		String errMsg = chkInput(handle, param, fixedText);
		
		if (!JKKCommonUtil.isNull(errMsg))
		{
			throw new CCException("", new SCCallException(errMsg, String.valueOf(9051), 8011));
		}
		
		// 対象データ取得
		HashMap<String, Object> trgtData = (HashMap<String, Object>)param.getData(fixedText);
		
		// INPUT.サービス契約番号
		String inSvcKeiNo = (String)trgtData.get(JKKBmpKojiKaifkConstCC.SVC_KEI_NO);
//		// INPUT.異動区分(必須項目ですが、現在未使用)
//		String inIdoDiv = (String)trgtData.get(JKKBmpKojiKaifkConstCC.IDO_DIV);
//		// INPUT.申込明細番号(必須項目ですが、現在未使用)
//		String inMskmDtlNo = (String)trgtData.get(JKKBmpKojiKaifkConstCC.MSKM_DTL_NO);
		
		// サービス契約一意照会
		HashMap<String, Object> inMapEKK0081A010 = mapper.editInMsgEKK0081A010(param, JPCModelConstant.FUNC_CD_2, (String)trgtData.get(JKKBmpKojiKaifkConstCC.SVC_KEI_NO));
		CAANMsg outMapEKK0081A010 = callSvcInter(handle, param, fixedText, inMapEKK0081A010, new EKK0081A010CBSMsg().getContents());
		// 対象外チェック
		if (chkTg(handle, param, fixedText, outMapEKK0081A010))
		{
			return param;
		}
		
		// 番ポ工事登録対象のサービス契約内訳(EKK0191B001の結果を格納)
		List<Map<String, Object>> addBmpKojiUcwkList = new ArrayList<Map<String, Object>>();
		
		// サービス契約内訳＜eo光電話＞一覧照会（サービス契約番号）
		HashMap<String, Object> inMapEKK0191B001 = mapper.editInMsgEKK0191B001(
													param
													,JPCModelConstant.FUNC_CD_4	// ※番号変更中に解約→回復された内訳も取得するため機能コード:4を指定
													,inSvcKeiNo
													);
		CAANMsg outMapEKK0191B001 = callSvcInter(handle, param, fixedText, inMapEKK0191B001, new EKK0191B001CBSMsg().getContents());
		CAANMsg[] rsltMsgEKK0191B001List = outMapEKK0191B001.getCAANMsgList(EKK0191B001CBSMsg.EKK0191B001CBSMSG1LIST);
		
		if (rsltMsgEKK0191B001List != null && rsltMsgEKK0191B001List.length > 0)
		{
			for (CAANMsg rsltMsgEKK0191B001 : rsltMsgEKK0191B001List)
			{
				boolean isExecuteAddBmpKoji = false;	// 番ポ工事の登録を行う場合true
				
				// サービス契約内訳.番ポ有無
				String ucwkBmpUm = rsltMsgEKK0191B001.getString(EKK0191B001CBSMsg1List.BMP_UM);
				
				// サービス契約内訳.サービス契約内訳ステータス
				String ucwkSvcKeiUcwkStat = rsltMsgEKK0191B001.getString(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_STAT);
				
				// 手続中の契約状態へ回復した番ポ有のサービス契約内訳の場合
				// ※異動区分：番号回復時は、番号回復していない方のサービス契約内訳も取得されるが、
				//   番ポ工事が存在すれば新たに登録することはないので、回復した番ポ番号を厳密には判定していない
				// ※住所変更の場合、番ポ番号の内訳は受付済で作成されるため、受付済も対象としている。
				if (JKKStrConst.CD_DIV_UM_ARI.equals(ucwkBmpUm)
						&& JKKStrConst.CD00037_SVCTK_CHU.compareTo(ucwkSvcKeiUcwkStat) > 0
					)
				{
					// 番ポ工事一覧照会（番ポ申込書タイプ）
					HashMap<String, Object> inMapETU0011B018 = mapper.editInMsgETU0011B018(
																param
																,JPCModelConstant.FUNC_CD_1
																,inSvcKeiNo
																,(String)rsltMsgEKK0191B001.getString(EKK0191B001CBSMsg1List.TELNO)
																,(String)rsltMsgEKK0191B001.getString(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_NO)
																);
					CAANMsg outMapETU0011B018 = callSvcInter(handle, param, fixedText, inMapETU0011B018, new EKK0191B001CBSMsg().getContents());
					
					CAANMsg[] rsltMsgETU0011B018List = outMapETU0011B018.getCAANMsgList(ETU0011B018CBSMsg.ETU0011B018CBSMSG1LIST);
					
					boolean isExistsBmpKoji = false;	// 仕掛中または完了している番ポ工事が存在する場合true
					
					if (rsltMsgETU0011B018List != null && rsltMsgETU0011B018List.length > 0)
					{
						
						for (CAANMsg rsltMsgETU0011B018 : rsltMsgETU0011B018List)
						{
							String bmpKojiStat = rsltMsgETU0011B018.getString(ETU0011B018CBSMsg1List.BMP_KOJI_STAT);
							
							if ("050".compareTo(bmpKojiStat) >= 0)
							{
								// 有効な番ポ工事が存在する場合、
								isExistsBmpKoji = true;
								break;
							}
						}
						
						if (!isExistsBmpKoji)
						{
							// 有効な番ポ工事が存在しない場合、番ポ工事の登録を行う
							isExecuteAddBmpKoji = true;
						}
						else
						{
							// 有効な番ポ工事が存在する場合、
							// 番ポ工事登録の対象外
						}
					}
					else
					{
						// そもそも番ポ工事が存在しない場合は、まだ番ポ工事を登録できる契約状態ではないため、
						// 番ポ工事登録の対象外
					}
				}
				else
				{
					// 番ポ無 または
					// 番ポ有でサービス提供中以上の契約状態の場合、
					// 番ポ工事登録の対象外
				}
				
				if (isExecuteAddBmpKoji)
				{
					addBmpKojiUcwkList.add(rsltMsgEKK0191B001.getHashMap());
				}
			}
		}
		
		// 番ポ工事、対応履歴の登録
		if (addBmpKojiUcwkList != null && addBmpKojiUcwkList.size() > 0)
		{
			// サービス契約回線内訳一覧照会（現在利用中）
			HashMap<String, Object> inMapEKK0251B003 = mapper.editInMsgEKK0251B003(
														param
														,JPCModelConstant.FUNC_CD_2
														,inSvcKeiNo
														);
			CAANMsg outMapEKK0251B003 = callSvcInter(handle, param, fixedText, inMapEKK0251B003, new EKK0251B003CBSMsg().getContents());
			
			// 連絡先一覧照会
			HashMap<String, Object> inMapECK0201B001 = mapper.editInMsgECK0201B001(
														param
														,JPCModelConstant.FUNC_CD_1
														,getRsltMsgListValue(outMapEKK0081A010, EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST, EKK0081A010CBSMsg1List.SYSID)
														);
			CAANMsg outMapECK0201B001 = callSvcInter(handle, param, fixedText, inMapECK0201B001, new ECK0201B001CBSMsg().getContents());

			// OM-2013-0002656 対応履歴情報に「テスト用全機能利用権限者」と登録される 2014/03/27 START
			String orgCd = (String)trgtData.get(JKKBmpKojiKaifkConstCC.ORG_CD);
			String orgNm = (String)trgtData.get(JKKBmpKojiKaifkConstCC.ORG_NM);
			// OM-2013-0002656 対応履歴情報に「テスト用全機能利用権限者」と登録される 2014/03/27 END
			for (int i = 0; i < addBmpKojiUcwkList.size(); i++)
			{
				
				Map<String, Object> addBmpKojiUcwk = addBmpKojiUcwkList.get(i);
				String svcKeiUcwkNo = (String)addBmpKojiUcwk.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_NO);
				
				// サービス契約内訳<eo光電話>一意照会
				HashMap<String, Object> inMapEKK0191A010 = mapper.editInMsgEKK0191A010(
															param
															,JPCModelConstant.FUNC_CD_2
															,svcKeiUcwkNo
															);
				CAANMsg outMapEKK0191A010 = callSvcInter(handle, param, fixedText, inMapEKK0191A010, new EKK0191A010CBSMsg().getContents());
				

				// 番ポ工事登録
				addBmpKoji(handle, param, fixedText, outMapEKK0191A010, outMapEKK0251B003, outMapECK0201B001);
				
				// 対応履歴登録
				addTaiorrk(handle 
							,param
							,fixedText 
							,MSKM_TCHI 
							,getRsltMsgListValue(outMapEKK0081A010, EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST, EKK0081A010CBSMsg1List.SYSID) 
							,null
							,JCCBPCommon.getOpeDate(null) 
							,null
							,getRsltMsgListValue(outMapEKK0191A010, EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST, EKK0191A010CBSMsg1List.TELNO)
							,getRsltMsgListValue(outMapEKK0251B003, EKK0251B003CBSMsg.EKK0251B003CBSMSG1LIST, EKK0251B003CBSMsg1List.KAISEN_PLACE_AD_CD) 
							,inSvcKeiNo 
							,null
							// OM-2013-0002656 対応履歴情報に「テスト用全機能利用権限者」と登録される 2014/03/27 START
							,orgCd
							,orgNm
							// OM-2013-0002656 対応履歴情報に「テスト用全機能利用権限者」と登録される 2014/03/27 END
							);
			}
		}
		
		// 処理終了
		return param;
	}
	
	/**
	 * 番ポ工事登録
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param outMapEKK0191A010 サービス契約内訳<eo光電話>一意照会結果
	 * @param outMapEKK0251B003 サービス契約回線内訳一覧照会（現在利用中）結果
	 * @param outMapECK0201B001 連絡先一覧照会結果	 
	 * @throws Throwable 
	 */
	private void addBmpKoji(
			SessionHandle handle
			,IRequestParameterReadWrite param
			,String fixedText
			,CAANMsg outMapEKK0191A010
			,CAANMsg outMapEKK0251B003
			,CAANMsg outMapECK0201B001
			
	) throws Throwable
	{
		// 電話番号一意照会
		HashMap<String, Object> inMapEZM0121A010 = mapper.editInMsgEZM0121A010(
													param
													,JPCModelConstant.FUNC_CD_1
													,getRsltMsgListValue(outMapEKK0191A010, EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST, EKK0191A010CBSMsg1List.TELNO)
													);
		CAANMsg outMapEZM0121A010 = callSvcInter(handle, param, fixedText, inMapEZM0121A010, new EZM0121A010CBSMsg().getContents());
		
		// 局番一意照会
		HashMap<String, Object> inMapEZM0301A010 = mapper.editInMsgEZM0301A010(
													param
													,JPCModelConstant.FUNC_CD_1
													,getRsltMsgListValue(outMapEZM0121A010, EZM0121A010CBSMsg.EZM0121A010CBSMSG1LIST, EZM0121A010CBSMsg1List.KYOKU_NO)
													);
		CAANMsg outMapEZM0301A010 = callSvcInter(handle, param, fixedText, inMapEZM0301A010, new EZM0301A010CBSMsg().getContents());
	
		// 住所対象番号区画一意照会
		HashMap<String, Object> inMapEZM0091A010 = mapper.editInMsgEZM0091A010(
													param
													,JPCModelConstant.FUNC_CD_2
													,getRsltMsgListValue(outMapEKK0251B003, EKK0251B003CBSMsg.EKK0251B003CBSMSG1LIST, EKK0251B003CBSMsg1List.KAISEN_PLACE_AD_CD)
													,getRsltMsgListValue(outMapEZM0301A010, EZM0301A010CBSMsg.EZM0301A010CBSMSG1LIST, EZM0301A010CBSMsg1List.NO_KUKAKU_CD)
													);
		CAANMsg outMapEZM0091A010 = callSvcInter(handle, param, fixedText, inMapEZM0091A010, new EZM0301A010CBSMsg().getContents());

		// 同番移転一覧照会（サービス契約内訳番号）２
		HashMap<String, Object> inMapETU0021B017 = mapper.editInMsgETU0021B017(
													param
													,JPCModelConstant.FUNC_CD_1
													,getRsltMsgListValue(outMapEKK0191A010, EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST, EKK0191A010CBSMsg1List.SVC_KEI_UCWK_NO)
													);
		CAANMsg outMapETU0021B017 = callSvcInter(handle, param, fixedText, inMapETU0021B017, new ETU0021B017CBSMsg().getContents());
		
		// ANK-4494-00-00 STEP2 DEL START
//		// 番ポ工事申込事業者番号取得
//		HashMap<String, Object> inMapETU0121B011 = mapper.editInMsgETU0121B011(
//													param 
//													,JPCModelConstant.FUNC_CD_1
//													,getRsltMsgListValue(outMapEZM0301A010, EZM0301A010CBSMsg.EZM0301A010CBSMSG1LIST, EZM0301A010CBSMsg1List.KYOKU_NO)
//													);
//		CAANMsg outMapETU0121B011 = callSvcInter(handle, param, fixedText, inMapETU0121B011, new ETU0121B011CBSMsg().getContents());
		// ANK-4494-00-00 STEP2 DEL START
		
		// #86310 ADD START
		// ■局番別NTT収容局一覧照会を実施
		HashMap<String, Object> inMapETU0101B020 = mapper.editInMsgETU0101B020(param, 
				getRsltMsgListValue(outMapEZM0121A010, EZM0121A010CBSMsg.EZM0121A010CBSMSG1LIST, EZM0121A010CBSMsg1List.KYOKU_NO));
		CAANMsg outMapETU0101B020 = callSvcInter(handle, param, fixedText, inMapETU0101B020, new ETU0101B020CBSMsg().getContents());
		
		// ■業務パラメータ管理一意照会を実施
		HashMap<String, Object> inMapEZM0321A010Domain = mapper.editInMsgEZM0321A010(param, SC_ENUMSOD_DOMAIN);
		CAANMsg outMapEZM0321A010Domain = callSvcInter(handle, param, fixedText, inMapEZM0321A010Domain, new ETU0101B020CBSMsg().getContents());
		
		//■業務パラメータ管理一意照会を実施
		HashMap<String, Object> inMapEZM0321A010Telno = mapper.editInMsgEZM0321A010(param, TU_BMP_TNT_TELNO);
		CAANMsg outMapEZM0321A010Telno = callSvcInter(handle, param, fixedText, inMapEZM0321A010Telno, new ETU0101B020CBSMsg().getContents());
		// #86310 ADD END

		// 番ポ工事登録
		HashMap<String, Object> inMapETU0011D010 = mapper.editInMsgETU0011D010(
													param
													,JPCModelConstant.FUNC_CD_1
													,outMapEKK0191A010	// サービス契約一意照会結果
													,outMapEKK0251B003	// サービス契約回線内訳一覧照会（現在利用中）結果
													,outMapECK0201B001	// 連絡先一覧照会結果
													,outMapEZM0301A010	// 局番一意照会結果
													,outMapEZM0091A010	// 住所対象番号区画一意照会結果
													// ANK-4494-00-00 STEP2 DEL START
//													,outMapETU0121B011	// 番ポ工事申込事業所番号取得結果
													// ANK-4494-00-00 STEP2 DEL END
													,outMapETU0021B017	// 同番移転一覧照会（サービス契約内訳番号）２
													// OM-2016-0001535 電話番号一意照会結果を追加 2016/07/11 ADD START
													,outMapEZM0121A010	// 電話番号一意照会結果
													// OM-2016-0001535 電話番号一意照会結果を追加 2016/07/11 ADD END
													// #86310 ADD START
													,outMapETU0101B020
													,outMapEZM0321A010Domain
													,outMapEZM0321A010Telno
													// #86310 ADD END
													);
		callSvcInter(handle, param, fixedText, inMapETU0011D010, new ETU0011D010CBSMsg().getContents());
		
	}
	
	/**
	 * 対応履歴登録
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param trkSbt 登録種別
	 * @param sysid SYSID
	 * @param custNm お客様名
	 * @param mskmYmd 申込日
	 * @param nttUkeNo NTT受付番号
	 * @param telno 電話番号
	 * @param setPlaceAdCd 回線場所住所コード
	 * @param svcKeiNo サービス契約番号
	 * @param kojiDtm 工事(確定)日時
	 * @param orgCd 組織コード
	 * @param orgNm 組織名
	 * @throws Throwable 
	 */
	private void addTaiorrk(
			SessionHandle handle
			,IRequestParameterReadWrite param
			,String fixedText
			,String trkSbt
			,String sysid
			,String custNm
			,String mskmYmd
			,String nttUkeNo
			,String telno
			,String setPlaceAdCd
			,String svcKeiNo
			,String kojiDtm
			// OM-2013-0002656 対応履歴情報に「テスト用全機能利用権限者」と登録される 2014/03/27 START
			,String orgCd
			,String orgNm
			// OM-2013-0002656 対応履歴情報に「テスト用全機能利用権限者」と登録される 2014/03/27 END
	) throws Throwable
	{
		
		HashMap<String, Object> taiorrk = new HashMap<String, Object>();
		// 登録種別
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.TRK_SBT, trkSbt);
		// SYSID
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.SYSID, sysid);
		// お客様名
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.CUST_NM, custNm);
		// 申込日
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.MSKM_YMD, mskmYmd);
		// NTT受付番号
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.NTT_UKE_NO, nttUkeNo);
		// 電話番号
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.TELNO, telno);
		// 設置場所住所コード
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.SETPLACE_AD_CD, setPlaceAdCd);
		// サービス契約番号
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.SVC_KEI_NO, svcKeiNo);
		// ユーザID
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.USER_ID, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 工事日時
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.KOJI_DTM, kojiDtm);
		// OM-2013-0002656 対応履歴情報に「テスト用全機能利用権限者」と登録される 2014/03/27 START
		// 組織コード
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.ORG_CD, orgCd);
		// 組織名
		taiorrk.put(JKKAddBmpTaiorrkiConstCC.ORG_NM, orgNm);
		// OM-2013-0002656 対応履歴情報に「テスト用全機能利用権限者」と登録される 2014/03/27 END

		// 番ポ対応履歴登録部品呼出
		JKKBpCommon.addBmpTaiorrki(handle, param, taiorrk, fixedText);
	}
	
	/**
	 * 入力パラメータのチェックを行います。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @return エラーメッセージ
	 */
	private String chkInput(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		
		HashMap<String, Object> trgtData = (HashMap<String, Object>)param.getData(fixedText);
		if (trgtData == null)
		{
			return ERR_MSG_PARAM + "対象データが設定されていません。";
		}
		
		// 必須チェック
		String idoDiv = (String)trgtData.get(JKKBmpKojiKaifkConstCC.IDO_DIV);
		String svcKeiNo = (String)trgtData.get(JKKBmpKojiKaifkConstCC.SVC_KEI_NO);
		String mskmDtlNo = (String)trgtData.get(JKKBmpKojiKaifkConstCC.MSKM_DTL_NO);

		if (trgtData == null || JKKCommonUtil.isNull(idoDiv) || JKKCommonUtil.isNull(svcKeiNo) || JKKCommonUtil.isNull(mskmDtlNo))
		{
			return ERR_MSG_PARAM + "必須項目が設定されていません。";
		}
		// チェックOK
		return "";
	}
	
	/**
	 * 処理対象外のチェックを行います。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @return true:対象外 false:対象
	 */
	private boolean chkTg(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, CAANMsg outMapEKK0081A010) throws Throwable
	{
		
		String svcKeiStat = getRsltMsgListValue(outMapEKK0081A010, EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST, EKK0081A010CBSMsg1List.SVC_KEI_STAT);
		
		String svcCd = getRsltMsgListValue(outMapEKK0081A010, EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST, EKK0081A010CBSMsg1List.SVC_CD);
		
		if (JKKStrConst.CD00130_02.equals(svcCd)
				&& !JKKStrConst.CD00037_UK_ZM.equals(svcKeiStat))
		{
			// 電話サービス、且つ受付済以外が対象
			return false;
		}
		
		return true;
	}
	
	/**
	 * S/IFの実行結果から指定されたキーに該当する値を取得する
	 * 
	 * S/IFの実行結果から指定のキー(リスト)で取得できるメッセージリストを取得する。
	 * メッセージリストが空でなければ、先頭行のメッセージから指定のキー(値)に該当する値を取得し、返却する。
	 * 
	 * @param trgtNMsg 対象メッセージ
	 * @param listKey キー(リスト)
	 * @param valueKey キー(値)
	 * @return 値
	 */
	private String getRsltMsgListValue(CAANMsg trgtNMsg, String listKey, String valueKey)
	{
		String value = null;
		if (trgtNMsg != null)
		{
			CAANMsg[] rsltMsgList = trgtNMsg.getCAANMsgList(listKey);
			if (rsltMsgList != null && rsltMsgList.length > 0)
			{
				CAANMsg rsltMsg = rsltMsgList[0];
				value = rsltMsg.getString(valueKey);
			}
		}
		
		return value;
	}

	/**
	 * サービスインターフェース呼び出し処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param siInMap サービスインターフェースの入力マップ
	 * @param contents サービスインターフェースのテンプレート項目の配列
	 * @return 業務データ
	 * @throws Throwable 
	 */
	private CAANMsg callSvcInter(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText,
			HashMap<String, Object> siInMap,
			Object[][] contents)
			throws Throwable
	{
		
		// サービスインターフェースの呼び出し
		Map<?, ?> rsltMap = this.scCall.run(siInMap, handle);
		// エラーマッピング処理
		this.mapper.editResultRP(rsltMap, param, fixedText, contents);
		// エラーチェック処理
		errChk(rsltMap);
		// 業務データ取得処理
		CAANMsg workData = getWorkCAANMsg(rsltMap);

		return workData;
	}

	/**
	 * エラーチェック処理です。
	 * <br>
	 * @param msgList サービスインタフェース実行結果
	 * @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);
		}
	}

	/**
	 * 業務データの取得処理です。
	 * <br>
	 * @param workMapKey 業務データのマップキー
	 * @param rslt SVIFの実行結果データ
	 * @return 業務データ
	 */
	private CAANMsg getWorkCAANMsg(Map<?, ?> rslt)
	{
		CAANMsg[] templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		return parentTemplate;
	}
	

}
