/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKDelInfCreate
*	ソースファイル名	：JBSbatKKDelInfCreate.java
*	作成者				：富士通　
*	作成日				：2013年01月14日
*＜機能概要＞
*　削除対象データ作成処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/01/14   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatConst;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.util.JBSbatCheckUtil;
import eo.business.common.JBSbatMatchServiceInterface;
import eo.business.util.file.JBSbatKKIFM288;
import eo.business.util.file.JBSbatKKIFM289;
import eo.business.util.file.JBSbatKKIFM290;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKDelInfCreate extends JBSbatBusinessService implements JBSbatMatchServiceInterface
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** キーマッチ処理フラグ*/
	private boolean matchProcFlg;

	/** マスタファイル処理フラグ*/
	private boolean mastProcFlg;

	/** トランファイル処理フラグ*/
	private boolean tranProcFlg;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** フリー項目区切り文字(セミコロン) */
	private static final String DELIM  = JKKBatConst.S_PARAM_DELIM;

	/** サービス契約配列要素番号 */
	/** サービス契約番号 */
	private static final int SVC_SVC_KEI_NO = 0;
	/** 請求契約番号 */
	private static final int SVC_SYSID = 1;
	/** サービスコード */
	private static final int SVC_SVC_CD = 2;
	/** 料金グループコード */
	private static final int SVC_PRC_GRP_CD = 3;
	/** 料金コースコード */
	private static final int SVC_PCRS_CD = 4;
	/** サービス解約起算年月日 */
	private static final int SVC_SVC_DSL_KISAN_YMD = 5;
	/** サービスキャンセル年月日 */
	private static final int SVC_SVC_CANCEL_YMD = 6;
	/** サービス解約年月日 */
	private static final int SVC_SVC_DSL_YMD = 7;
	/** サービス終了年月日 */
	private static final int SVC_SVC_ENDYMD = 8;
	/** 更新年月日時分秒 */
	private static final int SVC_UPD_DTM = 9;
	/** 予約適用年月日 */
	private static final int SVC_RSV_APLY_YMD = 10;
	/** 個人情報削除理由コード */
	private static final int SVC_KOJIN_INFO_DEL_RSN_CD = 11;
	/** カレントデータ識別コード */
	private static final int SVC_CRNT_DATA_SKBT_CD = 12;
	/** ＩＳＰ認証ＩＤ */
	private static final int SVC_ISP_NINSHO_ID = 13;
	/** 申込書番号 */
	private static final int SVC_MSKMSHO_NO = 14;
	
	/** 課金先配列要素番号 */
	/** サービス契約番号 */
	private static final int KKN_SVC_KEI_NO = 0;
	/** 請求契約番号 */
	private static final int KKN_SEIKY_KEI_NO = 1;
	/** 課金先適用開始年月日 */
	private static final int KKN_KAKINS_TSTAYMD = 2;
	/** 課金先適用終了年月日 */
	private static final int KKN_KAKINS_TENDYMD = 3;
	
	/** 個人情報削除判定ワーク配列要素番号 */
	/** サービス契約番号 */
	private static final int DEL_SVC_KEI_NO = 0;
	/** 請求契約番号 */
	private static final int DEL_SEIKY_KEI_NO = 1;
	/** ＳＹＳＩＤ */
	private static final int DEL_SYSID = 2;
	/** サービスコード */
	private static final int DEL_SVC_CD = 3;
	/** 料金グループコード */
	private static final int DEL_PRC_GRP_CD = 4;
	/** 料金コースコード */
	private static final int DEL_PCRS_CD = 5;
	/** 新規申込時申込書番号 */
	private static final int DEL_NEW_MSKM_JI_MSKMSHO_NO = 6;
	/** ＩＳＰ認証ＩＤ */
	private static final int DEL_ISP_NINSHO_ID = 7;
	/** サービス解約起算年月日 */
	private static final int DEL_SVC_DSL_KISAN_YMD = 8;
	/** サービスキャンセル年月日 */
	private static final int DEL_SVC_CANCEL_YMD = 9;
	/** サービス解約年月日 */
	private static final int DEL_SVC_DSL_YMD = 10;
	/** サービス終了年月日 */
	private static final int DEL_SVC_ENDYMD = 11;
	/** 削除処理対象抽出年月日 */
	private static final int DEL_DEL_TRN_TG_CHSHT_YMD = 12;
	/** 個人情報削除理由コード */
	private static final int DEL_KOJIN_INFO_DEL_RSN_CD = 13;
	/** 削除判定コード */
	private static final int DEL_DEL_JDG_CD = 14;
	/** 契約最終更新年月日時分秒 */
	private static final int DEL_KEI_LAST_UPD_DTM = 15;
	/** カレントデータ識別コード */
	private static final int DEL_CRNT_DATA_SKBT_CD = 16;

	/** カレントデータ識別コード*/
	/** 1：カレントデータ*/
	private static final String CRNT_DATA = "1";
	/** 2：履歴データ*/
	private static final String RIREKI_DATA = "2";
	
	/** ALL0 */
	private static final String ALL0 = "0000000000";
	
	/** 削除判定コード 削除可 */
	private static final String DEL_ABLE = "00";
	
	/** サービス契約情報読み込み回数 */
	private int intSvcCnt = 1; 
	
	/** サービス契約情報読み込み終了回数 */
	private int intSvcCntEnd = 0; 
	
	/** 課金先情報読み込み回数 */
	private int intKknCnt = 1; 
	
	/** 課金先情報読み込み終了回数 */
	private int intKknCntEnd = 0; 
	
	/** 処理中のサービス契約番号 */
	private String CRNT_SVC_KEI_NO = "XXXXXXXXXXXXXXXXXXXX"; 

	private ArrayList<String[]> listSvc = new ArrayList<String[]>();
	private ArrayList<String[]> listKkn = new ArrayList<String[]>();

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		//フリー項目を取得する。
		String[] strWk = super.freeItem.split(DELIM);

		//サービス契約ファイル行数取得
		intSvcCntEnd = Integer.parseInt(strWk[0]);
		//課金先ファイル行数取得
		intKknCntEnd = Integer.parseInt(strWk[1]);
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param mastMap　入力電文
	 * @param tranMap　入力電文
	 * @param outputInItem  入力情報
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");
		

		String strSvcSvcKeiNo = "";
		String strKknSvcKeiNo = "";

		if(mastMap != null)
		{
			strSvcSvcKeiNo = mastMap.getString(JBSbatKKIFM288.SVC_KEI_NO);
		}
		if(tranMap != null)
		{
			strKknSvcKeiNo = tranMap.getString(JBSbatKKIFM289.SVC_KEI_NO);
		}
		
		if(!strSvcSvcKeiNo.equals(CRNT_SVC_KEI_NO) 
				&& !strKknSvcKeiNo.equals(CRNT_SVC_KEI_NO))
		{
			//同一サービス契約番号の情報取得終了
			//削除データ作成
			ArrayList<String[]> lstInsData = getTorokuDelData();
			//削除データファイル出力
			SvcToDelInf(outputInItem,lstInsData);
			//リスト初期化
			listSvc = new ArrayList<String[]>();
			listKkn = new ArrayList<String[]>();
			CRNT_SVC_KEI_NO = strSvcSvcKeiNo;
			if(mastMap != null)
			{
				//サービス契約情報取得
				listSvc.add(getSvcKeiData(mastMap));
				//次のデータを読み込む
				this.setMastProcFlg(true);
			}
			
			if(tranMap != null)
			{
				if(CRNT_SVC_KEI_NO.equals(tranMap.getString(JBSbatKKIFM289.SVC_KEI_NO)))
				{
					//課金先情報取得
					listKkn.add(getKakinData(tranMap));
					//次のデータを読み込む
					this.setTranProcFlg(true);
				}
				else
				{
					this.setTranProcFlg(false);
				}
			}
		}
		else
		{
			//同一サービス契約番号の情報取得
			this.setMastProcFlg(false);
			this.setTranProcFlg(false);
			if(strSvcSvcKeiNo.equals(CRNT_SVC_KEI_NO))
			{
				//サービス契約情報取得
				listSvc.add(getSvcKeiData(mastMap));
				//次のデータを読み込む
				this.setMastProcFlg(true);
			}
			
			if(strKknSvcKeiNo.equals(CRNT_SVC_KEI_NO))
			{
				//課金先情報取得
				listKkn.add(getKakinData(tranMap));
				//次のデータを読み込む
				this.setTranProcFlg(true);
			}
		}

		if(isMastProcFlg())
		{
			intSvcCnt++;
		}
		if(isTranProcFlg())
		{
			intKknCnt++;
		}
		
		if(intSvcCnt > intSvcCntEnd && intKknCnt > intKknCntEnd)
		{
			super.logPrint.printDebugLog("最終サービス契約番号");
			//同一サービス契約番号の情報取得終了
			//削除データ作成
			ArrayList<String[]> lstInsData = getTorokuDelData();
			//削除データファイル出力
			SvcToDelInf(outputInItem,lstInsData);
			//次のデータを読み込む
			this.setMastProcFlg(true);
			//次のデータを読み込む
			this.setTranProcFlg(true);
		}
		
		super.logPrint.printDebugLog("execute_END");
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * @return mastProcFlg を戻します。
	 */
	public boolean isMastProcFlg()
	{
		return mastProcFlg;
	}

	/**
	 * @return matchProcFlg を戻します。
	 */
	public boolean isMatchProcFlg()
	{
		return matchProcFlg;
	}

	/**
	 * @return tranProcFlg を戻します。
	 */
	public boolean isTranProcFlg()
	{
		return tranProcFlg;
	}

	/**
	 * @param mast_ProcFlg 設定する mastProcFlg。
	 */
	public void setMastProcFlg(boolean mast_ProcFlg)
	{
		this.mastProcFlg = mast_ProcFlg;
	}

	/**
	 * @param match_ProcFlg 設定する matchProcFlg。
	 */
	public void setMatchProcFlg(boolean match_ProcFlg)
	{
		this.matchProcFlg = match_ProcFlg;
	}

	/**
	 * @param tran_ProcFlg 設定する tranProcFlg。
	 */
	public void setTranProcFlg(boolean tran_ProcFlg)
	{
		this.tranProcFlg = tran_ProcFlg;
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * サービス契約データ取得処理
	 * <p>
	 * </p>
	 * @param mastMap サービス契約より得た情報
	 * @return resultData サービス契約データ
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String[] getSvcKeiData(JBSbatServiceInterfaceMap mastMap) throws Exception
	{
		String[] resultData = new String[15];
		
		super.logPrint.printDebugLog("getSvcKeiData:サービス契約番号=" + mastMap.getString(JBSbatKKIFM288.SVC_KEI_NO));
		
		// サービス契約番号
		resultData[SVC_SVC_KEI_NO] = mastMap.getString(JBSbatKKIFM288.SVC_KEI_NO).replaceAll("\"", "");
		// ＳＹＳＩＤ
		resultData[SVC_SYSID] = mastMap.getString(JBSbatKKIFM288.SYSID).replaceAll("\"", "");
		// サービスコード
		resultData[SVC_SVC_CD] = mastMap.getString(JBSbatKKIFM288.SVC_CD).replaceAll("\"", "");
		// 料金グループコード
		resultData[SVC_PRC_GRP_CD] = mastMap.getString(JBSbatKKIFM288.PRC_GRP_CD).replaceAll("\"", "");
		// 料金コースコード
		resultData[SVC_PCRS_CD] = mastMap.getString(JBSbatKKIFM288.PCRS_CD).replaceAll("\"", "");
		// サービス解約起算年月日
		resultData[SVC_SVC_DSL_KISAN_YMD] = mastMap.getString(JBSbatKKIFM288.SVC_DSL_KISAN_YMD).replaceAll("\"", "");
		// サービスキャンセル年月日
		resultData[SVC_SVC_CANCEL_YMD] = mastMap.getString(JBSbatKKIFM288.SVC_CANCEL_YMD).replaceAll("\"", "");
		// サービス解約年月日
		resultData[SVC_SVC_DSL_YMD] = mastMap.getString(JBSbatKKIFM288.SVC_DSL_YMD).replaceAll("\"", "");
		// サービス終了年月日
		resultData[SVC_SVC_ENDYMD] = mastMap.getString(JBSbatKKIFM288.SVC_ENDYMD).replaceAll("\"", "");
		// 更新年月日時分秒
		resultData[SVC_UPD_DTM] = mastMap.getString(JBSbatKKIFM288.UPD_DTM).replaceAll("\"", "");
		// 予約適用年月日
		resultData[SVC_RSV_APLY_YMD] = mastMap.getString(JBSbatKKIFM288.RSV_APLY_YMD).replaceAll("\"", "");
		// 個人情報削除理由コード
		resultData[SVC_KOJIN_INFO_DEL_RSN_CD] = mastMap.getString(JBSbatKKIFM288.KOJIN_INFO_DEL_RSN_CD).replaceAll("\"", "");
		// カレントデータ識別コード
		resultData[SVC_CRNT_DATA_SKBT_CD] = mastMap.getString(JBSbatKKIFM288.CRNT_DATA_SKBT_CD).replaceAll("\"", "");
		// ＩＳＰ認証ＩＤ
		resultData[SVC_ISP_NINSHO_ID] = mastMap.getString(JBSbatKKIFM288.ISP_NINSHO_ID).replaceAll("\"", "");
		// 申込書番号
		resultData[SVC_MSKMSHO_NO] = mastMap.getString(JBSbatKKIFM288.MSKMSHO_NO).replaceAll("\"", "");
		
		return resultData;
	}

	/**
	 * 課金先データを取得する
	 * <p>
	 * </p>
	 * @param tranMap サービス契約番号に紐づく契約番号
	 * @return rstKakinData 課金先情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String[] getKakinData(JBSbatServiceInterfaceMap tranMap) throws Exception
	{
		String[] rstKakinData = new String[4];

		// サービス契約番号
		rstKakinData[KKN_SVC_KEI_NO] = tranMap.getString(JBSbatKKIFM289.SVC_KEI_NO).replaceAll("\"", "");
		// 請求契約番号
		rstKakinData[KKN_SEIKY_KEI_NO] = tranMap.getString(JBSbatKKIFM289.SEIKY_KEI_NO).replaceAll("\"", "");
		// 課金先適用開始年月日
		rstKakinData[KKN_KAKINS_TSTAYMD] = tranMap.getString(JBSbatKKIFM289.KAKINS_TSTAYMD).replaceAll("\"", "");
		// 課金先適用終了年月日
		rstKakinData[KKN_KAKINS_TENDYMD] = tranMap.getString(JBSbatKKIFM289.KAKINS_TENDYMD).replaceAll("\"", "");
		
		return rstKakinData;
	}
	
	/**
	 * サービス契約より削除対象データの情報(履歴)データを取得する<br>
	 * カレントデータと併せて、個人情報削除判定ワークに登録するためのデータに編集する<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * 1.サービス契約情報を基に、カレントのSYSID以外の履歴情報を取得する
	 * 
	 * 2.サービス契約情報を基に、課金先から情報を取得する
	 * 
	 * 3.カレントデータ、および、１．２．の情報を基に登録用データに編集する
	 * </p>
	 * @param lstDelData サービス契約情報(カレント)
	 * @param investDate バッチ運用日
	 * @return lstInsWk 登録用データ 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private ArrayList<String[]> getTorokuDelData() throws Exception
	{
		
		ArrayList<String[]> lstInsWk = new ArrayList<String[]>();
		
		JBSbatCommonDBInterface dbRekimap = new JBSbatCommonDBInterface();
		JBSbatCommonDBInterface dbKakinmap = new JBSbatCommonDBInterface();
		
		// サービス契約番号
		String svcKeiNo = null;
		// SYSID
		String sysId = null;
		// 個人情報削除理由コード
		String kjnIfDelRsnCd = null;
		// 請求契約番号
		String seikyKeiNo = null;
		// 予約適用年月日
		String rsvAplyYmd = null;
		// 比較用予約適用年月日
		String preAplyYmd = null;
		// 課金先適用開始日
		String kakinTstaYmd = null;
		// 課金先適用終了日
		String kakinTendYmd = null;
		
		String[] rekiParam = new String[3];
		String[] kakinParam = new String[1];
		String[] resultData = new String[16];
		String[] rstKakinData = new String[3];
		
		int jdgData = 0;
		
		// データ編集処理
		for (int i = 0; i < listSvc.size(); i++) 
		{
			String[] strDelInfWk = SvcToDelInf(listSvc.get(i));
			
			// 課金先データが存在しない場合、請求契約番号にALL0設定
			if (listKkn.size() == 0)
			{
				
				seikyKeiNo = ALL0;
				strDelInfWk[DEL_SEIKY_KEI_NO] = seikyKeiNo;
				super.logPrint.printDebugLog("getTorokuDelData:請求契約番号=" + seikyKeiNo);
				
				boolean addFlg = true;
				for(int j = 0 ; j < lstInsWk.size() ; j++)
				{
					if(lstInsWk.get(j)[DEL_SVC_KEI_NO].equals(strDelInfWk[DEL_SVC_KEI_NO]))
					{
						if(lstInsWk.get(j)[DEL_SYSID].equals(strDelInfWk[DEL_SYSID]))
						{
							if(lstInsWk.get(j)[DEL_SEIKY_KEI_NO].equals(strDelInfWk[DEL_SEIKY_KEI_NO])){
								addFlg = false;
								break;
							}
						}
					}
				}
				if(addFlg)
				{
					lstInsWk.add(strDelInfWk);
				}
			}
			else
			{
				
				// 比較用に前データの予約適用年月日前日を取得
				if (i == 0)
				{
					preAplyYmd = "20991231";
					
				}
				else
				{
					
					preAplyYmd = listSvc.get(i - 1)[SVC_RSV_APLY_YMD];
				}
				// 予約適用年月日(終了)
				preAplyYmd = getcompYmd(preAplyYmd);
				
				// 予約適用年月日の取得
				rsvAplyYmd = listSvc.get(i)[SVC_RSV_APLY_YMD];
				
				// 課金先データの取得
				for (int j = 0; j < listKkn.size(); j++)
				{

					// 請求契約番号の取得
					seikyKeiNo = listKkn.get(j)[KKN_SEIKY_KEI_NO];
					// 課金先適用開始日
					kakinTstaYmd = listKkn.get(j)[KKN_KAKINS_TSTAYMD];
					// 課金先適用終了日
					kakinTendYmd = listKkn.get(j)[KKN_KAKINS_TENDYMD];
					//現処理サービス契約番号のデータをコピー
					String[] aryWk = strDelInfWk.clone();
					if(i == 0 && j == 0)
					{
						//カレントデータ
						aryWk[DEL_CRNT_DATA_SKBT_CD] = CRNT_DATA;
					}
					else
					{
						//履歴データ
						aryWk[DEL_CRNT_DATA_SKBT_CD] = RIREKI_DATA;
					}
					
					// 対象データ編集
					jdgData = getJdgData(rsvAplyYmd, preAplyYmd, kakinTstaYmd, kakinTendYmd);
					
					if (jdgData == 1 || jdgData == 2 || jdgData == 3)
					{
						// 現処理サービス契約データに請求契約番号を設定する
						aryWk[DEL_SEIKY_KEI_NO] = seikyKeiNo;
						super.logPrint.printDebugLog("getTorokuDelData:請求契約番号=" + seikyKeiNo);
						
						boolean addFlg = true;
						for(int k = 0 ; k < lstInsWk.size() ; k++)
						{
							if(lstInsWk.get(k)[DEL_SVC_KEI_NO].equals(aryWk[DEL_SVC_KEI_NO]))
							{
								if(lstInsWk.get(k)[DEL_SYSID].equals(aryWk[DEL_SYSID])
										&& lstInsWk.get(k)[DEL_SEIKY_KEI_NO].equals(aryWk[DEL_SEIKY_KEI_NO]))
								{
									addFlg = false;
									break;
								}
							}
						}
						if(addFlg)
						{
							lstInsWk.add(aryWk);
						}
					}
					else
					{
						// 処理対象外
					}
					
				}
			}
		}
	
		return lstInsWk;
	}

	/**
	 * サービス契約情報から個人情報削除判定ワーク情報を取得する
	 * <p>
	 * </p>
	 * @param strSvc サービス契約情報
	 * @return strDelInf 個人情報削除判定ワーク情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String[] SvcToDelInf(String[] strSvc) throws Exception
	{
		String[] strDelInf = new String[17];

		// サービス契約番号
		strDelInf[DEL_SVC_KEI_NO] = strSvc[SVC_SVC_KEI_NO];
		// SYSID
		strDelInf[DEL_SYSID] = strSvc[SVC_SYSID];
		// サービスコード
		strDelInf[DEL_SVC_CD] = strSvc[SVC_SVC_CD];
		// 料金グループコード
		strDelInf[DEL_PRC_GRP_CD] = strSvc[SVC_PRC_GRP_CD];
		// 料金コースコード
		strDelInf[DEL_PCRS_CD] = strSvc[SVC_PCRS_CD];
		// 新規申込時申込書番号
		strDelInf[DEL_NEW_MSKM_JI_MSKMSHO_NO] = strSvc[SVC_MSKMSHO_NO];
		// ＩＳＰ認証ＩＤ
		strDelInf[DEL_ISP_NINSHO_ID] = strSvc[SVC_ISP_NINSHO_ID];
		// サービス解約起算年月日
		strDelInf[DEL_SVC_DSL_KISAN_YMD] = strSvc[SVC_SVC_DSL_KISAN_YMD];
		// サービスキャンセル年月日
		strDelInf[DEL_SVC_CANCEL_YMD] = strSvc[SVC_SVC_CANCEL_YMD];
		// サービス解約年月日
		strDelInf[DEL_SVC_DSL_YMD] = strSvc[SVC_SVC_DSL_YMD];
		// SYサービス終了年月日SID
		strDelInf[DEL_SVC_ENDYMD] = strSvc[SVC_SVC_ENDYMD];
		// 削除処理対象抽出年月日
		strDelInf[DEL_DEL_TRN_TG_CHSHT_YMD] = super.opeDate;
		// 個人情報削除理由コード
		strDelInf[DEL_KOJIN_INFO_DEL_RSN_CD] = strSvc[SVC_KOJIN_INFO_DEL_RSN_CD];
		// 削除判定コード
		strDelInf[DEL_DEL_JDG_CD] = DEL_ABLE;
		// 契約最終更新年月日時分秒
		strDelInf[DEL_KEI_LAST_UPD_DTM] = strSvc[SVC_UPD_DTM];
		// カレントデータ識別コード
		strDelInf[DEL_CRNT_DATA_SKBT_CD] = strSvc[SVC_CRNT_DATA_SKBT_CD];
		
		return strDelInf;
	}
	
	/**
	 * 比較用の適用終了日を取得する
	 * <p>
	 * </p>
	 * @param preAplyYmd １つ前データの予約適用開始日
	 * @return compdate １つ前データの予約適用開始日の前日
	 */
	private String getcompYmd(String preAplyYmd)
	{
		String compYear = null;
		String compMon = null;
		String compDay = null;
		String compdate = null;
		
		Calendar cal = Calendar.getInstance();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
		
		compYear = preAplyYmd.substring(0, 4);
		compMon = preAplyYmd.substring(4, 6);
		compDay = preAplyYmd.substring(6, 8);
		
		cal.set(Calendar.YEAR, Integer.parseInt(compYear));
		cal.set(Calendar.MONTH, Integer.parseInt(compMon) - 1);
		cal.set(Calendar.DATE, Integer.parseInt(compDay));
		
		cal.add(Calendar.DATE, -1);
		
		compdate = sdf.format(cal.getTime());
		
		return compdate;
	}
	
	/**
	 * 予約適用日・課金先適用開始年月日・課金先適用終了日を用いて、登録対象データの判定を行う
	 * <p>
	 * </p>
	 * @param rsvAplyYmd 予約適用年月日
	 * @param preAplyYmd 1つ前の予約適用年月日
	 * @param kakinTstaYmd 課金先適用開始年月日
	 * @param kakinTendYmd 課金先適用終了年月日
	 * @return rtnJdg 戻り値
	 */
	private int getJdgData(String rsvAplyYmd, String preAplyYmd, String kakinTstaYmd, String kakinTendYmd)
	{
		super.logPrint.printDebugLog("getJdgData:rsvAplyYmd=" + rsvAplyYmd);
		super.logPrint.printDebugLog("getJdgData:preAplyYmd=" + preAplyYmd);
		super.logPrint.printDebugLog("getJdgData:kakinTstaYmd=" + kakinTstaYmd);
		super.logPrint.printDebugLog("getJdgData:kakinTendYmd=" + kakinTendYmd);
		
		int rtnJdg = 0;
		
		int rsApYmd = 0;
		int preApymd = 0;
		int kaStaYmd = 0;
		int kaEndYmd = 0;
		
		// 予約適用年月日
		rsApYmd = Integer.parseInt(rsvAplyYmd);
		// 1つ前の予約適用年月日
		preApymd = Integer.parseInt(preAplyYmd);
		// 課金先適用開始年月日
		kaStaYmd = Integer.parseInt(kakinTstaYmd);
		// 課金先適用終了年月日
		kaEndYmd = Integer.parseInt(kakinTendYmd);
		
		// 課金先適用終了年月日 < 予約適用年月日の場合
		if (kaEndYmd < rsApYmd)
		{
			//処理対象外
			rtnJdg = 9;
			
		} 
		else if (kaStaYmd == rsApYmd && preApymd == kaEndYmd)
		// 課金先適用開始年月日 = 予約適用年月日 かつ 1つ前の予約適用年月日 = 課金先適用終了年月日の場合
		{
			// 当データ処理
			rtnJdg = 2;
				
		} 
		else if (kaStaYmd <= rsApYmd
					&& rsApYmd <= kaEndYmd
					&& kaEndYmd < preApymd) 
		// 課金先適用開始年月日 <= 予約適用年月日 <=  課金先適用終了年月日かつ
		// 課金先適用終了年月日 < 1つ前の予約適用年月日の場合
		{
			// 前データの請求契約番号にまたがる
			rtnJdg = 1;
			
		} 
		else if (kaStaYmd <= rsApYmd && preApymd < kaEndYmd)
		// 課金先適用開始年月日 <= 予約適用年月日 かつ 1つ前の予約適用年月日 < 課金先適用終了年月日の場合
		{
			// 当データ処理
			rtnJdg = 2;
			
		} 
		else if (rsApYmd < kaStaYmd
					&& kaStaYmd < preApymd
					&& preApymd <= kaEndYmd)
		// 予約適用年月日 < 課金先適用開始年月日 かつ
		// 課金先適用開始年月日 < 1つ前の予約適用年月日 <= 課金先適用終了年月日の場合
		{
			// 次データのはみ出し分処理
			rtnJdg = 3;
			
		} 
		else if (rsApYmd < kaStaYmd && kaEndYmd < preApymd)
		// 予約適用年月日 < 課金先適用開始年月日 かつ 課金先適用終了年月日 < 1つ前の予約適用年月日の場合
		{
			// 当データ処理
			rtnJdg = 2;
			
		} 
		else if (rsApYmd < kaStaYmd)
		// 予約適用年月日 < 課金先適用開始年月日の場合
		{
			//処理対象外
			rtnJdg = 9;
			
		}
		
		return rtnJdg;
	}
	
	/**
	 * 個人情報削除判定ワーク情報をファイル出力に渡す。
	 * <p>
	 * </p>
	 * @param lstInsData 個人情報削除判定ワーク情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void SvcToDelInf(JBSbatOutputItem outputInItem, ArrayList<String[]> lstInsData) throws Exception
	{
		super.logPrint.printDebugLog("SvcToDelInf:サービス契約番号=" + CRNT_SVC_KEI_NO);
		super.logPrint.printDebugLog("SvcToDelInf:lstInsData.size()=" + lstInsData.size());
		for(int i = 0 ; i < lstInsData.size() ; i++)
		{
		// 入出力インタフェースオブジェクトを生成
			JBSbatServiceInterfaceMap out_map = new JBSbatServiceInterfaceMap();

			out_map.setString(JBSbatKKIFM290.SVC_KEI_NO,lstInsData.get(i)[DEL_SVC_KEI_NO]);
			out_map.setString(JBSbatKKIFM290.SEIKY_KEI_NO,lstInsData.get(i)[DEL_SEIKY_KEI_NO]);
			out_map.setString(JBSbatKKIFM290.SYSID,lstInsData.get(i)[DEL_SYSID]);
			out_map.setString(JBSbatKKIFM290.SVC_CD,lstInsData.get(i)[DEL_SVC_CD]);
			out_map.setString(JBSbatKKIFM290.PRC_GRP_CD,lstInsData.get(i)[DEL_PRC_GRP_CD]);
			out_map.setString(JBSbatKKIFM290.PCRS_CD,lstInsData.get(i)[DEL_PCRS_CD]);
			out_map.setString(JBSbatKKIFM290.NEW_MSKM_JI_MSKMSHO_NO,lstInsData.get(i)[DEL_NEW_MSKM_JI_MSKMSHO_NO]);
			out_map.setString(JBSbatKKIFM290.ISP_NINSHO_ID,lstInsData.get(i)[DEL_ISP_NINSHO_ID]);
			out_map.setString(JBSbatKKIFM290.SVC_DSL_KISAN_YMD,lstInsData.get(i)[DEL_SVC_DSL_KISAN_YMD]);
			out_map.setString(JBSbatKKIFM290.SVC_CANCEL_YMD,lstInsData.get(i)[DEL_SVC_CANCEL_YMD]);
			out_map.setString(JBSbatKKIFM290.SVC_DSL_YMD,lstInsData.get(i)[DEL_SVC_DSL_YMD]);
			out_map.setString(JBSbatKKIFM290.SVC_ENDYMD,lstInsData.get(i)[DEL_SVC_ENDYMD]);
			out_map.setString(JBSbatKKIFM290.DEL_TRN_TG_CHSHT_YMD,lstInsData.get(i)[DEL_DEL_TRN_TG_CHSHT_YMD]);
			out_map.setString(JBSbatKKIFM290.KOJIN_INFO_DEL_RSN_CD,lstInsData.get(i)[DEL_KOJIN_INFO_DEL_RSN_CD]);
			out_map.setString(JBSbatKKIFM290.DEL_JDG_CD,lstInsData.get(i)[DEL_DEL_JDG_CD]);
			out_map.setString(JBSbatKKIFM290.KEI_LAST_UPD_DTM,lstInsData.get(i)[DEL_KEI_LAST_UPD_DTM]);
			out_map.setString(JBSbatKKIFM290.CRNT_DATA_SKBT_CD,lstInsData.get(i)[DEL_CRNT_DATA_SKBT_CD]);
			//出力フラグを設定
			out_map.setOutFlg(true);
			//出力共通電文に入出力インターフェースを設定する。
			outputInItem.addOutMapList(out_map);
		}
	}
}
