/********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************
 *＜プログラム内容＞
 *  システム名      ：eo顧客基幹システム
 *  モジュール名    ：番ポ工事登録コンポーネント部品クラス
 *  ソースファイル名：JKKBmpKojiAddCC.java
 *  作成者          ：FJ
 *  日付            ：2012年9月18日
 *＜機能概要＞
 *  住所変更に伴うeo光電話の
 *	変更区分の判定を行う部品クラス。
 *＜修正履歴＞
 *  バージョン  修正日      修正者      修正内容
 *  v1.00.00    2012/9/18   FJ          新規作成
 *  v8.00.00    2014/03/28  FJ) 星野    OM-2013-0002656対応
 * v25.00.00    2016/07/11   FJ）江藤   【OM-2016-0001535】番ポ工事のルーティング番号不正
 * v72.00.00	2024/06/07	FJ)藤井		【ANK-4494-00-00】【eo定期】 双方向番ポ対応
 * v72.00.01	2024/08/08	FJ)吉田賢	【ANK-4494-00-00】【eo定期】 双方向番ポ対応
 * v72.00.02	2024/10/10	FJ)藤井		【ANK-4494-00-00】【eo定期】 双方向番ポ対応 STEP2
 * v72.00.03	2024/10/10	FJ)吉田賢	【ANK-4494-00-00】【eo定期】 双方向番ポ対応 STEP2
 * v75.00.00	2025/05/15	FJ)藤井		【ANK-4685-00-00】【eo】双方向番ポSTEP3
********************************************************************/
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.JKKAdInfChgConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKAdchgConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKAddBmpTaiorrkiConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKSvcConst;
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.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161B004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0251B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0251B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ETU0011D010CBSMsg;
import eo.ejb.cbs.cbsmsg.ETU0121A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0091A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0121A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0301A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg1List;

public class JKKBmpKojiAddCC extends AbstractCommonComponent {

	/** セッションハンドル保持域 */
	private static ThreadLocal<SessionHandle> keepSesHandle = new ThreadLocal<SessionHandle>()
	{
		// 保持域への設定はinitialValue()ではなくset()を使用する為、
		// initialValue()は実装しない
	};

	/**
	 * コンストラクタ.
	 * <br>
	 */
	public JKKBmpKojiAddCC() {
	}
	
//	/** 番ポ申込書タイプコード：3(事業者間移転) */
//	public static final String BMP_MSKMSHO_TYPE_CD_JGSK_ITEN = "3";
	/** フラグ（オフ） */
	public static final String FLG_OFF = "0";
	/** フラグ（オン） */
	public static final String FLG_ON = "1";
	/** 未選択 */
	public static final String NO_SELECT = "9";
	
	// ANK-4494-00-00 ADD START
	/** 自社内記事欄（マンションタイプ） */
	public static final String JI_SHANAI_KIJIRAN_MANSION = "MT";
	
	/** ハイフン */
	public static final String HYPHEN = "-";
	// ANK-4494-00-00 ADD END

	/**
	 * 住所変更時同番移転登録.
	 * <br>
	 * @param   handle     セッションマネージャなどを持ったハンドル情報
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Throwable  例外が発生した場合
	 * @return  リクエストパラメータ(param)に戻り値を追加して返却する
	 */
	public IRequestParameterReadWrite bmpKojiAdd(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable {

// OM-2013-0004303対応 20131120 星野 ADD START
		try {
// OM-2013-0004303対応 20131120 星野 ADD END
			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);
			HashMap<String, String> condMap = new HashMap<String, String>();
			HashMap<String, Object> reqMap;
			Map<?, ?> resMap;
			
			// 住所変更登録コモンコンポーネントマッピングクラスインスタンスを取得
			JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
	
			// SCリクエストInvokerを取得
			ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
	
			// 番ポ工事登録用マップ
			HashMap<String, Object> tu0011_d010_map = new HashMap<String, Object>();
	
			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
	
			/** 一意照会 */
			// ・ECK0011A010  お客様一意照会
			condMap.clear();
			condMap.put(JKKAdInfChgConstCC.COND_KEY_SYSID, (String)paramMap.get(JKKAdInfChgConstCC.PARAM_KEY_SYSID));
			condMap.put(JKKAdInfChgConstCC.COND_KEY_OPEDATE, (String)paramMap.get(JKKAdInfChgConstCC.PARAM_KEY_OPE_DATE));
			reqMap = mapper.setECK0011A010(param, fixedText, condMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			HashMap<String, Object> ck0011_a010_map = mapper.getECK0011A010(param, fixedText, resMap);
			mapper.scResultCheck(param);
			
			// ・EZM0301A010  局番一意照会
			String kyokuNo = (String)paramMap.get("tln_bmp_tln");
			condMap.clear();
			condMap.put(JKKAdchgMapperCC.COND_KEY_KYOKU_NO, kyokuNo.substring(0,6));
			reqMap = mapper.setEZM0301A010(param, fixedText, condMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			HashMap<String, Object> zm0301_a010_map = mapper.getEZM0301A010(param, fixedText, resMap);
			mapper.scResultCheck(param);
			
			// ・EZM0091A010  住所対象番号区画一意照会
			condMap.clear();
			condMap.put(JKKAdchgMapperCC.COND_KEY_AD_CD, (String)paramMap.get("tln_bmp_ad_cd"));
			condMap.put(JKKAdchgMapperCC.COND_KEY_NO_KUKAKU_CD, (String)zm0301_a010_map.get(EZM0301A010CBSMsg1List.NO_KUKAKU_CD));
			reqMap = mapper.setEZM0091A010(param, fixedText, condMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			HashMap<String, Object> zm0091_a010_map = mapper.getEZM0091A010(param, fixedText, resMap);
			mapper.scResultCheck(param);
			
			// 市内番号を抽出
			String areacd = (String)zm0301_a010_map.get(EZM0301A010CBSMsg1List.AREACD);
			String shinai_kyoku_no = editTln(kyokuNo, areacd);
			
			// v72.00.03 ANK-4494-00-00 DEL START
//			// ・ETU0121A010  番ポ工事エリア対象局番一意照会
//			condMap.clear();
//			condMap.put(JKKAdchgMapperCC.COND_KEY_AREACD, areacd);
//			condMap.put(JKKAdchgMapperCC.COND_KEY_SHINAI_KYOKU_NO, shinai_kyoku_no);
//			reqMap = mapper.setETU0121A010(param, fixedText, condMap);
//			resMap = scCall.run(reqMap, keepSesHandle.get());
//			HashMap<String, Object> tu0121_a010_map = mapper.getETU0121A010(param, fixedText, resMap);
//			mapper.scResultCheck(param);
			// v72.00.03 ANK-4494-00-00 DEL END
			
			// OM-2016-0001535 電話番号一意照会を追加 2016/07/11 ADD START
			// EZM0121A010 電話番号一意照会
			condMap.clear();
			condMap.put(JKKAdchgMapperCC.COND_KEY_TELNO, (String)paramMap.get("tln_bmp_tln"));
			reqMap = mapper.setEZM0121A010(param, fixedText, condMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			HashMap<String, Object> zm0121_a010_map = mapper.getEZM0121A010(param, fixedText, resMap);
			mapper.scResultCheck(param);
			// OM-2016-0001535 電話番号一意照会を追加 2016/07/11 ADD END
			
			// ANK-4494-00-00 ADD START
			// EZM0321A010 業務パラメータ管理一意照会
			condMap.clear();
			condMap.put(JKKAdchgMapperCC.COND_KEY_WORK_PARAM_ID, "SC_ENUMSOD_DOMAIN");
			reqMap = mapper.setEZM0321A010(param, fixedText, condMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			HashMap<String, Object> zm0321_a010_map1 = mapper.getEZM0321A010(param, fixedText, resMap);
			mapper.scResultCheck(param);
			
			// EZM0321A010 業務パラメータ管理一意照会
			condMap.clear();
			condMap.put(JKKAdchgMapperCC.COND_KEY_WORK_PARAM_ID, "TU_BMP_TNT_TELNO");
			reqMap = mapper.setEZM0321A010(param, fixedText, condMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			HashMap<String, Object> zm0321_a010_map2 = mapper.getEZM0321A010(param, fixedText, resMap);
			mapper.scResultCheck(param);
			
			// ETU0101B020 局番別NTT収容局一覧照会
			condMap.clear();
			condMap.put(JKKAdchgMapperCC.COND_KEY_KYOKU_NO, kyokuNo.substring(0,6));
			reqMap = mapper.setETU0101B020(param, fixedText, condMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			ArrayList<HashMap<String,Object>> tu0101_b020_map = mapper.getETU0101B020(param, fixedText, resMap);
			mapper.scResultCheck(param);
			
			// EKK0251B003 サービス契約回線内訳一覧照会（現在利用中）
			condMap.clear();
			condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_SVC_KEI_NO));
			reqMap = mapper.setEKK0251B003(param, fixedText, condMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			ArrayList<HashMap<String,Object>> kk0251_b003_map = mapper.getEKK0251B003(param, fixedText, resMap);
			mapper.scResultCheck(param);
			// ANK-4494-00-00 ADD END
	
			/** 番ポ工事登録内容設定 */
	// IT1-2012-0001957対応 20121105 星野 MOD START
	//		// サービス契約内訳番号を設定
	//		tu0011_d010_map.put(ETU0011D010CBSMsg.SVC_KEI_UCWK_NO, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_SVC_KEI_UCWK_NO));
	//		HashMap workDataMap = (HashMap)param.getMappingWorkArea().get("JKKAddSvcKeiTelCCWork");
	//		if (workDataMap != null)
	//		{
	//			String svc_kei_ucwk_no = (String)workDataMap.get("svc_kei_ucwk_no");
	//			if (svc_kei_ucwk_no != null && !svc_kei_ucwk_no.equals(""))
	//			{
	//				tu0011_d010_map.put(ETU0011D010CBSMsg.SVC_KEI_UCWK_NO, svc_kei_ucwk_no);
	//			}
	//		}
			// パラメータからサービス契約内訳番号を取得
			String param_svc_kei_ucwk_no = (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_SVC_KEI_UCWK_NO);
			
			// ANK-4494-00-00 ADD START
			String enable_svc_kei_ucwk_no = "";
			// ANK-4494-00-00 ADD END
	
			if(!StringUtils.isEmpty(param_svc_kei_ucwk_no)){
				
				// サービス契約内訳番号を設定
				tu0011_d010_map.put(ETU0011D010CBSMsg.SVC_KEI_UCWK_NO, param_svc_kei_ucwk_no);
				
				// ANK-4494-00-00 ADD START
				enable_svc_kei_ucwk_no = param_svc_kei_ucwk_no;
				// ANK-4494-00-00 ADD END
				
			}else{
				
				// パラメータからサービス契約番号を取得
				String svc_kei_no = (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_SVC_KEI_NO);
				
				// 作業領域の取得
				Map workMap = (Map)param.getMappingWorkArea().get("JKKAddSvcKeiTelCCWork");
				// サービス契約番号が新規採番されていれば上書き
				if(workMap!=null && workMap.get("svc_kei_no")!=null && !"".equals(workMap.get("svc_kei_no"))){
					svc_kei_no = (String) workMap.get("svc_kei_no");
				}
				// 電話番号取得
				String telno = (String)paramMap.get("tln_bmp_tln");
	
				// 電話番号を元に内訳番号を特定
				String svc_kei_ucwk_no = getUcwkNoFromTelNo(param, fixedText, svc_kei_no, telno);
				
				// サービス契約内訳番号を設定
				tu0011_d010_map.put(ETU0011D010CBSMsg.SVC_KEI_UCWK_NO, svc_kei_ucwk_no);
				
				// ANK-4494-00-00 ADD START
				enable_svc_kei_ucwk_no = svc_kei_ucwk_no;
				// ANK-4494-00-00 ADD END
					
			}
			
			// ANK-4494-00-00 ADD START
			// EKK0191A010 サービス契約内訳<eo光電話>一意照会
			condMap.clear();
			condMap.put(JKKAdchgMapperCC.COND_KEY_SVC_KEI_UCWK_NO, enable_svc_kei_ucwk_no);
			reqMap = mapper.setEKK0191A010(param, fixedText, condMap);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			HashMap<String,Object> kk0191_a010_map = mapper.getEKK0191A010(param, fixedText, resMap);
			mapper.scResultCheck(param);
			// ANK-4494-00-00 ADD END
			
	// IT1-2012-0001957対応 20121105 星野 MOD END
			// 法人個人コードを設定
	// IT1-2013-0000045対応 20130113 鈴木 MOD START
	//		tu0011_d010_map.put(ETU0011D010CBSMsg.HOJIN_KOJIN_CD, (String)ck0011_a010_map.get(ECK0011A010CBSMsg1List.KEISHA_TYPE_CD));
			// 通常異動に合わせて"1"(個人) を固定で設定する
	//		tu0011_d010_map.put(ETU0011D010CBSMsg.HOJIN_KOJIN_CD, JKKAdchgConstCC.CD00036_OWN_ORNER);
			tu0011_d010_map.put(ETU0011D010CBSMsg.HOJIN_KOJIN_CD, "1");
			printlnEjbLog("＃＃＃＃JKKBmpKojiAddCC.bmpKojiAdd() 通常異動に合わせて 1(個人) を固定で設定する HOJIN_KOJIN_CD=" + tu0011_d010_map.get(ETU0011D010CBSMsg.HOJIN_KOJIN_CD));
	// IT1-2013-0000045対応 20130113 鈴木 MOD END
			// お客様申込年月日を設定
			tu0011_d010_map.put(ETU0011D010CBSMsg.CUST_MSKM_YMD, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_MSKM_YMD));
			// 番ポ申込書タイプコード
	//		tu0011_d010_map.put(ETU0011D010CBSMsg.BMP_MSKMSHO_TYPE_CD, BMP_MSKMSHO_TYPE_CD_JGSK_ITEN);
			String itnm_tsjgs_cd = (String)paramMap.get("itnm_tsjgs_cd");
			// v72.00.01 ANK-4494-00-00 MOD START
//			tu0011_d010_map.put(ETU0011D010CBSMsg.BMP_MSKMSHO_TYPE_CD, "0000".equals(itnm_tsjgs_cd) ? JKKSvcConst.BMP_IRAI_NAIYO_CD_ITEN : JKKSvcConst.BMP_IRAI_NAIYO_CD_UPD);
			tu0011_d010_map.put(ETU0011D010CBSMsg.BMP_MSKMSHO_TYPE_CD, JKKSvcConst.BMP_IRAI_NAIYO_CD_ITEN);
			// v72.00.01 ANK-4494-00-00 MOD END
			// 他事業者未確認フラグ
	// IT2-2013-0000066対応 Nao.F START
			if ("0000".equals(itnm_tsjgs_cd)) {
				tu0011_d010_map.put(ETU0011D010CBSMsg.TA_JIGYOSHA_MI_CFM_FLG, FLG_OFF);
			} else {
				tu0011_d010_map.put(ETU0011D010CBSMsg.TA_JIGYOSHA_MI_CFM_FLG, FLG_ON);
			}
	// IT2-2013-0000066対応 Nao.F END
			// 同時工事有無
			tu0011_d010_map.put(ETU0011D010CBSMsg.DOJI_KOJI_UM, (String)paramMap.get("bmp_doji_koji_kibo"));
			// 同番移転有無
			// ANK-4685-00-00 MOD START
//			tu0011_d010_map.put(ETU0011D010CBSMsg.DOBANITEN_UM, (String)paramMap.get("dobaniten_um"));
			tu0011_d010_map.put(ETU0011D010CBSMsg.DOBANITEN_UM, (String)paramMap.get("dobaniten_mskm_um"));
			// ANK-4685-00-00 MOD END
			// NTT契約電話回線番号
			tu0011_d010_map.put(ETU0011D010CBSMsg.NTT_KEI_TEL_KAISEN_NO, (String)paramMap.get("tln_bmp_tln"));
			// 契約者回線番号を設定
			tu0011_d010_map.put(ETU0011D010CBSMsg.TA_JGYOSHA_UR_NO, (String)paramMap.get("tln_tln_old"));
			// ルーティング番号を設定
			// OM-2016-0001535 電話番号マスタ.NRN番号が取得できた場合、電話番号マスタ.NRN番号を設定するよう修正 2016/07/11 MOD START
//			tu0011_d010_map.put(ETU0011D010CBSMsg.ROUTING_NO, (String)zm0301_a010_map.get(EZM0301A010CBSMsg1List.KOJIN_NRN_NO));
			// 電話番号マスタ.NRN番号が取得できた場合は、電話番号マスタ.NRN番号を設定
			// 上記以外は、局番マスタ.個人用NRN番号を設定
			String routingNo = (String)zm0121_a010_map.get(EZM0121A010CBSMsg1List.NRN_NO);
			
			if (StringUtils.isEmpty(routingNo))
			{
				routingNo = (String)zm0301_a010_map.get(EZM0301A010CBSMsg1List.KOJIN_NRN_NO);
			}
			
			tu0011_d010_map.put(ETU0011D010CBSMsg.ROUTING_NO, routingNo);
			// OM-2016-0001535 電話番号マスタ.NRN番号が取得できた場合、電話番号マスタ.NRN番号を設定するよう修正 2016/07/11 MOD END
			
			// NTT契約者名
			tu0011_d010_map.put(ETU0011D010CBSMsg.NTT_KEISHA_NM, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_TLN_TPPV_BMP_KSH_NM));
			// NTT契約者カナ名
			tu0011_d010_map.put(ETU0011D010CBSMsg.NTT_KSH_KANA, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_TLN_TPPV_BMP_KSH_KANA));
			// NTT契約者住所手動入力フラグ
			tu0011_d010_map.put(ETU0011D010CBSMsg.NKYS_AD_MAN_INPUT_FLG, (String)paramMap.get("tln_bmp_ad_man_input_div_cd"));
			// NTT契約者住所コード
			tu0011_d010_map.put(ETU0011D010CBSMsg.NTT_KEISHA_AD_CD, (String)paramMap.get("tln_bmp_ad_cd"));
			// NTT契約者郵便番号
			tu0011_d010_map.put(ETU0011D010CBSMsg.NTT_KEISHA_PCD, (String)paramMap.get("tln_bmp_ad_pcd"));
			// NTT契約者都道府県名
			tu0011_d010_map.put(ETU0011D010CBSMsg.NTT_KEISHA_STATE_NM, (String)paramMap.get("tln_bmp_ad_state"));
			// NTT契約者市区町村名
			tu0011_d010_map.put(ETU0011D010CBSMsg.NTT_KEISHA_CITY_NM, (String)paramMap.get("tln_bmp_ad_city"));
			// NTT契約者大字通称名
			tu0011_d010_map.put(ETU0011D010CBSMsg.NTT_KEISHA_OAZTSU_NM, (String)paramMap.get("tln_bmp_ad_oaztsu"));
			// NTT契約者字丁目名
			tu0011_d010_map.put(ETU0011D010CBSMsg.NTT_KEISHA_AZCHO_NM, (String)paramMap.get("tln_bmp_ad_azcho"));
			// NTT契約者番地号
			tu0011_d010_map.put(ETU0011D010CBSMsg.NTT_KEISHA_BNCHIGO, (String)paramMap.get("tln_bmp_ad_bnchigo"));
			// NTT契約者住所補記・建物名
			tu0011_d010_map.put(ETU0011D010CBSMsg.NTT_KEISHA_ADRTTM, (String)paramMap.get("tln_bmp_ad_adrttm"));
			// NTT契約者住所補記・部屋番号
			tu0011_d010_map.put(ETU0011D010CBSMsg.NTT_KEISHA_ADRRM, (String)paramMap.get("tln_bmp_ad_adrrm"));
			// 連絡先電話番号
			tu0011_d010_map.put(ETU0011D010CBSMsg.RRKS_TELNO, (String)ck0011_a010_map.get(ECK0011A010CBSMsg1List.KEISHA_TELNO));
			// 設置場所住所手動入力フラグ
			tu0011_d010_map.put(ETU0011D010CBSMsg.SETPLACE_AD_MAN_INPUT_FLG, FLG_OFF);
			// 設置場所住所コード
			tu0011_d010_map.put(ETU0011D010CBSMsg.SETPLACE_AD_CD, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_CD));
			// 設置場所郵便番号
			tu0011_d010_map.put(ETU0011D010CBSMsg.SETPLACE_PCD, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_POST_CD));
			// 設置場所都道府県名
			tu0011_d010_map.put(ETU0011D010CBSMsg.SETPLACE_STATE_NM, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_STATE));
			// 設置場所市区町村名
			tu0011_d010_map.put(ETU0011D010CBSMsg.SETPLACE_CITY_NM, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_CITY));
			// 設置場所大字通称名
			tu0011_d010_map.put(ETU0011D010CBSMsg.SETPLACE_OAZTSU_NM, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_OAZTSU));
			// 設置場所字丁目名
			tu0011_d010_map.put(ETU0011D010CBSMsg.SETPLACE_AZCHO_NM, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_AZCHO));
			// 設置場所番地号
			tu0011_d010_map.put(ETU0011D010CBSMsg.SETPLACE_BNCHIGO, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_BNCHIGO));
			// 設置場所住所補記・建物名
			tu0011_d010_map.put(ETU0011D010CBSMsg.SETPLACE_ADRTTM, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_ADRTTM));
			// 設置場所住所補記・部屋番号
			tu0011_d010_map.put(ETU0011D010CBSMsg.SETPLACE_ADRRM, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_ADRRM));
			// 番ポ工事受付年月日
			tu0011_d010_map.put(ETU0011D010CBSMsg.BMP_KOJI_UK_YMD, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_OPE_DATE));
			// 番ポ受付担当ユーザーID
			tu0011_d010_map.put(ETU0011D010CBSMsg.BMP_UK_TNT_USER_ID, (String)param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
			// 電話加入権取扱コード
			//v72.00.01 ANK-4494-00-00 MOD START
//			tu0011_d010_map.put(ETU0011D010CBSMsg.TEL_KNKN_TRAT_CD, FLG_OFF);
			tu0011_d010_map.put(ETU0011D010CBSMsg.TEL_KNKN_TRAT_CD, "0000".equals(itnm_tsjgs_cd) ? JKKSvcConst.TEL_KNKN_TRAT_CD_TRANSFER : NO_SELECT);
			//v72.00.01 ANK-4494-00-00 MOD END
			// 申込事業者所内工事有無
			//v72.00.01 ANK-4494-00-00 MOD START
//			tu0011_d010_map.put(ETU0011D010CBSMsg.MSKMJIG_SNAI_KOJI_UM, FLG_ON);
			if (tu0101_b020_map != null && tu0101_b020_map.size() > 0)
			{
				tu0011_d010_map.put(ETU0011D010CBSMsg.MSKMJIG_SNAI_KOJI_UM, FLG_ON);
			}
			else
			{
				tu0011_d010_map.put(ETU0011D010CBSMsg.MSKMJIG_SNAI_KOJI_UM, NO_SELECT);
			}
			//v72.00.01 ANK-4494-00-00 MOD END
			// 申込事業者所外工事有無
			//v72.00.01 ANK-4494-00-00 MOD START
//			tu0011_d010_map.put(ETU0011D010CBSMsg.MSKMJIG_SGAI_KOJI_UM, FLG_OFF);
			if (tu0101_b020_map != null && tu0101_b020_map.size() > 0)
			{
				tu0011_d010_map.put(ETU0011D010CBSMsg.MSKMJIG_SGAI_KOJI_UM, FLG_OFF);
			}
			else
			{
				tu0011_d010_map.put(ETU0011D010CBSMsg.MSKMJIG_SGAI_KOJI_UM, NO_SELECT);
			}
			//v72.00.01 ANK-4494-00-00 MOD END
			// 番ポ申込事業所番号
			tu0011_d010_map.put(ETU0011D010CBSMsg.BMP_MSKM_JIGSHO_NO, (String)zm0091_a010_map.get(EZM0091A010CBSMsg1List.MSKM_JIGSHO_NO));
			// ANK-4494-00-00 STEP2 DEL START 当該項目が未使用になるため
//			// 番ポ工事申込事業所番号
//	// ANK-1550-00-00 20130617 OKU ADD START
//			String bmp_koji_mskm_jigsho_no = (String)zm0091_a010_map.get(EZM0091A010CBSMsg1List.BMP_KOJI_MSKM_JIGSHO_NO);
//			if(!StringUtils.isEmpty(bmp_koji_mskm_jigsho_no)){
//				// 住所対象番号区画から取得したものを設定
//				tu0011_d010_map.put(ETU0011D010CBSMsg.BMP_KOJI_MSKM_JIGSHO_NO, bmp_koji_mskm_jigsho_no);
//			} else {
//				// 番ポ工事エリア対象局番から取得したものを設定
//	// ANK-1550-00-00 20130617 OKU ADD END
//				tu0011_d010_map.put(ETU0011D010CBSMsg.BMP_KOJI_MSKM_JIGSHO_NO, (String)tu0121_a010_map.get(ETU0121A010CBSMsg1List.BMP_KOJI_MSKM_JIGSHO_NO));
//	// ANK-1550-00-00 20130617 OKU ADD START
//			}
//	// ANK-1550-00-00 20130617 OKU ADD END
			// ANK-4494-00-00 STEP2 DEL END 当該項目が未使用になるため
			
	// IT2-2013-0000376対応 20130415 星野 MOD START
	//// IT1-2013-0000108 2013.01.18 ADD-Start
	//		// 移転元通信事業者コード
	//		tu0011_d010_map.put(ETU0011D010CBSMsg.ITNM_TSJGS_CD, (String)paramMap.get("itnm_tsjgs_cd"));
	//// IT1-2013-0000108 2013.01.18 ADD-End
			// 移転元通信事業者コード
			//v72.00.01 ANK-4494-00-00 MOD START
//			tu0011_d010_map.put(ETU0011D010CBSMsg.ITNM_TSJGS_CD, "0000".equals(itnm_tsjgs_cd) ? null : itnm_tsjgs_cd);
			tu0011_d010_map.put(ETU0011D010CBSMsg.ITNM_TSJGS_CD, itnm_tsjgs_cd);
			//v72.00.01 ANK-4494-00-00 MOD END
			// 移転元通信事業者拠点コード
			//v72.00.01 ANK-4494-00-00 MOD START
//			tu0011_d010_map.put(ETU0011D010CBSMsg.ITNM_TSJGS_KTN_CD, "0000".equals(itnm_tsjgs_cd) ? null : (String)paramMap.get("itnm_tsjgs_ktn_cd"));
			tu0011_d010_map.put(ETU0011D010CBSMsg.ITNM_TSJGS_KTN_CD, (String)paramMap.get("itnm_tsjgs_ktn_cd"));
			//v72.00.01 ANK-4494-00-00 MOD END
			// 他事業者未確認フラグ
			tu0011_d010_map.put(ETU0011D010CBSMsg.TA_JIGYOSHA_MI_CFM_FLG, "0000".equals(itnm_tsjgs_cd) ? JKKSvcConst.FLG_OFF : JKKSvcConst.FLG_ON);
	// IT2-2013-0000376対応 20130415 星野 MOD END
			// ANK-4494-00-00 ADD START
			// 移転先事業者ドメイン
			tu0011_d010_map.put(ETU0011D010CBSMsg.ITENS_JIGYOSHA_DOMAIN, zm0321_a010_map1.get(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
			// 移転先事業者電話番号(ハイフン削除)
			String itns_jgs_tln = (String)zm0321_a010_map2.get(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE);
			if (itns_jgs_tln != null)
			{
				itns_jgs_tln = itns_jgs_tln.replace(HYPHEN, JKKSvcConst.STRING_BLANK);
			}
			tu0011_d010_map.put(ETU0011D010CBSMsg.ITENS_JIGYOSHA_TELNO, itns_jgs_tln);
			// 記事欄1_番号取得事業者向け
			tu0011_d010_map.put(ETU0011D010CBSMsg.KIJIRAN_1_NOSK_JGSMK, null);
			// 記事欄2_番号取得事業者向け
			tu0011_d010_map.put(ETU0011D010CBSMsg.KIJIRAN_2_NOSK_JGSMK, null);
			
			// マンション物件番号
			String mansionBukkenNo = null;
			if (kk0251_b003_map != null && kk0251_b003_map.size() > 0)
			{
				mansionBukkenNo = (String)kk0251_b003_map.get(0).get(EKK0251B003CBSMsg1List.MANSION_BUKKEN_NO);
			}
			if (!StringUtils.isEmpty(mansionBukkenNo))
			{
				// 自社内記事欄
				tu0011_d010_map.put(ETU0011D010CBSMsg.JI_SHANAI_KIJIRAN, JI_SHANAI_KIJIRAN_MANSION);
			}
			
			// 同番移転申込有無
			// ANK-4685-00-00 MOD START
//			String dobaniten_mskm_um = (String)kk0191_a010_map.get(EKK0191A010CBSMsg1List.DOBANITEN_MSKM_UM);;
			String dobaniten_mskm_um = (String)paramMap.get("dobaniten_mskm_um");
			// ANK-4685-00-00 MOD END
			
			if (dobaniten_mskm_um != null && JKKSvcConst.UM_ARI.equals(dobaniten_mskm_um))
			{
				// 設置場所住所変更有無
				tu0011_d010_map.put(ETU0011D010CBSMsg.SETPLACE_AD_CHGE_UM, JKKSvcConst.UM_ARI);
			}
			else if (dobaniten_mskm_um != null && JKKSvcConst.UM_NASI.equals(dobaniten_mskm_um))
			{
				// 設置場所住所変更有無
				tu0011_d010_map.put(ETU0011D010CBSMsg.SETPLACE_AD_CHGE_UM, JKKSvcConst.UM_NASI);
			}
			
			// 設置場所手投入識別_市区町村名
			tu0011_d010_map.put(ETU0011D010CBSMsg.SETPLC_HTNY_SKBT_CITY_NM, JKKSvcConst.UM_NASI);
			// 設置場所手投入識別_大字_通称名
			tu0011_d010_map.put(ETU0011D010CBSMsg.SETPLC_HTNY_SKBT_OAZTSU_NM, JKKSvcConst.UM_NASI);
			// 設置場所手投入識別_字丁目名
			tu0011_d010_map.put(ETU0011D010CBSMsg.SETPLC_HTNY_SKBT_AZCHO_NM, JKKSvcConst.UM_NASI);
			
			// ANK-4685-00-00 ADD START
			// 移転元通信事業者がNTTの場合
			if (JKKSvcConst.TSJGS_CD_NTT.equals(itnm_tsjgs_cd))
			{			
				// NTTかつ同番移転有無がありの場合
				if (JKKSvcConst.UM_ARI.equals(dobaniten_mskm_um))
				{
					// 加入権移転先住所　←　移転先住所
					// 加入権移転先住所コード
					tu0011_d010_map.put(ETU0011D010CBSMsg.KANYKN_ITENS_AD_CD, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_CD));
					// 加入権移転先郵便番号
					tu0011_d010_map.put(ETU0011D010CBSMsg.KANYKN_ITENS_PCD, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_POST_CD));
					// 加入権移転先都道府県名
					tu0011_d010_map.put(ETU0011D010CBSMsg.KANYKN_ITENS_STATE_NM, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_STATE));
					// 加入権移転先市区町村名
					tu0011_d010_map.put(ETU0011D010CBSMsg.KANYKN_ITENS_CITY_NM, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_CITY));
					// 加入権移転先大字通称名
					tu0011_d010_map.put(ETU0011D010CBSMsg.KANYKN_ITENS_OAZTSU_NM, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_OAZTSU));
					// 加入権移転先字丁目名
					tu0011_d010_map.put(ETU0011D010CBSMsg.KANYKN_ITENS_AZCHO_NM, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_AZCHO));
					// 加入権移転先番地号
					tu0011_d010_map.put(ETU0011D010CBSMsg.KANYKN_ITENS_BNCHIGO, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_BNCHIGO));
					// 加入権移転先住所補記・建物名
					tu0011_d010_map.put(ETU0011D010CBSMsg.KANYKN_ITENS_ADRTTM, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_ADRTTM));
					// 加入権移転先住所補記・部屋番号
					tu0011_d010_map.put(ETU0011D010CBSMsg.KANYKN_ITENS_ADRRM, (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_ADRRM));
					// 加入権移転先住所手動入力フラグ
					tu0011_d010_map.put(ETU0011D010CBSMsg.KNKN_ITNSAD_MAN_INPUT_FLG, FLG_OFF);
				}
			}
			// ANK-4685-00-00 ADD END
			
			// 同時工事有無
			String bmp_doji_koji_kibo = (String)paramMap.get("bmp_doji_koji_kibo");
			// v72.00.02 ANK-4494-00-00 STEP2 MOD START
//			if (bmp_doji_koji_kibo != null && JKKSvcConst.UM_ARI.equals(bmp_doji_koji_kibo))
//			{
//				// 工事実施方法
//				tu0011_d010_map.put(ETU0011D010CBSMsg.KOJI_JSSI_WAY, JTUStrConst.INDIVIUAL_CONTACT_KOJI);
//			}
//			else
//			{
//				// 工事実施方法
//				tu0011_d010_map.put(ETU0011D010CBSMsg.KOJI_JSSI_WAY, JTUStrConst.NO_CONTACT_KOJI);
//			}
			// 工事実施方法
			tu0011_d010_map.put(ETU0011D010CBSMsg.KOJI_JSSI_WAY, (String)paramMap.get("koji_jssi_way"));
			// v72.00.02 ANK-4494-00-00 STEP2 MOD END
			
			// v72.00.02 ANK-4494-00-00 STEP2 MOD START
			// 想定切替時間帯
//			tu0011_d010_map.put(ETU0011D010CBSMsg.SOTEI_SWITCH_TIMEZ, null);
			tu0011_d010_map.put(ETU0011D010CBSMsg.SOTEI_SWITCH_TIMEZ, (String)paramMap.get("sotei_switch_timez"));
			// v72.00.02 ANK-4494-00-00 STEP2 MOD END
			
			// 局番別NTT収容局一覧照会明細がnullではない場合
			if (tu0101_b020_map != null && tu0101_b020_map.size() > 0)
			{
				// 番ポPSTNドライカッパ利用有無
				tu0011_d010_map.put(ETU0011D010CBSMsg.BMP_PSTN_DRYCOPPER_USE_UM, JKKSvcConst.UM_NASI);
			}
			else
			{
				// 番ポPSTNドライカッパ利用有無
				tu0011_d010_map.put(ETU0011D010CBSMsg.BMP_PSTN_DRYCOPPER_USE_UM, JKKSvcConst.UNSELECT);
			}
			// ANK-4494-00-00 ADD END
			
			/** 番ポ工事登録 */
			// ・ETU0011D010 番ポ工事登録
			reqMap = mapper.setETU0011D010(param, fixedText, tu0011_d010_map);
			resMap = scCall.run(reqMap, keepSesHandle.get());
			mapper.getETU0011D010( param, fixedText, resMap);
			mapper.scResultCheck(param);
			
			// 対応履歴登録
			HashMap<String, Object> taiorrk = new HashMap<String, Object>();
			// 登録種別
			taiorrk.put("trk_sbt", "01");
			// SYSID
			taiorrk.put("sysid", (String)paramMap.get(JKKAdInfChgConstCC.PARAM_KEY_SYSID));
			// お客様名
			taiorrk.put("cust_nm", ck0011_a010_map.get(ECK0011A010CBSMsg1List.CUST_NM));
			// 申込日
			taiorrk.put("mskm_ymd", (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_MSKM_YMD));
			// 電話番号
			taiorrk.put("telno", (String)paramMap.get("tln_bmp_tln"));
			// 設置場所住所コード
			taiorrk.put("setplace_ad_cd", (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_ITENS_AD_CD));
			// サービス契約番号
			taiorrk.put("svc_kei_no", (String)paramMap.get(JKKAdchgConstCC.PARAM_KEY_SVC_KEI_NO));
			// ユーザID
			taiorrk.put("user_id", param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
// OM-2013-0002656対応 20140328 星野 ADD START
			// 組織コード
			taiorrk.put(JKKAddBmpTaiorrkiConstCC.ORG_CD, (String)paramMap.get("org_cd"));
			// 組織名
			taiorrk.put(JKKAddBmpTaiorrkiConstCC.ORG_NM, (String)paramMap.get("org_nm"));
// OM-2013-0002656対応 20140328 星野 ADD END
			
			// 番ポ対応履歴登録部品呼出
			JKKBpCommon.addBmpTaiorrki(handle, param, taiorrk, fixedText);
		
	
			return param;
// OM-2013-0004303対応 20131120 星野 ADD START
		} finally {

			// ・セッションハンドル保持域
			if(keepSesHandle.get() != null){
				keepSesHandle.remove();
			}
		}

// OM-2013-0004303対応 20131120 星野 ADD END
	}

// IT1-2012-0001957対応 20121105 星野 ADD START
	private String getUcwkNoFromTelNo(IRequestParameterReadWrite param, String fixedText, String svc_kei_no, String telno) throws Exception{
		
		HashMap<String, String> condMap = new HashMap<String, String>();
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;
		// 住所変更登録コモンコンポーネントマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		
		
		// ・EKK0161B004 サービス契約内訳一覧照会
		condMap.clear();
		condMap.put( JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, svc_kei_no );
// IT2-2013-0000347対応 20130405 星野 MOD START
//		reqMap = mapper.setEKK0161B004( param, fixedText, condMap );
		reqMap = mapper.setEKK0161B004( param, fixedText, condMap, JPCModelConstant.FUNC_CD_3 );
// IT2-2013-0000347対応 20130405 星野 MOD END
		resMap = scCall.run( reqMap, keepSesHandle.get() );
		ArrayList<HashMap<String, Object>> kk0161_b004_lst = mapper.getEKK0161B004( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		// サービス契約内訳番号を初期化
		String svc_kei_ucwk_no = "";
		for(HashMap<String, Object> kk0161_b004_map : kk0161_b004_lst){
			
// OM-2013-0005335対応 20131227 星野 ADD START
			// キャンセル済・解約済は処理対象外
			String ucwkStat = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT);
			if("910".equals(ucwkStat) || "920".equals(ucwkStat)){
				continue;
			}
// OM-2013-0005335対応 20131227 星野 ADD END
			
			// サービス契約内訳番号を一覧照会から取得
			svc_kei_ucwk_no = (String)kk0161_b004_map.get(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
			
			// EKK0191A010 サービス契約内訳＜eo光電話＞一意照会
			condMap.clear();
			condMap.put( JKKAdchgMapperCC.COND_KEY_SVC_KEI_UCWK_NO, svc_kei_ucwk_no );
			reqMap = mapper.setEKK0191A010( param, fixedText, condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			HashMap<String, Object> kk0191_a010_map = mapper.getEKK0191A010( param, fixedText, resMap );
			mapper.scResultCheck( param );
			
			// 電話番号が一致する場合
			if( telno.equals( kk0191_a010_map.get(EKK0191A010CBSMsg1List.TELNO) ) ){
				// そのサービス契約内訳番号を使う
				break;
			}
		}
		return svc_kei_ucwk_no;
	}
// IT1-2012-0001957対応 20121105 星野 ADD END
	
	/**
	 * 市内局番編集を行う。
	 * @param tln
	 * @return String
	 * @throws Exception
	 */
	public static String editTln(String tln, String areaCd) throws Exception {
		
		// NULLチェック
		if(StringUtils.isEmpty(tln)) {
			return tln;
		}
		
		/** 11桁の場合 **/
		if(tln.length() == 11) {
			return tln.substring(3, 7);
		/** 10桁の場合 **/
		} else if(tln.length() == 10) {
			
			String kykNo = tln.substring(0, 6);
			
			return kykNo.substring(areaCd.length());
		}
		
		return tln;
	}
	/**
	 * <dl>
	 * <dt>処理概要：
	 * <dd>デバッグログを出力します<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param dumpObj 出力するオブジェクト
	 */
	private void printlnEjbLog(Object dumpObj) {
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), dumpObj, null, null, null);
	}
	
}