/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKTrgtHaisoBpin
*	ソースファイル名	：JBSbatKKTrgtHaisoBpin.java
*	作成者				：富士通　
*	作成日				：2011年07月22日
*＜機能概要＞
*　対象配送取得部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/22  FJ)久保田	新規作成
*	v1.01.00	2011/11/26  FJ)倉上		IT1-2011-0000328障害対応
*	v2.00.00	2012/03/20  FJ)倉上		【ST2-2012-0000423】ファイル出力処理修正。
*	v2.01.00	2012/04/18  FJ)久保田	【TAI-2012-0000027】排他制御対応
*	v3.00.00	2012/07/17  FJ)藤本		【IT2-2012-0001348】割引関連スキーマの変更に伴う修正
*	v5.00.00	2013/03/17  FJ)団		【IT2-2012-0000498】対応
*	v5.00.01	2013/08/05  FJ)藤本		【OM-2013-0000005】障害対応
*	v7.00.00	2014/02/06  FJ)中作		【ANK-1961-00-00】対応
*	v22.00.00	2015/11/24  FJ)広部		【ANK-2732-00-00】プロジェクト正常化施策 ソースの可読性向上
*	v50.00.00	2020/07/16	FJ)謝		【ANK-3889-00-00】機器単位キャンペーン対応（機器サービス開始日の開始契機導入）
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.util.file.JBSbatKKIFM069;
import eo.business.util.table.JBSbatDK_T_HAISO;
import eo.business.util.table.JBSbatKK_T_KKTK_SVC_KEI;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKTrgtHaisoBpin extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(機器提供サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KKTK_SVC_KEI = "KK_T_KKTK_SVC_KEI";

	/** テーブル(配送)*/
	private static final String D_TBL_NAME_DK_T_HAISO = "DK_T_HAISO";

	/** SQL定義キー(KK_SELECT_009)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_009 = "KK_SELECT_009";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String DK_T_HAISO_KK_SELECT_001 = "KK_SELECT_001";

	/** テーブルアクセスクラス(機器提供サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KKTK_SVC_KEI = null;

	/** テーブルアクセスクラス(配送)*/
	private JBSbatSQLAccess db_DK_T_HAISO = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 
	 * 割引サービス契約番号 
	 */
	protected String wribSvcKeiNo = "";

	/** 
	 * 割引サービス契約内訳番号 
	 */
	protected String wribSvcKeiUcwkNo = "";

	/** 
	 * 世代登録年月日時分秒 
	 */
	protected String geneAddDtm = "";

	/** 
	 * キャンペーン開始コード 
	 */
	protected String campaignStaCd = "";

	/** 
	 * 開始調整コード 
	 */
	protected String staAdjCd = "";

	/** 
	 * 開始調整期間 
	 */
	protected String staAdj = "";

	/** 
	 * 適用数判別コード 
	 */
	protected String aplyCntHambetCd = "";

	/** 
	 * 適用数 
	 */
	protected String aplyCnt = "";

	/** 
	 * 機器提供サービス契約番号 
	 */
	protected String kktkSvcKeiNo = "";

	/** 
	 * 機器提供サービス契約ステータス 
	 */
	protected String kktkSvcKeiStat = "";

	/** 
	 * サービス開始年月日 
	 */
	protected String svcStaYmd = "";

	/** 
	 * 配送完了年月日 
	 */
	protected String haisoFinYmd = "";

	/** 
	 * 更新対象フラグ 
	 * */
	protected String updTgFlg = "";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_KKTK_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KKTK_SVC_KEI);
		db_DK_T_HAISO = new JBSbatSQLAccess(commonItem, D_TBL_NAME_DK_T_HAISO);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		super.logPrint.printDebugLog("execute_START");
		
		// 中間ファイルの読み込みを行います。
		getKkifm069(inMap);
		
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// 機器提供サービス契約番号が設定されている場合。
		if(!"".equals(kktkSvcKeiNo))
		{
			kktkSvcKeiStat = "";
			svcStaYmd      = "";
			haisoFinYmd    = "";
			
			// 機器提供サービス契約の情報を取得する。
			String[] param = {kktkSvcKeiNo, super.opeDate};
			this.executeKK_T_KKTK_SVC_KEI_KK_SELECT_009(param);
			JBSbatCommonDBInterface kktkSvcKeiMap = db_KK_T_KKTK_SVC_KEI.selectNext();
			
			// 検索結果がある場合
			if(null != kktkSvcKeiMap)
			{
				kktkSvcKeiStat = JBSbatStringUtil.Rtrim(kktkSvcKeiMap.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SVC_KEI_STAT));	// 機器提供サービス契約ステータス
				svcStaYmd      = JBSbatStringUtil.Rtrim(kktkSvcKeiMap.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_STA_YMD));			// サービス開始年月日
				
				// 機器提供サービス契約ステータス
				// ++++++++++ v22.00.00 変更開始 ++++++++++
//				if("910".equals(kktkSvcKeiStat) || "920".equals(kktkSvcKeiStat))
				if(JBSbatKKConst.CD00056_KKTK_SVC_KEI_STAT_910.equals(kktkSvcKeiStat) || JBSbatKKConst.CD00056_KKTK_SVC_KEI_STAT_920.equals(kktkSvcKeiStat))
				// ++++++++++ v22.00.00 変更終了 ++++++++++
				{
					// 検索結果がない場合はファイル出力しません。
					super.logPrint.printDebugLog("★★機器提供サービス契約ステータス--->" + kktkSvcKeiStat);
					super.logPrint.printDebugLog("execute_END");
					return outputBean;
				}
				
// ANK-3889-00-00 ADD START
				// キャンペーン開始コードが機器サービス開始日の場合
				if (JBSbatKKConst.CAMPAIGN_STA_CD_KIKI_SVC_STA_DAY .equals(campaignStaCd))
				{
					// 機器提供サービス契約ステータスがサービス提供中、休止・中断中、停止中以外の場合はファイル出力しません。
					if(!JBSbatKKConst.CD00056_KKTK_SVC_KEI_STAT_100.equals(kktkSvcKeiStat)
							&& !JBSbatKKConst.CD00056_KKTK_SVC_KEI_STAT_210.equals(kktkSvcKeiStat)
							&& !JBSbatKKConst.CD00056_KKTK_SVC_KEI_STAT_220.equals(kktkSvcKeiStat))
					{
						super.logPrint.printDebugLog("execute_END");
						return outputBean;
					}
					
					// サービス開始年月日が空白または運用日より未来の場合はファイル出力しません。
					if("".equals(svcStaYmd) || svcStaYmd.compareTo(super.opeDate) > 0)
					{
						super.logPrint.printDebugLog("execute_END");
						return outputBean;
					}
				}
				// キャンペーン開始コードが出荷日+n日の場合
				else
				{
// ANK-3889-00-00 ADD END
					// 照査解約完了コードが「2：照査NG」の場合はステータスを「010：受付済」に置き換える。
					String shosa_dsl_fin_cd = JBSbatStringUtil.Rtrim(kktkSvcKeiMap.getString(JBSbatKK_T_KKTK_SVC_KEI.SHOSA_DSL_FIN_CD));
					// ++++++++++ v22.00.00 変更開始 ++++++++++
//					if("2".equals(shosa_dsl_fin_cd))
					if(JBSbatKKConst.CD00469_SHOSA_DSL_FIN_CD_2.equals(shosa_dsl_fin_cd))
					// ++++++++++ v22.00.00 変更終了 ++++++++++
					{
						super.logPrint.printDebugLog("■照査NGはステータスを受付済とする　機器提供サービス契約：" + kktkSvcKeiNo + "：" + kktkSvcKeiStat);
						
						// ++++++++++ v22.00.00 変更開始 ++++++++++
//						kktkSvcKeiStat = "010";
						kktkSvcKeiStat = JBSbatKKConst.CD00056_KKTK_SVC_KEI_STAT_010;
						// ++++++++++ v22.00.00 変更終了 ++++++++++
					}
					
					// 配送の検索を行う。パラメータは機器提供サービス契約の抽出と同じパラメータを使用。
					// 使用するのは[0]に設定されている機器提供サービス契約番号のみ。
					this.executeDK_T_HAISO_KK_SELECT_001(param);
					JBSbatCommonDBInterface haisoMap = db_DK_T_HAISO.selectNext();
					
					// 検索結果がある場合
					if(null != haisoMap)
					{
						haisoFinYmd = JBSbatStringUtil.Rtrim(haisoMap.getString(JBSbatDK_T_HAISO.HAISO_FIN_YMD));		// 配送完了年月日
						
						// 配送完了年月日が空白
						if("".equals(haisoFinYmd))
						{
							// 検索結果がない場合はファイル出力しません。
							super.logPrint.printDebugLog("★★配送完了年月日が空白--->" + kktkSvcKeiNo);
							super.logPrint.printDebugLog("execute_END");
							return outputBean;
						}
					}
// ANK-3889-00-00 ADD START
				}
// ANK-3889-00-00 ADD END
			}
			else
			{
				// 検索結果がない場合はファイル出力しません。
				super.logPrint.printDebugLog("execute_END");
				return outputBean;
			}
			
			// ファイル出力を行う。
			this.createKkifm069(outputBean);
		}
		
		// ファイル出力を行う。
		//this.createKkifm069(outputBean);
		
		super.logPrint.printDebugLog("execute_END");
		
		return outputBean;
		
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_KKTK_SVC_KEI.close();
		db_DK_T_HAISO.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_009)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	対象割引サービス.機器提供サービス契約
	 *		 	運用日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KKTK_SVC_KEI_KK_SELECT_009(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_SELECT_009);
	}

	/**
	 * 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 executeDK_T_HAISO_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_DK_T_HAISO.selectBySqlDefine(paramList, DK_T_HAISO_KK_SELECT_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 
	 * 中間ファイルの読み込みを行います。
	 * 
	 * @param inMap 中間ファイルの値。
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void getKkifm069(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		
		wribSvcKeiNo     = "";// 割引サービス契約番号
		wribSvcKeiUcwkNo = "";// 割引サービス契約番号
		geneAddDtm       = "";// 世代登録年月日時分秒
		campaignStaCd    = "";// キャンペーン開始コード
		staAdjCd         = "";// 開始調整コード
		staAdj           = "";// 開始調整期間
		aplyCntHambetCd  = "";// 適用数判別コード
		aplyCnt          = "";// 適用数
		kktkSvcKeiNo     = "";// 機器提供サービス契約番号
		kktkSvcKeiStat   = "";// 機器提供サービス契約ステータス
		svcStaYmd        = "";// サービス開始年月日
		haisoFinYmd      = "";// 配送完了年月日
		updTgFlg         = "";// 更新対象フラグ
		
		wribSvcKeiNo     = inMap.getString(JBSbatKKIFM069.WRIB_SVC_KEI_NO);
		wribSvcKeiUcwkNo = inMap.getString(JBSbatKKIFM069.WRIB_SVC_KEI_UCWK_NO);
		geneAddDtm       = inMap.getString(JBSbatKKIFM069.GENE_ADD_DTM);
		campaignStaCd    = inMap.getString(JBSbatKKIFM069.CAMPAIGN_STA_CD);
		staAdjCd         = inMap.getString(JBSbatKKIFM069.STA_ADJ_CD);
		staAdj           = inMap.getString(JBSbatKKIFM069.STA_ADJ);
		aplyCntHambetCd  = inMap.getString(JBSbatKKIFM069.APLY_CNT_HAMBET_CD);
		aplyCnt          = inMap.getString(JBSbatKKIFM069.APLY_CNT);
		kktkSvcKeiNo     = inMap.getString(JBSbatKKIFM069.KKTK_SVC_KEI_NO);
		kktkSvcKeiStat   = inMap.getString(JBSbatKKIFM069.KKTK_SVC_KEI_STAT);
		svcStaYmd        = inMap.getString(JBSbatKKIFM069.SVC_STA_YMD);
		haisoFinYmd      = inMap.getString(JBSbatKKIFM069.HAISO_FIN_YMD);
		updTgFlg         = inMap.getString(JBSbatKKIFM069.UPD_TG_FLG);

	}
	
	/**
	 * 
	 *  対象配送取得ファイルの作成を行います。
	 *  
	 * @param  outputBean JBSbatOutputItem
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void createKkifm069(JBSbatOutputItem outputBean) throws Exception
	{
		
		//入出力インターフェースオブジェクトを生成
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
		
		//項目を設定
		outmap.setString(JBSbatKKIFM069.WRIB_SVC_KEI_NO, wribSvcKeiNo);				// 割引サービス契約番号
		outmap.setString(JBSbatKKIFM069.WRIB_SVC_KEI_UCWK_NO, wribSvcKeiUcwkNo);	// 割引サービス契約内訳番号
		outmap.setString(JBSbatKKIFM069.GENE_ADD_DTM, geneAddDtm);					// 世代登録年月日時分秒
		outmap.setString(JBSbatKKIFM069.CAMPAIGN_STA_CD, campaignStaCd);			// キャンペーン開始コード 
		outmap.setString(JBSbatKKIFM069.STA_ADJ_CD, staAdjCd);						// 開始調整コード 
		outmap.setString(JBSbatKKIFM069.STA_ADJ, staAdj);							// 開始調整期間
		outmap.setString(JBSbatKKIFM069.APLY_CNT_HAMBET_CD, aplyCntHambetCd);		// 適用数判別コード 
		outmap.setString(JBSbatKKIFM069.APLY_CNT, aplyCnt);							// 適用数
		outmap.setString(JBSbatKKIFM069.KKTK_SVC_KEI_NO, kktkSvcKeiNo);				// 機器提供サービス契約番号
		outmap.setString(JBSbatKKIFM069.KKTK_SVC_KEI_STAT, kktkSvcKeiStat);			// 機器提供サービス契約ステータス 
		outmap.setString(JBSbatKKIFM069.SVC_STA_YMD, svcStaYmd);					// サービス開始年月日
		outmap.setString(JBSbatKKIFM069.HAISO_FIN_YMD, haisoFinYmd);				// 配送完了年月日
		outmap.setString(JBSbatKKIFM069.UPD_TG_FLG, updTgFlg);						// 更新対象フラグ 
		
		//出力フラグを設定
		outmap.setOutFlg(true);
		//出力共通電文に入出力インターフェースを設定する。
		outputBean.addOutMapList(outmap);
	}

}
