/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKTVSjishoAddCC
*	ソースファイル名：JKKTVSjishoAddCC.java
*	作成者			：FJ)辛
*	日付			：2013年03月14日
*＜機能概要＞
*	指示書登録処理の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2013/03/14	FJ)辛	    新規作成:【IT1-2013-0000477】対応
*   v4.00.01	2013/03/21	FJ)辛	    【IT1-2013-0000540】対応
*   v4.00.02	2013/03/22	FJ)辛	    【IT1-2013-0000601】対応
*   v4.00.03	2013/03/26	FJ)辛	    【IT1-2013-0000643】対応
*  V20.00.00	2016/01/28	FJ)中野	    【OM-2016-0000110】対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
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.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 eo.ejb.cbs.cbsmsg.ECK0011B002CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0151D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0321B005CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321B005CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2141B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2141B001CBSMsg1List;


/**
 * 指示書登録処理を行います。<p>
 * <BR>
 * @author 富士通
 */
public class JKKTVSjishoAddCC extends AbstractCommonComponent
{
	/**EKK0081A010（サービス契約一意照会）  */
	private static final String TEMPLATE_ID_EKK0081A010 = "EKK0081A010";
	/**EKK0321B005（課金先一覧照会（サービス契約番号  */
	private static final String TEMPLATE_ID_EKK0321B005 = "EKK0321B005";
	/**旧ICSコード変換一覧照会 */
	private static final String TEMPLATE_ID_EKK2141B001 = "EKK2141B001";
	/** 指示書登録 */
	private static final String TEMPLATE_ID_ECK0151D010 = "ECK0151D010";
	
	/** 連絡先システム識別コード："02" (AxM) */
	public static final String SYSTEM_CODE_AMX = "02";
	/** 旧ICSコード変換種別コード："02" (料金グループコード) */
	public static final String OLD_ICS_CONVERT_CODE = "02";
	/** サービスコード設定値："000"*/
	public static final String NEW_ICS_CODE = "000";
	/** 適用終了日（固定値）："20991231"*/
	public static final String APLY_END_YMD = "20991231";
	/** 機能コード："1"*/
	public static final String FUNC_CODE_1 = "1";
	/** 機能コード："2"*/
	public static final String FUNC_CODE_2 = "2";
	
	
	/** 契約種別コード："00"（顧客ID情報相関）*/
	public static final String KEI_KBN_CD_00 = "00";
	
	/** 契約種別コード："03"（光TV系契約）*/
	public static final String KEI_KBN_CD_03 = "03";
	
	/** 処理コード："N01"（認証レプリカ更新API）*/
	public static final String SYORI_CD = "N01";
	
	/**対象テーブルID（登録OR更新）："TNM00040"（登録・更新時）*/
	public static final String TARGET_TABLE_ID_40 = "TNM00040";
	
	/**対象テーブルID（登録OR更新）："TNM00050"（登録・更新時）*/
	public static final String TARGET_TABLE_ID_50 = "TNM00050";
	
	/**結果フラグ(0:未実行)*/
	public static final String RESULT_FLAG = "0";
	/**パラメータ有効数*/
	public static final String PARAM_VALID_NUM_13 = "13";
	/**パラメータ有効数*/
	public static final String PARAM_VALID_NUM_14 = "14";
	/**サービスコード："00000"（顧客ID情報相関）*/
	public static final String PARAM_SVC_CD = "00000";
	
	/**パラメタ２：サービス契約番号（支払先）*/
	public static final String KAKIN_SVC_KEI_CD = "01";
	/**パラメタ３：サービス契約コード連番*/
	/*---v4.00.01------------------*/
	public static final String KAKIN_SVC_KEI_CD_001 = "1";
	/*---v4.00.01------------------*/
	
	/**指示書登録区分：回復より*/
	public static final String SJISHO_ADD_RECOVERY = "recovery";
	/**指示書登録区分：コース変更より*/
	public static final String SJISHO_ADD_COURSECHG = "courseChg";
	/**指示書登録区分：キャンセルより*/
	public static final String SJISHO_ADD_CANCEL = "cancel";
	/**サービスステータス：キャンセル（920）*/
	public static final String SVC_STATUS_CANCEL = "920";
	
	
	/**
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite mainExecute(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		String dataMapKey = fixedText;
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// 運用日
		String opeDate = JPCBPCommon.getOpeDate(null);
		// 機能コード
		String funcCode = (String) ccMsg.get("func_code");
		// SYSID
		String sysId = (String) ccMsg.get("sysid");
		// サービス契約番号
		String svcKeiNo = (String) ccMsg.get("svc_kei_no");
		//「回復」か「コース変更」かを判断
		String syori_kbn = (String) ccMsg.get("SjishoAddKbn");
		
		//キャンセル前の「サービス契約ステータス」
		String preSvcStat = (String) ccMsg.get("preSvcStat");
		
		//■================================================
		//■ ***** EKK0081A010（サービス契約一意照会）*****
		//■================================================
		CAANMsg ekk0081a010IN = new CAANMsg(EKK0081A010CBSMsg.class.getName());
		ekk0081a010IN.set(EKK0081A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0081A010);
		ekk0081a010IN.set(EKK0081A010CBSMsg.FUNC_CODE,        FUNC_CODE_2);
		ekk0081a010IN.set(EKK0081A010CBSMsg.KEY_SVC_KEI_NO,   ccMsg.get("svc_kei_no"));
		ekk0081a010IN.set(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM, "");
		ekk0081a010IN.set(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, opeDate);
		CAANMsg curSvcKeiInfo = callSC(handle, scCall, param, dataMapKey, ekk0081a010IN).getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST)[0];
	
		//========================================================
		//■指示書登録サービスインタフェースのため、パラメタ作成
		//========================================================
		HashMap<String, String> commonParamMap = new HashMap<String, String>();
		commonParamMap.put("funcCode", funcCode);                                                              // 機能コード
		//■サービス契約情報
		commonParamMap.put("sysid", sysId);                                                                    // SYSID
		commonParamMap.put("svcKeiNo", svcKeiNo);                                                              // サービス契約番号
		commonParamMap.put("prc_grp_cd", curSvcKeiInfo.getString(EKK0081A010CBSMsg1List.PRC_GRP_CD));          // 料金グループコード
		commonParamMap.put("shosaYmd", curSvcKeiInfo.getString(EKK0081A010CBSMsg1List.SHOSA_YMD));             // 照査年月日
		commonParamMap.put("shosaClYmd", curSvcKeiInfo.getString(EKK0081A010CBSMsg1List.SHOSA_CL_YMD));             // 照査取消年月日
		commonParamMap.put("svcEndymd", curSvcKeiInfo.getString(EKK0081A010CBSMsg1List.SVC_ENDYMD));           // サービス終了年月日
		commonParamMap.put("svcCancelymd", curSvcKeiInfo.getString(EKK0081A010CBSMsg1List.SVC_CANCEL_YMD));    // サービスキャンセル年月日
		commonParamMap.put("mkFlg", curSvcKeiInfo.getString(EKK0081A010CBSMsg1List.MK_FLG));                   // 無効フラグ
		commonParamMap.put("addDtm", curSvcKeiInfo.getString(EKK0081A010CBSMsg1List.ADD_DTM));                 // 登録年月日時分秒
		commonParamMap.put("addOpeacnt", curSvcKeiInfo.getString(EKK0081A010CBSMsg1List.ADD_OPEACNT));         // 登録オペレータアカウント
		commonParamMap.put("updDtm", curSvcKeiInfo.getString(EKK0081A010CBSMsg1List.UPD_DTM));                 // 更新年月日時分秒
		commonParamMap.put("updOpeacnt", curSvcKeiInfo.getString(EKK0081A010CBSMsg1List.UPD_OPEACNT));         // 更新オペレータアカウント
		commonParamMap.put("svcStat", curSvcKeiInfo.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT));         // サービス契約ステータス
		commonParamMap.put("preSvcStat", preSvcStat);                                                      // キャンセル前のサービス契約ステータス
		
		//■「コース変更」時のみ
		if(SJISHO_ADD_COURSECHG.equals(syori_kbn))
		{
			//■==============================================================
			//■ ***** EKK0321B005（課金先一覧照会（サービス契約番号））*****
			//■==============================================================
			CAANMsg eKK0321B005IN = new CAANMsg(EKK0321B005CBSMsg.class.getName());
			eKK0321B005IN.set(EKK0321B005CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0321B005);
			eKK0321B005IN.set(EKK0321B005CBSMsg.FUNC_CODE,        FUNC_CODE_1);
			eKK0321B005IN.set(EKK0321B005CBSMsg.KEY_SVC_KEI_NO,   ccMsg.get("svc_kei_no"));
			CAANMsg kakinInfo = callSC(handle, scCall, param, dataMapKey, eKK0321B005IN).getCAANMsgList(EKK0321B005CBSMsg.EKK0321B005CBSMSG1LIST)[0];
			
			//■課金先情報
			commonParamMap.put("kakin_svc_kei_no", kakinInfo.getString(EKK0321B005CBSMsg1List.SVC_KEI_NO));           // サービス契約番号
			commonParamMap.put("seiky_kei_no", kakinInfo.getString(EKK0321B005CBSMsg1List.SEIKY_KEI_NO));             // 請求契約番号
			commonParamMap.put("kakins_tstaymd", kakinInfo.getString(EKK0321B005CBSMsg1List.KAKINS_TSTAYMD));         // 課金先適用開始年月日
			commonParamMap.put("kakins_tendymd", kakinInfo.getString(EKK0321B005CBSMsg1List.KAKINS_TENDYMD));         // 課金先適用終了年月日
			commonParamMap.put("kakin_mk_flg", kakinInfo.getString(EKK0321B005CBSMsg1List.MK_FLG));                   // 無効フラグ
			commonParamMap.put("kakin_add_dtm", kakinInfo.getString(EKK0321B005CBSMsg1List.ADD_DTM));                 // 登録年月日時分秒
			commonParamMap.put("kakin_add_opeacnt", kakinInfo.getString(EKK0321B005CBSMsg1List.ADD_OPEACNT));         // 登録オペレータアカウント
			commonParamMap.put("kakin_upd_dtm", kakinInfo.getString(EKK0321B005CBSMsg1List.UPD_DTM));                 // 更新年月日時分秒
			commonParamMap.put("kakin_upd_opeacnt", kakinInfo.getString(EKK0321B005CBSMsg1List.UPD_OPEACNT));         // 更新オペレータアカウント
		}

		//■=======================================================
		//■ ***** EKK2141B001（旧ICS契約サービスコード取得）*****
		//■=======================================================
		CAANMsg eKK2141B001CBSMsg = new CAANMsg(EKK2141B001CBSMsg.class.getName());
		eKK2141B001CBSMsg.set(EKK2141B001CBSMsg.TEMPLATEID,  TEMPLATE_ID_EKK2141B001);
		eKK2141B001CBSMsg.set(EKK2141B001CBSMsg.FUNC_CODE,   funcCode);
		//パラメータ設定
		//@連携先システム識別コード："2"
		eKK2141B001CBSMsg.set(EKK2141B001CBSMsg.KEY_RNK_SAKI_SYS_SKBT_CD,   SYSTEM_CODE_AMX);
		//A旧ICSコード変換種別コード:"02"
		eKK2141B001CBSMsg.set(EKK2141B001CBSMsg.KEY_OLD_ICS_CD_CHG_SBT_CD,   OLD_ICS_CONVERT_CODE);
		//B料金グループコード
		eKK2141B001CBSMsg.set(EKK2141B001CBSMsg.KEY_PRC_GRP_CD, (String)commonParamMap.get("prc_grp_cd"));
		
		CAANMsg[] outputEKK2141B001CBSMsg = 
			callSC(handle, scCall, param, dataMapKey, eKK2141B001CBSMsg).getCAANMsgList(EKK2141B001CBSMsg.EKK2141B001CBSMSG1LIST);

		//旧ＩＣＳ契約サービスコード取得
		String oldKeiSvcNo = "";
		for (CAANMsg oldSvcKeiCD : outputEKK2141B001CBSMsg)
		{
			//旧ＩＣＳコード変換適用開始年月日
			String tstaymd = oldSvcKeiCD.getString(EKK2141B001CBSMsg1List.OLD_ICS_CD_CHG_TSTAYMD);
			//旧ＩＣＳコード変換適用終了年月日
			String tendymd = oldSvcKeiCD.getString(EKK2141B001CBSMsg1List.OLD_ICS_CD_CHG_TENDYMD);
			
			if(Integer.parseInt(tstaymd)<= Integer.parseInt(opeDate)  && 
					Integer.parseInt(opeDate)<= Integer.parseInt(tendymd) )
			{
				oldKeiSvcNo = oldSvcKeiCD.getString(EKK2141B001CBSMsg1List.OLD_ICS_KEI_SVC_CD);
				break;
			}
		}
		
		//■旧ＩＣＳ契約サービスコード編集
		String newKeiSvcNo = oldKeiSvcNo.concat(NEW_ICS_CODE);
		commonParamMap.put("icsCode", newKeiSvcNo); 
		
		//■========================================
		//■  ***** ECK0151D010（指示書登録）*****
		//■========================================
		//「回復」の場合
		if(SJISHO_ADD_RECOVERY.equals(syori_kbn))
		{
// ▼▼▼▼▼ OM-2016-0000110 2016/01/28 ADD START ▼▼▼▼▼
			// TVの回復時には指示書としてA、F、Jを連携する必要あり。
			// Jについてはお客様回復CCにて実装している。
			//A回線契約にかかるサービス契約番号とSYSIDとの紐付け情報
			SjishoAdd2(handle, scCall, param, dataMapKey, commonParamMap);
// ▲▲▲▲▲ OM-2016-0000110 2016/01/28 ADD END   ▲▲▲▲▲
			
			//F回線契約に紐付く各種サービス契約の情報
			SjishoAdd7(handle, scCall, param, dataMapKey, commonParamMap, SJISHO_ADD_RECOVERY);
		}
		//「キャンセル」の場合
		else if(SJISHO_ADD_CANCEL.equals(syori_kbn))
		{
			//F回線契約に紐付く各種サービス契約の情報
			SjishoAdd7(handle, scCall, param, dataMapKey, commonParamMap, SJISHO_ADD_CANCEL);
		}
		//「コース変更」の場合
		else if(SJISHO_ADD_COURSECHG.equals(syori_kbn))
		{
			//A回線契約にかかるサービス契約番号とSYSIDとの紐付け情報
			SjishoAdd2(handle, scCall, param, dataMapKey, commonParamMap);
			//E請求契約番号回線契約にかかるサービス契約番号とSYSIDとの紐付け情報
			SjishoAdd6(handle, scCall, param, dataMapKey, commonParamMap);
			//F回線契約に紐付く各種サービス契約の情報
			SjishoAdd7(handle, scCall, param, dataMapKey, commonParamMap, SJISHO_ADD_COURSECHG);
		}

		return param;
	}

	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param mappingData
	 * @return CAANMsg
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String dataMapKey,
							CAANMsg inCAANMsg) throws Exception
	{
		HashMap<String, Object> paramMap = editInMsg(param, inCAANMsg);
		
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];

		// リターンコード取得
		Object return_code = result.get(JCMConstants.RET_CD_INT_KEY);
		int status = templates[0].getInt("status");

		editErrorInfoCom(param, templates, (Integer)return_code, dataMapKey);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(return_code.toString()) && 0 == status))
		{
			throw new SCCallException("戻り値不正", return_code.toString(), status);
		}
		
		return msg;
	}
	
	/**
	 * @param param
	 * @param mappingData
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param,
											   CAANMsg msg) 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));
		
		// オペレータID
		msg.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 運用日付
		msg.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		// 運用日時
		msg.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		setNullToMsg(msg);
		
		CAANMsg[] templates = new CAANMsg[]{msg};
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		return paramMap;
	}
	
	/**
	 * 
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @param dataMapKey
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param,
														CAANMsg[] templates, 
														int returnCode,
														String dataMapKey) throws RequestParameterException
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(ECK0011B002CBSMsg.STATUS);

		if (returnCode != 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<String, String> inMap = null;

		// ユーザデータ情報
		inMap = (HashMap<String, String>)param.getData(dataMapKey);
		
		Iterator<String> it = template.getHashMap().keySet().iterator();
		while (it.hasNext())
		{
			String key = it.next();
			if (key.endsWith("_err"))
			{
				if (!template.isNull(key))
				{
					inMap.put(key, template.getString(key));
				}
			}
		}
		
		return param;
	}
	
	/**
	 * CAANMsg NULLチェックをする
	 * @param param
	 * @return 
	 */
	@SuppressWarnings("unchecked")
	private void setNullToMsg(CAANMsg msg)
	{
		Iterator<String> caanMsgKeys = msg.getSchema().getSchemaKeySet().iterator();
		while (caanMsgKeys.hasNext())
		{
			String key = caanMsgKeys.next();
			if (key.endsWith("_err"))
			{
				String tmpKey = key.substring(0, key.length() - 4);
				
				if (!msg.containsKeyOfMsgData(tmpKey) || "".equals(msg.getObject(tmpKey)))
				{
					msg.setNull(tmpKey);
					continue;
				}
				Object obj = msg.getObject(tmpKey);
				if (obj instanceof CAANMsg[])
				{
					for (CAANMsg submsg : (CAANMsg[]) obj)
					{
						setNullToMsg(submsg);
					}
				}
			}
		}
	}
	
	/**
	 * A回線契約にかかるサービス契約番号とSYSIDとの紐付け情報
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @throws Exception
	 */
	private void SjishoAdd2(SessionHandle handle, 
			 					ServiceComponentRequestInvoker scCall, 
			 					IRequestParameterReadWrite param,
			 					String dataMapKey,
			 					HashMap<String, String> sjishoAddParamMap) throws Throwable
	{
		CAANMsg eCK0151D010IN = new CAANMsg(ECK0151D010CBSMsg.class.getName());
		eCK0151D010IN.set(ECK0151D010CBSMsg.TEMPLATEID,             TEMPLATE_ID_ECK0151D010);
		eCK0151D010IN.set(ECK0151D010CBSMsg.FUNC_CODE,              (String)sjishoAddParamMap.get("funcCode"));
		
		eCK0151D010IN.set(ECK0151D010CBSMsg.TRN_CD, SYORI_CD);                                                   //処理コード
		eCK0151D010IN.set(ECK0151D010CBSMsg.TRGT_TABLE_ID, TARGET_TABLE_ID_40);                                       //対象テーブルID（登録OR更新）
		eCK0151D010IN.set(ECK0151D010CBSMsg.TRAN_TRGT_SYSID, (String)sjishoAddParamMap.get("sysid"));          //処理対象SYSID
		eCK0151D010IN.set(ECK0151D010CBSMsg.RSLT_FLG, RESULT_FLAG);                                                   //結果フラグ(0:未実行)
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_YK_CNT, PARAM_VALID_NUM_13);                                          //パラメータ有効数
		
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_1, (String)sjishoAddParamMap.get("sysid"));              //SYSID
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_2, (String)sjishoAddParamMap.get("svcKeiNo"));           //サービス契約番号
		/*---v4.00.02------------------*/
//		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_3, (String)sjishoAddParamMap.get("shosaYmd"));           //適用開始日
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_3, JPCBPCommon.getOpeDate(null));                       //適用開始日 ⇒運用日付
		/*---v4.00.02------------------*/
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_4, APLY_END_YMD);
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_5, (String)sjishoAddParamMap.get("mkFlg"));              //有効無効フラグ
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_6, (String)sjishoAddParamMap.get("addDtm"));             //登録日時
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_7, (String)sjishoAddParamMap.get("addOpeacnt"));         //登録者
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_8, new String());                                       //登録PGID
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_9, (String)sjishoAddParamMap.get("updDtm"));             //更新日時
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_10, (String)sjishoAddParamMap.get("updOpeacnt"));        //更新者
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_11, new String());                                      //更新PGID
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_12, KEI_KBN_CD_00);                                               //契約種別コード
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_13, PARAM_SVC_CD);                                         //旧ICS契約サービスコード
		
		callSC(handle, scCall, param, dataMapKey, eCK0151D010IN);
	}
	
	/**
	 * E請求契約番号回線契約にかかるサービス契約番号とSYSIDとの紐付け情報
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @throws Exception
	 */
	private void SjishoAdd6(SessionHandle handle, 
			 					ServiceComponentRequestInvoker scCall, 
			 					IRequestParameterReadWrite param,
			 					String dataMapKey,
			 					HashMap<String, String> sjishoAddParamMap) throws Throwable
	{
		CAANMsg eCK0151D010IN = new CAANMsg(ECK0151D010CBSMsg.class.getName());
		eCK0151D010IN.set(ECK0151D010CBSMsg.TEMPLATEID,             TEMPLATE_ID_ECK0151D010);
		eCK0151D010IN.set(ECK0151D010CBSMsg.FUNC_CODE,              (String)sjishoAddParamMap.get("funcCode"));
		
		eCK0151D010IN.set(ECK0151D010CBSMsg.TRN_CD, SYORI_CD);                                                   //処理コード
		eCK0151D010IN.set(ECK0151D010CBSMsg.TRGT_TABLE_ID, TARGET_TABLE_ID_50);                                       //対象テーブルID（登録OR更新）
		eCK0151D010IN.set(ECK0151D010CBSMsg.TRAN_TRGT_SYSID, (String)sjishoAddParamMap.get("sysid"));          //処理対象SYSID
		eCK0151D010IN.set(ECK0151D010CBSMsg.RSLT_FLG, RESULT_FLAG);                                                   //結果フラグ(0:未実行)
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_YK_CNT, PARAM_VALID_NUM_14);                                          //パラメータ有効数
		
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_1, (String)sjishoAddParamMap.get("kakin_svc_kei_no"));              //サービス契約番号
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_2, KAKIN_SVC_KEI_CD);                                             //サービス契約コード：支払先
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_3, KAKIN_SVC_KEI_CD_001);                                          //サービス契約コード連番
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_4, (String)sjishoAddParamMap.get("seiky_kei_no"));                 //サービス契約ID
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_5, (String)sjishoAddParamMap.get("kakins_tstaymd"));                       //課金先適用開始年月日
		if("".equals((String)sjishoAddParamMap.get("kakins_tendymd")) || (String)sjishoAddParamMap.get("kakins_tendymd") == null)
		{
			eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_6, APLY_END_YMD);                                      //課金先適用終了年月日("20991231")
		}
		else
		{
			eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_6, (String)sjishoAddParamMap.get("kakins_tendymd"));           //課金先適用終了年月日
		}
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_7, new String());                                                //回線契約メールアドレス  
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_8, (String)sjishoAddParamMap.get("kakin_mk_flg"));                       //無効フラグ 
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_9, (String)sjishoAddParamMap.get("kakin_add_dtm"));             //登録年月日時分秒
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_10, (String)sjishoAddParamMap.get("kakin_add_opeacnt"));        //登録オペレータアカウント
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_11, new String());                                              //登録PGID
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_12, (String)sjishoAddParamMap.get("kakin_upd_dtm"));             //更新日時
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_13, (String)sjishoAddParamMap.get("kakin_upd_opeacnt"));        //更新者
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_14, new String());                                              //更新PGID
		
		callSC(handle, scCall, param, dataMapKey, eCK0151D010IN);
		
	}
	
	/**
	 * F回線契約に紐付く各種サービス契約の情報
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @throws Exception
	 */
	private void SjishoAdd7(SessionHandle handle, 
			 					ServiceComponentRequestInvoker scCall, 
			 					IRequestParameterReadWrite param,
			 					String dataMapKey,
			 					HashMap<String, String> sjishoAddParamMap,
			 					String syoriKbn) throws Throwable
	{
		
		CAANMsg eCK0151D010IN = new CAANMsg(ECK0151D010CBSMsg.class.getName());
		eCK0151D010IN.set(ECK0151D010CBSMsg.TEMPLATEID,             TEMPLATE_ID_ECK0151D010);
		eCK0151D010IN.set(ECK0151D010CBSMsg.FUNC_CODE,              (String)sjishoAddParamMap.get("funcCode"));
		
		eCK0151D010IN.set(ECK0151D010CBSMsg.TRN_CD, SYORI_CD);                                                   //処理コード
		eCK0151D010IN.set(ECK0151D010CBSMsg.TRGT_TABLE_ID, TARGET_TABLE_ID_40);                                       //対象テーブルID（登録OR更新）
		eCK0151D010IN.set(ECK0151D010CBSMsg.TRAN_TRGT_SYSID, (String)sjishoAddParamMap.get("sysid"));          //処理対象SYSID
		eCK0151D010IN.set(ECK0151D010CBSMsg.RSLT_FLG, RESULT_FLAG);                                                   //結果フラグ(0:未実行)
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_YK_CNT, PARAM_VALID_NUM_13);                                          //パラメータ有効数
		
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_1, (String)sjishoAddParamMap.get("sysid"));              //SYSID
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_2, (String)sjishoAddParamMap.get("svcKeiNo"));           //サービス契約番号
		/*---v4.00.02------------------*/
		if(SJISHO_ADD_COURSECHG.equals(syoriKbn))
		{
			eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_3, JPCBPCommon.getOpeDate(null));           //適用開始日⇒コース変更時、運用日付
		}
		else
		{
			if((String)sjishoAddParamMap.get("shosaYmd") != null && !"".equals((String)sjishoAddParamMap.get("shosaYmd")))
			{
				eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_3, (String)sjishoAddParamMap.get("shosaYmd"));           //適用開始日⇒回復時、照査年月日
			}
			else
			{
				eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_3, APLY_END_YMD);
			}
		}
		/*---v4.00.02------------------*/
		/*---v4.00.03------------------*/
		if(SJISHO_ADD_CANCEL.equals(syoriKbn))
		{
			//■受付済⇒キャンセル
			if("010".equals((String)sjishoAddParamMap.get("preSvcStat")))
			{
				if((String)sjishoAddParamMap.get("shosaClYmd") != null && !"".equals((String)sjishoAddParamMap.get("shosaClYmd")))
				{
					eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_4, (String)sjishoAddParamMap.get("shosaClYmd"));  //照査取消年月日
				}
				else
				{
					eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_4, (String)sjishoAddParamMap.get("svcCancelymd"));
				}
				
			}
			//■照査済⇒キャンセル
			else
			{
				if (SVC_STATUS_CANCEL.equals((String)sjishoAddParamMap.get("svcStat")))
				{
					eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_4, (String)sjishoAddParamMap.get("svcCancelymd"));
				}
				else
				{
					eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_4, APLY_END_YMD);
				}
			}
		}
		else
		{
			eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_4, APLY_END_YMD);
		}
		/*---v4.00.02------------------*/
		
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_5, (String)sjishoAddParamMap.get("mkFlg"));              //有効無効フラグ
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_6, (String)sjishoAddParamMap.get("addDtm"));             //登録日時
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_7, (String)sjishoAddParamMap.get("addOpeacnt"));         //登録者
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_8, new String());                                       //登録PGID
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_9, (String)sjishoAddParamMap.get("updDtm"));             //更新日時
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_10, (String)sjishoAddParamMap.get("updOpeacnt"));        //更新者
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_11, new String());                                      //更新PGID
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_12, KEI_KBN_CD_03);                                          //契約種別コード
		eCK0151D010IN.set(ECK0151D010CBSMsg.PARAMETER_13, (String)sjishoAddParamMap.get("icsCode"));             //旧ICS契約サービスコード
	
		callSC(handle, scCall, param, dataMapKey, eCK0151D010IN);
		
	}
	
	
}
