/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHSeikyDelInfoHanei
*	ソースファイル名	：JBSbatCHSeikyDelInfoHanei.java
*	作成者				：富士通　
*	作成日				：2013年11月27日
*＜機能概要＞
*　請求削除情報反映部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v6.00.00	2013/11/27  FJ) 早崎	【OM-2012-0004219】新規作成
*	v8.00.00	2014/05/23  FJ) 小掠	【OM-2014-0001820】債権の更新条件をなしに変更し、請求の更新を新規作成、請求番号が設定されていた場合のみ更新
*********************************************************************/
package eo.business.service;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatCHIFM223;
import eo.common.constant.JACStrConst;
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;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHSeikyDelInfoHanei extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(債権)*/
	private static final String D_TBL_NAME_CH_T_SAIKEN = "CH_T_SAIKEN";

	/** テーブル(請求)*/
	private static final String D_TBL_NAME_CH_T_SEIKY = "CH_T_SEIKY";

	/** テーブルアクセスクラス(債権)*/
	private JBSbatSQLAccess db_CH_T_SAIKEN = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** テーブルアクセスクラス(請求)*/
	private JBSbatSQLAccess db_CH_T_SEIKY = null;
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CH_T_SAIKEN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_SAIKEN);
		db_CH_T_SEIKY = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_SEIKY);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial][opeDate ＝ " + super.opeDate + "]");
		
		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;
		
		// 債権ステータス更新処理
		updateSaiken(inMap.getString(JBSbatCHIFM223.SAIKEN_NO));
		
		// 請求番号
		String seikyuNo = inMap.getString(JBSbatCHIFM223.SEIKY_NO);
		
		// 請求番号が設定されていた場合
		if(!JACStrConst.KARA_MOJI.equals(seikyuNo))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][請求更新対象]");
			// 請求更新処理
			updateSeiky(seikyuNo);
		
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 債権スキーマを更新します。
	 * 
	 * @param saikenNo 債権番号
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void updateSaiken(String saikenNo) throws Exception
	{
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][updateSaiken]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][updateSaiken][saikenNo = " + saikenNo + "]");

		JBSbatCommonDBInterface setParam = new JBSbatCommonDBInterface();
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();

		// 債権.債権ステータス("050"(収納済))
		setParam.setValue(JACStrConst.SAIKEN_STAT_KAKNO_ZUMI);

		// 債権.債権番号
		whereParam.setValue(saikenNo);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updateSaiken][setParam = " + setParam.getList().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updateSaiken][whereParam = " + whereParam.getList().toString() + "]");

		// 更新実行
		executeCH_T_SAIKEN_PKUPDATE(setParam.getList().toArray(), whereParam.getList().toArray());

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][updateSaiken]");
	}
	
	/**
	 * 請求スキーマを更新します。
	 * 
	 * @param seikyNo 請求番号
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void updateSeiky(String seikyNo) throws Exception
	{
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][updateSeiky]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][updateSeiky][seikyNo = " + seikyNo + "]");

		JBSbatCommonDBInterface setParam = new JBSbatCommonDBInterface();
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();

		// 請求.請求確定年月日 = バッチ運用日
		setParam.setValue(super.opeDate);
		// 請求.請求書発行対象フラグ = '0' 発行対象外
		setParam.setValue(JACStrConst.SKS_HAK_TG_FLG_TG_GAI);

		// 請求.請求番号
		whereParam.setValue(seikyNo);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updateSeiky][setParam = " + setParam.getList().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updateSeiky][whereParam = " + whereParam.getList().toString() + "]");

		// 更新実行
		executeCH_T_SEIKY_PKUPDATE(setParam.getList().toArray(), whereParam.getList().toArray());

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][updateSeiky]");
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		
		db_CH_T_SAIKEN.clearBatch();
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CH_T_SAIKEN.close();
		db_CH_T_SEIKY.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/

		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マップに入れます。項目キーは以下に説明します。
	 *		 	債権ステータス				SAIKEN_STAT
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SAIKEN_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_SAIKEN_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("SAIKEN_STAT", setParam[0]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SAIKEN_NO", whereParam[0]);

		// DBアクセスを実行します
		db_CH_T_SAIKEN.updateByPrimaryKeysBatch(whereMap, setMap, 1);
	}
	
	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	請求確定年月日				SEIKY_FIX_YMD
	 *		 	請求書発行対象フラグ				SEIKYUS_HAKKO_TG_FLG
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SEIKY_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_SEIKY_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("SEIKY_FIX_YMD", setParam[0]);
		setMap.setValue("SEIKYUS_HAKKO_TG_FLG", setParam[1]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SEIKY_NO", whereParam[0]);

		// DBアクセスを実行します
		db_CH_T_SEIKY.updateByPrimaryKeys(whereMap, setMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
