/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom, 2011
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKButuryuCtrl
*   ソースファイル名：JKKButuryuCtrl.java
*   作成者          ：富士通
*   日付            ：2011年10月18日
*＜機能概要＞
*   物流サービスIFの処理を纏めた共通クラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/10/18   富士通      新規作成
*   v8.00.00    2014/05/04   FJ)阮       【OM-2014-0001708】
*   v9.00.00    2014/08/15   FJ)田中     【OM-2014-0002621】
*  v10.00.00    2014/09/16   FJ)北谷     【IT2-2014-0000302】フロントからのSTB交換対応
*  v10.01.00    2014/10/08   FJ) 江藤    【ANK-1918-06-00】出荷指図連携タイミングの見直しについて
*  v23.00.00    2016/01/20   FJ) 澤田    【IT1-2016-0000010】１０Ｇコース照査取消対応
*  v33.00.00	2017/10/09   FJ) 田原	 【ANK-2801-01-00】全戸一括マンション子契約強制解約処理改善対応（サービス解約版）
*  v37.00.00    2018/04/06   FJ)澤田     【ANK-3366-00-00】eo光設備卸対応
*  v40.00.00    2018/10/24   FJ)三原     【ANK-3412-00-00】５ギガ・１０ギガコース導入対応
*  v45.00.00    2019/07/29   FJ)河邊     【OM-2019-0000788】電話解約によるONU解約不正
*  v51.00.00	2020/10/20	 FJ)吉村	 【ANK-3949-00-00】Netflix導入対応（STEP1）
*  v56.00.00	2021/10/15	 FJ) 西窪	 【ANK-4038-00-00】【eo定期】光ローゼット化対応
*  v61.00.00	2022/12/14	 FJ)宇野	 【ANK-4315-00-00】【eo定期】 eoホームゲートウェイ導入対応
*  v61.00.01	2023/09/01	 FJ)謝		 【ANK-4431-00-00】【ｅｏ定期】 ONU計画交換対応
*  v71.00.00	2024/01/23	 FJ) 藤本涼  【ANK-4468-00-00】eo光ネット「シンプルプラン」追加対応
*  v73.00.00	2024/10/30	 FJ) 森      【ANK-4493-00-00】【eo定期】 光配線マンションのコースアップ対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JKKStrConst;
import eo.ejb.cbs.cbsmsg.EDK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081B007CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B007CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0241B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0241B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0251B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0251B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B008CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B008CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B504CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B504CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0891A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0891A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg1List;

/**
 * 
 * 物流制御部品クラス
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JKKButuryuCtrl
{

//	/** 異動区分（新規契約） */
//	private static final String IDO_DIV_NEW = "00001";
//	/** 異動区分（サービス追加） */
//	private static final String IDO_DIV_SVC_ADD = "00002";
	/** 異動区分（解約） */
	private static final String IDO_DIV_DSL = "00005";
	/** 異動区分（撤去(解約)） */
	private static final String IDO_DIV_DSL_TEKKYO = "00006";
	/** 異動区分（キャンセル） */
	private static final String IDO_DIV_CANCEL = "00008";
	/** 異動区分（コース変更） */
	private static final String IDO_DIV_CHANGE = "00009";
	/** 異動区分（住所変更・確定） */
	private static final String IDO_DIV_AD_CHG_FIX = "00020";
	/** 異動区分（機器機種変更） */
	private static final String IDO_DIV_KSHU_CHG = "00028";
	/** 異動区分（eo光電話・番号追加） */
	private static final String IDO_DIV_TELBNGU_ADD = "00041";
	/** 異動区分（割引情報登録） */
	private static final String IDO_DIV_WRIBK_ADD = "00049";
	/** 異動区分（強制解約） */
	private static final String IDO_DIV_KSI_DSL = "00064";
	/** 異動区分（機器契約変更） */
	private static final String IDO_DIV_KKEI_CHG = "00026";

	
	/** サービスコード（インターネットサービス） */
	private static final String SVC_CD_IN_SVC = JKKStrConst.CD00130_01;
	/** サービスコード（電話サービス） */
	private static final String SVC_CD_TEL_SVC = JKKStrConst.CD00130_02;
	/** サービスコード（テレビサービス） */
	private static final String SVC_CD_TV_SVC = JKKStrConst.CD00130_03;
	
	/** 料金グループコード（eo光テレビ(K-CAT)） */
	public static final String PRC_GRP_CD_11 = JKKStrConst.CD00133_11;
	//↓↓↓2012-06-26追加、ST2-2012-0001187対応↓↓↓
	/** 料金グループコード（eo光テレビ(KCN)） */
	public static final String PRC_GRP_CD_12 = JKKStrConst.CD00133_12;
	//↑↑↑2012-06-26追加、ST2-2012-0001187対応↑↑↑
	/** 料金グループコード（eo光テレビ(再送信)） */
	public static final String PRC_GRP_CD_13 = JKKStrConst.CD00133_13;
	
	/** 料金コースコード（eo光ネット・ホーム100M） */
	private static final String PCRS_CD_A03 = JKKStrConst.CD00134_A03;
	/** 料金コースコード（eo光ネット・ホーム100Mプレミアム） */
	private static final String PCRS_CD_A04 = JKKStrConst.CD00134_A04;
	/** 料金コースコード（eo光ネット・ホーム1G） */
	private static final String PCRS_CD_A05 = JKKStrConst.CD00134_A05;
	/** 料金コースコード（eo光ネット・ホーム100M VPN） */
	private static final String PCRS_CD_A06 = JKKStrConst.CD00134_A06;
	/** 料金コースコード（eo光ネット・ホーム200M） */
	private static final String PCRS_CD_A07 = JKKStrConst.CD00134_A07;
	/** 料金コースコード（eo光ネット・メゾン100M） */
	private static final String PCRS_CD_A08 = JKKStrConst.CD00134_A08;
	/** 料金コースコード（eo光ネット・メゾン100Mプレミアム） */
	private static final String PCRS_CD_A09 = JKKStrConst.CD00134_A09;
	/** 料金コースコード（eo光ネット・メゾン1G） */
	private static final String PCRS_CD_A10 = JKKStrConst.CD00134_A10;
	/** 料金コースコード（eo光ネット・メゾン200M） */
	private static final String PCRS_CD_A11 = JKKStrConst.CD00134_A11;
	/** 料金コースコード（eo光電話・1番号コース） */
	private static final String PCRS_CD_A31 = JKKStrConst.CD00134_A31;
	/** 料金コースコード（eo光電話・2番号コース） */
	private static final String PCRS_CD_A32 = JKKStrConst.CD00134_A32;
	/** 料金コースコード (eo光ネット・マンション　プライベート　100M VDSL1) */
	private static final String PCRS_CD_A47 = "A47";
	/** 料金コースコード (eo光ネット・マンション　プライベート　100M VDSL2) */
	private static final String PCRS_CD_A48 = "A48";
	/** 料金コースコード (eo光ネット・マンション　プライベート　100M イーサ) */
	private static final String PCRS_CD_A49 = "A49";
	/** 料金コースコード (eo光ネット・マンション　グローバル　100M　VDSL2) */
	private static final String PCRS_CD_A50 = "A50";
	/** 料金コースコード (eo光ネット・マンション　グローバル　100M　VDSL3) */
	private static final String PCRS_CD_A51 = "A51";
	/** 料金コースコード (eo光ネット・マンション　グローバル　100M　VDSL4) */
	private static final String PCRS_CD_A52 = "A52";
	/** 料金コースコード (eo光ネット・マンション　グローバル　100M　VDSL5) */
	private static final String PCRS_CD_A53 = "A53";
	/** 料金コースコード (eo光ネット・マンション　グローバル　100M　イーサ) */
	private static final String PCRS_CD_A54 = "A54";
	/** 料金コースコード (eo光ネット・マンション　グローバル　1G　イーサ) */
	private static final String PCRS_CD_A55 = "A55";
	/** 料金コースコード (eo光ネット・マンション　光配線　100M) */
	private static final String PCRS_CD_A56 = "A56";
	/** 料金コースコード (eo光ネット・マンション　光配線　1G) */
	private static final String PCRS_CD_A57 = "A57";
	//ANK-4493-00-00 ADD START
	/** 料金コースコード (eo光ネット・マンション　光配線 10G) */
	private static final String PCRS_CD_A74 = "A74";
	//ANK-4493-00-00 ADD END
	// IT1-2016-0000010 2016/01/20 ADD START
	/** 料金コースコード（eo光ネット・ホーム10G） */
	private static final String PCRS_CD_A83 = JKKStrConst.CD00134_A83;
	/** 料金コースコード（eo光ネット・メゾン10G） */
	private static final String PCRS_CD_A84 = JKKStrConst.CD00134_A84;
	// IT1-2016-0000010 2016/01/20 ADD END
	//ANK-3366-00-00 ADD START
	/** 料金コースコード（卸ネット） */
	private static final String PCRS_CD_A88 = "A88";
	//ANK-3366-00-00 ADD END
	// ANK-3412-00-00 ADD START
	/** 料金コースコード（eo光ネット・ホーム5G） */
	private static final String PCRS_CD_A89 = "A89";
	/** 料金コースコード（eo光ネット・メゾン5G） */
	private static final String PCRS_CD_A90 = "A90";
	// ANK-3412-00-00 ADD END
	// ANK-3949-00-00 ADD START
	/** 料金コースコード（eo光ネット・ホーム1G Netflixパック） */
	private static final String PCRS_CD_A91 = JKKStrConst.CD00134_A91;
	/** 料金コースコード（eo光ネット・メゾン1G Netflixパック） */
	private static final String PCRS_CD_A92 = JKKStrConst.CD00134_A92;
	/** 料金コースコード（eo光ネット・ホーム5G Netflixパック） */
	private static final String PCRS_CD_A93 = JKKStrConst.CD00134_A93;
	/** 料金コースコード（eo光ネット・メゾン5G Netflixパック） */
	private static final String PCRS_CD_A94 = JKKStrConst.CD00134_A94;
	/** 料金コースコード（eo光ネット・ホーム10G Netflixパック） */
	private static final String PCRS_CD_A95 = JKKStrConst.CD00134_A95;
	/** 料金コースコード（eo光ネット・メゾン10G Netflixパック） */
	private static final String PCRS_CD_A96 = JKKStrConst.CD00134_A96;
	// ANK-3949-00-00 ADD END
	// ANK-4468-00-00 ADD START
	/** 料金コースコード（eo光シンプルプラン １０ギガコース） */
	private static final String PCRS_CD_A97 = JKKStrConst.CD00134_A97;
	/** 料金コースコード（eo光シンプルプラン １０ギガコース Netflixパック） */
	private static final String PCRS_CD_A99 = JKKStrConst.CD00134_A99;
	// ANK-4468-00-00 ADD END
	
	/** 機器提供サービスコード（ＯＮＵ） */
	private static final String KKTK_SVC_CD_ONU = JKKStrConst.CD00132_ONU;
	/** 機器提供サービスコード（Ｖ−ＯＮＵ） */
	private static final String KKTK_SVC_CD_VONU = JKKStrConst.CD00132_VONU;
//	/** 機器提供サービスコード（ＢＢＲ） */
//	private static final String KKTK_SVC_CD_BBR = "C014";
	// ANK-1578-00-00 2013/12/09 START
	/** 機器提供サービスコード（多機能ルータ） */
	private static final String KKTK_SVC_CD_TAKINOU = "C024";
	// ANK-1578-00-00 2013/12/09 END
	
	// ANK-4315-00-00 ADD STR
	/** 機器提供サービスコード（HGW） */
	private static final String KKTK_SVC_CD_HGW = "C025";
	
	/** 回線に紐づく機器 */
	private static List<String> kaisenKikiList = Arrays.asList(new String[]{KKTK_SVC_CD_TAKINOU, KKTK_SVC_CD_HGW});

	// ANK-4315-00-00 ADD END
	
	// ST1-2012-0000515 2012/09/08 ADD START
	/** 機器提供サービスコードＶＤＳＬモデム） */
	private static final String KKTK_SVC_CD_VDSL = JKKStrConst.CD00132_MODEM;
	/** 料金プランコード（eo光電話・１番号コース　（マンションタイプ）） */
	private static final String PPLAN_CD_PA3102 = "PA3102";
	/** 料金プランコード（eo光電話・２番号コース　（マンションタイプ）） */
	private static final String PPLAN_CD_PA3202 = "PA3202";
	// ST1-2012-0000515 2012/09/08 ADD END
	
	//↓↓↓2012-10-31追加　ロット１ST2-2012-0001902対応↓↓↓
	/** 機器提供サービスコード　スプリッタ） */
	private static final String KKTK_SVC_CD_SPLTR = "C006";
	/** 機器提供サービスコード　インラインフィルタ） */
	private static final String KKTK_SVC_CD_ILFLTR = "C008";
	//↑↑↑2012-10-31追加　ロット１ST2-2012-0001902対応↑↑↑

	/** サービス契約ステータス（解約済） */
	public static final String SVC_KEI_STAT_DSL_ZM = "910";
	/** サービス契約ステータス（キャンセル済） */
	public static final String SVC_KEI_STAT_CNCL_ZM = "920";
	
	// OM-2014-0002621対応 20140814 田中 ADD START
	/** 支払方式コード */
	/** 全戸一括 **/
	private static final String PAY_HOSHIKI_CD_ZKI = "003";
	/** 全居住者一括 **/
	private static final String PAY_HOSHIKI_CD_KYI = "004";
	// OM-2014-0002621対応 20140814 田中 ADD END
	
	/** エラーメッセージ */
	private static final String ERR_MSG = "INVALID_RETURN_MESSAGE";
	
	/** SC呼び出し部品 */
	ServiceComponentRequestInvoker scCall = null;
	
	/** サービスインタフェース呼び出しで使用するマッパー群 */
	private JKKButuryuCtrlMapper mapper = null;
	
	/** ユーザ任意文字列 */
	private String fixedTextGlobal = null;
	
	/**
	 * 物流制御部品の初期処理
	 * 
	 * @param fixedText ユーザ任意文字列
	 */
	private void init(String fixedText)
	{
		// SC呼び出し部品のインスタンス生成
		if (this.scCall == null)
		{
			this.scCall = new ServiceComponentRequestInvoker();
		}
		
		// マッパーのインスタンス生成
		if (null == this.mapper)
		{
			this.mapper = new JKKButuryuCtrlMapper();
		}
		
		// ユーザ任意文字列をグローバルで保持
		this.fixedTextGlobal = fixedText;
	}
	
	/**
	 * 配送処理
	 * 配送情報の作成を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param mskm_no 申込番号
	 * @param mskm_dtl_no 申込明細番号
	 * @param mskmsho_no 申込書番号
	 * @param kktk_svc_kei_no 機器提供サービス契約番号
	 * @param ido_div 異動区分
	 * @param adchg_ido_div 住所変更内異動区分
	 * @param eDK0011D020Hash 配送受付サービスIFの結果HashMap
	 * @param fixedText ユーザ任意文字列
	 * @param argSokoCd 倉庫コード（機種変更の場合） 2012-04-07追加　IT2-2012-0000393対応
	 * @param haisoRsvYmd 配送予定年月日 20141006 ANK-1918-06-00
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int createHaiso(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String mskm_no,
			String mskm_dtl_no,
			String mskmsho_no,
			List<HashMap<String, Object>> kktk_svc_keiList,
			String ido_div,
			// 20120905 住所変更リファクタリング対応 START
			String adchg_ido_div,
			// 20120905 住所変更リファクタリング対応 END
			HashMap<String, Object> eDK0011D020Hash,
			// 20141008 ANK-1918-06-00 配送予定年月日を追加 MOD START
//			String fixedText, String argSokoCd)
			String fixedText, String argSokoCd
			,String haisoRsvYmd
			// 20141008 ANK-1918-06-00 配送予定年月日を追加 MOD END
			)
			throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		//↓↓↓2012-04-07追加　IT2-2012-0000393対応↓↓↓
		ArrayList<HashMap<String, Object>> eKK0341A010HashList = new ArrayList<HashMap<String, Object>>();
		// ANK-4315-00-00 ADD START
		// ローゼットチェック結果を取得
		Map inMap = (Map<String, Object>)param.getData(this.fixedTextGlobal);
		String onuKokanFlg = (String)inMap.get("onuKokanFlg");
		// ANK-4315-00-00 ADD END
		for (Map<?, ?> kktk_svc_kei: kktk_svc_keiList)
		{
			String kktk_svc_kei_no = (String)kktk_svc_kei.get(JKKButuryuCtrlCC.KEY_KKTK_SVC_KEI_NO);
		//↑↑↑2012-04-07追加　IT2-2012-0000393対応↑↑↑
			HashMap<String, Object> eKK0341A010Hash = new HashMap<String, Object>();
			// 機器提供サービス契約照会処理
// IKK-2013-0000340対応 20130314 星野 ADD START
			if( JKKSvcConst.IDO_DIV_ADCHGADD.equals(ido_div) ){
				// 異動区分「住所変更・登録」の場合、予約適用年月日20991231で最新のレコードを取得
				searchKktkSvcKeiWithRsvAplyYmd(param, handle, kktk_svc_kei_no, "20991231", eKK0341A010Hash, this.fixedTextGlobal);
			}
//↓↓↓2013-04-23追加　巻３IT1-2013-0000998（出荷指図中の番号追加で配送エラー）↓↓↓
			else if (JKKSvcConst.IDO_DIV_HTELNOADD.equals(ido_div))
			{
				String gene_add_dtm = (String)kktk_svc_kei.get("gene_add_dtm");
				searchKktkSvcKei(param, handle, kktk_svc_kei_no, gene_add_dtm, eKK0341A010Hash, this.fixedTextGlobal);
			}
//↑↑↑2013-04-23追加　巻３IT1-2013-0000998（出荷指図中の番号追加で配送エラー）↑↑↑
// ▽▽▽ ANK-3412-00-00 ADD START
			else if (JKKSvcConst.IDO_DIV_SVCADD.equals(ido_div) && kktk_svc_kei.containsKey("gene_add_dtm"))
			{
				String gene_add_dtm = (String)kktk_svc_kei.get("gene_add_dtm");
				searchKktkSvcKei(param, handle, kktk_svc_kei_no, gene_add_dtm, eKK0341A010Hash, this.fixedTextGlobal);
			}
// ▲▲▲ ANK-3412-00-00 ADD END
			else
			{
// IKK-2013-0000340対応 20130314 星野 ADD END
				//2012/04/04 住所変更対応 MOD START
		//		searchKktkSvcKei(param, handle, kktk_svc_kei_no, eKK0341A010Hash, this.fixedTextGlobal);
				searchKktkSvcKei(param, handle, kktk_svc_kei_no, null, eKK0341A010Hash, this.fixedTextGlobal);
				//2012/04/04 住所変更対応 MOD END
// IKK-2013-0000340対応 20130314 星野 ADD START
			}
// IKK-2013-0000340対応 20130314 星野 ADD END
			
			// 機器提供サービス契約情報を取り出す
			CAANMsg[] eKK0341A010CBSMSG1List = (CAANMsg[])eKK0341A010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
			if (eKK0341A010CBSMSG1List == null || eKK0341A010CBSMSG1List.length == 0)
			{
				// 取得できない場合、正常終了
				return 0;
			}
			
			// 20120905 住所変更リファクタリング対応 START
			//障害対応　2012/02/21 中島　START
			// IT2-2012-0000930 2012/06/22 start  IDO_DIV_CHANGE を追加
			//if (IDO_DIV_WRIBK_ADD.equals(ido_div) || IDO_DIV_KSHU_CHG.equals(ido_div) || IDO_DIV_TELBNGU_ADD.equals(ido_div) || IDO_DIV_CHANGE.equals(ido_div))
			if (IDO_DIV_WRIBK_ADD.equals(ido_div) || IDO_DIV_KSHU_CHG.equals(ido_div) || IDO_DIV_TELBNGU_ADD.equals(ido_div) || IDO_DIV_CHANGE.equals(ido_div) ||
					IDO_DIV_KKEI_CHG.equals(ido_div) ||
					(JKKSvcConst.IDO_DIV_ADCHGADD.equals(ido_div) && (JKKSvcConst.ADCHG_IDO_DIV_TELNO_ADD.equals(adchg_ido_div) || JKKSvcConst.ADCHG_IDO_DIVCOURSE_CHG.equals(adchg_ido_div)))
			// ANK-4315-00-00 ADD START
			|| "1".equals(onuKokanFlg)
			// ANK-4315-00-00 ADD END
			// ANK-4431-00-00 ADD START
			|| JKKStrConst.CD00576_ONU_PLAN_KKN.equals(ido_div)
			// ANK-4431-00-00 ADD END
			)
			// IT2-2012-0000930 2012/06/22 end
			// 20120905 住所変更リファクタリング対応 END
			{
				/** 「異動区分」が「割引情報登録」「機器機種変更」「光電話・番号追加」「コース変更」、
				 または、「異動区分」が「住所変更・登録」かつ「住所変更内異動区分」が「光電話・番号追加」「コース変更」、
				 または、「異動区分」が「ONU計画交換」の場合
				 機器の状態が"契約変更中"となり、予約適用コード=1のレコードが最新となる。
				 そのため、機器提供サービス一意照会では最新のレコードでの配送が作成できないため、
				 機器提供サービス契約全件照会を行い、パラメータで引き渡されている機器提供サービス契約番号と同一の最新レコードを取得する。*/
	
				//機器提供サービス契約一意照会で取得したサービス契約番号を、一時領域に格納する。
				HashMap<String, Object> eKK0341A010CBSMSG = (HashMap<String, Object>)eKK0341A010CBSMSG1List[0].getMsgData();
				String tmpSvcKeiNo = (String)eKK0341A010CBSMSG.get(EKK0341A010CBSMsg1List.SVC_KEI_NO);
				String tmpKktkSvcKeiNo = null;
				// 機器提供サービスコードが多機能ルータまたはONUの場合、機器提供サービス契約番号を取得
				String tmpKktkSvcCd = (String)eKK0341A010CBSMSG.get(EKK0341A010CBSMsg1List.KKTK_SVC_CD);
				// ANK-4038-00-00 MOD START
//				if (KKTK_SVC_CD_TAKINOU.equals(tmpKktkSvcCd))
				// ANK-4315-00-00 MOD START
				//if (KKTK_SVC_CD_TAKINOU.equals(tmpKktkSvcCd) || KKTK_SVC_CD_ONU.equals(tmpKktkSvcCd))
				if (KKTK_SVC_CD_TAKINOU.equals(tmpKktkSvcCd) || KKTK_SVC_CD_ONU.equals(tmpKktkSvcCd) || KKTK_SVC_CD_HGW.equals(tmpKktkSvcCd))
				// ANK-4315-00-00 MOD END
				// ANK-4038-00-00 MOD END
				{
					tmpKktkSvcKeiNo = (String)eKK0341A010CBSMSG.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO);
				}
				
				// 機器提供サービス契約全件照会処理サービスIF呼出処理を実施
				HashMap<String, Object> eKK0341B008Hash = new HashMap<String, Object>();
				searchKktkSvcKeiAll(param, handle, tmpSvcKeiNo, tmpKktkSvcKeiNo, eKK0341B008Hash, this.fixedTextGlobal);
				
				// 機器提供サービス契約全件照会情報より、機器種別がＢＢＲで最新のレコードの特定を行う
				CAANMsg[] eKK0341B008CBSMSG1list = (CAANMsg[])eKK0341B008Hash.get(EKK0341B008CBSMsg.EKK0341B008CBSMSG1LIST);
				if (eKK0341B008CBSMSG1list != null && eKK0341B008CBSMSG1list.length != 0)
				{
					for (int i = 0; i < eKK0341B008CBSMSG1list.length; i++)
					{
						HashMap<String, Object> eKK0341B008CBSMSG1 = (HashMap<String, Object>)eKK0341B008CBSMSG1list[i].getMsgData();
	
						/** 機器提供サービス契約全件照会は、世代登録年月日時分秒で降順でソートされている。
						そのため、同一の機器提供サービス契約番号は最初に一致したレコードが最新となる。*/
						if(kktk_svc_kei_no.equals(eKK0341B008CBSMSG1.get(EKK0341B008CBSMsg1List.KKTK_SVC_KEI_NO)))
						{
							//配送情報作成用のパラメータに前回の一意照会情報が残っているため、初期化する。
							eKK0341A010CBSMSG1List = null;
	//						eKK0341A010Hash = null;
							eKK0341A010Hash = new HashMap<String, Object>();
							
							//再度取得した最新世代で機器提供サービス契約を一照会する。
							searchKktkSvcKeiF1(param, handle, (String)eKK0341B008CBSMSG1.get(EKK0341B008CBSMsg1List.KKTK_SVC_KEI_NO), (String)eKK0341B008CBSMSG1.get(EKK0341B008CBSMsg1List.GENE_ADD_DTM), eKK0341A010Hash, this.fixedTextGlobal);
							eKK0341A010CBSMSG1List = (CAANMsg[])eKK0341A010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
							break;
						}
					}
				}
				else
				{
					return 0;
				}
			}
			//障害対応　2012/02/21 中島　END
			
		//↓↓↓2012-04-07追加　IT2-2012-0000393対応↓↓↓
			eKK0341A010HashList.add((HashMap<String, Object>)eKK0341A010CBSMSG1List[0].getMsgData());
		}
		//↑↑↑2012-04-07追加　IT2-2012-0000393対応↑↑↑

		String sokoCd = argSokoCd;															//2012-04-07見直し
		// 20120905 住所変更リファクタリング対応 START
		//if (IDO_DIV_CHANGE.equals(ido_div) && (null == sokoCd || 1 > sokoCd.length()))		//2012-04-07見直し
		if ((IDO_DIV_CHANGE.equals(ido_div) ||
				(JKKSvcConst.IDO_DIV_ADCHGADD.equals(ido_div) && (JKKSvcConst.ADCHG_IDO_DIV_TELNO_ADD.equals(adchg_ido_div) || JKKSvcConst.ADCHG_IDO_DIVCOURSE_CHG.equals(adchg_ido_div))))
				&& (null == sokoCd || 1 > sokoCd.length()))
		// 20120905 住所変更リファクタリング対応 END
		{
			// 異動区分が「コース変更」、または、（「異動区分」が「住所変更・登録」かつ「住所変更内異動区分」が「光電話・番号追加」「コース変更」）の場合
			
			// 業務パラメータ管理一意照会サービスIF呼出処理を実施
			HashMap<String, Object> eZM0321A010Hash = new HashMap<String, Object>();
			callEZM0321A010SC(param, handle, JKKSvcConst.WORK_PARAM_ID_KK_ATADDKIKI_SOKO_CD, eZM0321A010Hash);
			
			// 業務パラメータ管理情報を取り出す
			CAANMsg[] eZM0321A010CBSMSG1list = (CAANMsg[])eZM0321A010Hash.get(EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST);
			if (eZM0321A010CBSMSG1list != null && eZM0321A010CBSMSG1list.length != 0)
			{
				HashMap<String, Object> eZM0321A010CBSMSG1 = (HashMap<String, Object>)eZM0321A010CBSMSG1list[0].getMsgData();
				sokoCd = (String)eZM0321A010CBSMSG1.get(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE);
			}
		}
		
		// IT2-2014-0000302 2014/09/16 add start
		// 機器の親のサービス契約内訳
		ArrayList<HashMap<String, Object>> eKK0161A010HashList = new ArrayList<HashMap<String, Object>>();
		if(IDO_DIV_KSHU_CHG.equals(ido_div)){
			for (int i = 0; i < eKK0341A010HashList.size(); i++){
				HashMap<String, Object> eKK0341A010Hash = eKK0341A010HashList.get(i);
				String svcKeiUcwkNo = (String)eKK0341A010Hash.get(EKK0341A010CBSMsg1List.SVC_KEI_UCWK_NO);
				if(StringUtils.isEmpty(svcKeiUcwkNo)){
					eKK0161A010HashList.add(null);
				}else{
					//機器のサービス契約内訳番号からサービス契約内訳を検索
					HashMap<String, Object> eKK0161A010Hash = new HashMap<String, Object>();
					searchSvcKeiUcwk(param, handle, svcKeiUcwkNo, this.fixedTextGlobal, eKK0161A010Hash);
					CAANMsg[] eKK0161A010CBSMSG1List = (CAANMsg[])eKK0161A010Hash.get(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
					eKK0161A010HashList.add((HashMap<String, Object>)eKK0161A010CBSMSG1List[0].getMsgData());
				}
			}
		}
		// IT2-2014-0000302 2014/09/16 add end
		
		// 配送受付を実施
		callEDK0011D020SC(
				param, 
				handle, 
				mskm_no, 
				mskm_dtl_no, 
				mskmsho_no, 
				ido_div, 
				sokoCd,
				// 20141008 ANK-1918-06-00 配送予定年月日を追加 ADD START
				haisoRsvYmd,
				// 20141008 ANK-1918-06-00 配送予定年月日を追加 ADD END
				//↓↓↓2012-04-07変更　IT2-2012-0000393対応↓↓↓
				eKK0341A010HashList,
				//(HashMap<String, Object>)eKK0341A010CBSMSG1List[0].getMsgData(), 
				//↑↑↑2012-04-07変更　IT2-2012-0000393対応↑↑↑
				// IT2-2014-0000302 2014/09/16 add start
				eKK0161A010HashList,
				// IT2-2014-0000302 2014/09/16 add end
				eDK0011D020Hash);
		
		return 0;
	}
	
	/**
	 * 返品処理
	 * 返品機器情報の作成を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktk_svc_kei_no 機器提供サービス契約番号
	 * @param ido_div 異動区分
	 * @param adchg_ido_div 住所変更内異動区分
	 * @param kktk_svc_kei_gene_add_dtm 機器提供サービス契約世代登録年月日時分秒
	 * @param eDK0301D010Hash 返品機器受付サービスIFの結果HashMap
	 * @param fixedText ユーザ任意文字列
	 * @param kiki_chg_no 機器変更番号　巻@断面合わせ　2012-05-13
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int createHmpin(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktk_svc_kei_no,
			String ido_div,
			// 20120905 住所変更リファクタリング対応 START
			String adchg_ido_div,
			// 20120905 住所変更リファクタリング対応 END
			//2012/04/04 住所変更対応 ADD START
			String kktk_svc_kei_gene_add_dtm,
			//2012/04/04 住所変更対応 ADD END
			HashMap<String, Object> eDK0301D010Hash,
			String fixedText,
			String kiki_chg_no,
			String hmpin_div
	) throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		HashMap<String, Object> eKK0341A010Hash = new HashMap<String, Object>();
		// 機器提供サービス契約照会処理
		//2012/04/04 住所変更対応 MOD START
//		searchKktkSvcKei(param, handle, kktk_svc_kei_no, eKK0341A010Hash, this.fixedTextGlobal);
		searchKktkSvcKei(param, handle, kktk_svc_kei_no, kktk_svc_kei_gene_add_dtm, eKK0341A010Hash, this.fixedTextGlobal);
		//2012/04/04 住所変更対応 MOD END
		
		// 機器提供サービス契約情報を取り出す
		CAANMsg[] eKK0341A010CBSMSG1List = (CAANMsg[])eKK0341A010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
		if (eKK0341A010CBSMSG1List == null || eKK0341A010CBSMSG1List.length == 0)
		{
			// 取得できない場合、処理終了
			return 0;
		}
		
		// 機器提供サービス契約に紐つくサービス契約番号を取得
		HashMap<String, Object> eKK0341A010CBSMSG1 = (HashMap<String, Object>)eKK0341A010CBSMSG1List[0].getMsgData();
		String loadOyaSvkeiNo = (String)eKK0341A010CBSMSG1.get(EKK0341A010CBSMsg1List.SVC_KEI_NO);
		String svcKeiKaisenUcwkNo = (String)eKK0341A010CBSMSG1.get(EKK0341A010CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO);
		String kktkSvcCd = (String)eKK0341A010CBSMSG1.get(EKK0341A010CBSMsg1List.KKTK_SVC_CD);
		
		// 20120920 ANK-1202-00-00 START
		if (KKTK_SVC_CD_ONU.equals(kktkSvcCd) || KKTK_SVC_CD_VONU.equals(kktkSvcCd))
		{
			// ＯＮＵ・Ｖ−ＯＮＵの場合
			
			String workParamId = null;
			if (KKTK_SVC_CD_ONU.equals(kktkSvcCd))
			{
				workParamId = JKKSvcConst.WORK_PARAM_ID_KK_FUMEI_KIKI_ONU;
			} else if (KKTK_SVC_CD_VONU.equals(kktkSvcCd))
			{
				workParamId = JKKSvcConst.WORK_PARAM_ID_KK_FUMEI_KIKI_VONU;
			}
			// 業務パラメータ管理一意照会サービスIF呼出処理を実施
			HashMap<String, Object> eZM0321A010Hash = new HashMap<String, Object>();
			callEZM0321A010SC(param, handle, workParamId, eZM0321A010Hash);
			
			// 業務パラメータ管理情報を取り出す
			CAANMsg[] eZM0321A010CBSMSG1list = (CAANMsg[])eZM0321A010Hash.get(EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST);
			if (eZM0321A010CBSMSG1list != null && eZM0321A010CBSMSG1list.length != 0)
			{
				HashMap<String, Object> eZM0321A010CBSMSG1 = (HashMap<String, Object>)eZM0321A010CBSMSG1list[0].getMsgData();
				String workParamSetteValue = (String)eZM0321A010CBSMSG1.get(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE);
				if (!isNull(workParamSetteValue))
				{
					String taknkikiModelCd = (String)eKK0341A010CBSMSG1.get(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD);
					String fumeiTaknkikiModelCd[] = workParamSetteValue.split(",");
					for (int i = 0; i < fumeiTaknkikiModelCd.length; i++)
					{
						if (fumeiTaknkikiModelCd[i].equals(taknkikiModelCd))
						{
							// 不明機器の場合、返品を行わない
							return 0;
						}
					}
				}
			}
		}
		// 20120920 ANK-1202-00-00 END
		
		if (isNull(loadOyaSvkeiNo))
		{
			// 機器提供サービス契約に紐つくサービス契約番号が設定されていない場合、
			// 回線対象サービス契約より読込親サービス契約番号をたどる
			
			// 回線対象サービス契約一覧照会処理
			HashMap<String, Object> eKK0241B002Hash = new HashMap<String, Object>();
			callEKK0241B002SC(param, handle, svcKeiKaisenUcwkNo, eKK0241B002Hash);
			CAANMsg[] eKK0241B002CBSMSG1List = (CAANMsg[])eKK0241B002Hash.get(EKK0241B002CBSMsg.EKK0241B002CBSMSG1LIST);
			
			// 異動区分ごとに処理判定
			boolean isCancel = IDO_DIV_CANCEL.equals(ido_div);
			boolean isDsl = IDO_DIV_DSL.equals(ido_div) ||
								IDO_DIV_DSL_TEKKYO.equals(ido_div) ||
								(IDO_DIV_AD_CHG_FIX.equals(ido_div) && !isActiveSvcKei(eKK0241B002CBSMSG1List, kktkSvcCd)) ||
								IDO_DIV_KSI_DSL.equals(ido_div) ||
								// 20120905 住所変更リファクタリング対応 START
								JKKSvcConst.ADCHG_IDO_DIV_DSL.equals(adchg_ido_div);
								// 20120905 住所変更リファクタリング対応 END
			
			String tmpYmd = "";
			String tmpSvcCd = "";
			for (int i = 0; i < eKK0241B002CBSMSG1List.length; i++)
			{
				CAANMsg eKK0241B002CBSMSG1 = eKK0241B002CBSMSG1List[i];
				String svcKeiNo = eKK0241B002CBSMSG1.getString(EKK0241B002CBSMsg1List.SVC_KEI_NO);
				String svcCd = eKK0241B002CBSMSG1.getString(EKK0241B002CBSMsg1List.SVC_CD);
				String svcKeiStat = eKK0241B002CBSMSG1.getString(EKK0241B002CBSMsg1List.SVC_KEI_STAT);
				
				// ANK-4315-00-00 MOD START
				//if (KKTK_SVC_CD_ONU.equals(kktkSvcCd) || KKTK_SVC_CD_TAKINOU.equals(kktkSvcCd))
				if (KKTK_SVC_CD_ONU.equals(kktkSvcCd) || KKTK_SVC_CD_TAKINOU.equals(kktkSvcCd) || KKTK_SVC_CD_HGW.equals(kktkSvcCd))
				// ANK-4315-00-00 MOD END
				{
					// ＯＮＵの場合
					
					if (!(SVC_CD_IN_SVC.equals(svcCd) ||
							SVC_CD_TEL_SVC.equals(svcCd)))
					{
						// サービスコードがネット・電話以外の場合、比較対象外と判定
						continue;
					}
				}
				//↓↓↓2012-10-31追加　ロット１ST2-2012-0001902対応↓↓↓
				//VDSLモデム，スプリッタ，インラインフィルタも対象とする
				else if (KKTK_SVC_CD_VDSL.equals(kktkSvcCd) ||
						KKTK_SVC_CD_SPLTR.equals(kktkSvcCd) || KKTK_SVC_CD_ILFLTR.equals(kktkSvcCd))
				{
					// サービスコードがネット・電話以外の場合、比較対象外と判定
					if (!(SVC_CD_IN_SVC.equals(svcCd) || SVC_CD_TEL_SVC.equals(svcCd)))
					{
						continue;
					}
				}
				//↑↑↑2012-10-31追加　ロット１ST2-2012-0001902対応↑↑↑
				else
				{
					// 上記以外の場合(Ｖ−ＯＮＵ)
					
					if (!SVC_CD_TV_SVC.equals(svcCd))
					{
						// サービスコードがテレビ以外の場合、比較対象外と判定
						continue;
					}
				}
				
				// ANK-2801-01-00 DEL START
				// OM-2014-0002621対応 20140814 田中 ADD START
				// 異動区分が強制解約の場合
				//if (IDO_DIV_KSI_DSL.equals(ido_div)) {
					
					// サービス契約の加入契約支払方式が全戸一括または居住者一括かどうかのチェック
					// 全戸一括または居住者一括の場合はサービス契約が解約にならないため、解約として処理しない
				//	isDsl = checkPayHoshikiCd(param, handle, svcKeiNo);
				//}
				// OM-2014-0002621対応 20140814 田中 ADD END
				// ANK-2801-01-00 DEL END
				
				if (isCancel || isDsl)
				{
					if (isCancel)
					{
						// 異動区分がキャンセルの場合
						
						if (!(SVC_KEI_STAT_CNCL_ZM.equals(svcKeiStat) || SVC_KEI_STAT_DSL_ZM.equals(svcKeiStat)))
						{
							// サービス契約ステータスがキャンセル済・解約済以外の場合、比較対象外と判定
							continue;
						}
					}
					else if (isDsl)
					{
						// 異動区分が解約の場合
						
						if (!SVC_KEI_STAT_DSL_ZM.equals(svcKeiStat))
						{
							// サービス契約ステータスが解約済以外の場合、比較対象外と判定
							continue;
						}
					}
					
					// サービス契約一意照会処理
					HashMap<String, Object> eKK0081A010Hash = new HashMap<String, Object>();
					callEKK0081A010SC(param, handle, svcKeiNo, eKK0081A010Hash);
					CAANMsg[] eKK0081A010CBSMSG1List = (CAANMsg[])eKK0081A010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
					if (eKK0081A010CBSMSG1List == null || eKK0081A010CBSMSG1List.length == 0)
					{
						continue;
					}
					CAANMsg eKK0081A010CBSMSG1 = eKK0081A010CBSMSG1List[0];
					
					String ymd = "";
					if (isCancel)
					{
						// 異動区分がキャンセルの場合
						if (SVC_KEI_STAT_CNCL_ZM.equals(svcKeiStat))
						{
							// サービス契約ステータスがキャンセル済の場合
							ymd = eKK0081A010CBSMSG1.getString(EKK0081A010CBSMsg1List.SVC_CANCEL_YMD);
						}
						else
						{
							// 上記以外(実質、解約済)の場合
							ymd = eKK0081A010CBSMSG1.getString(EKK0081A010CBSMsg1List.SVC_DSL_YMD);
						}
						
					}
					else if (isDsl)
					{
						// 異動区分が解約の場合
						
						ymd = eKK0081A010CBSMSG1.getString(EKK0081A010CBSMsg1List.SVC_DSL_YMD);
					}
					
					if (judgeLoadOyaSvkei(tmpSvcCd, tmpYmd, svcCd, ymd, kktkSvcCd))
					{
						loadOyaSvkeiNo = svcKeiNo;
						tmpSvcCd = svcCd;
						tmpYmd = ymd;
					}
				}
				else
				{
					// 上記以外の場合
					
					if (SVC_KEI_STAT_DSL_ZM.equals(svcKeiStat) ||
							SVC_KEI_STAT_CNCL_ZM.equals(svcKeiStat))
					{
						// サービス契約ステータスが解約済・キャンセル済以外の場合、比較対象外と判定
						continue;
					}
					
					if (judgeLoadOyaSvkei(tmpSvcCd, "", svcCd, "", kktkSvcCd))
					{
						loadOyaSvkeiNo = svcKeiNo;
						tmpSvcCd = svcCd;
					}
				}
			}
		}

		//↓↓↓2012-05-13追加　巻@　断面合わせ（異動予約反映からの返品処理に対応）↓↓↓
		if (null == kiki_chg_no || 1 > kiki_chg_no.length())
		{
			//異動予約反映からは機器変更番号は指定されないので、一意照会結果から設定
			kiki_chg_no = (String)eKK0341A010CBSMSG1.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO);
		}
		//↑↑↑2012-05-13追加　巻@　断面合わせ（異動予約反映からの返品処理に対応）↑↑↑

		// ▼▼▼▼▼ 2013/02/04 ST1-2013-0000272 UPD START ▼▼▼▼▼
		// 返品機器受付を実施
		callEDK0301D010SC(
				param,
				handle,
				ido_div,
				loadOyaSvkeiNo,
				eKK0341A010CBSMSG1,
				eDK0301D010Hash,
				kiki_chg_no,
				hmpin_div
		);
		// ▲▲▲▲▲ 2013/02/04 ST1-2013-0000272 UPD E N D ▲▲▲▲▲

		return 0;
	}
	
	/**
	 * 有効サービス契約判定処理
	 * 
	 * @param eKK0241B002CBSMSG1List 回線対象サービス契約一覧照会結果リスト
	 * @param kktkSvcCd 機器提供サービスコード
	 * @return 判定結果(true：有効な契約、false：有効でない契約)
	 */
	private boolean isActiveSvcKei(
			CAANMsg[] eKK0241B002CBSMSG1List,
			String kktkSvcCd)
	{
		boolean isActiveSvcKei = false;
		
		for (int i = 0; i < eKK0241B002CBSMSG1List.length; i++)
		{
			CAANMsg eKK0241B002CBSMSG1 = eKK0241B002CBSMSG1List[i];
			String svcCd = eKK0241B002CBSMSG1.getString(EKK0241B002CBSMsg1List.SVC_CD);
			String svcKeiStat = eKK0241B002CBSMSG1.getString(EKK0241B002CBSMsg1List.SVC_KEI_STAT);
			
			if (KKTK_SVC_CD_ONU.equals(kktkSvcCd))
			{
				// ＯＮＵの場合
				
				if (SVC_CD_IN_SVC.equals(svcCd) ||
						SVC_CD_TEL_SVC.equals(svcCd))
				{
					// サービスコードがネット・電話の場合
					
					if (!(SVC_KEI_STAT_DSL_ZM.equals(svcKeiStat) ||
							SVC_KEI_STAT_CNCL_ZM.equals(svcKeiStat)))
					{
						// サービス契約ステータスが解約済・キャンセル済以外の場合、有効なサービス契約レコードと判定
						
						isActiveSvcKei = true;
						break;
					}
				}
			}
			else
			{
				// 上記以外の場合(Ｖ−ＯＮＵ)
				
				if (SVC_CD_TV_SVC.equals(svcCd))
				{
					// サービスコードがテレビの場合
					
					if (!(SVC_KEI_STAT_DSL_ZM.equals(svcKeiStat) ||
							SVC_KEI_STAT_CNCL_ZM.equals(svcKeiStat)))
					{
						// サービス契約ステータスが解約済・キャンセル済以外の場合、有効なサービス契約レコードと判定
						
						isActiveSvcKei = true;
						break;
					}
				}
			}
		}
		
		return isActiveSvcKei;
	}
	
	/**
	 * 読込親サービス契約判定処理
	 * 
	 * 以下前提条件の下動作を保障する
	 * ・対象外のサービスコード、及び、サービス契約ステータスの契約でないこと
	 * 
	 * @param mtSvcCd 比較元サービスコード
	 * @param mtYmd 比較元年月日
	 * @param skSvcCd 比較先サービスコード
	 * @param skYmd 比較先年月日
	 * @param kktkSvcCd 機器提供サービスコード
	 * @return boolean 判定結果(true：比較先が読込親サービス契約である、false：比較先が読込親サービス契約でない)
	 */
	private boolean judgeLoadOyaSvkei(
			String mtSvcCd,
			String mtYmd,
			String skSvcCd,
			String skYmd,
			String kktkSvcCd) {
		boolean isLoadOyaSvkei = false;
		
		if (mtYmd.compareTo(skYmd) < 0)
		{
			// 比較元年月日 ＜ 比較先年月日の場合
			
			isLoadOyaSvkei = true;
		}
		else if (mtYmd.compareTo(skYmd) == 0)
		{
			// 比較元年月日 ＝ 比較先年月日の場合
			
			// ANK-4315-00-00 MOD START
			//if (KKTK_SVC_CD_ONU.equals(kktkSvcCd) || KKTK_SVC_CD_TAKINOU.equals(kktkSvcCd))
			if (KKTK_SVC_CD_ONU.equals(kktkSvcCd) || KKTK_SVC_CD_TAKINOU.equals(kktkSvcCd) || KKTK_SVC_CD_HGW.equals(kktkSvcCd))
			// ANK-4315-00-00 MOD END
			{
				// ＯＮＵまたは多機能ルータまたはHGWの場合
				
				if (SVC_CD_IN_SVC.equals(skSvcCd))
				{
					isLoadOyaSvkei = true;
				}
				else if (SVC_CD_TEL_SVC.equals(skSvcCd) && !SVC_CD_IN_SVC.equals(mtSvcCd))
				{
					isLoadOyaSvkei = true;
				}
			}
			//↓↓↓2012-10-31追加　ロット１ST2-2012-0001902対応↓↓↓
			//VDSLモデム，スプリッタ，インラインフィルタも対象とする
			else if (KKTK_SVC_CD_VDSL.equals(kktkSvcCd) ||
					KKTK_SVC_CD_SPLTR.equals(kktkSvcCd) || KKTK_SVC_CD_ILFLTR.equals(kktkSvcCd))
			{
				if (SVC_CD_IN_SVC.equals(skSvcCd) ||
					(SVC_CD_TEL_SVC.equals(skSvcCd) && !SVC_CD_IN_SVC.equals(mtSvcCd)))
				{
					isLoadOyaSvkei = true;
				}
				
			}
			//↑↑↑2012-10-31追加　ロット１ST2-2012-0001902対応↑↑↑
			else
			{
				// 上記以外の場合(Ｖ−ＯＮＵ)
				
				isLoadOyaSvkei = true;
			}
		}
		
		return isLoadOyaSvkei;
	}
	
	/**
	 * 配送中止処理
	 * 配送の中止を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param haiso_no 配送番号
	 * @param eDK0011C090Hash 配送中止サービスIFの結果HashMap
	 * @param fixedText ユーザ任意文字列
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int updateHaisoStp(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String haiso_no,
			HashMap<String, Object> eDK0011C090Hash,
			String fixedText)
			throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		HashMap<String, Object> eDK0011A010Hash = new HashMap<String, Object>();
		// 配送一意照会処理
		searchHaisoSngl(param, handle, haiso_no, eDK0011A010Hash, this.fixedTextGlobal);
		
		// 配送情報を取り出す
		CAANMsg[] eDK0011A010CBSMSG1list = (CAANMsg[])eDK0011A010Hash.get(EDK0011A010CBSMsg.EDK0011A010CBSMSG1LIST);
		if (eDK0011A010CBSMSG1list == null || eDK0011A010CBSMSG1list.length == 0)
		{
			// 取得できない場合、正常終了
			return 0;
		}
		
		// 配送中止を実施
		callEDK0011C090SC(param, handle, haiso_no, (HashMap<String, Object>)eDK0011A010CBSMSG1list[0].getMsgData(), eDK0011C090Hash);
		
		return 0;
	}
	
	/**
	 * 配送情報一覧照会処理
	 * 中止対象の配送情報の照会を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svc_kei_no サービス契約番号
	 * @param haisoStatList 配送ステータスリスト
	 * @param prc_grp_cd 料金グループコード
	 * @param kojiak_no 工事案件番号
	 * @param haisoStatList 配送ステータスリスト
	 * @param eDK0011B080Hash 配送情報ステータス一覧照会サービスIFの結果HashMap
	 * @param fixedText ユーザ任意文字列
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int searchHaisoInfo(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svc_kei_no,
			String sysid,
			String prc_grp_cd,
			String kojiak_no,
			ArrayList<String> haisoStatList,
			HashMap<String, Object> eDK0011B080Hash,
			String fixedText)
			throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		// 配送情報ステータス一覧照会サービスIF呼出処理を実施
		callEDK0011B080SC(param, handle, svc_kei_no, haisoStatList, eDK0011B080Hash);
		
		return 0;
	}
	
	/**
	 * 機器提供サービス契約照会処理
	 * 機器提供サービス契約の一意照会を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktk_svc_kei_no 機器提供サービス契約番号
	 * @param eKK0341A010Hash 機器提供サービス契約一意照会サービスIFの結果HashMap
	 * @param fixedText ユーザ任意文字列
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int searchKktkSvcKei(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktk_svc_kei_no,
			//2012/04/04 住所変更対応 ADD START
			String kktk_svc_kei_gene_add_dtm,
			//2012/04/04 住所変更対応 ADD END
			HashMap<String, Object> eKK0341A010Hash,
			String fixedText)
			throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		// 機器提供サービス契約一意照会を実施
		//2012/04/04 住所変更対応 MOD START
//		callEKK0341A010SC(param, handle, kktk_svc_kei_no, eKK0341A010Hash);
		callEKK0341A010SC(param, handle, kktk_svc_kei_no, kktk_svc_kei_gene_add_dtm, eKK0341A010Hash);
		//2012/04/04 住所変更対応 MOD END
		
		return 0;
	}
	
// IKK-2013-0000340対応 20130314 星野 ADD START
	/**
	 * 機器提供サービス契約照会処理
	 * 機器提供サービス契約の一意照会を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktk_svc_kei_no 機器提供サービス契約番号
	 * @param eKK0341A010Hash 機器提供サービス契約一意照会サービスIFの結果HashMap
	 * @param fixedText ユーザ任意文字列
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	private int searchKktkSvcKeiWithRsvAplyYmd(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktk_svc_kei_no,
			String rsv_aply_ymd,
			HashMap<String, Object> eKK0341A010Hash,
			String fixedText)
			throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		// 機器提供サービス契約一意照会を実施
		callEKK0341A010SC3(param, handle, kktk_svc_kei_no, rsv_aply_ymd, eKK0341A010Hash);
		
		return 0;
	}
// IKK-2013-0000340対応 20130314 星野 ADD END
	
	/**
	 * 配送一意照会処理
	 * 配送情報の一意照会を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param haiso_no 配送番号
	 * @param eDK0011A010Hash 配送一意照会サービスIFの結果HashMap
	 * @param fixedText ユーザ任意文字列
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int searchHaisoSngl(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String haiso_no,
			HashMap<String, Object> eDK0011A010Hash,
			String fixedText)
	throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		// 配送一意照会を実施
		callEDK0011A010SC(param, handle, haiso_no, eDK0011A010Hash);
		
		return 0;
	}
	
	/**
	 * 機器提供サービス契約一覧照会処理
	 * 機器提供サービス契約情報の一覧照会を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svc_kei_no サービス契約番号
	 * @param kktkSvcKeiStatList 機器提供サービス契約ステータスリスト
	 * @param eKK0341B022Hash サービス対象機器提供サービス契約一覧照会サービスIFの結果HashMap
	 * @param fixedText ユーザ任意文字列
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int searchKktkSvcKeiIcrn(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svc_kei_no,
			ArrayList<String> kktkSvcKeiStatList,
			HashMap<String, Object> eKK0341B022Hash,
			String fixedText)
	throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		// サービス対象機器提供サービス契約一覧照会サービスIF呼出処理を実施
		callEKK0341B022SC(param, handle, svc_kei_no, kktkSvcKeiStatList, eKK0341B022Hash);
		
		return 0;
	}
	
	/**
	 * 回線内訳機器提供サービス契約照会処理
	 * 回線内訳に紐づく機器を取得し、返品対象かを判断する。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svc_kei_no サービス契約番号
	 * @param eKK0341B504Hash 機器提供サービス契約一覧照会(サービス契約回線内訳)サービスIFの結果HashMap(対象の機器情報以外は削除)
	 * @param fixedText ユーザ任意文字列
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int searchKaisuwKktkSvcKei(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svc_kei_no,
			HashMap<String, Object> eKK0341B504Hash,
			String fixedText)
	throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		// サービス契約回線内訳一覧照会（サービス契約番号）サービスIF呼出処理を実施
		HashMap<String, Object> eKK0251B001Hash = new HashMap<String, Object>();
		callEKK0251B001SC(param, handle, svc_kei_no, eKK0251B001Hash);
		
		// サービス契約回線内訳情報を取り出す
		CAANMsg[] eKK0251B001CBSMSG1list = (CAANMsg[])eKK0251B001Hash.get(EKK0251B001CBSMsg.EKK0251B001CBSMSG1LIST);
		if (eKK0251B001CBSMSG1list == null || eKK0251B001CBSMSG1list.length == 0)
		{
			// 取得できない場合、処理終了
			return 0;
		}
		HashMap<String, Object> eKK0251B001CBSMSG1 = eKK0251B001CBSMSG1list[0].getMsgData();
		String svcKeiKaisenUcwkNo = (String)eKK0251B001CBSMSG1.get(EKK0251B001CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO);
		
		// 機器提供サービス契約一覧照会(サービス契約回線内訳)サービスIF呼出処理を実施
		callEKK0341B504SC(param, handle, svcKeiKaisenUcwkNo, eKK0341B504Hash);
		
		// ANK-1578-00-00 2013/12/09 START
		HashMap<String, Object> eKK0341B504ALLHash = new HashMap<String, Object>();
		
		// 機器提供サービス契約一覧照会(サービス契約回線内訳)サービスIF呼出処理を実施
		callEKK0341B504SC(param, handle, svcKeiKaisenUcwkNo, eKK0341B504ALLHash);
		// ANK-1578-00-00 2013/12/09 END
		
		// 機器提供サービス契約情報を取り出す
		CAANMsg[] eKK0341B504CBSMSG1list = (CAANMsg[])eKK0341B504Hash.get(EKK0341B504CBSMsg.EKK0341B504CBSMSG1LIST);
		if (eKK0341B504CBSMSG1list == null || eKK0341B504CBSMSG1list.length == 0)
		{
			// 取得できない場合、処理終了
			return 0;
		}
		
		// 機器提供サービス契約番号取得
		String tmpKktkSvcKeiNo = eKK0341B504CBSMSG1list[0].getString(EKK0341B504CBSMsg1List.KKTK_SVC_KEI_NO);

		// 機器提供サービス契約一意照会サービスIF呼出処理を実施
		HashMap<String, Object> eKK0341A010Hash = new HashMap<String, Object>();
		callEKK0341A010SC(param, handle, tmpKktkSvcKeiNo, null, eKK0341A010Hash);
		CAANMsg[] eKK0341A010CBSMSG1list = (CAANMsg[])eKK0341A010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);

		if (
				!eKK0341B504CBSMSG1list[0].getString(EKK0341B504CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO).equals(
						eKK0341A010CBSMSG1list[0].getString(EKK0341A010CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO))
		)
		{
			// 対象機器の最新レコードのサービス契約回線内訳番号が異なっている場合、処理終了

			// 対象機器提供サービス契約情報選択処理を実施(対象レコードを空にする)
			selectTargetKktkSvkeiInf(eKK0341B504Hash, (String)null);
			return 0;
		}

		// サービス契約一意照会サービスIF呼出処理を実施
		HashMap<String, Object> eKK0081A010Hash = new HashMap<String, Object>();
		callEKK0081A010SC(param, handle, svc_kei_no, eKK0081A010Hash);
		
		// サービス契約情報を取り出す
		CAANMsg[] eKK0081A010CBSMSG1list = (CAANMsg[])eKK0081A010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		if (eKK0081A010CBSMSG1list == null || eKK0081A010CBSMSG1list.length == 0)
		{
			// 取得できない場合、処理終了
			
			// 対象機器提供サービス契約情報選択処理を実施(対象レコードを空にする)
			selectTargetKktkSvkeiInf(eKK0341B504Hash, (String)null);
			return 0;
		}
		
		HashMap<String, Object> eKK0081A010CBSMSG1 = eKK0081A010CBSMSG1list[0].getMsgData();
		String prcGrpCd = (String)eKK0081A010CBSMSG1.get(EKK0081A010CBSMsg1List.PRC_GRP_CD);
		String pcrsCd = (String)eKK0081A010CBSMSG1.get(EKK0081A010CBSMsg1List.PCRS_CD);
//↓↓↓2013-05-08追加　契約新規Ｔ指摘「ＯＮＵが受付済にならない」対応↓↓↓
		//提供方式契約番号、料金プランを取出す（先に対象契約のものを取得しておく）
		String pplanCd = (String)eKK0081A010CBSMSG1.get(EKK0081A010CBSMsg1List.PPLAN_CD);
		String tkhoshikKkeiNo = (String)eKK0081A010CBSMSG1.get(EKK0081A010CBSMsg1List.TK_HOSHIKI_KEI_NO);
//↑↑↑2013-05-08追加　契約新規Ｔ指摘「ＯＮＵが受付済にならない」対応↑↑↑
		boolean isNet = PCRS_CD_A03.equals(pcrsCd)
						|| PCRS_CD_A03.equals(pcrsCd)
						|| PCRS_CD_A04.equals(pcrsCd)
						|| PCRS_CD_A05.equals(pcrsCd)
						|| PCRS_CD_A06.equals(pcrsCd)
						|| PCRS_CD_A07.equals(pcrsCd)
						|| PCRS_CD_A08.equals(pcrsCd)
						|| PCRS_CD_A09.equals(pcrsCd)
						|| PCRS_CD_A10.equals(pcrsCd)
						|| PCRS_CD_A11.equals(pcrsCd)	//2012-06-26追加、ST2-2012-0001187対応のついで、漏れてるので
						|| PCRS_CD_A47.equals(pcrsCd)
						|| PCRS_CD_A48.equals(pcrsCd)
						|| PCRS_CD_A49.equals(pcrsCd)
						|| PCRS_CD_A50.equals(pcrsCd)
						|| PCRS_CD_A51.equals(pcrsCd)
						|| PCRS_CD_A52.equals(pcrsCd)
						|| PCRS_CD_A53.equals(pcrsCd)
						|| PCRS_CD_A54.equals(pcrsCd)
						|| PCRS_CD_A55.equals(pcrsCd)
						|| PCRS_CD_A56.equals(pcrsCd)
						|| PCRS_CD_A57.equals(pcrsCd)	//2012-06-26追加、ST2-2012-0001187対応のついで、漏れてるので
						//ANK-4493-00-00 ADD START
						|| PCRS_CD_A74.equals(pcrsCd)
						//ANK-4493-00-00 ADD END
						//↓↓↓2013-04-09追加　IKK-2013-0000843対応のついで１００Ｍプレミアム↓↓↓
						|| "A67".equals(pcrsCd)
						|| "A68".equals(pcrsCd)
						|| "A69".equals(pcrsCd)
						|| "A70".equals(pcrsCd)
						|| "A71".equals(pcrsCd)
						//↑↑↑2013-04-09追加　IKK-2013-0000843対応のついで１００Ｍプレミアム↑↑↑
						//IT1-2016-0000010 2016/01/20 ADD START
						|| PCRS_CD_A83.equals(pcrsCd)
						|| PCRS_CD_A84.equals(pcrsCd)
						//IT1-2016-0000010 2016/01/20 ADD END
						//ANK-3366-00-00 ADD START
						|| PCRS_CD_A88.equals(pcrsCd)
						//ANK-3366-00-00 ADD END
						// ANK-3412-00-00 ADD START
						// ５ギガコースとメゾンタイプ５ギガの条件を追加
						|| PCRS_CD_A89.equals(pcrsCd)
						|| PCRS_CD_A90.equals(pcrsCd)
						// ANK-3412-00-00 ADD END
						// ANK-3949-00-00 ADD START
						// 各ホーム・メゾンタイプの1ギガ・5ギガ・10ギガのNetflixプランの条件を追加
						|| PCRS_CD_A91.equals(pcrsCd)
						|| PCRS_CD_A92.equals(pcrsCd)
						|| PCRS_CD_A93.equals(pcrsCd)
						|| PCRS_CD_A94.equals(pcrsCd)
						|| PCRS_CD_A95.equals(pcrsCd)
						|| PCRS_CD_A96.equals(pcrsCd)
						// ANK-3949-00-00 ADD END
						// ANK-4468-00-00 ADD START
						|| PCRS_CD_A97.equals(pcrsCd)
						|| PCRS_CD_A99.equals(pcrsCd)
						// ANK-4468-00-00 ADD END
						;
		boolean isTel = PCRS_CD_A31.equals(pcrsCd)
						|| PCRS_CD_A32.equals(pcrsCd);
		
		if (PRC_GRP_CD_11.equals(prcGrpCd) || PRC_GRP_CD_13.equals(prcGrpCd)
				|| PRC_GRP_CD_12.equals(prcGrpCd))		//2012-06-26追加、ST2-2012-0001187対応
		{
			// TVサービスの場合
			
			// 対象機器提供サービス契約情報選択処理を実施
			selectTargetKktkSvkeiInf(eKK0341B504Hash, KKTK_SVC_CD_VONU);
			return 0;
		}
		else
		{
			// TVサービス以外の場合
			
			//  回線利用中サービス契約一覧照会サービスIF呼出処理を実施
			HashMap<String, Object> eKK0081B007Hash = new HashMap<String, Object>();
			callEKK0081B007SC(param, handle, svcKeiKaisenUcwkNo, eKK0081B007Hash);
			
			// 回線利用中サービス契約情報を取り出す
			CAANMsg[] eKK0081B007CBSMSG1list = (CAANMsg[])eKK0081B007Hash.get(EKK0081B007CBSMsg.EKK0081B007CBSMSG1LIST);
			if (eKK0081B007CBSMSG1list == null || eKK0081B007CBSMSG1list.length == 0)
			{
				// 取得できない場合、処理終了
				
				if (isNet || isTel)
				{
					// ネット・電話サービスの場合
					
					//ST1-2012-0000515 2012/09/08 ADD START
					//回線に紐づく機器がマンションの場合に解約されない
					
					// ネットの場合はマンションかそれ以外かでONUかVDSLモデムの何れかとなる。
					if (isNet)
					{
						// ネットでマンション(光配線以外)かそれ以外かを判別
						if (PCRS_CD_A03.equals(pcrsCd) 
								|| PCRS_CD_A04.equals(pcrsCd)
								|| PCRS_CD_A05.equals(pcrsCd)
								|| PCRS_CD_A06.equals(pcrsCd)
								|| PCRS_CD_A07.equals(pcrsCd)
								|| PCRS_CD_A08.equals(pcrsCd)
								|| PCRS_CD_A09.equals(pcrsCd)
								|| PCRS_CD_A10.equals(pcrsCd)
								|| PCRS_CD_A11.equals(pcrsCd)
								|| PCRS_CD_A56.equals(pcrsCd)
								|| PCRS_CD_A57.equals(pcrsCd)
								//ANK-4493-00-00 ADD START
								|| PCRS_CD_A74.equals(pcrsCd)
								//ANK-4493-00-00 ADD END
								//IT1-2016-0000010 2016/01/20 MOD START
								//|| "A71".equals(pcrsCd))		//2013-04-09追加　IKK-2013-0000843対応のついで１００Ｍプレミアム
								
								|| "A71".equals(pcrsCd)		//2013-04-09追加　IKK-2013-0000843対応のついで１００Ｍプレミアム
								|| PCRS_CD_A83.equals(pcrsCd)
								//ANK-3366-00-00 MOD START
								//|| PCRS_CD_A84.equals(pcrsCd))
								//IT1-2016-0000010 2016/01/20 MOD END
								|| PCRS_CD_A84.equals(pcrsCd)
								|| PCRS_CD_A88.equals(pcrsCd)
								// ANK-3412-00-00 ADD START
								// ５ギガコースとメゾンタイプ５ギガの条件を追加
								|| PCRS_CD_A89.equals(pcrsCd)
								|| PCRS_CD_A88.equals(pcrsCd)
								// ANK-3412-00-00 ADD END
								// ANK-3949-00-00 ADD START
								// 各ホーム・メゾンタイプの1ギガ・5ギガ・10ギガのNetflixプランの条件を追加
								|| PCRS_CD_A91.equals(pcrsCd)
								|| PCRS_CD_A92.equals(pcrsCd)
								|| PCRS_CD_A93.equals(pcrsCd)
								|| PCRS_CD_A94.equals(pcrsCd)
								|| PCRS_CD_A95.equals(pcrsCd)
								|| PCRS_CD_A96.equals(pcrsCd)
								// ANK-3949-00-00 ADD END
								// ANK-4468-00-00 ADD START
								|| PCRS_CD_A97.equals(pcrsCd)
								|| PCRS_CD_A99.equals(pcrsCd)
								// ANK-4468-00-00 ADD END
								)
								//ANK-3366-00-00 MOD END
						{
							// 戸建、メゾン、MT光配線の場合
							// 対象機器提供サービス契約情報選択処理を実施
							selectTargetKktkSvkeiInf(eKK0341B504Hash, KKTK_SVC_CD_ONU);
						}
						else
						{
							// それ以外の場合
							// 対象機器提供サービス契約情報選択処理を実施
//↓↓↓2013-04-09変更　巻３IKK-2013-0000843（スプリッタが解約されない）↓↓↓
//							selectTargetKktkSvkeiInf(eKK0341B504Hash, KKTK_SVC_CD_VDSL);
							selectTargetKktkSvkeiInf(eKK0341B504Hash, 
									new String[]{KKTK_SVC_CD_VDSL, KKTK_SVC_CD_SPLTR, KKTK_SVC_CD_ILFLTR});
//↑↑↑2013-04-09変更　巻３IKK-2013-0000843（スプリッタが解約されない）↑↑↑
						}
					}
					
					// eo光電話の場合はマンションかそれ以外かでONUかVDSLモデムの何れかとなる。
					if (isTel)
					{
//↓↓↓2013-05-08削除　契約新規Ｔ指摘「ＯＮＵが受付済にならない」対応↓↓↓
//						//提供方式契約番号、料金プランを取出す
//						String pplanCd = (String)eKK0081A010CBSMSG1.get(EKK0081A010CBSMsg1List.PPLAN_CD);
//						String tkhoshikKkeiNo = (String)eKK0081A010CBSMSG1.get(EKK0081A010CBSMsg1List.TK_HOSHIKI_KEI_NO);
//↑↑↑2013-05-08削除　契約新規Ｔ指摘「ＯＮＵが受付済にならない」対応↑↑↑
						
						// 提供方式契約番号が設定されていない場合は戸建
						if(tkhoshikKkeiNo == null || tkhoshikKkeiNo.length() == 0)
						{
							// 対象機器提供サービス契約情報選択処理を実施
							selectTargetKktkSvkeiInf(eKK0341B504Hash, KKTK_SVC_CD_ONU);
						}
						else
						{
							// 提供方式契約番号が設定されている場合、メゾンかMTの為、判別を実施
							//↓↓↓2012-10-31変更　ロット１ST2-2012-0001902対応（ＰＴバグ改修）↓↓↓
							//if (pplanCd == PPLAN_CD_PA3102 || pplanCd == PPLAN_CD_PA3202)
							if (PPLAN_CD_PA3102.equals(pplanCd) || PPLAN_CD_PA3202.equals(pplanCd))
							//↑↑↑2012-10-31変更　ロット１ST2-2012-0001902対応（ＰＴバグ改修）↑↑↑
							{
								// マンションの為VDSLモデムが対象となる
								// 対象機器提供サービス契約情報選択処理を実施
//↓↓↓2013-04-09変更　巻３IKK-2013-0000843（スプリッタが解約されない）↓↓↓
//								selectTargetKktkSvkeiInf(eKK0341B504Hash, KKTK_SVC_CD_VDSL);
								selectTargetKktkSvkeiInf(eKK0341B504Hash, 
										new String[]{KKTK_SVC_CD_VDSL, KKTK_SVC_CD_SPLTR, KKTK_SVC_CD_ILFLTR});
//↑↑↑2013-04-09変更　巻３IKK-2013-0000843（スプリッタが解約されない）↑↑↑
							}
							else
							{
								// メゾンの為、ONUが対象となる
								// 対象機器提供サービス契約情報選択処理を実施
								selectTargetKktkSvkeiInf(eKK0341B504Hash, KKTK_SVC_CD_ONU);
							}
						}
					}
					// ANK-1578-00-00 2013/12/09 START
					CAANMsg[] eKK0341B504CBSMSG = (CAANMsg[])eKK0341B504Hash.get(EKK0341B504CBSMsg.EKK0341B504CBSMSG1LIST);
					
					// 最後に多機能ルータに対象機器提供サービス契約情報選択処理を実施
					// ANK-4315-00-00 MOD START
					//selectTargetKktkSvkeiInfTakino(eKK0341B504Hash , eKK0341B504ALLHash, KKTK_SVC_CD_TAKINOU , eKK0341B504CBSMSG);
					selectTargetKktkSvkeiInfTakino(eKK0341B504Hash , eKK0341B504ALLHash, kaisenKikiList , eKK0341B504CBSMSG);
					// ANK-4315-00-00 MOD END
					// ANK-1578-00-00 2013/12/09 END
				}
				
				return 0;
			}
			
			boolean isClearKktkSvkeiInf = false;
			for (int i = 0; i < eKK0081B007CBSMSG1list.length; i++)
			{
				HashMap<String, Object> eKK0081B007CBSMSG1 = eKK0081B007CBSMSG1list[i].getMsgData();
				String kaisenUseSvcKeiNo = (String)eKK0081B007CBSMSG1.get(EKK0081B007CBSMsg1List.SVC_KEI_NO);
				
				if (svc_kei_no.equals(kaisenUseSvcKeiNo))
				{
					// 引数と同一のサービス契約番号の場合、処理スキップ
					continue;
				}
				
				// サービス契約一意照会サービスIF呼出処理を実施
				eKK0081A010Hash = new HashMap<String, Object>();
				callEKK0081A010SC(param, handle, kaisenUseSvcKeiNo, eKK0081A010Hash);
				
				// サービス契約情報を取り出す
				eKK0081A010CBSMSG1list = (CAANMsg[])eKK0081A010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
				if (eKK0081A010CBSMSG1list == null || eKK0081A010CBSMSG1list.length == 0)
				{
					// 取得できない場合、処理スキップ
					continue;
				}
				eKK0081A010CBSMSG1 = eKK0081A010CBSMSG1list[0].getMsgData();
				String kaisenUsePcrsCd = (String)eKK0081A010CBSMSG1.get(EKK0081A010CBSMsg1List.PCRS_CD);
				boolean isNetKaisenUse = PCRS_CD_A03.equals(kaisenUsePcrsCd)
//										|| PCRS_CD_A03.equals(kaisenUsePcrsCd)	//2012-10-31削除、ダブってるので
										|| PCRS_CD_A04.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A05.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A06.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A07.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A08.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A09.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A10.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A11.equals(kaisenUsePcrsCd)	//2012-06-26追加、ST2-2012-0001187対応のついで、漏れてるので
										|| PCRS_CD_A47.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A48.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A49.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A50.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A51.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A52.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A53.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A54.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A55.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A56.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A57.equals(kaisenUsePcrsCd)	//2012-06-26追加、ST2-2012-0001187対応のついで、漏れてるので
										//ANK-4493-00-00 ADD START
										|| PCRS_CD_A74.equals(pcrsCd)
										//ANK-4493-00-00 ADD END
										//↓↓↓2013-04-08追加　IKK-2013-0000843対応のついで１００Ｍプレミアム↓↓↓
										|| "A67".equals(kaisenUsePcrsCd)
										|| "A68".equals(kaisenUsePcrsCd)
										|| "A69".equals(kaisenUsePcrsCd)
										|| "A70".equals(kaisenUsePcrsCd)
										|| "A71".equals(kaisenUsePcrsCd)
										//↑↑↑2013-04-08追加　IKK-2013-0000843対応のついで１００Ｍプレミアム↑↑↑
// OM-2019-0000788 2019/07/29 MOD START
//										//IT1-2016-0000010 2016/01/20 ADD START
//										|| PCRS_CD_A83.equals(pcrsCd)
//										|| PCRS_CD_A84.equals(pcrsCd)
//										//IT1-2016-0000010 2016/01/20 ADD END
//										//ANK-3366-00-00 ADD START
//										|| PCRS_CD_A88.equals(pcrsCd)
//										//ANK-3366-00-00 ADD END
//										// ANK-3412-00-00 ADD START
//										// ５ギガコースとメゾンタイプ５ギガの条件を追加
//										|| PCRS_CD_A89.equals(pcrsCd)
//										|| PCRS_CD_A90.equals(pcrsCd)
										|| PCRS_CD_A83.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A84.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A88.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A89.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A90.equals(kaisenUsePcrsCd)
										// ANK-3949-00-00 ADD START
										// 各ホーム・メゾンタイプの1ギガ・5ギガ・10ギガのNetflixプランの条件を追加
										|| PCRS_CD_A91.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A92.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A93.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A94.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A95.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A96.equals(kaisenUsePcrsCd)
										// ANK-3949-00-00 ADD END
										// ANK-4468-00-00 ADD START
										|| PCRS_CD_A97.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A99.equals(kaisenUsePcrsCd)
										// ANK-4468-00-00 ADD END
// OM-2019-0000788 2019/07/29 MOD END
										;
				boolean isTelKaisenUse = PCRS_CD_A31.equals(kaisenUsePcrsCd)
										|| PCRS_CD_A32.equals(kaisenUsePcrsCd);

//↓↓↓2013-05-08追加　契約新規Ｔ指摘「ＯＮＵが受付済にならない」対応↓↓↓
				String kaisenUseKeiStat = (String)eKK0081A010CBSMSG1.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
				//他方が‘受付済’なら共用なしと見なす
				isNetKaisenUse &= (!JKKSvcConst.SVC_KEI_STAT_010.equals(kaisenUseKeiStat));
				isTelKaisenUse &= (!JKKSvcConst.SVC_KEI_STAT_010.equals(kaisenUseKeiStat));
//↑↑↑2013-05-08追加　契約新規Ｔ指摘「ＯＮＵが受付済にならない」対応↑↑↑
				
				if (isNet)
				{
					// 引数サービス契約の料金コースが「A03」、「A04」、「A05」、「A06」、「A07」、「A08」、「A09」、「A10」、「A47」、「A48」、「A49」、「A50」、「A51」、「A52」、「A53」、「A54」、「A55」、「A56」、「A74」の場合
					
					if (isTelKaisenUse)
					{
						// 回線内訳に紐つくサービス契約の料金コースが「A31」、「A32」の場合
						
						isClearKktkSvkeiInf = true;
					}
				}
				else if (isTel)
				{
					// 引数サービス契約の料金コースが「A31」、「A32」の場合
					
					if (isNetKaisenUse)
					{
						// 回線内訳に紐つくサービス契約の料金コースが「A03」、「A04」、「A05」、「A06」、「A07」、「A08」、「A09」、「A10」の場合
						
						isClearKktkSvkeiInf = true;
				}
				}
			}
			
			if (isClearKktkSvkeiInf)
			{
				// 対象機器提供サービス契約情報選択処理を実施(対象レコードを空にする)
				selectTargetKktkSvkeiInf(eKK0341B504Hash, (String)null);
			}
			else
			{
				//ST1-2012-0000515 2012/09/08 ADD START
				//回線に紐づく機器がマンションの場合に解約されない
				
				// ネットの場合はマンションかそれ以外かでONUかVDSLモデムの何れかとなる。
				if (isNet)
				{
					// ネットでマンション(光配線以外)かそれ以外かを判別
					if (PCRS_CD_A03.equals(pcrsCd) 
							|| PCRS_CD_A04.equals(pcrsCd)
							|| PCRS_CD_A05.equals(pcrsCd)
							|| PCRS_CD_A06.equals(pcrsCd)
							|| PCRS_CD_A07.equals(pcrsCd)
							|| PCRS_CD_A08.equals(pcrsCd)
							|| PCRS_CD_A09.equals(pcrsCd)
							|| PCRS_CD_A10.equals(pcrsCd)
							|| PCRS_CD_A11.equals(pcrsCd)
							|| PCRS_CD_A56.equals(pcrsCd)
							|| PCRS_CD_A57.equals(pcrsCd)
							//ANK-4493-00-00 ADD START
							|| PCRS_CD_A74.equals(pcrsCd)
							//ANK-4493-00-00 ADD END
							//IT1-2016-0000010 2016/01/20 MOD START
							//|| "A71".equals(pcrsCd))		//2013-04-09追加　IKK-2013-0000843対応のついで１００Ｍプレミアム
							
							|| "A71".equals(pcrsCd)		//2013-04-09追加　IKK-2013-0000843対応のついで１００Ｍプレミアム
							|| PCRS_CD_A83.equals(pcrsCd)
							//ANK-3366-00-00 MOD START
							//|| PCRS_CD_A84.equals(pcrsCd))
							//IT1-2016-0000010 2016/01/20 MOD END
							|| PCRS_CD_A84.equals(pcrsCd)
							|| PCRS_CD_A88.equals(pcrsCd)
							// ANK-3412-00-00 ADD START
							// ５ギガコースとメゾンタイプ５ギガの条件を追加
							|| PCRS_CD_A89.equals(pcrsCd)
							|| PCRS_CD_A90.equals(pcrsCd)
							// ANK-3412-00-00 ADD END
							// ANK-3949-00-00 ADD START
							// 各ホーム・メゾンタイプの1ギガ・5ギガ・10ギガのNetflixプランの条件を追加
							|| PCRS_CD_A91.equals(pcrsCd)
							|| PCRS_CD_A92.equals(pcrsCd)
							|| PCRS_CD_A93.equals(pcrsCd)
							|| PCRS_CD_A94.equals(pcrsCd)
							|| PCRS_CD_A95.equals(pcrsCd)
							|| PCRS_CD_A96.equals(pcrsCd)
							// ANK-3949-00-00 ADD END
							// ANK-4468-00-00 ADD START
							|| PCRS_CD_A97.equals(pcrsCd)
							|| PCRS_CD_A99.equals(pcrsCd)
							// ANK-4468-00-00 ADD END
							)
							//ANK-3366-00-00 MOD END
						
					{
						// 戸建、メゾン、MT光配線の場合
						// 対象機器提供サービス契約情報選択処理を実施
						selectTargetKktkSvkeiInf(eKK0341B504Hash, KKTK_SVC_CD_ONU);
					}
					else
					{
						// それ以外の場合
						// 対象機器提供サービス契約情報選択処理を実施
//↓↓↓2013-04-09変更　巻３IKK-2013-0000843（スプリッタが解約されない）↓↓↓
//						selectTargetKktkSvkeiInf(eKK0341B504Hash, KKTK_SVC_CD_VDSL);
						selectTargetKktkSvkeiInf(eKK0341B504Hash, 
								new String[]{KKTK_SVC_CD_VDSL, KKTK_SVC_CD_SPLTR, KKTK_SVC_CD_ILFLTR});
//↑↑↑2013-04-09変更　巻３IKK-2013-0000843（スプリッタが解約されない）↑↑↑
					}
				}
				
				// eo光電話の場合はマンションかそれ以外かでONUかVDSLモデムの何れかとなる。
				if (isTel)
				{
//↓↓↓2013-05-08削除　契約新規Ｔ指摘「ＯＮＵが受付済にならない」対応↓↓↓
//					//提供方式契約番号、料金プランを取出す
//					String pplanCd = (String)eKK0081A010CBSMSG1.get(EKK0081A010CBSMsg1List.PPLAN_CD);
//					String tkhoshikKkeiNo = (String)eKK0081A010CBSMSG1.get(EKK0081A010CBSMsg1List.TK_HOSHIKI_KEI_NO);
//↑↑↑2013-05-08削除　契約新規Ｔ指摘「ＯＮＵが受付済にならない」対応↑↑↑
					
					// 提供方式契約番号が設定されていない場合は戸建
					if(tkhoshikKkeiNo == null || tkhoshikKkeiNo.length() == 0)
					{
						// 対象機器提供サービス契約情報選択処理を実施
						selectTargetKktkSvkeiInf(eKK0341B504Hash, KKTK_SVC_CD_ONU);
					}
					else
					{
						// 提供方式契約番号が設定されている場合、メゾンかMTの為、判別を実施
						//↓↓↓2012-10-31変更　ロット１ST2-2012-0001902対応（ＰＴバグ改修）↓↓↓
						//if (pplanCd == PPLAN_CD_PA3102 || pplanCd == PPLAN_CD_PA3202)
						if (PPLAN_CD_PA3102.equals(pplanCd) || PPLAN_CD_PA3202.equals(pplanCd))
						//↑↑↑2012-10-31変更　ロット１ST2-2012-0001902対応（ＰＴバグ改修）↑↑↑
						{
							// マンションの為VDSLモデムが対象となる
							// 対象機器提供サービス契約情報選択処理を実施
//↓↓↓2013-04-09変更　巻３IKK-2013-0000843（スプリッタが解約されない）↓↓↓
//							selectTargetKktkSvkeiInf(eKK0341B504Hash, KKTK_SVC_CD_VDSL);
							selectTargetKktkSvkeiInf(eKK0341B504Hash, 
									new String[]{KKTK_SVC_CD_VDSL, KKTK_SVC_CD_SPLTR, KKTK_SVC_CD_ILFLTR});
//↑↑↑2013-04-09変更　巻３IKK-2013-0000843（スプリッタが解約されない）↑↑↑
						}
						else
						{
							// メゾンの為、ONUが対象となる
							// 対象機器提供サービス契約情報選択処理を実施
							selectTargetKktkSvkeiInf(eKK0341B504Hash, KKTK_SVC_CD_ONU);
						}
					}
				}
			}
			// ANK-1578-00-00 2013/12/09 START
			CAANMsg[] eKK0341B504CBSMSG = (CAANMsg[])eKK0341B504Hash.get(EKK0341B504CBSMsg.EKK0341B504CBSMSG1LIST);
			
			// 最後に多機能ルータに対象機器提供サービス契約情報選択処理を実施
			// ANK-4315-00-00 MOD START
			//selectTargetKktkSvkeiInfTakino(eKK0341B504Hash , eKK0341B504ALLHash, KKTK_SVC_CD_TAKINOU , eKK0341B504CBSMSG);
			selectTargetKktkSvkeiInfTakino(eKK0341B504Hash , eKK0341B504ALLHash, kaisenKikiList , eKK0341B504CBSMSG);
			// ANK-4315-00-00 MOD END
			// ANK-1578-00-00 2013/12/09 END
		}
		
		return 0;
	}
	
	/**
	 * 宅内機器型式照会処理
	 * 宅内機器型式情報の一覧照会を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param tkkkmdl_cd 宅内機器型式コード
	 * @param eZM0411B050Hash 宅内機器型式/付属品型式一覧照会サービスIFの結果HashMap
	 * @param fixedText ユーザ任意文字列
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int searchTkmdl(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String tkkkmdl_cd,
			HashMap<String, Object> eZM0411B050Hash,
			String fixedText)
	throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		// 宅内機器型式/付属品型式一覧照会サービスIF呼出処理を実施
		// 宅内取込対応 START
		callEZM0411B050SC(param, handle, tkkkmdl_cd, eZM0411B050Hash);
		// 宅内取込対応 END
		
		return 0;
	}
	
	/**
	 * 返品機器取消処理
	 * 返品機器取消サービスIFを呼び出し、返品の取消を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param hmpin_kiki_no 返品機器番号
	 * @param upd_dtm 更新年月日時分秒
	 * @param eDK0301C040Hash 宅内機器型式/付属品型式一覧照会サービスIFの結果HashMap
	 * @param fixedText ユーザ任意文字列
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int updateHempinStp(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String hmpin_kiki_no,
			String upd_dtm,
			HashMap<String, Object> eDK0301C040Hash,
			String fixedText)
	throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		// 返品機器取消サービスIF呼出処理を実施
		callEDK0301C040SC(param, handle, hmpin_kiki_no, upd_dtm, eDK0301C040Hash);
		
		return 0;
	}
	
	/**
	 * 返品機器取消一覧照会処理
	 * 返品機器取消の一覧照会を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktk_svc_kei_no 機器提供サービス契約番号
	 * @param eDK0301B060Hash 返品機器取消一覧照会サービスIFの結果HashMap
	 * @param fixedText ユーザ任意文字列
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int searchHmpinInfo(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktk_svc_kei_no,
			HashMap<String, Object> eDK0301B060Hash,
			String fixedText)
	throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		// 品機器取消一覧照会サービスIF呼出処理を実施
		callEDK0301B060SC(param, handle, kktk_svc_kei_no, eDK0301B060Hash);
		
		return 0;
	}
	
	/**
	 * 業務パラメータ管理一意照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param workParamId 業務パラメータID
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEZM0321A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String workParamId,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEZM0321A010(param, workParamId);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEZM0321A010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * 配送受付サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param mskm_no 申込番号
	 * @param mskm_dtl_no 申込明細番号
	 * @param mskmsho_no 申込書番号
	 * @param ido_div 異動区分
	 * @param sokoCd 倉庫コード
	 * @param haisoRsvYmd 配送予定年月日 20141008 ANK-1918-06-00 追加
	 * @param eKK0341A010HashList 機器提供サービス一意照会の結果
	 * @param eKK0161A010HashList サービス契約内訳一意照会の結果
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEDK0011D020SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String mskm_no,
			String mskm_dtl_no, 
			String mskmsho_no, 
			String ido_div, 
			String sokoCd,
			// 20141008 ANK-1918-06-00 配送予定年月日を追加 ADD START
			String haisoRsvYmd,
			// 20141008 ANK-1918-06-00 配送予定年月日を追加 ADD END
			ArrayList<HashMap<String, Object>> eKK0341A010HashList,
			// IT2-2014-0000302 2014/09/16 add start
			ArrayList<HashMap<String, Object>> eKK0161A010HashList,
			// IT2-2014-0000302 2014/09/16 add end
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		// IT2-2014-0000302 2014/09/16 mod start
		//HashMap<String, Object> sIFRequest = this.mapper.editInMsgEDK0011D020(param, mskm_no, mskm_dtl_no, mskmsho_no, ido_div, sokoCd, eKK0341A010HashList);
		// 20141008 ANK-1918-06-00 配送予定年月日を追加 MOD START
//		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEDK0011D020(param, mskm_no, mskm_dtl_no, mskmsho_no, ido_div, sokoCd, eKK0341A010HashList, eKK0161A010HashList);
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEDK0011D020(param, mskm_no, mskm_dtl_no, mskmsho_no, ido_div, sokoCd, haisoRsvYmd, eKK0341A010HashList, eKK0161A010HashList);
		// 20141008 ANK-1918-06-00 配送予定年月日を追加 MOD END
		// IT2-2014-0000302 2014/09/16 mod end
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEDK0011D020(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * 返品機器受付サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param ido_div 異動区分
	 * @param loadOyaSvkeiNo 読込親サービス契約番号
	 * @param eKK0341A010Hash 機器提供サービス一意照会の結果
	 * @param resultHash 結果のハッシュ
	 * @param kiki_chg_no 機器変更番号　巻@断面合わせ　2012-05-13
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEDK0301D010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String ido_div,
			String loadOyaSvkeiNo,
			HashMap<String, Object> eKK0341A010Hash,
			HashMap<String, Object> resultHash,
			String kiki_chg_no,
			String hmpin_div
	) throws Throwable
	{
		// ▼▼▼▼▼ 2013/02/04 ST1-2013-0000272 UPD START ▼▼▼▼▼
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEDK0301D010(
				param,
				ido_div,
				loadOyaSvkeiNo,
				eKK0341A010Hash,
				kiki_chg_no,
				hmpin_div
		);
		// ▲▲▲▲▲ 2013/02/04 ST1-2013-0000272 UPD E N D ▲▲▲▲▲

		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEDK0301D010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * 配送中止サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param haiso_no 配送番号
	 * @param eDK0011A010Hash 配送一意照会の結果
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEDK0011C090SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String haiso_no,
			HashMap<String, Object> eDK0011A010Hash,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEDK0011C090(param, haiso_no, eDK0011A010Hash);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEDK0011C090(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * 配送情報ステータス一覧照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svc_kei_no サービス契約番号
	 * @param haisoStatList 配送ステータスリスト
	 * @param resultHash 結果のハッシュ
	 * @return EDK0011B080SCのリターンコード
	 * @throws Throwable 例外時にスローされます。
	 */
	private void callEDK0011B080SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svc_kei_no,
			ArrayList<String> haisoStatList,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEDK0011B080(param, svc_kei_no, haisoStatList);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEDK0011B080(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * 機器提供サービス契約一意照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktk_svc_kei_no 機器提供サービス契約番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます。
	 */
	private void callEKK0341A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktk_svc_kei_no,
			//2012/04/04 住所変更対応 ADD START
			String kktk_svc_kei_gene_add_dtm,
			//2012/04/04 住所変更対応 ADD END
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		//2012/04/04 住所変更対応 MOD START
//		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341A010(param, kktk_svc_kei_no);
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341A010(param, kktk_svc_kei_no, kktk_svc_kei_gene_add_dtm);
		//2012/04/04 住所変更対応 MOD END
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341A010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * 配送一意照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param haiso_no 配送番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます。
	 */
	private void callEDK0011A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String haiso_no,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEDK0011A010(param, haiso_no);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEDK0011A010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * サービス対象機器提供サービス契約一覧照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svc_kei_no サービス契約番号
	 * @param kktkSvcKeiStatList 機器提供サービス契約ステータスリスト
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます。
	 */
	private void callEKK0341B022SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svc_kei_no,
			ArrayList<String> kktkSvcKeiStatList,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341B022(param, svc_kei_no, kktkSvcKeiStatList);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341B022(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * サービス契約回線内訳一覧照会（サービス契約番号）サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svc_kei_no サービス契約番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます。
	 */
	private void callEKK0251B001SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svc_kei_no,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0251B001(param, svc_kei_no);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0251B001(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * 機器提供サービス契約一覧照会(サービス契約回線内訳)サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svc_kei_kaisen_ucwk_no サービス契約回線内訳番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます。
	 */
	private void callEKK0341B504SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svc_kei_kaisen_ucwk_no,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341B504(param, svc_kei_kaisen_ucwk_no);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341B504(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * サービス契約一意照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svcKeiNo サービス契約番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0081A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svcKeiNo,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0081A010F2(param, svcKeiNo);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0081A010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * 回線利用中サービス契約一覧照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svc_kei_kaisen_ucwk_no サービス契約回線内訳番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0081B007SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svc_kei_kaisen_ucwk_no,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0081B007(param, svc_kei_kaisen_ucwk_no);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0081B007(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * 宅内機器型式/付属品型式一覧照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param tkkkmdl_cd 宅内機器型式コード
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます。
	 */
	private void callEZM0411B050SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String tkkkmdl_cd,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		// 宅内取込対応 START
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEZM0411B050(param, tkkkmdl_cd);
		// 宅内取込対応 END
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		// 宅内取込対応 START
		this.mapper.editResultRPEZM0411B050(sIFResult, param, this.fixedTextGlobal);
		// 宅内取込対応 END
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * 返品機器取消サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param hmpin_kiki_no 返品機器番号
	 * @param upd_dtm 更新年月日時分秒
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます。
	 */
	private void callEDK0301C040SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String hmpin_kiki_no,
			String upd_dtm,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEDK0301C040(param, hmpin_kiki_no, upd_dtm);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEDK0301C040(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	
	}
	
	/**
	 * 返品機器取消一覧照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktk_svc_kei_no 機器提供サービス契約番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます。
	 */
	private void callEDK0301B060SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktk_svc_kei_no,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEDK0301B060(param, kktk_svc_kei_no);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEDK0301B060(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * サービス契約回線内訳一覧照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svc_kei_no サービス契約番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます。
	 */
	private void callEKK0241B001SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svc_kei_no,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0241B001(param, svc_kei_no);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0241B001(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	//障害対応　2012/02/21　中島　START
	/**
	 * 機器提供サービス契約全件照会処理サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svc_kei_no サービス契約番号
	 * @param kktk_svc_kei_no 機器提供サービス契約番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます。
	 */
	private void callEKK0341B008SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svc_kei_no,
			String kktk_svc_kei_no,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341B008(param, svc_kei_no, kktk_svc_kei_no);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341B008(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	
	/**
	 * 機器提供サービス契約照会処理
	 * 機器提供サービス契約の一意照会を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svc_kei_no サービス契約番号
	 * @param eKK0341A010Hash 機器提供サービス契約一意照会サービスIFの結果HashMap
	 * @param fixedText ユーザ任意文字列
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int searchKktkSvcKeiAll(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svc_kei_no,
			HashMap<String, Object> eKK0341B008Hash,
			String fixedText)
			throws Throwable
	{
		int ret = searchKktkSvcKeiAll(param, handle, svc_kei_no, null, eKK0341B008Hash, fixedText);
		
//		// 初期処理を実施
//		init(fixedText);
		
//		// 機器提供サービス契約一意照会を実施
//		callEKK0341B008SC(param, handle, svc_kei_no, eKK0341B008Hash);
		
		return ret;
	}

	/**
	 * 機器提供サービス契約照会処理
	 * 機器提供サービス契約の一意照会を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svc_kei_no サービス契約番号
	 * @param kktk_svc_kei_no 機器提供サービス契約番号
	 * @param eKK0341A010Hash 機器提供サービス契約一意照会サービスIFの結果HashMap
	 * @param fixedText ユーザ任意文字列
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int searchKktkSvcKeiAll(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svc_kei_no,
			String kktk_svc_kei_no,
			HashMap<String, Object> eKK0341B008Hash,
			String fixedText)
			throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		// 機器提供サービス契約一意照会を実施
		callEKK0341B008SC(param, handle, svc_kei_no, kktk_svc_kei_no, eKK0341B008Hash);
		
		return 0;
	}

	// 201207/26 ADD START
	/**
	 * 在庫照会処理
	 * 宅内機器物流在庫一意照会を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param soko_cd 倉庫コード
	 * @param shelf_cd 棚コード
	 * @param taknkiki_model_cd 宅内機器型式コード
	 * @param eKK0341A010Hash 宅内機器物流在庫一意照会サービスIFの結果HashMap
	 * @param fixedText ユーザ任意文字列
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int searchZaiko(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String soko_cd,
			String shelf_cd,
			String taknkiki_model_cd,
			HashMap<String, Object> eKKA0020005Hash,
			String fixedText)
			throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		// 宅内機器物流在庫一意照会を実施
		callEKKA0020005SC(param, handle, soko_cd, shelf_cd, taknkiki_model_cd, eKKA0020005Hash);
		
		return 0;
	}
	/**
	 * 宅内機器物流在庫一意照会処理サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svc_kei_no サービス契約番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます。
	 */
	private void callEKKA0020005SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String soko_cd,
			String shelf_cd,
			String taknkiki_model_cd,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKKA0020005(param, soko_cd, shelf_cd, taknkiki_model_cd);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKKA0020005(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}
	// 201207/26 ADD END
	
	/**
	 * 機器提供サービス契約一意照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktk_svc_kei_no 機器提供サービス契約番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます。
	 */
	private void callEKK0341A010SC2(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktk_svc_kei_no,
			String gene_add_dtm,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341A0102(param, kktk_svc_kei_no,gene_add_dtm);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341A010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}
// IKK-2013-0000340対応 20130314 星野 ADD START
	/**
	 * 機器提供サービス契約一意照会サービスIF呼出処理
	 * 予約レコードを取得できるように追加しました。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktk_svc_kei_no 機器提供サービス契約番号
	 * @param yoyakuYmd ＫＥＹ＿予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます。
	 */
	private void callEKK0341A010SC3(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktk_svc_kei_no,
			String yoyakuYmd,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest =  this.mapper.editInMsgEKK0341A010_2(param, kktk_svc_kei_no, yoyakuYmd);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341A010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

// IKK-2013-0000340対応 20130314 星野 ADD END
		
	
	
	/**
	 * 機器提供サービス契約照会処理
	 * 機器提供サービス契約の一意照会を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktk_svc_kei_no 機器提供サービス契約番号
	 * @param eKK0341A010Hash 機器提供サービス契約一意照会サービスIFの結果HashMap
	 * @param fixedText ユーザ任意文字列
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int searchKktkSvcKeiF1(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktk_svc_kei_no,
			String gene_add_dtm,
			HashMap<String, Object> eKK0341A010Hash,
			String fixedText)
			throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		// 機器提供サービス契約一意照会を実施
		callEKK0341A010SC2(param, handle, kktk_svc_kei_no, gene_add_dtm, eKK0341A010Hash);
		
		return 0;
	}
	//障害対応　2012/02/21　中島　END
	
	/**
	 * 対象機器提供サービス契約情報選択処理
	 * 
	 * @param eKK0341B504Hash 機器提供サービス契約一覧照会(サービス契約回線内訳)サービスIFの結果HashMap
	 * @param targetKktkSvcCd 対象機器提供サービスコード
	 */
	private void selectTargetKktkSvkeiInf(HashMap<String, Object> eKK0341B504Hash, String targetKktkSvcCd)
	{
//↓↓↓2013-04-09変更　巻３IKK-2013-0000843（スプリッタが解約されない）↓↓↓
//		ArrayList<CAANMsg> targetKktkSvcList = new ArrayList<CAANMsg>();
//		
//		if(!isNull(targetKktkSvcCd))
//		{
//			// 対象機器提供サービスコードが設定されている場合
//			
//			// 機器提供サービス契約情報を取り出す
//			CAANMsg[] eKK0341B504CBSMSG1list = (CAANMsg[])eKK0341B504Hash.get(EKK0341B504CBSMsg.EKK0341B504CBSMSG1LIST);
//			for (int i = 0; i < eKK0341B504CBSMSG1list.length; i++)
//			{
//				HashMap<String, Object> eKK0341B504CBSMSG1 = eKK0341B504CBSMSG1list[i].getMsgData();
//				String kktkSvcCd = (String)eKK0341B504CBSMSG1.get(EKK0341B504CBSMsg1List.KKTK_SVC_CD);
//				
//				if (targetKktkSvcCd.equals(kktkSvcCd))
//				{
//					// 対象機器提供サービスコードと一致する場合、対象レコードと判断する
//					targetKktkSvcList.add(eKK0341B504CBSMSG1list[i]);
//				}
//			}
//		}
//		
//		eKK0341B504Hash.put(EKK0341B504CBSMsg.EKK0341B504CBSMSG1LIST, targetKktkSvcList.toArray(new CAANMsg[targetKktkSvcList.size()]));
/****************************************************************************/
		selectTargetKktkSvkeiInf(eKK0341B504Hash, new String[]{targetKktkSvcCd});
//↑↑↑2013-04-09変更　巻３IKK-2013-0000843（スプリッタが解約されない）↑↑↑
	}


	/**
	 * 対象機器提供サービス契約情報選択処理（複数選択）
	 * 
	 * @param eKK0341B504Hash 機器提供サービス契約一覧照会(サービス契約回線内訳)サービスIFの結果HashMap
	 * @param kktkSvcCdz 対象機器提供サービスコードの配列
	 * @since 2013-04-09 巻３IKK-2013-0000843（スプリッタが解約されない）
	 */
	private void selectTargetKktkSvkeiInf(HashMap<String, Object> eKK0341B504Hash, String[] kktkSvcCdz)
	{
		ArrayList<CAANMsg> targetKktkSvcList = new ArrayList<CAANMsg>();
	
		if(null != kktkSvcCdz && 0 < kktkSvcCdz.length)
		{
			// 対象機器提供サービスコードが設定されている場合
			
			// 機器提供サービス契約情報を取り出す
			CAANMsg[] eKK0341B504CBSMSG1list = (CAANMsg[])eKK0341B504Hash.get(EKK0341B504CBSMsg.EKK0341B504CBSMSG1LIST);
			for (int i = 0; i < eKK0341B504CBSMSG1list.length; i++)
			{
				HashMap<String, Object> eKK0341B504CBSMSG1 = eKK0341B504CBSMSG1list[i].getMsgData();
				String kktkSvcCd = (String)eKK0341B504CBSMSG1.get(EKK0341B504CBSMsg1List.KKTK_SVC_CD);
				
				for (String targetKktkSvcCd : kktkSvcCdz)
				{
					if (null != targetKktkSvcCd && targetKktkSvcCd.equals(kktkSvcCd))
					{
						// 対象機器提供サービスコードと一致する場合、対象レコードと判断する
						targetKktkSvcList.add(eKK0341B504CBSMSG1list[i]);
						break;
					}
				}
			}
		}
		
		eKK0341B504Hash.put(EKK0341B504CBSMsg.EKK0341B504CBSMSG1LIST, targetKktkSvcList.toArray(new CAANMsg[targetKktkSvcList.size()]));
	}
	
	// ANK-1578-00-00 2013/12/09 START
	/**
	 * 対象機器提供サービス契約情報選択処理（多機能ルータ存在対策）
	 * 
	 * @param eKK0341B504Hash 機器提供サービス契約一覧照会(サービス契約回線内訳)サービスIFの結果HashMap
	 * @param kktkSvcCdz 対象機器提供サービスコードの配列
	 * @since 2013-04-09 巻３IKK-2013-0000843（スプリッタが解約されない）
	 */
	// ANK-4315-00-00 MOD START
	//private void selectTargetKktkSvkeiInfTakino(HashMap<String, Object> eKK0341B504Hash,HashMap<String, Object> eKK0341B504ALLHash, String targetKktkSvcCd ,CAANMsg[] kizonList)
	private void selectTargetKktkSvkeiInfTakino(HashMap<String, Object> eKK0341B504Hash,HashMap<String, Object> eKK0341B504ALLHash, List<String> targetKktkSvcCd ,CAANMsg[] kizonList)
	// ANK-4315-00-00 MOD END
	{
		ArrayList<CAANMsg> targetKktkSvcList = new ArrayList<CAANMsg>();
		
		CAANMsg[] eKK0341B504CBSMSG1list = (CAANMsg[])eKK0341B504ALLHash.get(EKK0341B504CBSMsg.EKK0341B504CBSMSG1LIST);
		for (int i = 0; i < eKK0341B504CBSMSG1list.length; i++)
		{
			HashMap<String, Object> eKK0341B504CBSMSG1 = eKK0341B504CBSMSG1list[i].getMsgData();
			String kktkSvcCd = (String)eKK0341B504CBSMSG1.get(EKK0341B504CBSMsg1List.KKTK_SVC_CD);
			
			// ANK-4315-00-00 MOD START
			//if (null != targetKktkSvcCd && targetKktkSvcCd.equals(kktkSvcCd))
			if (null != targetKktkSvcCd && targetKktkSvcCd.contains(kktkSvcCd))
			// ANK-4315-00-00 MOD END
			{
				// 対象機器提供サービスコードと一致する場合、対象レコードと判断する
				targetKktkSvcList.add(eKK0341B504CBSMSG1list[i]);
				// OM-2014-0001708 締結済以下の場合もプラン変する様に対応 2014/05/02 DEL START
//				break;
				// OM-2014-0001708 締結済以下の場合もプラン変する様に対応 2014/05/02 DEL END
			}
		}
		// 多機能ルータが存在する場合、既存回線機器を格納する
		if (targetKktkSvcList != null && !"".equals(targetKktkSvcList) && targetKktkSvcList.size() > 0) {
			for (int i = 0; i < kizonList.length; i++)
			{
				targetKktkSvcList.add(kizonList[i]);
			}
			
			eKK0341B504Hash.put(EKK0341B504CBSMsg.EKK0341B504CBSMSG1LIST, targetKktkSvcList.toArray(new CAANMsg[targetKktkSvcList.size()]));
		}
		else {
			// 多機能ルータが存在しない場合は何もしない
		}
	}
	// ANK-1578-00-00 2013/12/09 END


	/**
	 * 回線対象サービス契約一覧照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svcKeiKaisenUcwkNo サービス契約回線内訳番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0241B002SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svcKeiKaisenUcwkNo,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0241B002(param, svcKeiKaisenUcwkNo);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0241B002(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * 業務データの取得処理です。
	 * 
	 * @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();
	}
	
	/**
	 * エラーチェック処理
	 * 
	 * @param msgList サービスインタフェース実行結果
	 * return void
	 * @throws SCCallException 
	 */
	private void errChk(Map<?, ?> msgList) 
	throws SCCallException
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		int returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// ステータス
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if ((0 != returnCode) || (0 != templateStatus))
		{
			throw new SCCallException(ERR_MSG, String.valueOf(returnCode), templateStatus);
		}
	}
	
	/**
	 * オブジェクトに値が設定されているか判定する
	 * 
	 * @param arg0 判定するオブジェクト
	 * @return オブジェクトに値が設定されていない場合はtrue
	 */
	private boolean isNull(Object arg0) 
	{
		if (arg0 == null) 
		{
			return true;
		}

		return 0 == arg0.toString().length();
	}

	// OM-2014-0002621対応 20140815 田中 ADD START
	/**
	 * 提供方式契約一意照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param tkHoshikiKeiNo 提供方式契約番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0891A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String tkHoshikiKeiNo,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0891A010(param, tkHoshikiKeiNo);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0891A010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * 支払方式コードが全戸一括 OR 居住者一括でないかのチェック処理
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svcKeiNo サービス契約番号
	 * @return 加入者契約支払方式コードが全戸一括または居住者一括の場合はfalse。それ以外はtrue
	 * @throws Throwable
	 */
	private boolean checkPayHoshikiCd(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svcKeiNo)
			throws Throwable 
	{
		// サービス契約一意照会処理
		HashMap<String, Object> eKK0081A010Hash = new HashMap<String, Object>();
		callEKK0081A010SC(param, handle, svcKeiNo, eKK0081A010Hash);
		CAANMsg[] eKK0081A010CBSMSG1List = (CAANMsg[])eKK0081A010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		
		// サービス契約が取得できない場合通常の処理を行うものとしてtrueを返す
		if (eKK0081A010CBSMSG1List == null || eKK0081A010CBSMSG1List.length == 0)
		{
			return true;
		}
		
		CAANMsg eKK0081A010CBSMSG1 = eKK0081A010CBSMSG1List[0];
		
		// サービス契約の提供方式契約番号を取得
		String tkHoshikiKeiNo = eKK0081A010CBSMSG1.getString(EKK0081A010CBSMsg1List.TK_HOSHIKI_KEI_NO);
		
		// 提供方式契約番号を取得できなかった場合解約として処理する
		if (StringUtils.isEmpty(tkHoshikiKeiNo)) {
			return true;
		}
		
		// 提供方式契約一意照会処理
		HashMap<String, Object> eKK0891A010Hash = new HashMap<String, Object>();
		callEKK0891A010SC(param, handle, tkHoshikiKeiNo, eKK0891A010Hash);
		CAANMsg[] eKK0891A010HashCBSMSG1List = (CAANMsg[])eKK0891A010Hash.get(EKK0891A010CBSMsg.EKK0891A010CBSMSG1LIST);
		
		// 提供方式契約が取得できない場合解約として処理する
		if (eKK0891A010HashCBSMSG1List == null || eKK0891A010HashCBSMSG1List.length == 0)
		{
			return true;
		}
		
		CAANMsg eKK0891A010HashCBSMSG1 = eKK0891A010HashCBSMSG1List[0];
		
		// 提供契約方式の加入契約支払方式コードが全戸一括 OR 居住者一括の場合
		String payHoshikiCd = eKK0891A010HashCBSMSG1.getString(EKK0891A010CBSMsg1List.KANYU_KEI_PAY_HOSHIKI_CD);
		if(PAY_HOSHIKI_CD_ZKI.equals(payHoshikiCd) || PAY_HOSHIKI_CD_KYI.equals(payHoshikiCd))
		{
			// 全戸一括または居住者一括の場合は解約として処理しない
			return false;
		}
		
		// 上記条件に当てはまらない場合は解約として処理する
		return true;
	}
	// OM-2014-0002621対応 20140815 田中 ADD END
	
	// IT2-2014-0000302 2014/09/16 add start
	/**
	 * サービス契約内訳照会処理
	 * サービス契約内訳の一意照会を行います。
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svc_kei_ucwk_no サービス契約内訳番号
	 * @param fixedText ユーザ任意文字列
	 * @param eKK0161A010Hash サービス契約内訳一意照会サービスIFの結果HashMap
	 * @return リターンコード
	 * @throws Throwable エラー時にスローします
	 */
	public int searchSvcKeiUcwk(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svc_kei_ucwk_no,
			String fixedText,
			HashMap<String, Object> eKK0161A010Hash)
			throws Throwable
	{
		// 初期処理を実施
		init(fixedText);
		
		// サービス契約内訳一意照会を実施
		callEKK0161A010SC(param, handle, svc_kei_ucwk_no, eKK0161A010Hash);
		
		return 0;
	}
	
	/**
	 * サービス契約内訳の一意照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svc_kei_ucwk_no サービス契約内訳番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます。
	 */
	private void callEKK0161A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svc_kei_ucwk_no,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0161A010(param, svc_kei_ucwk_no);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0161A010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	// IT2-2014-0000302 2014/09/16 add end
}
