/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACKaikNkinDataChsht
*	ソースファイル名	：JBSbatACKaikNkinDataChsht.java
*	作成者				：富士通　
*	作成日				：2012年04月02日
*＜機能概要＞
*　会計用入金データ抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/04/02   富士通		新規作成
*	v4.00		2012/12/12   FJ）清水	【ST4-2012-0000161、ST4-2012-0000162】性能改善
*	v41.00.00	2019/05/16   FJ）塩津	【IT1-2019-0000050】会計用債権回収委託データ出力不正
*********************************************************************/
package eo.business.service;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatSchdlUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatACIFM143;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACKaikNkinDataChsht extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 会計計上月:（会計処理日） */
	private String kaikYm = null;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][opeDate=" + super.opeDate + "]");
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][freeItem=" + super.freeItem + "]");
		
		// 会計計上月を取得
		JACbatSchdlUtil schdlUtil = new JACbatSchdlUtil(commonItem);
		this.kaikYm = schdlUtil.getBillDate(super.opeDate, super.freeItem);
		schdlUtil.close();
		
		assert 	this.kaikYm != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][kaikYm=" + this.kaikYm + "]") : true;
		
		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;
		
		// 会計用入金データ作成
		JBSbatOutputItem outputItem = createOutput(inMap);
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 会計用売掛金調整情報を作成し、出力します。
	 * @param inMap 		入力電文
	 * @return outputItem	出力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private JBSbatOutputItem createOutput(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][createOutput]");
		
		// 会計用入金データ
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		
		// 会計計上月
		inMap.setString(JBSbatACIFM143.KAIK_YM, this.kaikYm);
		
		//v41.00.00 2019/05/16 Mod Start
		// レコード出力判定フラグの設定
		//inMap.setOutFlg(true);
		
		// 出力レコード情報を設定する
		//assert 	inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][createOutput][inMap=" + inMap.getMap().toString() + "]") : true;
		//outputItem.addOutMapList(inMap);
		
		//assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createOutput]");
		//return outputItem;
		
		if(inMap.getString(JBSbatACIFM143.SKNKSITKCM_CD) != null )
		{
			// 債権回収委託会社コードに紐づく会計種別詳細コードのみを出力対象にする
			if((inMap.getString(JBSbatACIFM143.SKNKSITKCM_CD).equals("01") & inMap.getString(JBSbatACIFM143.KAIK_UCWK_SBT_DTL_CD).equals("1410"))
					|| (inMap.getString(JBSbatACIFM143.SKNKSITKCM_CD).equals("02") & inMap.getString(JBSbatACIFM143.KAIK_UCWK_SBT_DTL_CD).equals("1420"))
					|| (inMap.getString(JBSbatACIFM143.SKNKSITKCM_CD).equals("03") & inMap.getString(JBSbatACIFM143.KAIK_UCWK_SBT_DTL_CD).equals("1430")))
			{
				// レコード出力判定フラグの設定
				inMap.setOutFlg(true);
				
				// 出力レコード情報を設定する
				assert 	inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][createOutput][inMap=" + inMap.getMap().toString() + "]") : true;
				outputItem.addOutMapList(inMap);
			
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createOutput]");
				return outputItem;
			}
			else
				inMap.setOutFlg(false);
				return null;
		}
		else
			// レコード出力判定フラグの設定
			inMap.setOutFlg(true);
			
			// 出力レコード情報を設定する
			assert 	inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][createOutput][inMap=" + inMap.getMap().toString() + "]") : true;
			outputItem.addOutMapList(inMap);
		
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createOutput]");
			return outputItem;
		//v41.00.00 2019/05/16 Mod End
	}
	
}
