/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKPayChgShoyoTgsListCst
*	ソースファイル名	：JBSbatKKPayChgShoyoTgsListCst.java
*	作成者				：富士通　
*	作成日				：2016年02月23日
*＜機能概要＞
*　支払変更慫慂対象者リスト抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v23.00.00	2016/02/23	FJ) 謝		【ANK-2740-00-00】支払変更慫慂対象者リストの抽出 新規作成
*	v49.00.00	2020/03/27	FJ) 坂本	【ANK-3830-00-00】パートナーサービス（光卸）契約者の除外対応
*	v71.00.00	2024/04/19	FJ) 丸田	【ANK-4554-00-00】支払方法変更慫慂リスト改善
*	v71.00.01	2024/06/10	FJ) 永井	【ANK-4554-00-00】支払方法変更慫慂リスト改善
*********************************************************************/
package eo.business.service;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.common.JBSbatKKConst;
import eo.business.util.table.JBSbatCH_T_SEIKY_UCWK;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatKK_M_PCRS;
import eo.business.util.table.JBSbatKK_M_PPLAN;
import eo.business.util.table.JBSbatKK_M_PRC_GRP;
import eo.business.util.table.JBSbatKK_T_KKTK_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVKEI_KAISEN_UW;
import eo.business.util.table.JBSbatKK_T_TK_HOSHIKI_KEI;
import eo.common.constant.JKKStrConst;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JBSbatDateUtil;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKPayChgShoyoTgsListCst extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(請求内訳)*/
	private static final String D_TBL_NAME_CH_T_SEIKY_UCWK = "CH_T_SEIKY_UCWK";

	/** テーブル(提供方式契約)*/
	private static final String D_TBL_NAME_KK_T_TK_HOSHIKI_KEI = "KK_T_TK_HOSHIKI_KEI";

	/** テーブル(料金グループ)*/
	private static final String D_TBL_NAME_KK_M_PRC_GRP = "KK_M_PRC_GRP";

	/** テーブル(料金コース)*/
	private static final String D_TBL_NAME_KK_M_PCRS = "KK_M_PCRS";

	/** テーブル(料金プラン)*/
	private static final String D_TBL_NAME_KK_M_PPLAN = "KK_M_PPLAN";
// ANK-3830-00-00 ADD START
	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";
// ANK-3830-00-00 ADD END
	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";

	/** SQL定義キー(KK_SELECT_326)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_326 = "KK_SELECT_326";

	/** SQL定義キー(KK_SELECT_327)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_327 = "KK_SELECT_327";

	/** SQL定義キー(KK_SELECT_003)*/
	private static final String CH_T_SEIKY_UCWK_KK_SELECT_003 = "KK_SELECT_003";

	/** SQL定義キー(KK_SELECT_038)*/
	private static final String KK_T_TK_HOSHIKI_KEI_KK_SELECT_038 = "KK_SELECT_038";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_M_PRC_GRP_KK_SELECT_001 = "KK_SELECT_001";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_M_PCRS_KK_SELECT_001 = "KK_SELECT_001";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_M_PPLAN_KK_SELECT_001 = "KK_SELECT_001";
// ANK-3830-00-00 ADD START
	/** SQL定義キー(KK_SELECT_078)*/
	private static final String CK_T_CUST_KK_SELECT_078 = "KK_SELECT_078";
// ANK-3830-00-00 ADD END
	/** SQL定義キー(KK_INSERT_001)*/
	private static final String ZM_T_DL_FILE_KANRI_KK_INSERT_001 = "KK_INSERT_001";

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(請求内訳)*/
	private JBSbatSQLAccess db_CH_T_SEIKY_UCWK = null;

	/** テーブルアクセスクラス(提供方式契約)*/
	private JBSbatSQLAccess db_KK_T_TK_HOSHIKI_KEI = null;

	/** テーブルアクセスクラス(料金グループ)*/
	private JBSbatSQLAccess db_KK_M_PRC_GRP = null;

	/** テーブルアクセスクラス(料金コース)*/
	private JBSbatSQLAccess db_KK_M_PCRS = null;

	/** テーブルアクセスクラス(料金プラン)*/
	private JBSbatSQLAccess db_KK_M_PPLAN = null;
// ANK-3830-00-00 ADD START
	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;
// ANK-3830-00-00 ADD END
	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** ファイルコード */
	private static final String FILE_CD = "0000";
	
	/** 処理管理番号 */
	private static final String TRN_KANRI_NO = "000000000145";
	
	/** ファイル名編集用 */
	private static final String FILE_NM = "KKLST093_PAY_CHG_TG_SHA_";
	
	/** 名称＿個別 */
	private static final String NM_KOBETSU = "個別";
	
	/** 名称＿全戸 */
	private static final String NM_ZENKO = "全戸";
	
	/** ヘッダ編集用＿サービス開始日 */
	private static final String HEADER_SVC_STA_YMD = "サービス開始日";
	
	/** ヘッダ編集用＿SYSID */
	private static final String HEADER_SYSID = "SYSID";
	
	/** ヘッダ編集用＿請求先番号 */
	private static final String HEADER_SEIKY_KEI_NO = "請求先番号";
	
	/** ヘッダ編集用＿お客さまID */
	private static final String HEADER_SVC_KEI_NO = "お客さまID";
	
	/** ヘッダ編集用＿料金グループ名 */
	private static final String HEADER_PRC_GRP_NM = "料金グループ名";
	
	/** ヘッダ編集用＿料金コース名 */
	private static final String HEADER_PCRS_NM = "料金コース名";
	
	/** ヘッダ編集用＿料金プラン名 */
	private static final String HEADER_PPLAN_NM = "料金プラン名";
	
	/** ヘッダ編集用＿名称 */
	private static final String HEADER_NM = "名称";
	
	/** ヘッダ編集用＿請求金額 */
	private static final String HEADER_SEIKY_AMNT = "請求金額";
	
	/** 請求年月 */
	private String seikyYm = null;
	
	/** 支払変更慫慂対象者リスト抽出ファイルファイルパス */
	private String kkifm69901FilePath = null;
	
	/** 支払変更慫慂対象者リストファイルパス */
	private String kkifm699FilePath = null;
	
	/** 支払変更慫慂対象者リストファイルオブジェクト */
	private JBSbatBusinessFileUtil kkifm699FileObj = null;
	
	/** ファイル出力件数 */
	private int outCount = 0;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_CH_T_SEIKY_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_SEIKY_UCWK);
		db_KK_T_TK_HOSHIKI_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_TK_HOSHIKI_KEI);
		db_KK_M_PRC_GRP = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_PRC_GRP);
		db_KK_M_PCRS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_PCRS);
		db_KK_M_PPLAN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_PPLAN);
// ANK-3830-00-00 ADD START
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
// ANK-3830-00-00 ADD END
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// フリー項目を取得する
		String[] freeItems = commonItem.getFreeItem().split(JKKBatConst.S_PARAM_DELIM);
		
		// 請求年月
		seikyYm = freeItems[0];
		
		// 支払変更慫慂対象者リスト抽出ファイルファイルパス
		kkifm69901FilePath = freeItems[1];
		
		// 支払変更慫慂対象者リストファイルパス
		kkifm699FilePath = freeItems[2];
		
		// 支払変更慫慂対象者リストファイルオブジェクト
		kkifm699FileObj = JKKBatCommon.createBusinessFileUtil(kkifm699FilePath,
				JKKBatConst.SJIS, JKKStrConst.LINE_SEPARATOR, JKKBatConst.S_SEP_CAM);
		
		// ファイル出力件数
		outCount = 0;
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// 支払変更慫慂対象者リストにヘッダ情報を出力する
		createKkifm699Header();
		
		// 出力済フラグ
		boolean outputFlg = false;
		
		// 退避.請求契約番号
		String bkSeikyKeiNo = null;
		
		// 退避.金額
		String bkAmnt = null;
		
		// 支払変更慫慂対象者リスト抽出ファイル件数分を繰返す
		BufferedReader br = null;
		try
		{
			InputStreamReader is = new InputStreamReader(new FileInputStream(kkifm69901FilePath), JKKStrConst.ENCODE_SJIS);
			br = new BufferedReader(is);
			
			while (br.ready())
			{
				// 1行読込み
				String[] data = br.readLine().split(",");
				
				// 請求契約番号
				String seikyKeiNo = data[0].substring(1, data[0].length() - 1);
				
				// 料金グループコード
				String prcGrpCd = data[1].substring(1, data[1].length() - 1);
				
				// サービス契約番号
				String svcKeiNo = data[2].substring(1, data[2].length() - 1);
				
				// 世代登録年月日
				String geneAddDtm = data[3].substring(1, data[3].length() - 1);
				
				// SYSID
				String sysid = data[4].substring(1, data[4].length() - 1);
				
				// 料金コースコード
				String pcrsCd = data[5].substring(1, data[5].length() - 1);
				
				// 料金プランコード
				String pplanCd = data[6].substring(1, data[6].length() - 1);
				
				// 提供方式契約番号
				String tkHoshikiKeiNo = data[7].substring(1, data[7].length() - 1);
				
				// サービス開始年月日
				String svcStaYmd = data[8].substring(1, data[8].length() - 1);
				
				// 名称
				String nm = "";
// ANK-3830-00-00 ADD START
				// 契約者タイプコード
				String keishaTypeCd = "";
// ANK-3830-00-00 ADD END
				
				// 請求契約スキップ処理
				if (!seikyKeiNo.equals(bkSeikyKeiNo))
				{
					// KKIFM69901の請求契約番号と退避.請求契約番号が不一致の場合
					outputFlg = false;
					bkAmnt = null;
					bkSeikyKeiNo = seikyKeiNo;
				}
				
				if (outputFlg)
				{
					// 同請求契約内で１件のみを出力する
					continue;
				}
				
				if (bkAmnt == null)
				{
					// 請求内訳を取得する
					executeCH_T_SEIKY_UCWK_KK_SELECT_003(new Object[] {seikyKeiNo, seikyYm});
					JBSbatCommonDBInterface seikyUcwkMap = db_CH_T_SEIKY_UCWK.selectNext();
					if (seikyUcwkMap != null) {
						bkAmnt = seikyUcwkMap.getString(JBSbatCH_T_SEIKY_UCWK.AMNT);
					}
					else
					{
						bkAmnt = "0";
					}
				}
				
				// ｅｏ光ネットマンションタイプの場合、以下の出力除外チェックを行う
				if (JKKStrConst.CD00133_04.equals(prcGrpCd))
				{
					// 提供方式契約を取得する
					executeKK_T_TK_HOSHIKI_KEI_KK_SELECT_038(new Object[] {tkHoshikiKeiNo});
					JBSbatCommonDBInterface tkHoshikiKeiMap = db_KK_T_TK_HOSHIKI_KEI.selectNext();
					if (tkHoshikiKeiMap == null)
					{
						continue;
					}
					
					// 加入契約支払方式コードが「003：全戸一括」の時
					if (JKKStrConst.KANYUKEI_PAY_HOSHIKI_ZENKO.equals(
							tkHoshikiKeiMap.getString(JBSbatKK_T_TK_HOSHIKI_KEI.KANYU_KEI_PAY_HOSHIKI_CD)))
					{
						if ("0".equals(bkAmnt))
						{
							continue;
						}
						
						// 提供方式契約.加入契約支払方式コードが「003：全戸一括」の場合、「全戸」を設定する
						nm = NM_ZENKO;
					}
					else
					{
						// 「個別」を設定する
						nm = NM_KOBETSU;
					}
				}
				
// ANK-4554-00-00 ADD START
				// ｅｏテレビ(再送信)の場合、以下の出力除外チェックを行う
				if (JKKStrConst.CD00133_13.equals(prcGrpCd))
				{
					//料金コースが再送信かつ無料のプランの場合、出力対象外とする
					if (JKKStrConst.CD00134_A23.equals(pcrsCd) && JKKStrConst.CD00565_PA2304.equals(pplanCd))
					{
						continue;
					}
				}
// ANK-4554-00-00 ADD END
				ArrayList<String> pcrsCdList = new ArrayList<String>();
				pcrsCdList.add(JKKStrConst.CD00134_A49);
				pcrsCdList.add(JKKStrConst.CD00134_A54);
				pcrsCdList.add(JKKStrConst.CD00134_A55);
				pcrsCdList.add(JKKStrConst.CD00134_PRV100M_PREMIUM_ETHER);
				pcrsCdList.add(JKKStrConst.CD00134_GLB100M_PREMIUM_ETHER);
				
// ANK-4554-00-00 MOD START
				// ｅｏ光ネットホームタイプ、ｅｏ光ネットメゾンタイプ、ｅｏ光ネットマンションタイプ（イーサネット）、ｅｏテレビ、ｅｏテレビ（再送信）の場合
//				if (JKKStrConst.CD00133_02.equals(prcGrpCd) || JKKStrConst.CD00133_03.equals(prcGrpCd) || pcrsCdList.contains(pcrsCd))
				if (JKKStrConst.CD00133_02.equals(prcGrpCd) || JKKStrConst.CD00133_03.equals(prcGrpCd) || pcrsCdList.contains(pcrsCd)
						|| JKKStrConst.CD00133_11.equals(prcGrpCd) || JKKStrConst.CD00133_13.equals(prcGrpCd))
// ANK-4554-00-00 MOD END
				{
					// 契約者住所と回線場所住所を取得する
					executeKK_T_SVC_KEI_KK_SELECT_326(new Object[] {
							svcKeiNo, geneAddDtm, super.opeDate, super.opeDate, super.opeDate});
					JBSbatCommonDBInterface svcKeiMap = db_KK_T_SVC_KEI.selectNext();
					if (svcKeiMap == null)
					{
						continue;
					}
					
					// 契約者住所と回線場所住所が一致しない場合、出力対象外とする
					if (!checkCust(svcKeiMap))
					{
						continue;
					}
				}
				// ｅｏ光ネットマンションタイプ（イーサネット以外）の場合
				else if (JKKStrConst.CD00133_04.equals(prcGrpCd))
				{
					// 機器送付先住所と回線場所住所を取得する
					executeKK_T_SVC_KEI_KK_SELECT_327(new Object[] {
							svcKeiNo, geneAddDtm, super.opeDate, super.opeDate, super.opeDate});
					JBSbatCommonDBInterface svcKeiMap = db_KK_T_SVC_KEI.selectNext();
					if (svcKeiMap == null)
					{
						continue;
					}
					
					// 契約者住所と回線場所住所が一致しない場合、出力対象外とする
					if (!checkKktkSvcKei(svcKeiMap))
					{
						continue;
					}
				}
				
// ANK-3830-00-00 ADD START
				// お客様（カレント）より契約者タイプコードを取得する
				executeCK_T_CUST_KK_SELECT_078(new Object[] {sysid, super.opeDate});
				JBSbatCommonDBInterface custMap = db_CK_T_CUST.selectNext();
				if (custMap == null)
				{
					continue;
				}
				keishaTypeCd = custMap.getString(JBSbatCK_T_CUST.KEISHA_TYPE_CD);
				// 契約者タイプコード≠「1:個人」 AND ≠「2:法人」の場合、出力対象外とする
				if (!JBSbatKKConst.KEISHA_TYPE_CD_KOJIN.equals(keishaTypeCd) && !JBSbatKKConst.KEISHA_TYPE_CD_HOJIN.equals(keishaTypeCd))
				{
					continue;
				}
// ANK-3830-00-00 ADD END
				
				// 料金グループ名を取得する
				executeKK_M_PRC_GRP_KK_SELECT_001(new Object[] {prcGrpCd});
				JBSbatCommonDBInterface prcGrpMap = db_KK_M_PRC_GRP.selectNext();
				if (prcGrpMap == null)
				{
					continue;
				}
				
				// 料金コース名を取得する
				executeKK_M_PCRS_KK_SELECT_001(new Object[] {pcrsCd});
				JBSbatCommonDBInterface pcrsMap = db_KK_M_PCRS.selectNext();
				if (pcrsMap == null)
				{
					continue;
				}
				
				// 料金プラン名を取得する
				executeKK_M_PPLAN_KK_SELECT_001(new Object[] {pcrsCd, pplanCd});
				JBSbatCommonDBInterface pplanMap = db_KK_M_PPLAN.selectNext();
				if (pplanMap == null)
				{
					continue;
				}
				
				// 支払変更慫慂対象者リストを出力する
				String[] strList = new String[9];
				strList[0] = svcStaYmd;			// サービス開始日
				strList[1] = sysid;				// ＳＹＳＩＤ
				strList[2] = seikyKeiNo;		// 請求先番号
				strList[3] = svcKeiNo;			// お客さまＩＤ
				strList[4] = prcGrpMap.getString(JBSbatKK_M_PRC_GRP.PRC_GRP_NM);	// 料金グループ名
				strList[5] = pcrsMap.getString(JBSbatKK_M_PCRS.PCRS_NM);			// 料金コース名
				strList[6] = pplanMap.getString(JBSbatKK_M_PPLAN.PPLAN_NM);			// 料金プラン名
				strList[7] = nm;				// 名称
				strList[8] = bkAmnt;			// 請求金額
				
				// 支払変更慫慂対象者リストを出力する
				createKkifm699(strList);
				
				// データ件数計算
				outCount++;
				
				// 出力済フラグ設定
				outputFlg = true;
			}
		}
		catch (IOException e)
		{
			// 支払変更慫慂対象者リスト抽出ファイルがない場合０件と同様とする
			super.logPrint.printDebugLog("支払変更慫慂対象者リスト抽出ファイルなし");
		}
		finally
		{
			if (null != br)
			{
				br.close();
			}
		}
		
		// ファイルを閉じる
		JCCBatCommon.closeBusinessFileUtil(kkifm699FileObj);
		
		// 電子ファイル管理登録処理
		JBSbatCommonItem arg0 = super.commonItem;					// 業務共通電文
		String arg1 = FILE_CD;										// ファイルコード
		String arg2 = kkifm699FilePath;								// ファイルパス
		String arg3 = JBSbatDateUtil.adjustMonth(super.opeDate, 6);	// ファイル削除年月日（運用日付 + 6ヶ月）
		String[] rc = JCCBatCommon.createDenshiFile(arg0, arg1, arg2, arg3);
		
		// ログ出力
		super.logPrint.printDebugLog("電子ファイル管理番号(" + rc[0] +  ")、世代登録年月日時分秒(" + rc[1] + ")");
		
		// ダウンロードファイル管理登録処理
		executeZM_T_DL_FILE_KANRI_KK_INSERT_001(getDlFileInsertParam(rc, arg3));
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SVC_KEI.close();
		db_CH_T_SEIKY_UCWK.close();
		db_KK_T_TK_HOSHIKI_KEI.close();
		db_KK_M_PRC_GRP.close();
		db_KK_M_PCRS.close();
		db_KK_M_PPLAN.close();
// ANK-3830-00-00 ADD START
		db_CK_T_CUST.close();
// ANK-3830-00-00 ADD END
		db_ZM_T_DL_FILE_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_326)で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_KK_SELECT_326(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_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_326);
	}

	/**
	 * SQLKEY(KK_SELECT_327)で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_KK_SELECT_327(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_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_327);
	}

	/**
	 * SQLKEY(KK_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_T_SEIKY_UCWK_KK_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CH_T_SEIKY_UCWK.selectBySqlDefine(paramList, CH_T_SEIKY_UCWK_KK_SELECT_003);
	}

	/**
	 * SQLKEY(KK_SELECT_038)で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_TK_HOSHIKI_KEI_KK_SELECT_038(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_TK_HOSHIKI_KEI.selectBySqlDefine(paramList, KK_T_TK_HOSHIKI_KEI_KK_SELECT_038);
	}

	/**
	 * SQLKEY(KK_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	料金グループコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_PRC_GRP_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_M_PRC_GRP.selectBySqlDefine(paramList, KK_M_PRC_GRP_KK_SELECT_001);
	}

	/**
	 * SQLKEY(KK_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	料金コースコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_PCRS_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_M_PCRS.selectBySqlDefine(paramList, KK_M_PCRS_KK_SELECT_001);
	}

	/**
	 * SQLKEY(KK_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	料金コースコード
	 *		 	料金プランコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_PPLAN_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_M_PPLAN.selectBySqlDefine(paramList, KK_M_PPLAN_KK_SELECT_001);
	}
// ANK-3830-00-00 ADD START
	/**
	 * SQLKEY(KK_SELECT_078)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SYSID
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_CUST_KK_SELECT_078(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CK_T_CUST.selectBySqlDefine(paramList, CK_T_CUST_KK_SELECT_078);
	}
// ANK-3830-00-00 ADD END
	/**
	 * SQLKEY(KK_INSERT_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 executeZM_T_DL_FILE_KANRI_KK_INSERT_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());

		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.executeBySqlDefine(paramList, ZM_T_DL_FILE_KANRI_KK_INSERT_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 支払変更慫慂対象者リストのヘッダ作成を行う。
	 * @return JBSbatServiceInterfaceMap
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void createKkifm699Header() throws Exception
	{
		super.logPrint.printDebugLog("createKkifm699Header_START");
		
		ArrayList<String> outputList = new ArrayList<String>();
		
		// 項目を設定
		outputList.add(HEADER_SVC_STA_YMD);		// サービス開始日
		outputList.add(HEADER_SYSID);			// SYSID
		outputList.add(HEADER_SEIKY_KEI_NO);	// 請求先番号
		outputList.add(HEADER_SVC_KEI_NO);		// お客さまID
		outputList.add(HEADER_PRC_GRP_NM);		// 料金グループ名
		outputList.add(HEADER_PCRS_NM);			// 料金コース名
		outputList.add(HEADER_PPLAN_NM);		// 料金プラン名
		outputList.add(HEADER_NM);				// 名称
		outputList.add(HEADER_SEIKY_AMNT);		// 請求金額
		
		JKKBatCommon.printDoubleQuoteBusinessFileUtil(kkifm699FileObj, outputList);
		
		super.logPrint.printDebugLog("createKkifm699Header_END");
	}
	
	/**
	 * 支払変更慫慂対象者リストの作成を行う。
	 * @param strList 出力対象データ
	 * @return JBSbatServiceInterfaceMap
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void createKkifm699(String[] strList) throws Exception
	{
		super.logPrint.printDebugLog("createKkifm699_START");
		
		ArrayList<String> outputList = new ArrayList<String>();
		
		// 項目を設定
		outputList.add(strList[0]);		// サービス開始日
		outputList.add(strList[1]);		// ＳＹＳＩＤ
		outputList.add(strList[2]);		// 請求先番号
		outputList.add(strList[3]);		// お客さまＩＤ
		outputList.add(strList[4]);		// 料金グループ名
		outputList.add(strList[5]);		// 料金コース名
		outputList.add(strList[6]);		// 料金プラン名
		outputList.add(strList[7]);		// 名称
		outputList.add(strList[8]);		// 請求金額
		
		JKKBatCommon.printDoubleQuoteBusinessFileUtil(kkifm699FileObj, outputList);
		
		super.logPrint.printDebugLog("createKkifm699_END");
	}
	
	/**
	 * 契約者住所と回線場所住所一致チェックを行う。
	 * @param svcKeiMap チェックデータ
	 * @return 判定結果（true:出力対象、false:出力対象外）
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private boolean checkCust(JBSbatCommonDBInterface svcKeiMap) throws Exception
	{
		super.logPrint.printDebugLog("checkCust_START");
		
		// お客様.契約者住所コードとサービス契約回線内訳.回線場所住所コード
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatCK_T_CUST.KEISHA_AD_CD))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_AD_CD))))
		{
			return false;
		}
		
		// お客様.契約者郵便番号とサービス契約回線内訳.回線場所郵便番号
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatCK_T_CUST.KEISHA_PCD))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_PCD))))
		{
			return false;
		}
		
		// お客様.契約者都道府県名とサービス契約回線内訳.回線場所都道府県名
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatCK_T_CUST.KEISHA_STATE_NM))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_STATE_NM))))
		{
			return false;
		}
		
		// お客様.契約者市区町村名とサービス契約回線内訳.回線場所市区町村名
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatCK_T_CUST.KEISHA_CITY_NM))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_CITY_NM))))
		{
			return false;
		}
		
		// お客様.契約者大字通称名とサービス契約回線内訳.回線場所大字通称名
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatCK_T_CUST.KEISHA_OAZTSU_NM))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_OAZTSU_NM))))
		{
			return false;
		}
		
		// お客様.契約者字丁目名とサービス契約回線内訳.回線場所字丁目名
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatCK_T_CUST.KEISHA_AZCHO_NM))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_AZCHO_NM))))
		{
			return false;
		}
		
		// お客様.契約者番地号とサービス契約回線内訳.回線場所番地号
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatCK_T_CUST.KEISHA_BNCHIGO))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_BNCHIGO))))
		{
			return false;
		}
		
		// お客様.契約者住所補記・建物名とサービス契約回線内訳.回線場所住所補記・建物名
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatCK_T_CUST.KEISHA_ADRTTM))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRTTM))))
		{
			return false;
		}
		
		// お客様.契約者住所補記・部屋番号とサービス契約回線内訳.回線場所住所補記・部屋番号
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatCK_T_CUST.KEISHA_ADRRM))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRRM))))
		{
			return false;
		}
		
		super.logPrint.printDebugLog("checkCust_END");
		
		return true;
	}
	
	/**
	 * 機器送付先住所と回線場所住所一致チェックを行う。
	 * @param svcKeiMap チェックデータ
	 * @return 判定結果（true:出力対象、false:出力対象外）
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private boolean checkKktkSvcKei(JBSbatCommonDBInterface svcKeiMap) throws Exception
	{
		super.logPrint.printDebugLog("checkKktkSvcKei_START");
		
		// 機器提供サービス契約.機器送付先住所コードとサービス契約回線内訳.回線場所住所コード
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_AD_CD))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_AD_CD))))
		{
			return false;
		}
		
		// 機器提供サービス契約.機器送付先郵便番号とサービス契約回線内訳.回線場所郵便番号
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_PCD))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_PCD))))
		{
			return false;
		}
		
		// 機器提供サービス契約.機器送付先都道府県名とサービス契約回線内訳.回線場所都道府県名
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_STATE_NM))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_STATE_NM))))
		{
			return false;
		}
		
		// 機器提供サービス契約.機器送付先市区町村名とサービス契約回線内訳.回線場所市区町村名
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_CITY_NM))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_CITY_NM))))
		{
			return false;
		}
		
		// 機器提供サービス契約.機器送付先大字通称名とサービス契約回線内訳.回線場所大字通称名
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_OAZTSU_NM))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_OAZTSU_NM))))
		{
			return false;
		}
		
		// 機器提供サービス契約.機器送付先字丁目名とサービス契約回線内訳.回線場所字丁目名
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_AZCHO_NM))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_AZCHO_NM))))
		{
			return false;
		}
		
		// 機器提供サービス契約.機器送付先番地号とサービス契約回線内訳.回線場所番地号
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_BNCHIGO))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_BNCHIGO))))
		{
			return false;
		}
		
		// 機器提供サービス契約.機器送付先住所補記・建物名とサービス契約回線内訳.回線場所住所補記・建物名
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_ADRTTM))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRTTM))))
		{
			return false;
		}
		
		// 機器提供サービス契約.機器送付先住所補記・部屋番号とサービス契約回線内訳.回線場所住所補記・部屋番号
		if (!JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SOHUS_ADRRM))
				.equals(JBSbatStringUtil.Rtrim(svcKeiMap.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRRM))))
		{
			return false;
		}
		
		super.logPrint.printDebugLog("checkKktkSvcKei_END");
		
		return true;
	}
	
	/**
	 * ZM_T_DL_FILE_KANRI-KK_INSERT_001を実行する際に必要なパラメータを返す。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.パラメータ設定処理。
	 * </pre>
	 * <p>
	 * @param rc 共通部品の電子ファイル管理登録から返却された文字列
	 * @param arg3 共通部品の電子ファイル管理登録に渡したファイル削除年月日
	 * @return setParam ZM_T_DL_FILE_KANRI-KK_INSERT_001を実行する際に必要なパラメータ
	 * @throws Exception 
	 */
	private Object[] getDlFileInsertParam(String[] rc, String arg3) throws Exception
	{
		// システム日時
		String fileTimeStamp = JCCBatCommon.getSysDateTime();
		
		// ファイル名
		String fileName = FILE_NM + JKKStrConst.FILE_NM_TIMESTAMP.replaceAll(
				JKKStrConst.FILE_TIMESTAMP_FORMAT, fileTimeStamp);
		
		Object[] setParam = {
				TRN_KANRI_NO,						// 処理管理番号
				fileName,							// ファイル名
				outCount,							// データ件数
				rc[1],								// ファイル登録年月日時分秒
				arg3,								// ファイル削除年月日
				rc[0],								// 電子ファイル管理番号
				rc[1],								// 世代登録年月日時分秒
		};
		return setParam;
	}
}
