/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKVCheckKicjknNo
*	ソースファイル名	：JBSbatKVCheckKicjknNo.java
*	作成者				：富士通　
*	作成日				：2013年05月30日
*＜機能概要＞
*　契約異動検証＿一時金検証部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/05/30   富士通		新規作成
*	v5.00.00	2013/08/22	 FJ)竹之下	【OM-2013-0000397 】メッセージ変更
*	v5.00.00	2013/09/18	 FJ)竹之下	【OM-2013-0002073 】
*	v5.00.00	2013/09/18	 FJ)竹之下	【OM-2013-0002406 】
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKVIFM005;
import eo.business.util.file.JBSbatKVIFM006;
import eo.business.util.table.JBSbatKK_M_TMP_PAY_PRC;
import eo.business.util.table.JBSbatKK_T_ICJKN_SETTE;
import eo.business.util.table.JBSbatKK_T_IDO_RSN;
import eo.business.util.table.JBSbatKK_T_KAISEN_TG_SVKEI;
import eo.business.util.table.JBSbatKK_T_KICJKN;
import eo.business.util.table.JBSbatKK_T_KKTK_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_MANSION_BUKKEN;
import eo.business.util.table.JBSbatKK_T_OP_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_PRG;
import eo.business.util.table.JBSbatKK_T_SEIKY_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI_UCWK;
import eo.business.util.table.JBSbatKK_T_SVKEIUW_EOH_TEL;
import eo.business.util.table.JBSbatKK_T_TK_HOSHIKI_KEI;
import eo.business.util.table.JBSbatKV_M_IDVB_ICJKN_CRJK;
import eo.business.util.table.JBSbatTU_T_DNWACHOMSK_NYO;
import eo.business.util.table.JBSbatZM_M_CD_NM_KANRI;
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.util.JBSbatDateUtil;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKVCheckKicjkn extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(回線対象サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KAISEN_TG_SVKEI = "KK_T_KAISEN_TG_SVKEI";

	/** テーブル(オプションサービス契約)*/
	private static final String D_TBL_NAME_KK_T_OP_SVC_KEI = "KK_T_OP_SVC_KEI";

	/** テーブル(異動理由)*/
	private static final String D_TBL_NAME_KK_T_IDO_RSN = "KK_T_IDO_RSN";

	/** テーブル(電話帳申込)*/
	private static final String D_TBL_NAME_TU_T_DNWACHOMSK = "TU_T_DNWACHOMSK";

	/** テーブル(サービス契約内訳)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI_UCWK = "KK_T_SVC_KEI_UCWK";

	/** テーブル(契約一時金)*/
	private static final String D_TBL_NAME_KK_T_KICJKN = "KK_T_KICJKN";

	/** テーブル(一時金設定)*/
	private static final String D_TBL_NAME_KK_T_ICJKN_SETTE = "KK_T_ICJKN_SETTE";

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";
	/** テーブル(課金先)*/
	private static final String D_TBL_NAME_KK_T_KAKINS = "KK_T_KAKINS";

	/** テーブル(異動区分別一時金生成条件)*/
	private static final String D_TBL_KV_M_IDVB_ICJKN_CRJK  = "KV_M_IDVB_ICJKN_CRJK";
	/** テーブル(一時支払料金マスタ)*/
	private static final String D_TBL_KK_M_TMP_PAY_PRC  = "KK_M_TMP_PAY_PRC";
	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";

	/** SQL定義キー(KV_SELECT_001)*/
	private static final String KK_T_KAISEN_TG_SVKEI_KV_SELECT_001 = "KV_SELECT_001";

	/** SQL定義キー(KV_SELECT_004)*/
//	private static final String KK_T_OP_SVC_KEI_KV_SELECT_004 = "KV_SELECT_004";

	/** SQL定義キー(KV_SELECT_001)*/
	private static final String KK_T_IDO_RSN_KV_SELECT_001 = "KV_SELECT_001";

	/** SQL定義キー(KV_SELECT_001)*/
	private static final String TU_T_DNWACHOMSK_KV_SELECT_001 = "KV_SELECT_001";

	/** SQL定義キー(KV_SELECT_002)*/
	private static final String KK_T_KAISEN_TG_SVKEI_KV_SELECT_002 = "KV_SELECT_002";

	/** SQL定義キー(KV_SELECT_003)*/
	private static final String KK_T_KAISEN_TG_SVKEI_KV_SELECT_003 = "KV_SELECT_003";

	/** SQL定義キー(KV_SELECT_009)*/
	private static final String KK_T_SVC_KEI_UCWK_KV_SELECT_009 = "KV_SELECT_009";

	/** SQL定義キー(KV_SELECT_013)*/
	private static final String KK_T_SVC_KEI_UCWK_KV_SELECT_013 = "KV_SELECT_013";

	/** SQL定義キー(KV_SELECT_001)*/
	private static final String KK_T_KICJKN_KV_SELECT_001 = "KV_SELECT_001";

	/** SQL定義キー(KV_SELECT_001)*/
	private static final String KK_T_ICJKN_SETTE_KV_SELECT_001 = "KV_SELECT_001";

	/** SQL定義キー(KV_SELECT_006)*/
	private static final String KK_T_SVC_KEI_KV_SELECT_007 = "KV_SELECT_007";

	/** SQL定義キー(KV_SELECT_001)*/
//	private static final String KK_M_PRC_GRP_KV_SELECT_001 = "KV_SELECT_001";

	/** SQL定義キー(KV_SELECT_001)*/
	private static final String ZM_M_CD_NM_KANRI_KV_SELECT_001 = "KV_SELECT_001";

	/** SQL定義キー(KV_SELECT_001)*/
	private static final String KV_M_IDOBT_TPP_ST_JK_KV_SELECT_001 = "KV_SELECT_001";
	/** SQL定義キー(KV_SELECT_002)*/
	private static final String KK_T_KAKINS_KV_SELECT_002 = "KV_SELECT_002";
	/** SQL定義キー(KV_SELECT_016)*/
	private static final String KK_T_OP_SVC_KEI_KV_SELECT_016 = "KV_SELECT_016";

	/** テーブルアクセスクラス(回線対象サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KAISEN_TG_SVKEI = null;

	/** テーブルアクセスクラス(オプションサービス契約)*/
	private JBSbatSQLAccess db_KK_T_OP_SVC_KEI = null;

	/** テーブルアクセスクラス(異動理由)*/
	private JBSbatSQLAccess db_KK_T_IDO_RSN = null;

	/** テーブルアクセスクラス(電話帳申込)*/
	private JBSbatSQLAccess db_TU_T_DNWACHOMSK = null;

	/** テーブルアクセスクラス(サービス契約内訳)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI_UCWK = null;

	/** テーブルアクセスクラス(契約一時金)*/
	private JBSbatSQLAccess db_KK_T_KICJKN = null;

	/** テーブルアクセスクラス(一時金設定)*/
	private JBSbatSQLAccess db_KK_T_ICJKN_SETTE = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;
	/** テーブルアクセスクラス(異動区分別一時金生成条件)*/
	private JBSbatSQLAccess db_KV_M_IDVB_ICJKN_CRJK = null;
	/** テーブルアクセスクラス(一時支払料金)*/
	private JBSbatSQLAccess db_KK_M_TMP_PAY_PRC = null;
	/** テーブルアクセスクラス(課金先)*/
	private JBSbatSQLAccess db_KK_T_KAKINS = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	/** FREE項目から取得した出力モード */
	private String outMode = null;
	/** FREE項目から取得した終了日(運用日) */
	private String prmEndDay = null;
	/** サービス契約データ */
	private JBSbatCommonDBInterface svckData = null;
	/** 提供方式データ */
	private JBSbatCommonDBInterface knsyoData = null;
	/** バンドル有無データ(回線対象サービス契約) */
	private ArrayList<JBSbatCommonDBInterface> ksnTgDatLst =
		new ArrayList<JBSbatCommonDBInterface>();
	/** 契約一時金データ */
	private JBSbatCommonDBInterface tmpPrcData = null;
	/** 異動区分別一時金生成条件マスタデータ */
	private JBSbatCommonDBInterface JyknMstData = null;
	/** 番ポ有無 */
	private String bumpUm = "";
	/** バンドル有無 */
	private String bndlUm = "";
	/** 異動区分(進捗) */
	private String idoKbn = "";
	/** 進捗ステータス(進捗) */
	private String prgStat = "";
	/** サービス契約番号 */
	private String svckNo = "";
	/** サービス契約内訳番号 */
	private String svckUchwNo = "";
	/** 料金グループCD */
	private String ryknGrpCd = "";
	/** 料金コースCD */
	private String ryknCrsCd = "";
	/** 異動理由CD */
	private String idoRsn = "";

	/** オプションサービスリスト */
	private ArrayList<JBSbatCommonDBInterface> optSvcLst =
		new ArrayList<JBSbatCommonDBInterface>();
	/** 掲載手数料種別CD */
	private String guidCd = "";
	/** オプションCD */
	private String optnCd = "";
	/** オプション名 */
	private String optnNm = "";
	/** オプションサービス契約のプラン課金開始年月日 */
	private String optnPlnChStr = "";
	/** 進捗ステータス名 */
	private String prgStNm = "";
	/** 進捗:異動区分名 */
	private String idoDivNm = "";

	/** 契約一時金チェックデータ(opt,内訳) */
	private JBSbatCommonDBInterface dtlData = null;
	/** 出力共通電文 */
	JBSbatOutputItem outputBean = new JBSbatOutputItem();
	/** 初回読込フラグ */
	private boolean firstFlg = true;
	/** 条件マスタデータリスト */
	private ArrayList<JBSbatCommonDBInterface> jknMstLst =
		new ArrayList<JBSbatCommonDBInterface>();
	/** 不整合DB名 */
	private String fuseigoDbName = "";
	/** マスタ：適用月 */
	private String mstAplyYmd = "";
	/** 一時金：適用月 */
	private String tmpAplyYmd = "";
	/** 一時金番号リスト */
	private ArrayList<String> tempPayNoLst = new ArrayList<String>();
	/** 掲載手数料発生の一時金番号リスト */
	private ArrayList<String> telKsiPayNoLst = new ArrayList<String>();
	/** インフォメーションメッセージID */
	private static final String EKKB0960AI = "EKKB0960AI";
	/** 進捗ステータス コース変更 */
	private static final String CRS_CHA_FIN = "1422";
	/** ２番号重複チェックリスト */
	private ArrayList<String> telDblLst = new ArrayList<String>();
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		// フリー項目を分割して日付を取得する。
		String[] freeItemArray = commonItem.getFreeItem().split("@");
		outMode = freeItemArray[0];
		prmEndDay = freeItemArray[1];
		commonItem.getLogPrint().printDebugLog("バッチ運用日:" + prmEndDay);
		setTmpPayLst();
		setTelKsiPayLst();
		// DBアクセスクラスを生成します
		db_KK_T_KAISEN_TG_SVKEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAISEN_TG_SVKEI);
		db_KK_T_OP_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_OP_SVC_KEI);
		db_KK_T_IDO_RSN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_IDO_RSN);
		db_TU_T_DNWACHOMSK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_TU_T_DNWACHOMSK);
		db_KK_T_SVC_KEI_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI_UCWK);
		db_KK_T_KICJKN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KICJKN);
		db_KK_T_ICJKN_SETTE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_ICJKN_SETTE);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
		db_KV_M_IDVB_ICJKN_CRJK = new JBSbatSQLAccess(commonItem, D_TBL_KV_M_IDVB_ICJKN_CRJK);
		db_KK_M_TMP_PAY_PRC = new JBSbatSQLAccess(commonItem, D_TBL_KK_M_TMP_PAY_PRC);
		db_KK_T_KAKINS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAKINS);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		try{
			setIni(inMap);	//初期化
			//サービス契約番号のチェック 必須なのでチェックしない
			//検証用データ取得
			if(!getKsyInfo(inMap))
			{
				if(!"1".equals(outMode))	//1:調査対象のみ以外は出力
				{
					outputBean.addOutMapList(setOutInfo("4", inMap));
				}
				return outputBean;
			}

			//2番号重複チェック防止
			if(!checkDuplicat(inMap))
			{
				return null;
			}

			//異動区分:オプション設定にも関わらずオプションデータなし→対象外
			if("00031".equals(idoKbn) && (null == optSvcLst || 0 == optSvcLst.size()))
			{
				if("3".equals(outMode))
				{
					outputBean.addOutMapList(setOutInfo("3", inMap));	//対象外
				}
				return outputBean;
			}

			if(0 == optSvcLst.size())
			{
				optSvcLst.add(new JBSbatCommonDBInterface());	//ダミー
			}
			out:for(JBSbatCommonDBInterface optCd: optSvcLst)	//オプションSVC複数分検証
			{
				setOPt(optCd);
				if(!getJyknMst(optCd))	//条件マスタ該当なし
				{
					if("3".equals(outMode))
					{
						outputBean.addOutMapList(setOutInfo("3", inMap));	//対象外
					}
					continue out;
				}
				//条件マスタ該当分チェック
				in:for(JBSbatCommonDBInterface mst : jknMstLst)
				{
					fuseigoDbName = "";
					JyknMstData = mst;
					if(tmpPrcData != null)
					{
						tmpPrcData.getMap().clear();
					}

					if("0".equals(guidCd))	super.logPrint.printDebugLog(guidCd + ":掲載ガイドあり in" + svckNo);
					if(!checkCommt(mst))
					{
						if("3".equals(outMode))
						{
							outputBean.addOutMapList(setOutInfo("3", inMap));	//対象外
							continue in;
						}
					}
					//契約一時金 取得
					getKtnmp();
					//一時支払料金番号の検証
					if(!knsyoTmpPayNo(optCd))
					{
						outputBean.addOutMapList(setOutInfo("1", inMap));
						continue in;
					}else
					{
						if("2".equals(outMode) || "3".equals(outMode))
						{
							outputBean.addOutMapList(setOutInfo("2", inMap));	//正常
							continue in;
						}
					}
				}
			}
			return outputBean;
		}catch(Exception e)
		{
			super.logPrint.printBusinessErrorLog(EKKB0960AI, new String[]{
					"info：" + e + " " + svckNo + " " + idoKbn + " " + optnCd
					+ " " + getStaCkInfo(e)});
			return null;
		}
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_KAISEN_TG_SVKEI.close();
		db_KK_T_OP_SVC_KEI.close();
		db_KK_T_IDO_RSN.close();
		db_TU_T_DNWACHOMSK.close();
		db_KK_T_SVC_KEI_UCWK.close();
		db_KK_T_KICJKN.close();
		db_KK_T_ICJKN_SETTE.close();
		db_KK_T_SVC_KEI.close();
		db_ZM_M_CD_NM_KANRI.close();
		db_KV_M_IDVB_ICJKN_CRJK.close();
		db_KK_M_TMP_PAY_PRC.close();
		db_KK_T_KAKINS.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
		super.logPrint.printDebugLog("terminal_END");
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * SQLKEY(KV_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_KAISEN_TG_SVKEI_KV_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());
		// DBアクセスを実行します
		db_KK_T_KAISEN_TG_SVKEI.selectBySqlDefine(paramList, KK_T_KAISEN_TG_SVKEI_KV_SELECT_001);
	}

	/**
	 * SQLKEY(KV_SELECT_004)で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_OP_SVC_KEI_KV_SELECT_004(Object[] param) throws Exception
//	{
//		// バイント変数のリストを生成します
//		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
//		paramList.setValue(param[0].toString());
//		paramList.setValue(param[1].toString());
//		// DBアクセスを実行します
//		db_KK_T_OP_SVC_KEI.selectBySqlDefine(paramList, KK_T_OP_SVC_KEI_KV_SELECT_004);
//	}

	/**
	 * SQLKEY(KV_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_IDO_RSN_KV_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());

		// DBアクセスを実行します
		db_KK_T_IDO_RSN.selectBySqlDefine(paramList, KK_T_IDO_RSN_KV_SELECT_001);
	}

	/**
	 * SQLKEY(KV_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 executeTU_T_DNWACHOMSK_KV_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_TU_T_DNWACHOMSK.selectBySqlDefine(paramList, TU_T_DNWACHOMSK_KV_SELECT_001);
	}

	/**
	 * SQLKEY(KV_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_KAISEN_TG_SVKEI_KV_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		// DBアクセスを実行します
		db_KK_T_KAISEN_TG_SVKEI.selectBySqlDefine(paramList, KK_T_KAISEN_TG_SVKEI_KV_SELECT_002);
	}

	/**
	 * SQLKEY(KV_SELECT_003)で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_KAISEN_TG_SVKEI_KV_SELECT_003(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_KK_T_KAISEN_TG_SVKEI.selectBySqlDefine(paramList, KK_T_KAISEN_TG_SVKEI_KV_SELECT_003);
	}

	/**
	 * SQLKEY(KV_SELECT_009)で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_SVC_KEI_UCWK_KV_SELECT_009(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_KK_T_SVC_KEI_UCWK.selectBySqlDefine(paramList, KK_T_SVC_KEI_UCWK_KV_SELECT_009);
	}

	//サービス契約内訳番号を元に最新取得
	private void executeKK_T_SVC_KEI_UCWK_KV_SELECT_013(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_KK_T_SVC_KEI_UCWK.selectBySqlDefine(paramList, KK_T_SVC_KEI_UCWK_KV_SELECT_013);
	}

	//サービス契約内訳を取得
//	private void executeKK_T_SVC_KEI_UCWK_KV_SELECT_003(Object[] param) throws Exception
//	{
//		// バイント変数のリストを生成します
//		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
//		paramList.setValue(param[0].toString());
//		paramList.setValue(param[1].toString());
//		// DBアクセスを実行します
//		db_KK_T_SVC_KEI_UCWK.selectBySqlDefine(paramList, KK_T_SVC_KEI_UCWK_KV_SELECT_003);
//	}
	/**
	 * SQLKEY(KV_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_KICJKN_KV_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		// DBアクセスを実行します
		db_KK_T_KICJKN.selectBySqlDefine(paramList, KK_T_KICJKN_KV_SELECT_001);
	}
	/**
	 * SQLKEY(KV_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_ICJKN_SETTE_KV_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_ICJKN_SETTE.selectBySqlDefine(paramList, KK_T_ICJKN_SETTE_KV_SELECT_001);
	}
	/**
	 * SQLKEY(KV_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_SVC_KEI_KV_SELECT_007(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KV_SELECT_007);
	}

	/**
	 * SQLKEY(KK_SELECT_005)で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_M_CD_NM_KANRI_KV_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());
		// DBアクセスを実行します
		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_KV_SELECT_001);
	}
	//マスタ
	private void executeKV_M_IDOBT_TPP_ST_JK_KV_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());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());
		paramList.setValue(param[7].toString());
		paramList.setValue(param[8].toString());
		paramList.setValue(param[9].toString());
		paramList.setValue(param[10].toString());
		paramList.setValue(param[11].toString());
		paramList.setValue(param[12].toString());
		paramList.setValue(param[13].toString());
		// DBアクセスを実行します
		db_KV_M_IDVB_ICJKN_CRJK.selectBySqlDefine(paramList, KV_M_IDOBT_TPP_ST_JK_KV_SELECT_001);
	}

	//課金先から請求契約番号の検索
	private void executeKK_T_KAKINS_KV_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		// DBアクセスを実行します
		db_KK_T_KAKINS.selectBySqlDefine(paramList, KK_T_KAKINS_KV_SELECT_002);
	}
	//進捗にオプションサービス契約番号がある場合
	private void executeKK_T_OP_SVC_KEI_KV_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());
		paramList.setValue(param[3].toString());
		// DBアクセスを実行します
		db_KK_T_OP_SVC_KEI.selectBySqlDefine(paramList, KK_T_OP_SVC_KEI_KV_SELECT_016);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	//検証用データ取得
	private boolean getKsyInfo(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		String svc = "サービス契約番号";
		boolean rslt = true;
		fuseigoDbName = "";
		//サービス契約 取得
		if(!getSvk())
		{
			fuseigoDbName = " サービス契約";
			notFoundError( svc, "サービス契約");
			return false;
		}

		//提供方式情報取得
		getTkhInfo();

		//オプションサービスCD取得
		getOptInfo(inMap);

		//異動理由CD取得
		if(!getIdoInfo(inMap))
		{
			fuseigoDbName = " 異動理由";
//			notFoundError( svc, "異動理由");
			rslt = false;
		}
		//モデムレンタル区分変換
		cnvKkTkSbtCd();

		//電話とTVのみ取得
		if(checkPrcGrpCd(ryknGrpCd, 7))
		{
			//番号変更の場合
			if("00042".equals(idoKbn) && isNotBlank(svckUchwNo))
			{
				getSvcKuchwkbyOpt(svckUchwNo);
			}else
			{
				getSvcKuchwk();
			}
		}

		//掲載手数料種別CD取得
		getKsComitinInfo(optSvcLst);

		getBunDlInfo();		//バンドル有無取得
//		getBmpInfo();		//番ポ有無取得
		getRyknCrs();		//料金コース取得

		return rslt;
	}

	//サービス契約[料金グループCD][提供方式契約番号]取得
	private boolean getSvk() throws Exception
	{
		String[] param = {svckNo, prmEndDay};
		if(CRS_CHA_FIN.equals(prgStat))
		{
			//進捗 コース変更の場合は引数(運用日+1)変更
			param = new String[]{svckNo, 
					JBSbatDateUtil.adjustDate(prmEndDay, 1)};
		}
		executeKK_T_SVC_KEI_KV_SELECT_007(param);
		svckData = db_KK_T_SVC_KEI.selectNext();

		if(null == svckData)
		{
			commonItem.getLogPrint().printDebugLog("サービス契約なし " +
			"異動区分:" + idoKbn + " " + svckNo);
			return false;		//エラー
		}
		ryknGrpCd = cnvNullToEmp(svckData.getString(JBSbatKK_T_SVC_KEI.PRC_GRP_CD));
		return true;
	}
	//提供方式情報・マンション物件CDなど取得
	private void getTkhInfo() throws Exception
	{
		//異動区分が新規契約・サービス追加の場合のみ取得
		if(!"00001".equals(idoKbn) && !"00002".equals(idoKbn)) 	return;

		//提供方式契約番号なしの場合
		String tkhNo = svckData.getString(JBSbatKK_T_TK_HOSHIKI_KEI.TK_HOSHIKI_KEI_NO);
		if(!isNotBlank(tkhNo))
		{
			return;
		}
		if(!checkPrcGrpCd(ryknGrpCd, 2))		//料金グループCD検索対象チェック
		{
			return;
		}

		String[] param = {prmEndDay, tkhNo, svckNo};
		executeKK_T_KAISEN_TG_SVKEI_KV_SELECT_001(param);
		knsyoData = db_KK_T_KAISEN_TG_SVKEI.selectNext();

		//存在しないかマンション以外なら格納せず、trueを返す
		if(null == knsyoData||!"001".equals(
				knsyoData.getString(JBSbatKK_T_MANSION_BUKKEN.MANSION_BUKKEN_CD)))
		{
			knsyoData = new JBSbatCommonDBInterface();
			return;
		}
		//機器提供種別CDなしのログ
		if(null == knsyoData.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SBT_CD))
		{
			String tkhPtrn = 
				knsyoData.getString(JBSbatKK_T_TK_HOSHIKI_KEI.TK_HOSHIKI_PATTERN_CD);
//			String ksnUcwk = knsyoData.getString(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO);
			if("31".equals(tkhPtrn) || "32".equals(tkhPtrn) ||
					"33".equals(tkhPtrn) || "34".equals(tkhPtrn) || "35".equals(tkhPtrn))
			{
//				super.logPrint.printBusinessErrorLog(EKKB0960AI,
//						new String[]{"マンションなのに機器提供種別CDなし 提供方式PTNCD:" 
//						+ tkhPtrn + " " + svckNo + " 回線内訳no:" + ksnUcwk});
			}
		}
		cnvTkHskPtrn(knsyoData);		//提供方式パターンCD変換
		cnvTkPrcShbt(knsyoData);		//提供料金種別CD変換
		return;
	}
	//提供料金種別CD変換
	private void cnvTkPrcShbt(	JBSbatCommonDBInterface data) throws Exception
	{
		String kmk = JBSbatKK_T_TK_HOSHIKI_KEI.TK_PRC_SBT_CD;
//		commonItem.getLogPrint().printDebugLog(
//				"提供料金種別CD変換前:" + cnvNullToEmp(data.getString(kmk)));
		if("001".equals(data.getString(kmk)))
		{
			String cnvBf = data.getString(kmk);
			data.setValue(kmk, "002");
			commonItem.getLogPrint().printDebugLog("提供料金種別CD変換:" + 
					cnvBf + " → " + data.getString(kmk));
		}
	}
	//提供方式パターンCD変換
	private void cnvTkHskPtrn(	JBSbatCommonDBInterface data) throws Exception
	{
		String kmk = JBSbatKK_T_TK_HOSHIKI_KEI.TK_HOSHIKI_PATTERN_CD;
		String tkhsk = data.getString(kmk);
		if(!isNotBlank(tkhsk)) return;
//		commonItem.getLogPrint().printDebugLog("tkh変換前:" + tkhsk + " " + svckNo);
		if("32".equals(tkhsk) || "33".equals(tkhsk) || 
				"34".equals(tkhsk) || "35".equals(tkhsk))
		{
			data.setValue(kmk, "31");
			commonItem.getLogPrint().printDebugLog(
					"提供方式ptn変換:" + tkhsk + " → " + data.getString(kmk));
		}
	}

	//オプションサービスCD取得
	private void getOptInfo(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		//異動区分がオプション引継の場合のみ取得
		if(!"00031".equals(idoKbn))	return;
		//進捗ステータス
		if(!"5102".equals(prgStat)) return;

		//進捗のオプションサービス契約番号がある場合
		String optNo = inMap.getString(JBSbatKVIFM005.OP_SVC_KEI_NO);
		if(isNotBlank(optNo))
		{
			executeKK_T_OP_SVC_KEI_KV_SELECT_016(
					new Object[]{optNo, prmEndDay ,prmEndDay ,prmEndDay});
		}else
		{
			fuseigoDbName = "opt進捗になし";
			return;	
		}
//		else
//		{
//			String[] param = {svckNo, prmEndDay + "235959999"};
//			executeKK_T_OP_SVC_KEI_KV_SELECT_004(param);
//		}

		JBSbatCommonDBInterface dataMap = db_KK_T_OP_SVC_KEI.selectNext();
		//該当なし、または運用日以前に課金開始されている場合は対象外
		if(null == dataMap)
		{
			return;		//該当なし→処理続行？
		}

		boolean noChrge = true;
		boolean past = true;
		while(null != dataMap)
		{
			if(checkCd(dataMap.getString(JBSbatKK_T_OP_SVC_KEI.OP_SVC_CD)))
			{
				noChrge = false;
			}
			if(null != dataMap.getString(JBSbatKK_T_OP_SVC_KEI.PLAN_CHRG_STAYMD) &&
					prmEndDay.compareTo(dataMap.getString(JBSbatKK_T_OP_SVC_KEI.PLAN_CHRG_STAYMD)) <= 0)
			{
				past = false;		//１つでも未来があれば一時金検索実行 運用日の方が小さい
			}
			optSvcLst.add(dataMap);
			commonItem.getLogPrint().printDebugLog("オプションあり " + svckNo +
					" " + dataMap.getString(JBSbatKK_T_OP_SVC_KEI.OP_SVC_CD));
			dataMap = db_KK_T_OP_SVC_KEI.selectNext();
		}

		if(past || noChrge)	//全オプションの課金開始日が過去・または課金対象外一時金の場合、対象外
		{
			if(noChrge) fuseigoDbName = " opt課金対象外";
			if(past) fuseigoDbName = " opt過去課金";
			optSvcLst.clear();
		}
		return;
	}
	//異動理由CD取得
	private boolean getIdoInfo(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		//異動区分がお客様情報変更の場合のみ取得
		if(!"00012".equals(idoKbn))	return true;
		if(!checkPrcGrpCd(ryknGrpCd, 4))		//料金グループCD検索対象チェック
		{
			return true;
		}

		String[] param = {svckNo, inMap.getString(JBSbatKVIFM005.IDO_DTM), idoKbn};
		executeKK_T_IDO_RSN_KV_SELECT_001(param);

		JBSbatCommonDBInterface dataMap = db_KK_T_IDO_RSN.selectNext();
		if(null == dataMap)
		{
			commonItem.getLogPrint().printDebugLog(
					"異動理由なし " + svckNo + " " +idoKbn);
			return false;
		}
		idoRsn = cnvNullToEmp(dataMap.getString(JBSbatKK_T_IDO_RSN.IDO_RSN_CD));
		//譲渡以外は一時金チェック不要(マスタ制御)
		return true;
	}
	//機器提供種別CD変換
	private void cnvKkTkSbtCd() throws Exception
	{
		//異動区分が新規契約・サービス追加の場合のみ取得
		if(!"00001".equals(idoKbn) && !"00002".equals(idoKbn)) 	return;

		if(knsyoData.getMap().isEmpty()) return;
		String kktkSbt = JBSbatKK_T_KKTK_SVC_KEI.KKTK_SBT_CD;
		String kktkSbtCd = cnvNullToEmp(knsyoData.getString(kktkSbt));

		if(null != kktkSbtCd && "03".equals(kktkSbtCd))
		{
			knsyoData.setValue(kktkSbt, "01");
			commonItem.getLogPrint().printDebugLog("機器提供種別CD変換:" + 
					kktkSbtCd + " → " + knsyoData.getString(kktkSbt));
		}
	}
	//掲載手数料種別CD取得
	private void getKsComitinInfo(
			ArrayList<JBSbatCommonDBInterface> svckUchLst) throws Exception
	{
		if(0 == svckUchLst.size()) return;
		//異動区分が光電話・TDIS情報登録の場合のみ取得
		if("00047".equals(idoKbn) || "00001".equals(idoKbn))
		{
			//電話のみチェック？
			if(!"10".equals(ryknGrpCd))
			{
				return;
			}

			for(JBSbatCommonDBInterface svckUchw: optSvcLst)
			{
				//内訳番号がなければ次へ(オプションの場合)
				String uchwk = svckUchw.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO);
				if(null == uchwk)
				{
					continue;
				}

				executeTU_T_DNWACHOMSK_KV_SELECT_001(new String[]{uchwk});

				JBSbatCommonDBInterface dataMap = db_TU_T_DNWACHOMSK.selectNext();
				if(null != dataMap)
				{
					svckUchw.setValue("guid", dataMap.getString(
							JBSbatTU_T_DNWACHOMSK_NYO.KEISAI_GUIDE_USE_CD));
				}
			}
		}
		return;
	}

	//バンドル情報取得 SQL２回発行 見つからなくてok 要確認 内訳も取得
	private JBSbatCommonDBInterface getBunDlInfo() throws Exception
	{
		//サービスCD 03（電話）&& 以下の異動区分  のみ検索
		if(!"00001".equals(idoKbn) && !"00002".equals(idoKbn) && !"00019".equals(idoKbn))
		{
			return null;
		}
		if(!checkPrcGrpCd(ryknGrpCd, 5))		//料金グループCD検索対象チェック
		{
			return null;
		}

		bndlUm = "無";
		//回線対象取得
		JBSbatCommonDBInterface dataMap = getSvckksnUcwk();
		if(null == dataMap)
		{
			return null;
		}
		ArrayList<JBSbatCommonDBInterface> anthrSvck = getSvckNoAnthr(dataMap);
		if(null == anthrSvck || anthrSvck.size() == 0)
		{
			commonItem.getLogPrint().printDebugLog(svckNo + " " +
					idoKbn + ":バンドル検索_1st(内訳)のみ該当");
			return null;
		}
		bndlUm = "有";
		commonItem.getLogPrint().printDebugLog(svckNo + " " +
				idoKbn + ":バンドル該当 " + svckData.getString("PPLAN_NM"));
		return dataMap;
	}

	//サービス契約回線対象内訳番号 取得
	private JBSbatCommonDBInterface getSvckksnUcwk() throws Exception
	{
		String[] param = {svckNo, prmEndDay};
		executeKK_T_KAISEN_TG_SVKEI_KV_SELECT_002(param);

		JBSbatCommonDBInterface dataMap = db_KK_T_KAISEN_TG_SVKEI.selectNext();
		if(null == dataMap)
		{
			commonItem.getLogPrint().printDebugLog(svckNo + " " +
					idoKbn + ":回線対象なし");
			return null;
		}
		//基本は複数ない
//		ArrayList<JBSbatCommonDBInterface> dataLst = 
//			new ArrayList<JBSbatCommonDBInterface>();
//		while(null != dataMap)
//		{
//			dataLst.add(dataMap);
//			dataMap = db_KK_T_KAISEN_TG_SVKEI.selectNext();
//		}
		return dataMap;
	}

	//進捗以外のサービス契約番号 取得
	private ArrayList<JBSbatCommonDBInterface> getSvckNoAnthr(
			JBSbatCommonDBInterface db) throws Exception
	{
		String[] param = {prmEndDay, svckNo, 
				db.getString(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO), prmEndDay};
		executeKK_T_KAISEN_TG_SVKEI_KV_SELECT_003(param);
		
		JBSbatCommonDBInterface dataMap = db_KK_T_KAISEN_TG_SVKEI.selectNext();
		if(null == dataMap)
		{
			return null;
		}
		//基本は複数ない
//		JBSbatCommonDBInterface dataMaps = new JBSbatCommonDBInterface();
		while(null != dataMap)
		{
			ksnTgDatLst.add(dataMap);
			dataMap = db_KK_T_KAISEN_TG_SVKEI.selectNext();
		}
		return ksnTgDatLst;
	}
	//番ポ情報取得 複数あるかも
	private boolean getBmpInfo(JBSbatCommonDBInterface bmpData) throws Exception
	{
		//異動区分が光電話・番号追加、光電話・番号変更、住所変更・登録
		//異動区分が新規契約・サービス追加の場合検索
		if(!"00041".equals(idoKbn) && !"00042".equals(idoKbn) && !"00019".equals(idoKbn)
			&& !"00001".equals(idoKbn) && !"00002".equals(idoKbn))
		{
			return true;
		}
		if(!checkPrcGrpCd(ryknGrpCd, 3))		//料金グループCD検索対象チェック
		{
			return true;
		}

		if(!"02".equals(svckData.getString(JBSbatKK_T_SVC_KEI.SVC_CD)))
		{
			return true;		//サービス契約
		}
		checkBumpUm(bmpData);
//		String[] param = {svckNo, prmEndDay + "235959999"};
//		executeKK_T_SVC_KEI_UCWK_KV_SELECT_009(param);
//
//		JBSbatCommonDBInterface dataMap = db_KK_T_SVC_KEI_UCWK.selectNext();
//
//		if(null == dataMap)
//		{
//			bumpUm = "無";
//			return true;
//		}
//		commonItem.getLogPrint().printDebugLog(svckNo + " " + idoKbn + ":番ポあり");
//		ArrayList<JBSbatCommonDBInterface> bmpLst =
//			new ArrayList<JBSbatCommonDBInterface>();
//
//		while(null != dataMap)
//		{
////			bmpLst.add(dataMap);
//			optSvcLst.add(dataMap);
//			dataMap = db_KK_T_SVC_KEI_UCWK.selectNext();
//		}
		//番ポ有無チェック 複数のうち有が１つでも存在→[有]と判定
		
		return true;
	}

	private String cnvCd(String val) 
	{
		if("有".equals(val))
		{
			return "1";
		}
		else if("無".equals(val))
		{
			return "0";
		}
		return "";
	}
	//番ポ有無チェック
	private void checkBumpUm(JBSbatCommonDBInterface data) throws Exception
	{
		bumpUm = "無";		//チェック条件は満たしている
//		for(JBSbatCommonDBInterface map : bmpLst)
//		{
			if("1".equals(data.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.BMP_UM)))
			{
				commonItem.getLogPrint().printDebugLog("番ポ有:" + svckNo);
				bumpUm = "有";		//有
				return;
			}
//		}
	}

	//指定料金コース取得
	private void getRyknCrs() throws Exception
	{
		//異動区分が新規契約・サービス追加の場合のみ取得
		if(!"00001".equals(idoKbn) && !"00002".equals(idoKbn)) 	return;

		if(!checkPrcGrpCd(ryknGrpCd, 1))		//料金グループCD検索対象チェック
		{
			return;
		}

		String prcGrpCd = svckData.getString(JBSbatKK_T_SVC_KEI.PRC_GRP_CD);
		if("07".equals(prcGrpCd) || "08".equals(prcGrpCd)|| "09".equals(prcGrpCd))
		{
				ryknCrsCd = cnvNullToEmp(svckData.getString(JBSbatKK_T_SVC_KEI.PCRS_CD));
		}
		return;
	}
	//契約異動〜条件マスタ取得
	private boolean getJyknMst(JBSbatCommonDBInterface optCd) throws Exception
	{
		ArrayList<String> prms = new ArrayList<String>();
		prms.add(idoKbn);			//異動区分
		prms.add(prgStat);			//進捗ステータス
		prms.add(paddFullfree(ryknGrpCd, 2, "0"));	//料金グループCD
		prms.add(paddFull(ryknCrsCd, 3));			//料金コースCD

		prms.add(paddFull(optnCd, 4));
		prms.add(paddFull(
				knsyoData.getString(JBSbatKK_T_MANSION_BUKKEN.MANSION_BUKKEN_CD),3));

		prms.add(paddFull(
				knsyoData.getString(JBSbatKK_T_TK_HOSHIKI_KEI.TK_HOSHIKI_PATTERN_CD),2));
		prms.add(paddFull(
				knsyoData.getString(JBSbatKK_T_TK_HOSHIKI_KEI.TK_PRC_SBT_CD),3));

		prms.add(paddFull(knsyoData.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SBT_CD),2));

		prms.add(paddFull(cnvCd(bumpUm), 1));
		prms.add(paddFull(idoRsn, 2));
		prms.add(paddFull(guidCd, 2));
		prms.add(paddFull(cnvCd(bndlUm), 1));
		prms.add(prmEndDay);
		Object[] keyArr = (String[])prms.toArray(new String[0]);

		executeKV_M_IDOBT_TPP_ST_JK_KV_SELECT_001(keyArr);
		JBSbatCommonDBInterface JyknMst = db_KV_M_IDVB_ICJKN_CRJK.selectNext();

		if(null == JyknMst)
		{
			StringBuilder sb = new StringBuilder();
			if(isNotBlank(optnCd))
			{
				sb.append("オプションサービスCD:");
				sb.append(optnCd);
			}
			if(!"00049".equals(idoKbn))
			{
				super.logPrint.printDebugLog("parm" + prms.toString()
						+ " 条件マスタ該当なし " 
						+ svckNo + " " + idoKbn + " " + idoDivNm + String.valueOf(sb));
			}
			return false;
		}
		super.logPrint.printDebugLog("条件マスタ該当あり " + 
				JyknMst.getString(JBSbatKV_M_IDVB_ICJKN_CRJK.TMP_PAY_PRC_NO) +
				" " + svckNo);
		while(null != JyknMst) 
		{
			jknMstLst.add(JyknMst);
			JyknMst = db_KV_M_IDVB_ICJKN_CRJK.selectNext();
		}
		return true;
	}

	//出力ファイル情報をセット
	private JBSbatServiceInterfaceMap setOutInfo(String rslt,
			JBSbatServiceInterfaceMap inMap) throws Exception
	{
		JBSbatServiceInterfaceMap outMap = setTgOutInfo(rslt);

		String tkhPtrnCd = 
			cnvNullToEmp(knsyoData.getString(JBSbatKK_T_TK_HOSHIKI_KEI.TK_HOSHIKI_PATTERN_CD));
		//料金プランCD・名称 に変更
		if(null != svckData)
		{
			outMap.setString(JBSbatKVIFM006.SYSID, cnvNullToEmp(
					svckData.getString(JBSbatKK_T_SVC_KEI.SYSID)));
			outMap.setString(JBSbatKVIFM006.PPLAN_CD, cnvNullToEmp(
					svckData.getString(JBSbatKK_T_SVC_KEI.PPLAN_CD)));
			outMap.setString(JBSbatKVIFM006.PPLAN_NM, cnvNullToEmp(
					svckData.getString("PPLAN_NM")));	//料金grpマスタから取得
			outMap.setString(JBSbatKVIFM006.SHOSA_YMD,cnvNullToEmp(
					svckData.getString(JBSbatKK_T_SVC_KEI.SHOSA_YMD)));
		}else
		{
			outMap.setString(JBSbatKVIFM006.SYSID, "");
			outMap.setString(JBSbatKVIFM006.PPLAN_CD, "");
			outMap.setString(JBSbatKVIFM006.PPLAN_NM, "");
			outMap.setString(JBSbatKVIFM006.SHOSA_YMD, "");
		}

		outMap.setString(JBSbatKVIFM006.BUNDLE_UM, bndlUm);
		outMap.setString(JBSbatKVIFM006.BMP_UM, bumpUm);

		outMap.setString(JBSbatKVIFM006.OP_SVC_CD, optnCd);		//複数だがマスタなし対象外は最後のopt表示
		outMap.setString(JBSbatKVIFM006.OP_SVC_NM, optnNm);		//		オプションサービス名称
		outMap.setString(JBSbatKVIFM006.IDO_RSN_CD, idoRsn);	//		異動理由コード
		outMap.setString(JBSbatKVIFM006.IDO_RSN_NM, getCdNm("CD01209",idoRsn));	//異動理由コード名称 CD00846

		outMap.setString(JBSbatKVIFM006.KYOJU_FORM, cnvNullToEmp(
				knsyoData.getString(JBSbatKK_T_MANSION_BUKKEN.MANSION_BUKKEN_CD)));

		outMap.setString(JBSbatKVIFM006.KYOJU_FORM_NM, getCdNm("CD01228", cnvNullToEmp(
				knsyoData.getString(JBSbatKK_T_MANSION_BUKKEN.MANSION_BUKKEN_CD))));

		outMap.setString(JBSbatKVIFM006.KEISAI_COMMISION_SKCD, cnvNullToEmp(guidCd));
		//サービス契約内訳
		if(null == dtlData)
		{
			outMap.setString(JBSbatKVIFM006.SVC_KEI_UCWK_NO, "");
		}else
		{
			outMap.setString(JBSbatKVIFM006.SVC_KEI_UCWK_NO, cnvNullToEmp(
					dtlData.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO)));
		}

		outMap.setString(JBSbatKVIFM006.TK_HOSHIKI_PATTERN_CD, tkhPtrnCd);
		outMap.setString(JBSbatKVIFM006.TK_HOSHIKI_PATTERN_NM, 
				getCdNm("CD01213", cnvNullToEmp(tkhPtrnCd)));
		outMap.setString(JBSbatKVIFM006.TK_HSK_PRC_SBT_CD, cnvNullToEmp(
				knsyoData.getString(JBSbatKK_T_TK_HOSHIKI_KEI.TK_PRC_SBT_CD)));
		outMap.setString(JBSbatKVIFM006.TK_HSK_PRC_SBT_NM, getCdNm("CD01209", cnvNullToEmp(
				knsyoData.getString(JBSbatKK_T_TK_HOSHIKI_KEI.TK_PRC_SBT_CD))));
		outMap.setString(JBSbatKVIFM006.MODEM_RENT_DIV, cnvNullToEmp(
				knsyoData.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SBT_CD)));
		outMap.setString(JBSbatKVIFM006.MODEM_RENT_DIV_NM, getCdNm("CD00212", cnvNullToEmp(
				knsyoData.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SBT_CD))));

		outMap.setString(JBSbatKVIFM006.ICJKN_SETTE_APLY_MON_MST, mstAplyYmd);
		outMap.setString(JBSbatKVIFM006.ICJKN_SETTE_APLY_MON, tmpAplyYmd);
		outMap.setString(JBSbatKVIFM006.CHOSA_TG_DIV, rslt);

		//調査対象、サービス契約100以外ならプラン課金開始コメント
		if("1".equals(rslt) && svckData != null)
		{
			String kykStat = svckData.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT);
			if(!"100".equals(kykStat))
			{
				fuseigoDbName = fuseigoDbName + " 親stat:" + kykStat;
			}

			fuseigoDbName = fuseigoDbName + " plan課金開始:" +
			cnvNullToEmp(svckData.getString(JBSbatKK_T_SVC_KEI.PLAN_CHRG_STAYMD));
		}else
		{
			fuseigoDbName = "";
		}

		outMap.setString(JBSbatKVIFM006.CHOSA_TG_DIV_NM, cnvChosaDiv(rslt) + fuseigoDbName);

		outMap.setOutFlg(true);
		return outMap;
	}
	//対象外ファイル
	private JBSbatServiceInterfaceMap setTgOutInfo(String rslt) throws Exception
	{
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		outMap.setString(JBSbatKVIFM006.SVC_KEI_NO, svckNo);

		//請求契約番号
		outMap.setString(JBSbatKVIFM006.SEIKY_KEI_NO, getSeiKyukNo());
		outMap.setString(JBSbatKVIFM006.IDO_DIV, idoKbn);
		outMap.setString(JBSbatKVIFM006.IDO_DIV_NM, idoDivNm);

		outMap.setString(JBSbatKVIFM006.PRG_STAT, prgStat);
		outMap.setString(JBSbatKVIFM006.PRG_STAT_NM, prgStNm);

		//一時金nullの場合
		if(null == tmpPrcData || tmpPrcData.getMap().isEmpty())
		{
			outMap.setString(JBSbatKVIFM006.TMP_PAY_PRC_NO, "");
			outMap.setString(JBSbatKVIFM006.TMP_PAY_PRC_NAME, 
					getTmpPrcName(JyknMstData.getString(JBSbatKV_M_IDVB_ICJKN_CRJK.TMP_PAY_PRC_NO)));
		}
		else
		{
			outMap.setString(JBSbatKVIFM006.TMP_PAY_PRC_NO, 
					tmpPrcData.getString("TMP_PAY_PRC_NO"));
			//一時支払金名称
			outMap.setString(JBSbatKVIFM006.TMP_PAY_PRC_NAME,
					getTmpPrcName(tmpPrcData.getString("TMP_PAY_PRC_NO")));
		}

		//条件マスタnullの場合
		if(null != JyknMstData)
		{
			outMap.setString(JBSbatKVIFM006.TMP_PAY_PRC_NO_MST, cnvNullToEmp(
					JyknMstData.getString(JBSbatKV_M_IDVB_ICJKN_CRJK.TMP_PAY_PRC_NO)));
		}else
		{
			outMap.setString(JBSbatKVIFM006.TMP_PAY_PRC_NO, "");
		}

		//対象外のみここで編集
//		if("3".equals(rslt))
//		{
//			outMap.setString(JBSbatKVIFM006.CHOSA_TG_DIV, rslt);
//			outMap.setString(
//					JBSbatKVIFM006.CHOSA_TG_DIV_NM, cnvChosaDiv(rslt) + chkPlural());
//		}
		outMap.setOutFlg(true);
		return outMap;
	}
	//オプション内容を出力用にセット
	private void setOPt(JBSbatCommonDBInterface optCd) throws Exception
	{
		fuseigoDbName = "";
		mstAplyYmd = "";
		tmpAplyYmd = "";
		optnCd = cnvNullToEmp(optCd.getString(JBSbatKK_T_OP_SVC_KEI.OP_SVC_CD));
		optnNm = cnvNullToEmp(optCd.getString("OP_SVC_NM"));
		optnPlnChStr = cnvNullToEmp(
				optCd.getString(JBSbatKK_T_OP_SVC_KEI.PLAN_CHRG_STAYMD));
		guidCd = cnvNullToEmp(optCd.getString("guid"));
		dtlData = optCd;	//内訳 or オプションデータ
		jknMstLst.clear();
		bumpUm = "";
		getBmpInfo(optCd); //checkBumpUm(optCd);			//番ポ有無セット
	}
	//調査区分名取得
	private String cnvChosaDiv(String div) throws Exception
	{
		//複数取得の場合
		if(null != tmpPrcData && "1".equals(tmpPrcData.getString("plural")))
		{
			return "複数件有";
		}

		if("1".equals(div))
		{
			return "調査対象";
		}
		if("2".equals(div))
		{
			return "正常";
		}
		if("3".equals(div))
		{
			return "一時金検証対象外";
		}
		if("4".equals(div))
		{
			return "DB不整合";
		}
		return ""; 		//基本こない
	}

	/**
	 * コード名称管理から、コード区分名を取得
	 * @param cdSbtCd
	 * @param cdDiv
	 * @return コード区分名
	 * @throws Exception
	 */
	private String getCdNm(String cdSbtCd, String cdDiv) throws Exception
	{
		if(null == cdDiv ||"".equals(cdDiv))
		{
			return "";
		}

		String[] param = {cdSbtCd, cdDiv, prmEndDay, prmEndDay};

		executeZM_M_CD_NM_KANRI_KV_SELECT_001(param);
		JBSbatCommonDBInterface dataMap = db_ZM_M_CD_NM_KANRI.selectNext();
		if(null == dataMap)
		{
			String errParam = "コード種別コード: " + param[0] + " コード区分:" + param[1];
			commonItem.getLogPrint().printDebugLog(
					"コード名称管理に該当なし " + errParam);
			return "";
		}
		return dataMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM);
	}

	//一時支払料金番号の検証
	private boolean knsyoTmpPayNo(JBSbatCommonDBInterface optCd) throws Exception
	{
		if(null == JyknMstData) return false;		//ありえない

		//内訳サービス開始前なら電話・ＴＶは一時金不要
		
		//進捗[サービス契約]、条件マスタ[一時支払料金番号]をもとに取得
		String ktmpPrc = JyknMstData.getString(JBSbatKV_M_IDVB_ICJKN_CRJK.ICJKN_BUNRUI_CD);
		String mstTemp = JyknMstData.getString(JBSbatKV_M_IDVB_ICJKN_CRJK.TMP_PAY_PRC_NO);

		//光電話・TDISの場合、掲載案内利用CDにより一時金チェックは不要
		if("00001".equals(idoKbn) || "00047".equals(idoKbn))
		{
			if(telKsiPayNoLst.contains(mstTemp))
			{
				if(null == tmpPrcData || "1".equals(tmpPrcData.getString("plural")))
				{
					return false;
				}
				else if(null != tmpPrcData)
				{
					return true;
				}
			}
		}

		//条件マスタ.一時金分類コード 1:事務手数料
		if("1".equals(ktmpPrc))
		{
			//電話、バンドル有、新規なら事務手なしでok
			if(null == tmpPrcData || "1".equals(tmpPrcData.getString("plural")))
			{
				//番ポ有なら[010450026010]はあるはず？
				if("有".equals(bumpUm) && "010450026010".equals(mstTemp))
				{
					return false;
				}
				if(null == tmpPrcData && "有".equals(bndlUm)
						&& "00001".equals(idoKbn) && "10".equals(ryknGrpCd))
				{
					return true;
				}
				if(null == tmpPrcData)
				{
					commonItem.getLogPrint().printDebugLog(
							getTmpPrcName(mstTemp) + ":" + mstTemp +
							" 一時金なし サービス契約番号:" + svckNo + " " + idoKbn);
				}
				return false;
			}else
			{
				//番ポ有なら[010450026010]はチェックしない
				if("有".equals(bumpUm) && "010450026010".equals(mstTemp))
				{
					return true;
				}

				//１データありの場合 事務手０円ならok
				if("00001".equals(idoKbn) && "有".equals(bndlUm) && "10".equals(ryknGrpCd))
				{
					if("0".equals(tmpPrcData.getString(JBSbatKK_T_KICJKN.ICJKN_AMNT)))
					{
						return true;
					}
					fuseigoDbName = " 不要";
					return false;
				}
			}
		}else

		//条件マスタ.一時金分類コード 2:工事費
		if("2".equals(ktmpPrc))
		{
			if(null == tmpPrcData)
			{
				if("有".equals(bndlUm))
				{
					//電話、バンドル有
					if("10".equals(ryknGrpCd))
					{
						if("00001".equals(idoKbn) || "00002".equals(idoKbn))
						{
							return true;	//追加なら工事費なしでok
						}
					}
					if(checkPrcGrpCd(ryknGrpCd, 6) && "00002".equals(idoKbn))
					{
						return true;
					}
				}
				commonItem.getLogPrint().printDebugLog(getTmpPrcName(mstTemp) + ":" + mstTemp +
						" 工事費 一時金なし サービス契約番号:" + svckNo + " " + idoKbn);
				//一時金設定 検索 999〜存在すれば正常
				if(!getTnmpSet())
				{
					return false;
				}
			}else if( "1".equals(tmpPrcData.getString("plural")))
			{
				commonItem.getLogPrint().printDebugLog(getTmpPrcName(mstTemp) + ":" + mstTemp +
						" 工事費 一時金複数 サービス契約番号:" + svckNo + " " + idoKbn);
				return false;	//複数だとエラー(調査対象)
			}else
			{
				//１データありの場合(サービス追加・バンドル有はネット・電話→工事費ないはず)
				if("00002".equals(idoKbn) &&"有".equals(bndlUm))
				{
					if(checkPrcGrpCd(ryknGrpCd, 6) || "10".equals(ryknGrpCd))
					{
						if("0".equals(tmpPrcData.getString(JBSbatKK_T_KICJKN.ICJKN_AMNT)))
						{
							return true;
						}
						fuseigoDbName = " 不要";
						return false;
					}
				}
				if("00001".equals(idoKbn) && "有".equals(bndlUm) && "10".equals(ryknGrpCd))
				{
					if("0".equals(tmpPrcData.getString(JBSbatKK_T_KICJKN.ICJKN_AMNT)))
					{
						return true;
					}
					fuseigoDbName = " 不要";
					return false;
				}
			}
		}
		//一時金が存在する場合、適用月チェック
		if(null != tmpPrcData)
		{
			if(!checkAplyYmd(optCd))	//内訳も参照
			{
				fuseigoDbName = " 適用月";
				return false;
			}
		}
		commonItem.getLogPrint().printDebugLog(getTmpPrcName(mstTemp) + ":" + mstTemp + 
				" エラーなし " + svckNo + " " + idoKbn);
		return true;
	}
	//適用月チェック
	private boolean checkAplyYmd(JBSbatCommonDBInterface optCd) throws Exception
	{
		String tmpPay = JyknMstData.getString("TMP_PAY_PRC_NO");
		//一時支払料金マスタ[発生コード]から適用月を算出
		String hssCd = getTmpHssCd(tmpPay);
		if(!"10".equals(hssCd))
		{
			mstAplyYmd = calcAplyMonth(hssCd, judgeCntn(tmpPay),optCd);
			tmpAplyYmd = getAplyMon();
			//一時金または一時金設定[一時金設定適用月]とマスタから算出した適用月を比較
			//一時金の[一時金設定適用月]が空白の場合も調査対象
			if("".equals(tmpAplyYmd) || !mstAplyYmd.equals(tmpAplyYmd))
			{
//				commonItem.getLogPrint().printBusinessErrorLog(EKKB0960AI,
//						new String[]{"適用月 調査対象 発生CD:" 
//						+ hssCd  + " " +  svckNo + " " + idoDivNm});
				return false;
			}
		}
		return true;
	}
	//一時支払料金番号を基に「一時支払料金」の発生コードを取得
	private String getTmpHssCd(String tmpPayNo) throws Exception
	{
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue(JBSbatKK_M_TMP_PAY_PRC.TMP_PAY_PRC_NO, tmpPayNo);
		JBSbatCommonDBInterface outMap = 
			db_KK_M_TMP_PAY_PRC.selectByPrimaryKeys(whereMap);
		if(null == outMap)
		{
//			commonItem.getLogPrint().printBusinessErrorLog(EKKB0960AI,
//					new String[]{"一時支払料金マスタに該当なし。一時支払料金番号:" 
//					+ tmpPayNo + " " + svckNo + " " + idoDivNm});
			return "";
		}
		return outMap.getString(JBSbatKK_M_TMP_PAY_PRC.HASSEI_CD);
	}
	//適用月を算出
	private String calcAplyMonth(String hssCd, boolean isUchwk,
			JBSbatCommonDBInterface optCd) throws Exception
	{
		String rslt = "";
		if(null == hssCd) return rslt;

		JBSbatCommonDBInterface uchwkData = null;
		if(isUchwk)
		{
//			uchwkData = getUchwk();
			//内訳データがサービス提供後のみ、サービス契約から設定
			if(isNotBlank(optCd.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO)))
			{
				String uswkStat = optCd.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT);
				if("100".equals(uswkStat))
				{
					uchwkData = optCd;
				}
//				else if("910".equals(uswkStat) || "910".equals(uswkStat))
//				{
//					uchwkData = optCd;		//要確認
//				}
				else
				{
					isUchwk = false;
				}
//				if(null == uchwkData.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_STAYMD))
//				{
//					fuseigoDbName = " 内訳_プラン開始未設定";
//				}
//				if(null == uchwkData.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_CHRG_STAYMD))
//				{
//					fuseigoDbName = fuseigoDbName + " 内訳_プラン課金開始未設定";
//				}
			}else
			{
				isUchwk = false;
			}
		}

		if("01".equals(hssCd))	//運用日の年月
		{
			rslt = prmEndDay;
		}
		else if("02".equals(hssCd))		//運用日の翌月の年月
		{
			rslt = JBSbatDateUtil.adjustMonth(prmEndDay, 1);
		}
		//サービス契約(または内訳)プラン課金開始年月日の年月
		else if("03".equals(hssCd)|| "04".equals(hssCd)|| "05".equals(hssCd))
		{
			if(isUchwk && null != uchwkData.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_CHRG_STAYMD))
			{
				rslt = uchwkData.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_CHRG_STAYMD);
			}else
			{
				rslt = svckData.getString(JBSbatKK_T_SVC_KEI.PLAN_CHRG_STAYMD);
			}
		}
		//サービス契約(または内訳)プラン開始年月日の年月
		else if("06".equals(hssCd)||"07".equals(hssCd) ||
				"08".equals(hssCd)|| "09".equals(hssCd))
		{
			if(isUchwk && null != uchwkData.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_STAYMD))
			{
				rslt = uchwkData.getString(JBSbatKK_T_SVC_KEI_UCWK.PLAN_STAYMD);
			}else
			{
				rslt = svckData.getString(JBSbatKK_T_SVC_KEI.PLAN_STAYMD);
			}
		}
		else if("11".equals(hssCd))		//オプションサービス契約のプラン課金開始年月日の年月
		{
			if(!"".equals(optnPlnChStr))
			{
				rslt = optnPlnChStr;

			}else
			{
				fuseigoDbName = "optなし";
				return "noOpt";
			}
		}
		if(null == rslt)
		{
			fuseigoDbName = "noPln";
			return "noPln";
		}
		return rslt.substring(0,6);
	}

	/**
	 * 掲載手数料の一時金チェックを実施するか判定
	 * @param mst
	 * @return
	 */
	private boolean checkCommt(JBSbatCommonDBInterface mst) throws Exception
	{
		if(!telKsiPayNoLst.contains(
				mst.getString(JBSbatKV_M_IDVB_ICJKN_CRJK.TMP_PAY_PRC_NO)))
		{
			return true;
		}
		//掲載手数料ありの場合
		if("0".equals(guidCd) || "1".equals(guidCd))
		{
			super.logPrint.printDebugLog(guidCd + ":掲載ガイドあり " + svckNo);
			return true;
		}
		return false;
	}
	
	//一時金があれば一時金設定適用月、なければ空文字を返す
	private String getAplyMon() throws Exception
	{
		String aplyMon = tmpPrcData.getString(JBSbatKK_T_KICJKN.ICJKN_SETTE_APLY_MON);
		if(null != aplyMon)
		{
			return aplyMon;
		}
//		commonItem.getLogPrint().printBusinessErrorLog(EKKB0960AI,
//				new String[]{"一時金に設定されていない為[一時金設定適用月]取得不可 "
//				+ svckNo + " " + idoDivNm + " " + 
//				tmpPrcData.getString(JBSbatKK_T_KICJKN.KICJKN_NO)});
		return "";
	}
	//契約一時金 取得
	private JBSbatCommonDBInterface getKtnmp() throws Exception
	{
		mstAplyYmd = "";
		tmpAplyYmd = "";
		//サービス契約番号・条件マスタ.一時支払料金番号
		String tmp = JyknMstData.getString(JBSbatKV_M_IDVB_ICJKN_CRJK.TMP_PAY_PRC_NO);
		String[] param = {svckNo, tmp};

		executeKK_T_KICJKN_KV_SELECT_001(param);
		tmpPrcData = db_KK_T_KICJKN.selectNext();
		JBSbatCommonDBInterface dataMap = tmpPrcData;
		ArrayList<JBSbatCommonDBInterface> dataLst = 
			new ArrayList<JBSbatCommonDBInterface>();
		//複数データ取得判定 要確認
		if(null == tmpPrcData)
		{
//			fuseigoDbName = " 一時金なし";
			return null;
		}
		//複数存在する場合
		while(null != dataMap)
		{
			if(!checkUchwkNoIchjk(dataMap))
			{
				dataMap = db_KK_T_KICJKN.selectNext();
				continue;
			}
			dataLst.add(dataMap);
			dataMap = db_KK_T_KICJKN.selectNext();
		}

		if(1 < dataLst.size())
		{
			commonItem.getLogPrint().printDebugLog("契約一時金複数:" + svckNo);
			tmpPrcData.setValue("plural", "1");
		}
		return tmpPrcData;
	}

	//一時金設定 検索
	private boolean getTnmpSet() throws Exception
	{
		//一時支払料金番号
		String[] param = {svckNo};
		executeKK_T_ICJKN_SETTE_KV_SELECT_001(param);
		JBSbatCommonDBInterface dataMap = db_KK_T_ICJKN_SETTE.selectNext();

		String st = svckNo + " " + idoKbn;
		if(null == dataMap)
		{
//			commonItem.getLogPrint().printBusinessErrorLog(EKKB0960AI,
//					new String[]{"一時金設定999〜なし: " + st});
			return false;
		}
		st = st + " " + dataMap.getString(JBSbatKK_T_ICJKN_SETTE.TMP_PAY_PRC_NO);
		commonItem.getLogPrint().printDebugLog("一時金設定999あり " + st);
		return true;
	}
	//初期化
	private void setIni(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		//ヘッダー情報セット
		if(firstFlg)
		{
			outputBean.addOutMapList(setHeder());
			firstFlg = false;
		}else
		{
			outputBean.getOutMapList().clear();
		}

		idoKbn  = inMap.getString(JBSbatKK_T_PRG.IDO_DIV);
		prgStat = inMap.getString(JBSbatKK_T_PRG.PRG_STAT);
		svckNo  = inMap.getString(JBSbatKK_T_PRG.SVC_KEI_NO);
		svckUchwNo = inMap.getString(JBSbatKK_T_PRG.SVC_KEI_UCWK_NO);

		bumpUm = "";
		bndlUm = "";
		ryknGrpCd = "";
		ryknCrsCd = "";
		idoRsn = "";
		guidCd = "";
		optnCd = "";
		optnNm = "";

		mstAplyYmd = "";
		tmpAplyYmd = "";
		svckData = null;
		knsyoData = new JBSbatCommonDBInterface();
		tmpPrcData = new JBSbatCommonDBInterface();
		JyknMstData = new JBSbatCommonDBInterface();
		optSvcLst = new ArrayList<JBSbatCommonDBInterface>();
		idoDivNm  = cnvNullToEmp(inMap.getString("IDO_DIV_NM"));
		prgStNm = cnvNullToEmp(inMap.getString("PRG_STAT_NM"));
		ksnTgDatLst.clear();
		jknMstLst.clear();
	}

	/**
	 * null → ""に変換するメソッド
	 * @param val 文字列
	 * @return 変換後文字列
	 */
	private String cnvNullToEmp(String val)
	{
		String rslt = val;
		if(null == val)
		{
			rslt = "";
		}
		return rslt;
	}

	//指定桁９パディング
	private String paddFull(String trg, int keta) throws Exception
	{
		//空白・nullならフル桁９に置換
		if(null == trg || "".equals(trg))
		{
			trg = "";
			String rslt = 
				JBSbatStringUtil.fillHalfSpace(trg, keta, true);
			return rslt.replace(" ", "9");
		}else
		{
			if(keta > trg.length())
			{
				trg = JBSbatStringUtil.fillHalfSpace(trg, keta, true);
			}
		}
		return trg;
	}
	
	//フル桁を指定文字列でパディング
	private String paddFullfree(String trg, int keta, String af) throws Exception
	{
		//空白・nullならフル桁なら置換
		if(null == trg || "".equals(trg))
		{
			trg = "";
			String rslt = 
				JBSbatStringUtil.fillHalfSpace(trg, keta, true);
			return rslt.replace(" ", af);
		}else
		{
			if(keta > trg.length())
			{
				trg = JBSbatStringUtil.fillHalfSpace(trg, keta, true);
			}
		}
		return trg;
	}
	
	//指定項目、存在チェック
	private boolean isNotBlank(String val) throws Exception
	{
		if("".equals(val) || null == val)
		{
			return false;
		}
		return true;
	}
	//課金されるオプションCDのデータリスト
	private boolean checkCd(String val)
	{
		val = cnvNullToEmp(val);
		boolean rslt = false;
		ArrayList<String> list = new ArrayList<String>();

		list.add("B004");
		list.add("B013");
		list.add("B012");
		list.add("B074");

		//含まれている場合
		if(list.contains(val))
		{
			rslt = true;
		}
		return rslt;
	}

	//料金グループCDチェック
	private boolean checkPrcGrpCd(String val, int mode)
	{
		boolean rslt = false;
		ArrayList<String> list = new ArrayList<String>();
		if(1 == mode)	//料金コースＣＤ
		{
			list.add("07");	//要確認
			list.add("08");
			list.add("09");
		}else

		if(2 == mode)	//提供方式
		{
			list.add("04");
			list.add("10");
		}else

		if(3 == mode)	//番ポ有無
		{
			list.add("10");
		}else

		if(4 == mode)	//異動理由コード
		{
			list.add("02");
			list.add("03");
			list.add("04");
			list.add("08");
			list.add("09");
			list.add("10");
		}else

		if(5 == mode)	//バンドル有無
		{
			list.add("02");
			list.add("03");
			list.add("04");
			list.add("10");
		}else

		if(6 == mode)	//ネット
		{
			list.add("02");
			list.add("03");
			list.add("04");
		}else

		if(7 == mode)	//電話・TV
		{
			list.add("10");
			list.add("11");
		}

		//含まれている場合
		if(list.contains(val))
		{
			rslt = true;
		}
		list.clear();
		return rslt;
	}
	//ヘッダー出力 要確認
	private JBSbatServiceInterfaceMap setHeder() throws Exception
	{
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		outMap.setString(JBSbatKVIFM006.SVC_KEI_NO, "サービス契約番号");
		outMap.setString(JBSbatKVIFM006.SYSID, "ＳＹＳＩＤ");
		outMap.setString(JBSbatKVIFM006.SEIKY_KEI_NO, "請求契約番号");
		outMap.setString(JBSbatKVIFM006.IDO_DIV, "異動区分");
		outMap.setString(JBSbatKVIFM006.IDO_DIV_NM, "異動区分名");
		outMap.setString(JBSbatKVIFM006.PRG_STAT, "進捗ステータス");
		outMap.setString(JBSbatKVIFM006.PRG_STAT_NM, "進捗ステータス名");
		outMap.setString(JBSbatKVIFM006.TMP_PAY_PRC_NO, "一時支払料金番号(契約一時金)");
		outMap.setString(JBSbatKVIFM006.TMP_PAY_PRC_NO_MST, "一時支払料金番号");
		outMap.setString(JBSbatKVIFM006.TMP_PAY_PRC_NAME, "一時支払料金名称");

		outMap.setString(JBSbatKVIFM006.PPLAN_CD, "料金プランコード");
		outMap.setString(JBSbatKVIFM006.PPLAN_NM, "料金プラン名称");
		outMap.setString(JBSbatKVIFM006.SHOSA_YMD, "照査年月日");
		outMap.setString(JBSbatKVIFM006.BUNDLE_UM, "バンドル有無");
		outMap.setString(JBSbatKVIFM006.BMP_UM, "番ポ有無");
		outMap.setString(JBSbatKVIFM006.KEISAI_COMMISION_SKCD, "掲載手数料識別コード");
		outMap.setString(JBSbatKVIFM006.SVC_KEI_UCWK_NO, "サービス契約内訳番号");
		outMap.setString(JBSbatKVIFM006.OP_SVC_CD, "オプションサービスコード");
		outMap.setString(JBSbatKVIFM006.OP_SVC_NM, "オプションサービス名称");
		outMap.setString(JBSbatKVIFM006.IDO_RSN_CD, "異動理由コード");

		outMap.setString(JBSbatKVIFM006.IDO_RSN_NM, "異動理由コード名称");
		outMap.setString(JBSbatKVIFM006.KYOJU_FORM, "居住形態");
		outMap.setString(JBSbatKVIFM006.KYOJU_FORM_NM, "居住形態名");
		outMap.setString(JBSbatKVIFM006.TK_HOSHIKI_PATTERN_CD, "提供方式パターンコード");
		outMap.setString(JBSbatKVIFM006.TK_HOSHIKI_PATTERN_NM, "提供方式パターン名");
		outMap.setString(JBSbatKVIFM006.TK_HSK_PRC_SBT_CD, "提供料金種別コード");
		outMap.setString(JBSbatKVIFM006.TK_HSK_PRC_SBT_NM, "提供料金種別名");
		outMap.setString(JBSbatKVIFM006.MODEM_RENT_DIV, "モデムレンタル区分");
		outMap.setString(JBSbatKVIFM006.MODEM_RENT_DIV_NM, "モデムレンタル区分名");
		outMap.setString(JBSbatKVIFM006.ICJKN_SETTE_APLY_MON_MST, "適用月(マスタ)");

		outMap.setString(JBSbatKVIFM006.ICJKN_SETTE_APLY_MON, "適用月(一時金)");
		outMap.setString(JBSbatKVIFM006.CHOSA_TG_DIV, "調査対象区分");
		outMap.setString(JBSbatKVIFM006.CHOSA_TG_DIV_NM, "調査対象区分名称");

		outMap.setOutFlg(true);
		return outMap;
	}

	//03 09まで取得テーブルをサービス契約内訳に変更
	private boolean judgeCntn(String tmpPayNo)
	{
		if(tempPayNoLst.contains(tmpPayNo))
		{
			return true;
		}
		return false;
	}

	/**
	 * サービス契約内訳番号の最新を取得(２番号なら２つ)
	 * @return
	 * @throws Exception
	 */
	private void getSvcKuchwk() throws Exception
	{
		String[] param = {svckNo, prmEndDay, prmEndDay.substring(0,6)};
		executeKK_T_SVC_KEI_UCWK_KV_SELECT_009(param);

		JBSbatCommonDBInterface dataMap = db_KK_T_SVC_KEI_UCWK.selectNext();

		while(null != dataMap)
		{
			optSvcLst.add(dataMap);
			dataMap = db_KK_T_SVC_KEI_UCWK.selectNext();
		}
	}
	//進捗から内訳取得
	private void getSvcKuchwkbyOpt(String uchwk) throws Exception
	{
		executeKK_T_SVC_KEI_UCWK_KV_SELECT_013(
				new Object[]{uchwk, idoKbn, prmEndDay});
		JBSbatCommonDBInterface dataMap = db_KK_T_SVC_KEI_UCWK.selectNext();

		while(null != dataMap)
		{
			optSvcLst.add(dataMap);
			dataMap = db_KK_T_SVC_KEI_UCWK.selectNext();
		}
	}

	//一時金に内訳番号がある場合、等しい一時金のみ有効とする
	private boolean checkUchwkNoIchjk(JBSbatCommonDBInterface uchwkData) throws Exception
	{
		String ucwk = JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO;
		if(null != dtlData.getString(ucwk) && null != uchwkData.getString(ucwk))
		{
			if(!dtlData.getString(ucwk).equals(uchwkData.getString(ucwk)))
			{
				return false;
			}
		}
		return true;
	}
	/**
	 * サービス契約内訳データのカレントを取得
	 * @return
	 * @throws Exception
	 */
//	private JBSbatCommonDBInterface getUchwk() throws Exception
//	{
//		if(null == svckUchwNo) return null;
//		String[] param = new String[]{svckUchwNo, prmEndDay};
//
//		executeKK_T_SVC_KEI_UCWK_KV_SELECT_003(param);
//		JBSbatCommonDBInterface outMap = db_KK_T_SVC_KEI_UCWK.selectNext();
//		if(null == outMap)
//		{
//			return null;
//		}
//		//２番号なら２件？
//		return outMap;
//	}
	//掲載案内利用CDによる判定
	private boolean checkTDIS() throws Exception
	{
		if("".equals(guidCd) || "3".equals(guidCd))
		{
			return true;
		}
		return false;
	}

	//一時支払料金番号を基に「一時支払料金」の名称を取得
	private String getTmpPrcName(String tmpPayNo) throws Exception
	{
		if(null == tmpPayNo) return "";
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue(JBSbatKK_M_TMP_PAY_PRC.TMP_PAY_PRC_NO, tmpPayNo);
		JBSbatCommonDBInterface outMap = 
			db_KK_M_TMP_PAY_PRC.selectByPrimaryKeys(whereMap);
		if(null == outMap)
		{
			return "";
		}
		return outMap.getString(JBSbatKK_M_TMP_PAY_PRC.TMP_PAY_PRC_NM);
	}

	/**
	 * 請求契約番号を取得
	 * @return 請求契約番号
	 * @throws Exception
	 */
	private String getSeiKyukNo() throws Exception
	{
		executeKK_T_KAKINS_KV_SELECT_002(new Object[]{svckNo, prmEndDay});
		JBSbatCommonDBInterface outMap = db_KK_T_KAKINS.selectNext();
		if(null == outMap)
		{
			return "";
		}
		return outMap.getString(JBSbatKK_T_SEIKY_KEI.SEIKY_KEI_NO);
	}
	/**
	 * 「進捗」のサービス契約内訳番号から発生CDを取得する一時金番号リストを作成
	 */
	private void setTmpPayLst()
	{
		tempPayNoLst.add("010450026010");
		tempPayNoLst.add("010450036010");
		tempPayNoLst.add("010450076010");
		tempPayNoLst.add("010450186010");
		tempPayNoLst.add("010450196010");
		tempPayNoLst.add("010450066010");
	}

	/**
	 * 「タウンページ掲載手数料」の発生する一時金番号リストを作成
	 */
	private void setTelKsiPayLst()
	{
		telKsiPayNoLst.add("010450076010");
		telKsiPayNoLst.add("010450186010");
		telKsiPayNoLst.add("010450196010");
	}
	//２番号重複チェック
	private boolean checkDuplicat(JBSbatServiceInterfaceMap inmap) throws Exception
	{
		String pcrs = cnvNullToEmp(svckData.getString(JBSbatKK_T_SVC_KEI.PCRS_CD));
		if(!"A32".equals(pcrs)) return true;

		String mskm = cnvNullToEmp(inmap.getString(JBSbatKVIFM005.MSKM_DTL_NO));
		String svc = cnvNullToEmp(inmap.getString(JBSbatKVIFM005.SVC_KEI_NO));
		String key = mskm + svc + pcrs;
		if(!telDblLst.contains(key))
		{
			telDblLst.add(key);
			return true;
		}
		return false;
	}
	
	//エラーログ出力
	private boolean notFoundError(String rsch, String tblNm) throws Exception
	{
		rsch = rsch + " サービス契約番号";
		//%1%テーブルに%2%が存在しません。（key：%3%）
//		commonItem.getLogPrint().printBusinessErrorLog("EKKB0630NW", 
//				new String[]{tblNm, rsch, svckNo + " " + idoKbn});
		return false;
	}

	/**
	 * 指定クラスのException情報のみログ出力
	 * @param e
	 * @return
	 */
	private String getStaCkInfo(Exception e)
	{
		StringBuilder sb = new StringBuilder();
		StackTraceElement[] st = e.getStackTrace();

		for(StackTraceElement stInfo :st)
		{
			if(stInfo.getClassName().contains(this.getClassName()))
			{
				sb.append("/");
				sb.append(stInfo.getMethodName());
				sb.append(" Line:");
				sb.append(stInfo.getLineNumber());
			}
		}
		return String.valueOf(sb);
	}
}
