/*********************************************************************
*	All Rights reserved,Copyright(c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKUejbTaknkikiCtrlUtil
*	ソースファイル名：JKUejbTaknkikiCtrlUtil.java
*	作成者			：富士通
*	日付			：2012年02月06日
*＜機能概要＞
*	工事対象宅内機器処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00	2011/02/06	FJ）		新規作成
*	ｖ3.00.00	2012/02/16	FJ)日根		【ANK-0025-00-00】ギガルータ対応
*	ｖ3.00.00	2012/02/16	FJ)日根		【ANK-0147-00-00】住変電話即時開通
*	ｖ3.00.00	2012/04/09	FJ)日根		【ANK-0376-00-00】（OPMS連携）機器出荷情報連携における連携項目追加
*	ｖ5.00.00	2013/09/16	FJ)高橋		【OM-2013-0002047】
*	ｖ7.00.00	2013/11/14	FJ)黒田		【ANK-1578-00-00】多機能ルーター（機器追加）
*	ｖ7.00.01	2014/01/24	FJ)中西		【ST-2014-0000029】
*	ｖ40.00.00	2018/11/09	FJ)木村		【ANK-3412-00-00】５ギガ・１０ギガコース導入対応
*	ｖ74.00.00	2025/02/27	FJ)峰村		【ANK-4657-00-00】【eo】HGW導入対応フォロー６
*
**********************************************************************/

package eo.ejb.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import com.fujitsu.futurity.model.base.CAANCreateException;
import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANFinderException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;

import eo.common.constant.JKUStrConst;
import eo.ejb.cbm.entity.KU0141ETMsg;
import eo.ejb.common.db.JKUejbKU0141SecProc;
import eo.ejb.common.edit.JKUejbNumberParts;

//ANK-4657-00-00 ADD START
import eo.ejb.cbm.entity.KK0341ETMsg;
import eo.ejb.cbs.cbsmsg.EKU0021D010CBSMsg;
//ANK-4657-00-00 ADD END

/**
 *  <dd>クラス名：工事対象宅内機器処理部品
 *  <dd>クラス説明：工事対象宅内機器に関する登録、更新処理を行う部品です。
 *  <dd>備考：
 * @version  1.00 2011/08/16
 * @author 富士通
 *
 */
public class JKUejbTaknkikiCtrlUtil 
{

	/**
	 * マップキー
	 */
	/** 新規情報 */
	private static final String NEW_INFO = "new_info"; 
	/** 旧情報 */
	private static final String OLD_INFO = "old_info";
	
	/**
	 * 工事案件種別（撤去動作）
	 */
	private static final String[] KOJIAK_SBT_CD_TEKKYO = new String[]
	{
		JKUStrConst.CD00577_KYOSEI_DSL,
		JKUStrConst.CD00577_TEKKYO_DSL,
		JKUStrConst.CD00577_AD_CHG_TEKKYO
	};
	
	/**
	 * 予定登録済で登録を行う宅内機器異動コード
	 */
	private static final String[] TOROKU_ZMI_TAKNKIKI_IDO_CD =
	{
		JKUStrConst.CD00562_MOVE,
		JKUStrConst.CD00562_IDO_NON
	};

	/** サービスＩＦ宅内機器情報 変更前宅内機器型式コード(SIFごとの項目名差分) */
	private static final String SIF_CHGB_TAKNKK_MODEL_CD_ = "chgb_taknkiki_model_cd_";
	
	/** サービスＩＦ宅内機器情報 変更前宅内機器製造番号(SIFごとの項目名差分) */
	private static final String SIF_CHGB_KKSEIZO_NOV_ = "chgb_kkseizo_nov_";
	
	/**
	 * 宅内機器登録更新処理
	 * @param kojiakNo			工事案件番号
	 * @param inCBSMsg			CBSメッセージ
	 * @param ku0141MsgArray	工事案件宅内機器スキーマ情報
	 * @param kojiakSbtCd		工事案件種別コード
	 * @param prcGrpCd			料金グループコード
	 * @param addFlg			追加処理フラグ（true=更新、削除動作を行わない）
	 * @return	更新連携要否リスト
	 * @throws CAANException
	 */
	public static List<Map<String, String>> updTaknkiki(String kojiakNo, CAANMsg inCBSMsg, CAANMsg[] ku0141MsgArray,
			String kojiakSbtCd, String prcGrpCd, boolean addFlg) throws CAANException
	{
		// ---処理対象データの整理
		
		// 宅内機器種別候補配列
// ANK-3412-00-00 MOD START
//		String[] taknKikiKohoArray = JKUModelCommon.getTakniKikiSbtCdKoho(prcGrpCd);
		String[] taknKikiKohoArray = JKUModelCommon.getTakniKikiSbtCdKoho(prcGrpCd, kojiakSbtCd);
// ANK-3412-00-00 MOD END
		// 宅内機器スキーマ情報を取得する
		List<CAANMsg> schemaInfoList = getTaishoTaknKikiSchema(ku0141MsgArray, taknKikiKohoArray, prcGrpCd, kojiakSbtCd);
		
		// 宅内機器インプット情報を取得する
		List<Map<String, CAANMsg>> inputInfoList = getTaishoTaknkikiInput(kojiakNo, inCBSMsg, taknKikiKohoArray, prcGrpCd, kojiakSbtCd);
		
		// ---管理用フラグの作成
		
		boolean[] schemaFlgArray = null;
		List<Map<String, String>> retMapList = new ArrayList<Map<String, String>>();
		
		if (0 != schemaInfoList.size())
		{
			schemaFlgArray = new boolean[schemaInfoList.size()];
		}
		
		// ---更新登録処理の実行
		
		for (int i = 0; i < inputInfoList.size(); ++i)
		{
			schemaFlgArray = updateTaknKiki(kojiakNo, inCBSMsg, inputInfoList.get(i), schemaInfoList, schemaFlgArray, kojiakSbtCd, addFlg, retMapList);
		}
		
		// ---突合結果の無いスキーマ情報の更新実行
		
		for (int i = 0; i < schemaInfoList.size(); ++i)
		{
			if (false == schemaFlgArray[i])
			{
				updKu0141Nashi(kojiakNo, inCBSMsg, schemaInfoList.get(i), addFlg, retMapList);
			}
		}
		
// ANK-4657-00-00 ADD START
		// 未入力機器登録を呼び出し
		insMinyuTekkyoKiki(kojiakNo,prcGrpCd,kojiakSbtCd,inCBSMsg,retMapList);
// ANK-4657-00-00 ADD END

		return retMapList;
	}
	
	/**
	 * 宅内機器スキーマリスト作成
	 * @param ku0141MsgArray	工事案件対象宅内機器スキーマ情報
	 * @param taknKikiKohoArray	宅内機器種別候補配列
	 * @param prcGrpCd	料金グループコード
	 * @param kojiakSbtCd	工事案件種別コード
	 * @return	宅内機器スキーマリスト
	 */
	private static List<CAANMsg> getTaishoTaknKikiSchema(CAANMsg[] ku0141MsgArray, String[] taknKikiKohoArray, String prcGrpCd, String kojiakSbtCd)
	{
		List<CAANMsg> retList = new ArrayList<CAANMsg>();
		
		if (null == ku0141MsgArray)
		{
			return retList;
		}
		
		for (int i = 0; i < ku0141MsgArray.length; ++i)
		{
			String taknkikiSbtCd = ku0141MsgArray[i].getString(KU0141ETMsg.TAKNKIKI_SBT_CD);
			String taknkikiIdoCd = ku0141MsgArray[i].getString(KU0141ETMsg.TAKNKIKI_IDO_CD);
			String taknKikiModelCd = ku0141MsgArray[i].getString(KU0141ETMsg.CHGE_TAKNKIKI_MODEL_CD);
			// 変更宅内機器型式コードが存在しない場合は、予定宅内機器型式コードを使用する
			if (null == taknKikiModelCd)
			{
				taknKikiModelCd = ku0141MsgArray[i].getString(KU0141ETMsg.RSV_TAKNKIKI_MODEL_CD);
			}
			
			if (true == checkKomokuArray(taknkikiSbtCd, taknKikiKohoArray))
			{
				if(false == JKUModelCommon.jgiTrgt(prcGrpCd, kojiakSbtCd, taknkikiSbtCd, taknkikiIdoCd, taknKikiModelCd))
				{
					if (false == JKUStrConst.CD00475_NASHI.equals(ku0141MsgArray[i].getString(KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_STAT)))
					{
						retList.add(ku0141MsgArray[i]);
					}
				}
			}
		}
		
		return retList;
	}
	
	/**
	 * 宅内機器インプットリスト作成
	 * @param kojiakNo				工事案件番号
	 * @param inCBSMsg				CBSメッセージ
	 * @param taknKikiKohoArray		宅内機器種別候補配列
	 * *@param prcGrpCd	料金グループコード
	 * @param kojiakSbtCd	工事案件種別コード
	 * @return	宅内機器インプットリスト
	 * @throws CAANException 
	 */
	// ANK-4657-00-00 MOD START
	//private static List<Map<String, CAANMsg>> getTaishoTaknkikiInput(String kojiakNo, CAANMsg inCBSMsg, String[] taknKikiKohoArray, String prcGrpCd, String kojiakSbtCd)
	private static List<Map<String, CAANMsg>> getTaishoTaknkikiInput(String kojiakNo, CAANMsg inCBSMsg, String[] taknKikiKohoArray, String prcGrpCd, String kojiakSbtCd) throws CAANException
	// ANK-4657-00-00 MOD END
	{
		// ANK-4657-00-00 MOD START
		//List<Map<String, CAANMsg>> tempList = getTaknKikiInput(kojiakNo, inCBSMsg);
		List<Map<String, CAANMsg>> tempList = getTaknKikiInput(kojiakNo, inCBSMsg, prcGrpCd, kojiakSbtCd);
		// ANK-4657-00-00 MOD END
		
		List<Map<String, CAANMsg>> retList = new ArrayList<Map<String, CAANMsg>>();
		for (int i = 0; i < tempList.size(); ++i)
		{
			String taknkikiSbtCd = tempList.get(i).get(NEW_INFO).getString(KU0141ETMsg.TAKNKIKI_SBT_CD);
			String taknkikiIdoCd = tempList.get(i).get(NEW_INFO).getString(KU0141ETMsg.TAKNKIKI_IDO_CD);
			String taknKikiModelCd = tempList.get(i).get(NEW_INFO).getString(KU0141ETMsg.RSV_TAKNKIKI_MODEL_CD);
			if (true == checkKomokuArray(taknkikiSbtCd, taknKikiKohoArray))
			{
				if(false == JKUModelCommon.jgiTrgt(prcGrpCd, kojiakSbtCd, taknkikiSbtCd, taknkikiIdoCd, taknKikiModelCd))
				{
					retList.add(tempList.get(i));
				}
			}
		}
		return retList;
	}
	
	/**
	 * 宅内機器情報取得
	 * @param kojiakNo	工事案件番号
	 * @param inCBSMsg	CBSメッセージ
	 * @param prcGrpCd	料金グループコード
	 * @param kojiakSbtCd	工事案件種別コード
	 * @return	宅内機器インプットリスト
	 * @throws CAANException 
	 */
	// ANK-4657-00-00 MOD START
	//private static List<Map<String, CAANMsg>> getTaknKikiInput(String kojiakNo, CAANMsg inCBSMsg, String prcGrpCd, String kojiakSbtCd)
	private static List<Map<String, CAANMsg>> getTaknKikiInput(String kojiakNo, CAANMsg inCBSMsg, String prcGrpCd, String kojiakSbtCd) throws CAANException
	// ANK-4657-00-00 MOD END
	{
		List<Map<String, CAANMsg>> retList = new ArrayList<Map<String, CAANMsg>>();
		
		// ANK-4657-00-00 ADD START
		// 撤去機器フラグ
		boolean tekkyoFlg = false;
		// 引数.工事案件種別コードが000（強制解約）、002（撤去（解約））、004（住変（撤去））、009（プラン変更（収容替））、015（ONU交換工事）のいずれか
		if(JKUStrConst.CD00577_KYOSEI_DSL.equals(kojiakSbtCd) || JKUStrConst.CD00577_TEKKYO_DSL.equals(kojiakSbtCd) || JKUStrConst.CD00577_AD_CHG_TEKKYO.equals(kojiakSbtCd) || 
		   JKUStrConst.CD00577_PLAN_CHG_SHUYO.equals(kojiakSbtCd) || JKUStrConst.CD00577_ONU_KOKAN_KOJI.equals(kojiakSbtCd))
		{
			// 引数.料金グループコードが02（eo光ネットホームタイプ）、03（eo光ネットメゾンタイプ）、04（eo光ネットマンションタイプ）、10（eo光電話）のいずれかの場合、
			if(JKUStrConst.CD00133_EOH_HOME.equals(prcGrpCd) || JKUStrConst.CD00133_EOH_MEZON.equals(prcGrpCd) || 
			   JKUStrConst.CD00133_EOH_NTMANS.equals(prcGrpCd) || JKUStrConst.CD00133_EOH_TEL.equals(prcGrpCd))
			{
				tekkyoFlg=true;
			}
		}
		// ANK-4657-00-00 ADD END
		
		for (int i = 0; i < JKUStrConst.TAKNKIKI_MAX_CNT; ++i)
		{
			// 機器提供サービス契約番号が存在しない場合は次のデータの処理に移る
			if (null == inCBSMsg.getString(JKUStrConst.SIF_KKTK_SVC_KEI_NO_ + String.valueOf(i + 1)))
			{
				continue;
			}
			
			// ANK-4657-00-00 ADD START
			// 撤去機器フラグがTrue、かつ、CBSメッセージ.宅内機器異動コードNが03（一部撤去）の場合
			if(tekkyoFlg && 
			   JKUStrConst.CD00562_ICHIBU_TEKKYO.equals(inCBSMsg.getString(JKUStrConst.SIF_TAKNKIKI_IDO_CD_ + String.valueOf(i + 1))))
			{
				String kojiState = JKUejbGetKojiStateHaisohin.getHaiso_KojiState(inCBSMsg.getString(JKUStrConst.SIF_KKTK_SVC_KEI_NO_ + String.valueOf(i + 1)), inCBSMsg.getString(JKUStrConst.SIF_KIKI_CHG_NO_ + String.valueOf(i + 1)));
				if(JKUStrConst.CD00474_CHUSHI.equals(kojiState))
				{
					continue;
				}
			}
			// ANK-4657-00-00 ADD END
			
			Map<String, CAANMsg> ku0141MsgMap = new HashMap<String, CAANMsg>();
			
			// ---新規情報の設定
			
			CAANMsg ku0141Msg = new CAANMsg(KU0141ETMsg.class.getName());
			
			// 工事案件対象宅内機器ステータス
			String taknkikiStat = JKUStrConst.CD00475_UK_ZM;
			if (checkKomokuArray(inCBSMsg.getString(JKUStrConst.SIF_TAKNKIKI_IDO_CD_ + String.valueOf(i + 1)),
					TOROKU_ZMI_TAKNKIKI_IDO_CD))
			{
				taknkikiStat = JKUStrConst.CD00475_RSV_TOROKU_ZM;
			}
			ku0141Msg.set(KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_STAT, taknkikiStat);
			// 工事案件番号
			ku0141Msg.set(KU0141ETMsg.KOJIAK_NO, kojiakNo);
			// 宅内機器種別コード
			ku0141Msg.set(KU0141ETMsg.TAKNKIKI_SBT_CD, inCBSMsg.getString(JKUStrConst.SIF_TAKNKIKI_SBT_CD_ + String.valueOf(i + 1)));
			// 宅内機器異動コード
			ku0141Msg.set(KU0141ETMsg.TAKNKIKI_IDO_CD, inCBSMsg.getString(JKUStrConst.SIF_TAKNKIKI_IDO_CD_ + String.valueOf(i + 1)));
			// 宅内機器型式コード（予定宅内機器型式コード）
			ku0141Msg.set(KU0141ETMsg.RSV_TAKNKIKI_MODEL_CD, inCBSMsg.getString(JKUStrConst.SIF_TAKNKIKI_MODEL_CD_ + String.valueOf(i + 1)));
			// 機器製造番号（予定機器製造番号）
			ku0141Msg.set(KU0141ETMsg.RSV_KIKI_SEIZO_NO, inCBSMsg.getString(JKUStrConst.SIF_KKSEIZO_NO_ + String.valueOf(i + 1)));
			// MACアドレス（予定MACアドレス）
			ku0141Msg.set(KU0141ETMsg.RSV_MACAD, inCBSMsg.getString(JKUStrConst.SIF_MACAD_ + String.valueOf(i + 1)));			
			// STB-ID（予定STB-ID）
			ku0141Msg.set(KU0141ETMsg.RSV_STB_ID, inCBSMsg.getString(JKUStrConst.SIF_STB_ID_ + String.valueOf(i + 1)));
			// HDD容量コード（予定HDD容量コード）
			ku0141Msg.set(KU0141ETMsg.RSV_HDD_CAPA_CD, inCBSMsg.getString(JKUStrConst.SIF_HDD_CAPA_CD_ + String.valueOf(i + 1)));
			// BSパススルー可否（予定BSパススルー可否）
			ku0141Msg.set(KU0141ETMsg.RSV_VONU_BSPT_KH, inCBSMsg.getString(JKUStrConst.SIF_VONU_BSPT_KH_ + String.valueOf(i + 1)));
			// STB契約TVコースコード（予定STB契約TVコースコード）
			ku0141Msg.set(KU0141ETMsg.RSV_STB_KEI_TV_COURSE_CD, inCBSMsg.getString(JKUStrConst.SIF_STB_KEI_TV_COURSE_CD_ + String.valueOf(i + 1)));
			// ルーター種類コード（予定ルーター種類コード）
			ku0141Msg.set(KU0141ETMsg.RSV_ROUTER_KIND_CD, inCBSMsg.getString(JKUStrConst.SIF_ROUTER_KIND_CD_ + String.valueOf(i + 1)));			
			// 予定ルーターレンタルコード（提供種別コードによって設定値を変更する。）
			String rentCd = null;
			if(JKUStrConst.CD00212_BUY.equals(inCBSMsg.getString(JKUStrConst.SIF_TK_SBT_CD_ + String.valueOf(i + 1))))
			{
				//「1:買取」：買取
				rentCd = JKUStrConst.RENT_CD_BUY;
			}
			else if(JKUStrConst.CD00212_RENT.equals(inCBSMsg.getString(JKUStrConst.SIF_TK_SBT_CD_ + String.valueOf(i + 1))))
			{
				//「0:レンタル」：レンタル
				rentCd = JKUStrConst.RENT_CD_RENT;
			}
			ku0141Msg.set(KU0141ETMsg.RSV_ROUTER_RENT_CD, rentCd);
			// 多機能ルーター機能コード（予定多機能ルーター機能コード）
			ku0141Msg.set(KU0141ETMsg.RSV_TAKINORT_KINO_CD, inCBSMsg.getString(JKUStrConst.SIF_TAKINORT_KINO_CD_ + String.valueOf(i + 1)));
			// 多機能ルータールーター機能識別コード（予定多機能ルータールーター機能識別コード）
			ku0141Msg.set(KU0141ETMsg.RSV_TAKINORT_RTR_KINO_SKCD, inCBSMsg.getString(JKUStrConst.SIF_TAKINORT_RTR_KINO_SKCD_ + String.valueOf(i + 1)));
			
			// 機器変更番号
			ku0141Msg.set(KU0141ETMsg.RSV_KIKI_CHG_NO, inCBSMsg.getString(JKUStrConst.SIF_KIKI_CHG_NO_ + String.valueOf(i + 1)));
			// 機器提供サービス契約番号
			ku0141Msg.set(KU0141ETMsg.KKTK_SVC_KEI_NO, inCBSMsg.getString(JKUStrConst.SIF_KKTK_SVC_KEI_NO_ + String.valueOf(i + 1)));
			// 機器提供サービス契約変更メモ
			ku0141Msg.set(KU0141ETMsg.KKTK_SVC_KEI_CHGE_MEMO, inCBSMsg.getString(JKUStrConst.SIF_KKTK_SVC_KEI_CHGE_MEMO_ + String.valueOf(i + 1)));
			// 元トムソンケース番号
			ku0141Msg.set(KU0141ETMsg.MOTO_TCASE_NO, inCBSMsg.getString(JKUStrConst.SIF_MOTO_TCASE_NO_ + String.valueOf(i + 1)));

			// 登録年月日時分秒
			ku0141Msg.set(KU0141ETMsg.ADD_DTM, inCBSMsg.getString(JKUStrConst.SIF_OPERATEDATETIME));
			// 登録オペレータアカウント
			ku0141Msg.set(KU0141ETMsg.ADD_OPEACNT, inCBSMsg.getString(JKUStrConst.SIF_OPERATORID));
			// 更新年月日時分秒
			ku0141Msg.set(KU0141ETMsg.UPD_DTM, inCBSMsg.getString(JKUStrConst.SIF_OPERATEDATETIME));
			// 更新オペレータアカウント
			ku0141Msg.set(KU0141ETMsg.UPD_OPEACNT, inCBSMsg.getString(JKUStrConst.SIF_OPERATORID));
			// 無効フラグ
			ku0141Msg.set(KU0141ETMsg.MK_FLG, JKUStrConst.MK_FLG_YUKO);
			
			// 新規情報を追加する
			ku0141MsgMap.put(NEW_INFO, ku0141Msg);
			
			// ---旧情報の設定
			
			ku0141Msg = new CAANMsg(KU0141ETMsg.class.getName());
			// 工事案件対象宅内機器ステータス
			ku0141Msg.set(KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_STAT, JKUStrConst.CD00475_RSV_TOROKU_ZM);
			// 工事案件番号
			ku0141Msg.set(KU0141ETMsg.KOJIAK_NO, kojiakNo);
			// 設置撤去フラグ
			ku0141Msg.set(KU0141ETMsg.STC_TEKKYO_FLG, JKUStrConst.CD00772_TEKKYO);
			// 宅内機器種別コード
			ku0141Msg.set(KU0141ETMsg.TAKNKIKI_SBT_CD, inCBSMsg.getString(JKUStrConst.SIF_TAKNKIKI_SBT_CD_ + String.valueOf(i + 1)));
			// 宅内機器異動コード
			ku0141Msg.set(KU0141ETMsg.TAKNKIKI_IDO_CD, inCBSMsg.getString(JKUStrConst.SIF_TAKNKIKI_IDO_CD_ + String.valueOf(i + 1)));
			// 機器提供サービス契約番号
			ku0141Msg.set(KU0141ETMsg.KKTK_SVC_KEI_NO, inCBSMsg.getString(JKUStrConst.SIF_KKTK_SVC_KEI_NO_ + String.valueOf(i + 1)));
			// 機器提供サービス契約変更メモ
			ku0141Msg.set(KU0141ETMsg.KKTK_SVC_KEI_CHGE_MEMO, inCBSMsg.getString(JKUStrConst.SIF_KKTK_SVC_KEI_CHGE_MEMO_ + String.valueOf(i + 1)));
			// 元トムソンケース番号
			ku0141Msg.set(KU0141ETMsg.MOTO_TCASE_NO, inCBSMsg.getString(JKUStrConst.SIF_MOTO_TCASE_NO_ + String.valueOf(i + 1)));
			
			// 変更前宅内機器型式コード（SIFごとの項目名差異有）
			String chgbTaknikikiModelCd = inCBSMsg.getString(JKUStrConst.SIF_CHGB_TAKNIKK_MODEL_CD_ + String.valueOf(i + 1));
			if (null == chgbTaknikikiModelCd || "".equals(chgbTaknikikiModelCd))
			{
				chgbTaknikikiModelCd = inCBSMsg.getString(SIF_CHGB_TAKNKK_MODEL_CD_ + String.valueOf(i + 1));
			}
			ku0141Msg.set(KU0141ETMsg.RSV_TAKNKIKI_MODEL_CD, chgbTaknikikiModelCd);
			
			// 変更前機器製造番号（SIFごとの項目名差異有）
			String chgbKkseizoNo = inCBSMsg.getString(JKUStrConst.SIF_CHGB_KKSEIZO_NO_ + String.valueOf(i + 1));
			if (null == chgbKkseizoNo || "".equals(chgbKkseizoNo))
			{
				chgbKkseizoNo = inCBSMsg.getString(SIF_CHGB_KKSEIZO_NOV_ + String.valueOf(i + 1));
			}
			
			ku0141Msg.set(KU0141ETMsg.RSV_KIKI_SEIZO_NO, chgbKkseizoNo);
			// 変更前MACアドレス
			ku0141Msg.set(KU0141ETMsg.RSV_MACAD, inCBSMsg.getString(JKUStrConst.SIF_CHGB_MACAD_ + String.valueOf(i + 1)));
			// 変更前ルーター種類コード
			ku0141Msg.set(KU0141ETMsg.RSV_ROUTER_KIND_CD, inCBSMsg.getString(JKUStrConst.SIF_CHGB_ROUTER_KIND_CD_ + String.valueOf(i + 1)));
			// 変更前提供種別コード（ルーターレンタルコード）
			rentCd = null;
			if(JKUStrConst.CD00212_BUY.equals(inCBSMsg.getString(JKUStrConst.SIF_CHGB_TK_SBT_CD_ + String.valueOf(i + 1))))
			{
				//「1:買取」：買取
				rentCd = JKUStrConst.RENT_CD_BUY;
			}
			else if(JKUStrConst.CD00212_RENT.equals(inCBSMsg.getString(JKUStrConst.SIF_CHGB_TK_SBT_CD_ + String.valueOf(i + 1))))
			{
				//「0:レンタル」：レンタル
				rentCd = JKUStrConst.RENT_CD_RENT;
			}
			ku0141Msg.set(KU0141ETMsg.RSV_ROUTER_RENT_CD, rentCd);
			// 変更前多機能ルーター機能コード
			ku0141Msg.set(KU0141ETMsg.RSV_TAKINORT_KINO_CD, inCBSMsg.getString(JKUStrConst.SIF_CHGB_TAKINORT_KINO_CD_ + String.valueOf(i + 1)));
			// 変更前多機能ルータールーター機能識別コード
			ku0141Msg.set(KU0141ETMsg.RSV_TAKINORT_RTR_KINO_SKCD, inCBSMsg.getString(JKUStrConst.SIF_CHGB_TAKINORT_RTR_KINO_SKCD_ + String.valueOf(i + 1)));
			// 変更前STB-ID
			ku0141Msg.set(KU0141ETMsg.RSV_STB_ID, inCBSMsg.getString(JKUStrConst.SIF_CHGB_STB_ID_ + String.valueOf(i + 1)));
			// 変更前HDD容量コード
			ku0141Msg.set(KU0141ETMsg.RSV_HDD_CAPA_CD, inCBSMsg.getString(JKUStrConst.SIF_CHGB_HDD_CAPA_CD_ + String.valueOf(i + 1)));
			// 変更前BSパススルー可否
			ku0141Msg.set(KU0141ETMsg.RSV_VONU_BSPT_KH, inCBSMsg.getString(JKUStrConst.SIF_CHGB_VONU_BSPT_KH_ + String.valueOf(i + 1)));
			// 変更前STB契約TVコースコード
			ku0141Msg.set(KU0141ETMsg.RSV_STB_KEI_TV_COURSE_CD, inCBSMsg.getString(JKUStrConst.SIF_CHGB_STB_KEI_TV_COURSE_CD_ + String.valueOf(i + 1)));
			
			// 登録年月日時分秒
			ku0141Msg.set(KU0141ETMsg.ADD_DTM, inCBSMsg.getString(JKUStrConst.SIF_OPERATEDATETIME));
			// 登録オペレータアカウント
			ku0141Msg.set(KU0141ETMsg.ADD_OPEACNT, inCBSMsg.getString(JKUStrConst.SIF_OPERATORID));
			// 更新年月日時分秒
			ku0141Msg.set(KU0141ETMsg.UPD_DTM, inCBSMsg.getString(JKUStrConst.SIF_OPERATEDATETIME));
			// 更新オペレータアカウント
			ku0141Msg.set(KU0141ETMsg.UPD_OPEACNT, inCBSMsg.getString(JKUStrConst.SIF_OPERATORID));
			// 無効フラグ
			ku0141Msg.set(KU0141ETMsg.MK_FLG, JKUStrConst.MK_FLG_YUKO);

			// 旧情報を追加する
			ku0141MsgMap.put(OLD_INFO, ku0141Msg);
			
			retList.add(ku0141MsgMap);
		}
		
		return retList;
	}
	
	/**
	 * 宅内機器更新実行
	 * @param kojiakNo			工事案件番号
	 * @param inCBSMsg			CBSメッセージ
	 * @param inputInfo			宅内機器インプット情報
	 * @param schemaInfoList	宅内機器スキーマリスト
	 * @param schemaFlgArray	スキーマ更新済フラグ
	 * @param kojiakSbtCd		工事案件種別コード
	 * @param addFlg			追加処理フラグ
	 * @param retMapList		更新連携要否リスト
	 * @return	更新後のスキーマ更新済みフラグ
	 * @throws CAANException
	 */
	private static boolean[] updateTaknKiki(String kojiakNo, CAANMsg inCBSMsg, Map<String, CAANMsg> inputInfo, List<CAANMsg> schemaInfoList,
			boolean[] schemaFlgArray, String kojiakSbtCd, boolean addFlg, List<Map<String, String>> retMapList) throws CAANException
	{
		
		// 戻り値のschemaFlgArray
		boolean[] retArray = null;
		
		if (null != schemaFlgArray)
		{
			retArray = new boolean[schemaFlgArray.length];
			System.arraycopy(schemaFlgArray, 0, retArray, 0, schemaFlgArray.length);
		}
		
		// ---更新対象データの取得
		
		// 機器提供サービス契約番号が一致するものを取得する
		String kikiTkSvcKeiNo = inputInfo.get(NEW_INFO).getString(KU0141ETMsg.KKTK_SVC_KEI_NO);
		
		TreeMap<String, CAANMsg> schemaUpdMap = new TreeMap<String, CAANMsg>();
		
		for (int i = 0; i < schemaInfoList.size(); ++i)
		{
			if (kikiTkSvcKeiNo.equals(schemaInfoList.get(i).getString(KU0141ETMsg.KKTK_SVC_KEI_NO)))
			{
				schemaUpdMap.put(schemaInfoList.get(i).getString(KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_NO), schemaInfoList.get(i));
			}
		}
		
		// ---インプットを元にした更新の実行
		
		String taknKikiIdoCd = inputInfo.get(NEW_INFO).getString(KU0141ETMsg.TAKNKIKI_IDO_CD);
		
		List<String> updTaishoList = null;
		
		// 一部撤去の場合
		if (JKUStrConst.CD00562_ICHIBU_TEKKYO.equals(taknKikiIdoCd))
		{
			updTaishoList = updTekkyo(kojiakNo, inCBSMsg, inputInfo, schemaUpdMap, addFlg, retMapList);
		}
		// 交換の場合
		else if (JKUStrConst.CD00562_KOKAN.equals(taknKikiIdoCd))
		{
			updTaishoList = updKokan(kojiakNo, inCBSMsg, inputInfo, schemaUpdMap, addFlg, retMapList);
		}
		// 異動無しの場合
		else if (JKUStrConst.CD00562_IDO_NON.equals(taknKikiIdoCd))
		{
			updTaishoList = updIdoNashi(kojiakNo, inCBSMsg, inputInfo, schemaUpdMap, addFlg, retMapList);
		}
		// その他の場合
		else
		{
			if (true == checkKomokuArray(kojiakSbtCd, KOJIAK_SBT_CD_TEKKYO))
			{
				updTaishoList = updTekkyo(kojiakNo, inCBSMsg, inputInfo, schemaUpdMap, addFlg, retMapList);
			}
			else
			{
				updTaishoList = updSecchi(kojiakNo, inCBSMsg, inputInfo, schemaUpdMap, addFlg, retMapList);
			}
		}
		
		// ---スキーマの更新済みフラグを更新する
		
		for (int i = 0; i < schemaInfoList.size(); ++i)
		{
			if (-1 != updTaishoList.indexOf(schemaInfoList.get(i).getString(KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_NO)))
			{
				retArray[i] = true;
			}
		}
		
		return retArray;
	}
	
	/**
	 * 設置処理
	 * @param kojiakNo			工事案件番号
	 * @param inCBSMsg			CBSメッセージ
	 * @param inputInfo			宅内機器インプット情報
	 * @param schemaUpdMap		宅内機器スキーマツリーマップ
	 * @param addFlg			追加処理フラグ
	 * @param retMapList		更新連携要否リスト
	 * @return	更新実行工事案件対象宅内機器番号リスト
	 * @throws CAANException
	 */
	private static List<String> updSecchi(String kojiakNo, CAANMsg inCBSMsg, Map<String, CAANMsg> inputInfo,
			TreeMap<String, CAANMsg> schemaUpdMap, boolean addFlg, List<Map<String, String>> retMapList) throws CAANException
	{
		List<String> retList = new ArrayList<String>();
		int mapSize = schemaUpdMap.size();
		
		String updTaknKikiNo = null;
		
		if (0 == mapSize)
		{
			// 設置として追加
			updTaknKikiNo = insKu0141Secchi(inCBSMsg, inputInfo, retMapList);
		}
		else
		{
			updTaknKikiNo = schemaUpdMap.lastKey();
			// 更新対象の1件を取得する
			CAANMsg updKu0141 = schemaUpdMap.get(updTaknKikiNo);
			// 設置として更新
			updKu0141Secchi(kojiakNo, inCBSMsg, updKu0141, inputInfo, addFlg, retMapList);
		}
		
		retList.add(updTaknKikiNo);
		return retList;
	}
	
	/**
	 * 撤去処理
	 * @param kojiakNo			工事案件番号
	 * @param inCBSMsg			CBSメッセージ
	 * @param inputInfo			宅内機器インプット情報
	 * @param schemaUpdMap		宅内機器スキーマツリーマップ
	 * @param addFlg			追加処理フラグ
	 * @param retMapList		更新連携要否リスト
	 * @return	更新実行工事案件対象宅内機器番号リスト
	 * @throws CAANException
	 */
	private static List<String> updTekkyo(String kojiakNo, CAANMsg inCBSMsg, Map<String, CAANMsg> inputInfo,
			TreeMap<String, CAANMsg> schemaUpdMap, boolean addFlg, List<Map<String, String>> retMapList) throws CAANException
	{
		List<String> retList = new ArrayList<String>();
		int mapSize = schemaUpdMap.size();
		
		String updTaknKikiNo = null;
		if (0 == mapSize)
		{
			// 撤去として追加
			updTaknKikiNo = insKu0141Tekkyo(inCBSMsg, inputInfo, retMapList);
		}
		else
		{
			updTaknKikiNo = schemaUpdMap.lastKey();
			// 更新対象の1件を取得する
			CAANMsg updKu0141 = schemaUpdMap.get(updTaknKikiNo);
			// 撤去として更新
			updKu0141Tekkyo(kojiakNo, inCBSMsg, updKu0141, inputInfo, addFlg, retMapList);
		}
		
		retList.add(updTaknKikiNo);
		return retList;
	}
	
	/**
	 * 交換処理
	 * @param kojiakNo			工事案件番号
	 * @param inCBSMsg			CBSメッセージ
	 * @param inputInfo			宅内機器インプット情報
	 * @param schemaUpdMap		宅内機器スキーマツリーマップ
	 * @param addFlg			追加処理フラグ
	 * @param retMapList		更新連携要否リスト
	 * @return	更新実行工事案件対象宅内機器番号リスト
	 * @throws CAANException
	 */
	private static List<String> updKokan(String kojiakNo, CAANMsg inCBSMsg, Map<String, CAANMsg> inputInfo,
			TreeMap<String, CAANMsg> schemaUpdMap, boolean addFlg, List<Map<String, String>> retMapList) throws CAANException
	{
		List<String> retList = new ArrayList<String>();
		int mapSize = schemaUpdMap.size();
		String updTaknKikiNo = null;
		
		if (0 == mapSize)
		{
			// グループＮＯを採番する
			String grpNo = getKikiGrpNo(kojiakNo);
			
			String taknkikiIdoCd = inputInfo.get(OLD_INFO).getString(KU0141ETMsg.TAKNKIKI_IDO_CD);
			String taknKikiModelCd = inputInfo.get(OLD_INFO).getString(KU0141ETMsg.RSV_TAKNKIKI_MODEL_CD);
			
			// 旧情報が除外対象でなければ撤去として追加する
			if(false == JKUModelCommon.jgiTrgt(null, null, null, taknkikiIdoCd, taknKikiModelCd))
			{
				// 撤去として追加
				insKu0141KokanTekkyo(inCBSMsg, inputInfo, grpNo, retMapList);
			}
			// 設置として追加
			updTaknKikiNo = insKu0141KokanSecchi(inCBSMsg, inputInfo, grpNo, null, retMapList);
		}
		else
		{
			updTaknKikiNo = schemaUpdMap.lastKey();
			// 更新対象の1件を取得する
			CAANMsg updKu0141 = schemaUpdMap.get(updTaknKikiNo);
			
			// 交換である場合
			if (JKUStrConst.CD00562_KOKAN.equals(updKu0141.getString(KU0141ETMsg.TAKNKIKI_IDO_CD)))
			{
				// 設置として更新する
				updKu0141KokanSecchi(kojiakNo, inCBSMsg, updKu0141, inputInfo, addFlg, retMapList);
			}
			else
			{
				// グループＮＯを採番する
				String grpNo = getKikiGrpNo(kojiakNo);
				// 撤去情報の宅内機器ステータスを保持する
				String taknKikiStat = updKu0141.getString(KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_STAT);
				// 撤去として更新する
				updKu0141KokanTekkyo(kojiakNo, inCBSMsg, updKu0141, inputInfo, grpNo, retMapList);
				// 設置として追加する
				updTaknKikiNo = insKu0141KokanSecchi(inCBSMsg, inputInfo, grpNo, taknKikiStat, retMapList);
			}
		}
		
		// ソートしたキーを取得
		Set<String> keySet = schemaUpdMap.keySet();
		// キーからIterator作成
		Iterator<String> keyIte = keySet.iterator();
		
		// レコード件数分繰り返し
		while(keyIte.hasNext())
		{
			String mapKey = keyIte.next();
			retList.add(mapKey);
		}
		
		if (null != updTaknKikiNo && -1 == retList.indexOf(updTaknKikiNo))
		{
			retList.add(updTaknKikiNo);
		}
		
		return retList;
	}
	
	/**
	 * 異動なし処理
	 * @param kojiakNo			工事案件番号
	 * @param inCBSMsg			CBSメッセージ
	 * @param inputInfo			宅内機器インプット情報
	 * @param schemaUpdMap		宅内機器スキーマツリーマップ
	 * @param addFlg			追加処理フラグ
	 * @param retMapList		更新連携要否リスト
	 * @return	更新実行工事案件対象宅内機器番号リスト
	 * @throws CAANException
	 */
	private static List<String> updIdoNashi(String kojiakNo, CAANMsg inCBSMsg, Map<String, CAANMsg> inputInfo,
			TreeMap<String, CAANMsg> schemaUpdMap, boolean addFlg, List<Map<String, String>> retMapList) throws CAANException
	{
		List<String> retList = new ArrayList<String>();
		int mapSize = schemaUpdMap.size();
		
		String updTaknKikiNo = null;
		if (0 == mapSize)
		{
			// 異動無しとして追加
			insKu0141IdoNashi(inCBSMsg, inputInfo, retMapList);
		}
		else
		{
			updTaknKikiNo = schemaUpdMap.lastKey();
			// 更新対象の1件を取得する
			CAANMsg updKu0141 = schemaUpdMap.get(updTaknKikiNo);
			// 異動無しとして更新
			updKu0141IdoNashi(kojiakNo, inCBSMsg, updKu0141, inputInfo, addFlg, retMapList);
		}
		
		retList.add(updTaknKikiNo);
		return retList;
	}
	
	/**
	 * 撤去_更新
	 * @param kojiakNo		工事案件番号
	 * @param inCBSMsg		CBSメッセージ
	 * @param updKu0141		更新対象スキーマ情報
	 * @param inputInfo		宅内機器インプット情報
	 * @param addFlg		追加処理フラグ
	 * @param retMapList	更新連携要否リスト
	 * @return	実行結果
	 * @throws CAANException
	 */
	private static boolean updKu0141Tekkyo(String kojiakNo, CAANMsg inCBSMsg, CAANMsg updKu0141,
			Map<String, CAANMsg> inputInfo, boolean addFlg, List<Map<String, String>> retMapList) throws CAANException
	{
		// ---共通更新処理を実行する
		
		boolean updKyotsu = setUpdateMsg(updKu0141, inCBSMsg, inputInfo, retMapList);
		
		// ---更新項目の設定
		
		// 比較対象リスト
		List<String[]> taishoList = new ArrayList<String[]>();
		
		// 工事案件対象機器グループ番号
		taishoList.add(new String[] {KU0141ETMsg.KOJIAK_TRGT_KIKI_GRP_NO, null, null});
		// 設置撤去フラグ
		taishoList.add(new String[] {KU0141ETMsg.STC_TEKKYO_FLG, null, JKUStrConst.CD00772_TEKKYO});
		
		// ---更新実行
		
		if (true == JKUModelCommon.setCAANMsg(updKu0141, updKu0141, taishoList) || true == updKyotsu)
		{
			try
			{
				new JKUejbKU0141SecProc().update(updKu0141);
			}
			catch (CAANFinderException cfe)
			{
				inCBSMsg.set(JKUStrConst.SIF_STATUS, StatusCodes.UPDATE_DB_ERR);
				throw cfe;
			}
			JKUModelCommon.setListKojiakNo(kojiakNo, true, retMapList);
		}
		
		return true;
	}
	
	/**
	 * 撤去_登録
	 * @param inCBSMsg		CBSメッセージ
	 * @param inputInfo		宅内機器インプット情報
	 * @param retMapList	更新連携要否リスト
	 * @return	工事案件対象宅内機器番号
	 * @throws CAANException
	 */
	private static String insKu0141Tekkyo(CAANMsg inCBSMsg, Map<String, CAANMsg> inputInfo, List<Map<String, String>> retMapList) throws CAANException
	{
		// 工事案件対象宅内機器番号
		String kojiakTrgtTaknkikiNo = JKUejbNumberParts.getKojiakTrgtTaknkikiNo(inCBSMsg);
		
		CAANMsg inputTaknKiki = inputInfo.get(NEW_INFO);
		
		// 工事案件対象宅内機器番号
		inputTaknKiki.set(KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_NO, kojiakTrgtTaknkikiNo);
		// 工事案件対象宅内機器ステータス
		inputTaknKiki.set(KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_STAT, JKUStrConst.CD00475_RSV_TOROKU_ZM);
		// 設置撤去フラグ
		inputTaknKiki.set(KU0141ETMsg.STC_TEKKYO_FLG, JKUStrConst.CD00772_TEKKYO);
		
		// ---追加実行
		
		try
		{
			new JKUejbKU0141SecProc().create(inputTaknKiki);
		}
		catch (CAANCreateException cce)
		{
			inCBSMsg.set(JKUStrConst.SIF_STATUS, StatusCodes.CREATE_DB_ERR);
			throw cce;
		}
		JKUModelCommon.setListKojiakNo(inputTaknKiki.getString(KU0141ETMsg.KOJIAK_NO), true, retMapList);
		
		return kojiakTrgtTaknkikiNo;
	}
	
	/**
	 * 交換_設置_更新
	 * @param kojiakNo		工事案件番号
	 * @param inCBSMsg		CBSメッセージ
	 * @param updKu0141		更新対象スキーマ情報
	 * @param inputInfo		宅内機器インプット情報
	 * @param addFlg		追加処理フラグ
	 * @param retMapList	更新連携要否リスト
	 * @return	実行結果
	 * @throws CAANException
	 */
	private static boolean updKu0141KokanSecchi(String kojiakNo, CAANMsg inCBSMsg, CAANMsg updKu0141,
			Map<String, CAANMsg> inputInfo, boolean addFlg, List<Map<String, String>> retMapList) throws CAANException
	{
		// ---共通更新処理を実行する
		
		boolean updKyotsu = setUpdateMsg(updKu0141, inCBSMsg, inputInfo, retMapList);
		
		
		// ---更新実行
		
		if (true == updKyotsu)
		{
			try
			{
				new JKUejbKU0141SecProc().update(updKu0141);
			}
			catch (CAANFinderException cfe)
			{
				inCBSMsg.set(JKUStrConst.SIF_STATUS, StatusCodes.UPDATE_DB_ERR);
				throw cfe;
			}
			JKUModelCommon.setListKojiakNo(kojiakNo, true, retMapList);
		}
		

		return true;
	}
	
	/**
	 * 交換_設置_登録
	 * @param inCBSMsg		CBSメッセージ
	 * @param inputInfo		宅内機器インプット情報
	 * @param grpNo			工事案件対象機器グループ番号
	 * @param kikiStat		工事案件対象宅内機器ステータス
	 * @param retMapList	更新連携要否リスト
	 * @return	工事案件対象宅内機器番号
	 * @throws CAANException
	 */
	private static String insKu0141KokanSecchi(CAANMsg inCBSMsg, Map<String, CAANMsg> inputInfo,
			String grpNo, String kikiStat, List<Map<String, String>> retMapList) throws CAANException
	{
		
		// 工事案件対象宅内機器番号
		String kojiakTrgtTaknkikiNo = JKUejbNumberParts.getKojiakTrgtTaknkikiNo(inCBSMsg);
		
		CAANMsg inputTaknKiki = inputInfo.get(NEW_INFO);
		
		// 工事案件対象宅内機器ステータス
		if (null != kikiStat)
		{
			inputTaknKiki.set(KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_STAT, kikiStat);
		}
		// 工事案件対象宅内機器番号
		inputTaknKiki.set(KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_NO, kojiakTrgtTaknkikiNo);
		// 設置撤去フラグ
		inputTaknKiki.set(KU0141ETMsg.STC_TEKKYO_FLG, JKUStrConst.CD00772_STC);
		// 工事案件対象機器グループ番号
		inputTaknKiki.set(KU0141ETMsg.KOJIAK_TRGT_KIKI_GRP_NO, grpNo);
		
		// ---追加実行
		
		try
		{
			new JKUejbKU0141SecProc().create(inputTaknKiki);
		}
		catch (CAANCreateException cce)
		{
			inCBSMsg.set(JKUStrConst.SIF_STATUS, StatusCodes.CREATE_DB_ERR);
			throw cce;
		}
		JKUModelCommon.setListKojiakNo(inputTaknKiki.getString(KU0141ETMsg.KOJIAK_NO), true, retMapList);
		
		return kojiakTrgtTaknkikiNo;
	}
	
	/**
	 * 交換_撤去_更新
	 * @param kojiakNo		工事案件番号
	 * @param inCBSMsg		CBSメッセージ
	 * @param updKu0141		更新対象スキーマ情報
	 * @param inputInfo		宅内機器インプット情報
	 * @param grpNo			工事案件対象機器グループ番号
	 * @param retMapList	更新連携要否リスト
	 * @return	実行結果
	 * @throws CAANException
	 */
	private static boolean updKu0141KokanTekkyo(String kojiakNo, CAANMsg inCBSMsg, CAANMsg updKu0141,
			Map<String, CAANMsg> inputInfo, String grpNo, List<Map<String, String>> retMapList) throws CAANException
	{
		
		CAANMsg inputTaknKiki = inputInfo.get(NEW_INFO);
		
		// ---更新項目の設定
		
		// 比較対象リスト
		List<String[]> taishoList = new ArrayList<String[]>();
		
		// 工事案件対象機器グループ番号
		taishoList.add(new String[] {KU0141ETMsg.KOJIAK_TRGT_KIKI_GRP_NO, null, grpNo});
		// 設置撤去フラグ
		taishoList.add(new String[] {KU0141ETMsg.STC_TEKKYO_FLG, null, JKUStrConst.CD00772_TEKKYO});
		
		// 宅内機器種別コード
		taishoList.add(new String[] {KU0141ETMsg.TAKNKIKI_SBT_CD, KU0141ETMsg.TAKNKIKI_SBT_CD, null});
		// 宅内機器異動コード
		taishoList.add(new String[] {KU0141ETMsg.TAKNKIKI_IDO_CD, KU0141ETMsg.TAKNKIKI_IDO_CD, null});
		
		// 更新年月日時分秒(共通部:運用日時)
		updKu0141.set(KU0141ETMsg.UPD_DTM, inCBSMsg.getString(JKUStrConst.SIF_OPERATEDATETIME));
		// 更新オペレータアカウント(共通部オペレータID)
		updKu0141.set(KU0141ETMsg.UPD_OPEACNT, inCBSMsg.getString(JKUStrConst.SIF_OPERATORID));
		
		// ---更新実行
		
		if (true == JKUModelCommon.setCAANMsg(updKu0141, inputTaknKiki, taishoList))
		{
			try
			{
				new JKUejbKU0141SecProc().update(updKu0141);
			}
			catch (CAANFinderException cfe)
			{
				inCBSMsg.set(JKUStrConst.SIF_STATUS, StatusCodes.UPDATE_DB_ERR);
				throw cfe;
			}
			JKUModelCommon.setListKojiakNo(kojiakNo, true, retMapList);
		}
		
		return true;
	}
	
	/**
	 * 交換_撤去_登録
	 * @param inCBSMsg		CBSメッセージ
	 * @param inputInfo		宅内機器インプット情報
	 * @param grpNo			工事案件対象機器グループ番号
	 * @param retMapList	更新連携要否リスト
	 * @return	工事案件対象宅内機器番号
	 * @throws CAANException
	 */
	private static String insKu0141KokanTekkyo(CAANMsg inCBSMsg, Map<String, CAANMsg> inputInfo, String grpNo,
			List<Map<String, String>> retMapList) throws CAANException
	{
		
		// 工事案件対象宅内機器番号
		String kojiakTrgtTaknkikiNo = JKUejbNumberParts.getKojiakTrgtTaknkikiNo(inCBSMsg);
		
		CAANMsg inputTaknKiki = inputInfo.get(OLD_INFO);

		// 工事案件対象宅内機器番号
		inputTaknKiki.set(KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_NO, kojiakTrgtTaknkikiNo);
		// 工事案件対象機器グループ番号
		inputTaknKiki.set(KU0141ETMsg.KOJIAK_TRGT_KIKI_GRP_NO, grpNo);
		
		// ---追加実行
		
		try
		{
			new JKUejbKU0141SecProc().create(inputTaknKiki);
		}
		catch (CAANCreateException cce)
		{
			inCBSMsg.set(JKUStrConst.SIF_STATUS, StatusCodes.CREATE_DB_ERR);
			throw cce;
		}
		JKUModelCommon.setListKojiakNo(inputTaknKiki.getString(KU0141ETMsg.KOJIAK_NO), true, retMapList);
		
		return kojiakTrgtTaknkikiNo;
	}
	
	/**
	 * 異動なし_更新
	 * @param kojiakNo		工事案件番号
	 * @param inCBSMsg		CBSメッセージ
	 * @param updKu0141		更新対象スキーマ情報
	 * @param inputInfo		宅内機器インプット情報
	 * @param addFlg		追加処理フラグ
	 * @param retMapList	更新連携要否リスト
	 * @return	実行結果
	 * @throws CAANException
	 */
	private static boolean updKu0141IdoNashi(String kojiakNo, CAANMsg inCBSMsg, CAANMsg updKu0141,
			Map<String, CAANMsg> inputInfo, boolean addFlg, List<Map<String, String>> retMapList) throws CAANException
	{
		// ---共通更新処理を実行する
		
		boolean updKyotsu = setUpdateMsg(updKu0141, inCBSMsg, inputInfo, retMapList);
		
		// ---更新項目の設定
		
		// 比較対象リスト
		List<String[]> taishoList = new ArrayList<String[]>();
		
		// 工事案件対象機器グループ番号
		taishoList.add(new String[] {KU0141ETMsg.KOJIAK_TRGT_KIKI_GRP_NO, null, null});
		// 設置撤去フラグ
		taishoList.add(new String[] {KU0141ETMsg.STC_TEKKYO_FLG, null, JKUStrConst.CD00772_MI_STC});
		
		// ---更新実行
		
		if (true == JKUModelCommon.setCAANMsg(updKu0141, updKu0141, taishoList) || true == updKyotsu)
		{
			try
			{
				new JKUejbKU0141SecProc().update(updKu0141);
			}
			catch (CAANFinderException cfe)
			{
				inCBSMsg.set(JKUStrConst.SIF_STATUS, StatusCodes.UPDATE_DB_ERR);
				throw cfe;
			}
			JKUModelCommon.setListKojiakNo(kojiakNo, true, retMapList);
		}
		
		return true;
	}
	
	/**
	 * 異動なし_登録
	 * @param inCBSMsg
	 * @param inputInfo
	 * @param retMapList
	 * @return	工事案件対象宅内機器番号
	 * @throws CAANException
	 */
	private static String insKu0141IdoNashi(CAANMsg inCBSMsg, Map<String, CAANMsg> inputInfo, List<Map<String, String>> retMapList) throws CAANException
	{
		
		// 工事案件対象宅内機器番号
		String kojiakTrgtTaknkikiNo = JKUejbNumberParts.getKojiakTrgtTaknkikiNo(inCBSMsg);
		
		CAANMsg inputTaknKiki = inputInfo.get(NEW_INFO);
		
		// 工事案件対象宅内機器番号
		inputTaknKiki.set(KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_NO, kojiakTrgtTaknkikiNo);
		// 設置撤去フラグ
		inputTaknKiki.set(KU0141ETMsg.STC_TEKKYO_FLG, JKUStrConst.CD00772_MI_STC);
		
		// ---追加実行
		
		try
		{
			new JKUejbKU0141SecProc().create(inputTaknKiki);
		}
		catch (CAANCreateException cce)
		{
			inCBSMsg.set(JKUStrConst.SIF_STATUS, StatusCodes.CREATE_DB_ERR);
			throw cce;
		}
		JKUModelCommon.setListKojiakNo(inputTaknKiki.getString(KU0141ETMsg.KOJIAK_NO), true, retMapList);
		
		return kojiakTrgtTaknkikiNo;
	}
	
	/**
	 * 設置_更新
	 * @param kojiakNo		工事案件番号
	 * @param inCBSMsg		CBSメッセージ
	 * @param updKu0141		更新対象スキーマ情報
	 * @param inputInfo		宅内機器インプット情報
	 * @param addFlg		追加処理フラグ
	 * @param retMapList	更新連携要否リスト
	 * @return	実行結果
	 * @throws CAANException
	 */
	private static boolean updKu0141Secchi(String kojiakNo, CAANMsg inCBSMsg, CAANMsg updKu0141,
			Map<String, CAANMsg> inputInfo, boolean addFlg, List<Map<String, String>> retMapList) throws CAANException
	{
		// ---共通更新処理を実行する
		
		boolean updKyotsu = setUpdateMsg(updKu0141, inCBSMsg, inputInfo, retMapList);
		
		// ---更新項目の設定
		
		// 比較対象リスト
		List<String[]> taishoList = new ArrayList<String[]>();
		
		// 工事案件対象機器グループ番号
		taishoList.add(new String[] {KU0141ETMsg.KOJIAK_TRGT_KIKI_GRP_NO, null, null});
		// 設置撤去フラグ
		taishoList.add(new String[] {KU0141ETMsg.STC_TEKKYO_FLG, null, JKUStrConst.CD00772_STC});
		
		// ---更新実行
		
		if (true == JKUModelCommon.setCAANMsg(updKu0141, updKu0141, taishoList) || true == updKyotsu)
		{
			try
			{
				new JKUejbKU0141SecProc().update(updKu0141);
			}
			catch (CAANFinderException cfe)
			{
				inCBSMsg.set(JKUStrConst.SIF_STATUS, StatusCodes.UPDATE_DB_ERR);
				throw cfe;
			}
			JKUModelCommon.setListKojiakNo(kojiakNo, true, retMapList);
		}
		
		return true;
	}
	
	/**
	 * 設置_登録
	 * @param inCBSMsg
	 * @param inputInfo
	 * @param retMapList
	 * @return	工事案件対象宅内機器番号
	 * @throws CAANException
	 */
	private static String insKu0141Secchi(CAANMsg inCBSMsg, Map<String, CAANMsg> inputInfo, List<Map<String, String>> retMapList) throws CAANException
	{
		
		// 工事案件対象宅内機器番号
		String kojiakTrgtTaknkikiNo = JKUejbNumberParts.getKojiakTrgtTaknkikiNo(inCBSMsg);
		
		CAANMsg inputTaknKiki = inputInfo.get(NEW_INFO);
		
		// 工事案件対象宅内機器番号
		inputTaknKiki.set(KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_NO, kojiakTrgtTaknkikiNo);
		// 設置撤去フラグ
		inputTaknKiki.set(KU0141ETMsg.STC_TEKKYO_FLG, JKUStrConst.CD00772_STC);
		
		// ---追加実行
		
		try
		{
			new JKUejbKU0141SecProc().create(inputTaknKiki);
		}
		catch (CAANCreateException cce)
		{
			inCBSMsg.set(JKUStrConst.SIF_STATUS, StatusCodes.CREATE_DB_ERR);
			throw cce;
		}
		JKUModelCommon.setListKojiakNo(inputTaknKiki.getString(KU0141ETMsg.KOJIAK_NO), true, retMapList);
		
		return kojiakTrgtTaknkikiNo;
	}
	
	/**
	 * なし_更新
	 * @param kojiakNo		工事案件番号
	 * @param inCBSMsg		CBSメッセージ
	 * @param updKu0141		更新対象スキーマ情報
	 * @param addFlg		追加処理フラグ
	 * @param retMapList	更新連携要否リスト
	 * @return	実行結果
	 * @throws CAANException
	 */
	private static boolean updKu0141Nashi(String kojiakNo, CAANMsg inCBSMsg, CAANMsg updKu0141,
			boolean addFlg, List<Map<String, String>> retMapList) throws CAANException
	{
		
		// ---追加処理フラグの対応
		
		if (true == addFlg)
		{
			return true;
		}
		
		// ---更新項目の設定

		// 比較対象リスト
		List<String[]> taishoList = new ArrayList<String[]>();
		
		// 工事案件対象宅内機器ステータス
		taishoList.add(new String[] {KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_STAT, null, JKUStrConst.CD00475_NASHI});
		
		// 更新年月日時分秒(共通部:運用日時)
		updKu0141.set(KU0141ETMsg.UPD_DTM, inCBSMsg.getString(JKUStrConst.SIF_OPERATEDATETIME));
		// 更新オペレータアカウント(共通部オペレータID)
		updKu0141.set(KU0141ETMsg.UPD_OPEACNT, inCBSMsg.getString(JKUStrConst.SIF_OPERATORID));
		
		// ---更新実行
		if (true == JKUModelCommon.setCAANMsg(updKu0141, updKu0141, taishoList))
		{
			try
			{
				new JKUejbKU0141SecProc().update(updKu0141);
			}
			catch (CAANFinderException cfe)
			{
				inCBSMsg.set(JKUStrConst.SIF_STATUS, StatusCodes.UPDATE_DB_ERR);
				throw cfe;
			}
			JKUModelCommon.setListKojiakNo(kojiakNo, true, retMapList);
		}
		
		return true;
	}
	
	/**
	 * 共通項目設定
	 * @param updKu0141		更新対象スキーマ情報
	 * @param inCBSMsg		CBSメッセージ
	 * @param inputInfo		宅内機器インプット情報
	 * @param retMapList	更新連携要否リスト
	 * @return	更新要否
	 */
	private static boolean setUpdateMsg(CAANMsg updKu0141, CAANMsg inCBSMsg, Map<String, CAANMsg> inputInfo, List<Map<String, String>> retMapList)
	{
		
		CAANMsg inputTaknKiki = inputInfo.get(NEW_INFO);
		
		// ---予定部分を更新するかをチェックする
		
		boolean notNullFlg = false;
		
		// 変更宅内機器型式コード
		if (null != updKu0141.getString(KU0141ETMsg.CHGE_TAKNKIKI_MODEL_CD))
		{
			notNullFlg = true;
		}
		// 変更機器製造番号
		if (null != updKu0141.getString(KU0141ETMsg.CHGE_KIKI_SEIZO_NO))
		{
			notNullFlg = true;
		}
		// 変更メーカーコード
		if (null != updKu0141.getString(KU0141ETMsg.CHGE_MAKER_CD))
		{
			notNullFlg = true;
		}
		// 変更MACアドレス
		if (null != updKu0141.getString(KU0141ETMsg.CHGE_MACAD))
		{
			notNullFlg = true;
		}
		// 変更STB-ID
		if (null != updKu0141.getString(KU0141ETMsg.CHGE_STB_ID))
		{
			notNullFlg = true;
		}
		// 変更HDD容量コード
		if (null != updKu0141.getString(KU0141ETMsg.CHGE_HDD_CAPA_CD))
		{
			notNullFlg = true;
		}
		// 変更VONUBSパススルー可否
		if (null != updKu0141.getString(KU0141ETMsg.CHGE_VONU_BSPT_KH))
		{
			notNullFlg = true;
		}
		// 変更STB契約TVコースコード
		if (null != updKu0141.getString(KU0141ETMsg.CHGE_STB_KEI_TV_COURSE_CD))
		{
			notNullFlg = true;
		}
		// 変更ルーター種類コード
		if (null != updKu0141.getString(KU0141ETMsg.CHGE_ROUTER_KIND_CD))
		{
			notNullFlg = true;
		}
		// 変更ルーターレンタルコード
		if (null != updKu0141.getString(KU0141ETMsg.CHGE_ROUTER_RENT_CD))
		{
			notNullFlg = true;
		}
		// 変更機器変更番号
		if (null != updKu0141.getString(KU0141ETMsg.CHGE_KIKI_CHG_NO))
		{
			notNullFlg = true;
		}
		// 変更多機能ルーター機能コード
		if (null != updKu0141.getString(KU0141ETMsg.CHG_TAKINORT_KINO_CD))
		{
			notNullFlg = true;
		}
		// 変更多機能ルータールーター機能識別コード
		if (null != updKu0141.getString(KU0141ETMsg.CHG_TAKINORT_RTR_KINO_SKCD))
		{
			notNullFlg = true;
		}
		

		
		// ---予定部分の更新
		
		// 比較対象リスト
		List<String[]> taishoList = new ArrayList<String[]>();
		
		boolean rsvUpdFlg = false;
		
		if (true == notNullFlg)
		{
			
			// 予定宅内機器型式コード
			taishoList.add(new String[] {KU0141ETMsg.RSV_TAKNKIKI_MODEL_CD, KU0141ETMsg.CHGE_TAKNKIKI_MODEL_CD, null});
			// 予定機器製造番号
			taishoList.add(new String[] {KU0141ETMsg.RSV_KIKI_SEIZO_NO, KU0141ETMsg.CHGE_KIKI_SEIZO_NO, null});
			// 予定メーカーコード
			taishoList.add(new String[] {KU0141ETMsg.RSV_MAKER_CD, KU0141ETMsg.CHGE_MAKER_CD, null});
			// 予定MACアドレス
			taishoList.add(new String[] {KU0141ETMsg.RSV_MACAD, KU0141ETMsg.CHGE_MACAD, null});
			// 予定STB-ID
			taishoList.add(new String[] {KU0141ETMsg.RSV_STB_ID, KU0141ETMsg.CHGE_STB_ID, null});
			// 予定HDD容量コード
			taishoList.add(new String[] {KU0141ETMsg.RSV_HDD_CAPA_CD, KU0141ETMsg.CHGE_HDD_CAPA_CD, null});
			// 予定VONUBSパススルー可否
			taishoList.add(new String[] {KU0141ETMsg.RSV_VONU_BSPT_KH, KU0141ETMsg.CHGE_VONU_BSPT_KH, null});
			// 予定STB契約TVコースコード
			taishoList.add(new String[] {KU0141ETMsg.RSV_STB_KEI_TV_COURSE_CD, KU0141ETMsg.CHGE_STB_KEI_TV_COURSE_CD, null});
			// 予定ルーター種類コード
			taishoList.add(new String[] {KU0141ETMsg.RSV_ROUTER_KIND_CD, KU0141ETMsg.CHGE_ROUTER_KIND_CD, null});
			// 予定ルーターレンタルコード
			taishoList.add(new String[] {KU0141ETMsg.RSV_ROUTER_RENT_CD, KU0141ETMsg.CHGE_ROUTER_RENT_CD, null});
			// 予定機器変更番号
			taishoList.add(new String[] {KU0141ETMsg.RSV_KIKI_CHG_NO, KU0141ETMsg.CHGE_KIKI_CHG_NO, null});
			// 予定多機能ルーター機能コード
			taishoList.add(new String[] {KU0141ETMsg.RSV_TAKINORT_KINO_CD, KU0141ETMsg.CHG_TAKINORT_KINO_CD, null});
			// 予定多機能ルータールーター機能識別コード
			taishoList.add(new String[] {KU0141ETMsg.RSV_TAKINORT_RTR_KINO_SKCD, KU0141ETMsg.CHG_TAKINORT_RTR_KINO_SKCD, null});
			
			rsvUpdFlg = JKUModelCommon.setCAANMsg(updKu0141, updKu0141, taishoList);
		}
		
		// ---変更後部分の更新
		
		taishoList = new ArrayList<String[]>();
		
		// 宅内機器種別コード
		taishoList.add(new String[] {KU0141ETMsg.TAKNKIKI_SBT_CD, KU0141ETMsg.TAKNKIKI_SBT_CD, null});
		// 宅内機器異動コード
		taishoList.add(new String[] {KU0141ETMsg.TAKNKIKI_IDO_CD, KU0141ETMsg.TAKNKIKI_IDO_CD, null});
		
		// 変更宅内機器型式コード
		taishoList.add(new String[] {KU0141ETMsg.CHGE_TAKNKIKI_MODEL_CD, KU0141ETMsg.RSV_TAKNKIKI_MODEL_CD, null});
		// 変更機器製造番号
		taishoList.add(new String[] {KU0141ETMsg.CHGE_KIKI_SEIZO_NO, KU0141ETMsg.RSV_KIKI_SEIZO_NO, null});
		// 変更MACアドレス
		taishoList.add(new String[] {KU0141ETMsg.CHGE_MACAD, KU0141ETMsg.RSV_MACAD, null});
		// 変更STB-ID
		taishoList.add(new String[] {KU0141ETMsg.CHGE_STB_ID, KU0141ETMsg.RSV_STB_ID, null});
		// 変更HDD容量コード
		taishoList.add(new String[] {KU0141ETMsg.CHGE_HDD_CAPA_CD, KU0141ETMsg.RSV_HDD_CAPA_CD, null});
		// 変更VONUBSパススルー可否
		taishoList.add(new String[] {KU0141ETMsg.CHGE_VONU_BSPT_KH, KU0141ETMsg.RSV_VONU_BSPT_KH, null});
		// 変更STB契約TVコースコード
		taishoList.add(new String[] {KU0141ETMsg.CHGE_STB_KEI_TV_COURSE_CD, KU0141ETMsg.RSV_STB_KEI_TV_COURSE_CD, null});
		// 変更ルーター種類コード
		taishoList.add(new String[] {KU0141ETMsg.CHGE_ROUTER_KIND_CD, KU0141ETMsg.RSV_ROUTER_KIND_CD, null});
		// 変更ルーターレンタルコード
		taishoList.add(new String[] {KU0141ETMsg.CHGE_ROUTER_RENT_CD, KU0141ETMsg.RSV_ROUTER_RENT_CD, null});
		// 変更機器変更番号
		taishoList.add(new String[] {KU0141ETMsg.CHGE_KIKI_CHG_NO, KU0141ETMsg.RSV_KIKI_CHG_NO, null});
		// 変更多機能ルーター機能コード
		taishoList.add(new String[] {KU0141ETMsg.CHG_TAKINORT_KINO_CD, KU0141ETMsg.RSV_TAKINORT_KINO_CD, null});
		// 変更多機能ルータールーター機能識別コード
		taishoList.add(new String[] {KU0141ETMsg.CHG_TAKINORT_RTR_KINO_SKCD, KU0141ETMsg.RSV_TAKINORT_RTR_KINO_SKCD, null});
		
		// 機器提供サービス契約変更メモ
		taishoList.add(new String[] {KU0141ETMsg.KKTK_SVC_KEI_CHGE_MEMO, KU0141ETMsg.KKTK_SVC_KEI_CHGE_MEMO, null});
		// 元トムソンケース番号
		taishoList.add(new String[] {KU0141ETMsg.MOTO_TCASE_NO, KU0141ETMsg.MOTO_TCASE_NO, null});

		boolean chgeUpdFlg = JKUModelCommon.setCAANMsg(updKu0141, inputTaknKiki, taishoList);
		
		// 更新年月日時分秒(共通部:運用日時)
		updKu0141.set(KU0141ETMsg.UPD_DTM, inCBSMsg.getString(JKUStrConst.SIF_OPERATEDATETIME));
		// 更新オペレータアカウント(共通部オペレータID)
		updKu0141.set(KU0141ETMsg.UPD_OPEACNT, inCBSMsg.getString(JKUStrConst.SIF_OPERATORID));
		
		if (true == rsvUpdFlg || true == chgeUpdFlg)
		{
			JKUModelCommon.setListKojiakNo(inputTaknKiki.getString(KU0141ETMsg.KOJIAK_NO), true, retMapList);
			return true;
		}
		return false;
	}
	
	/**
	 * 工事案件宅内機器グループ番号の取得
	 * @param kojiakNo	工事案件番号
	 * @return 工事案件宅内機器グループ番号
	 * @throws CAANException
	 */
	private static String getKikiGrpNo(String kojiakNo) throws CAANException
	{
		// 工事案件宅内機器のETメッセージを作成
		CAANMsg msgKU0141ForGrp = new CAANMsg(KU0141ETMsg.class.getName());
		// 工事案件番号をセット
		msgKU0141ForGrp.set(KU0141ETMsg.KOJIAK_NO, kojiakNo);
		// 無効フラグ
		msgKU0141ForGrp.set(KU0141ETMsg.MK_FLG, JKUStrConst.MK_FLG_YUKO);
		// 更新対象のレコード取得
		CAANMsg[] outMsgKU0141ForGrp = new JKUejbKU0141SecProc().findByCondition(msgKU0141ForGrp);
		
		String strKojiakGrpNo = "";
		Integer intKojiakGrpNo = 0;
		Integer hojiKojiakGrpNo = 0;
		for(int i = 0; i < outMsgKU0141ForGrp.length; i++)
		{
			// 工事案件グループ番号を取得
			strKojiakGrpNo = outMsgKU0141ForGrp[i].getString(KU0141ETMsg.KOJIAK_TRGT_KIKI_GRP_NO);
			// 工事案件グループ番号が設定されていれば数値に変換する
			if (strKojiakGrpNo != null && !"".equals(strKojiakGrpNo))
			{
				intKojiakGrpNo = Integer.parseInt(strKojiakGrpNo);
			}
			// 工事案件グループ番号が最大値である場合、値を保持
			if(intKojiakGrpNo > hojiKojiakGrpNo)
			{
				hojiKojiakGrpNo = intKojiakGrpNo;
			}
		}
		
		hojiKojiakGrpNo++;
		
		return JKUModelCommon.fillZero(Integer.toString(hojiKojiakGrpNo), 2, false);
	}
	
	/**
	 * 配列突合チェック
	 * @param checkStr	チェック対象の文字列
	 * @param checkArray	突合を行う配列
	 * @return	合致する場合true
	 */
	private static boolean checkKomokuArray(String checkStr, String[] checkArray)
	{
		if (null == checkStr)
		{
			return false;
		}
		if (null == checkArray || checkArray.length == 0)
		{
			return false;
		}
		
		for (int i = 0; i < checkArray.length; ++i)
		{
			if (checkStr.equals(checkArray[i]))
			{
				return true;
			}
		}
		
		return false;
	}
	
	// ANK-4657-00-00 ADD START
	/***
	 * 未入力撤去機器の登録
	 * @param kojiakNo　工事案件番号
	 * @param prcGrpCd　料金グループコード
	 * @param kojiakSbtCd　工事案件種別コード
	 * @param inCBSMsg　CBSメッセージ
	 * @return
	 * @throws CAANException
	 */
	private static boolean insMinyuTekkyoKiki(String kojiakNo, String prcGrpCd, String kojiakSbtCd, CAANMsg inCBSMsg,List<Map<String, String>> retMapList) throws CAANException
	{
		//処理対象チェック結果
		boolean checkResult = false;
		
		List<Map<String, String>> inputList = new ArrayList<Map<String, String>>();
		
		//サービスコード
		String svccode=null;
		
		//料金グループコードが02（eo光ネットホームタイプ）、03（eo光ネットメゾンタイプ）のいずれか、かつ工事案件種別コードが009（プラン変更(収容替)）の場合、または、
		//料金グループコードが02（eo光ネットホームタイプ）、03（eo光ネットメゾンタイプ）、04（eo光ネットマンションタイプ）、10（eo光電話）のいずれか、かつ工事案件種別コードが015（ONU交換工事）の場合
		if(((JKUStrConst.CD00133_EOH_HOME.equals(prcGrpCd) || JKUStrConst.CD00133_EOH_MEZON.equals(prcGrpCd)) && JKUStrConst.CD00577_PLAN_CHG_SHUYO.equals(kojiakSbtCd)) ||
		  (((JKUStrConst.CD00133_EOH_HOME.equals(prcGrpCd) || JKUStrConst.CD00133_EOH_MEZON.equals(prcGrpCd) || JKUStrConst.CD00133_EOH_NTMANS.equals(prcGrpCd) || JKUStrConst.CD00133_EOH_TEL.equals(prcGrpCd)) && JKUStrConst.CD00577_ONU.equals(kojiakSbtCd))))
		{
			//CBSメッセージ.工事範囲コードが070（ローゼット済工事不要案件）以外
			if(!JKUStrConst.CD00577_SUMI_KOJI_FUYO.equals(inCBSMsg.getString(JKUStrConst.SIF_KOJI_SCOPE_CD)))
			{
				//CBSメッセージの件数分、処理を実行
				for (int i = 0; i < JKUStrConst.TAKNKIKI_MAX_CNT; ++i)
				{
					//CBSメッセージ.宅内機器種別コードがS0（HGW）、もしくはR0（多機能ルーター）
					if(JKUStrConst.TKNKKSBT_HGW.equals(inCBSMsg.getString(JKUStrConst.SIF_TAKNKIKI_SBT_CD_ + String.valueOf(i + 1))) || 
					   JKUStrConst.TKNKKSBT_TAKINORT.equals(inCBSMsg.getString(JKUStrConst.SIF_TAKNKIKI_SBT_CD_ + String.valueOf(i + 1))))
					{
						//CBSメッセージ.宅内機器異動コードが03（一部撤去）、04（移動）、09（異動無し）以外の場合
						if(!JKUStrConst.CD00562_ICHIBU_TEKKYO.equals(inCBSMsg.getString(JKUStrConst.SIF_TAKNKIKI_IDO_CD_ + String.valueOf(i + 1))) && 
						   !JKUStrConst.CD00562_MOVE.equals(inCBSMsg.getString(JKUStrConst.SIF_TAKNKIKI_IDO_CD_ + String.valueOf(i + 1))) &&
						   !JKUStrConst.CD00562_IDO_NON.equals(inCBSMsg.getString(JKUStrConst.SIF_TAKNKIKI_IDO_CD_ + String.valueOf(i + 1))))
						{
							checkResult=true;
							svccode=inCBSMsg.getString(EKU0021D010CBSMsg.SVC_CD);
							break;
						}
					}
				}
			}
		}
		
		if (checkResult)
		{
			//運用日付取得
			String opedate = JKUModelCommon.getOpeDate(inCBSMsg, null);
			
			//宅内機器情報の取得
			if (JKUStrConst.CD00130_NET.equals(svccode))
			{
				inputList=JKUejbGetTekkyoKiki.getTekkyoKiki_Denwa(kojiakNo, opedate);
			}
			else if (JKUStrConst.CD00130_TEL.equals(svccode))
			{
				inputList=JKUejbGetTekkyoKiki.getTekkyoKiki_Net(kojiakNo, opedate);
			}
			
			//宅内機器情報の登録
			if (null != inputList && inputList.size() > 0)
			{
				List<Map<String, CAANMsg>> kikiInputList = new ArrayList<Map<String, CAANMsg>>();
				for(int i=0;i < inputList.size(); i++)
				{
					Map<String, CAANMsg> ku0141MsgMap = new HashMap<String, CAANMsg>();
					Map<String, String> tempMap = inputList.get(i);
					// 機器提供サービス契約番号取得
					String kktk_svc_kei_no_temp=tempMap.get(KK0341ETMsg.KKTK_SVC_KEI_NO);
					// 工事案件対象宅内機器に取得した工事案件番号と機器提供サービス契約番号が存在するか確認
					if (!JKUejbTaknkikiExistCk.getTaknkiki_KikitkySvcNoExist(kojiakNo, kktk_svc_kei_no_temp))
					{
						// 工事案件対象宅内機器に存在しない場合のみ、登録対象とする
						
						// ---撤去機器登録情報の設定
						CAANMsg ku0141Msg = new CAANMsg(KU0141ETMsg.class.getName());
						
						// 工事案件対象宅内機器番号
						String kojiakTrgtTaknkikiNo = JKUejbNumberParts.getKojiakTrgtTaknkikiNo(inCBSMsg);
						ku0141Msg.set(KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_NO, kojiakTrgtTaknkikiNo);
						// 工事案件対象宅内機器ステータス
						ku0141Msg.set(KU0141ETMsg.KOJIAK_TRGT_TAKNKIKI_STAT, JKUStrConst.CD00475_RSV_TOROKU_ZM);
						// 工事案件番号
						ku0141Msg.set(KU0141ETMsg.KOJIAK_NO, kojiakNo);
						// 設置撤去フラグ
						ku0141Msg.set(KU0141ETMsg.STC_TEKKYO_FLG, JKUStrConst.CD00772_TEKKYO);
						// 宅内機器種別コード
						ku0141Msg.set(KU0141ETMsg.TAKNKIKI_SBT_CD, tempMap.get(KK0341ETMsg.TAKNKIKI_SBT_CD));
						// 宅内機器異動コード
						ku0141Msg.set(KU0141ETMsg.TAKNKIKI_IDO_CD, JKUStrConst.CD00562_ICHIBU_TEKKYO);
						// 宅内機器型式コード
						ku0141Msg.set(KU0141ETMsg.RSV_TAKNKIKI_MODEL_CD, tempMap.get(KK0341ETMsg.TAKNKIKI_MODEL_CD));
						// 機器製造番号（予定機器製造番号）
						ku0141Msg.set(KU0141ETMsg.RSV_KIKI_SEIZO_NO, tempMap.get(KK0341ETMsg.KIKI_SEIZO_NO));
						// 予定ルーターレンタルコード（提供種別コードによって設定値を変更する。）
						String rentCd = null;
						if(JKUStrConst.CD00212_BUY.equals(tempMap.get(KK0341ETMsg.KKTK_SBT_CD)))
						{
							//「1:買取」：買取
							rentCd = JKUStrConst.RENT_CD_BUY;
						}
						else if(JKUStrConst.CD00212_RENT.equals(tempMap.get(KK0341ETMsg.KKTK_SBT_CD)))
						{
							//「0:レンタル」：レンタル
							rentCd = JKUStrConst.RENT_CD_RENT;
						}
						ku0141Msg.set(KU0141ETMsg.RSV_ROUTER_RENT_CD, rentCd);
						// 機器変更番号
						ku0141Msg.set(KU0141ETMsg.RSV_KIKI_CHG_NO, tempMap.get(KK0341ETMsg.KIKI_CHG_NO));
						// 機器提供サービス契約番号
						ku0141Msg.set(KU0141ETMsg.KKTK_SVC_KEI_NO, kktk_svc_kei_no_temp);
						// 登録年月日時分秒
						ku0141Msg.set(KU0141ETMsg.ADD_DTM, inCBSMsg.getString(JKUStrConst.SIF_OPERATEDATETIME));
						// 登録オペレータアカウント
						ku0141Msg.set(KU0141ETMsg.ADD_OPEACNT, inCBSMsg.getString(JKUStrConst.SIF_OPERATORID));
						// 更新年月日時分秒
						ku0141Msg.set(KU0141ETMsg.UPD_DTM, inCBSMsg.getString(JKUStrConst.SIF_OPERATEDATETIME));
						// 更新オペレータアカウント
						ku0141Msg.set(KU0141ETMsg.UPD_OPEACNT, inCBSMsg.getString(JKUStrConst.SIF_OPERATORID));
						// 無効フラグ
						ku0141Msg.set(KU0141ETMsg.MK_FLG, JKUStrConst.MK_FLG_YUKO);
						
						// 登録情報を追加する
						ku0141MsgMap.put(NEW_INFO, ku0141Msg);
						kikiInputList.add(ku0141MsgMap);			
					}
				}
				
				try
				{
					// 登録実行
					if (kikiInputList.size()>0)
					{
						for (int i = 0; i < kikiInputList.size(); ++i)
						{
							Map<String, CAANMsg> inputInfo=kikiInputList.get(i);
							CAANMsg inputTaknKiki = inputInfo.get(NEW_INFO);
							new JKUejbKU0141SecProc().create(inputTaknKiki);
							JKUModelCommon.setListKojiakNo(inputTaknKiki.getString(KU0141ETMsg.KOJIAK_NO), true, retMapList);
						}
					}
				}
				catch (CAANCreateException cce)
				{
					inCBSMsg.set(JKUStrConst.SIF_STATUS, StatusCodes.CREATE_DB_ERR);
					throw cce;
				}
			}
		}
		
		return true;
	}
	// ANK-4657-00-00 ADD END
}
