/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHTokusokuReqDaySet
*	ソースファイル名	：JBSbatCHTokusokuReqDaySet.java
*	作成者				：富士通　
*	作成日				：2011年11月22日
*＜機能概要＞
*　督促依頼日設定部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/11/22   富士通		新規作成
*	v1.01.00	2012/08/28   FJ）成田	【TG1-2012-0000145】パラメータ取得部品の共通化、それに伴う不要な初期化削除、クローズ処理を追加。
*	v5.00.00	2013/06/19   FJ）後藤	【TG1-2012-0001301】債権回収委託会社委託処理年月日更新処理追加
*********************************************************************/
package eo.business.service;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatCHIFM101;
import eo.business.util.table.JBSbatCH_T_TOKUSOKU;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
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;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHTokusokuReqDaySet extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(督促)*/
	private static final String D_TBL_NAME_CH_T_TOKUSOKU = "CH_T_TOKUSOKU";

	/** テーブルアクセスクラス(督促)*/
	private JBSbatSQLAccess db_CH_T_TOKUSOKU = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 督促テーブル更新件数 */
	private int tokusokuCnt = 0;
	
	/** 督促データ識別(利用停止情報データ) */
	private String tkskSkbtUseStopInfo = null;
	
	/** 督促データ識別(強制解約情報データ) */
	private String tkskSkbtKyoKaiInfo = null;
	
	/** 督促データ識別(債権回収委託対象データ) */
	private String tkskSkbtSknKisCpItk = null;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CH_T_TOKUSOKU = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_TOKUSOKU);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");		
		
		// 業務パラメータ取得
		// パラメータ取得部品の初期処理
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		this.tkskSkbtUseStopInfo		= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_TKSK_DATA_SKBT_08);	// 督促データ識別(利用停止情報データ)
		this.tkskSkbtKyoKaiInfo			= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_TKSK_DATA_SKBT_09);	// 督促データ識別(強制解約情報データ)
		this.tkskSkbtSknKisCpItk		= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_TKSK_DATA_SKBT_12);	// 督促データ識別(債権回収委託対象データ)
		paramUtil.close();
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][tkskSkbtUseStopInfo		=" + this.tkskSkbtUseStopInfo + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][tkskSkbtKyoKaiInfo		=" + this.tkskSkbtKyoKaiInfo + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][tkskSkbtSknKisCpItk		=" + this.tkskSkbtSknKisCpItk + "]");

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");

	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]") : true;
		
		// 更新対象判定
		if (!inMap.get(JBSbatCHIFM101.TOKUSOKU_DATA_SKBT).equals(super.freeItem))
		{
			// 督促データ識別とフリー項目の値が≠の場合、主処理を抜ける

			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");

			return null;
		}

		// 更新件数
		int updateCnt = 0;

		// 条件値
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		// 請求番号
		whereParam.setValue(inMap.get(JBSbatCHIFM101.TOKUSOKU_NO));

		// 設定値
		JBSbatCommonDBInterface setParam = new JBSbatCommonDBInterface();
		// 依頼年月日
		setParam.setValue(super.opeDate);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][setParam=" + setParam.getList().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][whereParam=" + whereParam.getList().toString() + "]");

		// 更新処理
		if (inMap.get(JBSbatCHIFM101.TOKUSOKU_DATA_SKBT).equals(this.tkskSkbtUseStopInfo))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][利用停止依頼年月日更新]");
			
			// 利用停止依頼年月日更新
			updateCnt = executeCH_T_TOKUSOKU_PKUPDATE1(setParam.getList().toArray(), whereParam.getList().toArray());
		}
		else if(inMap.get(JBSbatCHIFM101.TOKUSOKU_DATA_SKBT).equals(this.tkskSkbtKyoKaiInfo))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][強制解約依頼年月日更新]");
			
			// 強制解約依頼年月日更新
			updateCnt = executeCH_T_TOKUSOKU_PKUPDATE2(setParam.getList().toArray(), whereParam.getList().toArray());
		}
		else if(inMap.get(JBSbatCHIFM101.TOKUSOKU_DATA_SKBT).equals(this.tkskSkbtSknKisCpItk))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][債権回収委託会社委託処理年月日更新]");
			
			// 債権回収委託会社委託処理年月日更新
			updateCnt = executeCH_T_TOKUSOKU_PKUPDATE3(setParam.getList().toArray(), whereParam.getList().toArray());
		}

		// 更新件数判定
		if (updateCnt <= 0)
		{
			// マスタ未存在エラー
			String[] msgParam = new String[]
			{
				JBSbatCH_T_TOKUSOKU.TABLE_NAME,
				whereParam.getList().toString()
			};
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0270CH, msgParam);

		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CH_T_TOKUSOKU.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		
		// 更新件数ログ出力
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB1190AI,
				new String[] {JBSbatCH_T_TOKUSOKU.TABLE_NAME, String.valueOf(tokusokuCnt)});
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");

	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	利用停止依頼年月日				USE_STP_REQ_YMD
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	TOKUSOKU_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 * @return updateCnt 更新件数
	 */
	private int executeCH_T_TOKUSOKU_PKUPDATE1(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("USE_STP_REQ_YMD", setParam[0]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("TOKUSOKU_NO", whereParam[0]);

		// DBアクセスを実行します
		int updateCnt = db_CH_T_TOKUSOKU.updateByPrimaryKeys(whereMap, setMap);
		
		tokusokuCnt += updateCnt;
		
		return updateCnt;
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	強制解約依頼年月日				KYOSEI_DSL_REQ_YMD
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	TOKUSOKU_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 * @return updateCnt 更新件数
	 */
	private int executeCH_T_TOKUSOKU_PKUPDATE2(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("KYOSEI_DSL_REQ_YMD", setParam[0]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("TOKUSOKU_NO", whereParam[0]);

		// DBアクセスを実行します
		int updateCnt = db_CH_T_TOKUSOKU.updateByPrimaryKeys(whereMap, setMap);
		
		tokusokuCnt += updateCnt;
		
		return updateCnt;
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	債権回収委託会社委託処理年月日				SKNKSITKCM_ITAKU_TRAN_YMD
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	TOKUSOKU_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 * @return updateCnt 更新件数
	 */
	private int executeCH_T_TOKUSOKU_PKUPDATE3(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("SKNKSITKCM_ITAKU_TRAN_YMD", setParam[0]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("TOKUSOKU_NO", whereParam[0]);

		// DBアクセスを実行します
		int updateCnt = db_CH_T_TOKUSOKU.updateByPrimaryKeys(whereMap, setMap);
		
		tokusokuCnt += updateCnt;
		
		return updateCnt;
	}
}
