/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKKojiKikiUpdCC
*	ソースファイル名：JKKKojiKikiUpdCC.java
*	作成者			：FJ
*	日付			：2011年12月8日
*＜機能概要＞
*	工事機器変更の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/12/8	FJ			新規作成
*	v4.00.00	2012/11/09	 FJ）中井	【IT1-2012-000XXXX】対応
*	v4.00.01	2012/12/19	 FJ）中井	【ANK-1225-00-00】対応
*	v4.00.02	2013/01/16	 FJ）中井	【IT1-2013-0000016】対応
*	v4.00.03	2013/02/22	 FJ）古内	【OT-2013-0000115】対応
*	v4.00.04	2013/03/05	 FJ）古内	【OT-2013-0000321】対応
*	v5.00.00	2013/03/15	 FJ）中井	【IT1-2013-0000501】対応
*	v5.00.01	2013/03/24	 FJ）中井	【IT1-2013-0000622】対応*
*	v5.00.02	2013/04/15	 FJ）中井	【IT1-2013-0000939】住所変更サービス契約対応
*	v5.00.03	2013/04/19	 FJ）中井	【IT1-2013-0000996】
*	v5.00.04	2013/04/23	 FJ）中井	【IT2-2013-0001772】
*	v5.00.05	2013/04/24	 FJ）中井	【OT-2013-0000669】
*	v5.00.06	2013/05/04	 FJ）中井	【IT1-2013-0001141】対応
*	v5.00.07	2013/05/04	 FJ）中井	【IT1-2013-0001151】
*	v5.00.08	2013/05/10	 FJ）中井	【IT1-2013-0001193】
*	v5.00.09	2013/05/15	 FJ）中井	【IT1-2013-0001200】
*   v5.00.10	2013/05/15	 FJ)辛	    【IT1-2013-0001200】対応
*	v5.00.11	2013/05/18	 FJ）中井	【IKK-2013-0001093】対応
*   v5.00.12	2013/05/30	 FJ)　中井	【IT1-2013-0001246】対応
*   v5.00.13	2013/06/15	 FJ)　中井	【ANK-1537-00-00】対応
*   v5.00.14	2013/07/05	 FJ)　中井	【IT1-2013-0001329】対応
*	v5.00.15	2013/07/11	 FJ）中井	【IT2-2013-0000606】対応
*	v5.00.16	2013/07/12	 FJ）中井	【IT1-2013-0001368】対応
*   v5.00.17	2013/07/29	 FJ) 中井	【LT-2013-0000676】対応
*   v5.00.18	2013/08/23	 FJ) 中井	【OM-2013-0000738】対応
*   v5.00.19	2013/08/28	 FJ) 中井	【OM-2013-0001101】対応
*   v5.00.20	2013/09/12	 FJ) 辛 	【OM-2013-0001808】対応
*   v5.00.21	2013/09/13	 FJ) 中井 	【OM-2013-000STB追加】対応
*   v5.00.22	2013/11/04	 FJ) 中井 	【OM-2013-0003804】対応
*   v5.00.23	2013/10/29	 FJ) 中井 	【OM-2013-0004012】対応
*   v7.00.00	2013/11/22	FJ) 中井	【ANK-1578-00-00】対応
*   v6.00.00	2013/12/05	 FJ) 中井 	【OM-2013-0004691】対応
*   v6.00.01	2013/12/08	 FJ) 中井 	【OM-2013-0004088】対応
*   v6.00.02	2013/12/08	 FJ) 中井 	【OM-2013-0004097】対応
*   v7.00.01	2013/12/30	 FJ) 中井	【IT1-2014-0000004】移動ルーター撤去回復対応
*   v7.00.02	2014/01/13	 FJ) 中井	【IT2-2014-0000034】対応
*   v7.00.03	2014/01/22	 FJ) 中井	【IT1-2014-0000032】対応
*   v7.00.04	2014/01/23	 FJ) 中井	【IT1-2014-0000035】対応
*   v7.00.05	2014/01/29	 FJ) 中井	【IT1-2014-0000050】対応
*   v7.00.06	2014/02/12	 FJ) 中井	【IT1-2014-0000546】対応
*   v7.00.07	2014/02/03	 FJ) 中井	【OM-2014-0000938】対応
*   v7.00.08	2014/03/12	 FJ) 中井	【IT2-2014-0000157】対応
*   v7.00.09	2014/03/13	 FJ) 中井	【OM-2014-0001091】対応
*	v8.00.00	2014/05/09	 FJ) 中井	【OM-2014-0001440】
*	v8.00.01	2014/05/30	 FJ) 大田	【OM-2014-0001873】対応
*	v8.00.02	2014/06/05	 FJ) 大田	【IT1-2014-0000197】対応
*	v20.00.00	2015/12/04	 FJ) 星野	【ANK-2641-00-00】対応
*	v25.00.00	2016/08/04	 FJ) 中山	【OM-2016-0001853】STBヤマト撤去コース変更時の異動予約の適用日不正対応
*	v39.00.00	2018/10/19	 FJ) 麻生	【ANK-3488-00-00】４KSTB（ACASチップ）導入対応
*	v39.00.01	2018/10/23	 FJ) 麻生	【ANK-3488-00-00】４KSTB（ACASチップ）導入対応
*	v39.00.02	2018/11/07	 FJ) 麻生	【ANK-3488-00-00】４KSTB（ACASチップ）導入対応
*	v49.00.00	2020/07/31	 FJ) 荒木	【OM-2020-0000110】対応
*   v61.00.00	2023/01/04	 FJ) 澤田	【ANK-4315-00-00】【eo定期】 eoホームゲートウェイ導入対応
***********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.constant.JKKStrConst;
import eo.common.util.JKKStringUtil;
import eo.common.util.JPCDateUtil;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.ECK0011B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0301B070CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0301B070CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EDK0301C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0301D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081B009CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B009CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081C190CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161C080CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161C100CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161C130CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161C160CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161C180CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161C190CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161C200CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161C210CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0321B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0321E010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341C170CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C290CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C330CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C340CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C350CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C360CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C380CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341E010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351C220CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C240CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C250CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0481B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0481B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0481E010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0491B507CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0491B507CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0771A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0771A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1681A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1681C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2151D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2811C110CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C140CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C150CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C200CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C210CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg1List;
import eo.ejb.common.JKKModelCommon;



/**
 * 工事機器変更部品です。<p>
 * <br>
 * @author 富士通
 *
 */
public class JKKKojiKikiUpdCC extends AbstractCommonComponent
{
	private static final String CANCEL_SVC_UCWK_LIST = "cancel_svc_ucwk_list";
	private static final String CANCEL_KIKI_LIST = "cancel_kiki_list";
	private static final String KAIHK_SVC_UCWK_LIST = "kaihk_svc_ucwk_list";
	private static final String KAIHK_KIKI_LIST = "kaihk_kiki_list";
	private static final String DSL_SVC_UCWK_LIST = "dsl_svc_ucwk_list";
	private static final String DSL_KIKI_LIST = "dsl_kiki_list";
	
	/** テンプレートID(EKK0341A010)機器提供サービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0341A010 = "EKK0341A010";
	/** テンプレートID(EKK0341C340)機器提供サービス契約解約 */
	private static final String TEMPLATE_ID_EKK0341C340 = "EKK0341C340";
	/** テンプレートID(EKK0341C360)機器提供サービス契約解約中止 */
	private static final String TEMPLATE_ID_EKK0341C360 = "EKK0341C360";
	/** テンプレートID(EKK0161C180)サービス契約内訳解約 */
	private static final String TEMPLATE_ID_EKK0161C180 = "EKK0161C180";
	/** テンプレートID(EDK0301D010)返品機器受付 */
	private static final String TEMPLATE_ID_EDK0301D010 = "EDK0301D010";
	/** テンプレートID(EKK0341C330)機器提供サービス契約キャンセル */
	private static final String TEMPLATE_ID_EKK0341C330 = "EKK0341C330";
	/** テンプレートID(EKK0161C160)サービス契約内訳キャンセル */
	private static final String TEMPLATE_ID_EKK0161C160 = "EKK0161C160";
	/** テンプレートID(EKK0341C170)機器提供サービス契約料金コース変更中止 */
	private static final String TEMPLATE_ID_EKK0341C170 = "EKK0341C170";
	/** テンプレートID(EKK0341C350)機器提供サービス契約解約確定 */
	private static final String TEMPLATE_ID_EKK0341C350 = "EKK0341C350";
	/** テンプレートID(EKK0161C190)サービス契約内訳解約確定 */
	private static final String TEMPLATE_ID_EKK0161C190 = "EKK0161C190";
	/** テンプレートID(EKK0341C380)機器提供サービス契約回復 */
	private static final String TEMPLATE_ID_EKK0341C380 = "EKK0341C380";
	/** テンプレートID(EKK0161C210)サービス契約内訳回復 */
	private static final String TEMPLATE_ID_EKK0161C210 = "EKK0161C210";
	/** テンプレートID(EDK0301B070)返品機器一覧照会（機器提供サービス契約番号） */
	private static final String TEMPLATE_ID_EDK0301B070 = "EDK0301B070";
	/** テンプレートID(EDK0301C040)返品機器取消 */
	private static final String TEMPLATE_ID_EDK0301C040 = "EDK0301C040";
	/** テンプレートID(EKK0161A010)サービス契約内訳一意照会マップ */
	private static final String TEMPLATE_ID_EKK0161A010 = "EKK0161A010";
	
	/** テンプレートID(EKK0161C200)サービス契約内訳解約中止*/
	private static final String TEMPLATE_ID_EKK0161C200 = "EKK0161C200";
	/** テンプレートID(EKK0341C230)機器提供サービス契約情報変更*/
//	private static final String TEMPLATE_ID_EKK0341C230 = "EKK0341C230";
	/** テンプレートID(EKK0161C100)サービス契約内訳手続中料金プラン変更 */
	private static final String TEMPLATE_ID_EKK0161C100 = "EKK0161C100";
	/* ++++++++++ v5.00.02 追加開始 ++++++++++ */
	/** テンプレートID(EKK0341C290)機器提供サービス契約サービス契約変更 */
	private static final String TEMPLATE_ID_EKK0341C290 = "EKK0341C290";
	/** テンプレートID(EKK0161C080)サービス契約内訳サービス契約変更 */
	private static final String TEMPLATE_ID_EKK0161C080 = "EKK0161C080";
	/** テンプレートID(EKK1681B001)異動予約一覧照会 */
	private static final String TEMPLATE_ID_EKK1681B001 = "EKK1681B001";
	/** テンプレートID(EKK0161C130)サービス契約内訳料金プラン変更中止 */
	private static final String TEMPLATE_ID_EKK0161C130 = "EKK0161C130";
	/* ++++++++++ v5.00.02 追加終了 ++++++++++ */
	/* ++++++++++ v5.00.05 追加開始 ++++++++++ */
	/** テンプレートID(EKK0081C190)サービス契約解約中止 */
	private static final String TEMPLATE_ID_EKK0081C190 = "EKK0081C190";
	/* ++++++++++ v5.00.05 追加終了 ++++++++++ */
	/* ++++++++++ v5.00.09 追加開始 ++++++++++ */
	/** テンプレートID(EKK0351B001) オプションサービス契約一覧照会（サービス契約内訳番号）*/
	private static final String TEMPLATE_ID_EKK0351B001 = "EKK0351B001";
	/** テンプレートID(EKK0351A010) オプションサービス契約一意照会*/
	private static final String TEMPLATE_ID_EKK0351A010 = "EKK0351A010";
	/** テンプレートID(EKK0351C220) オプションサービス契約キャンセル*/
	private static final String TEMPLATE_ID_EKK0351C220 = "EKK0351C220";
	/** テンプレートID(EKK0351C240) オプションサービス契約解約*/
	private static final String TEMPLATE_ID_EKK0351C240 = "EKK0351C240";
	/** テンプレートID(EKK0351C250) オプションサービス契約解約確定*/
	private static final String TEMPLATE_ID_EKK0351C250 = "EKK0351C250";
	/** テンプレートID(EKK2151D010) 機器回収登録*/
	private static final String TEMPLATE_ID_EKK2151D010 = "EKK2151D010";
	/* ++++++++++ v5.00.09 追加終了 ++++++++++ */
		/* ++++++++++ v5.00.11 追加開始 ++++++++++ */
	/** テンプレートID(EKK0081B009)同一場所サービス契約情報照会 */
	private static final String TEMPLATE_ID_EKK0081B009 = "EKK0081B009";
		/* ++++++++++ v5.00.11 追加終了 ++++++++++ */
	/** テンプレートID(EKK0081A010)サービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0081A010 = "EKK0081A010";
	/* ++++++++++ v5.00.17 追加開始 ++++++++++ */
	/** テンプレートID(EKK0341E010)機器提供サービス契約論理削除*/
	private static final String TEMPLATE_ID_EKK0341E010 = "EKK0341E010";
	/* ++++++++++ v5.00.17 追加終了 ++++++++++ */
	/* ++++++++++ v5.00.17 追加開始 ++++++++++ */
	/** テンプレートID(EKK1681C010)異動予約異動予約状態変更*/
	private static final String TEMPLATE_ID_EKK1681C010 = "EKK1681C010";
	/* ++++++++++ v5.00.17 追加終了 ++++++++++ */
	/* ++++++++++ v6.00.00 追加開始 ++++++++++ */
	/** 割引サービス対象契約一覧照会 */
	private static final String TEMPLATE_ID_EKK0481B001 = "EKK0481B001";
	/** 割引サービス対象契約論理削除 */
	private static final String TEMPLATE_ID_EKK0481E010 = "EKK0481E010";
	/** 割引サービス契約一覧照会（サービス契約番号） */
	private static final String TEMPLATE_ID_EKK0451B002 = "EKK0451B002";
	/** 課金先論理削除*/
	private static final String TEMPLATE_ID_EKK0321E010 = "EKK0321E010";
	/** 課金先一覧照会（請求契約番号／サービス契約番号） */
	private static final String TEMPLATE_ID_EKK0321B002 = "EKK0321B002";
	/** 請求契約一覧照会（サービス契約番号） */
	private static final String TEMPLATE_ID_EKK0491B507 = "EKK0491B507";
	/** 請求先一意照会 */
	private static final String TEMPLATE_ID_EKK0321A010 = "EKK0321A010";
	/* ++++++++++ v6.00.00 追加終了 ++++++++++ */
	/* ++++++++++ v6.00.02 追加開始 ++++++++++ */
	/** 請求先一意照会 */
	private static final String TEMPLATE_ID_EKK0771A010 = "EKK0771A010";
	/* ++++++++++ v6.00.02 追加終了 ++++++++++ */
	/* ++++++++++ v7.00.05 追加開始 ++++++++++ */
	/** 機器オプションサービス契約キャンセル */
	private static final String TEMPLATE_ID_EKK2811C110 = "EKK2811C110";
	/** 機器オプションサービス契約解約 */
	private static final String TEMPLATE_ID_EKK2811C140 = "EKK2811C140";
	/** 機器オプションサービス契約解約確定 */
	private static final String TEMPLATE_ID_EKK2811C150 = "EKK2811C150";
	/** 機器オプションサービス契約解約取消 */
	private static final String TEMPLATE_ID_EKK2811C200 = "EKK2811C200";
	/** 機器オプションサービス契約解約確定取消 */
	private static final String TEMPLATE_ID_EKK2811C210 = "EKK2811C210";
	/** 機器オプションサービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK2811A010 = "EKK2811A010";
	/* ++++++++++ v7.00.05 追加終了 ++++++++++ */
	// v39.00.00 ANK-3488-00-00 ADD START
	/** 業務パラメータ管理一意照会 */
	private static final String TEMPLATE_ID_EZM0321A010 = "EZM0321A010";
	// v39.00.00 ANK-3488-00-00 ADD END
	
	/* ++++++++++ v5.00.21 追加開始 ++++++++++ */
	/** 配送作成済フラグ（未）*/
	private static final String HAISO_SAKSEI_ZUMI_FLG_MI = "0";
	/* ++++++++++ v5.00.21 追加終了 ++++++++++ */
//	/**
//	 * 機能コード
//	 */
//	private String funcCode = "";
	private static final String GET_PPLAN_CD_CC = "JKKKikiPplanCdGetCC";
	/** 異動予約異動予約状態(取消済) */
	private static final String IDO_RSV_STAT_CD_CANCELED = "02";
	
	/** 宅内機器異動コード(STB追加) */
	private static final String TAKNKIKI_IDO_CD_ADD = "01";
	/** 宅内機器異動コード(STB交換) */
	private static final String TAKNKIKI_IDO_CD_CHG = "02";
	/** 宅内機器異動コード(STB一部撤去) */
	private static final String TAKNKIKI_IDO_CD_RMV = "03";
	/** 宅内機器異動コード(STB移動) */
	private static final String TAKNKIKI_IDO_CD_MOV = "04";
	
	/* ++++++++++ v7.00.05 追加開始 ++++++++++ */
	/** サービス契約ステータス(締結済) */
	private static final String SVC_KEI_STAT_TEIKETSUZUMI = "030";
	/* ++++++++++ v7.00.05 追加終了 ++++++++++ */
	/** サービス契約内訳ステータス(受付済) */
	private static final String SVC_KEI_UCWK_STAT_010 = "010";
	/** サービス契約内訳ステータス(照査済) */
	private static final String SVC_KEI_UCWK_STAT_020 = "020";
	
	/** 機器提供サービス契約ステータス(受付済) */
	private static final String KKTK_SVC_KEI_STAT_010 = "010";
	/** 機器提供サービス契約ステータス(照査済) */
	private static final String KKTK_SVC_KEI_STAT_020 = "020";
	/** 機器提供サービス契約ステータス(契約変更中) */
	private static final String KKTK_SVC_KEI_STAT_110 = "110";
	/** 機器提供サービス契約ステータス（解約済）*/
	private static final String KKTK_SVC_KEI_STAT_910 = "910";
	/** 機器提供サービス契約ステータス（キャンセル済）*/
	private static final String KKTK_SVC_KEI_STAT_920 = "920";
	/** サービス解約理由コード(通常解約) */
	private static final String SVC_DSL_RSN_01 = "01";
	/* ++++++++++ v5.00.09 追加開始 ++++++++++ */
	/** サービスキャンセル理由コード(06：解約によるキャンセル) */
	private static final String SVC_CANCEL_RSN_06 = "06";
	/* ++++++++++ v5.00.09 追加終了 ++++++++++ */
	/** 返品区分(レンタル品) */
	private static final String HMPIN_DIV_2 = "2";
	/** 機器提供サービスコード(V-ONU) */
	public static final String KKTK_SVC_C013 = "C013";
	/** 機器提供サービスコード(BBR) */
	public static final String KKTK_SVC_C014 = "C014";
	/* ++++++++++ v7.00.00 追加開始 ++++++++++ */
	/** 機器提供サービスコード(多機能BBR) */
	public static final String KKTK_SVC_C024 = "C024";
	/* ++++++++++ v7.00.00 追加終了 ++++++++++ */
	// ANK-4315-00-00 ADD START
	/** 機器提供サービスコード(HGW) */
	public static final String KKTK_SVC_C025 = "C025";
	// ANK-4315-00-00 ADD END
	/** 機器提供サービスコード(PLC) */
	public static final String KKTK_SVC_C015 = "C015";
	/** 機器提供サービスコード(VA) */
	public static final String KKTK_SVC_C004 = "C004";
	/* ++++++++++ v4.00.01 追加開始 ++++++++++ */
	/** 機器提供サービスコード(ONU) */
	public static final String KKTK_SVC_C012 = "C012";
	/* ++++++++++ v4.00.01 追加終了 ++++++++++ */
	/** 機器提供サービスコード(BCAS) */
	public static final String KKTK_SVC_C010 = "C010";
	/** 機器提供サービスコード(STB) */
	public static final String KKTK_SVC_C009 = "C009";
	/** サービス契約の更新タイムスタンプ格納キー */
	private static final String KK_COM_SVC_UP_DTM = "KK_COM_SVC_UP_DTM";
	/* ++++++++++ v5.00.02 追加開始 ++++++++++ */
	/** サービス契約の更新タイムスタンプ格納キー(住所変更用) */
	private static final String KK_COM_SVC_UP_DTM_JH = "KK_COM_SVC_UP_DTM_JH";
	/** サービス契約の更新タイムスタンプ格納キー(住所変更撤去用) */
	private static final String KK_COM_SVC_UP_DTM_TEKKYO = "KK_COM_SVC_UP_DTM_TEKKYO";
	/* ++++++++++ v5.00.02 追加終了 ++++++++++ */
	/* ++++++++++ v5.00.21 追加開始 ++++++++++ */
	/** 工事案件種別コード（新規）*/
//	private static final String KOJIAK_SBT_CD_SHINKI = "001";
	/* ++++++++++ v5.00.21 追加終了 ++++++++++ */
	/* ++++++++++ v5.00.06 追加開始 ++++++++++ */
	/** 工事案件種別コード（収容替）*/
	private static final String KOJIAK_SBT_CD_SHUYOUGAE = "009";
	/** 工事案件種別コード（撤去（解約））*/
	private static final String KOJIAK_SBT_CD_DSL = "002";
	/* ++++++++++ v5.00.06 追加終了 ++++++++++ */
	/** 申込明細番号格納キー */
	private static final String MSKM_DTL_NO = "mskm_dtl_no";
	/** 工事CC連携用データ格納キー */
	private static final String KOJI_RENKEI_MAP_KEY = "kojifixtext";
	/* ++++++++++ v5.00.09 追加開始 ++++++++++ */
	/** オプションサービス契約ステータス（受付済） */
	private static final String OP_SVC_KEI_STAT_UKEZUMI = "010";
	/** オプションサービス契約ステータス（照査済）*/
	private static final String OP_SVC_KEI_STAT_SYOSAZUMI = "020";
	/** STB撤去チェックボックス（撤去する）*/
	private static final String STB_TEKKYO_TEKKYO_ON = "1";
	/** 機能コード（"1"）*/
	private static final String FUNC_CODE_1 = "1";
	/*** 機能コード（"2"）*/
	private static final String FUNC_CODE_2 = "2";
	/** 住所変更画面移動機器（住所変更画面の移動機器である）*/
	private static final String JUHEN_IDOKIKI_IDOKIKI = "1";
	/** 工事案件住所変更（住所変更画面である）*/
	private static final String KOJIAK_JUHEN_JUHEN = "1";
	/** 工事案件住所変更（住所変更画面でない）*/
	private static final String KOJIAK_JUHEN_NON = "0";
	/** 住所変更初期サービス契約番号（新設側サービス契約番号）*/
	private static final String JH_INIT_SVCKEINO_NEW = "1";
	/** 住所変更処理 住変(新設)+住変(撤去)の場合 */
	private static final String JUHEN_SHORI_ST = "2";
	/* ++++++++++ v5.00.09 追加終了 ++++++++++ */
	/* ++++++++++ v5.00.11 追加開始 ++++++++++ */
	/** 料金グループコード（eo光ネットホームタイプ） */
	public static final String PRC_GRP_CD_02 = "02";
	/** 料金グループコード（eo光ネットメゾンタイプ） */
	public static final String PRC_GRP_CD_03 = "03";
	/** 料金グループコード（eo光ネットマンションタイプ） */
	public static final String PRC_GRP_CD_04 = "04";
	/** 料金グループコード（eo光電話） */
	public static final String PRC_GRP_CD_10 = "10";
	/* ++++++++++ v5.00.11 追加終了 ++++++++++ */
	/** 異動区分（撤去（解約）） */
	public static final String IDO_DIV_VALUE_00006 = "00006";
	/** 異動区分（登録内容修正） */
	public static final String IDO_DIV_VALUE_00032 = "00032";
	/** 異動区分（工事情報訂正） */
	public static final String IDO_DIV_VALUE_00035 = "00035";
	/** 異動区分（工事情報訂正） */
	public static final String IDO_DIV_VALUE_00067 = "00067";
	
	/* ++++++++++ v5.00.14 追加開始 ++++++++++ */
	/** 撤去機器 */
	public static final String TEKKYO_KIKI = "TEKKYO_KIKI";
	/** 撤去機器 (新設)*/
	public static final String TEKKYO_KIKI_NEW = "0";
	/** 撤去機器 (撤去)*/
	public static final String TEKKYO_KIKI_TEKKYO = "1";
	/* ++++++++++ v5.00.14 追加終了 ++++++++++ */
	
	/* ++++++++++ v6.00.00 追加開始 ++++++++++ */
	/** 請求契約の更新タイムスタンプ格納キー(課金先論理削除時に設定) */
	private static final String KK_COM_SEIKY_UP_DTM = "KK_COM_SEIKY_UP_DTM";
	/** 論理削除対象課金先候補リスト */
	private static final String KAKINS_DEL_KHO_LIST = "kakins_del_kho_list";
	/* ++++++++++ v6.00.00 追加終了 ++++++++++ */
	

	/* ++++++++++ v6.00.01 追加開始 ++++++++++ */
	/** プラン終了種別コード(2：解約による終了) */
	private static final String PLAN_END_SBT_CD_2 = "2";
	/* ++++++++++ v6.00.01 追加終了 ++++++++++ */
	
	/* ++++++++++ v6.00.02 追加開始 ++++++++++ */
	/** 違約金発生コード（違約金発生） */
	private static final String PNLTY_HASSEI_CD_ARI = "1";
	/** 違約金発生コード（違約金なし） */
//	private static final String PNLTY_HASSEI_CD_NASI = "0";
	/* ++++++++++ v6.00.02 追加終了 ++++++++++ */
	/* ++++++++++ v7.00.04 追加開始 ++++++++++ */
	/** 終了日（"20991231"） */
//	public static final String ENDYMD_20991231 = "20991231";
	/** 異動区分（住所変更） */
	public static final String IDO_DIV_VALUE_00019 = "00019";
	/* ++++++++++ v7.00.04 追加終了 ++++++++++ */
	/* ++++++++++ v7.00.05 追加開始 ++++++++++ */
	/** 移動多機能ルーターチェック変更（変更有）*/
//	private static final String CHG_TKN_ROUTER_IDO_CHG = "1";
	/** 移動多機能ルーターチェック変更（変更無）*/
//	private static final String CHG_TKN_ROUTER_IDO_NOCHG = "0";
	/** 多機能ルーター機能移動状態（選択）*/
	private static final String KKOP_SVC_KEI_NO_SELECTED = "1";
	/** 多機能ルーター機能移動状態（非選択）*/
//	private static final String KKOP_SVC_KEI_NO_UNSELECTED = "0";
	/** 多機能ルーター機能移動状態（機能無）*/
//	private static final String KKOP_SVC_KEI_NO_STAT_NON = "00";
	/** 多機能ルーター機能移動状態（新設）*/
	private static final String KKOP_SVC_KEI_NO_STAT_ADD = "01";
	/** 多機能ルーター機能移動状態（撤去）*/
//	private static final String KKOP_SVC_KEI_NO_STAT_CHG = "02";
	/** 多機能ルーター機能移動状態（交換）*/
//	private static final String KKOP_SVC_KEI_NO_STAT_DEL = "03";
	/** 多機能ルーター機能移動状態（移動）*/
	private static final String KKOP_SVC_KEI_NO_STAT_IDO = "04";
	/** 住所変更明細種別コード（機器オプションサービス契約）*/
	private static final String ADCHG_DTL_SBT_CD_KKOP = "09";
	/** 機器オプションサービス契約ステータス（解約済）*/
	private static final String KKOP_SVC_KEI_STAT_910 = "910";
	/** 多機能ルーター変更有*/
	private static final String TAKINO_ROUTER_ARI_CHG = "1";
	/** 異動予約詳細コード（機器オプション解約）*/
	private static final String IDO_RSV_DTL_CD_KIKI_OPT_KAIYAKU = "024";
	/** 異動予約状態コード（予約手続中,未反映）*/
	private static final String IDO_RSV_STAT_CD_03_00 = "03,00";
	/* ++++++++++ v7.00.05 追加終了 ++++++++++ */
	/* ++++++++++ v8.00.00 追加開始 ++++++++++ */
	/** 機器オプションサービス契約解約年月日 */
	private static final String PRM_KIKI_OPT_SVC_DSL_YMD = "prm_dsl_ymd";
	/* ++++++++++ v8.00.00 追加終了 ++++++++++ */
	// v39.00.00 ANK-3488-00-00 ADD START
	/** HDD容量コード */
	private static final String HDD_CAPA_CD = "HDD_CAPA_CD";
	/** 変更前HDD容量コード */
	private static final String OLD_HDD_CAPA_CD = "OLD_HDD_CAPA_CD";
	// v39.00.00 ANK-3488-00-00 ADD END
	// v39.00.01 ANK-3488-00-00 ADD START
	// v39.00.02 ANK-3488-00-00 MOD START
//	/** 移動時HDD容量コード */
//	private static final String IDO_HDD_CAPA_CD = "IDO_HDD_CAPA_CD";
	/** 初期表示時HDD容量コード */
	private static final String INIT_HDD_CAPA_CD = "INIT_HDD_CAPA_CD";
	// v39.00.02 ANK-3488-00-00 MOD END
	// v39.00.01 ANK-3488-00-00 ADD END
	
	/**
	 * 工事機器情報の変更処理を行います。
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return リクエストパラメータ
	 * @throws Throwable 
	 */

	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite updKojiKiki(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		// データ情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
	/* ++++++++++ v7.00.05 追加開始 ++++++++++ */
		//住所変更明細
		HashMap<String, Object> jhDtlMsg = (HashMap<String, Object>)param.getData("jushoHenkoInfo");
	/* ++++++++++ v7.00.05 追加終了 ++++++++++ */
		if (inMap == null)
		{
			return param;
		}
		// 機能コード取得
		String funcCode = (String)inMap.get("func_code");
		
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		// STB撤去
		String stbTekkyo = (String)inMap.get("stb_tekkyo");
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		// STB撤去
		String kojiakJuhen = (String)inMap.get("kojiak_Juhen");
		/* ++++++++++ v5.00.05 追加開始 ++++++++++ */
		//異動区分
		String idoDiv = (String)inMap.get("ido_div");
		/* ++++++++++ v5.00.05 追加終了 ++++++++++ */
		/* ++++++++++ v7.00.09 追加開始 ++++++++++ */
		//e-pon ge-ponは処理しない
		// 作業領域に設定
		Map<Object, Object> workMap = param.getMappingWorkArea();
		if(IDO_DIV_VALUE_00067.equals(idoDiv))
		{
			if(workMap.get(KK_COM_SVC_UP_DTM) == null && inMap.get("last_upd_dtm") != null && !"".equals(inMap.get("last_upd_dtm")))
			{
				workMap.put(KK_COM_SVC_UP_DTM, inMap.get("last_upd_dtm"));
			}
			return param;
		}
		/* ++++++++++ v7.00.09 追加終了 ++++++++++ */

		/* ++++++++++ v5.00.06 追加開始 ++++++++++ */
		//工事案件種別コード
		String kojiakSbtCd = (String)inMap.get("kojiak_sbt_cd");
		/* ++++++++++ v5.00.06 追加終了 ++++++++++ */
		/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
		//工事受付契機異動区分
		String kojiUkOptntyIdoDiv = (String)inMap.get("koji_uk_optnty_ido_div");
		/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
		/* ++++++++++ v5.00.21 追加開始 ++++++++++ */
		//配送作成済みフラグ
		String haisou_zumi = (String)inMap.get("haiso_sakusei_zumi_flg");
		/* ++++++++++ v5.00.21 追加終了 ++++++++++ */
		// 作業領域の設定
		List<String> processedSvcKeiUcwkNoList = new ArrayList<String>();
		List<String> processedSvcKeiUcwkNoList2 = new ArrayList<String>();
		
		// 工事連携データ格納用Mapキー
		String kojiRenkeiMapKey = (String)inMap.get(KOJI_RENKEI_MAP_KEY);
		// 工事連携CCで使用するMap
		HashMap<String, Object> kktkSvcOutMap = (HashMap<String, Object>)param.getData(kojiRenkeiMapKey);
		if (kktkSvcOutMap == null)
		{
			kktkSvcOutMap = new HashMap<String, Object>();
			param.setData(kojiRenkeiMapKey, kktkSvcOutMap);
		}
		ArrayList<HashMap<String, Object>> kktkSvcOutList = (ArrayList<HashMap<String, Object>>)kktkSvcOutMap.get("kktkSvcOutList");
		if (kktkSvcOutList == null)
		{
			kktkSvcOutList = new ArrayList<HashMap<String, Object>>();
			kktkSvcOutMap.put("kktkSvcOutList", kktkSvcOutList);
		}
		
		initProcessList(param, fixedText);
		
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// サービス契約更新前タイムスタンプを作業領域に格納します。
		setInitSvcUpdate(param, inMap);
		
		String geneAddDtm = "";
		String svcUcwkgeneAddDtm = "";
		
		ArrayList<HashMap<String, Object>> dataList = (ArrayList<HashMap<String, Object>>)inMap.get("kktkSvcList");
		if(!"00006".equals(idoDiv) && !KOJIAK_SBT_CD_DSL.equals(kojiakSbtCd) && dataList != null)
		{
			// v39.00.00 ANK-3488-00-00 ADD START
			List<CAANMsg> ekk0341a010pkList = new ArrayList<CAANMsg>();
			Map<String, Map<String, String>> hddCapaCdMap = new HashMap<String, Map<String, String>>();
			List<String> hddCapaBcasnoneList = getHddCapaBcasnoneList(handle, scCall, param, fixedText);
			for (int i = 0; i < dataList.size(); i++)
			{
				// ***** EKK0341A010（機器提供サービス契約一意照会）*****
				Map<String, Object> dataMap = (Map<String, Object>)dataList.get(i);
				CAANMsg ekk0341a010pk = findByPkKK0341(handle, scCall, param, fixedText, (String)dataMap.get("kktk_svc_kei_no"), (String)dataMap
						.get("gene_add_dtm"));
				ekk0341a010pkList.add(ekk0341a010pk);
				// 機器提供サービスコード
				String kktkSvcCd = JKKStringUtil.nullToBlank(ekk0341a010pk.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
				// STBの場合
				if (KKTK_SVC_C009.equals(kktkSvcCd))
				{
					String hddCapaCd = (String)dataMap.get("hdd_capa_cd");
					String oldHddCapaCd = ekk0341a010pk.getString(EKK0341A010CBSMsg1List.HDD_CAPA_CD);
					// v39.00.01 ANK-3488-00-00 ADD START
					// v39.00.02 ANK-3488-00-00 MOD START
//					String idoHddCapaCd = (String)dataMap.get("ido_hdd_capa_cd");
					String initHddCapaCd = (String)dataMap.get("init_hdd_capa_cd");
					// v39.00.02 ANK-3488-00-00 MOD END
					// v39.00.01 ANK-3488-00-00 ADD END
					Map<String, String> subMap = new HashMap<String, String>();
					subMap.put(HDD_CAPA_CD, hddCapaCd);
					subMap.put(OLD_HDD_CAPA_CD, oldHddCapaCd);
					// v39.00.01 ANK-3488-00-00 ADD START
					// v39.00.02 ANK-3488-00-00 MOD START
//					subMap.put(IDO_HDD_CAPA_CD, idoHddCapaCd);
					subMap.put(INIT_HDD_CAPA_CD, initHddCapaCd);
					// v39.00.02 ANK-3488-00-00 MOD END
					// v39.00.01 ANK-3488-00-00 ADD END
					// サービス契約内訳番号
					String svcKeiUcwkNo = (String)dataMap.get("svc_kei_ucwk_no");
					hddCapaCdMap.put(svcKeiUcwkNo, subMap);
				}
			}
			// v39.00.00 ANK-3488-00-00 ADD END
			
			for (int i = 0; i < dataList.size(); i++)
			{
				HashMap<String, Object> dataMap = (HashMap<String, Object>)dataList.get(i);
				/* ++++++++++ v7.00.04 追加開始 ++++++++++ */
				//住所変更かどうかを設定
				dataMap.put("kojiak_Juhen", kojiakJuhen);
				dataMap.put("dsl_ymd_tekkyo", (String) inMap.get("dsl_ymd_tekkyo"));
				dataMap.put("stdardYmdaddy1", (String) inMap.get("stdardYmdaddy1"));
				/* ++++++++++ v7.00.04 追加終了 ++++++++++ */
				/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
				//工事受付契機異動区分が存在している場合、異動区分を置き換えるた為に設定する
				if (kojiakSbtCd != null && !"".equals(kojiakSbtCd)
						&& kojiUkOptntyIdoDiv != null && !"".equals(kojiUkOptntyIdoDiv))
				{
					dataMap.put("kojiak_sbt_cd", kojiakSbtCd);
					dataMap.put("koji_uk_optnty_ido_div", kojiUkOptntyIdoDiv);
				}
				/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
				// 変更宅内機器異動コード（TVのみ設定される）
				String newTaknkikiIdo = (String)dataMap.get("newTaknkikiIdo");
				// 変更前宅内機器異動コード（TVのみ設定される）
				String oldTaknkikiIdo = (String)dataMap.get("oldTaknkikiIdo");
				// サービス契約内訳番号
				String svcKeiUcwkNo = (String)dataMap.get("svc_kei_ucwk_no");
				
				// ***** EKK0341A010（機器提供サービス契約一意照会）*****
				// v39.00.00 ANK-3488-00-00 MOD START
//				CAANMsg ekk0341a010pk = findByPkKK0341(handle, scCall, param, fixedText, (String) dataMap.get("kktk_svc_kei_no"), (String) dataMap.get("gene_add_dtm"));
				CAANMsg ekk0341a010pk = ekk0341a010pkList.get(i);
				// v39.00.00 ANK-3488-00-00 MOD END
				// 機器提供サービスコード
				String kktkSvcCd = ekk0341a010pk.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD);
// OM-2020-0000110 ADD START
				// STB交換→交換の場合のみ、異動予約一覧照会時に申込明細番号をキー追加するためのフラグ
				Boolean mskmDtlNoKeyFlg = KKTK_SVC_C009.equals(kktkSvcCd)
										&& TAKNKIKI_IDO_CD_CHG.equals(oldTaknkikiIdo)
										&& TAKNKIKI_IDO_CD_CHG.equals(newTaknkikiIdo);
// OM-2020-0000110 ADD END
				
				//撤去側機器　住所変更で新設撤去でサービス契約が異なり、機器が撤去側で一部撤去されている場合
				//移動に変更しようとしたときに撤去側で処理するためのフラグ（判断が必要なのは住所変更一部撤去から移動の場合のみ）
				/* ++++++++++ v5.00.14 追加開始 ++++++++++ */
				String tekkyoKiki = TEKKYO_KIKI_NEW;
				String svcKeiNokiki = ekk0341a010pk.getString(EKK0341A010CBSMsg1List.SVC_KEI_NO);
				String svcKeiNo = (String)inMap.get("svc_kei_no");
				String svcKeiNoTekkyo = (String)inMap.get("svc_kei_no_jh_tekkyo");
				/* ++++++++++ v7.00.02 修正開始 ++++++++++ */
				//多機能ルーターは回線で新設撤去が異なる場合の撤去側を判断
				String ksnUcwkNoKiki = ekk0341a010pk.getString(EKK0341A010CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO);
				String ksnUcwkNoTekkyo = (String)inMap.get("svc_kei_kaisen_ucwk_no_tekkyo");
				if(svcKeiNoTekkyo != null && !"".equals(svcKeiNoTekkyo) 
					&& svcKeiNo != null && !"".equals(svcKeiNo)
					&& svcKeiNoTekkyo != null && !"".equals(svcKeiNoTekkyo) 
//					&& !svcKeiNo.equals(svcKeiNoTekkyo) && svcKeiNokiki.equals(svcKeiNoTekkyo))
					&& !svcKeiNo.equals(svcKeiNoTekkyo) 
					&& (svcKeiNokiki != null && !"".equals(svcKeiNokiki) && svcKeiNokiki.equals(svcKeiNoTekkyo)
						|| ksnUcwkNoKiki != null && !"".equals(ksnUcwkNoKiki) && ksnUcwkNoTekkyo != null && !"".equals(ksnUcwkNoTekkyo) && ksnUcwkNoKiki.equals(ksnUcwkNoTekkyo)))
				{
					tekkyoKiki = TEKKYO_KIKI_TEKKYO;
				}
				/* ++++++++++ v7.00.02 修正終了 ++++++++++ */
				workMap.put(TEKKYO_KIKI, tekkyoKiki);
				/* ++++++++++ v5.00.14 追加終了 ++++++++++ */
				/* ++++++++++ v6.00.02 追加開始 ++++++++++ */
				// 違約金発生コード取得
				// 違約金発生コード
				String pnltyHasseiCd = (String) inMap.get("pnlty_hassei_cd");
				/* ++++++++++ v7.00.06 追加開始 ++++++++++ */
				dataMap.put("pnlty_hassei_cd", pnltyHasseiCd);
				/* ++++++++++ v7.00.06 追加終了 ++++++++++ */
				if (PNLTY_HASSEI_CD_ARI.equals(pnltyHasseiCd)) {
					CAANMsg[] ekk0771a010cbsMsg1List = execEKK0771A010(handle, scCall, param, fixedText, kktkSvcCd);
					if(ekk0771a010cbsMsg1List != null && ekk0771a010cbsMsg1List.length > 0)
					{
						CAANMsg ekk0771a010cbsMsg = ekk0771a010cbsMsg1List[0];
						String pnltyHasseiUm = ekk0771a010cbsMsg.getString(EKK0771A010CBSMsg1List.PNLTY_HASSEI_UM);
						if(pnltyHasseiUm != null && !"".equals(pnltyHasseiUm))
						{
							dataMap.put("pnlty_hassei_cd", pnltyHasseiUm);
						}
					}
				}
				
				/* ++++++++++ v6.00.02 追加終了 ++++++++++ */

							
				// 機器提供サービス契約ステータス（初期）
				String kktkSvcKeiStat = ekk0341a010pk.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT);
				
				geneAddDtm = ekk0341a010pk.getString(EKK0341A010CBSMsg1List.GENE_ADD_DTM);
				
				// v39.00.00 ANK-3488-00-00 ADD START
				// BCASについての４KSTBへの対応追加
				if (KKTK_SVC_C010.equals(kktkSvcCd))
				{
					Map<String, String> subMap = hddCapaCdMap.get(svcKeiUcwkNo);
					if (subMap != null)
					{
						String hddCapaCd = JKKStringUtil.nullToBlank(subMap.get(HDD_CAPA_CD));
						String oldHddCapaCd = JKKStringUtil.nullToBlank(subMap.get(OLD_HDD_CAPA_CD));
						// v39.00.01 ANK-3488-00-00 ADD START
						// v39.00.02 ANK-3488-00-00 MOD START
//						String idoHddCapaCd = JKKStringUtil.nullToBlank(subMap.get(IDO_HDD_CAPA_CD));
						String initHddCapaCd = JKKStringUtil.nullToBlank(subMap.get(INIT_HDD_CAPA_CD));
//						// 従来型STBへの交換から４KSTBへの移動に変更された場合
//						if (TAKNKIKI_IDO_CD_MOV.equals(newTaknkikiIdo) && TAKNKIKI_IDO_CD_CHG.equals(oldTaknkikiIdo)
//								&& hddCapaBcasnoneList.contains(idoHddCapaCd) && !hddCapaBcasnoneList.contains(oldHddCapaCd))
						boolean isCancelAddBcas = false;
						// 変更前の従来型への交換でB-CASを追加している場合
						if (TAKNKIKI_IDO_CD_CHG.equals(oldTaknkikiIdo)
								&& (hddCapaBcasnoneList.contains(initHddCapaCd)) && !hddCapaBcasnoneList.contains(oldHddCapaCd))
						{
							// 変更後が移動または撤去または交換または空白の場合
							if (TAKNKIKI_IDO_CD_MOV.equals(newTaknkikiIdo) || TAKNKIKI_IDO_CD_RMV.equals(newTaknkikiIdo)
									|| TAKNKIKI_IDO_CD_CHG.equals(newTaknkikiIdo) || "".equals(newTaknkikiIdo))
							{
								// 追加したB-CASは不要
								isCancelAddBcas = true;
							}
						}
						boolean isCancelRemoveBcas = false;
						// 変更前の４Ｋへの交換でB-CASを撤去している場合
						if (TAKNKIKI_IDO_CD_CHG.equals(oldTaknkikiIdo)
								&& (!hddCapaBcasnoneList.contains(initHddCapaCd)) && hddCapaBcasnoneList.contains(oldHddCapaCd))
						{
							// 変更後が移動または空白の場合
							if (TAKNKIKI_IDO_CD_MOV.equals(newTaknkikiIdo) || "".equals(newTaknkikiIdo))
							{
								// B-CASの回復が必要
								isCancelRemoveBcas = true;
							}
							// 変更後が交換で交換後のSTBが従来型の場合
							else if (TAKNKIKI_IDO_CD_CHG.equals(newTaknkikiIdo) && !hddCapaBcasnoneList.contains(hddCapaCd))
							{
								// 住変以外の場合
								if (!KOJIAK_JUHEN_JUHEN.equals(kojiakJuhen))
								{
									// B-CASの回復が必要
									isCancelRemoveBcas = true;
								}
							}
						}
						// 変更前の交換で追加したB-CASのキャンセル
						if (isCancelAddBcas)
						// v39.00.02 ANK-3488-00-00 MOD END
						{
							boolean kktkSvcout = false;
							for (HashMap<String, Object> kojiInfo : kktkSvcOutList)
							{
								// 工事の取消を工事側に連携する
								if (kojiInfo.get("kktk_svc_kei_no").equals(dataMap.get("kktk_svc_kei_no")))
								{
									kojiInfo.put("taknkiki_ido_cd",   "");
									kojiInfo.put("taknkiki_ido_cd_j", TAKNKIKI_IDO_CD_RMV);
									// v39.00.02 ANK-3488-00-00 ADD START
									kojiInfo.put("cancel_bcas_only_flg", "1");
									// v39.00.02 ANK-3488-00-00 ADD END
									kktkSvcout = true;
									break;
								}
							}
							//工事連携データが未設定の場合
							if(!kktkSvcout)
							{
								// 工事連携用STB情報設定(機器変更番号設定)
								CAANMsg ekk0341curMsg = findByCurrentKK0341(handle, scCall, param, fixedText, (String) dataMap.get("kktk_svc_kei_no"));
								setKktkSvcKeiMap(kktkSvcOutList, ekk0341curMsg, dataMap, "");
							}
							List<String> svcKeiUcwkNoList = new ArrayList<String>();
							svcKeiUcwkNoList.add(svcKeiUcwkNo);
							doAddKikiCancel(handle, scCall, param, fixedText, svcKeiUcwkNoList, svcKeiUcwkNo, dataMap);
							continue;
						}
						// v39.00.01 ANK-3488-00-00 ADD END
						// v39.00.00 ANK-3488-00-00 ADD START
						else if (isCancelRemoveBcas)
						{
							// 下部の処理でB-CASを回復させるため何もしない
						}
						// v39.00.00 ANK-3488-00-00 ADD END
						// v39.00.02 ANK-3488-00-00 MOD START
						// 変更前が４KSTBの場合
						// v39.00.01 ANK-3488-00-00 MOD START
//						if (hddCapaBcasnoneList.contains(oldHddCapaCd))
//						else if (hddCapaBcasnoneList.contains(oldHddCapaCd))
						else if (!TAKNKIKI_IDO_CD_MOV.equals(oldTaknkikiIdo) && hddCapaBcasnoneList.contains(oldHddCapaCd)
								|| TAKNKIKI_IDO_CD_MOV.equals(oldTaknkikiIdo) && hddCapaBcasnoneList.contains(initHddCapaCd))
						// v39.00.01 ANK-3488-00-00 MOD END
						// v39.00.02 ANK-3488-00-00 MOD END
						{
							// 処理しない
							continue;
						}
						// v39.00.02 ANK-3488-00-00 MOD START
						// 従来型STBから４KSTB（前回B-CASを追加していない場合）または一部撤去から４KSTB
//						else if (!hddCapaBcasnoneList.contains(oldHddCapaCd) && hddCapaBcasnoneList.contains(hddCapaCd))
						else if (hddCapaBcasnoneList.contains(hddCapaCd) || hddCapaBcasnoneList.contains(initHddCapaCd))
						{
//							if (TAKNKIKI_IDO_CD_CHG.equals(newTaknkikiIdo))
							// ４KSTBへの交換
							if ((TAKNKIKI_IDO_CD_CHG.equals(newTaknkikiIdo) && hddCapaBcasnoneList.contains(hddCapaCd))
									|| (TAKNKIKI_IDO_CD_MOV.equals(newTaknkikiIdo) && hddCapaBcasnoneList.contains(initHddCapaCd)))
							{
//								if (TAKNKIKI_IDO_CD_CHG.equals(oldTaknkikiIdo) || TAKNKIKI_IDO_CD_MOV.equals(oldTaknkikiIdo))
								// 前回が従来型への交換または移動
								if ((TAKNKIKI_IDO_CD_CHG.equals(oldTaknkikiIdo) && !hddCapaBcasnoneList.contains(oldHddCapaCd))
										|| (TAKNKIKI_IDO_CD_MOV.equals(oldTaknkikiIdo) && !hddCapaBcasnoneList.contains(initHddCapaCd)))
								// v39.00.02 ANK-3488-00-00 MOD END
								{
									for (HashMap<String, Object> kojiInfo : kktkSvcOutList)
									{
										// 機器の撤去を工事側に連携する
										if (kojiInfo.get("kktk_svc_kei_no").equals(dataMap.get("kktk_svc_kei_no")))
										{
											kojiInfo.put("taknkiki_ido_cd",   TAKNKIKI_IDO_CD_RMV);
											kojiInfo.put("taknkiki_ido_cd_j", TAKNKIKI_IDO_CD_RMV);
											break;
										}
									}
								}
								else if (TAKNKIKI_IDO_CD_RMV.equals(oldTaknkikiIdo))
								{
									// 処理しない
									continue;
								}
							}
							// v39.00.02 ANK-3488-00-00 DEL START
//							else if (TAKNKIKI_IDO_CD_MOV.equals(newTaknkikiIdo))
//							{
//								if (TAKNKIKI_IDO_CD_CHG.equals(oldTaknkikiIdo))
//								{
//									for (HashMap<String, Object> kojiInfo : kktkSvcOutList)
//									{
//										// 機器の撤去を工事側に連携する
//										if (kojiInfo.get("kktk_svc_kei_no").equals(dataMap.get("kktk_svc_kei_no")))
//										{
//											kojiInfo.put("taknkiki_ido_cd",   TAKNKIKI_IDO_CD_RMV);
//											kojiInfo.put("taknkiki_ido_cd_j", TAKNKIKI_IDO_CD_RMV);
//											break;
//										}
//									}
//								}
//							}
							// v39.00.02 ANK-3488-00-00 DEL END
						}
					}
				}
				// v39.00.00 ANK-3488-00-00 ADD END
				// *********** STB一部撤去（変更後） ***********
				//  - 一部撤去 → 一部撤去
				//  - 交換     → 一部撤去
				//  - 移動     → 一部撤去
				//  - ""       → 一部撤去
				if (TAKNKIKI_IDO_CD_RMV.equals(newTaknkikiIdo))
				{
					/* ++++++++++ v5.00.23 修正開始 ++++++++++ */
					// *** 一部撤去から一部撤去の場合は処理不要(STB撤去チェックボックスONの場合は処理する)
					if (TAKNKIKI_IDO_CD_RMV.equals(oldTaknkikiIdo) && !STB_TEKKYO_TEKKYO_ON.equals(stbTekkyo))
					{
						continue;
					}					
					else if (TAKNKIKI_IDO_CD_RMV.equals(oldTaknkikiIdo) && STB_TEKKYO_TEKKYO_ON.equals(stbTekkyo))
					{
						// 回復用の一時領域データの作成
						HashMap<String, Object> tmpMap = new HashMap<String, Object>();
						tmpMap.put("KKTK_SVC_KEI_STAT", kktkSvcKeiStat);
						tmpMap.put("KKTK_GENE_ADD_DTM", geneAddDtm);
						tmpMap.put("SVC_KEI_UCWK_NO",   svcKeiUcwkNo);
						tmpMap.put("UCWK_GENE_ADD_DTM", svcUcwkgeneAddDtm);
						//機器解約のキャンセル処理
						HashMap<String, Object> mp = dslCancel(handle, scCall, param, fixedText, dataMap, tmpMap, processedSvcKeiUcwkNoList2);
						addProcessList(param, fixedText, KAIHK_SVC_UCWK_LIST, mp);
						// **** 返品取消 ****
						// 返品機器一覧照会（機器提供サービス契約番号）
						henpinCancel(handle, scCall, param, fixedText, dataMap);
					}					
					/* ++++++++++ v5.00.23 修正終了 ++++++++++ */
					// *** 交換から撤去の場合は機器の予約取消を行う。
					else if (TAKNKIKI_IDO_CD_CHG.equals(oldTaknkikiIdo))
					{
						// ** 機器提供サービス契約予約取消 ***
						// 宅内機器異動コード：０２においては住所変更以外のＢＣＡＳの機器は機種変更されないため対象外。
						/* ++++++++++ v7.00.08 修正開始 ++++++++++ */
//						if (!(KKTK_SVC_C010.equals(kktkSvcCd) && KOJIAK_JUHEN_NON.equals(kojiakJuhen)))
						if (!KKTK_SVC_C010.equals(kktkSvcCd))
						{
							geneAddDtm = reserveKikiCancel(handle, scCall, param, fixedText, funcCode, dataMap);
						}
						else if(KKTK_SVC_C010.equals(kktkSvcCd) && KOJIAK_JUHEN_JUHEN.equals(kojiakJuhen))
						{
							/* ++++++++++ v20.00.00 ADD START ++++++++++ */
							// 住所変更時はB-CASも交換となっているため、交換取消を実施
							// 案件対応前データを考慮し、ステータスが交換中であることをチェックしておく
							if(KKTK_SVC_KEI_STAT_110.equals(kktkSvcKeiStat))
							{
								// 機器交換中の場合
								geneAddDtm = reserveKikiCancel(handle, scCall, param, fixedText, funcCode, dataMap);
							}
							/* ++++++++++ v20.00.00 ADD END   ++++++++++ */
							
							/* ++++++++++ v20.00.00 DEL START ++++++++++ */
							// 住所変更以外でも内訳のコース変更取消は必要。条件文の外へ移動
//							// ** 機器提供サービス契約予約取消 ***
//							String tmpAddDtm = canIdoIdoRsv(handle, scCall, param, fixedText, funcCode, dataMap);
//							if(!"".equals(tmpAddDtm))
//							{
//								geneAddDtm = tmpAddDtm;
//							}
							/* ++++++++++ v20.00.00 DEL END   ++++++++++ */
						}
						/* ++++++++++ v20.00.00 ADD START ++++++++++ */
						// STBの場合に行う
						if (KKTK_SVC_C009.equals(kktkSvcCd))
						{
							// ** 機器提供サービス契約予約取消 ***
// OM-2020-0000110 MOD START
//							String tmpAddDtm = canIdoIdoRsv(handle, scCall, param, fixedText, funcCode, dataMap);
							String tmpAddDtm = canIdoIdoRsv(handle, scCall, param, fixedText, funcCode, dataMap, mskmDtlNoKeyFlg);
// OM-2020-0000110 MOD END
							if(!"".equals(tmpAddDtm))
							{
								geneAddDtm = tmpAddDtm;
							}
						}
						/* ++++++++++ v20.00.00 ADD END   ++++++++++ */
						/* ++++++++++ v7.00.08 修正終了 ++++++++++ */
						// **** 返品取消 ****
						// 返品機器一覧照会（機器提供サービス契約番号）
						henpinCancel(handle, scCall, param, fixedText, dataMap);
					}
					// *** 移動から撤去の場合は機器の予約取消を行う。
					else if (TAKNKIKI_IDO_CD_MOV.equals(oldTaknkikiIdo))
					{
						//サービス契約内訳で検索なのでSTBの場合に行い、BCAS,CCASの場合はスキップする。
						if (KKTK_SVC_C009.equals(kktkSvcCd))
						{
							/* ++++++++++ v5.00.04 追加開始 ++++++++++ */
							// ** 機器提供サービス契約予約取消 ***
// OM-2020-0000110 MOD START
//							String tmpAddDtm = canIdoIdoRsv(handle, scCall, param, fixedText, funcCode, dataMap);
							String tmpAddDtm = canIdoIdoRsv(handle, scCall, param, fixedText, funcCode, dataMap, mskmDtlNoKeyFlg);
// OM-2020-0000110 MOD END
							if(!"".equals(tmpAddDtm))
							{
								geneAddDtm = tmpAddDtm;
							}
							/* ++++++++++ v5.00.04 追加終了 ++++++++++ */
						}
						// **** 返品取消 ****
						// 返品機器一覧照会（機器提供サービス契約番号）
						henpinCancel(handle, scCall, param, fixedText, dataMap);
					}
					dslRsvKiki(handle, scCall, param, fixedText, funcCode, dataMap);
					/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
					// 機能コードが１の場合、STB撤去チェックボックス＝ONの場合のみ呼び出す
					if (FUNC_CODE_1.equals(funcCode) && STB_TEKKYO_TEKKYO_ON.equals(stbTekkyo))
					{
						geneAddDtm = dslFixKiki(handle, scCall, param, fixedText, funcCode, dataMap);
						/* ++++++++++ v5.00.09 追加開始 ++++++++++ */
						//機器回収
						kikiKaishu(handle, scCall, param, fixedText, funcCode, dataMap, ekk0341a010pk);			
						/* ++++++++++ v5.00.09 追加終了 ++++++++++ */
					}
					/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
					// サービス契約内訳番号が違う場合
					if (!processedSvcKeiUcwkNoList.contains(svcKeiUcwkNo))
					{
						// サービス契約内訳解約
						dslRsvSvcKeiUcwk(handle, scCall, param, fixedText, funcCode, dataMap);
						/* ++++++++++ v5.00.09 追加開始 ++++++++++ */
						// 機能コードが１の場合、STB撤去チェックボックス＝ONの場合のみ呼び出す
						if (FUNC_CODE_1.equals(funcCode) && STB_TEKKYO_TEKKYO_ON.equals(stbTekkyo))
						{
							//サービス契約内訳解約確定
							geneAddDtm = dslFixSvcKeiUcwk(handle, scCall, param, fixedText, funcCode, dataMap);
							//オプション契約解約
							geneAddDtm = opSvcKeiDsl(handle, scCall, param, fixedText, funcCode, dataMap);
						}
						/* ++++++++++ v5.00.09 追加終了 ++++++++++ */
						// 実行したサービス契約内訳番号
						processedSvcKeiUcwkNoList.add(svcKeiUcwkNo);
					}
					// *************** 返品処理 *******************
					/* ++++++++++ v5.00.07 修正開始 ++++++++++ */
					// 宅内機器異動区分：０２（交換）から０３（撤去）の場合は返品登録済のため、返品処理は不要
//					if (!TAKNKIKI_IDO_CD_CHG.equals(oldTaknkikiIdo))
//					{
//						// 返品処理
//						henpin(handle, scCall, param, fixedText, funcCode, dataMap);
//					}
					// 返品処理 交換,移動から一部撤去の場合は返品取消が確定しないときは処理しない。
					/* ++++++++++ v5.00.23 修正開始 ++++++++++ */
//					if (FUNC_CODE_1.equals(funcCode) || !(TAKNKIKI_IDO_CD_CHG.equals(oldTaknkikiIdo) || TAKNKIKI_IDO_CD_MOV.equals(oldTaknkikiIdo)))
					if (FUNC_CODE_1.equals(funcCode) || !(TAKNKIKI_IDO_CD_CHG.equals(oldTaknkikiIdo) || TAKNKIKI_IDO_CD_MOV.equals(oldTaknkikiIdo) || TAKNKIKI_IDO_CD_RMV.equals(oldTaknkikiIdo) ))
					/* ++++++++++ v5.00.23 修正終了 ++++++++++ */
					{
						henpin(handle, scCall, param, fixedText, funcCode, dataMap);
					}
					/* ++++++++++ v5.00.07 修正終了 ++++++++++ */
				}
				// *********** STB追加（変更後）***********
				//   "" → 追加
				else if (TAKNKIKI_IDO_CD_ADD.equals(newTaknkikiIdo))
				{
					/* ++++++++++ v5.00.21 修正開始 ++++++++++ */
					// 変更が発生していない場合、かつ配送済みの場合は処理しない。
					if (TAKNKIKI_IDO_CD_ADD.equals(oldTaknkikiIdo) && HAISO_SAKSEI_ZUMI_FLG_MI.equals(haisou_zumi))
					{
					/* ++++++++++ v5.00.21 修正終了 ++++++++++ */
						// *** 機器の登録情報キャンセル
						/* ++++++++++ v5.00.00 修正開始 ++++++++++ */
						/* ++++++++++ v5.00.17 修正開始 ++++++++++ */
//						chgKikiAddinfo(handle, scCall, param, fixedText, funcCode, dataMap);
						boolean kktkSvcout = false;
						for (HashMap<String, Object> kojiInfo : kktkSvcOutList)
						{
							// 工事案件へ連携する機器提供サービス契約の宅内機器異動コード「null」にし、機器の工事をなしにする。
							if (kojiInfo.get("kktk_svc_kei_no").equals(dataMap.get("kktk_svc_kei_no")))
							{
								kojiInfo.put("taknkiki_ido_cd",   "");
								/* ++++++++++ v7.00.07 修正開始 ++++++++++ */
								kojiInfo.put("taknkiki_ido_cd_j", TAKNKIKI_IDO_CD_RMV);
								/* ++++++++++ v7.00.07 修正終了 ++++++++++ */
								kktkSvcout = true;
								break;
							}
						}
						//工事連携データが未設定の場合
						if(!kktkSvcout)
						{
							// 工事連携用STB情報設定(機器変更番号設定)
							CAANMsg ekk0341curMsg = findByCurrentKK0341(handle, scCall, param, fixedText, (String) dataMap.get("kktk_svc_kei_no"));
							setKktkSvcKeiMap(kktkSvcOutList, ekk0341curMsg, dataMap, "");
						}
						/* ++++++++++ v5.00.17 修正終了 ++++++++++ */
						/* ++++++++++ v5.00.00 修正終了 ++++++++++ */
						doAddKikiCancel(handle, scCall, param, fixedText, processedSvcKeiUcwkNoList, svcKeiUcwkNo, dataMap);
					}
					/* ++++++++++ v5.00.21 追加開始 ++++++++++ */
					else if (TAKNKIKI_IDO_CD_ADD.equals(oldTaknkikiIdo) && !HAISO_SAKSEI_ZUMI_FLG_MI.equals(haisou_zumi) && KKTK_SVC_C009.equals(kktkSvcCd))
					{
						//配送作成済みの場合は新規作成はされないので、サービス契約内訳のみを変更する(STBの場合に処理する)
						chgKikiAddinfo(handle, scCall, param, fixedText, funcCode, dataMap);
					}
					/* ++++++++++ v5.00.21 追加終了 ++++++++++ */
					
				}
				// *************** STB交換（変更後) *********************
				//   交換     → 交換
				//   一部撤去 → 交換
				//   移動     → 交換
				//    ""      → 交換
				else if (TAKNKIKI_IDO_CD_CHG.equals(newTaknkikiIdo))
				{
					/* ++++++++++ v20.00.00 DEL START ++++++++++ */
//					/* ++++++++++ v7.00.08 追加開始 ++++++++++ */
//					if(KKTK_SVC_C010.equals(kktkSvcCd) && KOJIAK_JUHEN_JUHEN.equals(kojiakJuhen))
//					{
//						for (HashMap<String, Object> kojiInfo : kktkSvcOutList)
//						{
//							// 住所変更時のBCASは移動
//							if (kojiInfo.get("kktk_svc_kei_no").equals(dataMap.get("kktk_svc_kei_no")))
//							{
//								kojiInfo.put("taknkiki_ido_cd",   TAKNKIKI_IDO_CD_MOV);
//								kojiInfo.put("taknkiki_ido_cd_j", TAKNKIKI_IDO_CD_MOV);
//								break;
//							}
//						}
//					}
//					/* ++++++++++ v7.00.08 追加終了 ++++++++++ */
					/* ++++++++++ v20.00.00 DEL END   ++++++++++ */
					if (TAKNKIKI_IDO_CD_CHG.equals(oldTaknkikiIdo))
					{
						// 交換の予約取消
						// ** 機器提供サービス契約予約取消 ***
						// 宅内機器異動コード：０２においてはＢＣＡＳの機器は機種変更されないため対象外。
						/* ++++++++++ v7.00.08 修正開始 ++++++++++ */
//						if (!(KKTK_SVC_C010.equals(kktkSvcCd) && KOJIAK_JUHEN_NON.equals(kojiakJuhen)))
						if (!KKTK_SVC_C010.equals(kktkSvcCd))
						/* ++++++++++ v7.00.08 修正終了 ++++++++++ */
						{
							geneAddDtm = reserveKikiCancel(handle, scCall, param, fixedText, funcCode, dataMap);
						/* ++++++++++ v20.00.00 ADD START ++++++++++ */
						}
						else if(KKTK_SVC_C010.equals(kktkSvcCd) && KOJIAK_JUHEN_JUHEN.equals(kojiakJuhen))
						{
							// 住所変更時はB-CASも交換となっているため、交換取消を実施
							// 案件対応前データを考慮し、ステータスが交換中であることをチェックしておく
							if(KKTK_SVC_KEI_STAT_110.equals(kktkSvcKeiStat))
							{
								// 機器交換中の場合
								geneAddDtm = reserveKikiCancel(handle, scCall, param, fixedText, funcCode, dataMap);
							}
						/* ++++++++++ v20.00.00 ADD END   ++++++++++ */
						}
						
						// **** 返品取消 ****
						// 返品機器一覧照会（機器提供サービス契約番号）
						henpinCancel(handle, scCall, param, fixedText, dataMap);
						
						/* ++++++++++ v20.00.00 ADD START ++++++++++ */
						// STBの場合に行う
						if (KKTK_SVC_C009.equals(kktkSvcCd))
						{
							// ** 機器提供サービス契約予約取消 ***
// OM-2020-0000110 MOD START
//							String tmpAddDtm = canIdoIdoRsv(handle, scCall, param, fixedText, funcCode, dataMap);
							String tmpAddDtm = canIdoIdoRsv(handle, scCall, param, fixedText, funcCode, dataMap, mskmDtlNoKeyFlg);
// OM-2020-0000110 MOD END
							if(!"".equals(tmpAddDtm))
							{
								geneAddDtm = tmpAddDtm;
							}
						}
						/* ++++++++++ v20.00.00 ADD END   ++++++++++ */
					}
					else if (TAKNKIKI_IDO_CD_MOV.equals(oldTaknkikiIdo))
					{
						// 交換の予約取消
						// ** 機器提供サービス契約予約取消 ***
						//サービス契約内訳で検索なのでSTBの場合に行い、BCAS,CCASの場合はスキップする。
						/* ++++++++++ v5.00.04 追加開始 ++++++++++ */
						if (KKTK_SVC_C009.equals(kktkSvcCd))
						{
// OM-2020-0000110 MOD START
//							String tmpAddDtm = canIdoIdoRsv(handle, scCall, param, fixedText, funcCode, dataMap);
							String tmpAddDtm = canIdoIdoRsv(handle, scCall, param, fixedText, funcCode, dataMap, mskmDtlNoKeyFlg);
// OM-2020-0000110 MOD END
							if(!"".equals(tmpAddDtm))
							{
								geneAddDtm = tmpAddDtm;
							}
							/* ++++++++++ v5.00.04 追加終了 ++++++++++ */
						}
					}
					
					// *** 変更前が「一部撤去」の場合 ***
					//  解約の予約又は解約済みの回復を行う。
					else if (TAKNKIKI_IDO_CD_RMV.equals(oldTaknkikiIdo))
					{
						
						// 回復用の一時領域データの作成
						HashMap<String, Object> tmpMap = new HashMap<String, Object>();
						tmpMap.put("KKTK_SVC_KEI_STAT", kktkSvcKeiStat);
						tmpMap.put("KKTK_GENE_ADD_DTM", geneAddDtm);
						tmpMap.put("SVC_KEI_UCWK_NO",   svcKeiUcwkNo);
						tmpMap.put("UCWK_GENE_ADD_DTM", svcUcwkgeneAddDtm);
						
						HashMap<String, Object> mp = dslCancel(handle, scCall, param, fixedText, dataMap, tmpMap, processedSvcKeiUcwkNoList);
						addProcessList(param, fixedText, KAIHK_SVC_UCWK_LIST, mp);
						
						geneAddDtm = (String) tmpMap.get("KKTK_GENE_ADD_DTM");
						svcUcwkgeneAddDtm = (String) tmpMap.get("UCWK_GENE_ADD_DTM");
						
						// 機能コードが１の場合のみ呼び出す
						if (FUNC_CODE_1.equals(funcCode))
						{
							// ***** EKK0341A010（機器提供サービス契約一意照会）*****
							CAANMsg ekk0341pkMsg = findByPkKK0341(handle, scCall, param, fixedText, (String)dataMap.get("kktk_svc_kei_no"), geneAddDtm);
							addProcessList(param, fixedText, KAIHK_KIKI_LIST, setKktkSvc(ekk0341pkMsg));
						}
						
						// 機器変更ＣＣにて返品受付を行う為、ここで返品取消を行う。
						// **** 返品取消 ****
						henpinCancel(handle, scCall, param, fixedText, dataMap);
					}
				}
				// *************** STB交換（移動) *********************
				//   移動     → 移動
				//   交換     → 移動
				//   一部撤去 → 移動
				//   "" → 移動
				else if (TAKNKIKI_IDO_CD_MOV.equals(newTaknkikiIdo))
				{
					// *** 移動から移動の場合は処理不要
					if (TAKNKIKI_IDO_CD_MOV.equals(oldTaknkikiIdo))
					{
						continue;
					}
					// *** 交換から移動の場合は機器の予約取消を行う。
					else if (TAKNKIKI_IDO_CD_CHG.equals(oldTaknkikiIdo))
					{
						// ** 機器提供サービス契約予約取消 ***
						// 宅内機器異動コード：０２においては住所変更以外のＢＣＡＳの機器は機種変更されないため対象外。
						/* ++++++++++ v7.00.08 修正開始 ++++++++++ */
						// 住所変更時のBCASは移動になっているので対象外
//						if (!(KKTK_SVC_C010.equals(kktkSvcCd) && KOJIAK_JUHEN_NON.equals(kojiakJuhen)))
						if (!KKTK_SVC_C010.equals(kktkSvcCd))
						/* ++++++++++ v7.00.08 修正終了 ++++++++++ */
						{
							geneAddDtm = reserveKikiCancel(handle, scCall, param, fixedText, funcCode, dataMap);
							
						/* ++++++++++ v20.00.00 ADD START ++++++++++ */
						}
						else if(KKTK_SVC_C010.equals(kktkSvcCd) && KOJIAK_JUHEN_JUHEN.equals(kojiakJuhen))
						{
							// 住所変更時はB-CASも交換となっているため、交換取消を実施
							// 案件対応前データを考慮し、ステータスが交換中であることをチェックしておく
							if(KKTK_SVC_KEI_STAT_110.equals(kktkSvcKeiStat))
							{
								// 機器交換中の場合
								geneAddDtm = reserveKikiCancel(handle, scCall, param, fixedText, funcCode, dataMap);
							}
						/* ++++++++++ v20.00.00 ADD END   ++++++++++ */
							
						}
						/* ++++++++++ v5.00.16 追加開始 ++++++++++ */
						// **** 返品取消 ****
						// 返品機器一覧照会（機器提供サービス契約番号）
						henpinCancel(handle, scCall, param, fixedText, dataMap);
						/* ++++++++++ v5.00.16 追加終了 ++++++++++ */
					}
					// *** 変更前が「一部撤去」の場合 ***
					//  解約の予約又は解約済みの回復を行う。
					else if (TAKNKIKI_IDO_CD_RMV.equals(oldTaknkikiIdo))
					{
						
						// 回復用の一時領域データの作成
						HashMap<String, Object> tmpMap = new HashMap<String, Object>();
						tmpMap.put("KKTK_SVC_KEI_STAT", kktkSvcKeiStat);
						tmpMap.put("KKTK_GENE_ADD_DTM", geneAddDtm);
						tmpMap.put("SVC_KEI_UCWK_NO",   svcKeiUcwkNo);
						tmpMap.put("UCWK_GENE_ADD_DTM", svcUcwkgeneAddDtm);
						
						HashMap<String, Object> mp = dslCancel(handle, scCall, param, fixedText, dataMap, tmpMap, processedSvcKeiUcwkNoList);
						addProcessList(param, fixedText, KAIHK_SVC_UCWK_LIST, mp);
						
						geneAddDtm = (String) tmpMap.get("KKTK_GENE_ADD_DTM");
						svcUcwkgeneAddDtm = (String) tmpMap.get("UCWK_GENE_ADD_DTM");
	
						// 機能コードが１の場合のみ呼び出す
						if (FUNC_CODE_1.equals(funcCode))
						{
							// ***** EKK0341A010（機器提供サービス契約一意照会）*****
							CAANMsg ekk0341pkMsg = findByPkKK0341(handle, scCall, param, fixedText, (String)dataMap.get("kktk_svc_kei_no"), geneAddDtm);
							addProcessList(param, fixedText, KAIHK_KIKI_LIST, setKktkSvc(ekk0341pkMsg));
						}
						
						// **** 返品取消 ****
						henpinCancel(handle, scCall, param, fixedText, dataMap);
					}
					if (KKTK_SVC_C009.equals(kktkSvcCd))
					{
						moveTkniKiki(handle, scCall, param, fixedText, funcCode, dataMap, inMap, true);
					}
					else
					{
						moveTkniKiki(handle, scCall, param, fixedText, funcCode, dataMap, inMap, false);
					}

					/* ++++++++++ v5.00.15 追加開始 ++++++++++ */
					// STB情報設定(機器変更番号設定)
					CAANMsg ekk0341curMsg = findByCurrentKK0341(handle, scCall, param, fixedText, (String) dataMap.get("kktk_svc_kei_no"));
					setKktkSvcKeiMap(kktkSvcOutList, ekk0341curMsg, dataMap, TAKNKIKI_IDO_CD_MOV);
					/* ++++++++++ v5.00.15 追加終了 ++++++++++ */
				}
				// *************** STB交換（異動なし) *********************
				//   追加     → ""
				//   交換     → ""
				//   移動     → ""
				//   一部撤去 → ""
				//    ""      → ""
				else
				{
					// 交換から異動なし
					if (TAKNKIKI_IDO_CD_CHG.equals(oldTaknkikiIdo))
					{
						// 交換の予約取消
						// ** 機器提供サービス契約予約取消 ***
						// 宅内機器異動コード：０２においては住所変更以外のＢＣＡＳの機器は機種変更されないため対象外。
						/* ++++++++++ v7.00.08 修正開始 ++++++++++ */
						// 住所変更時のBCASは移動になっているので対象外
//						if (!(KKTK_SVC_C010.equals(kktkSvcCd) && KOJIAK_JUHEN_NON.equals(kojiakJuhen)))
						if (!KKTK_SVC_C010.equals(kktkSvcCd))
						/* ++++++++++ v7.00.08 修正終了 ++++++++++ */
						{
							geneAddDtm = reserveKikiCancel(handle, scCall, param, fixedText, funcCode, dataMap);
						}
						
						// **** 返品取消 ****
						// 返品機器一覧照会（機器提供サービス契約番号）
						henpinCancel(handle, scCall, param, fixedText, dataMap);
					}
					// 移動から異動なし
					if (TAKNKIKI_IDO_CD_MOV.equals(oldTaknkikiIdo))
					{
						// 移動の予約取消
						// ** 機器提供サービス契約予約取消 ***
						//サービス契約内訳で検索なのでSTBの場合に行い、BCAS,CCASの場合はスキップする。
						/* ++++++++++ v5.00.04 追加開始 ++++++++++ */
						if (KKTK_SVC_C009.equals(kktkSvcCd))
						{
// OM-2020-0000110 MOD START
//							String tmpAddDtm = canIdoIdoRsv(handle, scCall, param, fixedText, funcCode, dataMap);
							String tmpAddDtm = canIdoIdoRsv(handle, scCall, param, fixedText, funcCode, dataMap, mskmDtlNoKeyFlg);
// OM-2020-0000110 MOD END
							if(!"".equals(tmpAddDtm))
							{
								geneAddDtm = tmpAddDtm;
							}
						}
						/* ++++++++++ v5.00.04 追加終了 ++++++++++ */
					}
					// *** 一部撤去から異動なし
					else if (TAKNKIKI_IDO_CD_RMV.equals(oldTaknkikiIdo))
					{
						// 解約の取消
						// 回復用の一時領域データの作成
						HashMap<String, Object> tmpMap = new HashMap<String, Object>();
						tmpMap.put("KKTK_SVC_KEI_STAT", kktkSvcKeiStat);
						tmpMap.put("KKTK_GENE_ADD_DTM", geneAddDtm);
						tmpMap.put("SVC_KEI_UCWK_NO",   svcKeiUcwkNo);
						tmpMap.put("UCWK_GENE_ADD_DTM", svcUcwkgeneAddDtm);
						
						HashMap<String, Object> mp = dslCancel(handle, scCall, param, fixedText, dataMap, tmpMap, processedSvcKeiUcwkNoList);
						addProcessList(param, fixedText, KAIHK_SVC_UCWK_LIST, mp);
	
						geneAddDtm = (String) tmpMap.get("KKTK_GENE_ADD_DTM");
						svcUcwkgeneAddDtm = (String) tmpMap.get("UCWK_GENE_ADD_DTM");
						
						// **** 返品取消 ****
						// 返品機器一覧照会（機器提供サービス契約番号）
						henpinCancel(handle, scCall, param, fixedText, dataMap);
					}
					// *** 追加から異動なし
					else if (TAKNKIKI_IDO_CD_ADD.equals(oldTaknkikiIdo))
					{
						/* ++++++++++ v5.00.17 追加開始 ++++++++++ */
						boolean kktkSvcout = false;
						for (HashMap<String, Object> kojiInfo : kktkSvcOutList)
						{
							// 工事案件へ連携する機器提供サービス契約の宅内機器異動コード「null」にし、機器の工事をなしにする。
							if (kojiInfo.get("kktk_svc_kei_no").equals(dataMap.get("kktk_svc_kei_no")))
							{
								kojiInfo.put("taknkiki_ido_cd",   "");
								/* ++++++++++ v7.00.07 削除開始 ++++++++++ */
//								kojiInfo.put("taknkiki_ido_cd_j", "");
								/* ++++++++++ v7.00.07 削除終了 ++++++++++ */
								kktkSvcout = true;
								break;
							}
						}
						//工事連携データが未設定の場合
						if(!kktkSvcout)
						{
							// 工事連携用STB情報設定(機器変更番号設定)
							CAANMsg ekk0341curMsg = findByCurrentKK0341(handle, scCall, param, fixedText, (String) dataMap.get("kktk_svc_kei_no"));
							setKktkSvcKeiMap(kktkSvcOutList, ekk0341curMsg, dataMap, "");
						}
						/* ++++++++++ v5.00.17 追加終了 ++++++++++ */
						// 追加機器のキャンセル処理
						doAddKikiCancel(handle, scCall, param, fixedText, processedSvcKeiUcwkNoList, svcKeiUcwkNo, dataMap);
					}
					
				}
				// V-ONU、BBR、PLCの場合 
				/* ++++++++++ v4.00.01 修正開始 ++++++++++ */
				/* ++++++++++ v7.00.00 追加開始 ++++++++++ */
				if (KKTK_SVC_C013.equals(kktkSvcCd) || KKTK_SVC_C014.equals(kktkSvcCd) || KKTK_SVC_C015.equals(kktkSvcCd) 
						// ANK-4315-00-00 MOD START
						//|| KKTK_SVC_C012.equals(kktkSvcCd)|| KKTK_SVC_C004.equals(kktkSvcCd)|| KKTK_SVC_C024.equals(kktkSvcCd))
						|| KKTK_SVC_C012.equals(kktkSvcCd) || KKTK_SVC_C004.equals(kktkSvcCd) || KKTK_SVC_C024.equals(kktkSvcCd) || KKTK_SVC_C025.equals(kktkSvcCd))
						// ANK-4315-00-00 MOD END
				{
				/* ++++++++++ v7.00.00 修正終了 ++++++++++ */
					boolean juhen_idoKiki = false;
					/* ++++++++++ v7.00.05 追加開始 ++++++++++ */
					String kkopStatNet = "";
					HashMap<String, Object> kkopMap = null;
					String takinoRouterChanged = (String)inMap.get("takino_router_chged");
					/* ++++++++++ v7.00.05 追加終了 ++++++++++ */
					//移動機器の新旧異動区分
					if(KKTK_SVC_C014.equals(kktkSvcCd))
					{
						newTaknkikiIdo = (String)dataMap.get("newTaknkikiIdoRouter");
						oldTaknkikiIdo = (String)dataMap.get("oldTaknkikiIdoRouter");
					}
					/* ++++++++++ v7.00.00 追加開始 ++++++++++ */
					// ANK-4315-00-00 MOD START
					//else if(KKTK_SVC_C024.equals(kktkSvcCd))
					else if(KKTK_SVC_C024.equals(kktkSvcCd) || KKTK_SVC_C025.equals(kktkSvcCd))
					// ANK-4315-00-00 MOD END
					{
						/* ++++++++++ v7.00.05 修正開始 ++++++++++ */
						kkopMap = new HashMap<String, Object>();
						newTaknkikiIdo = (String)dataMap.get("newTaknkikiIdoTknRouter");
						oldTaknkikiIdo = (String)dataMap.get("oldTaknkikiIdoTknRouter");
						//多機能ルーターの処理を行う前に最新更新日時が変更されていない（多機能ルーターが最初の処理）なら回線の日時を設定
						/* ++++++++++ v7.00.03 修正開始 ++++++++++ */
				        if(workMap.get(KK_COM_SVC_UP_DTM) != null && workMap.get(KK_COM_SVC_UP_DTM).equals((String)inMap.get("last_upd_dtm")) 
				        		&&  inMap.get("last_upd_dtm_kaisen") != null)
				        {
				        	workMap.put(KK_COM_SVC_UP_DTM, inMap.get("last_upd_dtm_kaisen"));
				        }
						/* ++++++++++ v7.00.03 修正終了 ++++++++++ */
						/* ++++++++++ v7.00.02 追加開始 ++++++++++ */
				        if(workMap.get(KK_COM_SVC_UP_DTM_TEKKYO) != null && workMap.get(KK_COM_SVC_UP_DTM_TEKKYO).equals((String)inMap.get("last_upd_dtm_tekkyo")) )
				        {
				        	workMap.put(KK_COM_SVC_UP_DTM_TEKKYO,inMap.get("last_upd_dtm_kaisen_tekkyo"));
				        }
						/* ++++++++++ v7.00.02 追加終了 ++++++++++ */
						ArrayList adrChgDtlList = (ArrayList) jhDtlMsg.get("adrChgDtlList");
						HashMap<String, Object> childMap = null;
						for (int j = 0; j < adrChgDtlList.size(); j++)
						{
							childMap = (HashMap<String, Object>) adrChgDtlList.get(j);
							//種別コード"09"（機器オプション）の場合
							if(ADCHG_DTL_SBT_CD_KKOP.equals(childMap.get("adchg_dtl_sbt_cd")) )
							{
								if(KKOP_SVC_KEI_NO_SELECTED.equals(childMap.get("kkop_svc_kei_no_net_sel")) )
								{
									kkopStatNet = (String) childMap.get("kkop_svc_kei_no_net_stat");
								}
							}
						}
					}
					/* ++++++++++ v7.00.05 修正終了 ++++++++++ */
					/* ++++++++++ v7.00.00 追加終了 ++++++++++ */
					else if(KKTK_SVC_C004.equals(kktkSvcCd))
					{
						newTaknkikiIdo = (String)dataMap.get("newTaknkikiIdoVa");
						oldTaknkikiIdo = (String)dataMap.get("oldTaknkikiIdoVa");
					}
					else if(KKTK_SVC_C015.equals(kktkSvcCd))
					{
						newTaknkikiIdo = (String)dataMap.get("newTaknkikiIdoPlc");
						oldTaknkikiIdo = (String)dataMap.get("oldTaknkikiIdoPlc");
					}
					else
					{
						newTaknkikiIdo = "";
					}
					//住所変更の移動機器は確定しない（設置機器は確定する）
					if(dataMap.get("juhen_idoKiki") != null && JUHEN_IDOKIKI_IDOKIKI.equals((String)dataMap.get("juhen_idoKiki")))
					{
						juhen_idoKiki = true;
						
						/* ++++++++++ v5.00.13 追加開始 ++++++++++ */
						//住所変更の移動機器で解約予約がない場合oldTaknkikiIdoを空にする（解約予約取消を行わない）
						//解約予約有無は工事案件関連チェック処理の共通コンポーネントで設定している値を使用
						HashMap<String, String> idodataMap = (HashMap<String, String>) workMap.get("idokikiKaiyakuYoyakuList");
						/* ++++++++++ v7.00.05 修正開始 ++++++++++ */
						// ANK-4315-00-00 MOD START
						//if(!KKTK_SVC_C024.equals(kktkSvcCd))
						if(!(KKTK_SVC_C024.equals(kktkSvcCd) || KKTK_SVC_C025.equals(kktkSvcCd)))
						// ANK-4315-00-00 MOD END
						{
							
							if(idodataMap != null && !idodataMap.containsKey((String) dataMap.get("kktk_svc_kei_no"))
									&& TAKNKIKI_IDO_CD_RMV.equals(oldTaknkikiIdo))
							{
								oldTaknkikiIdo = "";
							}
							/* ++++++++++ v5.00.13 追加終了 ++++++++++ */
						}
						else
						{
							if(idodataMap != null && !idodataMap.containsKey((String) dataMap.get("kkop_svc_kei_no_net"))
									&& TAKNKIKI_IDO_CD_RMV.equals(oldTaknkikiIdo))
							{
								oldTaknkikiIdo = "";
							}
						}
					}
					/* ++++++++++ v4.00.01 修正終了 ++++++++++ */
					HashMap<String, Object> tmpMap = new HashMap<String, Object>();
					// 機器提供サービス契約一意照会
					tmpMap.put(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT, ekk0341a010pk.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT));
					tmpMap.put(EKK0341A010CBSMsg1List.KIKI_STC_SAKI_PLACE_NO, ekk0341a010pk.getString(EKK0341A010CBSMsg1List.KIKI_STC_SAKI_PLACE_NO));
					tmpMap.put(EKK0341A010CBSMsg1List.KIKI_CHG_NO, ekk0341a010pk.getString(EKK0341A010CBSMsg1List.KIKI_CHG_NO));
					//移動機器でない、または移動機器で移動→一部撤去の場合
					if ( newTaknkikiIdo == null || "".equals(newTaknkikiIdo) ||
							//移動機器は異動区分に変更があった場合のみ処理する
							TAKNKIKI_IDO_CD_RMV.equals(newTaknkikiIdo) && TAKNKIKI_IDO_CD_MOV.equals(oldTaknkikiIdo))
					{
						// ANK-4315-00-00 MOD START
						//if(KKTK_SVC_C024.equals(kktkSvcCd))
						if(KKTK_SVC_C024.equals(kktkSvcCd) || KKTK_SVC_C025.equals(kktkSvcCd))
						// ANK-4315-00-00 MOD END
						{
							if(TAKINO_ROUTER_ARI_CHG.equals(takinoRouterChanged))
							{
								// 機器オプションサービス契約一意照会
								CAANMsg ekk2811a010Msg = execEKK2811A010(handle, scCall, param, fixedText, (String)dataMap.get("kkop_svc_kei_no_net"));
								// 同月解約判別を行い設定する日付を取得します。
								HashMap<String, String> dslSetYmdMap = getDslSetYmdMap(handle, scCall, param, fixedText, ekk2811a010Msg);
								
								// 機器提供サービス契約ステータスが受付、照査済の場合(パターン無)
								// 機器交換中の場合（パターン無）
								if(KKOP_SVC_KEI_NO_STAT_IDO.equals(kkopStatNet))
								{
									
									// 機器オプションサービス契約解約
									kkopMap.put("kkop_svc_kei_no", (String)dataMap.get("kkop_svc_kei_no_net"));
									dataMap.put("svc_kei_stat_jh_new", (String)inMap.get("svc_kei_stat_jh_new"));
									dslRsvKikiOpt(handle, scCall, param, fixedText, funcCode, dataMap, kkopMap);
		
									// 機能コードが１の場合のみ呼び出す
									if (FUNC_CODE_1.equals(funcCode) && (!juhen_idoKiki || juhen_idoKiki
											&& ((String)inMap.get("stdardYmd")).compareTo((String)inMap.get("dsl_ymd_tekkyo")) < 0) )
									{
										// 機器オプションサービス契約解約確定
										String tmpGeneAddDtm = dslFixKikiOpt(handle, scCall, param, fixedText, funcCode, dataMap, kkopMap, dslSetYmdMap);
										if(tmpGeneAddDtm != null &&  !"".equals(tmpGeneAddDtm))
										{
											geneAddDtm = tmpGeneAddDtm;
										}
									}
								}
								else if(KKOP_SVC_KEI_NO_STAT_ADD.equals(kkopStatNet))
								{
									// 機器オプションサービス契約キャンセル
									kkopMap.put("kkop_svc_kei_no", (String)dataMap.get("kkop_svc_kei_no_net"));
									canRsvKikiOpt(handle, scCall, param, fixedText, funcCode, dataMap, kkopMap);
								}
							}
						}
						else
						{
								// 機器提供サービス契約ステータスが受付、照査済の場合
							if (KKTK_SVC_KEI_STAT_010.equals(tmpMap.get("kktk_svc_kei_stat")) 
								|| KKTK_SVC_KEI_STAT_020.equals(tmpMap.get("kktk_svc_kei_stat")))
							{
								// 機器提供サービス契約キャンセル
								geneAddDtm = invokeEKK0341C330(handle, scCall, param, fixedText, funcCode, dataMap);
							}
							else if(KKTK_SVC_KEI_STAT_110.equals(tmpMap.get("kktk_svc_kei_stat")))
							{
								// 機器交換中の場合
								geneAddDtm = reserveKikiCancel(handle, scCall, param, fixedText, funcCode, dataMap);
							}
							/* ++++++++++ v5.00.06 修正開始 ++++++++++ */
							else if(!KOJIAK_SBT_CD_SHUYOUGAE.equals(kojiakSbtCd))
							{
								
								//収容替(交換)の場合機器提供サービス契約解約は行わない
								// 機器提供サービス契約解約
								dslRsvKiki(handle, scCall, param, fixedText, funcCode, dataMap);
	
								// 機能コードが１の場合のみ呼び出す
								/* ++++++++++ v7.00.04 追加開始 ++++++++++ */
								if (FUNC_CODE_1.equals(funcCode) && (!juhen_idoKiki || juhen_idoKiki
										&& ((String)inMap.get("stdardYmd")).compareTo((String)inMap.get("dsl_ymd_tekkyo")) < 0) )
	//							if (FUNC_CODE_1.equals(funcCode) && !juhen_idoKiki)
								/* ++++++++++ v7.00.04 追加開始 ++++++++++ */
								{
									// 機器提供サービス契約解約確定
									String tmpGeneAddDtm = dslFixKiki(handle, scCall, param, fixedText, funcCode, dataMap);
									if(tmpGeneAddDtm != null &&  !"".equals(tmpGeneAddDtm))
									{
										geneAddDtm = tmpGeneAddDtm;
									}
								}
							}
						}
						/* ++++++++++ v7.00.05 修正終了 ++++++++++ */
						if(KOJIAK_SBT_CD_SHUYOUGAE.equals(kojiakSbtCd))
						{
							// 機器変更ＣＣにて返品受付を行う為、ここで返品取消を行う。
							// **** 返品取消 ****
							henpinCancel(handle, scCall, param, fixedText, dataMap);
						}
						/* ++++++++++ v5.00.06 修正終了 ++++++++++ */
						/* ++++++++++ v5.00.07 追加開始 ++++++++++ */
						if("00067".equals(idoDiv) && KKTK_SVC_C012.equals(kktkSvcCd))
						{
							henpin(handle, scCall, param, fixedText, funcCode, dataMap);
						}
						/* ++++++++++ v5.00.07 追加終了 ++++++++++ */

					}
					/* ++++++++++ v5.00.02 追加開始 ++++++++++ */
					else if (TAKNKIKI_IDO_CD_MOV.equals(newTaknkikiIdo) && TAKNKIKI_IDO_CD_RMV.equals(oldTaknkikiIdo))
					{
						/* ++++++++++ v7.00.05 修正開始 ++++++++++ */
						// ANK-4315-00-00 MOD START
						//if(KKTK_SVC_C024.equals(kktkSvcCd) )
						if(KKTK_SVC_C024.equals(kktkSvcCd) || KKTK_SVC_C025.equals(kktkSvcCd))
						// ANK-4315-00-00 MOD END
						{
							if(TAKINO_ROUTER_ARI_CHG.equals(takinoRouterChanged))
							{
								// 機器オプションサービス契約一意照会
								CAANMsg ekk2811a010Msg = execEKK2811A010(handle, scCall, param, fixedText, (String)dataMap.get("kkop_svc_kei_no_net"));
								String kkopSvcKeiStat = getNullToStr(ekk2811a010Msg.getString(EKK2811A010CBSMsg1List.KKOP_SVC_KEI_STAT));
								kkopMap.put("kkop_svc_kei_no", (String)dataMap.get("kkop_svc_kei_no_net"));
								if(KKOP_SVC_KEI_STAT_910.equals(kkopSvcKeiStat))
								{
									if (FUNC_CODE_1.equals(funcCode))
									{
										//機器オプション解約確定のキャンセル処理
										cancelDslFixKikiOpt(handle, scCall, param, fixedText, funcCode, dataMap, kkopMap);
									}
								}

								if (FUNC_CODE_1.equals(funcCode))
								{
									// 機能コードが１の場合のみ呼び出す
									//移動機器で一部撤去→移動の場合
									//機器オプション解約のキャンセル処理
//									cancelDslKikiOpt(handle, scCall, param, fixedText, funcCode, dataMap, kkopMap);

									CAANMsg[] ekk1681b001outList = null;
	
									Object[][] ekk1681b001IN2 = {
										{EKK1681B001CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK1681B001},
										{EKK1681B001CBSMsg.FUNC_CODE,           FUNC_CODE_1},
										{EKK1681B001CBSMsg.KEY_KKOP_SVC_KEI_NO, (String)dataMap.get("kkop_svc_kei_no_net")},
										{EKK1681B001CBSMsg.KEY_IDO_RSV_DTL_CD, IDO_RSV_DTL_CD_KIKI_OPT_KAIYAKU},
										{EKK1681B001CBSMsg.KEY_IDO_RSV_STAT_CD,   IDO_RSV_STAT_CD_03_00},
										};
										ekk1681b001outList = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk1681b001IN2)).getCAANMsgList(EKK1681B001CBSMsg.EKK1681B001CBSMSG1LIST);
										if(ekk1681b001outList != null && ekk1681b001outList.length > 0)
										{
											for(CAANMsg msg:ekk1681b001outList)
											{
												Object[][] ekk1681c010IN = {
														{EKK1681C010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK1681C010},
														{EKK1681C010CBSMsg.FUNC_CODE,           FUNC_CODE_1},
														{EKK1681C010CBSMsg.IDO_RSV_NO,        msg.getString(EKK1681B001CBSMsg1List.IDO_RSV_NO)},
														{EKK1681C010CBSMsg.IDO_RSV_CL_YMD,    inMap.get("stdardYmd")},
														{EKK1681C010CBSMsg.IDO_RSV_STAT_CD,   IDO_RSV_STAT_CD_CANCELED},
														{EKK1681C010CBSMsg.UPD_DTM_BF,        msg.getString(EKK1681B001CBSMsg1List.UPD_DTM)},
														};
												callSC(handle, scCall, param, fixedText, editInMsg(param, ekk1681c010IN));
											}
										}
								}

							}
						}
						else
						{
							// 機能コードが１の場合のみ呼び出す
							if (FUNC_CODE_1.equals(funcCode))
							{
								//移動機器で一部撤去→移動の場合
								/* ++++++++++ v5.00.03 修正開始 ++++++++++ */
								// 回復用の一時領域データの作成
								tmpMap.put("KKTK_SVC_KEI_STAT", kktkSvcKeiStat);
								tmpMap.put("KKTK_GENE_ADD_DTM", geneAddDtm);
								tmpMap.put("SVC_KEI_UCWK_NO",   svcKeiUcwkNo);
								tmpMap.put("UCWK_GENE_ADD_DTM", svcUcwkgeneAddDtm);
								//機器解約のキャンセル処理
								HashMap<String, Object> mp = dslCancel(handle, scCall, param, fixedText, dataMap, tmpMap, processedSvcKeiUcwkNoList);
								addProcessList(param, fixedText, KAIHK_SVC_UCWK_LIST, mp);
								
								geneAddDtm = (String) tmpMap.get("KKTK_GENE_ADD_DTM");
								svcUcwkgeneAddDtm = (String) tmpMap.get("UCWK_GENE_ADD_DTM");
								// ***** EKK0341A010（機器提供サービス契約一意照会）*****
								CAANMsg ekk0341pkMsg = findByPkKK0341(handle, scCall, param, fixedText, (String)dataMap.get("kktk_svc_kei_no"), geneAddDtm);
								addProcessList(param, fixedText, KAIHK_KIKI_LIST, setKktkSvc(ekk0341pkMsg));
	
								geneAddDtm = moveTkniKiki(handle, scCall, param, fixedText, funcCode, dataMap, inMap, false);
								/* ++++++++++ v5.00.03 修正終了 ++++++++++ */
							}
							
							/* ++++++++++ v7.00.01 追加開始 ++++++++++ */
							// **** 返品取消 ****
							henpinCancel(handle, scCall, param, fixedText, dataMap);
							/* ++++++++++ v7.00.01 追加終了 ++++++++++ */
						}
					}
					/* ++++++++++ v5.00.02 追加終了 ++++++++++ */
					/* ++++++++++ v5.00.13 追加開始 ++++++++++ */
					else if (TAKNKIKI_IDO_CD_MOV.equals(newTaknkikiIdo) && "".equals(oldTaknkikiIdo))
					{
						//移動機器で解約予約無し→移動の場合
						// ANK-4315-00-00 MOD START
						//if(KKTK_SVC_C024.equals(kktkSvcCd) )
						if(KKTK_SVC_C024.equals(kktkSvcCd) || KKTK_SVC_C025.equals(kktkSvcCd))
						// ANK-4315-00-00 MOD END
						{
							//処理無
						}
						else
						{
							geneAddDtm = moveTkniKiki(handle, scCall, param, fixedText, funcCode, dataMap, inMap, false);
						}
					}
					/* ++++++++++ v7.00.05 修正終了 ++++++++++ */
					/* ++++++++++ v5.00.13 追加終了 ++++++++++ */
					/* ++++++++++ v5.00.06 追加開始 ++++++++++ */
					else if (KOJIAK_SBT_CD_SHUYOUGAE.equals(kojiakSbtCd) && TAKNKIKI_IDO_CD_RMV.equals(newTaknkikiIdo) && TAKNKIKI_IDO_CD_RMV.equals(oldTaknkikiIdo))
					{
						//収容替(解約)の場合
						// 機器提供サービス契約ステータスが受付、照査済の場合
						if (KKTK_SVC_KEI_STAT_010.equals(tmpMap.get("kktk_svc_kei_stat")) 
							|| KKTK_SVC_KEI_STAT_020.equals(tmpMap.get("kktk_svc_kei_stat")))
						{
							// 機器提供サービス契約キャンセル
							geneAddDtm = invokeEKK0341C330(handle, scCall, param, fixedText, funcCode, dataMap);
						}
						else if(KKTK_SVC_KEI_STAT_110.equals(tmpMap.get("kktk_svc_kei_stat")))
						{
							geneAddDtm = reserveKikiCancel(handle, scCall, param, fixedText, funcCode, dataMap);
						}
					}
					/* ++++++++++ v5.00.06 追加終了 ++++++++++ */
					//多機能ルーターの処理が行われなかった場合更新日付を回線からサービス契約に戻す
					// ANK-4315-00-00 MOD START
					//if(KKTK_SVC_C024.equals(kktkSvcCd))
					if(KKTK_SVC_C024.equals(kktkSvcCd) || KKTK_SVC_C025.equals(kktkSvcCd))
					// ANK-4315-00-00 MOD END
					{
				        if(workMap.get(KK_COM_SVC_UP_DTM) != null && workMap.get(KK_COM_SVC_UP_DTM).equals((String)inMap.get("last_upd_dtm_kaisen")) )
				        {
				        	workMap.put(KK_COM_SVC_UP_DTM,inMap.get("last_upd_dtm"));
				        }
						/* ++++++++++ v7.00.02 追加開始 ++++++++++ */
				        if(workMap.get(KK_COM_SVC_UP_DTM_TEKKYO) != null && workMap.get(KK_COM_SVC_UP_DTM_TEKKYO).equals((String)inMap.get("last_upd_dtm_kaisen_tekkyo")) )
				        {
				        	workMap.put(KK_COM_SVC_UP_DTM_TEKKYO,inMap.get("last_upd_dtm_tekkyo"));
				        }
						/* ++++++++++ v7.00.02 追加終了 ++++++++++ */
					}

					// 機能コードが１の場合のみ呼び出す
					if (FUNC_CODE_1.equals(funcCode))
					{
						// ***** EKK0341A010（機器提供サービス契約一意照会）*****
						dataMap.put("workMap_kktk_svc_kei_stat", tmpMap.get("kktk_svc_kei_stat"));
						if(juhen_idoKiki)
						{
							CAANMsg ekk0341curMsg = findByCurrentKK0341(handle, scCall, param, fixedText, (String) dataMap.get("kktk_svc_kei_no"));
							// V-ONU、BBR、PLC情報設定
							/* ++++++++++ v5.00.15 修正開始 ++++++++++ */
							setKktkSvcKeiMap(kktkSvcOutList, ekk0341curMsg, dataMap, null);
							/* ++++++++++ v5.00.15 修正終了 ++++++++++ */
						}
						else
						{
							CAANMsg kk0341pkMsg = findByPkKK0341(handle, scCall, param, fixedText, (String) dataMap.get("kktk_svc_kei_no"), geneAddDtm);
							// V-ONU、BBR、PLC情報設定
							/* ++++++++++ v5.00.15 修正開始 ++++++++++ */
							setKktkSvcKeiMap(kktkSvcOutList, kk0341pkMsg, dataMap, null);
							/* ++++++++++ v5.00.15 修正終了 ++++++++++ */
						}
					}
				}
			}
		}
		/* ++++++++++ v5.00.14 追加開始 ++++++++++ */
		//機器の処理が終わったので新設側に戻す
		workMap.put(TEKKYO_KIKI, TEKKYO_KIKI_NEW);
		/* ++++++++++ v5.00.14 追加終了 ++++++++++ */
		
		/* ++++++++++ v5.00.05 追加開始 ++++++++++ */
		/* ++++++++++ v5.00.08 修正開始 ++++++++++ */
		// ■サービス契約解約中止,住所変更の場合は撤去側サービス契約番号で処理する
//		if(((KOJIAK_JUHEN_NON.equals(kojiakJuhen) && "002".equals(kojiakSbtCd))
//				|| KOJIAK_JUHEN_JUHEN.equals(kojiakJuhen) && inMap.get("svc_kei_no_jh_tekkyo") != null && !"".equals(inMap.get("svc_kei_no_jh_tekkyo")) )
//			&& (IDO_DIV_VALUE_00032.equals(idoDiv) || IDO_DIV_VALUE_00035.equals(idoDiv) || IDO_DIV_VALUE_00006.equals(idoDiv)))
        if((KOJIAK_JUHEN_NON.equals(kojiakJuhen) 
                    || KOJIAK_JUHEN_JUHEN.equals(kojiakJuhen) && !inMap.get("svc_kei_no").equals(inMap.get("svc_kei_no_jh")) )
                    && KOJIAK_SBT_CD_DSL.equals(kojiakSbtCd)
                    && (IDO_DIV_VALUE_00032.equals(idoDiv) || IDO_DIV_VALUE_00035.equals(idoDiv) || IDO_DIV_VALUE_00006.equals(idoDiv)))
		/* ++++++++++ v5.00.08 修正終了 ++++++++++ */
		/* ++++++++++ v5.00.11 修正開始 ++++++++++ */
		{
			String prc_grp_cd = (String) inMap.get("prc_grp_cd");
			HashMap<String, String> scvKeiNoMap = new HashMap<String, String>();
			ArrayList<String> scvKeiNoList = new ArrayList<String>();
			String svcKeiNo = "";
			if(KOJIAK_JUHEN_NON.equals(kojiakJuhen) )
			{
				svcKeiNo = (String) inMap.get("svc_kei_no");
			}
			else
			{
				svcKeiNo = (String) inMap.get("svc_kei_no_jh_tekkyo");
			}
			//ネットと電話は同時に設定するため同一場所のサービス契約を検索
			if(PRC_GRP_CD_02.equals(prc_grp_cd) || PRC_GRP_CD_03.equals(prc_grp_cd) || PRC_GRP_CD_04.equals(prc_grp_cd) || PRC_GRP_CD_10.equals(prc_grp_cd))
			{
				//同一場所サービス契約情報照会
				Object[][] ekk0081b009IN = {
						{EKK0081B009CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0081B009},
						{EKK0081B009CBSMsg.FUNC_CODE,           FUNC_CODE_1},
						{EKK0081B009CBSMsg.KEY_SVC_KEI_NO, svcKeiNo},
						};
						CAANMsg[] ekk0081b009outList = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0081b009IN)).getCAANMsgList(EKK0081B009CBSMsg.EKK0081B009CBSMSG1LIST);
				if (ekk0081b009outList != null)
				{
					String prcGrpCd = "";
					String svcKeiStat = "";
					for (int i = 0; i < ekk0081b009outList.length; i++)
					{
						CAANMsg childTemplate = ekk0081b009outList[i];
						if (!childTemplate.isNull(EKK0081B009CBSMsg1List.PRC_GRP_CD)) {
							prcGrpCd = childTemplate.getString(EKK0081B009CBSMsg1List.PRC_GRP_CD);
						}
						if (!childTemplate.isNull(EKK0081B009CBSMsg1List.PRC_GRP_CD)) {
							svcKeiStat = childTemplate.getString(EKK0081B009CBSMsg1List.SVC_KEI_STAT);
						}
						
						if(PRC_GRP_CD_02.equals(prcGrpCd) || PRC_GRP_CD_03.equals(prcGrpCd)
								|| PRC_GRP_CD_04.equals(prcGrpCd) || PRC_GRP_CD_10.equals(prcGrpCd))
						{
							if(!KKTK_SVC_KEI_STAT_910.equals(svcKeiStat) && !KKTK_SVC_KEI_STAT_920.equals(svcKeiStat))
							{
								if (!childTemplate.isNull(EKK0081B009CBSMsg1List.SVC_KEI_NO)) {
									
									/* ++++++++++ v5.00.12 修正開始 ++++++++++ */
									Object[][] ekk0081a010IN = {
											{EKK0081A010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0081A010},
											{EKK0081A010CBSMsg.FUNC_CODE,           FUNC_CODE_2},
											{EKK0081A010CBSMsg.KEY_SVC_KEI_NO, childTemplate.getString(EKK0081B009CBSMsg1List.SVC_KEI_NO)},
											{EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, JPCBPCommon.getOpeDate(null)},
											};
											CAANMsg[] ekk0081a010outList = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0081a010IN)).getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
									if(ekk0081a010outList != null && ekk0081a010outList.length > 0){
										CAANMsg childTemplate2 = ekk0081a010outList[0];
										if (!childTemplate2.isNull(EKK0081A010CBSMsg1List.LAST_UPD_DTM)) {
											scvKeiNoMap.put(childTemplate.getString(EKK0081B009CBSMsg1List.SVC_KEI_NO), childTemplate2.getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM));
										}
									}
									/* ++++++++++ v5.00.12 修正終了 ++++++++++ */
									scvKeiNoList.add(childTemplate.getString(EKK0081B009CBSMsg1List.SVC_KEI_NO));
								}
							}
						}
						
					}
				}
			}
			//元々のデータを設定する
			String svcKeiStat = "";
			if(KOJIAK_JUHEN_NON.equals(kojiakJuhen) )
			{
				svcKeiStat = (String)inMap.get("svc_kei_stat");
			}
			else
			{
				svcKeiStat = (String) inMap.get("svc_kei_stat_jh_tekkyo");
			}
			if(!KKTK_SVC_KEI_STAT_910.equals(svcKeiStat) && !KKTK_SVC_KEI_STAT_920.equals(svcKeiStat))
			{
				scvKeiNoList.add(svcKeiNo);
			}
			CAANMsg[] ekk1681b001outList = null;
			for(String scvKeiNo:scvKeiNoList)
			{
				/* ++++++++++ v5.00.18 修正開始 ++++++++++ */
				// ***** EKK1681B001 異動予約一覧照会 *****
//				Object[][] ekk1681b001INck = {
//				{EKK1681B001CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK1681B001},
//				{EKK1681B001CBSMsg.FUNC_CODE,           FUNC_CODE_1},
//				{EKK1681B001CBSMsg.KEY_SVC_KEI_NO, scvKeiNo},
//				{EKK1681B001CBSMsg.KEY_IDO_RSV_DTL_CD, "007"},
//				{EKK1681B001CBSMsg.KEY_IDO_RSV_STAT_CD,   "00,03"},
//				{EKK1681B001CBSMsg.KEY_RSV_APLY_YMD, inMap.get("stdardYmd")},
//				};
//				ekk1681b001outList = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk1681b001INck)).getCAANMsgList(EKK1681B001CBSMsg.EKK1681B001CBSMSG1LIST);
//				if(FUNC_CODE_1.equals(funcCode) && ekk1681b001outList != null && ekk1681b001outList.length > 0)
				if(FUNC_CODE_1.equals(funcCode))
				{
//					String idoDiv2 = ekk1681b001outList[0].getString(EKK1681B001CBSMsg1List.IDO_DIV);
				
//					if(IDO_DIV_VALUE_00006.equals(idoDiv2) || IDO_DIV_VALUE_00032.equals(idoDiv2) || IDO_DIV_VALUE_00035.equals(idoDiv2))
//					{
					// ***** EKK1681B001 異動予約一覧照会 *****
					Object[][] ekk1681b001IN = {
					{EKK1681B001CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK1681B001},
					{EKK1681B001CBSMsg.FUNC_CODE,           FUNC_CODE_1},
					{EKK1681B001CBSMsg.KEY_SVC_KEI_NO, scvKeiNo},
					{EKK1681B001CBSMsg.KEY_IDO_RSV_DTL_CD, "007"},
					{EKK1681B001CBSMsg.KEY_IDO_RSV_STAT_CD,   "00,03"},
					{EKK1681B001CBSMsg.KEY_RSV_APLY_YMD, inMap.get("stdardYmd")},
					};
					ekk1681b001outList = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk1681b001IN)).getCAANMsgList(EKK1681B001CBSMsg.EKK1681B001CBSMSG1LIST);
					/* ++++++++++ v5.00.18 修正終了 ++++++++++ */
					if(ekk1681b001outList != null && ekk1681b001outList.length > 0)
					{
						String updDtm = getWorkAreaUpddtm(param, inMap);
						if(scvKeiNoMap.containsKey(scvKeiNo) && scvKeiNoMap.get(scvKeiNo) != null && !"".equals(scvKeiNoMap.get(scvKeiNo)))
						{
							updDtm = scvKeiNoMap.get(scvKeiNo);
						}
						// ***** EKK0081C190（サービス契約解約中止）*****
						Object[][] ekk0081c190IN = {
								{EKK0081C190CBSMsg.TEMPLATEID,			TEMPLATE_ID_EKK0081C190},
								{EKK0081C190CBSMsg.FUNC_CODE,			funcCode},
								{EKK0081C190CBSMsg.SVC_KEI_NO,			scvKeiNo},
								/* ++++++++++ v5.00.22 追加開始 ++++++++++ */
								{EKK0081C190CBSMsg.IDO_DIV,				idoDiv},
								/* ++++++++++ v5.00.22 追加終了 ++++++++++ */
								{EKK0081C190CBSMsg.UPD_DTM_BF,			updDtm},
						};
						CAANMsg ekk0081c190Out = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0081c190IN));
						if(scvKeiNoMap.containsKey(scvKeiNo) && scvKeiNoMap.get(scvKeiNo) != null && !"".equals(scvKeiNoMap.get(scvKeiNo)))
						{
							//なにもしない
						}
						else
						{
							setSvcUpdDtm(param, ekk0081c190Out.getString(EKK0081C190CBSMsg.UPD_DTM), fixedText);
						}
					}
//					}
					/* ++++++++++ v5.00.18 追加開始 ++++++++++ */
					// ***** EKK1681B001 異動予約一覧照会 *****
					Object[][] ekk1681b001IN2 = {
					{EKK1681B001CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK1681B001},
					{EKK1681B001CBSMsg.FUNC_CODE,           FUNC_CODE_1},
					{EKK1681B001CBSMsg.KEY_SVC_KEI_NO, scvKeiNo},
					{EKK1681B001CBSMsg.KEY_IDO_RSV_DTL_CD, "007"},
					{EKK1681B001CBSMsg.KEY_IDO_RSV_STAT_CD,   "00,03"},
					};
					ekk1681b001outList = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk1681b001IN2)).getCAANMsgList(EKK1681B001CBSMsg.EKK1681B001CBSMSG1LIST);
					if(ekk1681b001outList != null && ekk1681b001outList.length > 0)
					{
						for(CAANMsg msg:ekk1681b001outList)
						{
							Object[][] ekk1681c010IN = {
									{EKK1681C010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK1681C010},
									{EKK1681C010CBSMsg.FUNC_CODE,           FUNC_CODE_1},
									{EKK1681C010CBSMsg.IDO_RSV_NO,        msg.getString(EKK1681B001CBSMsg1List.IDO_RSV_NO)},
									{EKK1681C010CBSMsg.IDO_RSV_CL_YMD,    inMap.get("stdardYmd")},
									{EKK1681C010CBSMsg.IDO_RSV_STAT_CD,   IDO_RSV_STAT_CD_CANCELED},
									{EKK1681C010CBSMsg.UPD_DTM_BF,        msg.getString(EKK1681B001CBSMsg1List.UPD_DTM)},
									};
							callSC(handle, scCall, param, fixedText, editInMsg(param, ekk1681c010IN));
						}
					}
					/* ++++++++++ v5.00.18 追加終了 ++++++++++ */
				}
			}
			
			if( FUNC_CODE_1.equals(funcCode) && scvKeiNoList != null && scvKeiNoList.size() > 0 )
			{
				//解約CC呼出
				JKKDslRunCC jkkdslruncc = new JKKDslRunCC();
				HashMap<String, Object> dslMap = (HashMap<String, Object>)param.getData("DslRunCC");
				//サービス契約解約中止を行った場合解約CCの異動区分を撤去解約にする
//				if(ekk1681b001outList != null && ekk1681b001outList.length > 0)
//				{
					dslMap.put("ido_div", "00006");
//				}
				jkkdslruncc.runDsl(handle, param, "DslRunCC");
				//異動区分を戻しておく
				dslMap.put("ido_div", idoDiv);
			}
		}
		/* ++++++++++ v5.00.11 修正終了 ++++++++++ */
		/* ++++++++++ v5.00.05 追加終了 ++++++++++ */
		/* ++++++++++ v5.00.19 追加開始 ++++++++++ */
        //更新日時の変更が行われなかった場合ワークの値を再設定する

        if(FUNC_CODE_1.equals(funcCode) && workMap.get(KK_COM_SVC_UP_DTM) != null && workMap.get(KK_COM_SVC_UP_DTM).equals((String)inMap.get("last_upd_dtm")) )
        {
    		// データ情報
        	boolean addDataAri = false;
       		HashMap<String, Object> KikiInfoUpdMap = (HashMap<String, Object>)param.getData("KikiInfoUpdMap");
       		if (KikiInfoUpdMap != null)
    		{
          		ArrayList<HashMap<String, Object>> chgdataList = (ArrayList<HashMap<String, Object>>)KikiInfoUpdMap.get("chg_kiki_list");
           		if(chgdataList != null && chgdataList.size() > 0)
          		{
          			if(KikiInfoUpdMap.get("upd_dtm") != null && !"".equals(KikiInfoUpdMap.get("upd_dtm")))
          			{
          				workMap.put(KK_COM_SVC_UP_DTM, KikiInfoUpdMap.get("upd_dtm"));
          				addDataAri = true;
          			}
          		}
       		}
       		HashMap<String, Object> KikiInfoAddMap = (HashMap<String, Object>)param.getData("KikiInfoAddMap");
    		if (!addDataAri && KikiInfoAddMap != null)
    		{
           		ArrayList<HashMap<String, Object>> adddataList = (ArrayList<HashMap<String, Object>>)KikiInfoAddMap.get("kiki_list");
         		if(adddataList != null && adddataList.size() > 0)
          		{
          			if(KikiInfoAddMap.get("upd_dtm_svc_kei") != null && !"".equals(KikiInfoAddMap.get("upd_dtm_svc_kei")))
          			{
          				workMap.put(KK_COM_SVC_UP_DTM, KikiInfoAddMap.get("upd_dtm_svc_kei"));
          			}
          		}
       		}
        }
		/* ++++++++++ v5.00.19 追加終了 ++++++++++ */
		return param;
	}

	/**
	 * チェック処理<br>
	 * サービスコンポーネント実行用CAANMsgを返却します。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Throwableがスローされます 。
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		HashMap<String, Object> inMap = (HashMap)param.getData(fixedText);
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// エラーチェック用のHashMapを作成
		ArrayList<CAANMsg> templateList = new ArrayList<CAANMsg>();
		
		// 機能コード取得
		String funcCode = (String)inMap.get("func_code");
		
		ArrayList<HashMap<String, Object>> dataList = (ArrayList<HashMap<String, Object>>)inMap.get("kktkSvcList");
		for (int i = 0; i < dataList.size(); i++)
		{
			HashMap<String, Object> dataMap = (HashMap<String, Object>)dataList.get(i);
			templateList.add(((CAANMsg[])editInMsgEKK0341C340(param, dataMap, funcCode).get(JCMConstants.TEMPLATE_LIST_KEY))[0]);
			templateList.add(((CAANMsg[])editInMsgEKK0161C180(param, dataMap, funcCode).get(JCMConstants.TEMPLATE_LIST_KEY))[0]);
			templateList.add(((CAANMsg[])editInMsgEKK0341C330(param, dataMap, funcCode).get(JCMConstants.TEMPLATE_LIST_KEY))[0]);
			templateList.add(((CAANMsg[])editInMsgEKK0341C170(param, dataMap, funcCode).get(JCMConstants.TEMPLATE_LIST_KEY))[0]);
			templateList.add(((CAANMsg[])editInMsgEKK0161C160(param, dataMap, funcCode).get(JCMConstants.TEMPLATE_LIST_KEY))[0]);
			templateList.add(((CAANMsg[])editInMsgEKK0341C380(param, dataMap, funcCode).get(JCMConstants.TEMPLATE_LIST_KEY))[0]);
			templateList.add(((CAANMsg[])editInMsgEKK0161C210(param, dataMap, funcCode).get(JCMConstants.TEMPLATE_LIST_KEY))[0]);
		}
		
		// リストに追加されたCAANMsgを配列に変換する
		int templateSize = templateList.size();
		if (templateSize > 1)
		{
			CAANMsg[] templates = new CAANMsg[templateSize];
			for (int i = 0; i < templateSize; i++)
			{
				templates[i] = (CAANMsg)templateList.get(i);
			}
			paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		}
		else
		{
			CAANMsg[] templates = new CAANMsg[1];
			templates[0] = (CAANMsg)templateList.get(0);
			paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		}
		return paramMap;
	}

	/**
	 * サービスインターフェイス処理結果(エラー情報)の取得<br>
	 * 業務データ取得・書込用I/Fをそのまま返却します。<br>
	 * <br>
	 * @param param デルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param templates CAANMsgクラス配列
	 * @param returnCode リターンコード
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText) throws Throwable
	{
		for (CAANMsg template : templates)
		{
			CAANMsg[] workTemplates = {template};
			editErrorInfoCom(param, workTemplates, returnCode, fixedText);
		}
		return param;
	}

	/**
	 * サービス契約の更新タイムスタンプを格納します。
	 * @param param リクエストパラメータ
	 * @param inMap
	 * @throws Exception 
	 */
	private void setInitSvcUpdate(IRequestParameterReadWrite param, Map<String, Object> inMap) throws Exception
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
	/* ++++++++++ v5.00.02 修正開始 ++++++++++ */
		String svcKeiNo = (String)inMap.get("svc_kei_no");
		String svcKeiNoJh = (String)inMap.get("svc_kei_no_jh");
		String juhenShori = (String)inMap.get("juhen_shori");

		if(JH_INIT_SVCKEINO_NEW.equals(inMap.get("jh_init_svckeino_new")) && JUHEN_SHORI_ST.equals(juhenShori)
				&& svcKeiNo != null && !svcKeiNo.equals(svcKeiNoJh))
		{
			//住所変更用
			if (workMap.get(KK_COM_SVC_UP_DTM_JH) != null && !"".equals(workMap.get(KK_COM_SVC_UP_DTM_JH)))
			{
			}
//			else if (workMap.get("work_mskm_upd_dtm") != null && !"".equals(workMap.get("work_mskm_upd_dtm")))
//			{
//				workMap.put(KK_COM_SVC_UP_DTM_JH, (String)workMap.get("work_mskm_upd_dtm"));
//			}
			else
			{
				workMap.put(KK_COM_SVC_UP_DTM_JH, (String)inMap.get("last_upd_dtm"));
			}
		}
		else
		{
			if (workMap.get(KK_COM_SVC_UP_DTM) != null && !"".equals(workMap.get(KK_COM_SVC_UP_DTM)))
			{
			}
//			else if (workMap.get("work_mskm_upd_dtm") != null && !"".equals(workMap.get("work_mskm_upd_dtm"))
//					&& "1".equals(inMap.get("jh_init_svckeino_new")) || !"2".equals(juhenShori) )
//			{
//				workMap.put(KK_COM_SVC_UP_DTM, (String)workMap.get("work_mskm_upd_dtm"));
//			}
			else
			{
				workMap.put(KK_COM_SVC_UP_DTM, (String)inMap.get("last_upd_dtm"));
			}
	/* ++++++++++ v5.00.02 修正終了 ++++++++++ */
		}
		workMap.put(KK_COM_SVC_UP_DTM_TEKKYO, (String)inMap.get("last_upd_dtm_tekkyo"));
	}

	/**
	 * サービス契約の更新タイムスタンプを取得します。
	 * @param param リクエストパラメータ
	 * @return String
	 * @throws RequestParameterException 
	 */
	private String getWorkArea(IRequestParameterReadWrite param, String key) throws RequestParameterException
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		return (String)workMap.get(key);
	}
	/**
	 * サービス契約の更新タイムスタンプを取得します。
	 * @param param リクエストパラメータ
	 * @return String
	 * @throws RequestParameterException 
	 */
	private String getWorkAreaUpddtm(IRequestParameterReadWrite param, Map<String, Object> inMap) throws RequestParameterException
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		/* ++++++++++ v5.00.02 修正開始 ++++++++++ */
		String svcKeiNo = (String)inMap.get("svc_kei_no");
		String svcKeiNoJh = (String)inMap.get("svc_kei_no_jh");
		String juhenShori = (String)inMap.get("juhen_shori");

		/* ++++++++++ v5.00.14 修正開始 ++++++++++ */
		String tekkyoKiki = (String)workMap.get(TEKKYO_KIKI);

		if(TEKKYO_KIKI_TEKKYO.equals(tekkyoKiki))
		{
			return (String)workMap.get(KK_COM_SVC_UP_DTM_TEKKYO);
		}
		else
		{
			if(!JH_INIT_SVCKEINO_NEW.equals(inMap.get("jh_init_svckeino_new")) && JUHEN_SHORI_ST.equals(juhenShori)
					&& svcKeiNo != null && !svcKeiNo.equals(svcKeiNoJh))
			{
				return (String)workMap.get(KK_COM_SVC_UP_DTM_JH);
			}
			else
			{
				return (String)workMap.get(KK_COM_SVC_UP_DTM);
			}
			/* ++++++++++ v5.00.02 修正終了 ++++++++++ */
		}
		/* ++++++++++ v5.00.14 修正終了 ++++++++++ */
	}

	/**
	 * サービス契約の更新タイムスタンプを取得します。
	 * @param param リクエストパラメータ
	 * @param updDtm 更新年月日時分秒
	 * @throws RequestParameterException 
	 */
	@SuppressWarnings("unchecked")
	private void setSvcUpdDtm(IRequestParameterReadWrite param, String updDtm, String fixedText) throws RequestParameterException
	{
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		// 作業領域に設定
		Map<Object, Object> workMap = param.getMappingWorkArea();
	/* ++++++++++ v5.00.02 修正開始 ++++++++++ */
		String svcKeiNo = (String)inMap.get("svc_kei_no");
		String svcKeiNoJh = (String)inMap.get("svc_kei_no_jh");
		String juhenShori = (String)inMap.get("juhen_shori");
		String tekkyoKiki = (String)workMap.get(TEKKYO_KIKI);

		/* ++++++++++ v5.00.14 修正開始 ++++++++++ */
		if(TEKKYO_KIKI_TEKKYO.equals(tekkyoKiki))
		{
			if(updDtm != null && !"".equals(updDtm))
			{
				workMap.put(KK_COM_SVC_UP_DTM_TEKKYO, updDtm);
			}
		}
		//一部撤去から移動のばあいのみなので撤去のみはない
		if(!JH_INIT_SVCKEINO_NEW.equals(inMap.get("jh_init_svckeino_new")) && JUHEN_SHORI_ST.equals(juhenShori)
				&& svcKeiNo != null && !svcKeiNo.equals(svcKeiNoJh))
		{
			if(updDtm != null && !"".equals(updDtm))
			{
				workMap.put(KK_COM_SVC_UP_DTM_JH, updDtm);
			}
		}
		else
		{
			if(updDtm != null && !"".equals(updDtm))
			{
				workMap.put(KK_COM_SVC_UP_DTM, updDtm);
			}
			/* ++++++++++ v5.00.14 修正終了 ++++++++++ */
	/* ++++++++++ v5.00.02 修正終了 ++++++++++ */
		}

	}

	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param mappingData
	 * @return CAANMsg
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String dataMapKey,
							HashMap<String, Object> paramMap) throws Exception
	{
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// リターンコード取得
		Object return_code = result.get(JCMConstants.RET_CD_INT_KEY);
		Integer status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		editErrorInfoCom(param, templates, (Integer)return_code, dataMapKey);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));
		
		//■水平展開【IT1-2013-0001200】 START=========================================================================
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(return_code.toString()) && 0 == status))
		{
			// 警告の場合、例外をスローしない
			if(!("0".equals(return_code.toString()) && 4 == status))
			{
				throw new SCCallException("戻り値不正", return_code.toString(), status);
			}
		}
		//■水平展開 END==========================================================================
		// 異常の場合、SCCallExceptionを生成してスローする
//		if (!("0".equals(return_code.toString()) && 0 == status))
//		{
//			throw new SCCallException("戻り値不正", return_code.toString(), status);
//		}
		return msg;
	}

	/**
	 * @param param
	 * @param mappingData
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param,
												Object[][] mappingData) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
		
		// 【取得元：ユーザエリア(コントロールマップ)】
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		String svcIf = (String)mappingData[0][1];
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));
		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			if ("".equals(mappingData[i][1]))
			{
				template.setNull((String)mappingData[i][0]);
			}
			else
			{
				template.set((String)mappingData[i][0], mappingData[i][1]);
			}
		}
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		return paramMap;
	}

	/**
	 * 
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @param dataMapKey
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param,
														CAANMsg[] templates, 
														int returnCode,
														String dataMapKey) throws RequestParameterException
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(ECK0011B002CBSMsg.STATUS);

		if (returnCode != 0)
		{
			templateStatus = 9000;
		}

		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		HashMap<String, String> inMap = null;

		// ユーザデータ情報
		inMap = (HashMap<String, String>)param.getData(dataMapKey);
		
		Iterator<String> it = template.getHashMap().keySet().iterator();
		while (it.hasNext())
		{
			String key = it.next();
			if (key.endsWith("_err"))
			{
				if (!template.isNull(key))
				{
					inMap.put(key, template.getString(key));
				}
			}
		}
		
		return param;
	}

	/**
	 * @param CAANMsg[]
	 * @return HashMap
	 * @throws Exception
	 */
	private HashMap<String, Object> setSvcUcwk(CAANMsg msg) throws Exception
	{
		HashMap<String, Object> outMap = new HashMap<String, Object>();
		// サービス契約内訳番号
		outMap.put("svc_kei_ucwk_no", msg.getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_NO));
		// サービス契約内訳ステータス
		outMap.put("svc_kei_ucwk_stat", msg.getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT));
		// 料金コースコード
		outMap.put("pcrs_cd", msg.getString(EKK0161A010CBSMsg1List.PCRS_CD));
		// 料金プランコード
		outMap.put("pplan_cd", msg.getString(EKK0161A010CBSMsg1List.PPLAN_CD));
		return outMap;
	}

	/**
	 * @param CAANMsg[]
	 * @return HashMap
	 * @throws Exception
	 */
	private HashMap<String, Object> setKktkSvc(CAANMsg msg) throws Exception
	{
		HashMap<String, Object> outMap = new HashMap<String, Object>();
		// 機器提供サービス契約番号
		outMap.put("kktk_svc_kei_no", msg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
		// 機器提供サービス契約ステータス
		outMap.put("kktk_svc_kei_stat", msg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT));
		// 料金コースコード
		outMap.put("pcrs_cd", msg.getString(EKK0341A010CBSMsg1List.PCRS_CD));
		// 料金プランコード
		outMap.put("pplan_cd", msg.getString(EKK0341A010CBSMsg1List.PPLAN_CD));
		// 機器提供サービスコード
		outMap.put("kktk_svc_cd", msg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
		// 機器提供種別コード
		outMap.put("kktk_sbt_cd", msg.getString(EKK0341A010CBSMsg1List.KKTK_SBT_CD));
		return outMap;
	}
	
	/**
	 * 機器提供サービス契約データセットメソッド
	 * <br>
	 * @param list
	 * @param template
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private void setKktkSvcKeiMap(ArrayList<HashMap<String, Object>> list, CAANMsg template, HashMap<String, Object> inMap, String taknkikiIdoCdJ) throws Exception
	{
		HashMap<String, Object> childMap = null;
		boolean flg = false;
		for (int i = 0; i < list.size(); i++)
		{
			childMap = list.get(i);
			if (childMap != null && template.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO).equals(childMap.get("kktk_svc_kei_no")))
			{
				/* ++++++++++ v4.00.02 追加開始 ++++++++++ */			
				// 宅内機器移動コード(住所変更用)
				/* ++++++++++ v5.00.15 修正開始 ++++++++++ */
				if(null == taknkikiIdoCdJ)
				{
					childMap.put("taknkiki_ido_cd_j", inMap.get("taknkiki_ido_cd_j"));
				}
				else
				{
					childMap.put("taknkiki_ido_cd_j", taknkikiIdoCdJ);
				}
				/* ++++++++++ v5.00.15 修正終了 ++++++++++ */
				/* ++++++++++ v4.00.02 追加終了 ++++++++++ */			
				// 機器提供サービス契約番号
				EKK0341A010CBSMsg1List msgConst = new EKK0341A010CBSMsg1List();
				Object[][] msgContent = msgConst.getContents();
				for (Object[] cont : msgContent)
				{
					setDataMap(childMap, template, (String) cont[0]);
				}
				/* ++++++++++ v5.00.01 追加開始 ++++++++++ */
				if (KKTK_SVC_KEI_STAT_010.equals(inMap.get("workMap_kktk_svc_kei_stat")) 
						|| KKTK_SVC_KEI_STAT_020.equals(inMap.get("workMap_kktk_svc_kei_stat")))
				{
					childMap.put("taknkiki_ido_cd", null);
					
				}
				else
				{
					/* ++++++++++ v5.00.15 修正開始 ++++++++++ */
					if(taknkikiIdoCdJ != null)
					{
						childMap.put("taknkiki_ido_cd", taknkikiIdoCdJ);
					}
					else if(inMap.containsKey("taknkiki_ido_cd") && inMap.get("taknkiki_ido_cd") != null)
						/* ++++++++++ v5.00.15 修正終了 ++++++++++ */
					{
						childMap.put("taknkiki_ido_cd", inMap.get("taknkiki_ido_cd"));
					}
					else if(inMap.containsKey("taknkiki_ido_cd_j") && inMap.get("taknkiki_ido_cd_j") != null)
					{
						childMap.put("taknkiki_ido_cd", inMap.get("taknkiki_ido_cd_j"));
					}
					else
					{
						childMap.put("taknkiki_ido_cd", TAKNKIKI_IDO_CD_RMV);
					}
				}
				/* ++++++++++ v5.00.01 追加終了 ++++++++++ */
				flg = true;
				break;
			}
		}
		// 機器提供サービス契約番号が見つからなかった場合
		if (!flg)
		{
			list.add(template.getHashMap());
			/* ++++++++++ v5.00.01 追加開始 ++++++++++ */
			childMap = list.get(list.size()-1);
			childMap.put("taknkiki_ido_cd_j", inMap.get("taknkiki_ido_cd_j"));
			if (KKTK_SVC_KEI_STAT_010.equals(inMap.get("workMap_kktk_svc_kei_stat")) 
					|| KKTK_SVC_KEI_STAT_020.equals(inMap.get("workMap_kktk_svc_kei_stat")))
			{
				childMap.put("taknkiki_ido_cd", null);
				
			}
			else
			{
				/* ++++++++++ v5.00.15 修正開始 ++++++++++ */
				if(taknkikiIdoCdJ != null)
				{
					childMap.put("taknkiki_ido_cd", taknkikiIdoCdJ);
				}
				else if(inMap.containsKey("taknkiki_ido_cd") && inMap.get("taknkiki_ido_cd") != null)
					/* ++++++++++ v5.00.15 修正終了 ++++++++++ */
				{
					childMap.put("taknkiki_ido_cd", inMap.get("taknkiki_ido_cd"));
				}
				else if(inMap.containsKey("taknkiki_ido_cd_j") && inMap.get("taknkiki_ido_cd_j") != null)
				{
					childMap.put("taknkiki_ido_cd", inMap.get("taknkiki_ido_cd_j"));
				}
				else
				{
					childMap.put("taknkiki_ido_cd", TAKNKIKI_IDO_CD_RMV);
				}
			}
			/* ++++++++++ v5.00.01 追加終了 ++++++++++ */
		}
	}
	
	/**
	 * Mapに検索データを格納します。
	 * <br>
	 * @param outDataMap データ格納Map
	 * @param searchMsg CAANMsgクラス
	 * @param mapKey 取得と格納するキー
	 */
	private void setDataMap(Map<String, Object> outDataMap, CAANMsg searchMsg, String mapKey)
	{
		if (searchMsg.isNull(mapKey))
		{
			outDataMap.put(mapKey, "");
		}
		else
		{
			outDataMap.put(mapKey, searchMsg.getString(mapKey));
		}
	}
	
	/**
	 * 機器提供サービス契約料金コース変更中止を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Exception
	 */
	private String reserveKikiCancel(SessionHandle handle, 
									  ServiceComponentRequestInvoker scCall, 
									  IRequestParameterReadWrite param, 
									  String fixedText,
									  String funcCode,
									  HashMap<String, Object> dataMap) throws Exception 
	{
		// ***** EKK0341C170_機器提供サービス契約料金コース変更中止 *****
		CAANMsg ekk0341c170out = callSC(handle, scCall, param, fixedText, editInMsgEKK0341C170(param, dataMap, funcCode));
		setSvcUpdDtm(param, ekk0341c170out.getString(EKK0341C170CBSMsg.UPD_DTM), fixedText);
		return ekk0341c170out.getString(EKK0341C170CBSMsg.GENE_ADD_DTM);
	}
	
	/**
	 * 機器提供サービス契約料金コース変更中止のマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param inMap
	 * @return CAANMsg
	 * @throws Exception 
	 */
	private  HashMap<String, Object> editInMsgEKK0341C170(IRequestParameterReadWrite param, HashMap<String, Object> dataMap, String funcCode) throws Exception
	{
		Object[][] ekk0341c170IN = {
			{EKK0341C170CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0341C170},
			{EKK0341C170CBSMsg.FUNC_CODE,           funcCode},
			{EKK0341C170CBSMsg.KKTK_SVC_KEI_NO,     dataMap.get("kktk_svc_kei_no")},
			{EKK0341C170CBSMsg.GENE_ADD_DTM,        dataMap.get("gene_add_dtm")},
			{EKK0341C170CBSMsg.UPD_DTM_BF,          getWorkAreaUpddtm(param, dataMap)},
		};
		return editInMsg(param, ekk0341c170IN);
	}

	/**
	 * 機器提供サービス契約解約を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Exception
	 */
	private void dslRsvKiki(SessionHandle handle, 
							  ServiceComponentRequestInvoker scCall, 
							  IRequestParameterReadWrite param, 
							  String fixedText,
							  String funcCode,
							  HashMap<String, Object> dataMap) throws Exception 
	{
		// ***** EKK0341C340_機器提供サービス契約解約 *****
		CAANMsg ekk0341c340out = callSC(handle, scCall, param, fixedText, editInMsgEKK0341C340(param, dataMap, funcCode));
		setSvcUpdDtm(param, ekk0341c340out.getString(EKK0341C340CBSMsg.UPD_DTM), fixedText);
	}
	
	/**
	 * 機器提供サービス契約解約のマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param inMap
	 * @return CAANMsg
	 * @throws Exception 
	 */
	private  HashMap<String, Object> editInMsgEKK0341C340(IRequestParameterReadWrite param, HashMap<String, Object> dataMap, String funcCode) throws Exception
	{
		/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
		String kojiakSbtCd = (String)dataMap.get("kojiak_sbt_cd");
		String kojiUkOptntyIdoDiv = (String)dataMap.get("koji_uk_optnty_ido_div");
		/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
		/* ++++++++++ v7.00.04 追加開始 ++++++++++ */
		String idoDiv = (String)dataMap.get("ido_div");
		if (KOJIAK_JUHEN_JUHEN.equals(dataMap.get("kojiak_Juhen"))) {
			idoDiv = IDO_DIV_VALUE_00019;
		}
		/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
		//工事受付契機異動区分が存在している場合、異動区分を置き換える
		else if (kojiakSbtCd != null && !"".equals(kojiakSbtCd)
				&& kojiUkOptntyIdoDiv != null && !"".equals(kojiUkOptntyIdoDiv))
		{
			idoDiv = kojiUkOptntyIdoDiv;
		}
		/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
		/* ++++++++++ v7.00.04 追加終了 ++++++++++ */
		Object[][] ekk0341c340IN = {
				{EKK0341C340CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0341C340},
				{EKK0341C340CBSMsg.FUNC_CODE,           funcCode},
				{EKK0341C340CBSMsg.KKTK_SVC_KEI_NO,     dataMap.get("kktk_svc_kei_no")},
				{EKK0341C340CBSMsg.MSKM_DTL_NO,         getWorkArea(param, MSKM_DTL_NO)},
				{EKK0341C340CBSMsg.SVC_ENDYMD,          dataMap.get("svc_endymd")},
				{EKK0341C340CBSMsg.PNLTY_HASSEI_CD,     dataMap.get("pnlty_hassei_cd")},
				/* ++++++++++ v7.00.04 修正開始 ++++++++++ */
//				{EKK0341C340CBSMsg.IDO_DIV,             dataMap.get("ido_div")},
				{ EKK0341C340CBSMsg.IDO_DIV, idoDiv },
				/* ++++++++++ v7.00.04 修正終了 ++++++++++ */
				{EKK0341C340CBSMsg.TAKNKIKI_IDO_CD,     TAKNKIKI_IDO_CD_RMV},
				{EKK0341C340CBSMsg.SVC_DLRE_CD,         SVC_DSL_RSN_01},
				{EKK0341C340CBSMsg.UPD_DTM_BF,          getWorkAreaUpddtm(param, dataMap)},
		};
		return editInMsg(param, ekk0341c340IN);
	}

	/**
	 * 機器提供サービス契約解約確定を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Exception
	 */
	private String dslFixKiki(SessionHandle handle, 
							   ServiceComponentRequestInvoker scCall, 
							   IRequestParameterReadWrite param, 
							   String fixedText,
							   String funcCode,
							   HashMap<String, Object> dataMap) throws Exception 
	{
		/* ++++++++++ v7.00.04 追加開始 ++++++++++ */
		String svcEndymd = (String)dataMap.get("svc_endymd");
		//住所変更移動機器の場合は解約希望日を設定
		if (KOJIAK_JUHEN_JUHEN.equals(dataMap.get("kojiak_Juhen"))
				&& dataMap.get("juhen_idoKiki") != null && JUHEN_IDOKIKI_IDOKIKI.equals((String) dataMap.get("juhen_idoKiki")))
		{
			svcEndymd = (String)dataMap.get("dsl_ymd_tekkyo");
		}

		/* ++++++++++ v7.00.04 追加終了 ++++++++++ */
		// ***** EKK0341C350_機器提供サービス契約解約確定 *****
		Object[][] ekk0341c350IN = {
			{EKK0341C350CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0341C350},
			{EKK0341C350CBSMsg.FUNC_CODE,           funcCode},
			{EKK0341C350CBSMsg.KKTK_SVC_KEI_NO,     dataMap.get("kktk_svc_kei_no")},
			/* ++++++++++ v7.00.04 修正開始 ++++++++++ */
//			{ EKK0341C350CBSMsg.SVC_ENDYMD, (String)dataMap.get("svc_endymd") },
			{ EKK0341C350CBSMsg.SVC_ENDYMD, svcEndymd },
			/* ++++++++++ v7.00.04 修正終了 ++++++++++ */
//OM-2016-0001853 MOD START
//			{EKK0341C350CBSMsg.SVC_CHRG_ENDYMD,     dataMap.get("svc_chrg_endymd")},
			{EKK0341C350CBSMsg.SVC_CHRG_ENDYMD, JKKBpCommon.getChrgEndYmd((String)dataMap.get("svc_chrg_endymd"))},
//OM-2016-0001853 MOD END
			{EKK0341C350CBSMsg.SVC_DLRE_CD,         SVC_DSL_RSN_01},
			/* ++++++++++ v6.00.01 追加開始 ++++++++++ */
			{EKK0341C350CBSMsg.PLAN_END_SBT_CD,     PLAN_END_SBT_CD_2},
			/* ++++++++++ v6.00.01 追加終了 ++++++++++ */
			{EKK0341C350CBSMsg.UPD_DTM_BF,          getWorkAreaUpddtm(param, dataMap)},
		};
		CAANMsg ekk0341c350out = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0341c350IN));
		setSvcUpdDtm(param, ekk0341c350out.getString(EKK0341C350CBSMsg.UPD_DTM), fixedText);
		return ekk0341c350out.getString(EKK0341C350CBSMsg.GENE_ADD_DTM);
		
	}
	
	/**
	 * 機器提供サービス契約回復を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Exception
	 */
	private String dslKikiKaihuku(SessionHandle handle, 
								   ServiceComponentRequestInvoker scCall, 
								   IRequestParameterReadWrite param, 
								   String fixedText,
								   String funcCode,
								   HashMap<String, Object> dataMap) throws Exception 
	{
		// ***** EKK0341C380_機器提供サービス契約回復 *****
		CAANMsg ekk0341c380out = callSC(handle, scCall, param, fixedText, editInMsgEKK0341C380(param, dataMap, funcCode));
		setSvcUpdDtm(param, ekk0341c380out.getString(EKK0341C380CBSMsg.UPD_DTM), fixedText);
		return ekk0341c380out.getString(EKK0341C380CBSMsg.GENE_ADD_DTM);
	}
	
	/**
	 * 機器提供サービス契約回復のマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param inMap
	 * @return CAANMsg
	 * @throws Exception 
	 */
	private  HashMap<String, Object> editInMsgEKK0341C380(IRequestParameterReadWrite param, HashMap<String, Object> dataMap, String funcCode) throws Exception
	{
		Object[][] inParams = {
			{EKK0341C380CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0341C380},
			{EKK0341C380CBSMsg.FUNC_CODE,           funcCode},
			{EKK0341C380CBSMsg.KKTK_SVC_KEI_NO,     dataMap.get("kktk_svc_kei_no")},
			{EKK0341C380CBSMsg.MSKM_DTL_NO,         getWorkArea(param, MSKM_DTL_NO)},
			{EKK0341C380CBSMsg.KAIHK_YMD,           dataMap.get("kaihk_ymd")},
			{EKK0341C380CBSMsg.IDO_DIV,             dataMap.get("ido_div")},
			{EKK0341C380CBSMsg.UPD_DTM_BF,          getWorkAreaUpddtm(param, dataMap)},
		};
		return editInMsg(param, inParams);
	}
	
	/**
	 * 機器提供サービス契約解約を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Exception
	 */
	private void dslRsvCancelKiki(SessionHandle handle, 
								    ServiceComponentRequestInvoker scCall, 
								    IRequestParameterReadWrite param, 
								    String fixedText,
								    String funcCode,
								    HashMap<String, Object> dataMap) throws Exception 
	{
		// ***** EKK0341C360_機器提供サービス契約解約中止 *****
		Object[][] ekk0341c360IN = {
			{EKK0341C360CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0341C360},
			{EKK0341C360CBSMsg.FUNC_CODE,           funcCode},
			{EKK0341C360CBSMsg.KKTK_SVC_KEI_NO,     dataMap.get("kktk_svc_kei_no")},
			{EKK0341C360CBSMsg.MSKM_DTL_NO,         getWorkArea(param, MSKM_DTL_NO)},
			{EKK0341C360CBSMsg.UPD_DTM_BF,          getWorkAreaUpddtm(param, dataMap)},
		};
		CAANMsg ekk0341c360out = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0341c360IN));
		setSvcUpdDtm(param, ekk0341c360out.getString(EKK0341C360CBSMsg.UPD_DTM), fixedText);
	}
	
	/**
	 * 機器提供サービス契約キャンセルを実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Exception
	 */
	private String invokeEKK0341C330(SessionHandle handle, 
								      ServiceComponentRequestInvoker scCall, 
								      IRequestParameterReadWrite param, 
								      String fixedText,
								      String funcCode,
								      HashMap<String, Object> dataMap) throws Exception 
	{
		// ***** EKK0341C330_機器提供サービス契約解約中止 *****
		CAANMsg ekk0341c330out = callSC(handle, scCall, param, fixedText, editInMsgEKK0341C330(param, dataMap, funcCode));
		setSvcUpdDtm(param, ekk0341c330out.getString(EKK0341C330CBSMsg.UPD_DTM), fixedText);
		return ekk0341c330out.getString(EKK0341C330CBSMsg.GENE_ADD_DTM);
	}
	
	/**
	 * 機器提供サービス契約キャンセルのマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param inMap
	 * @return CAANMsg
	 * @throws Exception 
	 */
	private  HashMap<String, Object> editInMsgEKK0341C330(IRequestParameterReadWrite param, HashMap<String, Object> dataMap, String funcCode) throws Exception
	{
		/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
		String idoDiv = (String)dataMap.get("ido_div");
		String kojiakSbtCd = (String)dataMap.get("kojiak_sbt_cd");
		String kojiUkOptntyIdoDiv = (String)dataMap.get("koji_uk_optnty_ido_div");
		/* ++++++++++ v8.00.02 追加開始 ++++++++++ */
		if (KOJIAK_JUHEN_JUHEN.equals(dataMap.get("kojiak_Juhen"))) {
			idoDiv = IDO_DIV_VALUE_00019;
		}
		else 
		/* ++++++++++ v8.00.02 追加終了 ++++++++++ */
		//住所変更以外かつ工事案件と工事受付契機異動区分が存在する場合、異動区分に工事受付契機異動区分を設定する
		if (!KOJIAK_JUHEN_JUHEN.equals(dataMap.get("kojiak_Juhen")) && kojiakSbtCd != null && !"".equals(kojiakSbtCd)
				&& kojiUkOptntyIdoDiv != null && !"".equals(kojiUkOptntyIdoDiv))
		{
			idoDiv = kojiUkOptntyIdoDiv;
		}
		/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
		Object[][] ekk0341c330IN = {
			{EKK0341C330CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0341C330},
			{EKK0341C330CBSMsg.FUNC_CODE,           funcCode},
			{EKK0341C330CBSMsg.KKTK_SVC_KEI_NO,     dataMap.get("kktk_svc_kei_no")},
			{EKK0341C330CBSMsg.MSKM_DTL_NO,         getWorkArea(param, MSKM_DTL_NO)},
			{EKK0341C330CBSMsg.SVC_CANCEL_RSN_CD,   SVC_DSL_RSN_01},
			/* ++++++++++ v8.00.01 修正開始 ++++++++++ */
//			{EKK0341C330CBSMsg.IDO_DIV,             dataMap.get("ido_div")},
			{EKK0341C330CBSMsg.IDO_DIV,             idoDiv},
			/* ++++++++++ v8.00.01 修正終了 ++++++++++ */
			{EKK0341C330CBSMsg.UPD_DTM_BF,          getWorkAreaUpddtm(param, dataMap)},
		};
		return editInMsg(param, ekk0341c330IN);
	}
	/* ++++++++++ v5.00.17 追加開始 ++++++++++ */
	/**
	 * 機器提供サービス契約論理削除を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Exception
	 */
	private void invokeEKK0341E010(SessionHandle handle, 
								      ServiceComponentRequestInvoker scCall, 
								      IRequestParameterReadWrite param, 
								      String fixedText,
								      String funcCode,
								      HashMap<String, Object> dataMap) throws Exception 
	{
		// ***** EKK0341C330_機器提供サービス契約解約中止 *****
		CAANMsg ekk0341e010out = callSC(handle, scCall, param, fixedText, editInMsgEKK0341E010(param, dataMap, funcCode));
		setSvcUpdDtm(param, ekk0341e010out.getString(EKK0341E010CBSMsg.UPD_DTM), fixedText);
	}
	/* ++++++++++ v5.00.17 追加終了 ++++++++++ */
	
	/**
	 * 機器提供サービス契約論理削除のマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param inMap
	 * @return CAANMsg
	 * @throws Exception 
	 */
	private  HashMap<String, Object> editInMsgEKK0341E010(IRequestParameterReadWrite param, HashMap<String, Object> dataMap, String funcCode) throws Exception
	{
		Object[][] ekk0341e010IN = {
			{EKK0341E010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0341E010},
			{EKK0341E010CBSMsg.FUNC_CODE,           funcCode},
			{EKK0341E010CBSMsg.KKTK_SVC_KEI_NO,     dataMap.get("kktk_svc_kei_no")},
			{EKK0341E010CBSMsg.UPD_DTM_BF,          getWorkAreaUpddtm(param, dataMap)},
		};
		return editInMsg(param, ekk0341e010IN);
	}

	/**
	 * サービス契約内訳解約を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Exception
	 */
	private void dslRsvSvcKeiUcwk(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String fixedText,
									String funcCode,
									HashMap<String, Object> dataMap) throws Exception 
	{
		// ***** EKK0161C180（サービス契約内訳解約）*****
		
		CAANMsg ekk0161c180out = callSC(handle, scCall, param, fixedText, editInMsgEKK0161C180(param, dataMap, funcCode));
		setSvcUpdDtm(param, ekk0161c180out.getString(EKK0161C180CBSMsg.UPD_DTM), fixedText);
		
	}
	
	/**
	 * サービス契約内訳のマッピング処理を行います。
	 * @param param
	 * @param dataMap
	 * @param funcCode
	 * @return
	 * @throws Exception
	 */
	private HashMap<String, Object> editInMsgEKK0161C180(IRequestParameterReadWrite param, HashMap<String, Object> dataMap, String funcCode) throws Exception
	{
		/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
		String kojiakSbtCd = (String)dataMap.get("kojiak_sbt_cd");
		String kojiUkOptntyIdoDiv = (String)dataMap.get("koji_uk_optnty_ido_div");
		/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
		/* ++++++++++ v7.00.04 追加開始 ++++++++++ */
		String idoDiv = (String)dataMap.get("ido_div");
		if (KOJIAK_JUHEN_JUHEN.equals(dataMap.get("kojiak_Juhen"))) {
			idoDiv = IDO_DIV_VALUE_00019;
		}
		/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
		//工事受付契機異動区分が存在している場合、異動区分を置き換える
		else if (kojiakSbtCd != null && !"".equals(kojiakSbtCd)
				&& kojiUkOptntyIdoDiv != null && !"".equals(kojiUkOptntyIdoDiv))
		{
			idoDiv = kojiUkOptntyIdoDiv;
		}
		/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
		/* ++++++++++ v7.00.04 追加終了 ++++++++++ */
		Object[][] ekk0161c180IN = {
				{EKK0161C180CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0161C180},
				{EKK0161C180CBSMsg.FUNC_CODE,           funcCode},
				{EKK0161C180CBSMsg.SVC_KEI_UCWK_NO,     dataMap.get("svc_kei_ucwk_no")},
				{EKK0161C180CBSMsg.MSKM_DTL_NO,         getWorkArea(param, MSKM_DTL_NO)},
				{EKK0161C180CBSMsg.SVC_ENDYMD,          dataMap.get("svc_endymd")},
				{EKK0161C180CBSMsg.SVC_DLRE_CD,         SVC_DSL_RSN_01},
				{EKK0161C180CBSMsg.PNLTY_HASSEI_CD,     dataMap.get("pnlty_hassei_cd")},
//				{EKK0161C180CBSMsg.IDO_DIV,             dataMap.get("ido_div")},
				{EKK0161C180CBSMsg.IDO_DIV,             idoDiv},
				{EKK0161C180CBSMsg.UPD_DTM_BF,          getWorkAreaUpddtm(param, dataMap)},
			};
		return editInMsg(param, ekk0161c180IN);
	}

	/**
	 * サービス契約内訳解約確定を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Exception
	 */
	private String dslFixSvcKeiUcwk(SessionHandle handle, 
									 ServiceComponentRequestInvoker scCall, 
									 IRequestParameterReadWrite param, 
									 String fixedText,
									 String funcCode,
									 HashMap<String, Object> dataMap) throws Exception 
	{
		// ***** EKK0161C190（サービス契約内訳解約確定）*****
		Object[][] ekk0161c190IN = {
			{EKK0161C190CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0161C190},
			{EKK0161C190CBSMsg.FUNC_CODE,           funcCode},
			{EKK0161C190CBSMsg.SVC_KEI_UCWK_NO,     dataMap.get("svc_kei_ucwk_no")},
			{EKK0161C190CBSMsg.SVC_DSL_KISAN_YMD,   dataMap.get("svc_dsl_kisan_ymd")},
			{EKK0161C190CBSMsg.SVC_ENDYMD,          dataMap.get("svc_endymd")},
			{EKK0161C190CBSMsg.SVC_DLRE_CD,         SVC_DSL_RSN_01},
//			【OM-2013-0001808】対応
			{EKK0161C190CBSMsg.PLAN_END_SBT_CD, PLAN_END_SBT_CD_2},
//			【OM-2013-0001808】対応
			{EKK0161C190CBSMsg.SVC_DLRE_MEMO,       dataMap.get("svc_dlre_memo")},
			{EKK0161C190CBSMsg.UPD_DTM_BF,          getWorkAreaUpddtm(param, dataMap)},
		};
		
		CAANMsg ekk0161c190out = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0161c190IN));
		setSvcUpdDtm(param, ekk0161c190out.getString(EKK0161C190CBSMsg.UPD_DTM), fixedText);
		return ekk0161c190out.getString(EKK0161C190CBSMsg.GENE_ADD_DTM);
	}
	
	/**
	 * サービス契約内訳解約中止を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Exception
	 */
	private void dslRsvCancelSvcKeiUcwk(SessionHandle handle, 
										  ServiceComponentRequestInvoker scCall, 
										  IRequestParameterReadWrite param, 
										  String fixedText,
										  String funcCode,
										  HashMap<String, Object> dataMap) throws Exception 
	{
		// ***** EKK0161C200_サービス契約内訳解約中止 *****
		Object[][] ekk0161c200IN = {
			{EKK0161C200CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0161C200},
			{EKK0161C200CBSMsg.FUNC_CODE,           funcCode},
			{EKK0161C200CBSMsg.SVC_KEI_UCWK_NO,     dataMap.get("svc_kei_ucwk_no")},
			{EKK0161C200CBSMsg.UPD_DTM_BF,          getWorkAreaUpddtm(param, dataMap)},
		};
		CAANMsg ekk0161c200out = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0161c200IN));
		setSvcUpdDtm(param, ekk0161c200out.getString(EKK0161C200CBSMsg.UPD_DTM), fixedText);
		
	}
	
	/**
	 * サービス契約内訳回復を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Exception
	 */
	private String svcKeiUcwkKaihuku(SessionHandle handle, 
									  ServiceComponentRequestInvoker scCall, 
									  IRequestParameterReadWrite param, 
									  String fixedText,
									  String funcCode,
									  HashMap<String, Object> dataMap) throws Exception 
	{
		// ***** EKK0161C210（サービス契約内訳回復）*****
		CAANMsg ekk0161c210out = callSC(handle, scCall, param, fixedText, editInMsgEKK0161C210(param, dataMap, funcCode));
		setSvcUpdDtm(param, ekk0161c210out.getString(EKK0161C210CBSMsg.UPD_DTM), fixedText);
		return ekk0161c210out.getString(EKK0161C210CBSMsg.GENE_ADD_DTM);
	}
	
	/**
	 * サービス契約内訳回復のマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param inMap
	 * @return CAANMsg
	 * @throws Exception 
	 */
	private  HashMap<String, Object> editInMsgEKK0161C210(IRequestParameterReadWrite param, HashMap<String, Object> dataMap, String funcCode) throws Exception
	{
		Object[][] inParam = {
			{EKK0161C210CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0161C210},
			{EKK0161C210CBSMsg.FUNC_CODE,           funcCode},
			{EKK0161C210CBSMsg.SVC_KEI_UCWK_NO,     dataMap.get("svc_kei_ucwk_no")},
			{EKK0161C210CBSMsg.MSKM_DTL_NO,         getWorkArea(param, MSKM_DTL_NO)},
			{EKK0161C210CBSMsg.KAIHK_YMD,           dataMap.get("kaihk_ymd")},
			{EKK0161C210CBSMsg.IDO_DIV,             dataMap.get("ido_div")},
			{EKK0161C210CBSMsg.UPD_DTM_BF,          getWorkAreaUpddtm(param, dataMap)},
		};
		return editInMsg(param, inParam);
	}
	
	/**
	 * サービス契約内訳キャンセルを実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Exception
	 */
	private String svcKeiUcwkCancel(SessionHandle handle, 
									 ServiceComponentRequestInvoker scCall, 
									 IRequestParameterReadWrite param, 
									 String fixedText,
									 String funcCode,
									 HashMap<String, Object> dataMap) throws Exception 
	{
		CAANMsg ekk0161c160out = callSC(handle, scCall, param, fixedText, editInMsgEKK0161C160(param, dataMap, funcCode));
		setSvcUpdDtm(param, ekk0161c160out.getString(EKK0161C160CBSMsg.UPD_DTM), fixedText);
		return ekk0161c160out.getString(EKK0161C160CBSMsg.GENE_ADD_DTM);
	}
	
	/**
	 * サービス契約内訳キャンセルのマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param inMap
	 * @return CAANMsg
	 * @throws Exception 
	 */
	private  HashMap<String, Object> editInMsgEKK0161C160(IRequestParameterReadWrite param, HashMap<String, Object> dataMap, String funcCode) throws Exception
	{
		/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
		String idoDiv = (String)dataMap.get("ido_div");
		String kojiakSbtCd = (String)dataMap.get("kojiak_sbt_cd");
		String kojiUkOptntyIdoDiv = (String)dataMap.get("koji_uk_optnty_ido_div");
		/* ++++++++++ v8.00.02 追加開始 ++++++++++ */
		if (KOJIAK_JUHEN_JUHEN.equals(dataMap.get("kojiak_Juhen"))) {
			idoDiv = IDO_DIV_VALUE_00019;
		}
		else 
		/* ++++++++++ v8.00.02 追加終了 ++++++++++ */
		//住所変更以外かつ工事案件と工事受付契機異動区分が存在する場合、異動区分に工事受付契機異動区分を設定する
		if (!KOJIAK_JUHEN_JUHEN.equals(dataMap.get("kojiak_Juhen")) && kojiakSbtCd != null && !"".equals(kojiakSbtCd)
				&& kojiUkOptntyIdoDiv != null && !"".equals(kojiUkOptntyIdoDiv))
		{
			idoDiv = kojiUkOptntyIdoDiv;
		}
		/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
		Object[][] inParam = {
			{EKK0161C160CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0161C160},
			{EKK0161C160CBSMsg.FUNC_CODE,           funcCode},
			{EKK0161C160CBSMsg.SVC_KEI_UCWK_NO,     dataMap.get("svc_kei_ucwk_no")},
			{EKK0161C160CBSMsg.MSKM_DTL_NO,         getWorkArea(param, MSKM_DTL_NO)},
			{EKK0161C160CBSMsg.SVC_CANCEL_RSN_CD,   SVC_DSL_RSN_01},
			/* ++++++++++ v8.00.01 修正開始 ++++++++++ */
//			{EKK0161C160CBSMsg.IDO_DIV,             dataMap.get("ido_div")},
			{EKK0161C160CBSMsg.IDO_DIV,             idoDiv},
			/* ++++++++++ v8.00.01 修正終了 ++++++++++ */
			{EKK0161C160CBSMsg.UPD_DTM_BF,          getWorkAreaUpddtm(param, dataMap)},
		};
		return editInMsg(param, inParam);
	}

	/**
	 * 返品受付
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @throws Exception
	 */
	private void henpin(SessionHandle handle, 
			 			  ServiceComponentRequestInvoker scCall, 
			 			  IRequestParameterReadWrite param, 
			 			  String fixedText,
			 			  String funcCode,
			 			  HashMap<String, Object> dataMap) throws Exception 
	{
		// 返品機器受付
		CAANMsg kk0341current = findByCurrentKK0341(handle, scCall, param, fixedText, (String)dataMap.get("kktk_svc_kei_no"));
		
		Object[][] edk0301d010in = {
			{EDK0301D010CBSMsg.TEMPLATEID,             TEMPLATE_ID_EDK0301D010},
			{EDK0301D010CBSMsg.FUNC_CODE,              funcCode},
			{EDK0301D010CBSMsg.HMPIN_UK_YMD,           dataMap.get("hmpin_uk_ymd")},	// 返品機器受付情報マップ.返品受付年月日 → 返品受付年月日
			{EDK0301D010CBSMsg.HMPIN_DIV,              HMPIN_DIV_2},	// 返品機器受付情報マップ.返品区分 → 返品区分
			{EDK0301D010CBSMsg.KOJI_COMP_CD,           dataMap.get("koji_comp_cd")},	// 返品機器受付情報マップ.工事会社コード → 工事会社コード
			{EDK0301D010CBSMsg.YOTAKU_SAKI_OFFC_CD,    dataMap.get("yotaku_saki_offc_cd")},	// 返品機器受付情報マップ.預託先オフィスコード → 預託先オフィスコード
			{EDK0301D010CBSMsg.PLACE_NO,               kk0341current.getString(EKK0341A010CBSMsg1List.KIKI_STC_SAKI_PLACE_NO)},	// 返品機器受付情報マップ.場所番号 → 場所番号
			{EDK0301D010CBSMsg.KKTK_SVC_KEI_NO,        dataMap.get("kktk_svc_kei_no")},	// 返品機器受付情報マップ.機器提供サービス契約番号 → 機器提供サービス契約番号
			{EDK0301D010CBSMsg.TAKNKIKI_MODEL_CD,      dataMap.get("taknkiki_model")},	// 返品機器受付情報マップ.宅内機器型式コード → 宅内機器型式コード
			{EDK0301D010CBSMsg.KIKI_SEIZO_NO,          dataMap.get("kiki_seizo_no")},	// 返品機器受付情報マップ.機器製造番号 → 機器製造番号
			{EDK0301D010CBSMsg.HUZOKUHIN_MODEL_CD,     dataMap.get("huzokuhin_model_cd")},	// 返品機器受付情報マップ.付属品型式コード → 付属品型式コード
			{EDK0301D010CBSMsg.BTRYHOZN_NO,            dataMap.get("btryhozn_no")},	// 返品機器受付情報マップ.物流保全番号 → 物流保全番号
			{EDK0301D010CBSMsg.HMPIN_MOTO_KSITEI_FLG,  dataMap.get("hmpin_moto_ksitei_flg")},	// 返品機器受付情報マップ.返品元個別指定フラグ → 返品元個別指定フラグ
			{EDK0301D010CBSMsg.HMPIN_RSN_CD,           dataMap.get("hmpin_rsn_cd")},	// 返品機器受付情報マップ.返品理由コード → 返品理由コード
			{EDK0301D010CBSMsg.HMPIN_RSN_MEMO,         dataMap.get("hmpin_rsn_memo")},	// 返品機器受付情報マップ.返品理由メモ → 返品理由メモ
			{EDK0301D010CBSMsg.TROUBLE_NAIYO,          dataMap.get("trouble_naiyo")},	// 返品機器受付情報マップ.故障内容 → 故障内容
			{EDK0301D010CBSMsg.ADD_OPTNTY_KEI_IDO_DIV, dataMap.get("add_optnty_kei_ido_div")},	// 返品機器受付情報マップ.登録契機契約異動区分 → 登録契機契約異動区分
			{EDK0301D010CBSMsg.ADD_OPTNTY_KEI_IDO_DTM, dataMap.get("add_optnty_kei_ido_dtm")},	// 返品機器受付情報マップ.登録契機契約異動年月日時分秒 → 登録契機契約異動年月日時分秒
			{EDK0301D010CBSMsg.LOAD_OYA_SVKEI_NO,      dataMap.get("load_oya_svkei_no")},	// 返品機器受付情報マップ.読込親サービス契約番号 → 読込親サービス契約番号
			{EDK0301D010CBSMsg.GDS_STAT_CD,            dataMap.get("gds_stat_cd")},	// 返品機器受付情報マップ.商品状態コード → 商品状態コード
			{EDK0301D010CBSMsg.TK_SBT_CD,              dataMap.get("kktk_sbt_cd")},	// 返品機器受付情報マップ.提供種別コード → 提供種別コード
			{EDK0301D010CBSMsg.BTRYHOZN_UK_YMD,        dataMap.get("btryhozn_uk_ymd")},	// 返品機器受付情報マップ.物流保全受付年月日 → 物流保全受付年月日
			{EDK0301D010CBSMsg.KIKI_CHG_NO,            kk0341current.getString(EKK0341A010CBSMsg1List.KIKI_CHG_NO)}	// 返品機器受付情報マップ.機器変更番号 → 機器変更番号
		};
		
		// 返品機器受付
		callSC(handle, scCall, param, fixedText, editInMsg(param, edk0301d010in));
	}
	
	/**
	 * 機器提供サービス契約をプライマリーキー検索する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param kktkSvcKeiNo
	 * @param geneAddDtm
	 * @return
	 * @throws Exception
	 */
	private CAANMsg findByPkKK0341(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String fixedText,
									String kktkSvcKeiNo,
									String geneAddDtm) throws Exception 
	{
		// ***** EKK0341A010（機器提供サービス契約一意照会）*****
		Object[][] ekk0341a010IN = {
			{EKK0341A010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0341A010},
			{EKK0341A010CBSMsg.FUNC_CODE,           FUNC_CODE_1},
			{EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo},
			{EKK0341A010CBSMsg.KEY_GENE_ADD_DTM,    geneAddDtm},
			{EKK0341A010CBSMsg.KEY_RSV_APLY_YMD,    ""}
		};
		return callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0341a010IN)).getCAANMsgList(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST)[0];
	}

	/**
	 * 機器提供サービス契約をカレント検索する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param kktkSvcKeiNo
	 * @param geneAddDtm
	 * @return
	 * @throws Exception
	 */
	private CAANMsg findByCurrentKK0341(SessionHandle handle, 
										 ServiceComponentRequestInvoker scCall, 
										 IRequestParameterReadWrite param, 
										 String fixedText,
										 String kktkSvcKeiNo) throws Exception 
	{
		// ***** EKK0341A010（機器提供サービス契約一意照会）*****
		Object[][] ekk0341a010IN = {
			{EKK0341A010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0341A010},
			{EKK0341A010CBSMsg.FUNC_CODE,           FUNC_CODE_2},
			{EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo},
			{EKK0341A010CBSMsg.KEY_GENE_ADD_DTM,    ""},
			{EKK0341A010CBSMsg.KEY_RSV_APLY_YMD,    JPCBPCommon.getOpeDate(null)}
		};
		return callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0341a010IN)).getCAANMsgList(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST)[0];
	}
	
	/**
	 * サービス契約内訳をプライマリーキー検索する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param kktkSvcKeiNo
	 * @param geneAddDtm
	 * @return
	 * @throws Exception
	 */
	private CAANMsg findByPkKK0161(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String fixedText,
									String svcKeiUcwkNo,
									String geneAddDtm) throws Exception 
	{
		// ***** EKK0161A010（サービス契約内訳一意照会）*****
		Object[][] ekk0161a010IN = {
			{EKK0161A010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0161A010},
			{EKK0161A010CBSMsg.FUNC_CODE,           FUNC_CODE_1},
			{EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo},
			{EKK0161A010CBSMsg.KEY_GENE_ADD_DTM,    geneAddDtm},
			{EKK0161A010CBSMsg.KEY_RSV_APLY_YMD,    ""}
		};
		return callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0161a010IN)).getCAANMsgList(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST)[0];
	}

	/**
	 * サービス契約内訳をカレント検索する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param kktkSvcKeiNo
	 * @param geneAddDtm
	 * @return
	 * @throws Exception
	 */
	private CAANMsg findByCurrentKK0161(SessionHandle handle, 
										 ServiceComponentRequestInvoker scCall, 
										 IRequestParameterReadWrite param, 
										 String fixedText,
										 String svcKeiUcwkNo) throws Exception 
	{
		// ***** EKK0161A010（サービス契約内訳一意照会）*****
		Object[][] ekk0161a010IN = {
			{EKK0161A010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0161A010},
			{EKK0161A010CBSMsg.FUNC_CODE,           FUNC_CODE_2},
			{EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo},
			{EKK0161A010CBSMsg.KEY_GENE_ADD_DTM,    ""},
			{EKK0161A010CBSMsg.KEY_RSV_APLY_YMD,    JPCBPCommon.getOpeDate(null)}
		};
		return callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0161a010IN)).getCAANMsgList(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST)[0];
	}
	
	/**
	 * 機器解約のキャンセル処理
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param dataMap
	 * @param workMap
	 * @param svcKeiUcwkMap
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> dslCancel(SessionHandle handle, 
											   ServiceComponentRequestInvoker scCall, 
											   IRequestParameterReadWrite param, 
											   String fixedText,
											   HashMap<String, Object> dataMap,
											   HashMap<String, Object> workMap,
											   List<String> svcKeiUcwkMap) throws Exception 
	{
		
		HashMap<String, Object> resultMap = null;
		
		String kktkSvcKeiStat = (String) workMap.get("KKTK_SVC_KEI_STAT");
		String kktkGeneAddDtm = (String) workMap.get("KKTK_GENE_ADD_DTM");
		String svcKeiUcwkNo   = (String) workMap.get("SVC_KEI_UCWK_NO");
		String ucwkGeneAddDtm = (String) workMap.get("UCWK_GENE_ADD_DTM");
		
		// データ情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		// 機能コード取得
		String funcCode = (String)inMap.get("func_code");
		
		// 機器提供サービス契約が解約済みの場合は回復を行う。
		if (KKTK_SVC_KEI_STAT_910.equals(kktkSvcKeiStat))
		{
			// **** 解約済みの機器を回復する。 ***
			kktkGeneAddDtm = dslKikiKaihuku(handle, scCall, param, fixedText, funcCode, dataMap);
			
			// サービス契約内訳番号が違う場合
			if (svcKeiUcwkNo != null && !"".equals(svcKeiUcwkNo) && !svcKeiUcwkMap.contains(svcKeiUcwkNo))
			{
				// ***** EKK0161C210（サービス契約内訳回復）*****
				ucwkGeneAddDtm = svcKeiUcwkKaihuku(handle, scCall, param, fixedText, funcCode, dataMap);
				
				// 実行したサービス契約内訳番号
				svcKeiUcwkMap.add(svcKeiUcwkNo);
				// 機能コードが１の場合のみ呼び出す
				if (FUNC_CODE_1.equals(funcCode))
				{
					// ***** EKK0161A010（サービス契約内訳一意照会）*****
					resultMap = setSvcUcwk(findByPkKK0161(handle, scCall, param, fixedText, svcKeiUcwkNo, ucwkGeneAddDtm));
				}
			}
		}
		else
		{
			// 解約予約取消
			dslRsvCancelKiki(handle, scCall, param, fixedText, funcCode, dataMap);
			
			// サービス契約内訳番号が違う場合
			if (svcKeiUcwkNo != null && !"".equals(svcKeiUcwkNo) && !svcKeiUcwkMap.contains(svcKeiUcwkNo))
			{
				// ***** EKK0161C200_サービス契約内訳解約中止 *****
				dslRsvCancelSvcKeiUcwk(handle, scCall, param, fixedText, funcCode, dataMap);
				// 実行したサービス契約内訳番号
				svcKeiUcwkMap.add(svcKeiUcwkNo);
				// 機能コードが１の場合のみ呼び出す
				if (FUNC_CODE_1.equals(funcCode))
				{
					
					// ***** EKK0161A010（サービス契約内訳一意照会）*****
					resultMap = setSvcUcwk(findByCurrentKK0161(handle, scCall, param, fixedText, svcKeiUcwkNo));
				}
			}
		}
		
		workMap.put("KKTK_GENE_ADD_DTM", kktkGeneAddDtm);
		workMap.put("UCWK_GENE_ADD_DTM", ucwkGeneAddDtm);
		
		return resultMap;
	}
	
	
	/**
	 * 返品取消処理を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param dataMap
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void henpinCancel(SessionHandle handle, 
								ServiceComponentRequestInvoker scCall, 
								IRequestParameterReadWrite param, 
								String fixedText,
								HashMap<String, Object> dataMap)  throws Exception 
	{
		// データ情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		// 機能コード取得
		String funcCode = (String)inMap.get("func_code");
		
		CAANMsg kk0341cur = findByCurrentKK0341(handle, scCall, param, fixedText, (String) dataMap.get("kktk_svc_kei_no"));
		
		// ***** EDK0301B070（返品機器一覧照会）*****
		Object[][] inParam = {
			{EDK0301B070CBSMsg.TEMPLATEID,            TEMPLATE_ID_EDK0301B070},
			{EDK0301B070CBSMsg.FUNC_CODE,             FUNC_CODE_1},
			{EDK0301B070CBSMsg.KEY_TAKNKIKI_MODEL_CD, kk0341cur.getString(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD)},
			{EDK0301B070CBSMsg.KEY_KIKI_SEIZO_NO,     kk0341cur.getString(EKK0341A010CBSMsg1List.KIKI_SEIZO_NO)},
			{EDK0301B070CBSMsg.KEY_KKTK_SVC_KEI_NO,   kk0341cur.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO)}
		};
		CAANMsg[] edk0301b070outList 
					= callSC(handle, scCall, param, fixedText, editInMsg(param, inParam)).getCAANMsgList(EDK0301B070CBSMsg.EDK0301B070CBSMSG1LIST);
		
		for (CAANMsg edk0301b070out : edk0301b070outList)
		{
			// 返品機器取消
			Object[][] edk0301c040IN = {
				{EDK0301C040CBSMsg.TEMPLATEID,            TEMPLATE_ID_EDK0301C040},
				{EDK0301C040CBSMsg.FUNC_CODE,             funcCode},
				{EDK0301C040CBSMsg.KEY_HMPIN_KIKI_NO,     edk0301b070out.getString(EDK0301B070CBSMsg1List.HMPIN_KIKI_NO)},
				{EDK0301C040CBSMsg.LAST_UPD_DTM_BF,       edk0301b070out.getString(EDK0301B070CBSMsg1List.UPD_DTM)}
			};
			
			callSC(handle, scCall, param, fixedText, editInMsg(param, edk0301c040IN));
			
		}
	}
	
	/**
	 * 各種処理結果リストを生成する。
	 * 
	 * @param param
	 * @param fixedText
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void initProcessList(IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		
		// 解約機器提供サービス契約データ格納Listを取得
		if (inMap.get(DSL_KIKI_LIST) == null)
		{
			inMap.put(DSL_KIKI_LIST, new ArrayList<HashMap<String, Object>>());
		}
		
		// 解約サービス契約内訳データ格納Listを取得
		if (inMap.get(DSL_SVC_UCWK_LIST) == null)
		{
			inMap.put(DSL_SVC_UCWK_LIST, new ArrayList<HashMap<String, Object>>());
		}
		
		// 回復機器提供サービス契約データ格納Listを取得
		if (inMap.get(KAIHK_KIKI_LIST) == null)
		{
			inMap.put(KAIHK_KIKI_LIST, new ArrayList<HashMap<String, Object>>());
		}
		
		// 回復サービス契約内訳データ格納Listを取得
		if (inMap.get(KAIHK_SVC_UCWK_LIST) == null)
		{
			inMap.put(KAIHK_SVC_UCWK_LIST, new ArrayList<HashMap<String, Object>>());
		}
		
		// キャンセル機器提供サービス契約データ格納Listを取得
		if (inMap.get(CANCEL_KIKI_LIST) == null)
		{
			inMap.put(CANCEL_KIKI_LIST, new ArrayList<HashMap<String, Object>>());
		}
		
		// キャンセルサービス契約内訳データ格納Listを取得
		if (inMap.get(CANCEL_SVC_UCWK_LIST) == null)
		{
			inMap.put(CANCEL_SVC_UCWK_LIST, new ArrayList<HashMap<String, Object>>());
		}
	}
	
	/**
	 * 各種処理リストに値を設定する。
	 * @param param
	 * @param fixedText
	 * @param key
	 * @param val
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void addProcessList(IRequestParameterReadWrite param, String fixedText, String key, HashMap<String, Object> val)  throws Exception
	{
		if (val == null)
		{
			return;
		}
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		((ArrayList<HashMap<String, Object>>)inMap.get(key)).add(val);
	}
	
	/**
	 * 追加機器のキャンセル処理
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param processedSvcKeiUcwkNoList
	 * @param svcKeiUcwkNo
	 * @param dataMap
	 * @param workMap
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void doAddKikiCancel(SessionHandle handle, 
								   ServiceComponentRequestInvoker scCall, 
								   IRequestParameterReadWrite param, 
								   String fixedText,
								   List<String> processedSvcKeiUcwkNoList,
								   String svcKeiUcwkNo,
								   HashMap<String, Object> dataMap)  throws Throwable 
	{
		
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		String funcCode = (String)inMap.get("func_code");
		
		// 機器提供サービス契約一意照会
		CAANMsg kk0341curMsg = findByCurrentKK0341(handle, scCall, param, fixedText, (String)dataMap.get("kktk_svc_kei_no"));
		
		// 機器提供サービス契約ステータスが受付、照査済の場合
		if (KKTK_SVC_KEI_STAT_010.equals(kk0341curMsg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT))
			|| KKTK_SVC_KEI_STAT_020.equals(kk0341curMsg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT)))
		{
			// 機器提供サービス契約キャンセル
			String geneAddDtm = invokeEKK0341C330(handle, scCall, param, fixedText, funcCode, dataMap);
			// 機能コードが１の場合のみ呼び出す
			if (FUNC_CODE_1.equals(funcCode))
			{
				// ***** EKK0341A010（機器提供サービス契約一意照会）*****
				addProcessList(param, fixedText, CANCEL_KIKI_LIST, setKktkSvc(findByPkKK0341(handle, scCall, param, fixedText, (String)dataMap.get("kktk_svc_kei_no"), geneAddDtm)));
				/* ++++++++++ v5.00.17 追加開始 ++++++++++ */
				//履歴を削除するために論理削除する
				invokeEKK0341E010(handle, scCall, param, fixedText, funcCode, dataMap);
				/* ++++++++++ v5.00.17 追加終了 ++++++++++ */
				/* ++++++++++ v6.00.00 追加開始 ++++++++++ */
				// 一時領域データ
				HashMap<String, Object> temporaryData = new HashMap<String, Object>();
				// 割引サービス対象契約を論理削除します。
				execWriSvcDelete(handle, scCall, param, fixedText, dataMap, (String)dataMap.get("kktk_svc_kei_no"));
				// 論理削除対象課金先候補一覧の作成
				getDeleteKakinsIchiran(handle, scCall, param, fixedText, temporaryData);
				//** 課金先論理削除の実行 */
				isDeleteKakins(handle, scCall, param, fixedText, temporaryData, (String)dataMap.get("kktk_svc_kei_no"));
				/* ++++++++++ v6.00.00 追加終了 ++++++++++ */
			}
		}
		else
		{
			dslRsvKiki(handle, scCall, param, fixedText, funcCode, dataMap);
			
			// 機能コードが１の場合のみ呼び出す
			if (FUNC_CODE_1.equals(funcCode))
			{
				// 機器提供サービス契約解約確定
				String geneAddDtm = dslFixKiki(handle, scCall, param, fixedText, funcCode, dataMap);
				// ***** EKK0341A010（機器提供サービス契約一意照会）*****
				addProcessList(param, fixedText, DSL_KIKI_LIST, setKktkSvc(findByPkKK0341(handle, scCall, param, fixedText, (String)dataMap.get("kktk_svc_kei_no"), geneAddDtm)));
			}
		}
		// サービス契約内訳番号が違う場合
		if (!processedSvcKeiUcwkNoList.contains(svcKeiUcwkNo))
		{
			// サービス契約内訳一意照会
			CAANMsg kk0161curMsg = findByCurrentKK0161(handle, scCall, param, fixedText, (String)dataMap.get("svc_kei_ucwk_no"));
			
			// サービス契約内訳ステータスが受付、照査済の場合
			if (SVC_KEI_UCWK_STAT_010.equals(kk0161curMsg.getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT)) 
				|| SVC_KEI_UCWK_STAT_020.equals(kk0161curMsg.getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT)))
			{
				// サービス契約内訳キャンセル
				String svcUcwkgeneAddDtm = svcKeiUcwkCancel(handle, scCall, param, fixedText, funcCode, dataMap);
				// 機能コードが１の場合のみ呼び出す
				if (FUNC_CODE_1.equals(funcCode))
				{
					// ***** EKK0161A010（サービス契約内訳一意照会）*****
					addProcessList(param, fixedText, CANCEL_SVC_UCWK_LIST, setSvcUcwk(findByPkKK0161(handle, scCall, param, fixedText, svcKeiUcwkNo, svcUcwkgeneAddDtm)));
				}
			}
			else
			{
				// サービス契約内訳解約
				dslRsvSvcKeiUcwk(handle, scCall, param, fixedText, funcCode, dataMap);
				
				// 機能コードが１の場合のみ呼び出す
				if (FUNC_CODE_1.equals(funcCode))
				{
					// サービス契約内訳解約確定
					String svcUcwkgeneAddDtm = dslFixSvcKeiUcwk(handle, scCall, param, fixedText, funcCode, dataMap);
					// ***** EKK0161A010（サービス契約内訳一意照会）*****
					addProcessList(param, fixedText, DSL_SVC_UCWK_LIST, setSvcUcwk(findByPkKK0161(handle, scCall, param, fixedText, svcKeiUcwkNo, svcUcwkgeneAddDtm)));
				}
			}
			// 実行したサービス契約内訳番号
			processedSvcKeiUcwkNoList.add(svcKeiUcwkNo);
		}
	}
	
	/* ++++++++++ v5.00.00 追加開始 ++++++++++ */
	/**
	 * <pre>
	 * 追加機器の変更を設定するメソッド
	 * (1)機器提供サービス契約のカレントレコードを取得する。
	 * (2)取得した内容に追加機器の変更を設定して、登録する。
	 * </pre>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Throwable 
	 */
	private void chgKikiAddinfo(SessionHandle handle, 
									  ServiceComponentRequestInvoker scCall, 
									  IRequestParameterReadWrite param, 
									  String fixedText,
									  String funcCode,
									  HashMap<String, Object> dataMap) throws Throwable 
	{
		
	/* ++++++++++ v5.00.21 削除開始 ++++++++++ */
//テレビコースの変更のみ処理するため機器提供サービス契約情報変更は削除する		
		// #################################################
		//             カレントレコードを取得
		// #################################################
		// ***** EKK0341A010（機器提供サービス契約一意照会）*****
//		CAANMsg ekk0341a010out = callSC(handle, scCall, param, fixedText, editInMsgEKK0341A010(param, dataMap, funcCode));
//		CAANMsg[] ekk0341a010cbsMsg1list = ekk0341a010out.getCAANMsgList(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
//		if (ekk0341a010cbsMsg1list == null || ekk0341a010cbsMsg1list.length < 1)
//		{
//			// 更新処理を実施しない
//			return;
//		}
//		// #################################################
//		//             回収機器有無を設定
//		// #################################################
//		
//		//EKK0341C230のInput項目合わせて以下を記述
//		
//		// ************************************
//		//           入力情報を生成
//		// ************************************
//		// 入力項目のクラス
//		CAANMsg msg = new CAANMsg(EKK0341C230CBSMsg.class.getName());
//		HashMap<String, String> outMap = new HashMap<String, String>();
//		
//		//outMapに入力情報を設定
//		//     EKK0341C230CBSMsgの項目名でekk0341a010cbsMsgからデータを取得して、
//		//     そのデータをEKK0341C230CBSMsgの項目名で、outMapに設定
//		setMsgToMsg(msg, ekk0341a010cbsMsg1list[0], outMap);
//		
//		//outMapに追加設定
//		// 機器提供サービス契約情報変更サービスIF_ID
//		outMap.put(EKK0341C230CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0341C230);
//		// 機能コード
//		outMap.put(EKK0341C230CBSMsg.FUNC_CODE, funcCode);
//		// 更新年月日時分秒(更新前)    注意：取得項目が不一致のため、再設定
//		outMap.put(EKK0341C230CBSMsg.UPD_DTM_BF, getWorkAreaUpddtm(param, dataMap));
//		
//		// 宅内機器型式コード
//		if(dataMap.get("taknkiki_model_cd") != null && !"".equals(dataMap.get("taknkiki_model_cd")))
//		{
//			outMap.put(EKK0341C230CBSMsg.TAKNKIKI_MODEL_CD, (String)dataMap.get("taknkiki_model_cd"));
//		}
//		// 販売種別コード
//		if(dataMap.get("hambai_sbt_cd") != null)
//		{
//			outMap.put(EKK0341C230CBSMsg.HAMBAI_SBT_CD, (String)dataMap.get("hambai_sbt_cd"));
//		}
//		// HDD容量コード
//		if(dataMap.get("hdd_capa_cd") != null && !"".equals(dataMap.get("hdd_capa_cd")))
//		{
//			outMap.put(EKK0341C230CBSMsg.HDD_CAPA_CD, (String)dataMap.get("hdd_capa_cd"));
//		}
//		
//		//HashMapより配列に変換
//		String[][] ekk0341c230IN = getHashMapToInMsg(outMap, EKK0341C230CBSMsg.TEMPLATEID);
//		
//		// ***** 機器提供サービス契約の更新 *****
//		CAANMsg ekk0341c230cbsMsg = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0341c230IN));
//		
//		//最終更新タイムスタンプの設定
//		setSvcUpdDtm(param, ekk0341c230cbsMsg.getString(EKK0341C230CBSMsg.UPD_DTM), fixedText);
//		
	/* ++++++++++ v5.00.21 削除終了 ++++++++++ */
		
		// ************************
		// * ＴＶコースの変更処理 *
		// ************************
		
		// ***** EKK0161A010（サービス契約内訳一意照会）*****
		CAANMsg ekk0161a010out = callSC(handle, scCall, param, fixedText, editInMsgEKK0161A010(param, dataMap, funcCode));
		CAANMsg[] ekk0161a010cbsMsg1list = ekk0161a010out.getCAANMsgList(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
		if (ekk0161a010cbsMsg1list == null || ekk0161a010cbsMsg1list.length < 1)
		{
			// 更新処理を実施しない
			return;
		}
		
		// サービス契約内訳一意照会結果の取得
		String pcrs_cd_bf_ucwk = ekk0161a010cbsMsg1list[0].getString(EKK0161A010CBSMsg1List.PCRS_CD);
		
		// サービス契約内訳の料金コースと入力情報のＴＶコースに差異がある場合
		if (dataMap.get("pcrs_cd_tv") != null && !"".equals(dataMap.get("pcrs_cd_tv")) && !objEquals(pcrs_cd_bf_ucwk, dataMap.get("pcrs_cd_tv")))
		{
			String pplan_cd_after = execGetPlanCd(handle, param, scCall, dataMap);
			/* ++++++++++ v4.01.00 修正完了 ++++++++++ */
			
			// ***** EKK0161C100（サービス契約内訳手続中料金プラン変更）*****
			Object[][] ekk0161c100IN = {
				{EKK0161C100CBSMsg.TEMPLATEID,        TEMPLATE_ID_EKK0161C100},
				{EKK0161C100CBSMsg.FUNC_CODE,         funcCode},
				{EKK0161C100CBSMsg.SVC_KEI_UCWK_NO,   dataMap.get("svc_kei_ucwk_no")},
				{EKK0161C100CBSMsg.MSKM_DTL_NO,       getWorkArea(param, "mskm_dtl_no")},
				{EKK0161C100CBSMsg.PCRS_CD,           dataMap.get("pcrs_cd_tv")},
				{EKK0161C100CBSMsg.PPLAN_CD,          pplan_cd_after},
				{EKK0161C100CBSMsg.TK_HOSHIKI_KEI_NO, ""},
				{EKK0161C100CBSMsg.PNLTY_HASSEI_CD,   ""},
				{EKK0161C100CBSMsg.UPD_DTM_BF,        getWorkAreaUpddtm(param, dataMap)}
			};
			
			
			CAANMsg ekk0161c100cbsMsg = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0161c100IN) );
			
			// 更新年月日時分秒を作業領域に設定
			setSvcUpdDtm(param, ekk0161c100cbsMsg.getString(EKK0161C100CBSMsg.UPD_DTM), fixedText);			
		}

		
	}
	/* ++++++++++ v7.00.05 追加開始 ++++++++++ */
	/**
	 * 機器提供サービス契約料金コース変更中止のマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param inMap
	 * @return CAANMsg
	 * @throws Exception 
	 */
//	private  HashMap<String, Object> editInMsgEKK0341A010(IRequestParameterReadWrite param, HashMap<String, Object> dataMap, String funcCode) throws Exception
//	{
//		Object[][] ekk0341a010IN = {
//				{EKK0341A010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0341A010},
//				{EKK0341A010CBSMsg.FUNC_CODE,           FUNC_CODE_2},
//				{EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, dataMap.get("kktk_svc_kei_no")},
//				{EKK0341A010CBSMsg.KEY_GENE_ADD_DTM,    ""},
//				{EKK0341A010CBSMsg.KEY_RSV_APLY_YMD,    JPCBPCommon.getOpeDate(null)}
//			};
//
//		return editInMsg(param, ekk0341a010IN);
//	}
	
	/**
	 * 機器提供サービス契約料金コース変更中止のマッピング処理を行います。
	 * <br>
	 * @param param
	 * @param inMap
	 * @return CAANMsg
	 * @throws Exception 
	 */
	private  HashMap<String, Object> editInMsgEKK0161A010(IRequestParameterReadWrite param, HashMap<String, Object> dataMap, String funcCode) throws Exception
	{
		Object[][] ekk0161a010IN = {
				{EKK0161A010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0161A010},
				{EKK0161A010CBSMsg.FUNC_CODE,           FUNC_CODE_2},
				{EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO, dataMap.get("svc_kei_ucwk_no")},
				{EKK0161A010CBSMsg.KEY_GENE_ADD_DTM,    ""},
				{EKK0161A010CBSMsg.KEY_RSV_APLY_YMD,    JPCBPCommon.getOpeDate(null)},
			};

		return editInMsg(param, ekk0161a010IN);
	}
	/**
	 * 入力項目の値をそのまま移行するロジック
	 * @param msg 入力項目名データ群
	 * @param dataMsg 値を取得するデータ群
	 * @param outMap 取得したデータ群(出力変数)
	 */
//	@SuppressWarnings("unchecked")
//	private void setMsgToMsg(CAANMsg msg, CAANMsg dataMsg, HashMap<String, String> outMap)
//	{
//		Iterator<String> caanMsgKeys = msg.getSchema().getSchemaKeySet().iterator();
//		while (caanMsgKeys.hasNext())
//		{
//			String key = caanMsgKeys.next();
//			if (key.endsWith("_err"))
//			{
//				// 末尾"_err"が 入力項目のため、"_err"を取り、その項目を入力項目とする
//				//   (注意)入力項目と取得項目名が不一致の場合、入れ直す必要がある
//				String tmpKey = key.substring(0, key.length() - 4);
//				// 項目の設定
//				outMap.put(tmpKey, dataMsg.getString(tmpKey));
//			}
//		}
//	}
	
	/**
	 * <pre>
	 * HashMapから配列に変換する。
	 * ただし、Key及びValueはStringのみを変換（第1階層だけ）
	 * </pre>
	 * @param map 配列に変換したいHashMap
	 * @return String[][] 配列データ
	 */
//	@SuppressWarnings("unchecked")
//	private String[][] getHashMapToInMsg(HashMap<String, String> map, String firstKeyName)
//	{
//		String[][] inMsg = new String[map.size()][2];
//		int i = 1;
//		for(Iterator it = map.entrySet().iterator(); it.hasNext();)
//		{
//			Map.Entry<Object, Object> entry = (Map.Entry)it.next();
//			
//			Object key = entry.getKey();
//			if(key instanceof String)
//			{
//				Object value = entry.getValue();
//				if(firstKeyName.equals((String)key))
//				{
//					// 項目名
//					inMsg[0][0] = (String)key;
//					// 項目の値
//					inMsg[0][1] = (String)value;
//				}
//				else
//				{
//					// 項目名
//					inMsg[i][0] = (String)key;
//					// 項目の値
//					inMsg[i][1] = (String)value;
//					
//					i++;
//				}
//			}
//		}
//		return inMsg;
//	}
	
	/**
	 * 引数で指定された２つのオブジェクトを比較
	 * 
	 * 一致する場合にTRUEを返却
	 * ※ 双方のオブジェクトが「null」である場合も「TRUE」とする。
	 * 
	 * @param obj1 比較元
	 * @param obj2 比較先
	 * @return 比較結果
	 */
	private boolean objEquals(Object obj1, Object obj2)
	{
		if (obj1 == null && obj2 == null)
		{
			return true;
		}
		if (obj1 == null && obj2 != null)
		{
			return false;
		}
		return obj1.equals(obj2);
	}
	/**
	 * 料金プランコード取得CCを呼出します。
	 * <br>
	 * @param handle
	 * @param param
	 * @param scCall
	 * @param ccMsg
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private String execGetPlanCd(SessionHandle handle, 
								IRequestParameterReadWrite param, 
								ServiceComponentRequestInvoker scCall,
								Map<String, Object> dataMap) throws Throwable
	{
		
		// 料金プランコード取得CC入力パラメータの作成
		param.setData(GET_PPLAN_CD_CC, new HashMap<String, Object>());
		
		// パラメタを取得する。
		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(GET_PPLAN_CD_CC);
		
		// 料金コースコード
		outMap.put("pcrs_cd", dataMap.get("pcrs_cd_tv"));
		// 提供方式契約番号
		outMap.put("tk_hoshiki_kei_no", dataMap.get("tk_hoshiki_kei_no"));
		// 基準年月日
		outMap.put("stdardymd", JPCBPCommon.getOpeDate(null));
		
		// 共通コンポーネントの実行
		JKKKikiPplanCdGetCC jkkkikipplancdgetcc = new JKKKikiPplanCdGetCC();
		jkkkikipplancdgetcc.execGetPplanCd(handle, param, GET_PPLAN_CD_CC);

		
		return (String)outMap.get("tv_pplan_cd");
		
	}
	/* ++++++++++ v5.00.00 追加終了 ++++++++++ */
	/* ++++++++++ v5.00.02 追加開始 ++++++++++ */
	
	/**
	 * STB移動処理を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param dataMap
	 * @throws Exception
	 */
	/* ++++++++++ v5.00.03 修正開始 ++++++++++ */
	private String moveTkniKiki(SessionHandle handle, 
								ServiceComponentRequestInvoker scCall, 
								IRequestParameterReadWrite param, 
								String fixedText,
								String funcCode,
								HashMap<String, Object> dataMap,
								HashMap<String, Object> inMap,
								boolean isStb)  throws Exception 
	{
		/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
		String idoDiv = (String)dataMap.get("ido_div");
		String kojiakSbtCd = (String)dataMap.get("kojiak_sbt_cd");
		String kojiUkOptntyIdoDiv = (String)dataMap.get("koji_uk_optnty_ido_div");
		/* ++++++++++ v8.00.02 追加開始 ++++++++++ */
		if (KOJIAK_JUHEN_JUHEN.equals(dataMap.get("kojiak_Juhen"))) {
			idoDiv = IDO_DIV_VALUE_00019;
		}
		else 
		/* ++++++++++ v8.00.02 追加終了 ++++++++++ */
		//住所変更以外かつ工事案件と工事受付契機異動区分が存在する場合、異動区分に工事受付契機異動区分を設定する
		if (!KOJIAK_JUHEN_JUHEN.equals(dataMap.get("kojiak_Juhen")) && kojiakSbtCd != null && !"".equals(kojiakSbtCd)
				&& kojiUkOptntyIdoDiv != null && !"".equals(kojiUkOptntyIdoDiv))
		{
			idoDiv = kojiUkOptntyIdoDiv;
		}
		/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
	/* ++++++++++ v5.00.03 修正終了 ++++++++++ */
		// ***** EKK0341C290 機器提供サービス契約サービス契約変更 *****
		Object[][] ekk0341c290IN = {
			{EKK0341C290CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0341C290},
			{EKK0341C290CBSMsg.FUNC_CODE,           funcCode},
			{EKK0341C290CBSMsg.KKTK_SVC_KEI_NO,     dataMap.get("kktk_svc_kei_no")},
			{EKK0341C290CBSMsg.SVC_KEI_NO,          inMap.get("svc_kei_no")},
			{EKK0341C290CBSMsg.RSV_APLY_YMD,        dataMap.get("rsv_aply_ymd")},
			/* ++++++++++ v8.00.01 修正開始 ++++++++++ */
//			{EKK0341C290CBSMsg.IDO_DIV,             dataMap.get("ido_div")},
			{EKK0341C290CBSMsg.IDO_DIV,             idoDiv},
			/* ++++++++++ v8.00.01 修正終了 ++++++++++ */
			{EKK0341C290CBSMsg.UPD_DTM_BF,          getWorkAreaUpddtm(param, dataMap)},
		};
		CAANMsg ekk0341c290out = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0341c290IN));
		setSvcUpdDtm(param, ekk0341c290out.getString(EKK0341C290CBSMsg.UPD_DTM), fixedText);
		
		if(isStb)
		{
			// ***** EKK0161C080 サービス契約内訳サービス契約変更 *****
			Object[][] ekk0161c080IN = {
				{EKK0161C080CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0161C080},
				{EKK0161C080CBSMsg.FUNC_CODE,           funcCode},
				{EKK0161C080CBSMsg.SVC_KEI_UCWK_NO,     dataMap.get("svc_kei_ucwk_no")},
				{EKK0161C080CBSMsg.SVC_KEI_NO,          inMap.get("svc_kei_no")},
				{EKK0161C080CBSMsg.RSV_APLY_YMD,        dataMap.get("rsv_aply_ymd")},
				/* ++++++++++ v8.00.01 修正開始 ++++++++++ */
//				{EKK0161C080CBSMsg.IDO_DIV,             dataMap.get("ido_div")},
				{EKK0161C080CBSMsg.IDO_DIV,             idoDiv},
				/* ++++++++++ v8.00.01 修正終了 ++++++++++ */
				{EKK0161C080CBSMsg.UPD_DTM_BF,          getWorkAreaUpddtm(param, dataMap)},
			};
			CAANMsg ekk0161c080out = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0161c080IN));
			setSvcUpdDtm(param, ekk0161c080out.getString(EKK0161C080CBSMsg.UPD_DTM), fixedText);
	/* ++++++++++ v5.00.03 修正開始 ++++++++++ */
			return  ekk0341c290out.getString(EKK0161C080CBSMsg.UPD_DTM);
		}
		return  ekk0341c290out.getString(EKK0341C290CBSMsg.UPD_DTM);
	}
	/* ++++++++++ v5.00.03 修正終了 ++++++++++ */
	
	/* ++++++++++ v5.00.03 追加終了 ++++++++++ */
	/* ++++++++++ v5.00.04 追加開始 ++++++++++ */
	/**
	 * 異動予約キャンセル処理を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param dataMap
	 * @param mskmDtlNoKeyFlg
	 * @throws Exception
	 */
	private String canIdoIdoRsv(SessionHandle handle, 
			ServiceComponentRequestInvoker scCall, 
			IRequestParameterReadWrite param, 
			String fixedText,
			String funcCode,
// OM-2020-0000110 MOD START
//			HashMap<String, Object> dataMap)  throws Exception 
			HashMap<String, Object> dataMap,
			Boolean mskmDtlNoKeyFlg)  throws Exception 
// OM-2020-0000110 MOD END
	{
		// ***** EKK1681B001 異動予約一覧照会 *****
// OM-2020-0000110 ADD START
		String mskmDtlNo = mskmDtlNoKeyFlg ? getWorkArea(param, "mskm_dtl_no") : "";
// OM-2020-0000110 ADD END
		Object[][] ekk1681b001IN = {
		{EKK1681B001CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK1681B001},
		{EKK1681B001CBSMsg.FUNC_CODE,           FUNC_CODE_1},
		{EKK1681B001CBSMsg.KEY_SVC_KEI_UCWK_NO, dataMap.get("svc_kei_ucwk_no")},
// OM-2020-0000110 ADD START
		{EKK1681B001CBSMsg.KEY_MSKM_DTL_NO,     mskmDtlNo},
// OM-2020-0000110 ADD END
		{EKK1681B001CBSMsg.KEY_IDO_RSV_DTL_CD, "003"},
		{EKK1681B001CBSMsg.KEY_IDO_RSV_STAT_CD,   "00,03"},
		{EKK1681B001CBSMsg.KEY_RSV_APLY_YMD, JPCBPCommon.getOpeDate(null)},
		};
		CAANMsg[] ekk1681b001outList = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk1681b001IN)).getCAANMsgList(EKK1681B001CBSMsg.EKK1681B001CBSMSG1LIST);
		if(FUNC_CODE_1.equals(funcCode))
		{
			for (int i = 0; i < ekk1681b001outList.length; i++)
			{
				// ■異動予約異動予約状態変更
				// ***** EKK0161C130（サービス契約内訳料金プラン変更中止）*****
				Object[][] ekk0161c130IN = {
						{EKK0161C130CBSMsg.TEMPLATEID,			TEMPLATE_ID_EKK0161C130},
						{EKK0161C130CBSMsg.FUNC_CODE,			FUNC_CODE_1},
						{EKK0161C130CBSMsg.SVC_KEI_UCWK_NO, 	ekk1681b001outList[i].getString(EKK1681A010CBSMsg1List.SVC_KEI_UCWK_NO)},
						{EKK0161C130CBSMsg.MSKM_DTL_NO,			getWorkArea(param, "mskm_dtl_no")},
						{EKK0161C130CBSMsg.UPD_DTM_BF,			getWorkAreaUpddtm(param, dataMap)},
				};
				CAANMsg ekk0161c130Out = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0161c130IN));
				setSvcUpdDtm(param, ekk0161c130Out.getString(EKK0161C130CBSMsg.UPD_DTM), fixedText);
				return  ekk0161c130Out.getString(EKK0161C130CBSMsg.UPD_DTM);
			}
		}
		
		
		return "";
	}
	/* ++++++++++ v5.00.04 追加終了 ++++++++++ */
	
	/* ++++++++++ v5.00.09 追加開始 ++++++++++ */
	/**
	 * オプションサービス解約処理を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param dataMap
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private String opSvcKeiDsl(SessionHandle handle, 
			ServiceComponentRequestInvoker scCall, 
			IRequestParameterReadWrite param, 
			String fixedText,
			String funcCode,
			HashMap<String, Object> dataMap)  throws Exception 
	{
		// データ情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		// STB撤去
		String stbTekkyo = (String)inMap.get("stb_tekkyo");
		// ***** EKK0351B001 オプションサービス契約一覧照会（サービス契約内訳番号） *****
		Object[][] ekk0351b001IN = {
		{EKK0351B001CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0351B001},
		{EKK0351B001CBSMsg.FUNC_CODE,           FUNC_CODE_1},
		{EKK0351B001CBSMsg.KEY_SVC_KEI_UCWK_NO, dataMap.get("svc_kei_ucwk_no")},
		};
		CAANMsg[] ekk0351b001outList = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0351b001IN)).getCAANMsgList(EKK0351B001CBSMsg.EKK0351B001CBSMSG1LIST);
		if(FUNC_CODE_1.equals(funcCode))
		{
			for (int i = 0; i < ekk0351b001outList.length; i++)
			{
				// ■オプションサービス解約処理
				// ***** EKK0351A010（オプションサービス契約一意照会）*****
				Object[][]ekk0351a010IN = {
						{EKK0351A010CBSMsg.TEMPLATEID,			TEMPLATE_ID_EKK0351A010},
						{EKK0351A010CBSMsg.FUNC_CODE,			FUNC_CODE_1},
						{EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO, 	ekk0351b001outList[i].getString(EKK0351B001CBSMsg1List.OP_SVC_KEI_NO)},
						{EKK0351A010CBSMsg.KEY_GENE_ADD_DTM,	ekk0351b001outList[i].getString(EKK0351B001CBSMsg1List.GENE_ADD_DTM)},
				};
				CAANMsg[] ekk0351a010OutList = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0351a010IN)).getCAANMsgList(EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST);
				if(ekk0351a010OutList == null || ekk0351a010OutList.length == 0)
				{
					continue;
				}
				String opSvcKeiStat = ekk0351a010OutList[0].getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);
				// オプションサービス契約ステータスが受付済、照査済の場合、オプションサービス契約キャンセルを実施
				if(OP_SVC_KEI_STAT_UKEZUMI.equals(opSvcKeiStat) || OP_SVC_KEI_STAT_SYOSAZUMI.equals(opSvcKeiStat))
				{
					// ***** EKK0351C220（オプションサービス契約キャンセル）*****
					Object[][]ekk0351c220IN = {
							{EKK0351C220CBSMsg.TEMPLATEID,			TEMPLATE_ID_EKK0351C220},
							{EKK0351C220CBSMsg.FUNC_CODE,			FUNC_CODE_1},
							{EKK0351C220CBSMsg.OP_SVC_KEI_NO, 		ekk0351a010OutList[0].getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_NO)},
							{EKK0351C220CBSMsg.MSKM_DTL_NO,			getWorkArea(param, MSKM_DTL_NO)},
							{EKK0351C220CBSMsg.SVC_CANCEL_RSN_CD,	SVC_CANCEL_RSN_06},
							{EKK0351C220CBSMsg.IDO_DIV,				dataMap.get("ido_div")},
							{EKK0351C220CBSMsg.UPD_DTM_BF,			getWorkAreaUpddtm(param, dataMap)},
					};
					CAANMsg ekk0351c220Out = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0351c220IN));
					setSvcUpdDtm(param, ekk0351c220Out.getString(EKK0351C220CBSMsg.UPD_DTM), fixedText);
				}
				else
				{
					// オプションサービス契約ステータスが受付済、照査済以外の場合
					if (FUNC_CODE_1.equals(funcCode))
					{
						// ***** EKK0351C240（オプションサービス契約解約）*****
						Object[][]ekk0351c240IN = {
								{EKK0351C240CBSMsg.TEMPLATEID,		TEMPLATE_ID_EKK0351C240},
								{EKK0351C240CBSMsg.FUNC_CODE,		FUNC_CODE_1},
								{EKK0351C240CBSMsg.OP_SVC_KEI_NO, 		ekk0351a010OutList[0].getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_NO)},
								{EKK0351C240CBSMsg.MSKM_DTL_NO,			getWorkArea(param, MSKM_DTL_NO)},
								{EKK0351C240CBSMsg.RSV_TSTA_KIBO_YMD,	ekk0351a010OutList[0].getString(EKK0351A010CBSMsg1List.RSV_TSTA_KIBO_YMD)},
								{EKK0351C240CBSMsg.SVC_ENDYMD,			dataMap.get("svc_endymd")},
								{EKK0351C240CBSMsg.SVC_CHRG_ENDYMD,		dataMap.get("svc_endymd")},
								{EKK0351C240CBSMsg.SVC_DLRE_CD,			SVC_DSL_RSN_01},
								{EKK0351C240CBSMsg.SVC_DLRE_MEMO,		""},
								{EKK0351C240CBSMsg.DSL_TNT_USER_ID,		""},
								{EKK0351C240CBSMsg.PNLTY_HASSEI_CD,		dataMap.get("pnlty_hassei_cd")},
								{EKK0351C240CBSMsg.IDO_DIV,				dataMap.get("ido_div")},
								{EKK0351C240CBSMsg.UPD_DTM_BF,			getWorkAreaUpddtm(param, dataMap)},
						};
						CAANMsg ekk0351c240Out = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0351c240IN));
						setSvcUpdDtm(param, ekk0351c240Out.getString(EKK0351C240CBSMsg.UPD_DTM), fixedText);
						// STB撤去ONの場合確定する
						if (STB_TEKKYO_TEKKYO_ON.equals(stbTekkyo))
						{
							// ***** EKK0351C250（オプションサービス契約解約確定）*****
							Object[][]ekk0351c250IN = {
									{EKK0351C250CBSMsg.TEMPLATEID,		TEMPLATE_ID_EKK0351C250},
									{EKK0351C250CBSMsg.FUNC_CODE,		FUNC_CODE_1},
									{EKK0351C250CBSMsg.OP_SVC_KEI_NO, 		ekk0351a010OutList[0].getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_NO)},
									{EKK0351C250CBSMsg.DSLJI_CHRG_FLG,		""},
									{EKK0351C250CBSMsg.SVC_ENDYMD,			dataMap.get("svc_endymd")},
									{EKK0351C250CBSMsg.SVC_CHRG_ENDYMD,		dataMap.get("svc_endymd")},
									{EKK0351C250CBSMsg.SVC_DLRE_CD,			SVC_DSL_RSN_01},
									{EKK0351C250CBSMsg.SVC_DLRE_MEMO,		""},
									{EKK0351C250CBSMsg.DSL_TNT_USER_ID,		""},
									/* ++++++++++ v6.00.01 追加開始 ++++++++++ */
									{ EKK0351C250CBSMsg.PLAN_END_SBT_CD, PLAN_END_SBT_CD_2},
									/* ++++++++++ v6.00.01 追加終了 ++++++++++ */
									{EKK0351C250CBSMsg.IDO_DIV,				dataMap.get("ido_div")},
									{EKK0351C250CBSMsg.UPD_DTM_BF,			getWorkAreaUpddtm(param, dataMap)},
							};
							CAANMsg ekk0351c250Out = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk0351c250IN));
							setSvcUpdDtm(param, ekk0351c250Out.getString(EKK0351C250CBSMsg.UPD_DTM), fixedText);
						}
					}
				}
			}
		}
		return  getWorkAreaUpddtm(param, dataMap);

	}
	/**
	 * 機器回収登録
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void kikiKaishu(SessionHandle handle, 
			 			  ServiceComponentRequestInvoker scCall, 
			 			  IRequestParameterReadWrite param, 
			 			  String fixedText,
			 			  String funcCode,
			 			  HashMap<String, Object> dataMap,
			 			  CAANMsg ekk0341a010pk) throws Exception 
	{
		// データ情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		// 機器回収登録
		Object[][] ekk2151d010in = {
			{EKK2151D010CBSMsg.TEMPLATEID,             TEMPLATE_ID_EKK2151D010},
			{EKK2151D010CBSMsg.FUNC_CODE,              funcCode},
			{EKK2151D010CBSMsg.KKTK_SVC_KEI_NO,		dataMap.get("kktk_svc_kei_no")},	
			{EKK2151D010CBSMsg.KIKI_CHG_NO,			ekk0341a010pk.getString(EKK0341A010CBSMsg1List.KIKI_CHG_NO)},
			{EKK2151D010CBSMsg.KIKI_KAISHU_YMD,		dataMap.get("svc_endymd")},
			{EKK2151D010CBSMsg.RRKS_NM,				inMap.get("mskmsha_nm")},
			{EKK2151D010CBSMsg.KIKI_KAISHU_BIKO_1, 	inMap.get("kojiak_biko_1")},
			{EKK2151D010CBSMsg.KIKI_KAISHU_BIKO_2,	inMap.get("kojiak_biko_2")},
			{EKK2151D010CBSMsg.IDO_DIV,				dataMap.get("ido_div")},
			{EKK2151D010CBSMsg.KIKI_KAISHU_UK_YMD,  ""},
			{EKK2151D010CBSMsg.KIKI_KAISHU_REQ_YMD, ""},
		};
		
		// 返品機器受付
		callSC(handle, scCall, param, fixedText, editInMsg(param, ekk2151d010in));
	}
	/* ++++++++++ v5.00.09 追加終了 ++++++++++ */
	/* ++++++++++ v6.00.00 追加開始 ++++++++++ */
	/**
	 * 割引サービス対象契約を論理削除します。
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param kktkSvcKeiNo
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execWriSvcDelete(SessionHandle handle,
									ServiceComponentRequestInvoker scCall,
									IRequestParameterReadWrite param,
									String dataMapKey,
									HashMap<String, Object> temporaryData,
									String kktkSvcKeiNo) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// 割引サービス契約一覧照会（サービス契約番号）
		CAANMsg[] ekk0451b002cbsMsg1list = execEKK0451B002(handle, scCall, param, dataMapKey, temporaryData, (String)ccMsg.get("svc_kei_no") );
		
		if(ekk0451b002cbsMsg1list == null || ekk0451b002cbsMsg1list.length == 0)
		{
			return;
		}
		
		String wrib_svc_kei_no = "";
		String wrib_svc_trgt_kei_no = "";
		
		for (int i = 0; i < ekk0451b002cbsMsg1list.length; i++) {
			
			wrib_svc_kei_no = (String)ekk0451b002cbsMsg1list[i].getString(EKK0451B002CBSMsg1List.WRIB_SVC_KEI_NO);
		
			CAANMsg[] ekk0481b001cbsMsg1list = execEKK0481B001(handle, scCall, param, dataMapKey, temporaryData, kktkSvcKeiNo, wrib_svc_kei_no );
			
			if(ekk0481b001cbsMsg1list == null || ekk0481b001cbsMsg1list.length == 0)
			{
				continue;
			}
			
			for (int j = 0; j < ekk0481b001cbsMsg1list.length; j++) {
				
				wrib_svc_kei_no = (String)ekk0481b001cbsMsg1list[j].getString(EKK0481B001CBSMsg1List.WRIB_SVC_KEI_NO);
				wrib_svc_trgt_kei_no = (String)ekk0481b001cbsMsg1list[j].getString(EKK0481B001CBSMsg1List.WRIB_SVC_TRGT_KEI_NO);
				
				// 割引サービス対象契約論理削除
				execEKK0481E010(handle, scCall, param, dataMapKey, wrib_svc_kei_no, wrib_svc_trgt_kei_no, ccMsg);
			}
		}
	}
	
	/**
	 * 割引サービス対象契約一覧照会<br>
	 * <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param ekk2101b002CbsMsg
	 * @param adchgDtlSbtCd
	 * @return CAANMsg[]
	 * @throws Exception
	 */
	private CAANMsg[] execEKK0481B001(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param,
			String dataMapKey, HashMap<String, Object> temporaryData, String kktkSvcKeiNo, String wrib_svc_kei_no) throws Exception
	{
		// ***** EKK0481B001（割引サービス対象契約一覧照会）******
		Object[][] ekk0481b001IN = {
				{ EKK0481B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0481B001 },
				{ EKK0481B001CBSMsg.FUNC_CODE, FUNC_CODE_1 }, // "3"固定
				{ EKK0481B001CBSMsg.KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo },
				{ EKK0481B001CBSMsg.KEY_WRIB_SVC_KEI_NO, wrib_svc_kei_no }
		};

		// 割引サービス対象契約一覧照会サービスインターフェイスの実行
		CAANMsg[] ekk0481b001cbsMsg1list = callSC(handle, scCall, param, dataMapKey, editInMsg(param, ekk0481b001IN)).getCAANMsgList(
				EKK0481B001CBSMsg.EKK0481B001CBSMSG1LIST);


		return ekk0481b001cbsMsg1list;
	}
	/**
	 * 割引サービス契約一覧照会（サービス契約番号）<br>
	 * <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param ekk2101b002CbsMsg
	 * @param adchgDtlSbtCd
	 * @return CAANMsg[]
	 * @throws Exception
	 */
	private CAANMsg[] execEKK0451B002(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param,
			String dataMapKey, HashMap<String, Object> temporaryData, String svcKeiNo) throws Exception
	{
		// ***** EKK0451B002（割引サービス契約一覧照会（サービス契約番号））******
		Object[][] ekk0451b002IN = {
				{ EKK0451B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0451B002 },
				{ EKK0451B002CBSMsg.FUNC_CODE, FUNC_CODE_1 }, // "1"固定
				{ EKK0451B002CBSMsg.KEY_SVC_KEI_NO, svcKeiNo }
		};

		// 割引サービス契約一覧照会（サービス契約番号）サービスインターフェイスの実行
		CAANMsg[] ekk0451b002cbsMsg1list = callSC(handle, scCall, param, dataMapKey, editInMsg(param, ekk0451b002IN)).getCAANMsgList(
				EKK0451B002CBSMsg.EKK0451B002CBSMSG1LIST);

		return ekk0451b002cbsMsg1list;
	}
	
	/**
	 * 割引サービス対象契約論理削除 <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param pcrsCd
	 * @param pplanCd
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK0481E010(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param, String dataMapKey,
			String wrib_svc_kei_no, String wrib_svc_trgt_kei_no, HashMap inMap) throws Throwable
	{
		
		// ***** EKK0481E010（割引サービス対象契約論理削除）*****
		Object[][] ekk0481e010IN = {
				{ EKK0481E010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0481E010 },
				{ EKK0481E010CBSMsg.FUNC_CODE, inMap.get("func_code") },
				{ EKK0481E010CBSMsg.WRIB_SVC_KEI_NO, wrib_svc_kei_no },
				{ EKK0481E010CBSMsg.WRIB_SVC_TRGT_KEI_NO, wrib_svc_trgt_kei_no },
				{ EKK0481E010CBSMsg.UPD_DTM_BF, getWorkAreaUpddtm(param, inMap) }
		};
		
		// 更新処理実行
		CAANMsg ekk0481e010Msg_out = callSC(handle, scCall, param, dataMapKey, editInMsg(param, ekk0481e010IN));
		
		// 更新タイムスタンプをワーク領域にセットします。
		setSvcUpdDtm(param, ekk0481e010Msg_out.getString(EKK0481E010CBSMsg.UPD_DTM), dataMapKey);
	}
	
	/**
	 * 論理削除対象課金先候補リストを作成し、temporaryDataに格納します。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void getDeleteKakinsIchiran(SessionHandle handle,
										ServiceComponentRequestInvoker scCall,
										IRequestParameterReadWrite param,
										String dataMapKey,
										HashMap<String, Object> temporaryData) throws Throwable
	{
//		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// 論理削除対象課金先候補リストの取得
		ArrayList<HashMap<String, Object>> kakin_kiki_list = (ArrayList<HashMap<String, Object>>)temporaryData.get(KAKINS_DEL_KHO_LIST);
		
		if(kakin_kiki_list == null)
		{
			kakin_kiki_list = new ArrayList<HashMap<String, Object>>();
			
			temporaryData.put(KAKINS_DEL_KHO_LIST, kakin_kiki_list);
		}
		
		// EKK0491B005_請求契約一覧照会（サービス契約番号）の実行
		CAANMsg[] ekk0491b507cbsMsg1List = execEKK0491B507(handle, scCall, param, temporaryData, dataMapKey);
		
		// 取得結果が０件時、処理終了
		if(ekk0491b507cbsMsg1List == null || ekk0491b507cbsMsg1List.length == 0)
		{
			return;
		}
		
		// 請求契約番号を取得する。
		String key_seiky_key_no = ekk0491b507cbsMsg1List[0].getString(EKK0491B507CBSMsg1List.SEIKY_KEI_NO);
		
		// 最終更新年月日時分秒を設定する。
		temporaryData.put(KK_COM_SEIKY_UP_DTM, ekk0491b507cbsMsg1List[0].getString(EKK0491B507CBSMsg1List.LAST_UPD_DTM));
		
		// EKK0321B002_課金先一覧照会（請求契約番号／サービス契約番号）
		CAANMsg[] ekk0321b002cbsMsg1List = execEKK0321B002(handle, scCall, param, temporaryData, dataMapKey, key_seiky_key_no);
		
		if(ekk0321b002cbsMsg1List != null && 0 < ekk0321b002cbsMsg1List.length)
		{
			// 課金先一覧照会（請求契約番号／サービス契約番号）取得件数分繰り返します。
			for (CAANMsg ekk0321b002Msg : ekk0321b002cbsMsg1List)
			{
				// 課金先番号
				String key_kakins_no = ekk0321b002Msg.getString(EKK0321B002CBSMsg1List.KAKINS_NO);
				
				// 課金先一意照会の実行
				CAANMsg[] ekk0321a010cbsMsg1List = execEKK0321A010(handle, scCall, param, temporaryData, dataMapKey, key_kakins_no);
				
				if(ekk0321a010cbsMsg1List != null && 0 < ekk0321a010cbsMsg1List.length)
				{
					// 課金先一意照会の取得
					CAANMsg ekk0321a010cbsMsg = ekk0321a010cbsMsg1List[0];
					
					// 機器提供サービス契約番号がセットされていればリストに格納
					String kktk_svc_kei_no_kakins = getNullToStr(ekk0321a010cbsMsg.getString(EKK0321A010CBSMsg1List.KKTK_SVC_KEI_NO));
					if(!"".equals(kktk_svc_kei_no_kakins))
					{
						// key:機器提供サービス契約番号、value:課金先一意照会取得結果で課金先・機器提供サービス契約リストに格納する。
						HashMap<String, Object> kakin_kiki_data = new HashMap<String, Object>();
						kakin_kiki_data.put(kktk_svc_kei_no_kakins, ekk0321a010cbsMsg);
						
						kakin_kiki_list.add(kakin_kiki_data);
					}
				}
			}
		}
	}
	
	/**
	 * 論理削除対象課金先候補リストから課金先情報を取得して課金先削除を実行します。
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param kktkSvcKeiNo
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void isDeleteKakins(SessionHandle handle,
									ServiceComponentRequestInvoker scCall,
									IRequestParameterReadWrite param,
									String dataMapKey,
									HashMap<String, Object> temporaryData,
									String kktkSvcKeiNo) throws Throwable
	{
		// 論理削除対象課金先候補リストの取得
		ArrayList<HashMap<String, Object>> kakin_kiki_list = (ArrayList<HashMap<String, Object>>)temporaryData.get(KAKINS_DEL_KHO_LIST);

		for( HashMap<String, Object> kakin_kiki_kho : kakin_kiki_list )
		{
			if(kakin_kiki_kho.containsKey(kktkSvcKeiNo))
			{
				//  論理削除対象課金先候補リストから key:機器提供サービス契約番号で課金先番号を取得する。
				CAANMsg ekk0321a010cbsMsg = (CAANMsg)kakin_kiki_kho.get(kktkSvcKeiNo);
				
				// 取得した課金先番号に紐付く課金先を論理削除
				execEKK0321E010(handle, scCall, param, temporaryData, dataMapKey, ekk0321a010cbsMsg);
				break;
			}
			else
			{
				continue;
			}
		}
	}
	/**
	 * 課金論理削除を実行します。
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param temporaryData
	 * @param dataMapKey
	 * @param ekk0321a010cbsMsg
	 * @throws Throwable
	 */
	private void execEKK0321E010(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param,
									HashMap<String, Object> temporaryData,
									String dataMapKey,
									CAANMsg ekk0321a010cbsMsg) throws Throwable
	{
		// 機能コードは"1"固定
		// ***** EKK0321E010（課金論理削除）*****
		Object[][] ekk0321e010IN = {
				{ EKK0321E010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0321E010 }, 
				{ EKK0321E010CBSMsg.FUNC_CODE,        FUNC_CODE_1 },
				{ EKK0321E010CBSMsg.KAKINS_NO,        ekk0321a010cbsMsg.getString(EKK0321A010CBSMsg1List.KAKINS_NO) },
				{ EKK0321E010CBSMsg.UPD_DTM_BF,       getKakinsUpDtm(param, (String)temporaryData.get(KK_COM_SEIKY_UP_DTM)) },
		};
		
		// サービスインターフェースの実行
		CAANMsg ekk0321e010OUT = callSC(handle, scCall, param, dataMapKey, editInMsg(param, ekk0321e010IN));
		
		// 課金先の排他制御用更新タイムスタンプを更新する。
		setKakinsUpDtm(param, ekk0321e010OUT.getString(EKK0321E010CBSMsg.UPD_DTM));
	}
	/**
	 * 課金先の更新タイムスタンプを取得します。
	 * 
	 * @param param
	 *            リクエストパラメータ
	 * @param updDtm
	 *            更新時間
	 * @throws Exception
	 */
	private void setKakinsUpDtm(IRequestParameterReadWrite param, String updDtm) throws Exception
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();

		if(updDtm != null && !"".equals(updDtm))
		{
			workMap.put(KK_COM_SEIKY_UP_DTM, updDtm);
		}

	}
	/**
	 * サービス契約の更新タイムスタンプを取得します。
	 * 
	 * @param param
	 *            リクエストパラメータ
	 * @return UpDtm 更新時間
	 * @throws Exception
	 */
	private String getKakinsUpDtm(IRequestParameterReadWrite param, String updDtm) throws Exception
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		String updDtm_bf = getNullToStr((String)workMap.get(KK_COM_SEIKY_UP_DTM));
		
		if("".equals(updDtm_bf))
		{
			return updDtm;
		}
		else
		{
			return (String)workMap.get(KK_COM_SEIKY_UP_DTM);
		}
	}
	/**
	 * パラメタがNullの場合空白を返却します。
	 * 
	 * @param str
	 *            文字列
	 * @return str
	 */
	private String getNullToStr(String str)
	{
		return JPCUtilCommon.Rtrim(str);
	}
	/**
	 * 請求契約一覧照会（サービス契約番号）を実行します。
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param temporaryData
	 * @param dataMapKey
	 * @return
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg[] execEKK0491B507(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param,
										HashMap<String, Object> temporaryData,
										String dataMapKey) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// 機能コードは"1"固定
		// ***** EKK0491B507（請求契約一覧照会（サービス契約番号））*****
		Object[][] ekk0491b507IN = {
				{ EKK0491B507CBSMsg.TEMPLATEID,     TEMPLATE_ID_EKK0491B507 }, 
				{ EKK0491B507CBSMsg.FUNC_CODE,      FUNC_CODE_1 },
				{ EKK0491B507CBSMsg.KEY_SVC_KEI_NO,  (String)ccMsg.get("svc_kei_no")  },
		};
		
		// サービスインターフェースの実行
		return callSC(handle, scCall, param, dataMapKey, editInMsg(param, ekk0491b507IN)).getCAANMsgList(EKK0491B507CBSMsg.EKK0491B507CBSMSG1LIST);
	}
	/**
	 * 課金先一覧照会（請求契約番号／サービス契約番号）を実行します。
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param temporaryData
	 * @param dataMapKey
	 * @param key_seiky_kei_no
	 * @return
	 * @throws Throwable
	 */
	private CAANMsg[] execEKK0321B002(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param,
										HashMap<String, Object> temporaryData,
										String dataMapKey,
										String key_seiky_kei_no) throws Throwable
	{
		// 機能コードは"1"固定
		// ***** EKK0321B002（課金先一覧照会（請求契約番号／サービス契約番号））*****
		Object[][] ekk0321b002IN = {
				{ EKK0321B002CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0321B002 }, 
				{ EKK0321B002CBSMsg.FUNC_CODE,        FUNC_CODE_1 },
				{ EKK0321B002CBSMsg.KEY_SEIKY_KEI_NO, key_seiky_kei_no},
		};
		
		// サービスインターフェースの実行
		return callSC(handle, scCall, param, dataMapKey, editInMsg(param, ekk0321b002IN)).getCAANMsgList(EKK0321B002CBSMsg.EKK0321B002CBSMSG1LIST);
	}
	
	/**
	 * 課金先一意照会を実行します。
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param temporaryData
	 * @param dataMapKey
	 * @param key_kakins_no
	 * @return
	 * @throws Throwable
	 */
	private CAANMsg[] execEKK0321A010(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param,
										HashMap<String, Object> temporaryData,
										String dataMapKey,
										String key_kakins_no) throws Throwable
	{
		// 機能コードは"1"固定
		// ***** EKK0321A010（課金先一意照会）*****
		Object[][] ekk0321a010IN = {
				{ EKK0321A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0321A010 }, 
				{ EKK0321A010CBSMsg.FUNC_CODE,        FUNC_CODE_1 },
				{ EKK0321A010CBSMsg.KEY_KAKINS_NO,    key_kakins_no },
		};
		
		// サービスインターフェースの実行
		return callSC(handle, scCall, param, dataMapKey, editInMsg(param, ekk0321a010IN)).getCAANMsgList(EKK0321A010CBSMsg.EKK0321A010CBSMSG1LIST);
	}
	/* ++++++++++ v6.00.00 追加終了 ++++++++++ */
	/* ++++++++++ v6.00.02 追加開始 ++++++++++ */	
	/**
	 * 請求先一意照会を実行します。 <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param temporaryData
	 * @param dataMapKey
	 * @param key_kakins_no
	 * @return
	 * @throws Throwable
	 */
	private CAANMsg[] execEKK0771A010(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String dataMapKey,
			String key_kakins_no) throws Throwable {
		// 機能コードは"1"固定
		// ***** EKK0771A010（請求先一意照会）*****
		Object[][] ekk0771a010IN = {
				{ EKK0771A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0771A010 },
				{ EKK0771A010CBSMsg.FUNC_CODE, FUNC_CODE_1 },
				{ EKK0771A010CBSMsg.KEY_KKTK_SVC_CD, key_kakins_no }, };

		// サービスインターフェースの実行
		return callSC(handle, scCall, param, dataMapKey,
				editInMsg(param, ekk0771a010IN)).getCAANMsgList(
						EKK0771A010CBSMsg.EKK0771A010CBSMSG1LIST);
	}
	/* ++++++++++ v6.00.02 追加終了 ++++++++++ */	
	
	/**
	 * 機器オプションサービス契約解約を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void dslRsvKikiOpt(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String fixedText,
							String funcCode,
							HashMap<String, Object> dataMap,
							HashMap<String, Object> kkopMap
							  ) throws Exception 
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(fixedText);
		String idoDiv = (String)dataMap.get("ido_div");
		if (KOJIAK_JUHEN_JUHEN.equals(dataMap.get("kojiak_Juhen"))) {
			idoDiv = IDO_DIV_VALUE_00019;
		}
		// ***** EKK2811C140機器オプションサービス契約解約 *****
		Object[][] EKK2811C140IN = {
				{ EKK2811C140CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2811C140 },
				{ EKK2811C140CBSMsg.FUNC_CODE, funcCode },
				{ EKK2811C140CBSMsg.KKOP_SVC_KEI_NO,   (String)kkopMap.get("kkop_svc_kei_no")},
				{ EKK2811C140CBSMsg.MSKM_DTL_NO,  getWorkArea(param, MSKM_DTL_NO) },
				{ EKK2811C140CBSMsg.RSV_TSTA_KIBO_YMD,  "" },
				{ EKK2811C140CBSMsg.SVC_ENDYMD,  (String)dataMap.get("svc_endymd") },
				{ EKK2811C140CBSMsg.SVC_CHRG_ENDYMD,  (String)dataMap.get("svc_endymd") },
				{ EKK2811C140CBSMsg.SVC_DLRE_CD,  SVC_DSL_RSN_01 },
				{ EKK2811C140CBSMsg.SVC_DLRE_MEMO,  "" },
				{ EKK2811C140CBSMsg.PNLTY_HASSEI_CD,  (String)dataMap.get("pnlty_hassei_cd") },
				{ EKK2811C140CBSMsg.IDO_DIV, idoDiv },
				{ EKK2811C140CBSMsg.SVC_KEI_NO, (String)ccMsg.get("svc_kei_no") },
				{ EKK2811C140CBSMsg.UPD_DTM_BF, getWorkAreaUpddtm(param, dataMap)},
		};
		
		// 更新処理実行
		CAANMsg ekk2811c140out = callSC(handle, scCall, param, fixedText, editInMsg(param, EKK2811C140IN));
		setSvcUpdDtm(param, ekk2811c140out.getString(EKK2811C140CBSMsg.UPD_DTM), fixedText);
	}
	/**
	 * 機器提供サービス契約解約確定を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Exception
	 */
	private String dslFixKikiOpt(SessionHandle handle, 
							   ServiceComponentRequestInvoker scCall, 
							   IRequestParameterReadWrite param, 
							   String fixedText,
							   String funcCode,
								HashMap<String, Object> dataMap,
								HashMap<String, Object> kkopMap,
								HashMap<String, String> dslSetYmdMap
							   ) throws Exception 
	{

		String svcKeiStat = (String)dataMap.get("svc_kei_stat_jh_new");
		// 課金
		String dslJiKakin = "1";
		
		if(svcKeiStat != null && SVC_KEI_STAT_TEIKETSUZUMI.compareTo(svcKeiStat) >= 0)
		{
			// 非課金を設定
			dslJiKakin = "0";
		}

		// ***** EKK2811C150（機器オプションサービス契約解約確定）*****
		Object[][] ekk2811c150IN = {
				{ EKK2811C150CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2811C150 },
				{ EKK2811C150CBSMsg.FUNC_CODE, funcCode },
				{ EKK2811C150CBSMsg.KKOP_SVC_KEI_NO,  (String)kkopMap.get("kkop_svc_kei_no")},
				{ EKK2811C150CBSMsg.SVC_CHRG_STAYMD,  (String)dslSetYmdMap.get(EKK2811C150CBSMsg.SVC_CHRG_STAYMD) },
				{ EKK2811C150CBSMsg.SVC_CHRG_ENDYMD,  (String)dslSetYmdMap.get(EKK2811C150CBSMsg.SVC_CHRG_ENDYMD) },
				/* ++++++++++ v8.00.00 変更開始 ++++++++++ */
//				{ EKK2811C150CBSMsg.PLAN_CHRG_STAYMD,  (String)dslSetYmdMap.get(EKK2811C150CBSMsg.SVC_ENDYMD) },
				{ EKK2811C150CBSMsg.PLAN_CHRG_STAYMD,  (String)dslSetYmdMap.get(EKK2811C150CBSMsg.PLAN_CHRG_STAYMD) },
				/* ++++++++++ v8.00.00 変更終了 ++++++++++ */
				{ EKK2811C150CBSMsg.PLAN_ENDYMD,  (String)dslSetYmdMap.get(EKK2811C150CBSMsg.PLAN_ENDYMD) },
				{ EKK2811C150CBSMsg.PLAN_CHRG_ENDYMD,  (String)dslSetYmdMap.get(EKK2811C150CBSMsg.SVC_CHRG_STAYMD) },
				{ EKK2811C150CBSMsg.SVC_ENDYMD,  (String)dslSetYmdMap.get(EKK2811C150CBSMsg.SVC_ENDYMD) },
				{ EKK2811C150CBSMsg.SVC_DLRE_CD,  SVC_DSL_RSN_01 },
				{ EKK2811C150CBSMsg.SVC_DLRE_MEMO,  "" },
				{ EKK2811C150CBSMsg.DSL_JI_CHRG,  dslJiKakin },
				{ EKK2811C150CBSMsg.UPD_DTM_BF, getWorkAreaUpddtm(param, dataMap)},
		};
		
		CAANMsg ekk2811c150out = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk2811c150IN));
		setSvcUpdDtm(param, ekk2811c150out.getString(EKK2811C150CBSMsg.UPD_DTM), fixedText);
		return ekk2811c150out.getString(EKK2811C150CBSMsg.GENE_ADD_DTM);
		
	}

	
	/**
	 * 機器オプションサービス契約キャンセルを実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCode
	 * @param dataMap
	 * @return
	 * @throws Exception
	 */
	private void canRsvKikiOpt(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String fixedText,
							String funcCode,
							HashMap<String, Object> dataMap,
							HashMap<String, Object> kkopMap
							  ) throws Exception 
	{
		String idoDiv = (String)dataMap.get("ido_div");
		if (KOJIAK_JUHEN_JUHEN.equals(dataMap.get("kojiak_Juhen"))) {
			idoDiv = IDO_DIV_VALUE_00019;
		}
		// ***** EKK2811C110（機器オプションサービス契約キャンセル）*****
		Object[][] EKK2811C110IN = {
				{ EKK2811C110CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2811C110 },
				{ EKK2811C110CBSMsg.FUNC_CODE, funcCode },
				{ EKK2811C110CBSMsg.KKOP_SVC_KEI_NO,  (String)kkopMap.get("kkop_svc_kei_no")},
				{ EKK2811C110CBSMsg.MSKM_DTL_NO,  getWorkArea(param, MSKM_DTL_NO) },
				{ EKK2811C110CBSMsg.SVC_CANCEL_RSN_CD,  SVC_DSL_RSN_01 },
				{ EKK2811C110CBSMsg.IDO_DIV, idoDiv },
				{ EKK2811C110CBSMsg.UPD_DTM_BF, getWorkAreaUpddtm(param, dataMap)},
		};
		
		// 更新処理実行
		CAANMsg ekk2811c110out = callSC(handle, scCall, param, fixedText, editInMsg(param, EKK2811C110IN));
		setSvcUpdDtm(param, ekk2811c110out.getString(EKK2811C140CBSMsg.UPD_DTM), fixedText);
	}

	/**
	 * 機器オプションサービス契約解約取消 <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param ekk2811a010Msg
	 * @return CAANMsg
	 * @throws Throwable
	 */
	private void cancelDslKikiOpt(SessionHandle handle, 
			ServiceComponentRequestInvoker scCall, 
			IRequestParameterReadWrite param, 
			String fixedText,
			String funcCode,
			HashMap<String, Object> dataMap,
			HashMap<String, Object> kkopMap
			) throws Throwable
	{
		String idoDiv = (String)dataMap.get("ido_div");
		if (KOJIAK_JUHEN_JUHEN.equals(dataMap.get("kojiak_Juhen"))) {
			idoDiv = IDO_DIV_VALUE_00019;
		}
		// ***** EKK2811C200（機器オプションサービス契約解約取消）*****
		Object[][] EKK2811C200IN = {
				{ EKK2811C200CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2811C200 },
				{ EKK2811C200CBSMsg.FUNC_CODE, funcCode },
				{ EKK2811C200CBSMsg.KKOP_SVC_KEI_NO,  (String)kkopMap.get("kkop_svc_kei_no")},
				{ EKK2811C200CBSMsg.MSKM_DTL_NO,  getWorkArea(param, MSKM_DTL_NO) },
				{ EKK2811C200CBSMsg.IDO_DIV, idoDiv },
				{ EKK2811C200CBSMsg.UPD_DTM_BF, getWorkAreaUpddtm(param, dataMap)},
		};
		
		// 更新処理実行
		CAANMsg ekk2811c200out = callSC(handle, scCall, param, fixedText, editInMsg(param, EKK2811C200IN));
		// 更新タイムスタンプをワーク領域にセットします。
		setSvcUpdDtm(param, ekk2811c200out.getString(EKK0341C340CBSMsg.UPD_DTM), fixedText);

	}
	/**
	 * 機器オプションサービス契約解約確定取消 <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param ekk2811a010Msg
	 * @return CAANMsg
	 * @throws Throwable
	 */
	private void cancelDslFixKikiOpt(SessionHandle handle, 
			ServiceComponentRequestInvoker scCall, 
			IRequestParameterReadWrite param, 
			String fixedText,
			String funcCode,
			HashMap<String, Object> dataMap,
			HashMap<String, Object> kkopMap
			) throws Throwable
	{
		
		// ***** EKK2811C170（機器オプションサービス契約解約中止）*****
		Object[][] ekk2811c210IN = {
				{ EKK2811C210CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2811C210 },
				{ EKK2811C210CBSMsg.FUNC_CODE, funcCode },
				{ EKK2811C210CBSMsg.KKOP_SVC_KEI_NO,  (String)kkopMap.get("kkop_svc_kei_no")},
				{ EKK2811C210CBSMsg.MSKM_DTL_NO, getWorkArea(param, MSKM_DTL_NO) },
				{ EKK2811C210CBSMsg.UPD_DTM_BF, getWorkAreaUpddtm(param, dataMap)},
		};
		
		// 更新処理実行
		CAANMsg ekk2811c210out = callSC(handle, scCall, param, fixedText, editInMsg(param, ekk2811c210IN));
		// 更新タイムスタンプをワーク領域にセットします。
		setSvcUpdDtm(param, ekk2811c210out.getString(EKK0341C340CBSMsg.UPD_DTM), fixedText);

	}
	
	/**
	 * 機器オプションサービス契約一意照会メソッド
	 * <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @return CAANMsg
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg execEKK2811A010(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param, 
										String dataMapKey,
										String kkopSvcKeiNo) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// 機器オプションサービス契約情報を取得
		// ***** EKK2811A010（機器オプションサービス契約一意照会）*****
		Object[][] ekk2811a010IN = {
			{EKK2811A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK2811A010},
			{EKK2811A010CBSMsg.FUNC_CODE,        FUNC_CODE_2}, // カレント
			{EKK2811A010CBSMsg.KEY_KKOP_SVC_KEI_NO,   kkopSvcKeiNo},
			{EKK2811A010CBSMsg.KEY_GENE_ADD_DTM, ""},
			{EKK2811A010CBSMsg.KEY_RSV_APLY_YMD, getNullToStr((String)ccMsg.get("stdardYmd"))},
		};
		// S-I/F実行・出力結果を格納する。
		return callSC(handle, scCall, param, dataMapKey,  editInMsg(param, ekk2811a010IN)).getCAANMsgList(EKK2811A010CBSMsg.EKK2811A010CBSMSG1LIST)[0];
	}
	/* ++++++++++ v8.00.00 変更開始 ++++++++++ */
//	/**
//	 * 解約設定日付特定メソッド
//	 * <br>
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param dataMapKey
//	 * @param temporaryData
//	 * @param ekk2811a010Msg
//	 * @return HashMap
//	 * @throws Throwable
//	 */
//	@SuppressWarnings({ "unchecked"})
//	private HashMap<String, String> getDslSetYmdMap(SessionHandle handle, 
//														ServiceComponentRequestInvoker scCall, 
//														IRequestParameterReadWrite param, 
//														String dataMapKey,
//														CAANMsg ekk2811a010Msg) throws Throwable
//	{
//		
//		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
//		String unyoYmd = getNullToStr((String)ccMsg.get("stdardYmd"));
//		
//		HashMap<String, String> dslSetYmdMap = new HashMap<String, String>();
//		// サービス課金開始年月日
//		String svcChrgStartYmd = getNullToStr(ekk2811a010Msg.getString(EKK2811A010CBSMsg1List.SVC_CHRG_STAYMD));
//		// サービス課金終了年月日
//		String svcChrgEndYmd = getNullToStr(ekk2811a010Msg.getString(EKK2811A010CBSMsg1List.SVC_CHRG_ENDYMD));
//		// サービス終了年月日（画面入力の解約日）
//		String svcEndYmd = getNullToStr((String)ccMsg.get("dsl_ymd_tekkyo"));
//		
//		// 運用日より過去（即日解約の場合）
//		if(unyoYmd.compareTo(svcEndYmd) >= 0)
//		{
//			if(!"".equals(svcChrgStartYmd))
//			{
//				// 翌月1日取得
//				String nextMonthFirstDay = getNextMonthFirstDay(unyoYmd);
//				
//				// 同月解約の場合、サービス課金開始年月日を置き換えます。
//				if(nextMonthFirstDay.equals(svcChrgStartYmd))
//				{
//					// サービス開始日を設定
//					svcChrgStartYmd = getNullToStr(ekk2811a010Msg.getString(EKK2811A010CBSMsg1List.SVC_STAYMD));
//				}
//			}
//			
//		}
//		// サービス終了日の前日を設定
//		if(!"".equals(svcEndYmd))
//		{
//			svcChrgEndYmd = JPCDateUtil.addDay(svcEndYmd, -1);
//		}
//		
//		// サービス終了年月日
//		dslSetYmdMap.put(EKK2811C150CBSMsg.SVC_ENDYMD, svcEndYmd);
//		// サービス課金終了年月日
//		dslSetYmdMap.put(EKK2811C150CBSMsg.SVC_CHRG_ENDYMD, svcChrgEndYmd);
//		// サービス課金開始年月日
//		dslSetYmdMap.put(EKK2811C150CBSMsg.SVC_CHRG_STAYMD, svcChrgStartYmd);
////		// プラン開始年月日
////		dslSetYmdMap.put(EKK2811C150CBSMsg.PLAN_STAYMD, );
//		// プラン終了年月日
//		dslSetYmdMap.put(EKK2811C150CBSMsg.PLAN_ENDYMD, svcEndYmd);
//		// プラン課金終了年月日
//		dslSetYmdMap.put(EKK2811C150CBSMsg.PLAN_CHRG_ENDYMD, svcChrgEndYmd);
//		
//		
//		return dslSetYmdMap;
//	}
	/**
	 * 解約設定日付特定メソッド
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param ekk2811a010Msg
	 * @return HashMap
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, String> getDslSetYmdMap(SessionHandle handle, 
														ServiceComponentRequestInvoker scCall, 
														IRequestParameterReadWrite param, 
														String dataMapKey,
														CAANMsg ekk2811a010Msg) throws Throwable
	{
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		String unyoYmd = getNullToStr((String)ccMsg.get("stdardYmd"));
		String svcKeiNo = getNullToStr((String)ccMsg.get("svc_kei_no_jh_tekkyo"));
		if(svcKeiNo == null || "".equals(svcKeiNo))
		{
			svcKeiNo = getNullToStr((String)ccMsg.get("svc_kei_no"));
		}
		String svcSvcChrgStartYmd ="";
		
		// サービス契約データを取得
		Object[][] ekk0081a010IN = {
				{EKK0081A010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0081A010},
				{EKK0081A010CBSMsg.FUNC_CODE,           FUNC_CODE_2},
				{EKK0081A010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo},
				{EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, JPCBPCommon.getOpeDate(null)},
				};
				CAANMsg[] ekk0081a010outList = callSC(handle, scCall, param, dataMapKey, editInMsg(param, ekk0081a010IN)).getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		if(ekk0081a010outList != null && ekk0081a010outList.length > 0){
			CAANMsg ekk0081a010cbsMsg = ekk0081a010outList[0];
			// サービス課金開始年月日(サービス契約)
			svcSvcChrgStartYmd = getNullToStr(ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.SVC_CHRG_STAYMD));
		}
		
		
		HashMap<String, String> dslSetYmdMap = new HashMap<String, String>();
		
		// サービス課金開始年月日
		String svcChrgStartYmd = getNullToStr(ekk2811a010Msg.getString(EKK2811A010CBSMsg1List.SVC_CHRG_STAYMD));
		// サービス課金終了年月日
		String svcChrgEndYmd = getNullToStr(ekk2811a010Msg.getString(EKK2811A010CBSMsg1List.SVC_CHRG_ENDYMD));
		// サービス終了年月日（画面入力の解約希望日）
		String svcEndYmd = getNullToStr((String)ccMsg.get("dsl_ymd_tekkyo"));
		
		// サービス終了日の前日を設定
		svcChrgEndYmd = JPCDateUtil.addDay(svcEndYmd, -1);
		
		// プラン課金開始年月日
		String planChrgStartYmd = getNullToStr(ekk2811a010Msg.getString(EKK2811A010CBSMsg1List.PLAN_CHRG_STAYMD));
		
		// 翌月1日取得
		String nextMonthFirstDay = getNextMonthFirstDay(unyoYmd);
		
		// スライドフラグ
		boolean slideFlg = false;
		
		// 運用日より過去（即日解約の場合）※住所変更時は工事情報登録画面で即時解約で確定は行わない→スライドするパターンはない
		if(unyoYmd.compareTo(svcEndYmd) >= 0)
		{
			if(!"".equals(svcChrgStartYmd))
			{
				
				
				// 機器に紐づく親契約．サービス課金開始年月日 < サービス終了日の前日 でない場合(サービス契約課金前)
				if (JKKModelCommon.isFutureDate(svcSvcChrgStartYmd, svcChrgEndYmd, "0"))
				{
					// スライドしない
					slideFlg = false;
				}
				else
				// 機器オプションサービス契約.サービス課金開始年月日 > サービス終了日の前日 でない場合(機器オプションサービス契約課金前)
				if (JKKModelCommon.isFutureDate(svcChrgStartYmd, svcChrgEndYmd, "0"))
				{
					// 課金前スライドする
					slideFlg = true;
				}
			}
			
		}
		
		// スライドする場合
		if(slideFlg)
		{
			// サービス開始日を設定
			svcChrgStartYmd = getNullToStr(ekk2811a010Msg.getString(EKK2811A010CBSMsg1List.SVC_STAYMD));
			
			// サービス開始日を設定
			planChrgStartYmd = getNullToStr(ekk2811a010Msg.getString(EKK2811A010CBSMsg1List.SVC_STAYMD));
		}
		
		// サービス終了年月日
		dslSetYmdMap.put(EKK2811C150CBSMsg.SVC_ENDYMD, svcEndYmd);
		// サービス課金終了年月日
		dslSetYmdMap.put(EKK2811C150CBSMsg.SVC_CHRG_ENDYMD, svcChrgEndYmd);
		// サービス課金開始年月日
		dslSetYmdMap.put(EKK2811C150CBSMsg.SVC_CHRG_STAYMD, svcChrgStartYmd);
//		// プラン開始年月日
//		dslSetYmdMap.put(EKK2811C150CBSMsg.PLAN_STAYMD, );
		// プラン終了年月日
		dslSetYmdMap.put(EKK2811C150CBSMsg.PLAN_ENDYMD, svcEndYmd);
		// プラン課金終了年月日
		dslSetYmdMap.put(EKK2811C150CBSMsg.PLAN_CHRG_ENDYMD, svcChrgEndYmd);
		// プラン課金開始年月日
		dslSetYmdMap.put(EKK2811C150CBSMsg.PLAN_CHRG_STAYMD, planChrgStartYmd);
		
		return dslSetYmdMap;
	}
	/* ++++++++++ v8.00.00 変更終了 ++++++++++ */
	
	/**
	 * 翌月１日取得メソッド
	 * <br>
	 * @param unyoYmd
	 * @return 翌月１日
	 * @throws ParseException 
	 */
	private String getNextMonthFirstDay(String ymd) throws ParseException
	{
		// 翌月を取得
		String nextMonthDate = JPCDateUtil.addMonth(ymd, 1);
		String yearMonth = nextMonthDate.substring(0, 6);
		
		return yearMonth + "01";
	}
	/* ++++++++++ v7.00.05 追加終了 ++++++++++ */

	// v39.00.00 ANK-3488-00-00 ADD START
	/**
	 * 業務パラメータ管理一意照会メソッド
	 * <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param workParamId
	 * @return CAANMsg
	 * @throws Throwable 
	 */
	private CAANMsg execEZM0321A010(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param, 
										String dataMapKey,
										String workParamId) throws Throwable
	{
		CAANMsg ezm0321a010Msg = null;
		// 業務パラメータ管理情報を取得
		// ***** EZM0321A010（業務パラメータ管理一意照会）*****
		Object[][] ezm0321a010IN = {
			{EZM0321A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EZM0321A010},
			{EZM0321A010CBSMsg.FUNC_CODE, FUNC_CODE_1},
			{EZM0321A010CBSMsg.KEY_WORK_PARAM_ID, workParamId},
		};
		CAANMsg result = callSC(handle, scCall, param, dataMapKey, editInMsg(param, ezm0321a010IN));
		if (result != null)
		{
			CAANMsg[] ezm0321a010MsgList = result.getCAANMsgList(EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST);
			if (ezm0321a010MsgList != null && ezm0321a010MsgList.length > 0)
			{
				ezm0321a010Msg = ezm0321a010MsgList[0];
			}
		}

		return ezm0321a010Msg;
	}

	/**
	 * Ｂ−ＣＡＳ不要ＨＤＤ容量コードリストを取得します。
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @return List<String>
	 * @throws Throwable 
	 */
	private List<String> getHddCapaBcasnoneList(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param, 
										String fixedText) throws Throwable
	{
		String[] hddCapaBcasnoneArray = {};

		CAANMsg ezm0321a010Msg = execEZM0321A010(handle, scCall, param, fixedText, JKKStrConst.KK_HDD_CAPA_BCASNONE);
		if (ezm0321a010Msg != null)
		{
			String hddCapaBcasnone = ezm0321a010Msg.getString(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE);
			if (!JKKStringUtil.isNullBlank(hddCapaBcasnone))
			{
				hddCapaBcasnoneArray = hddCapaBcasnone.split(JKKStrConst.COMMA, -1);
			}
		}

		return Arrays.asList(hddCapaBcasnoneArray);
	}
	// v39.00.00 ANK-3488-00-00 ADD END
}
