/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACKaikUkAdjInfChsht
*	ソースファイル名	：JBSbatACKaikUkAdjInfChsht.java
*	作成者				：富士通　
*	作成日				：2012年03月23日
*＜機能概要＞
*　会計用売掛金調整情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/03/23   富士通		新規作成
*	v41.00.00	2019/04/04   FJ)寺園	【ANK-3482-00-00 】会計帳票の件数カウント方法変更
*********************************************************************/
package eo.business.service;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatSchdlUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatACIFM142;
import eo.business.util.table.JBSbatAC_T_ICJKN;
import eo.business.util.table.JBSbatCH_T_SEIKY;
import eo.common.constant.JACStrConst;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACKaikUkAdjInfChsht 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, JACStrConst.EVENT_CD_KAIK_SHORI_YMD);
		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 = new JBSbatOutputItem();
		
		//会計用売掛金調整情報を出力
		createOutput(inMap, outputItem);
		
		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 		入力電文
	 * @param outputItem	出力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void createOutput(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][createOutput]");
		
		// 会計用売掛金調整情報
		JBSbatServiceInterfaceMap outputMap = new JBSbatServiceInterfaceMap();
//v41.00.00 ADD START
		String cnt = JACStrConst.CNT_ZERO;
//v41.00.00 ADD END
		
		// 会計内訳種別コード
		outputMap.setString(JBSbatACIFM142.KAIK_UCWK_SBT_CD, super.freeItem);
		// 会計内訳種別詳細コード
		outputMap.setString(JBSbatACIFM142.KAIK_UCWK_SBT_DTL_CD, JACStrConst.KARA_MOJI);
		// 請求契約番号
		outputMap.setString(JBSbatACIFM142.SEIKY_KEI_NO, inMap.getString(JBSbatAC_T_ICJKN.SEIKY_KEI_NO));
		// 会計計上月
		outputMap.setString(JBSbatACIFM142.KAIK_YM, this.kaikYm);
		// 会計内訳コード
		outputMap.setString(JBSbatACIFM142.KAIK_UCWK_CD, JACStrConst.KARA_MOJI);
		
		// 料金グループコード
		// 料金コースコード
		// 料金サービスコード
		// 料金項目コード
		{
			String trgtPrcGrpCd = inMap.getString(JBSbatAC_T_ICJKN.TRGT_PRC_GRP_CD);
			String trgtPcrsCd = inMap.getString(JBSbatAC_T_ICJKN.TRGT_PCRS_CD);
			String trgtPrcSvcCd = inMap.getString(JBSbatAC_T_ICJKN.TRGT_PRC_SVC_CD);
			String trgtPrcKmkCd = inMap.getString(JBSbatAC_T_ICJKN.TRGT_PRC_KMK_CD);
			if (JACStrConst.PRC_GRP_CD_SP.equals(trgtPrcGrpCd)
				&& JACStrConst.PCRS_CD_SP.equals(trgtPcrsCd)
				&& JACStrConst.PRC_SVC_CD_SP.equals(trgtPrcSvcCd)
				&& JACStrConst.PRC_KMK_CD_SP.equals(trgtPrcKmkCd))
			{
				/* 対象料金グループコード、対象料金コースコード、
				 * 対象料金サービスコード、対象料金項目コードが未設定の場合 */
				outputMap.setString(JBSbatACIFM142.PRC_GRP_CD, inMap.getString(JBSbatAC_T_ICJKN.PRC_GRP_CD));
				outputMap.setString(JBSbatACIFM142.PCRS_CD, inMap.getString(JBSbatAC_T_ICJKN.PCRS_CD));
				outputMap.setString(JBSbatACIFM142.PRC_SVC_CD, inMap.getString(JBSbatAC_T_ICJKN.PRC_SVC_CD));
				outputMap.setString(JBSbatACIFM142.PRC_KMK_CD, inMap.getString(JBSbatAC_T_ICJKN.PRC_KMK_CD));
//v41.00.00 ADD START
//				追加の場合はプラス1
				cnt = JACStrConst.CNT_ONE;
//v41.00.00 ADD END
				
			}
			else
			{
				// 上記以外の場合
				outputMap.setString(JBSbatACIFM142.PRC_GRP_CD, trgtPrcGrpCd);
				outputMap.setString(JBSbatACIFM142.PCRS_CD, trgtPcrsCd);
				outputMap.setString(JBSbatACIFM142.PRC_SVC_CD, trgtPrcSvcCd);
				outputMap.setString(JBSbatACIFM142.PRC_KMK_CD, trgtPrcKmkCd);
//v41.00.00 ADD START
				if (JACStrConst.PRC_GRP_CD_SP.equals(inMap.getString(JBSbatAC_T_ICJKN.PRC_GRP_CD))
						&& JACStrConst.PCRS_CD_SP.equals(inMap.getString(JBSbatAC_T_ICJKN.PCRS_CD))
						&& JACStrConst.PRC_SVC_CD_SP.equals(inMap.getString(JBSbatAC_T_ICJKN.PRC_SVC_CD))
						&& JACStrConst.PRC_KMK_CD_SP.equals(inMap.getString(JBSbatAC_T_ICJKN.PRC_KMK_CD)))
					{
//						削除の場合はマイナス1
						cnt = JACStrConst.CNT_MINUS_ONE;
					}
//v41.00.00 ADD END
			}
		}
		// コンビニ支払予定年月日
		outputMap.setString(JBSbatACIFM142.CVSTORE_PAY_RSV_YMD, JACStrConst.KARA_MOJI);
		// 件数
//v41.00.00 MOD START
//		outputMap.setString(JBSbatACIFM142.CNT, JACStrConst.CNT_ONE);
		outputMap.setString(JBSbatACIFM142.CNT, cnt);
//v41.00.00 MOD END
		// 金額
		outputMap.setString(JBSbatACIFM142.AMNT, inMap.getBigDecimal(JBSbatAC_T_ICJKN.ICJKN_PRC));
		// 請求番号
		outputMap.setString(JBSbatACIFM142.SEIKY_NO, inMap.getString(JBSbatCH_T_SEIKY.SEIKY_NO));
		// 料金月
		outputMap.setString(JBSbatACIFM142.PRC_MON, inMap.getString(JBSbatAC_T_ICJKN.SEIKY_YM));
		// サービス契約番号
		outputMap.setString(JBSbatACIFM142.SVC_KEI_NO, inMap.getString(JBSbatAC_T_ICJKN.SVC_KEI_NO));
		// 支払方法
		outputMap.setString(JBSbatACIFM142.PAY_WAY, inMap.getString(JBSbatCH_T_SEIKY.SEIKY_WAY_CD));
		// クレジットカード会社コード
		outputMap.setString(JBSbatACIFM142.CRECARD_COMP_CD, JACStrConst.KARA_MOJI);
		// コンテンツサービスコード
		outputMap.setString(JBSbatACIFM142.CONT_SVC_CD, JACStrConst.KARA_MOJI);
		// 企業識別コード
		outputMap.setString(JBSbatACIFM142.COMP_SKBT_CD, JACStrConst.KARA_MOJI);
		
		// レコード出力判定フラグの設定
		outputMap.setOutFlg(true);

		// 出力レコード情報を設定する
		outputItem.addOutMapList(outputMap);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createOutput]");
	}
}
