/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKDelInfInsert
*	ソースファイル名	：JBSbatKKDelInfInsert.java
*	作成者				：富士通　
*	作成日				：2013年01月14日
*＜機能概要＞
*　削除対象データ登録処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/01/14   富士通		新規作成
*	v15.00.00	2015/08/18	FJ)安井		ST-2015-0000030 	抽出処理性能改善
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
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.framework.util.JBSbatDateUtil;
import eo.framework.util.JBSbatStringUtil;
import eo.business.common.JBSbatMatchServiceInterface;
import eo.business.util.file.JBSbatKKIFM288;
import eo.business.util.file.JBSbatKKIFM290;
import eo.business.util.table.JBSbatKK_T_KJNIFDEL_JDG_WK;
import eo.business.util.table.JBSbatKK_T_MSKM_DTL;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKDelInfInsert extends JBSbatBusinessService implements JBSbatMatchServiceInterface
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(個人情報削除判定ワーク)*/
	private static final String D_TBL_NAME_KK_T_KJNIFDEL_JDG_WK = "KK_T_KJNIFDEL_JDG_WK";

//ST-2015-0000030 ADD STA
	/** テーブル(申込明細)*/
	private static final String D_TBL_NAME_KK_T_MSKM_DTL = "KK_T_MSKM_DTL";
//ST-2015-0000030 ADD END

	/** テーブルアクセスクラス(個人情報削除判定ワーク)*/
	private JBSbatSQLAccess db_KK_T_KJNIFDEL_JDG_WK = null;

//ST-2015-0000030 ADD STA
	/** テーブルアクセスクラス(申込明細)*/
	private JBSbatSQLAccess db_KK_T_MSKM_DTL = null;
	
	/** SQL定義キー(KK_SELECT_038)*/
	private static final String KK_T_MSKM_DTL_KK_SELECT_038 = "KK_SELECT_038";
//ST-2015-0000030 ADD END

	/** キーマッチ処理フラグ*/
	private boolean matchProcFlg;

	/** マスタファイル処理フラグ*/
	private boolean mastProcFlg;

	/** トランファイル処理フラグ*/
	private boolean tranProcFlg;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 無効フラグ(有効)*/
	private static final String MK_FLG = "0";
	
	/** カレント識別コード（カレント） */
	private static final String CRNT = "1";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_KJNIFDEL_JDG_WK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KJNIFDEL_JDG_WK);
//ST-2015-0000030 ADD STA
		db_KK_T_MSKM_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_MSKM_DTL);
//ST-2015-0000030 ADD END
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @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");
		if (mastMap == null && tranMap != null) {
			// 入力Ｍのみnullの場合
			this.setTranProcFlg(true);
		} else if (mastMap != null && tranMap == null) {
	    	// 入力Ｔのみnullの場合
			this.setMastProcFlg(true);
			//削除対象登録
			insKjnIfDelJdgWk(mastMap);
		} else {
			
			String strDelData = mastMap.getString(JBSbatKKIFM290.SVC_KEI_NO) + mastMap.getString(JBSbatKKIFM290.SEIKY_KEI_NO) + mastMap.getString(JBSbatKKIFM290.SYSID);
			String strDisDelData = tranMap.getString(JBSbatKKIFM290.SVC_KEI_NO) + tranMap.getString(JBSbatKKIFM290.SEIKY_KEI_NO) + tranMap.getString(JBSbatKKIFM290.SYSID);
			
			int intRsrt = strDelData.compareTo(strDisDelData);
			
			if(intRsrt == 0)
			{
				//削除対象外
				//次のデータを読み込む
				this.setMastProcFlg(true);
				this.setTranProcFlg(true);
			}
			else if(intRsrt < 0)
			{
				//削除対象登録
				insKjnIfDelJdgWk(mastMap);
				//削除対象データのみ次のデータを読み込む
				this.setMastProcFlg(true);
				this.setTranProcFlg(false);
			}
			else
			{
				//削除対象外データのみ次のデータを読み込む
				this.setMastProcFlg(false);
				this.setTranProcFlg(true);
			}
		}
		
		super.logPrint.printDebugLog("execute_END");
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_KJNIFDEL_JDG_WK.close();
//ST-2015-0000030 ADD STA
		db_KK_T_MSKM_DTL.close();
//ST-2015-0000030 ADD END
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * @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;
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	サービス契約番号				SVC_KEI_NO
	 *		 	請求契約番号				SEIKY_KEI_NO
	 *		 	ＳＹＳＩＤ				SYSID
	 *		 	サービスコード				SVC_CD
	 *		 	料金グループコード				PRC_GRP_CD
	 *		 	料金コースコード				PCRS_CD
	 *		 	新規申込時申込書番号				NEW_MSKM_JI_MSKMSHO_NO
	 *		 	ＩＳＰ認証ＩＤ				ISP_NINSHO_ID
	 *		 	サービス解約起算年月日				SVC_DSL_KISAN_YMD
	 *		 	サービスキャンセル年月日				SVC_CANCEL_YMD
	 *		 	サービス解約年月日				SVC_DSL_YMD
	 *		 	サービス終了年月日				SVC_ENDYMD
	 *		 	削除処理対象抽出年月日				DEL_TRN_TG_CHSHT_YMD
	 *		 	個人情報削除理由コード				KOJIN_INFO_DEL_RSN_CD
	 *		 	削除判定コード				DEL_JDG_CD
	 *		 	契約最終更新年月日時分秒				KEI_LAST_UPD_DTM
	 *		 	カレントデータ識別コード				CRNT_DATA_SKBT_CD
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 *		 	登録運用年月日				ADD_UNYO_YMD
	 *		 	登録処理ＩＤ				ADD_TRN_ID
	 *		 	更新運用年月日				UPD_UNYO_YMD
	 *		 	更新処理ＩＤ				UPD_TRN_ID
	 *		 	削除運用年月日				DEL_UNYO_YMD
	 *		 	削除処理ＩＤ				DEL_TRN_ID
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KJNIFDEL_JDG_WK_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("SVC_KEI_NO", setParam[0]);
		setMap.setValue("SEIKY_KEI_NO", setParam[1]);
		setMap.setValue("SYSID", setParam[2]);
		setMap.setValue("SVC_CD", setParam[3]);
		setMap.setValue("PRC_GRP_CD", setParam[4]);
		setMap.setValue("PCRS_CD", setParam[5]);
		setMap.setValue("NEW_MSKM_JI_MSKMSHO_NO", setParam[6]);
		setMap.setValue("ISP_NINSHO_ID", setParam[7]);
		setMap.setValue("SVC_DSL_KISAN_YMD", setParam[8]);
		setMap.setValue("SVC_CANCEL_YMD", setParam[9]);
		setMap.setValue("SVC_DSL_YMD", setParam[10]);
		setMap.setValue("SVC_ENDYMD", setParam[11]);
		setMap.setValue("DEL_TRN_TG_CHSHT_YMD", setParam[12]);
		setMap.setValue("KOJIN_INFO_DEL_RSN_CD", setParam[13]);
		setMap.setValue("DEL_JDG_CD", setParam[14]);
		setMap.setValue("KEI_LAST_UPD_DTM", setParam[15]);
		setMap.setValue("CRNT_DATA_SKBT_CD", setParam[16]);
		setMap.setValue("ADD_DTM", setParam[17]);
		setMap.setValue("ADD_OPEACNT", setParam[18]);
		setMap.setValue("UPD_DTM", setParam[19]);
		setMap.setValue("UPD_OPEACNT", setParam[20]);
		setMap.setValue("DEL_DTM", setParam[21]);
		setMap.setValue("DEL_OPEACNT", setParam[22]);
		setMap.setValue("MK_FLG", setParam[23]);
		setMap.setValue("ADD_UNYO_YMD", setParam[24]);
		setMap.setValue("ADD_TRN_ID", setParam[25]);
		setMap.setValue("UPD_UNYO_YMD", setParam[26]);
		setMap.setValue("UPD_TRN_ID", setParam[27]);
		setMap.setValue("DEL_UNYO_YMD", setParam[28]);
		setMap.setValue("DEL_TRN_ID", setParam[29]);
	
		// DBアクセスを実行します
		db_KK_T_KJNIFDEL_JDG_WK.insertByPrimaryKeys(setMap);
	}

//ST-2015-0000030 ADD STA
	/**
	 * 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_MSKM_DTL_SELECT_KK_SELECT_038(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		
		// DBアクセスを実行します
		db_KK_T_MSKM_DTL.selectBySqlDefine(paramList, KK_T_MSKM_DTL_KK_SELECT_038);
	}
//ST-2015-0000030 ADD STA
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 個人情報削除判定ワーク登録処理
	 * 
	 * <p>
	 * @param inMap 個人情報削除より取得したデータ
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void insKjnIfDelJdgWk(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		String[] param = new String[30];
		
		// サービス契約
		param[0] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.SVC_KEI_NO));
		// 請求契約番号
		param[1] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.SEIKY_KEI_NO));
		// SYSID
		param[2] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.SYSID));
		// サービスコード
		param[3] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.SVC_CD));
		// 料金グループコード
		param[4] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.PRC_GRP_CD));
		// 料金コースコード
		param[5] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.PCRS_CD));
		if(CRNT.equals(inMap.getString(JBSbatKKIFM290.CRNT_DATA_SKBT_CD)))
		{

			// 新規申込時申込書番号
//ST-2015-0000030 ADD STA
//			param[6] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.NEW_MSKM_JI_MSKMSHO_NO));
			param[6] = JBSbatStringUtil.Rtrim(getNewMskmJiMskmshoNo(inMap.getString(JBSbatKKIFM290.SVC_KEI_NO)));
//ST-2015-0000030 ADD STA
			// ISP認証ID
			param[7] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.ISP_NINSHO_ID));
		}
		// サービス解約起算年月日
		param[8] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.SVC_DSL_KISAN_YMD));
		// サービスキャンセル年月日
		param[9] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.SVC_CANCEL_YMD));
		// サービス解約年月日
		param[10] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.SVC_DSL_YMD));
		// サービス終了年月日
		param[11] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.SVC_ENDYMD));
		// 削除処理対象抽出年月日
		param[12] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.DEL_TRN_TG_CHSHT_YMD));
		// 個人情報削除理由コード
		param[13] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.KOJIN_INFO_DEL_RSN_CD));
		// 削除判定コード
		param[14] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.DEL_JDG_CD));
		// 契約最終更新年月日時分秒
		param[15] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.KEI_LAST_UPD_DTM));
		// カレントデータ識別コード
		param[16] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM290.CRNT_DATA_SKBT_CD));
		// 登録年月日時分秒
		param[17] = JBSbatDateUtil.getSystemDateTime();
		// 登録オペレータアカウント
		param[18] = super.batchUserId;
		// 更新年月日時分秒
		param[19] = JBSbatDateUtil.getSystemDateTime();
		// 更新オペレータアカウント
		param[20] = super.batchUserId;
		// 削除年月日時分秒
		param[21] = "";
		// 削除オペレータアカウント
		param[22] = "";
		// 無効フラグ
		param[23] = MK_FLG;
		// 登録運用年月日
		param[24] = super.opeDate;
		// 登録処理ID
		param[25] = super.jobid;
		// 更新運用年月日
		param[26] = super.opeDate;
		// 更新処理ID
		param[27] = super.jobid;
		// 削除運用年月日
		param[28] = "";
		// 削除処理ID
		param[29] = "";
		
		// 登録処理の実施。
		executeKK_T_KJNIFDEL_JDG_WK_PKINSERT(param);
		
	}
	
//ST-2015-0000030 ADD STA
	/**
	 * 新規申込時申込明細番号取得
	 * 
	 * <p>
	 * @param svcKeiNo サービス契約番号
	 * @return 新規申込時申込明細番号取得
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private String getNewMskmJiMskmshoNo(String svcKeiNo) throws Exception
	{
		String rtn = "";
		JBSbatCommonDBInterface dbMap = new JBSbatCommonDBInterface();
		
		Object[] param = {svcKeiNo, super.opeDate};
		executeKK_T_MSKM_DTL_SELECT_KK_SELECT_038(param);
		dbMap = db_KK_T_MSKM_DTL.selectNext();
		
		if(null != dbMap)
		{
			rtn = dbMap.getString(JBSbatKK_T_MSKM_DTL.MSKMSHO_NO);
		}
		
		return rtn;
	}
//ST-2015-0000030 ADD END
}
