/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKHktgiSakiCampainWribAplyInfoChsht
*	ソースファイル名	：JBSbatKKHktgiSakiCampainWribAplyInfoChsht.java
*	作成者				：富士通
*	作成日				：2018年04月13日
*＜機能概要＞
*	引継先キャンペーン割引適用情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		 修正内容
*  v37.00.00    2018/04/13  FJ)クウン   【ANK-3383-00-00】標準工事費分割請求（STEP2）対応
*  v37.00.01	2018/06/14	FJ)柳		【IT2-2018-0000059】機器オプションCP適用対応
*  v37.00.02	2018/08/30	FJ)澤田		【OM-2018-0000826】同一サービスのＣＰ引継ぎ対応
*  v53.00.00	2021/04/20	FJ)吉田		【ANK-3951-00-00】「競争ルールの検証に関するWG」に関するシステム対応
*********************************************************************/
package eo.business.service;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.NoSuchElementException;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFM104;
import eo.business.util.table.JBSbatCH_M_PRC_SCHDL_TEIGI;
import eo.business.util.table.JBSbatKK_M_WRIB_SVC_TANKA;
import eo.business.util.table.JBSbatKK_T_KAISEN_TG_SVKEI;
import eo.business.util.table.JBSbatKK_T_KKOP_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_WRIB_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_WRISVC_KEI_UCWK;
import eo.business.util.table.JBSbatKK_T_WRISVC_TG_KEI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JKKStringUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.util.JBSbatBusinessFileUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKHktgiSakiCampainWribAplyInfoChsht extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/

	/** テーブル(料金スケジュール定義)*/
	private static final String D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI = "CH_M_PRC_SCHDL_TEIGI";
	/** SQL定義キー(CH_SELECT_022)*/
	private static final String CH_M_PRC_SCHDL_TEIGI_CH_SELECT_022 = "CH_SELECT_022";
	/** テーブルアクセスクラス(料金スケジュール定義)*/
	private JBSbatSQLAccess db_CH_M_PRC_SCHDL_TEIGI = null;

	/** テーブル(割引サービス単価)*/
	private static final String D_TBL_NAME_KK_M_WRIB_SVC_TANKA = "KK_M_WRIB_SVC_TANKA";
	/** テーブルアクセスクラス(割引サービス単価)*/
	private JBSbatSQLAccess db_KK_M_WRIB_SVC_TANKA = null;
	/** SQL定義キー(KK_SELECT_007)*/
	private static final String KK_M_WRIB_SVC_TANKA_KK_SELECT_007  = "KK_SELECT_007";
	/** SQL定義キー(KK_SELECT_006)*/
	private static final String KK_M_WRIB_SVC_TANKA_KK_SELECT_006  = "KK_SELECT_006";
	
	/** テーブル(割引サービス対象契約)*/
	private static final String D_TBL_NAME_KK_T_WRISVC_TG_KEI = "KK_T_WRISVC_TG_KEI";
	/** テーブルアクセスクラス(割引サービス対象契約)*/
	private JBSbatSQLAccess db_KK_T_WRISVC_TG_KEI = null;
	/** SQL定義キー(KK_SELECT_060)*/
	private static final String KK_T_WRISVC_TG_KEI_KK_SELECT_060  = "KK_SELECT_060";
	// IT2-2018-0000059 2018/06/14 ADD START
	/** SQL定義キー(KK_SELECT_059)*/
	private static final String KK_T_WRISVC_TG_KEI_KK_SELECT_059 = "KK_SELECT_059";
	// IT2-2018-0000059 2018/06/14 ADD END

	/** テーブル(回線対象サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KAISEN_TG_SVKEI = "KK_T_KAISEN_TG_SVKEI";
	/** テーブルアクセスクラス(回線対象サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KAISEN_TG_SVKEI = null;
	/** SQL定義キー(KK_SELECT_044)*/
	private static final String KK_T_KAISEN_TG_SVKEI_KK_SELECT_044  = "KK_SELECT_044";
	
	/** テーブル(割引サービス契約)*/
	private static final String D_TBL_NAME_KK_T_WRIB_SVC_KEI = "KK_T_WRIB_SVC_KEI";
	/** テーブルアクセスクラス(割引サービス契約)*/
	private JBSbatSQLAccess db_KK_T_WRIB_SVC_KEI = null;
	/** SQL定義キー(KK_SELECT_076)*/
	private static final String KK_T_WRIB_SVC_KEI_KK_SELECT_076  = "KK_SELECT_076";

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";
	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;
	/** SQL定義キー(KK_SELECT_364)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_364  = "KK_SELECT_364";

	/** テーブル(割引サービス契約内訳)*/
	private static final String D_TBL_NAME_KK_T_WRISVC_KEI_UCWK = "KK_T_WRISVC_KEI_UCWK";
	/** テーブルアクセスクラス(割引サービス契約内訳)*/
	private JBSbatSQLAccess db_KK_T_WRISVC_KEI_UCWK = null;
	/** SQL定義キー(KK_SELECT_021)*/
	private static final String KK_T_WRISVC_KEI_UCWK_KK_SELECT_021  = "KK_SELECT_021";
	
	/** 料金計算年月日 */
	private String prcCalcYmd = null;
	
	/** 料金計算年月の1日 */
	private String prcCalcFistYmd = null;

	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 引継先キャンペーン割引適用ファイルオブジェクト */
	private JBSbatBusinessFileUtil kkifm800_001Obj = null;
	// OM-2018-0000826 DEL START
//	/** 引継先キャンペーン割引適用ファイル */
//	private static final String KKFIM800_001 = "KKIFM800001.csv";
	// OM-2018-0000826 DEL END
	/** 退避用 割引サービス単価情報（全体） */
	private HashMap<String,HashMap<String, String>> wriTankCampain = new HashMap<String,HashMap<String, String>>();
	
	/** 割引サービス契約情報*/
	private HashMap<String, HashMap<String, String>> wriSvcKeiInfo = new HashMap<String,HashMap<String, String>>() ;

	/** CSV囲い文字(ダブルクォーテーション) */
	private static final String KAKOIMOJI = "\"";
	
	/** 割引サービスコード  標準工事費相当額割引CP（ネット用） */
	private static final String WRIB_SVC_KOJIHI_KAP_CP_NET = "W50000001";
	/** 割引サービスコード  標準工事費相当額割引CP（電話用） */
	private static final String WRIB_SVC_KOJIHI_KAP_CP_TEL = "W50000002";
	// ANK-3951-00-00 ADD START
	/** 割引サービスコード  標準工事費相当額割引CP（ネット用）24回払い */
	private static final String WRIB_SVC_KOJIHI_KAP_CP_NET_24 = "W50000004";
	/** 割引サービスコード  標準工事費相当額割引CP（電話用）24回払い */
	private static final String WRIB_SVC_KOJIHI_KAP_CP_TEL_24 = "W50000005";
	// ANK-3951-00-00 ADD END
	
	/** 対象データ項目マップ_割引サービス契約情報 */
	private static final HashMap<String, String> WRI_SVC_KEI_INFO_ITEM = new HashMap<String, String>()
	{
		{
			put(String.valueOf(0),  JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_KEI_NO);
			put(String.valueOf(1),  JBSbatKK_T_WRIB_SVC_KEI.GENE_ADD_DTM);
			put(String.valueOf(2),  JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_KEI_STAT);
			put(String.valueOf(3),  JBSbatKK_T_WRIB_SVC_KEI.SYSID);
			put(String.valueOf(4),  JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_CD);
			put(String.valueOf(5),  JBSbatKK_T_WRIB_SVC_KEI.PCRS_CD);
			put(String.valueOf(6),  JBSbatKK_T_WRIB_SVC_KEI.PPLAN_CD);
			put(String.valueOf(7),  JBSbatKK_T_WRIB_SVC_KEI.SVC_USE_STA_KIBO_YMD);
			put(String.valueOf(8),  JBSbatKK_T_WRIB_SVC_KEI.RSV_TSTA_KIBO_YMD);
			put(String.valueOf(9),  JBSbatKK_T_WRIB_SVC_KEI.MSKM_DTL_NO);
			put(String.valueOf(10), JBSbatKK_T_WRIB_SVC_KEI.SHOSA_YMD);
			put(String.valueOf(11), JBSbatKK_T_WRIB_SVC_KEI.SHOSA_CL_YMD);
			put(String.valueOf(12), JBSbatKK_T_WRIB_SVC_KEI.RSV_APLY_YMD);
			put(String.valueOf(13), JBSbatKK_T_WRIB_SVC_KEI.RSV_CL_YMD);
			put(String.valueOf(14), JBSbatKK_T_WRIB_SVC_KEI.RSV_APLY_CD);
			put(String.valueOf(15), JBSbatKK_T_WRIB_SVC_KEI.APLY_JUN);
			put(String.valueOf(16), JBSbatKK_T_WRIB_SVC_KEI.PLAN_STAYMD);
			put(String.valueOf(17), JBSbatKK_T_WRIB_SVC_KEI.PLAN_ENDYMD);
			put(String.valueOf(18), JBSbatKK_T_WRIB_SVC_KEI.PLAN_CHRG_STAYMD);
			put(String.valueOf(19), JBSbatKK_T_WRIB_SVC_KEI.PLAN_CHRG_ENDYMD);
			put(String.valueOf(20), JBSbatKK_T_WRIB_SVC_KEI.PLAN_END_SBT_CD);
			put(String.valueOf(21), JBSbatKK_T_WRIB_SVC_KEI.SVC_CANCEL_YMD);
			put(String.valueOf(22), JBSbatKK_T_WRIB_SVC_KEI.SVC_CANCEL_RSN_CD);
			put(String.valueOf(23), JBSbatKK_T_WRIB_SVC_KEI.SVC_STA_YMD);
			put(String.valueOf(24), JBSbatKK_T_WRIB_SVC_KEI.SVC_CHRG_STAYMD);
			put(String.valueOf(25), JBSbatKK_T_WRIB_SVC_KEI.SVC_ENDYMD);
			put(String.valueOf(26), JBSbatKK_T_WRIB_SVC_KEI.SVC_CHRG_ENDYMD);
			put(String.valueOf(27), JBSbatKK_T_WRIB_SVC_KEI.SVC_DSL_YMD);
			put(String.valueOf(28), JBSbatKK_T_WRIB_SVC_KEI.SVC_DLRE_CD);
			put(String.valueOf(29), JBSbatKK_T_WRIB_SVC_KEI.SVC_DLRE_MEMO);
			put(String.valueOf(30), JBSbatKK_T_WRIB_SVC_KEI.SVC_DSL_TTDKI_FIN_FLG);
			put(String.valueOf(31), JBSbatKK_T_WRIB_SVC_KEI.KAIHK_YMD);
			put(String.valueOf(32), JBSbatKK_T_WRIB_SVC_KEI.SVC_CANCEL_CL_YMD);
			put(String.valueOf(33), JBSbatKK_T_WRIB_SVC_KEI.SVC_DSL_CL_YMD);
			put(String.valueOf(34), JBSbatKK_T_WRIB_SVC_KEI.CHRG_STA_YMD_HOSEI_UM);
			put(String.valueOf(35), JBSbatKK_T_WRIB_SVC_KEI.SKEKKA_SEND_CD);
			put(String.valueOf(36), JBSbatKK_T_WRIB_SVC_KEI.PNLTY_HASSEI_CD);
			put(String.valueOf(37), JBSbatKK_T_WRIB_SVC_KEI.IDO_DIV);
			put(String.valueOf(38), JBSbatKK_T_WRIB_SVC_KEI.SHOSA_DSL_FIN_CD);
			put(String.valueOf(39), JBSbatKK_T_WRIB_SVC_KEI.KEI_CNC_YMD);
			put(String.valueOf(40), JBSbatKK_T_WRIB_SVC_KEI.GRP_CD);
			put(String.valueOf(41), JBSbatKK_T_WRIB_SVC_KEI.INTR_CD);
			put(String.valueOf(42), JBSbatKK_T_WRIB_SVC_KEI.MSKM_KISAN_YMD);
			put(String.valueOf(43), JBSbatKK_T_WRIB_SVC_KEI.WRIB_ADD_OPTY_CD);
			put(String.valueOf(44), JBSbatKK_T_WRIB_SVC_KEI.WRIB_DSL_CNCL_OPTY_CD);
			put(String.valueOf(45), JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_KEI_AT_KEIZK_SKCD);
			put(String.valueOf(46), JBSbatKK_T_WRIB_SVC_KEI.WRIB_AMNT_SNST_STDARDYMD);
			put(String.valueOf(47), JBSbatKK_T_WRIB_SVC_KEI.WRIB_CHRG_STA_MON_STI_CD);
			put(String.valueOf(48), JBSbatKK_T_WRIB_SVC_KEI.WRIB_ADD_YMD);
			put(String.valueOf(49), JBSbatKK_T_WRIB_SVC_KEI.ADD_DTM);
			put(String.valueOf(50), JBSbatKK_T_WRIB_SVC_KEI.ADD_OPEACNT);
			put(String.valueOf(51), JBSbatKK_T_WRIB_SVC_KEI.UPD_DTM);
			put(String.valueOf(52), JBSbatKK_T_WRIB_SVC_KEI.UPD_OPEACNT);
			put(String.valueOf(53), JBSbatKK_T_WRIB_SVC_KEI.DEL_DTM);
			put(String.valueOf(54), JBSbatKK_T_WRIB_SVC_KEI.DEL_OPEACNT);
			put(String.valueOf(55), JBSbatKK_T_WRIB_SVC_KEI.MK_FLG);
			put(String.valueOf(56), JBSbatKK_T_WRIB_SVC_KEI.WRTGKEI_SVC_PAUSE_YMD);
			put(String.valueOf(57), JBSbatKK_T_WRIB_SVC_KEI.WRTGKEI_SVC_PAUSE_RLS_YMD);
		}
	};

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CH_M_PRC_SCHDL_TEIGI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI);
		db_KK_M_WRIB_SVC_TANKA = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_WRIB_SVC_TANKA);
		db_KK_T_WRISVC_TG_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_WRISVC_TG_KEI);
		db_KK_T_KAISEN_TG_SVKEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAISEN_TG_SVKEI);
		db_KK_T_WRIB_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_WRIB_SVC_KEI);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_KK_T_WRISVC_KEI_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_WRISVC_KEI_UCWK);
		
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		String[] freeItems = commonItem.getFreeItem().split(JKKBatConst.S_PARAM_DELIM);
		// OM-2018-0000826 MOD START
		//kkifm800_001Obj = JKKBatCommon.createBusinessFileUtil(freeItems[1] + KKFIM800_001,
		kkifm800_001Obj = JKKBatCommon.createBusinessFileUtil(freeItems[1] + freeItems[2],
		// OM-2018-0000826 MOD END
				JKKBatConst.SJIS, JACStrConst.LINE_SEPARATOR, JKKBatConst.S_SEP_CAM);
		
		// 料金計算年月日の取得
		prcCalcYmd = this.getPrcCalcYmd();
		// 料金計算年月の1日
		prcCalcFistYmd = prcCalcYmd.substring(0, 6) + "01";
		// 割引サービス単価マスタの取得(標準工事費キャンペーン)
		wriTankCampain = this.getWribSvcTankaCampain();
		
		// フリー項目取得
		String[] freeItem = super.freeItem.split(JKKBatConst.S_PARAM_DELIM);
		String kK0451Pass = freeItem[0];

		// 割引サービス契約情報を作成する
		BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(kK0451Pass)));
		String lineData = br.readLine();
		while(lineData != null)
		{
			// リストに格納された一行分のファイルデータを格納
			HashMap<String, String> recordMap = convNonQuateStringToList(commonItem, lineData) ;
			
			// リストに追加
			wriSvcKeiInfo.put(recordMap.get(JBSbatKK_T_WRISVC_KEI_UCWK.WRIB_SVC_KEI_NO),recordMap) ;
			// CSVファイル一行読込み
			lineData = br.readLine();
		}

	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		try 
		{
			// エラーメッセージ文言
			String message = "";
			
			// INPUTファイルの情報取得
			// 割引サービス契約番号
			String inputWribSvcKeiNo = inMap.getString(JBSbatKKIFM104.WRIB_SVC_KEI_NO);
			// 割引サービス単価番号
			String inputWribSvcTankaNo = inMap.getString(JBSbatKKIFM104.WRIB_SVC_TANKA_NO);
			
			/*---------------------- 標準工事費相当額割引CP抽出--------------------------------------*/
			// 割引サービス単価データ取得
			HashMap<String, String> resultWriSvcTankaMap = new HashMap<String, String>();
			resultWriSvcTankaMap = wriTankCampain.get(inputWribSvcTankaNo) ;
			
			if (resultWriSvcTankaMap == null)
			{
				return null;
			}
			// 割引サービス単価．割引サービスコード
			String wriSvcCd = resultWriSvcTankaMap.get(JBSbatKK_M_WRIB_SVC_TANKA.WRIB_SVC_CD);
			// ANK-3951-00-00 MOD START
//			if (!(WRIB_SVC_KOJIHI_KAP_CP_NET.equals(wriSvcCd) || WRIB_SVC_KOJIHI_KAP_CP_TEL.equals(wriSvcCd)))
			if (!(WRIB_SVC_KOJIHI_KAP_CP_NET.equals(wriSvcCd) || WRIB_SVC_KOJIHI_KAP_CP_TEL.equals(wriSvcCd)
					|| WRIB_SVC_KOJIHI_KAP_CP_NET_24.equals(wriSvcCd) || WRIB_SVC_KOJIHI_KAP_CP_TEL_24.equals(wriSvcCd)))
			// ANK-3951-00-00 MOD END
			{
				return null;
			}
			
			// 割引サービス契約データ取得
			HashMap<String, String> resultWriSvcKeiMap = new HashMap<String, String>() ;
			resultWriSvcKeiMap = wriSvcKeiInfo.get(inMap.getString(JBSbatKKIFM104.WRIB_SVC_KEI_NO)) ;
			if (resultWriSvcKeiMap == null)
			{
				message = "割引サービス契約番号:" + inputWribSvcKeiNo + "に紐付く割引サービス契約情報が取得できません。" ;
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, new String[]{message});
	
				throw new JBSbatBusinessError();
			}
	
			// シェルにて割引サービス契約ステータスが910_解約済みで絞込みのため、チェック不要
			// サービス解約年月日
			String svcDslYmd =  resultWriSvcKeiMap.get(JBSbatKK_T_WRIB_SVC_KEI.SVC_DSL_YMD);
			if (!((svcDslYmd.compareTo(prcCalcFistYmd) >= 0) && (svcDslYmd.compareTo(prcCalcYmd) <= 0)))
			{
				return null;
			}
	
			/*---------------------- キャンペーン割引適用情報抽出（引継ぎ先分）----------------------*/
			// 同一回線内の標準工事費相当キャンペーンで受付済・サービス提供中のデータ存在チェックを行う
			// INPUT．割引サービス契約番号に紐付くサービス契約番号を取得する。
			JBSbatCommonDBInterface wriSvcTgKeiList = this.getInputSvcKeiNo(inputWribSvcKeiNo);
			if (wriSvcTgKeiList == null)
			{
				message = "割引サービス契約番号:" + inputWribSvcKeiNo + "に紐付くサービス契約番号が取得できません。" ;
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, new String[]{message});
	
				throw new JBSbatBusinessError();
			}
			
			String inputSvcKeiNo = wriSvcTgKeiList.getString(JBSbatKK_T_WRISVC_TG_KEI.SVC_KEI_NO);
			// 同一回線のサービス契約情報を取得
			// OM-2018-0000826 MOD START
//			JBSbatCommonDBInterface kaisenTgSvkeiList = this.getKaisenTgSvkeiInfo(inputSvcKeiNo);
//			
//			if (kaisenTgSvkeiList == null)
//			{
//				message = "サービス契約番号:" + inputSvcKeiNo + "に紐付く回線対象サービス契約情報が取得できません。" ;
//				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, new String[]{message});
//	
//				throw new JBSbatBusinessError();
//			}
//			// サービス契約回線内訳番号を取得
//			String svcKeiKaisenUcwkNo = kaisenTgSvkeiList.getString(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO);
//			String subPcrsCd = kaisenTgSvkeiList.getString(JBSbatKK_T_SVC_KEI.PCRS_CD);
//			String subPplanCd = kaisenTgSvkeiList.getString(JBSbatKK_T_SVC_KEI.PPLAN_CD);
//			
//			// 同一回線の別サービス契約情報（サービス契約番号）が存在しない場合
//			// 住所変更スキーマに移転先の情報を取得する。
//			String subSvcKeiNo = kaisenTgSvkeiList.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
//			if (JKKStringUtil.isNullBlank(subSvcKeiNo))
//			{
//				// 移転先に紐付く契約情報を取得する。
//				JBSbatCommonDBInterface svcKeInfoList = this.getHikiTsugiSvcKeiInfo(svcKeiKaisenUcwkNo);
//				if (svcKeInfoList != null)
//				{
//					subSvcKeiNo = svcKeInfoList.getString(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_NO);
//					subPcrsCd = svcKeInfoList.getString(JBSbatKK_T_SVC_KEI.PCRS_CD);
//					subPplanCd = svcKeInfoList.getString(JBSbatKK_T_SVC_KEI.PPLAN_CD);
//				}
//			}
//			
//			if (JKKStringUtil.isNullBlank(subSvcKeiNo))
//			{
//				return null;
//			}
//			
//			// 割引サービス情報を取得する
//			JBSbatCommonDBInterface subWribSvcKeiList = this.getwribSvcKeiInfo(subSvcKeiNo);
//			if (subWribSvcKeiList == null)
//			{
//				return null;
//			}
//			// 割引サービス契約情報が存在する場合、引継ぎ元と引継ぎ先の適用回数を比較する。
//			// 引継ぎ元の割引適用回数を取得する
//			String wribSvcDtlCd = resultWriSvcTankaMap.get(JBSbatKK_M_WRIB_SVC_TANKA.WRIB_SVC_DTL_CD);
//			
//			JBSbatCommonDBInterface wriSvcKeiUcwkList = this.getWrisvcKeiUcwkInfo(inputWribSvcKeiNo, wribSvcDtlCd);
//			
//			if (resultWriSvcKeiMap == null)
//			{
//				message = "割引サービス契約番号:" + inputWribSvcKeiNo + "割引サービス契約内訳の情報が取得できません。" ;
//				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, new String[]{message});
//	
//				throw new JBSbatBusinessError();
//			}
			ArrayList<JBSbatCommonDBInterface> kaisenTgSvkeiList = this.getKaisenTgSvkeiInfo(inputSvcKeiNo);
			
			if (kaisenTgSvkeiList == null || kaisenTgSvkeiList.size() == 0)
			{
				message = "サービス契約番号:" + inputSvcKeiNo + "に紐付く回線対象サービス契約情報が取得できません。" ;
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, new String[]{message});
	
				throw new JBSbatBusinessError();
			}
			
			//引継ぎ元の世代登録年月日時分秒
			String motoGeneAddDtm = resultWriSvcKeiMap.get(JBSbatKK_T_WRIB_SVC_KEI.GENE_ADD_DTM);
			//引継ぎ先の世代登録年月日時分秒
			String sakiGeneAddDtm = "";
			//引継ぎ先の割引サービス契約ステータス
			String sakiWribSvcKeiStat = "";
			// サービス契約回線内訳番号を取得
			String svcKeiKaisenUcwkNo = "";
			String subPcrsCd = "";
			String subPplanCd = "";
			
			// 割引サービス情報を取得する
			JBSbatCommonDBInterface subWribSvcKeiList = new JBSbatCommonDBInterface();
			
			//同一回線の別サービス契約情報（サービス契約番号）
			String subSvcKeiNo = "";
			for (int i = 0; i < kaisenTgSvkeiList.size(); i++)
			{
				// 割引サービス情報を取得する
				JBSbatCommonDBInterface wribSvcKeiList = this.getwribSvcKeiInfo(kaisenTgSvkeiList.get(i).getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));
				//割引サービスが存在しない場合、次の処理を行う。
				if (wribSvcKeiList == null)
				{
					svcKeiKaisenUcwkNo = kaisenTgSvkeiList.get(i).getString(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO);
					continue;
				}
				//元の割引サービスと先の割引サービスが同一の場合、次の処理を行う。
				if (inputWribSvcKeiNo.equals(wribSvcKeiList.getString(JBSbatKK_T_WRISVC_TG_KEI.WRIB_SVC_KEI_NO)))
				{
					svcKeiKaisenUcwkNo = kaisenTgSvkeiList.get(i).getString(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO);
					continue;
				}
				// 世代登録年月日時分秒
				String geneAddDtm = wribSvcKeiList.getString(JBSbatKK_T_WRIB_SVC_KEI.GENE_ADD_DTM);
				if (JKKStringUtil.isNullBlank(sakiGeneAddDtm)) 
				{
					sakiGeneAddDtm = geneAddDtm;
					//引継ぎ先の割引サービス契約ステータス
					sakiWribSvcKeiStat = wribSvcKeiList.getString(JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_KEI_STAT);
					// サービス契約回線内訳番号を取得
					svcKeiKaisenUcwkNo = kaisenTgSvkeiList.get(i).getString(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO);
					subPcrsCd = kaisenTgSvkeiList.get(i).getString(JBSbatKK_T_SVC_KEI.PCRS_CD);
					subPplanCd = kaisenTgSvkeiList.get(i).getString(JBSbatKK_T_SVC_KEI.PPLAN_CD);
					subSvcKeiNo = kaisenTgSvkeiList.get(i).getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
					subWribSvcKeiList = wribSvcKeiList;
					continue;
				}
				if (Long.valueOf(geneAddDtm) > Long.valueOf(sakiGeneAddDtm))
				{
					sakiGeneAddDtm = geneAddDtm;
					//引継ぎ先の割引サービス契約ステータス
					sakiWribSvcKeiStat = wribSvcKeiList.getString(JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_KEI_STAT);
					// サービス契約回線内訳番号を取得
					svcKeiKaisenUcwkNo = kaisenTgSvkeiList.get(i).getString(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO);
					subPcrsCd = kaisenTgSvkeiList.get(i).getString(JBSbatKK_T_SVC_KEI.PCRS_CD);
					subPplanCd = kaisenTgSvkeiList.get(i).getString(JBSbatKK_T_SVC_KEI.PPLAN_CD);
					subSvcKeiNo = kaisenTgSvkeiList.get(i).getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
					subWribSvcKeiList = wribSvcKeiList;
					continue;
				}
			}
			
			// 同一回線の別サービス契約情報（サービス契約番号）が存在しない場合
			// 住所変更スキーマに移転先の情報を取得する。
			if (JKKStringUtil.isNullBlank(subSvcKeiNo) || (JKKStrConst.CD00055_DSLZM.equals(sakiWribSvcKeiStat) || JKKStrConst.CD00055_CSLZM.equals(sakiWribSvcKeiStat)))
			{				
				// 移転先に紐付く契約情報を取得する。
				ArrayList<JBSbatCommonDBInterface> svcKeInfoList = this.getHikiTsugiSvcKeiInfo(svcKeiKaisenUcwkNo);
				if (svcKeInfoList != null)
				{
					for (int i = 0; i < svcKeInfoList.size(); i++)
					{
						// 割引サービス情報を取得する
						JBSbatCommonDBInterface wribSvcKeiList = this.getwribSvcKeiInfo(svcKeInfoList.get(i).getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));
						//割引サービスが存在しない場合、次の処理を行う。
						if (wribSvcKeiList == null)
						{
							continue;
						}
						// 世代登録年月日時分秒
						String geneAddDtm = wribSvcKeiList.getString(JBSbatKK_T_WRIB_SVC_KEI.GENE_ADD_DTM);
	
						if (JKKStringUtil.isNullBlank(sakiGeneAddDtm)) 
						{
							sakiGeneAddDtm = geneAddDtm;
							//引継ぎ先の割引サービス契約ステータス
							sakiWribSvcKeiStat = wribSvcKeiList.getString(JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_KEI_STAT);
							// サービス契約回線内訳番号を取得
							svcKeiKaisenUcwkNo = svcKeInfoList.get(i).getString(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO);
							subPcrsCd = svcKeInfoList.get(i).getString(JBSbatKK_T_SVC_KEI.PCRS_CD);
							subPplanCd = svcKeInfoList.get(i).getString(JBSbatKK_T_SVC_KEI.PPLAN_CD);
							subSvcKeiNo = svcKeInfoList.get(i).getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
							subWribSvcKeiList = wribSvcKeiList;	
						}
						if (Long.valueOf(geneAddDtm) > Long.valueOf(sakiGeneAddDtm))
						{
							sakiGeneAddDtm = geneAddDtm;
							//引継ぎ先の割引サービス契約ステータス
							sakiWribSvcKeiStat = wribSvcKeiList.getString(JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_KEI_STAT);
							// サービス契約回線内訳番号を取得
							svcKeiKaisenUcwkNo = svcKeInfoList.get(i).getString(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO);
							subPcrsCd = svcKeInfoList.get(i).getString(JBSbatKK_T_SVC_KEI.PCRS_CD);
							subPplanCd = svcKeInfoList.get(i).getString(JBSbatKK_T_SVC_KEI.PPLAN_CD);
							subSvcKeiNo = svcKeInfoList.get(i).getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
							subWribSvcKeiList = wribSvcKeiList;	
						}
					}
				}
			}
			//先の割引サービス契約番号が取得できない場合
			if (JKKStringUtil.isNullBlank(subSvcKeiNo))
			{
				return null;
			}
			//先の割引サービスの世代登録年月日が取得できない場合
			if (JKKStringUtil.isNullBlank(sakiGeneAddDtm)) 
			{
				return null;
			}
			// 割引サービス契約情報が存在する場合、引継ぎ元の世代と引継ぎ先の世代を比較し、元が最新の場合　引継しない
			if (Long.valueOf(sakiGeneAddDtm) <= Long.valueOf(motoGeneAddDtm))
			{
				return null;
			}
			// OM-2018-0000826 MOD END
			// 割引サービス契約情報が存在する場合、引継ぎ元と引継ぎ先の適用回数を比較する。
			// 引継ぎ元の割引適用回数を取得する
			String wribSvcDtlCd = resultWriSvcTankaMap.get(JBSbatKK_M_WRIB_SVC_TANKA.WRIB_SVC_DTL_CD);
			
			JBSbatCommonDBInterface wriSvcKeiUcwkList = this.getWrisvcKeiUcwkInfo(inputWribSvcKeiNo, wribSvcDtlCd);
			
			if (resultWriSvcKeiMap == null)
			{
				message = "割引サービス契約番号:" + inputWribSvcKeiNo + "割引サービス契約内訳の情報が取得できません。" ;
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, new String[]{message});
	
				throw new JBSbatBusinessError();
			}
			// 引継ぎ先の適用回数
			String hktkiSakiwribAplyCnt = subWribSvcKeiList.getString(JBSbatKK_T_WRISVC_KEI_UCWK.WRIB_APLY_CNT);
			// 引継ぎ元の適用回数
			String hktkiMotowribAplyCnt = wriSvcKeiUcwkList.getString(JBSbatKK_T_WRISVC_KEI_UCWK.WRIB_APLY_CNT);
	
			// 引継ぎ元の適用回数 = 引継ぎ先の適用回数の場合、処理終了
			// OM-2018-0000826 MOD START
			//if (hktkiMotowribAplyCnt.compareTo(hktkiSakiwribAplyCnt) < 0)
			if (hktkiMotowribAplyCnt.compareTo(hktkiSakiwribAplyCnt) != 0)
			// OM-2018-0000826 MOD END
			{
				return null;
			}
			
// IT2-2018-0000059 2018/06/14 ADD START
			// 割引サービスコード
			String subWribSvcCd = subWribSvcKeiList.getString(JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_CD);
			
			// 処理レコード数
			int trnRecCnt = 0;
			
			// 標準工事費相当額割引CP（ネット用）の場合、基本料のみ
			// ANK-3951-00-00 MOD START
//			if (WRIB_SVC_KOJIHI_KAP_CP_NET.equals(subWribSvcCd))
			if (WRIB_SVC_KOJIHI_KAP_CP_NET.equals(subWribSvcCd) || WRIB_SVC_KOJIHI_KAP_CP_NET_24.equals(subWribSvcCd))
			// ANK-3951-00-00 MOD END
			{
				trnRecCnt = 1;
			}
			// 標準工事費相当額割引CP（電話用）の場合、基本料と機器オプション
			// ANK-3951-00-00 MOD START
//			else if (WRIB_SVC_KOJIHI_KAP_CP_TEL.equals(subWribSvcCd))
			else if (WRIB_SVC_KOJIHI_KAP_CP_TEL.equals(subWribSvcCd) || WRIB_SVC_KOJIHI_KAP_CP_TEL_24.equals(subWribSvcCd))
			// ANK-3951-00-00 MOD END
			{
				trnRecCnt = 2;
			}
			
			// カウンタ
			int counter = 0;
			
			// カウンタが処理レコード数より小さい間は出力する
			while (counter < trnRecCnt)
			{
				// 割引サービス契約番号
				String subWribSvcKeiNo = subWribSvcKeiList.getString(JBSbatKK_T_WRISVC_TG_KEI.WRIB_SVC_KEI_NO);
				// 割引サービス対象契約番号
				String subWribSvcTrgtKeiNo = subWribSvcKeiList.getString(JBSbatKK_T_WRISVC_TG_KEI.WRIB_SVC_TRGT_KEI_NO);
				
				// 標準工事費相当額割引CP（電話用） かつ 2レコード目を処理する場合
				// 機器オプションのレコードを取得する
				// ANK-3951-00-00 MOD START
//				if (WRIB_SVC_KOJIHI_KAP_CP_TEL.equals(subWribSvcCd) && (1 == counter))
				if ((WRIB_SVC_KOJIHI_KAP_CP_TEL.equals(subWribSvcCd) || WRIB_SVC_KOJIHI_KAP_CP_TEL_24.equals(subWribSvcCd)) && (1 == counter))
				// ANK-3951-00-00 MOD END
				{
					// パラメータの設定(条件)
					String[] param = {
							subWribSvcKeiNo
							, super.opeDate		// 運用日
							, super.opeDate		// 運用日
					};
					
					// 割引サービス対象契約を検索
					executeKK_T_WRISVC_TG_KEI_KK_SELECT_059(param);
					
					// 結果を取得
					JBSbatCommonDBInterface telAdaptMap = new JBSbatCommonDBInterface();
					
					if ((telAdaptMap = db_KK_T_WRISVC_TG_KEI.selectNext()) != null)
					{
						subWribSvcTrgtKeiNo = telAdaptMap.getString(JBSbatKK_T_WRISVC_TG_KEI.WRIB_SVC_TRGT_KEI_NO);
						subPcrsCd = telAdaptMap.getString(JBSbatKK_T_KKOP_SVC_KEI.PCRS_CD);			// 料金コースコード
						subPplanCd = telAdaptMap.getString(JBSbatKK_T_KKOP_SVC_KEI.PPLAN_CD);		// 料金プランコード
					}
					else
					{
						subPcrsCd = "";			// 料金コースコード
						subPplanCd = "";		// 料金プランコード
					}
				}
// IT2-2018-0000059 2018/06/14 ADD END
// IT2-2018-0000059 2018/06/14 MOD START
				// 上記以外の場合
				// 引継ぎ先の割引サービス単価番号を取得
//				String subWribSvcCd = subWribSvcKeiList.getString(JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_CD);
				if (JKKStringUtil.isNullBlank(subPcrsCd) || JKKStringUtil.isNullBlank(subPplanCd))
				{
					return null;
				}
				JBSbatCommonDBInterface wriSvcTankInfoList = this.getWrisvcTankInfo(subPcrsCd, subPplanCd, subWribSvcCd);
				if (wriSvcTankInfoList == null)
				{
					message = "割引サービスコード:" + subWribSvcCd + ", 料金コースコード:" + subPcrsCd + ", プランコード:" + subPplanCd;
					commonItem.getLogPrint().printBusinessErrorLog("EKKB0290AW", new String[]{message});
					return null;
				}
//				// 割引サービス契約番号
//				String subWribSvcKeiNo = subWribSvcKeiList.getString(JBSbatKK_T_WRISVC_TG_KEI.WRIB_SVC_KEI_NO);
//				// 割引サービス対象契約番号
//				String subWribSvcTrgtKeiNo = subWribSvcKeiList.getString(JBSbatKK_T_WRISVC_TG_KEI.WRIB_SVC_TRGT_KEI_NO);
				// 割引サービス単価番号
				String subSvcTankaNo = wriSvcTankInfoList.getString(JBSbatKK_M_WRIB_SVC_TANKA.WRIB_SVC_TANKA_NO);
				
				// 引継ぎ先キャンペーン割引適用情報ファイル
				fileOutKKIFM800_001(inMap, subWribSvcKeiNo, subWribSvcTrgtKeiNo, subSvcTankaNo);
// IT2-2018-0000059 2018/06/14 MOD END
// IT2-2018-0000059 2018/06/14 ADD START
				// カウントアップ
				counter++;
			}
// IT2-2018-0000059 2018/06/14 ADD END
		}
		catch(Exception e)
		{
			throw e;
		}

		return null;
	}
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		// ファイルを閉じる
		JKKBatCommon.closeBusinessFileUtil(kkifm800_001Obj);

		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CH_M_PRC_SCHDL_TEIGI.close();
		db_KK_M_WRIB_SVC_TANKA.close();
		db_KK_T_WRISVC_TG_KEI.close();
		db_KK_T_KAISEN_TG_SVKEI.close();
		db_KK_T_WRIB_SVC_KEI.close();
		db_KK_T_SVC_KEI.close();
		db_KK_T_WRISVC_KEI_UCWK.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 料金計算年月日。
	 * 
	 * @return イベント年月日
	 * @throws Exception スローされる例外
	 */
	private String getPrcCalcYmd() throws Exception
	{
		Object[] param = 
		{
				JACStrConst.EVENT_CD_RYOKIN_KEISAN_YMD,	// 料金スケジュール定義．イベントコード         =  03_料金計算日
				super.opeDate,							// 料金スケジュール定義．イベント年月          <= [運用日]
		};
		// 料金スケジュール定義
		executeCH_M_PRC_SCHDL_TEIGI_CH_SELECT_022(param);
		
		JBSbatCommonDBInterface record = db_CH_M_PRC_SCHDL_TEIGI.selectNext();
		if (record.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.EVENT_YMD) == null)
		{
			throwJBSbatBusinessException(JBSbatCH_M_PRC_SCHDL_TEIGI.TABLE_NAME);
		}

		return record.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.EVENT_YMD);
	}
	
	/**
	 * 業務例外をスローする。
	 * 
	 * @param replaceMessage 置換文字列
	 * @throws Exception スローされる例外
	 */
	private void throwJBSbatBusinessException(String replaceMessage) throws Exception
	{
		// ｢%1%のデータが取得できないため、処理を終了します。｣
		throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE, new String[] { replaceMessage });
	}
	
	/**
	 * SQLKEY(AC_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 executeCH_M_PRC_SCHDL_TEIGI_CH_SELECT_022(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CH_M_PRC_SCHDL_TEIGI.selectBySqlDefine(paramList, CH_M_PRC_SCHDL_TEIGI_CH_SELECT_022);
	}

	/**
	 * 引継ぎ先キャンペーン割引適用情報ファイルを出力する
	 * @param inMap inputファイルマップ
	 * @param subWribSvcKeiNo 債権確定年月日。
	 * @param subWribSvcTrgtKeiNo 割引サービス対象契約番号。
	 * @param subWriSvcTankaNo 割引サービス単価番号。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void fileOutKKIFM800_001(JBSbatServiceInterfaceMap inMap
			, String subWribSvcKeiNo
			, String subWribSvcTrgtKeiNo
			, String subWriSvcTankaNo) throws Exception
	{
		// 引継ぎ先キャンペーン割引適用情報ファイルにデータ情報を出力する
		ArrayList<String> outputInfo = new ArrayList<String>();

		// 債権確定年月日
		outputInfo.add(inMap.getString(JBSbatKKIFM104.SAIKEN_FIX_YM));
		// 割引サービス契約番号
		outputInfo.add(subWribSvcKeiNo);
		// 割引サービス対象契約番号
		outputInfo.add(subWribSvcTrgtKeiNo);
		// サービス単価番号
		outputInfo.add(subWriSvcTankaNo);
		
		JKKBatCommon.printBusinessFileUtil(kkifm800_001Obj, outputInfo);
	}
	
	/**
	 * 割引サービス単価のデータを取得する。(標準工事費キャンペーン)
	 * <br>
	 * 割引サービス単価のKK_SELECT_002の定義を使用
	 * @return ArrayList<HashMap<String, String>> 割引サービス単価データ(標準工事費キャンペーン)
	 * @throws Exception
	 * @throws JBSbatBusinessError データが1件も取得できないときに、この例外が発生。
	 */
	private HashMap<String, HashMap<String, String>> getWribSvcTankaCampain() throws Exception, JBSbatBusinessError
	{
		Object[] param =
		{
			super.opeDate,		// 割引サービス単価．割引サービス単価適用開始年月日               <= [運用日]
			super.opeDate,		// 割引サービス単価．割引サービス単価適用終了年月日               >= [運用日]
		};
		
		executeKK_M_WRIB_SVC_TANKA_KK_SELECT_007(param);
		
		HashMap<String, HashMap<String, String>> ret = new HashMap<String, HashMap<String, String>>();
		
		// KK_SELECT_002の実行結果取得
		JBSbatCommonDBInterface dataMap = new JBSbatCommonDBInterface();
		
		while(null != (dataMap = db_KK_M_WRIB_SVC_TANKA.selectNext()))
		{
			// 値保持用のHashMap
			HashMap<String, String> map = new HashMap<String, String>();
			// 取得した値をHashMapに設定
			map.put(JBSbatKK_M_WRIB_SVC_TANKA.WRIB_SVC_TANKA_NO, dataMap.getString(JBSbatKK_M_WRIB_SVC_TANKA.WRIB_SVC_TANKA_NO));
			map.put(JBSbatKK_M_WRIB_SVC_TANKA.WRIB_SVC_CD, dataMap.getString(JBSbatKK_M_WRIB_SVC_TANKA.WRIB_SVC_CD));
			map.put(JBSbatKK_M_WRIB_SVC_TANKA.WRIB_SVC_DTL_CD, dataMap.getString(JBSbatKK_M_WRIB_SVC_TANKA.WRIB_SVC_DTL_CD));
			
			// 格納
			ret.put(dataMap.getString(JBSbatKK_M_WRIB_SVC_TANKA.WRIB_SVC_TANKA_NO), map) ;
		}
		
		if (ret.size() == 0)
		{
			// エラーの出力
			String umekomiStr = "割引サービス単価情報が取得に失敗しました。";
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, new String[]{umekomiStr});
			throw new JBSbatBusinessError();
		}
		
		return ret;
	}

	/**
	 * SQLKEY(KK_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_WRIB_SVC_TANKA_KK_SELECT_007(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		
		// DBアクセスを実行します
		db_KK_M_WRIB_SVC_TANKA.selectBySqlDefine(paramList, KK_M_WRIB_SVC_TANKA_KK_SELECT_007);
	}

	/**
	 * 引数で指定されたCSVファイルの一行データをMapにして返却する（WRI_SVC_KEI_INFO_ITEM）
	 * 
	 * ダブルクォーテーションで囲まれている場合は、削除した文字列に変換する。
	 * @param commonItem 共通情報
	 * @param lineData 一行分のCSVデータ
	 * @return Map<String> 項目ごとにCSVデータを格納したMap
	 * @throws Exception 例外
	 **/
	private HashMap<String, String> convNonQuateStringToList(JBSbatCommonItem commonItem, String lineData) throws Exception
	{
		// CSV指定ファイル読込み
		// 戻り値格納用Map
		HashMap<String, String> resultMap = new HashMap<String, String>();
		try
		{
			String[] result = lineData.split(",");
			
			for (int i = 0; i < result.length; i++)
			{
				String colm = result[i];
	
				// 先頭 または 最後がダブルクォートの場合 
				if (colm.startsWith(KAKOIMOJI))
				{
					colm = colm.substring(1);
				}
				if (colm.endsWith(KAKOIMOJI))
				{
					colm = colm.substring(0, colm.length() - 1);
				}
				resultMap.put(WRI_SVC_KEI_INFO_ITEM.get(String.valueOf(i)), colm);
			}
		}
		catch (NoSuchElementException e)
		{
			// 例外処理
			commonItem.getLogPrint().printDebugLog("JBSbatKKHktgiSakiCampainWribAplyInfoChsht.convNonQuateStringToList NoSuchElementException発生:");
			throw e;
		}

		return resultMap;
	}

	/**
	 * 割引サービス対象契約を検索する.
	 * @param  wribSvcKeiNo 割引サービス対象契約
	 * @return ArrayList
	 * @throws Exception
	 */
	private JBSbatCommonDBInterface getInputSvcKeiNo(String wribSvcKeiNo) throws Exception
	{
		Object[] param =
		{
			super.opeDate,		// 割引サービス対象契約．割引サービス対象契約適用開始年月日                    <= [運用日]
			super.opeDate,		// 割引サービス対象契約．割引サービス対象契約適用終了年月日                    >= [運用日]
			wribSvcKeiNo,		// 割引サービス対象契約．割引サービス契約番号                                  =  [割引契約番号]
			super.opeDate,		// サービス契約．予約適用年月日                                                <= [運用日]
		};
		
		executeD_TBL_NAME_KK_T_WRISVC_TG_KEI_KK_SELECT_060(param);
		JBSbatCommonDBInterface wrisvcTgKeiInfo = new JBSbatCommonDBInterface();
		ArrayList<JBSbatCommonDBInterface> wrisvcTgKeiInfoList = new ArrayList<JBSbatCommonDBInterface>();

		while((wrisvcTgKeiInfo = db_KK_T_WRISVC_TG_KEI.selectNext()) != null)
		{
			wrisvcTgKeiInfoList.add(wrisvcTgKeiInfo);
		}
		return (wrisvcTgKeiInfoList.size() > 0 ? wrisvcTgKeiInfoList.get(0) : null);
	}
	
	/**
	 * SQLKEY(KK_SELECT_060)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			割引サービス対象契約適用開始年月日
	 *			割引サービス対象契約適用終了年月日
	 *			割引サービス契約番号
	 *			予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeD_TBL_NAME_KK_T_WRISVC_TG_KEI_KK_SELECT_060(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_WRISVC_TG_KEI.selectBySqlDefine(paramList, KK_T_WRISVC_TG_KEI_KK_SELECT_060);
	}
	
	/**
	 * 割引サービス対象契約を検索する.
	 * @param  inputSvcKeiNo サービス契約番号
	 * @return ArrayList
	 * @throws Exception
	 */
	// OM-2018-0000826 MOD START
	//private JBSbatCommonDBInterface getKaisenTgSvkeiInfo(String inputSvcKeiNo) throws Exception
	private ArrayList<JBSbatCommonDBInterface> getKaisenTgSvkeiInfo(String inputSvcKeiNo) throws Exception
	// OM-2018-0000826 MOD END
	{
		Object[] param =
		{
			inputSvcKeiNo,			// 回線対象サービス契約．サービス契約番号                           =  [サービス契約番号]
			super.opeDate,		// 回線対象サービス契約．回線内訳使用開始年月日                    <= [運用日]
			super.opeDate,		// サービス契約．予約適用年月日                                    <= [運用日]
			super.opeDate,		// 回線対象サービス契約．回線内訳使用開始年月日                    <= [運用日]
		};
		
		executeD_TBL_NAME_KK_T_KAISEN_TG_SVKEI_KK_SELECT_044(param);
		JBSbatCommonDBInterface kaisenTgSvkeiInfo = new JBSbatCommonDBInterface();
		ArrayList<JBSbatCommonDBInterface> kaisenTgSvkeiInfoList = new ArrayList<JBSbatCommonDBInterface>();

		while((kaisenTgSvkeiInfo = db_KK_T_KAISEN_TG_SVKEI.selectNext()) != null)
		{
			kaisenTgSvkeiInfoList.add(kaisenTgSvkeiInfo);
		}
		// OM-2018-0000826 MOD START
		//return (kaisenTgSvkeiInfoList.size() > 0 ? kaisenTgSvkeiInfoList.get(0) : null);
		return kaisenTgSvkeiInfoList;
		// OM-2018-0000826 MOD END
	}
	
	/**
	 * SQLKEY(KK_SELECT_060)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			サービス契約番号
	 *			回線内訳使用開始年月日
	 *			予約適用年月日
	 *			回線内訳使用開始年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeD_TBL_NAME_KK_T_KAISEN_TG_SVKEI_KK_SELECT_044(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_KK_SELECT_044);
	}


	/**
	 * 割引サービス契約を検索する.
	 * @param  subSvcKeiNo サービス契約番号
	 * @return ArrayList
	 * @throws Exception
	 */
	private JBSbatCommonDBInterface getwribSvcKeiInfo(String subSvcKeiNo) throws Exception
	{
		Object[] param =
		{
			subSvcKeiNo,		// 割引サービス対象契約．サービス契約番号                           =  [サービス契約番号]
			super.opeDate,		// 割引サービス契約．予約適用年月日                            <= [運用日]
			super.opeDate,		// 割引サービス対象契約．割引サービス対象契約適用開始年月日    <= [運用日]
			super.opeDate,		// 割引サービス対象契約．割引サービス対象契約適用終了年月日    >= [運用日]
		};
		
		executeD_TBL_NAME_KK_T_WRIB_SVC_KEI_KK_SELECT_076(param);
		JBSbatCommonDBInterface wribSvcKei = new JBSbatCommonDBInterface();
		ArrayList<JBSbatCommonDBInterface> wribSvcKeiList = new ArrayList<JBSbatCommonDBInterface>();

		while((wribSvcKei = db_KK_T_WRIB_SVC_KEI.selectNext()) != null)
		{
			wribSvcKeiList.add(wribSvcKei);
		}
		return (wribSvcKeiList.size() > 0 ? wribSvcKeiList.get(0) : null);
	}
	
	/**
	 * SQLKEY(KK_SELECT_076)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			サービス契約番号
	 *			予約適用年月日
	 *			割引サービス対象契約適用開始年月日
	 *			割引サービス対象契約適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeD_TBL_NAME_KK_T_WRIB_SVC_KEI_KK_SELECT_076(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_WRIB_SVC_KEI.selectBySqlDefine(paramList, KK_T_WRIB_SVC_KEI_KK_SELECT_076);
	}


	/**
	 * 割引サービス契約を検索する.
	 * @param  svcKeiKaisenUcwkNo サービス契約回線内訳番号
	 * @return ArrayList
	 * @throws Exception
	 */
	// OM-2018-0000826 MOD START
	//private JBSbatCommonDBInterface getHikiTsugiSvcKeiInfo(String svcKeiKaisenUcwkNo) throws Exception
	private ArrayList<JBSbatCommonDBInterface> getHikiTsugiSvcKeiInfo(String svcKeiKaisenUcwkNo) throws Exception
	// OM-2018-0000826 MOD END
	{
		Object[] param =
		{
			super.opeDate,			// サービス契約．予約適用年月日                            <= [運用日]
			svcKeiKaisenUcwkNo,		// 住所変更．移転先サービス契約回線内訳番号                 = [移転先サービス契約回線内訳番号]
			// OM-2018-0000826 DEL START
//			super.opeDate,			// 回線対象サービス契約．回線内訳使用開始年月日            <= [運用日]
//			super.opeDate,			// 回線対象サービス契約．回線内訳使用開始年月日            <= [運用日]
			// OM-2018-0000826 DEL END
		};
		
		executeD_TBL_NAME_KK_T_SVC_KEI_KK_SELECT_364(param);
		JBSbatCommonDBInterface svcKei = new JBSbatCommonDBInterface();
		ArrayList<JBSbatCommonDBInterface> svcKeiList = new ArrayList<JBSbatCommonDBInterface>();

		while((svcKei = db_KK_T_SVC_KEI.selectNext()) != null)
		{
			svcKeiList.add(svcKei);
		}
		// OM-2018-0000826 MOD START
		//return (svcKeiList.size() > 0 ? svcKeiList.get(0) : null);
		return (svcKeiList.size() > 0 ? svcKeiList : null);
		// OM-2018-0000826 MOD END

	}
	
	/**
	 * SQLKEY(KK_SELECT_364)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			予約適用年月日
	 *			移転先サービス契約回線内訳番号
	 *			回線内訳使用開始年月日
	 *			回線内訳使用開始年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeD_TBL_NAME_KK_T_SVC_KEI_KK_SELECT_364(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		// OM-2018-0000826 DEL START
//		paramList.setValue(param[2].toString());
//		paramList.setValue(param[3].toString());
		// OM-2018-0000826 DEL END
		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_364);
	}

	/**
	 * 割引サービス契約内訳を検索する.
	 * @param  wribSvcKeiNo 割引サービス契約番号
	 * @param  wribSvcDtlCd 割引サービス詳細コード
	 * @return ArrayList
	 * @throws Exception
	 */
	private JBSbatCommonDBInterface getWrisvcKeiUcwkInfo(String wribSvcKeiNo, String wribSvcDtlCd) throws Exception
	{
		Object[] param =
		{
			wribSvcKeiNo,		// 割引サービス契約内訳．割引サービス契約番号                   = [割引サービス契約番号]
			wribSvcDtlCd,		// 割引サービス契約内訳．割引サービス詳細コード                 = [割引サービス詳細コード]
		};
		
		executeD_TBL_NAME_KK_T_WRISVC_KEI_UCWK_KK_SELECT_021(param);
		JBSbatCommonDBInterface wribSvcUcwkKei = new JBSbatCommonDBInterface();
		ArrayList<JBSbatCommonDBInterface> wribSvcUcwkKeiList = new ArrayList<JBSbatCommonDBInterface>();

		while((wribSvcUcwkKei = db_KK_T_WRISVC_KEI_UCWK.selectNext()) != null)
		{
			wribSvcUcwkKeiList.add(wribSvcUcwkKei);
		}
		return (wribSvcUcwkKeiList.size() > 0 ? wribSvcUcwkKeiList.get(0) : null);
	}
	
	/**
	 * SQLKEY(KK_SELECT_021)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			割引サービス契約番号
	 *			割引サービス詳細コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeD_TBL_NAME_KK_T_WRISVC_KEI_UCWK_KK_SELECT_021(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		
		// DBアクセスを実行します
		db_KK_T_WRISVC_KEI_UCWK.selectBySqlDefine(paramList, KK_T_WRISVC_KEI_UCWK_KK_SELECT_021);
	}

	/**
	 * 割引サービス単価を検索する.
	 * @param  subPcrsCd 料金コースコード
	 * @param  subPplanCd プランコード
	 * @param  subWribSvcCd  割引サービスコード
	 * @return ArrayList
	 * @throws Exception
	 */
	private JBSbatCommonDBInterface getWrisvcTankInfo(String subPcrsCd, String subPplanCd, String subWribSvcCd) throws Exception
	{
		Object[] param =
		{
			super.opeDate,	// 割引サービス単価．割引サービス単価適用開始年月日                            <= [運用日]
			super.opeDate,	// 割引サービス単価．割引サービス単価適用終了年月日                            >= [運用日]
			subWribSvcCd,	// 割引サービス単価．割引サービスコード                                         = [割引サービスコード]
			subPcrsCd,		// 割引サービス単価．料金コースコード                                           = [料金コースコード]
			subPplanCd,		// 割引サービス単価．プランコード                                               = [プランコード]
		};
		
		executeD_TBL_NAME_KK_M_WRIB_SVC_TANKA_KK_SELECT_006(param);
		JBSbatCommonDBInterface wribSvcTankaInfo = new JBSbatCommonDBInterface();
		ArrayList<JBSbatCommonDBInterface> wribSvcTankaInfoList = new ArrayList<JBSbatCommonDBInterface>();

		while((wribSvcTankaInfo = db_KK_M_WRIB_SVC_TANKA.selectNext()) != null)
		{
			wribSvcTankaInfoList.add(wribSvcTankaInfo);
		}
		return (wribSvcTankaInfoList.size() > 0 ? wribSvcTankaInfoList.get(0) : null);
	}
	
	/**
	 * SQLKEY(KK_SELECT_006)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			割引サービス単価適用開始年月日
	 *			割引サービス単価適用終了年月日
	 *			割引サービスコード
	 *			料金コースコード
	 *			プランコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeD_TBL_NAME_KK_M_WRIB_SVC_TANKA_KK_SELECT_006(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_WRIB_SVC_TANKA.selectBySqlDefine(paramList, KK_M_WRIB_SVC_TANKA_KK_SELECT_006);
	}
	// IT2-2018-0000059 2018/06/14 ADD START
	/**
	 * SQLKEY(KK_SELECT_059)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			WRIB_SVC_KEI_NO
	 *			OPE_DATE
	 *			OPE_DATE
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_WRISVC_TG_KEI_KK_SELECT_059(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		// 件数分設定
		for (int i = 0; i < param.length; i++)
		{
			paramList.setValue(param[i]);
		}
		
		// DBアクセスを実行します
		db_KK_T_WRISVC_TG_KEI.selectBySqlDefine(paramList, KK_T_WRISVC_TG_KEI_KK_SELECT_059);
	}
	// IT2-2018-0000059 2018/06/14 ADD END
}