/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKFmtcelIdoInfOput
*	ソースファイル名	：JBSbatKKFmtcelIdoInfOput.java
*	作成者				：富士通　
*	作成日				：2012年07月19日
*＜機能概要＞
*　フェムトセル異動情報出力部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/07/19   富士通		新規作成
*	v4.00.00	2012/09/14   富士通		ANK-1187-00-00 SBMフェムトセル対応
*	v8.00.00	2014/01/10   富士通		ANK-1586-00-00 フェムトセル対応(docomo)
*  v27.00.00	2016/10/19   FJ)江藤	【OM-2016-0002006】docomoの「KOPT設置場所住所」不正
*  v66.00.00	2023/05/09   GDC)J.Zabala	【ANK-4369-00-00】楽天フェムトセル対応
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCCbatDenshiFileUtil;
import eo.business.util.file.JBSbatKKIFE197;
import eo.business.util.file.JBSbatKKIFE200;
import eo.business.util.file.JBSbatKKIFE505;
//ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD START
import eo.business.util.file.JBSbatKKIFE242;
//ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD END
import eo.business.util.table.JBSbatKK_T_FMTCEL_IDO_TCHI;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JZMAdOutputEdit;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.log.JBSbatLogPrintControl;
import eo.framework.util.JBSbatStringUtil;

/**
* フェムトセル異動情報出力 <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKFmtcelIdoInfOput extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(フェムトセル異動通知)*/
	private static final String D_TBL_NAME_KK_T_FMTCEL_IDO_TCHI = "KK_T_FMTCEL_IDO_TCHI";

	/** テーブル(フェムトセル異動区分変換)*/
	private static final String D_TBL_NAME_KK_M_FMTCEL_IDV_CHG = "KK_M_FMTCEL_IDV_CHG";

	/** テーブル(サービス契約内訳＜ｅｏ光ネット＞)*/
	private static final String D_TBL_NAME_KK_T_SVKEIUW_EOH_NET = "KK_T_SVKEIUW_EOH_NET";

	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";

// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD START
	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";

	/** テーブル(サービス契約回線内訳)*/
	private static final String D_TBL_NAME_KK_T_SVKEI_KAISEN_UW = "KK_T_SVKEI_KAISEN_UW";
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD END

	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";

	/** SQL定義キー(KK_SELECT_002)*/
	private static final String KK_T_FMTCEL_IDO_TCHI_KK_SELECT_002 = "KK_SELECT_002";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_M_FMTCEL_IDV_CHG_KK_SELECT_001 = "KK_SELECT_001";

	/** SQL定義キー(KK_SELECT_010)*/
	private static final String KK_T_SVKEIUW_EOH_NET_KK_SELECT_010 = "KK_SELECT_010";

	/** SQL定義キー(KK_SELECT_016)*/
	private static final String ZM_M_WORK_PARAM_KNRI_KK_SELECT_016 = "KK_SELECT_016";

// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD START
	/** SQL定義キー(KK_SELECT_062)*/
	private static final String CK_T_CUST_KK_SELECT_062 = "KK_SELECT_062";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_T_SVKEI_KAISEN_UW_KK_SELECT_001 = "KK_SELECT_001";
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD END

	/** SQL定義キー(KK_INSERT_002)*/
	private static final String ZM_T_DL_FILE_KANRI_KK_INSERT_002 = "KK_INSERT_002";

	/** テーブルアクセスクラス(フェムトセル異動通知)*/
	private JBSbatSQLAccess db_KK_T_FMTCEL_IDO_TCHI = null;

	/** テーブルアクセスクラス(フェムトセル異動区分変換)*/
	private JBSbatSQLAccess db_KK_M_FMTCEL_IDV_CHG = null;

	/** テーブルアクセスクラス(サービス契約内訳＜ｅｏ光ネット＞)*/
	private JBSbatSQLAccess db_KK_T_SVKEIUW_EOH_NET = null;

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;

// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD START
	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;

	/** テーブルアクセスクラス(サービス契約回線内訳)*/
	private JBSbatSQLAccess db_KK_T_SVKEI_KAISEN_UW = null;
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD END

	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 処理対象の事業者コード */
	private String jigyoshaCd = null;

	/** 出力ファイル1のファイルパス */
	private String outFilePath1 = null;

	/** 処理対象の事業者のフェムトセル照合対象コード */
	private String fmtcelShogoTgCd = null;
	
	/** 事業者コード：SBM */
	private static final String JIGYOSHA_CD_SBM = "0901";

	/** 事業者コード：au */
	private static final String JIGYOSHA_CD_AU = "0700";

// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD START
	/** 事業者コード：docomo */
	private static final String JIGYOSHA_CD_DOCOMO = "0206";
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD END

	// ANK-4369-00-00 ADD START
	/** 事業者コード：rakuten */
	private static final String JIGYOSHA_CD_RAKUTEN = "3206";
	// ANK-4369-00-00 ADD END
	
	/** フェムトセル照合対象コード：認証IDでの照合 */
	private static final String FMTCELSHOGO_TG_CD_NINSHO_ID = "1";

	/** フェムトセル異動連携状態コード：連携済 */
	private static final String FMTCEL_IDO_RNK_STAT_CD_RNK_ZM = "1";

	/** フェムトセル異動連携状態コード：連携不要 */
	private static final String FMTCEL_IDO_RNK_STAT_CD_RNK_FUYO = "2";

	/** フェムトセル異動情報CSVファイル(SBM)項目：備考 */
	private static final String KKIFE197_BIKO = "";

	/** フェムトセル異動情報CSVファイル(au)項目：備考 */
	private static final String KKIFE200_BIKO = "";

// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD START
	/** フェムトセル異動情報CSVファイル(docomo)項目：備考 */
	private static final String KKIFE242_BIKO = "";
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD END
	
	// ANK-4369-00-00 ADD START
	/** フェムトセル異動情報CSVファイル(楽天)項目：備考 */
	private static final String KKIFE505_BIKO = "";
// ANK-4369-00-00 ADD END
	

	/** 業務パラメータID：フェムトセル照合対象コード(SBM) */
	private static final String WORK_PARAM_ID_KK_FMTCEL_SHOGO_SBM = "KK_FMTCEL_SHOGO_SBM";
	//ANK-4369-00-00 ADD START	
	/** 業務パラメータID：フェムトセル照合対象コード(楽天) */
	private static final String WORK_PARAM_ID_KK_FMTCEL_SHOGO_RM = "KK_FMTCEL_SHOGO_RM";
	//ANK-4369-00-00 ADD END
	/** フェムトセル異動詳細コード：取消 */
	private static final String FMTCEL_IDO_DTL_CD_CL = "03";

	/** 異動区分：回復 */
	private static final String IDO_DIV_KAIHK = "00004";

	/** 異動区分：解約 */
	private static final String IDO_DIV_DSL = "00005";

	/** 異動区分：撤去(解約) */
	private static final String IDO_DIV_TK_DSL = "00006";

	/** 異動区分：住所変更・登録 */
	private static final String IDO_DIV_ADCHG_TK = "00019";

	/** 異動区分：移設工事 */
	private static final String IDO_DIV_ISETSU_KJ = "00021";

	/** 異動区分：休止受付 */
	private static final String IDO_DIV_PAUSE_UK = "00024";

	/** 異動区分：休止変更・予約取消 */
	private static final String IDO_DIV_PAUSE_CHG_RSV_CL = "00025";

	/** 電子ファイル管理：ファイルコード */
	private static final String EFILE_KANRI_FILE_CD = "0000";

	/** フェムトセル異動情報CSVファイル(SBM)の処理管理番号（ZM0271処理管理マスタで管理されている） */
	private static final String TRN_KANRI_NO_SBM = "000000000085";

	/** フェムトセル異動情報CSVファイル(au)の処理管理番号（ZM0271処理管理マスタで管理されている） */
	private static final String TRN_KANRI_NO_AU = "000000000086";

// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD START
	/** フェムトセル異動情報CSVファイル(docomo)の処理管理番号（ZM0271処理管理マスタで管理されている） */
	private static final String TRN_KANRI_NO_DOCOMO = "000000000113";
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD END

	// ANK-4369-00-00 ADD START
	/** フェムトセル異動情報CSVファイル(rakuten)の処理管理番号（ZM0271処理管理マスタで管理されている） */
	private static final String TRN_KANRI_NO_RAKUTEN = "000000000261";
	// ANK-4369-00-00 ADD END
	
	/** 認証IDの最大桁数 */
	private static final int MAX_LEN_NINSHO_ID = 10;

	/** ファイル出力データ件数 */
	private int recCnt = 0;

// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD START
	/** 字丁目名の置換対象文字列 */
	private static final String SEARCH_AZCHO = "丁目";

	/** 字丁目名の置換後文字列 文字コード(SJIS表記):817C */
	private static final String REPLACE_AZCHO = "−";

	/** 項番出力用 */
	private int rowNumCnt = 0;
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD END

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_FMTCEL_IDO_TCHI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_FMTCEL_IDO_TCHI);
		db_KK_M_FMTCEL_IDV_CHG = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_FMTCEL_IDV_CHG);
		db_KK_T_SVKEIUW_EOH_NET = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVKEIUW_EOH_NET);
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD START
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
		db_KK_T_SVKEI_KAISEN_UW = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVKEI_KAISEN_UW);
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD END
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		// 処理対象の事業者コードを取得
		String[] freeItem = commonItem.getFreeItem().split(";");
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 MOD START
//		if(freeItem == null || freeItem.length < 2 || (!JIGYOSHA_CD_AU.equals(freeItem[0]) && !JIGYOSHA_CD_SBM.equals(freeItem[0])))
		//ANK-4369-00-00 MOD START
		if(freeItem == null || freeItem.length < 2
				|| (!JIGYOSHA_CD_AU.equals(freeItem[0]) && !JIGYOSHA_CD_SBM.equals(freeItem[0]) && !JIGYOSHA_CD_DOCOMO.equals(freeItem[0])&& !JIGYOSHA_CD_RAKUTEN.equals(freeItem[0])))
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 MOD END
			//ANK-4369-00-00 MOD END
		{
			// エラーフラグ設定
			super.commonItem.setErrFlg(true);
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0130CE, new String[]{"事業者コード、出力ファイル1"});
			throw new JBSbatBusinessError(JPCBatchMessageConstant.EKKB0130CE);
		}

		jigyoshaCd = freeItem[0];
		outFilePath1 = freeItem[1];

		// ANK-1349-00-00 2012/11/20 ADD START
		// 業務パラメータ管理からフェムトセル照合対象コードを取得
		if (JIGYOSHA_CD_SBM.equals(jigyoshaCd))
		{
			String workParamId = WORK_PARAM_ID_KK_FMTCEL_SHOGO_SBM;
			Object[] whereParam =
			{
				workParamId,
				super.opeDate,
				super.opeDate
			};
			executeZM_M_WORK_PARAM_KNRI_KK_SELECT_016(whereParam);
			JBSbatCommonDBInterface workParamKnriMap = db_ZM_M_WORK_PARAM_KNRI.selectNext();
			if(!isExistCheckZM_M_WORK_PARAM_KNRI_KK_SELECT_016(workParamKnriMap, null))
			{
				// エラーフラグ設定
				super.commonItem.setErrFlg(true);
				throw new JBSbatBusinessError(JPCBatchMessageConstant.EKKB0150JE);
			}
			fmtcelShogoTgCd = workParamKnriMap.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE);
		}
		// ANK-1349-00-00 2012/11/20 ADD END
		
		//ANK-4369-00-00 ADD START
		// 業務パラメータ管理からフェムトセル照合対象コード(楽天)を取得
		if (JIGYOSHA_CD_RAKUTEN.equals(jigyoshaCd))
		{
			String workParamId = WORK_PARAM_ID_KK_FMTCEL_SHOGO_RM;
			Object[] whereParam =
			{
				workParamId,
				super.opeDate,
				super.opeDate
			};
			executeZM_M_WORK_PARAM_KNRI_KK_SELECT_016(whereParam);
			JBSbatCommonDBInterface workParamKnriMap = db_ZM_M_WORK_PARAM_KNRI.selectNext();
			if(!isExistCheckZM_M_WORK_PARAM_KNRI_KK_SELECT_016(workParamKnriMap, null))
			{
				// エラーフラグ設定
				super.commonItem.setErrFlg(true);
				throw new JBSbatBusinessError(JPCBatchMessageConstant.EKKB0150JE);
			}
			fmtcelShogoTgCd = workParamKnriMap.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE);
		}
		//ANK-4369-00-00 ADD END
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap 入力電文
	 * @param outputInItem 入力情報
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		if(null != inMap)
		{
			// 退避レコード格納リストに、現レコードを保存
			outputInItem.addOutMapList(inMap);
		}
		// 入力ファイルの情報がなくなったらメイン処理を実行する
		else
		{
			if (null == outputInItem)
			{
				return null;
			}

			// メイン処理
			mainProp(outputInItem);
		}

		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * メイン処理
	 * @param outputInItem 入力情報
	 * @throws Exception
	 */
	private void mainProp(JBSbatOutputItem outputInItem) throws Exception
	{
		// 連携対象外除外処理
		jgiTchiTgGai(outputInItem);

		// 退避リスト数ループ
		for (int i = 0; i < outputInItem.getOutMapList().size(); i++)
		{
			JBSbatServiceInterfaceMap outMap = (JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(i);

			// フェムトセル異動区分取得
			String fmtcelIdoDiv = getFmtcelIdoDiv(outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.IDO_DIV),
					outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_IDO_DTL_CD));

			// フェムトセル異動区分が取得できない場合
			if (null == fmtcelIdoDiv || "".equals(fmtcelIdoDiv))
			{
				// 次レコードを処理
				continue;
			}

			// ANK-1187-00-00 SBMフェムトセル対応 2012/09/14 START
			String shogoCd = "";

			// ANK-1349-00-00 2012/11/20 MOD START
			if (JIGYOSHA_CD_SBM.equals(jigyoshaCd))
			{
				if (FMTCELSHOGO_TG_CD_NINSHO_ID.equals(fmtcelShogoTgCd))
				{
					// 認証IDでの照合
					shogoCd = getNinshoId(outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.SVC_KEI_NO));
				}
				else
				{
					// サービス契約番号での照合
					shogoCd = outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.SVC_KEI_NO);
				}
			}
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 MOD START
//			else if (JIGYOSHA_CD_AU.equals(jigyoshaCd))
			// ANK-4369-00-00 MOD START
//			else if (JIGYOSHA_CD_AU.equals(jigyoshaCd) || JIGYOSHA_CD_DOCOMO.equals(jigyoshaCd))
			else if (JIGYOSHA_CD_AU.equals(jigyoshaCd) || JIGYOSHA_CD_DOCOMO.equals(jigyoshaCd) || JIGYOSHA_CD_RAKUTEN.equals(jigyoshaCd))
			// ANK-4369-00-00 MOD END
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 MOD END
			{
				// 認証IDでの照合
				shogoCd = getNinshoId(outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.SVC_KEI_NO));
			}
			// ANK-1349-00-00 2012/11/20 MOD END
			// ANK-1187-00-00 SBMフェムトセル対応 2012/09/14 END

			// 照合IDが取得できない場合
			if (null == shogoCd || "".equals(shogoCd))
			{
				// 次レコードを処理
				continue;
			}

			if (JIGYOSHA_CD_SBM.equals(jigyoshaCd))
			{
				outMap.setString(JBSbatKKIFE197.JIGYOSHA_CD, jigyoshaCd);
				// ANK-1187-00-00 SBMフェムトセル対応 2012/09/14 START
				outMap.setString(JBSbatKKIFE197.NINSHO_ID, shogoCd);
				// ANK-1187-00-00 SBMフェムトセル対応 2012/09/14 END
				outMap.setString(JBSbatKKIFE197.JGS_USE_CD, outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_JGS_USE_CD));
				outMap.setString(JBSbatKKIFE197.IDO_DIV, fmtcelIdoDiv);
				//2013/01/28 KT1-2013-0000091 MOD START
				outMap.setString(JBSbatKKIFE197.IDO_DTM, outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.IDO_DTM).substring(0, 14));
				//2013/01/28 KT1-2013-0000091 MOD END
				outMap.setString(JBSbatKKIFE197.FMTCEL_NINSHO_ID, outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_NINSHO_ID));
				outMap.setString(JBSbatKKIFE197.FMTCEL_NINSHO_ID_PWD, outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_NINSHO_ID_PWD));
				outMap.setString(JBSbatKKIFE197.BIKO, KKIFE197_BIKO);
			}
			else if (JIGYOSHA_CD_AU.equals(jigyoshaCd))
			{
				outMap.setString(JBSbatKKIFE200.JIGYOSHA_CD, jigyoshaCd);
				outMap.setString(JBSbatKKIFE200.NINSHO_ID, shogoCd);
				outMap.setString(JBSbatKKIFE200.JGS_USE_CD, outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_JGS_USE_CD));
				outMap.setString(JBSbatKKIFE200.IDO_DIV, fmtcelIdoDiv);
				//2013/01/28 KT1-2013-0000091 MOD START
				outMap.setString(JBSbatKKIFE200.IDO_DTM, outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.IDO_DTM).substring(0, 14));
				//2013/01/28 KT1-2013-0000091 MOD END
				outMap.setString(JBSbatKKIFE200.FMTCEL_NINSHO_ID, outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_NINSHO_ID));
				outMap.setString(JBSbatKKIFE200.FMTCEL_NINSHO_ID_PWD, outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_NINSHO_ID_PWD));
				outMap.setString(JBSbatKKIFE200.BIKO, KKIFE200_BIKO);
			}
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD START
			else if (JIGYOSHA_CD_DOCOMO.equals(jigyoshaCd))
			{
				// 項番
				rowNumCnt++;
				outMap.setString(JBSbatKKIFE242.KOUBAN, rowNumCnt);
				// KOPT設置場所住所
				outMap.setString(JBSbatKKIFE242.KOPT_STBS_AD, getKoptEstPlaceAdr(outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.SVC_KEI_NO)));
				// KOPT契約者名
				outMap.setString(JBSbatKKIFE242.KOPT_KEISYA_NM, getCustNm(outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.SVC_KEI_NO)));
				// 事業者コード
				outMap.setString(JBSbatKKIFE242.JIGYOSHA_CD, jigyoshaCd);
				// 認証ID
				outMap.setString(JBSbatKKIFE242.NINSHO_ID, shogoCd);
				// 事業者使用コード
				outMap.setString(JBSbatKKIFE242.JGS_USE_CD, outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_JGS_USE_CD));
				// 異動区分
				outMap.setString(JBSbatKKIFE242.IDO_DIV, fmtcelIdoDiv);
				// 異動年月日時分秒
				outMap.setString(JBSbatKKIFE242.IDO_DTM, outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.IDO_DTM).substring(0, 14));
				// 備考
				outMap.setString(JBSbatKKIFE242.BIKO, KKIFE242_BIKO);
			}
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD END
			// ANK-4369-00-00 ADD START
			else if (JIGYOSHA_CD_RAKUTEN.equals(jigyoshaCd))
			{
				// 項番
				rowNumCnt++;
				outMap.setString(JBSbatKKIFE505.KOUBAN, rowNumCnt);
				// OPTAGE設置場所住所
				outMap.setString(JBSbatKKIFE505.OPTAGE_STBS_AD, getKoptEstPlaceAdr(outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.SVC_KEI_NO)));
				// OPTAGE契約者名
				outMap.setString(JBSbatKKIFE505.OPTAGE_KEISYA_NM, getCustNm(outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.SVC_KEI_NO)));
				// 事業者コード
				outMap.setString(JBSbatKKIFE505.JIGYOSHA_CD, jigyoshaCd);
				// 認証ＩＤ
				outMap.setString(JBSbatKKIFE505.NINSHO_ID, shogoCd);
				// 事業者使用コード
				outMap.setString(JBSbatKKIFE505.JGS_USE_CD, outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_JGS_USE_CD));
				// 異動区分
				outMap.setString(JBSbatKKIFE505.IDO_DIV, fmtcelIdoDiv);
				// 異動年月日時分秒
				outMap.setString(JBSbatKKIFE505.IDO_DTM, outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.IDO_DTM).substring(0, 14));
				// フェムトセル認証ＩＤ
				outMap.setString(JBSbatKKIFE505.FMTCEL_NINSHO_ID, outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_NINSHO_ID));
				// フェムトセル認証ＩＤパスワード
				outMap.setString(JBSbatKKIFE505.FMTCEL_NINSHO_ID_PWD, outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_NINSHO_ID_PWD));
				// 備考
				outMap.setString(JBSbatKKIFE505.BIKO, KKIFE505_BIKO);
			}
			// ANK-4369-00-00 ADD END
			outMap.setOutFlg(true);

			// システム年月日を取得
			String sysDate = JCCBatCommon.getSysDate();
			// フェムトセル異動通知更新(連携済に更新)
			updFmtcelIdoTchi(FMTCEL_IDO_RNK_STAT_CD_RNK_ZM, sysDate, outMap.getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_IDO_TCHI_NO));
		}

		// ▼▼▼▼▼ 2012/11/15 UPD START ▼▼▼▼▼
//		// 電子ファイル管理・ダウンロードファイル管理登録
//		addEfileKanriDlFileKanri(outputInItem.getOutMapList().size());
		// ファイル出力データ件数設定
		recCnt = outputInItem.getOutMapList().size();
		// ▲▲▲▲▲ 2012/11/15 UPD E N D ▲▲▲▲▲
	}

	/**
	 * 連携対象外データを除外します。
	 * <br>
	 * @param outputInItem 入力情報
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void jgiTchiTgGai(JBSbatOutputItem outputInItem) throws Exception
	{
		List<JBSbatServiceInterfaceMap> outMapList = outputInItem.getOutMapList();

		JBSbatCommonDBInterface resultMap = new JBSbatCommonDBInterface();		// 結果取得用
		
		List<String> jgiList = new ArrayList<String>();

		String prevSvcKeiNo = "";
		int i = 0;
		while (i < outMapList.size())
		{
			boolean isSosai = false;
			String svcKeiNo = outMapList.get(i).getString(JBSbatKK_T_FMTCEL_IDO_TCHI.SVC_KEI_NO);
			if (!prevSvcKeiNo.equals(svcKeiNo))
			{
				// 解約／回復の相殺
				jgiList.addAll(sosai(outMapList, i, IDO_DIV_DSL, IDO_DIV_KAIHK));
				// 休止／休止解除の相殺
				jgiList.addAll(sosai(outMapList, i, IDO_DIV_PAUSE_UK, IDO_DIV_PAUSE_CHG_RSV_CL));
			}

			if (i < outMapList.size()) {
				String idoDiv = outMapList.get(i).getString(JBSbatKK_T_FMTCEL_IDO_TCHI.IDO_DIV);
				String fmtcelIdoDtlCd = outMapList.get(i).getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_IDO_DTL_CD);
				// フェムトセル異動詳細コードが「取消」で、異動区分が「撤去(解約)」「住所変更・登録」「移設工事」の場合
				if (FMTCEL_IDO_DTL_CD_CL.equals(fmtcelIdoDtlCd)
					&& (IDO_DIV_TK_DSL.equals(idoDiv) || IDO_DIV_ADCHG_TK.equals(idoDiv) ||IDO_DIV_ISETSU_KJ.equals(idoDiv)))
				{
					String kojiakNo = outMapList.get(i).getString(JBSbatKK_T_FMTCEL_IDO_TCHI.KOJIAK_NO);
					Object[] whereParam =
					{
						jigyoshaCd,
						kojiakNo,
					};
					executeKK_T_FMTCEL_IDO_TCHI_KK_SELECT_002(whereParam);
					resultMap = db_KK_T_FMTCEL_IDO_TCHI.selectNext();
					if ("0".equals(resultMap.getString("CNT")))
					{
						String kjJgiFmtcelIdoTchiNo = outMapList.get(i).getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_IDO_TCHI_NO);
						super.logPrint.printDebugLog("除外する工事取消異動のフェムトセル異動通知番号=" + kjJgiFmtcelIdoTchiNo);
						jgiList.add(kjJgiFmtcelIdoTchiNo);
						outMapList.remove(i);
						isSosai = true;
					}
				}
			}
			prevSvcKeiNo = svcKeiNo;
			if (!isSosai)
			{
				i++;
			}
		}
		for (String fmtcelIdoTchiNo : jgiList)
		{
			// フェムトセル異動通知更新(連携不要に更新)
			updFmtcelIdoTchi(FMTCEL_IDO_RNK_STAT_CD_RNK_FUYO, "", fmtcelIdoTchiNo);
		}
	}

	/**
	 * 出力リスト内の異動情報について相殺処理を行います。<br>
	 * 2つの相殺対象の異動がどちらもリストに存在する場合は、リストから該当した異動を削除します。
	 * <br>
	 * @param outMapList 出力リスト
	 * @param index 出力リストのインデックス
	 * @param sosaiIdoDiv 相殺対象の異動
	 * @param sosaiIdoDiv2 相殺対象の異動2
	 * @return 連携不要となったフェムトセル異動通知番号のリスト
	 * @throws Exception
	 */
	private List<String> sosai(List<JBSbatServiceInterfaceMap> outMapList, int index, String sosaiIdoDiv, String sosaiIdoDiv2) throws Exception
	{
		// 
		List<String> jgiList = new ArrayList<String>();
		String svcKeiNo = null;

		while (index < outMapList.size())
		{
			boolean isSosai = false;
			if (null == svcKeiNo)
			{
				svcKeiNo = outMapList.get(index).getString(JBSbatKK_T_FMTCEL_IDO_TCHI.SVC_KEI_NO);
			}
			if (svcKeiNo.equals(outMapList.get(index).getString(JBSbatKK_T_FMTCEL_IDO_TCHI.SVC_KEI_NO)))
			{
				String idoDiv = outMapList.get(index).getString(JBSbatKK_T_FMTCEL_IDO_TCHI.IDO_DIV);
				if (sosaiIdoDiv.equals(idoDiv) || sosaiIdoDiv2.equals(idoDiv))
				{
					for (int index2 = index + 1; index2 < outMapList.size() && svcKeiNo.equals(outMapList.get(index2).getString(JBSbatKK_T_FMTCEL_IDO_TCHI.SVC_KEI_NO)); index2++)
					{
						String idoDiv2 = outMapList.get(index2).getString(JBSbatKK_T_FMTCEL_IDO_TCHI.IDO_DIV);
						if ((sosaiIdoDiv.equals(idoDiv) && sosaiIdoDiv2.equals(idoDiv2)) || (sosaiIdoDiv2.equals(idoDiv) && sosaiIdoDiv.equals(idoDiv2)))
						{
							String sosaiFmtcelIdoTchiNo1 = outMapList.get(index).getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_IDO_TCHI_NO);
							String sosaiFmtcelIdoTchiNo2 = outMapList.get(index2).getString(JBSbatKK_T_FMTCEL_IDO_TCHI.FMTCEL_IDO_TCHI_NO);
							super.logPrint.printDebugLog("相殺するフェムトセル異動通知番号1=" + sosaiFmtcelIdoTchiNo1);
							super.logPrint.printDebugLog("相殺するフェムトセル異動通知番号2=" + sosaiFmtcelIdoTchiNo2);
							jgiList.add(sosaiFmtcelIdoTchiNo1);
							jgiList.add(sosaiFmtcelIdoTchiNo2);
							// 相殺するのでリストから削除
							outMapList.remove(index2);	// 後の方から削除
							outMapList.remove(index);
							isSosai = true;
							break;
						}
					}
				}
			}
			else
			{
				break;
			}

			if (!isSosai)
			{
				index++;
			}
		}
		return jgiList;
	}

	/**
	 * フェムトセル異動通知テーブルを更新します。
	 * <br>
	 * @param fmtcelIdoRnkStatCd フェムトセル異動連携状態コード
	 * @param fmtcelIdoRnkYmd フェムトセル異動連携年月日
	 * @param fmtcelIdoTchiNo フェムトセル異動通知番号
	 * @throws Exception
	 */
	private void updFmtcelIdoTchi(String fmtcelIdoRnkStatCd, String fmtcelIdoRnkYmd, String fmtcelIdoTchiNo) throws Exception
	{
		super.logPrint.printDebugLog("フェムトセル異動通知更新　更新内容：フェムトセル異動通知番号=" + fmtcelIdoTchiNo
				+ ",フェムトセル異動連携状態コード=" + fmtcelIdoRnkStatCd + ",フェムトセル異動連携年月日=" + fmtcelIdoRnkYmd);

		String[] setParam =
		{
			fmtcelIdoRnkStatCd,
			fmtcelIdoRnkYmd
		};

		String[] whereParam =
		{
			fmtcelIdoTchiNo
		};

		executeKK_T_FMTCEL_IDO_TCHI_PKUPDATE(setParam, whereParam);
	}

	/**
	 * 電子ファイル管理・ダウンロードファイル管理テーブルに登録します。
	 * <br>
	 * @param recCnt レコード件数
	 * @throws Exception
	 */
	private void addEfileKanriDlFileKanri(int recCnt) throws Exception
	{
		//電子ファイル登録用パラメータ
		String fileCd = EFILE_KANRI_FILE_CD;	//ファイルコード
		String fileDelYmd = JKKStrConst.END_YMD_DEFAULT;	//ファイル削除日付＝なし

		File targetFile = null;
		if (null != outFilePath1 && 0 < outFilePath1.length())
		{
			targetFile = new File(outFilePath1);
		}

		//パラメータをチェック
		if (null != targetFile && targetFile.exists())
		{
			// 処理管理番号
			String trnKanriNo = TRN_KANRI_NO_SBM;
			if (JIGYOSHA_CD_AU.equals(jigyoshaCd))
			{
				trnKanriNo = TRN_KANRI_NO_AU;
			}
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD START
			else if (JIGYOSHA_CD_DOCOMO.equals(jigyoshaCd))
			{
				trnKanriNo = TRN_KANRI_NO_DOCOMO;
			}
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD END
			// ANK-4369-00-00 ADD START
			else if (JIGYOSHA_CD_RAKUTEN.equals(jigyoshaCd))
			{
				trnKanriNo = TRN_KANRI_NO_RAKUTEN;
			}
			// ANK-4369-00-00 ADD END
			//電子ファイル登録
			String[] ret = JCCbatDenshiFileUtil.createDenshiFile(this.commonItem, fileCd, targetFile.getPath(), fileDelYmd);

			super.logPrint.printDebugLog(JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.EKKB0110AI, new String[]{ret[0], ret[1]}));

			//ダウンロードファイル登録
			String[] dlFileParams = new String[]{
				trnKanriNo,				// 処理管理番号
				targetFile.getName(),	// ファイル名
				String.valueOf(recCnt),	// データ件数
				ret[0],					// 電子ファイル管理番号
				ret[1]					// 世代登録年月日時分秒
			};
			executeZM_T_DL_FILE_KANRI_KK_INSERT_002(dlFileParams);
		}
		else
		{
			super.commonItem.setErrFlg(true);
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0060TE, new String[]{targetFile.getPath()});
			throw new JBSbatBusinessError(JPCBatchMessageConstant.EKKB0060TE);
		}
	}

	/**
	 * サービス契約内訳＜eo光ネット＞テーブルからISP認証IDを取得します。
	 * <br>
	 * @param svcKeiNo サービス契約番号
	 * @return ISP認証ID
	 * @throws Exception
	 */
	private String getNinshoId(String svcKeiNo) throws Exception
	{
		String ispNinshoId = "";

		String[] whereParam =
		{
			svcKeiNo,
			super.opeDate
		};
		executeKK_T_SVKEIUW_EOH_NET_KK_SELECT_010(whereParam);

		HashMap<String, String> msgMap = new HashMap<String, String>();
		msgMap.put("DB-KK_T_SVKEIUW_EOH_NET-KK_SELECT_010.ISP_NINSHO_ID", "ISP認証ID");
		JBSbatCommonDBInterface resultMap = db_KK_T_SVKEIUW_EOH_NET.selectNext();
		if (!isExistCheckKK_T_SVKEIUW_EOH_NET_KK_SELECT_010(resultMap, null)
			|| !isSingleCheckKK_T_SVKEIUW_EOH_NET_KK_SELECT_010(resultMap.getMap(), msgMap))
		{
			super.logPrint.printDebugLog("サービス契約内訳＜ｅｏ光ネット＞検索　検索条件：サービス契約番号=" + svcKeiNo);
			// エラーフラグ設定
			super.commonItem.setErrFlg(true);
		}
		else
		{
			// 「@」を含む場合は、「@」以降を削除する
			String tmpIspNinshoId = resultMap.getString("ISP_NINSHO_ID");
			int index = tmpIspNinshoId.indexOf("@");
			// SoftBankの場合はそのまま
			if (index > 0 && !JIGYOSHA_CD_SBM.equals(jigyoshaCd))
			{
				ispNinshoId = tmpIspNinshoId.substring(0, index);
			}
			else
			{
				ispNinshoId = tmpIspNinshoId;
			}
		}

		return (ispNinshoId.length() > MAX_LEN_NINSHO_ID) ? ispNinshoId.substring(0, MAX_LEN_NINSHO_ID) : ispNinshoId;
	}

	/**
	 * フェムトセル異動区分変換テーブルからフェムトセル異動区分を取得します。
	 * <br>
	 * @param idoDiv 異動区分
	 * @param fmtcelIdoDtlCd フェムトセル異動詳細コード
	 * @return フェムトセル異動区分
	 * @throws Exception
	 */
	private String getFmtcelIdoDiv(String idoDiv, String fmtcelIdoDtlCd) throws Exception
	{
		String fmtcelIdoDiv = "";

		String[] whereParam =
		{
			jigyoshaCd,
			idoDiv,
			fmtcelIdoDtlCd,
			super.opeDate,
			super.opeDate
		};
		executeKK_M_FMTCEL_IDV_CHG_KK_SELECT_001(whereParam);

		JBSbatCommonDBInterface resultMap = db_KK_M_FMTCEL_IDV_CHG.selectNext();

		HashMap<String, String> msgMap = new HashMap<String, String>();
		msgMap.put("DB-KK_M_FMTCEL_IDV_CHG-KK_SELECT_001.FMTCEL_IDO_DIV", "フェムトセル異動区分");
		if (!isExistCheckKK_M_FMTCEL_IDV_CHG_KK_SELECT_001(resultMap, null)
			|| !isSingleCheckKK_M_FMTCEL_IDV_CHG_KK_SELECT_001(resultMap.getMap(), msgMap))
		{
			super.logPrint.printDebugLog("フェムトセル異動区分変換検索　検索条件：事業者コード="
					+ jigyoshaCd + ",異動区分=" + idoDiv + ",フェムトセル異動詳細コード=" + fmtcelIdoDtlCd);
			// エラーフラグ設定
			super.commonItem.setErrFlg(true);
		}
		else
		{
			fmtcelIdoDiv = resultMap.getString("FMTCEL_IDO_DIV");
		}

		return fmtcelIdoDiv;
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/

		// IT2-2012-0001878 START
		// 電子ファイル登録前にファイルを閉じる。
		// （明示的にファイルと閉じないと、ファイルの書き込みが終了する前に電話ファイルを登録する可能性があるため）
		super.commonItem.getOutPutFile().close();
		// IT2-2012-0001878 END
		
		// 電子ファイル管理・ダウンロードファイル管理登録
		addEfileKanriDlFileKanri(recCnt);

		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_FMTCEL_IDO_TCHI.close();
		db_KK_M_FMTCEL_IDV_CHG.close();
		db_KK_T_SVKEIUW_EOH_NET.close();
		// ANK-1187-00-00 SBMフェムトセル対応 2012/09/14 START
		// ANK-1349-00-00 2012/11/20 MOD START
		db_ZM_M_WORK_PARAM_KNRI.close();
		// ANK-1349-00-00 2012/11/20 MOD END
		// ANK-1187-00-00 SBMフェムトセル対応 2012/09/14 END
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD START
		db_CK_T_CUST.close();
		db_KK_T_SVKEI_KAISEN_UW.close();
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD END
		db_ZM_T_DL_FILE_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	フェムトセル事業者コード
	 *		 	工事案件番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_FMTCEL_IDO_TCHI_KK_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_FMTCEL_IDO_TCHI.selectBySqlDefine(paramList, KK_T_FMTCEL_IDO_TCHI_KK_SELECT_002);
	}

	/**
	 * SQLKEY(KK_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	フェムトセル事業者コード
	 *		 	異動区分
	 *		 	フェムトセル異動詳細コード
	 *		 	フェムトセル異動区分変換適用開始年月日
	 *		 	フェムトセル異動区分変換適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_FMTCEL_IDV_CHG_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_KK_M_FMTCEL_IDV_CHG.selectBySqlDefine(paramList, KK_M_FMTCEL_IDV_CHG_KK_SELECT_001);
	}

	/**
	 *入力情報（フェムトセル異動区分変換）の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 DB-KK_M_FMTCEL_IDV_CHG-KK_SELECT_001.FMTCEL_IDO_DIV			フェムトセル異動区分変換.フェムトセル異動区分
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckKK_M_FMTCEL_IDV_CHG_KK_SELECT_001(HashMap rsMap, HashMap itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// フェムトセル異動区分項目チェック
		strValue = (String)rsMap.get("FMTCEL_IDO_DIV");
		// 必須チェック
		if(null == strValue || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0210CE", new String[]{
															"フェムトセル異動区分変換",
															(String)itemvalueMap.get("DB-KK_M_FMTCEL_IDV_CHG-KK_SELECT_001.FMTCEL_IDO_DIV")});
			return false;
		}

		return true;
	}

	/**
	 *入力情報（フェムトセル異動区分変換）の存在チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.存在チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		nRsCnt:レコード数
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 * </pre>
	 * <p>
	 * @param rsDB レコードデータオブジェクト。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isExistCheckKK_M_FMTCEL_IDV_CHG_KK_SELECT_001(JBSbatCommonDBInterface rsDB, HashMap itemvalueMap)
	{
		int nRsCnt = 0;
		if(rsDB != null)
		{
			nRsCnt = 1;
		}
		// 存在チェックを行います(SQLKEY=KK_SELECT_001)
		if(nRsCnt != 1)
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0150JE", new String[]{
															"フェムトセル異動区分変換"});
			return false;
		}
		return true;
	}

	/**
	 * SQLKEY(KK_SELECT_010)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVKEIUW_EOH_NET_KK_SELECT_010(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVKEIUW_EOH_NET.selectBySqlDefine(paramList, KK_T_SVKEIUW_EOH_NET_KK_SELECT_010);
	}

	/**
	 *入力情報（サービス契約内訳＜ｅｏ光ネット＞）の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 DB-KK_T_SVKEIUW_EOH_NET-KK_SELECT_010.ISP_NINSHO_ID			サービス契約内訳＜ｅｏ光ネット＞.ＩＳＰ認証ＩＤ
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckKK_T_SVKEIUW_EOH_NET_KK_SELECT_010(HashMap rsMap, HashMap itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// ＩＳＰ認証ＩＤ項目チェック
		strValue = (String)rsMap.get("ISP_NINSHO_ID");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0210CE", new String[]{
															"サービス契約内訳＜ｅｏ光ネット＞",
															(String)itemvalueMap.get("DB-KK_T_SVKEIUW_EOH_NET-KK_SELECT_010.ISP_NINSHO_ID")});
			return false;
		}

		return true;
	}

	/**
	 *入力情報（サービス契約内訳＜ｅｏ光ネット＞）の存在チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.存在チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		nRsCnt:レコード数
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 * </pre>
	 * <p>
	 * @param rsDB レコードデータオブジェクト。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isExistCheckKK_T_SVKEIUW_EOH_NET_KK_SELECT_010(JBSbatCommonDBInterface rsDB, HashMap itemvalueMap)
	{
		int nRsCnt = 0;
		if(rsDB != null)
		{
			nRsCnt = 1;
		}
		// 存在チェックを行います(SQLKEY=KK_SELECT_010)
		if(nRsCnt != 1)
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0150JE", new String[]{
															"サービス契約内訳＜ｅｏ光ネット＞"});
			return false;
		}
		return true;
	}

	// ANK-1187-00-00 SBMフェムトセル対応 2012/09/14 START
	// ANK-1349-00-00 2012/11/20 MOD START
	/**
	 * SQLKEY(KK_SELECT_016)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	業務パラメータID
	 *		 	バッチ運用日付
	 *		 	バッチ運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_WORK_PARAM_KNRI_KK_SELECT_016(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_ZM_M_WORK_PARAM_KNRI.selectBySqlDefine(paramList, ZM_M_WORK_PARAM_KNRI_KK_SELECT_016);
	}
	// ANK-1349-00-00 2012/11/20 MOD END
	// ANK-1187-00-00 SBMフェムトセル対応 2012/09/14 END

	// ANK-1187-00-00 SBMフェムトセル対応 2012/09/14 START
	// ANK-1349-00-00 2012/11/20 MOD START
	/**
	 *入力情報（業務パラメータ管理）の存在チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.存在チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		nRsCnt:レコード数
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 * </pre>
	 * <p>
	 * @param rsDB レコードデータオブジェクト。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isExistCheckZM_M_WORK_PARAM_KNRI_KK_SELECT_016(JBSbatCommonDBInterface rsDB, HashMap itemvalueMap)
	{
		int nRsCnt = 0;
		if(rsDB != null)
		{
			nRsCnt = 1;
		}
		// 存在チェックを行います(SQLKEY=KK_SELECT_016)
		if(nRsCnt != 1)
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0150JE", new String[]{
															"業務パラメータ管理"});
			return false;
		}
		return true;
	}
	// ANK-1349-00-00 2012/11/20 MOD END
	// ANK-1187-00-00 SBMフェムトセル対応 2012/09/14 END

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	フェムトセル異動連携状態コード				FMTCEL_IDO_RNK_STAT_CD
	 *		 	フェムトセル異動連携年月日				FMTCEL_IDO_RNK_YMD
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	FMTCEL_IDO_TCHI_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_FMTCEL_IDO_TCHI_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("FMTCEL_IDO_RNK_STAT_CD", setParam[0]);
		setMap.setValue("FMTCEL_IDO_RNK_YMD", setParam[1]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("FMTCEL_IDO_TCHI_NO", whereParam[0]);

		// DBアクセスを実行します
		db_KK_T_FMTCEL_IDO_TCHI.updateByPrimaryKeys(whereMap, setMap);
	}

	/**
	 * SQLKEY(KK_INSERT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	処理管理番号
	 *		 	ファイル名
	 *		 	データ件数
	 *		 	電子ファイル管理番号
	 *		 	世代登録年月日時分秒
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_DL_FILE_KANRI_KK_INSERT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.executeBySqlDefine(paramList, ZM_T_DL_FILE_KANRI_KK_INSERT_002);
	}
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD START
	/**
	 * SQLKEY(KK_SELECT_062)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	バッチ運用日付
	 *		 	サービス契約番号
	 *		 	サービス契約番号
	 *		 	バッチ運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_CUST_KK_SELECT_062(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_CK_T_CUST.selectBySqlDefine(paramList, CK_T_CUST_KK_SELECT_062);
	}

	/**
	 * SQLKEY(KK_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVKEI_KAISEN_UW_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		// OM-2016-0002006 SQL変更のためパラメータ追加 2016/10/19 ADD START
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		// OM-2016-0002006 SQL変更のためパラメータ追加 2016/10/19 ADD END
		// DBアクセスを実行します
		db_KK_T_SVKEI_KAISEN_UW.selectBySqlDefine(paramList, KK_T_SVKEI_KAISEN_UW_KK_SELECT_001);
	}

	/**
	 *入力情報（お客様）の存在チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.存在チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		nRsCnt:レコード数
	 * </pre>
	 * <p>
	 * @param rsDB レコードデータオブジェクト。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isExistCheckCK_T_CUST_KK_SELECT_062(JBSbatCommonDBInterface rsDB)
	{
		int nRsCnt = 0;
		if(rsDB != null)
		{
			nRsCnt = 1;
		}
		// 存在チェックを行います(SQLKEY=KK_SELECT_062)
		if(nRsCnt != 1)
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0150JE", new String[]{"お客様"});
			return false;
		}
		return true;
	}

	/**
	 *入力情報（サービス契約回線内訳）の存在チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.存在チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		nRsCnt:レコード数
	 * </pre>
	 * <p>
	 * @param rsDB レコードデータオブジェクト。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isExistCheckKK_T_SVKEI_KAISEN_UW_KK_SELECT_001(JBSbatCommonDBInterface rsDB)
	{
		int nRsCnt = 0;
		if(rsDB != null)
		{
			nRsCnt = 1;
		}
		// 存在チェックを行います(SQLKEY=KK_SELECT_001)
		if(nRsCnt != 1)
		{
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0150JE", new String[]{
															"サービス契約回線内訳"});
			return false;
		}
		return true;
	}

	/**
	 * お客様テーブルからお客様名を取得します。
	 * <br>
	 * @param svcKeiNo サービス契約番号
	 * @return お客様名
	 * @throws Exception
	 */
	private String getCustNm(String svcKeiNo) throws Exception
	{
		String custNm = "";

		String[] whereParam =
		{
			super.opeDate,
			svcKeiNo,
			svcKeiNo,
			super.opeDate
		};
		executeCK_T_CUST_KK_SELECT_062(whereParam);

		JBSbatCommonDBInterface resultMap = db_CK_T_CUST.selectNext();

		if (!isExistCheckCK_T_CUST_KK_SELECT_062(resultMap))
		{
			super.logPrint.printDebugLog("お客様検索　検索条件：サービス契約番号="
					+ svcKeiNo + ",予約適用年月日=" + super.opeDate);
			// エラーフラグ設定
			super.commonItem.setErrFlg(true);
			throw new JBSbatBusinessException(
					JPCBatchMessageConstant.EKKB0150JE, new String[]{"お客様"});
		}
		else
		{
			custNm = resultMap.getString("CUST_NM");
		}

		return custNm;
	}

	/**
	 * サービス契約回線内訳テーブルからKOPT設置場所住所(回線場所都道府県名〜回線場所住所補記・部屋番号)を取得します。
	 * <br>
	 * @param svcKeiNo サービス契約番号
	 * @return KOPT設置場所住所
	 * @throws Exception
	 */
	private String getKoptEstPlaceAdr(String svcKeiNo) throws Exception
	{
		String koptEstPlaceAdr = "";

		String[] whereParam =
		{
			svcKeiNo
			// OM-2016-0002006 SQL変更のためパラメータ追加 2016/10/19 ADD START
			,super.opeDate
			,super.opeDate
			// OM-2016-0002006 SQL変更のためパラメータ追加 2016/10/19 ADD END
		};
		executeKK_T_SVKEI_KAISEN_UW_KK_SELECT_001(whereParam);

		JBSbatCommonDBInterface resultMap = db_KK_T_SVKEI_KAISEN_UW.selectNext();

		if (!isExistCheckKK_T_SVKEI_KAISEN_UW_KK_SELECT_001(resultMap))
		{
			super.logPrint.printDebugLog("サービス契約回線内訳検索　検索条件：サービス契約番号=" + svcKeiNo);
			// エラーフラグ設定
			super.commonItem.setErrFlg(true);
			throw new JBSbatBusinessException(
					JPCBatchMessageConstant.EKKB0150JE, new String[]{"サービス契約回線内訳"});
		}
		else
		{
			// 共通部品で住所項目を編集する(105桁)
			koptEstPlaceAdr = JZMAdOutputEdit.getPtn23(
								JBSbatStringUtil.Rtrim(resultMap.getString("KAISEN_PLACE_STATE_NM")),
								JBSbatStringUtil.Rtrim(resultMap.getString("KAISEN_PLACE_CITY_NM")),
								JBSbatStringUtil.Rtrim(resultMap.getString("KAISEN_PLACE_OAZTSU_NM")),
								JBSbatStringUtil.Rtrim(replaceAzchoNm(resultMap.getString("KAISEN_PLACE_AZCHO_NM"))),
								JBSbatStringUtil.Rtrim(resultMap.getString("KAISEN_PLACE_BNCHIGO")),
								JBSbatStringUtil.Rtrim(resultMap.getString("KAISEN_PLACE_ADRTTM")),
								JBSbatStringUtil.Rtrim(resultMap.getString("KAISEN_PLACE_ADRRM")));
		}

		return koptEstPlaceAdr;
	}

	/**
	 * 字丁目名の「丁目」を「−」に変換します。<br>
	 * 
	 * @param azchoNm 字丁目名
	 * @return 変換後の字丁目名
	 */
	private String replaceAzchoNm(String azchoNm) {
		if (null != azchoNm)
		{
			return azchoNm.replaceAll(SEARCH_AZCHO, REPLACE_AZCHO);
		}

		return azchoNm;
	}
// ANK-1586-00-00 フェムトセル対応(docomo) 2014/01/10 ADD END
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
