/*********************************************************************
*  All Rights reserved,Copyright (c) Fujitsu ,2012					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKKeishaTypeMatch
*	ソースファイル名	：JBSbatKKKeishaTypeMatch.java
*	作成者				：富士通　
*	作成日				：2012年08月21日
*＜機能概要＞
*　契約者タイプ取得部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/08/21   富士通		新規作成
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JBSbatMatchServiceInterface;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFM019;
import eo.business.util.file.JBSbatKKIFM307;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKKzkOpSvKeiChtFileSks extends JBSbatBusinessService implements JBSbatMatchServiceInterface
{
	/** 契約数 */
	private static final int KEI_CNT = 1;

	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** キーマッチ処理フラグ*/
	private boolean matchProcFlg;

	/** マスタファイル処理フラグ*/
	private boolean mastProcFlg;

	/** トランファイル処理フラグ*/
	private boolean tranProcFlg;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** マスタマッチングキー項目名 */
	private String mastKeyName = "";
	
	/** トランマッチングキー項目名 */
	private String tranKeyName = "";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		String[] freeItems = commonItem.getFreeItem().split(JKKBatConst.S_PARAM_DELIM);
		
		// フリー項目[マスタキー]を設定
		mastKeyName = freeItems[0];

		// フリー項目[トランザクションキー]を設定
		tranKeyName = freeItems[1];

	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param mastMap　入力電文
	 * @param tranMap　入力電文
	 * @param outputInItem  入力情報
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
	    if (mastMap == null && tranMap != null) {
	        // 入力Ｍのみnullの場合
	        this.setTranProcFlg(true);

	    } else if (mastMap != null && tranMap == null) {
	        // 入力Ｔのみnullの場合
	        this.setMastProcFlg(true);
	    } else {
	        // 入力Ｔ、入力Ｍが共にnullでない場合
	        // キー情報取得
	        String mastSeikyKeiNo = mastMap.getString(mastKeyName);
	        String tranSeiKeiNo = tranMap.getString(tranKeyName);

	        // マッチングキー（マスタ）を作成

	        if (mastSeikyKeiNo.toString().compareTo(tranSeiKeiNo.toString()) == 0) {
	            // 入力Ｍ = 入力Ｔ
	            this.setMatchProcFlg(true);
	            // 出力情報生成
	            
				JBSbatServiceInterfaceMap outMap = setOutMap(mastMap, tranMap);
				outMap.setOutFlg(true);
				outputInItem.addOutMapList(outMap);
	            
	        } else if (mastSeikyKeiNo.toString().compareTo(tranSeiKeiNo.toString()) < 0) {
	            // 入力Ｍ < 入力Ｔ
	            this.setMastProcFlg(true);
	        } else {
	            // 入力Ｍ > 入力Ｔ
	            this.setTranProcFlg(true);
	            
	        }
	    }
	    return outputInItem;
	    /**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * @return mastProcFlg を戻します。
	 */
	public boolean isMastProcFlg()
	{
		return mastProcFlg;
	}

	/**
	 * @return matchProcFlg を戻します。
	 */
	public boolean isMatchProcFlg()
	{
		return matchProcFlg;
	}

	/**
	 * @return tranProcFlg を戻します。
	 */
	public boolean isTranProcFlg()
	{
		return tranProcFlg;
	}

	/**
	 * @param mast_ProcFlg 設定する mastProcFlg。
	 */
	public void setMastProcFlg(boolean mast_ProcFlg)
	{
		this.mastProcFlg = mast_ProcFlg;
	}

	/**
	 * @param match_ProcFlg 設定する matchProcFlg。
	 */
	public void setMatchProcFlg(boolean match_ProcFlg)
	{
		this.matchProcFlg = match_ProcFlg;
	}

	/**
	 * @param tran_ProcFlg 設定する tranProcFlg。
	 */
	public void setTranProcFlg(boolean tran_ProcFlg)
	{
		this.tranProcFlg = tran_ProcFlg;
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	private JBSbatServiceInterfaceMap setOutMap(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap) throws Exception
	{
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 抽出契約区分
		outMap.setString(JBSbatKKIFM019.CHSHT_KEI_DIV, JKKBatConst.CHSHT_KEI_DIV_20);											//抽出契約区分
		// サービス契約番号
		outMap.set(JBSbatKKIFM019.SVC_KEI_NO, mastMap.getString(JBSbatKKIFM019.SVC_KEI_NO));
		// 整理番号
		outMap.set(JBSbatKKIFM019.SEIRI_NO, mastMap.getString(JBSbatKKIFM019.SEIRI_NO));		
		// サービスコード
		outMap.set(JBSbatKKIFM019.SVC_CD, mastMap.getString(JBSbatKKIFM019.SVC_CD));
		// 料金グループコード
		outMap.set(JBSbatKKIFM019.PRC_GRP_CD, mastMap.getString(JBSbatKKIFM019.PRC_GRP_CD));
		// 料金コースコード
		outMap.set(JBSbatKKIFM019.PCRS_CD, mastMap.getString(JBSbatKKIFM019.PCRS_CD));
		outMap.setString(JBSbatKKIFM019.PPLAN_CD, tranMap.getString(JBSbatKKIFM307.PPLAN_CD));								//料金プランコード
		outMap.setString(JBSbatKKIFM019.TRGT_KEI_SVC_CD, tranMap.getString(JBSbatKKIFM307.OP_SVC_CD));						//オプションサービスコード		
		outMap.setString(JBSbatKKIFM019.SVC_KEI_UCWK_NO, tranMap.getString(JBSbatKKIFM307.SVC_KEI_UCWK_NO));				//サービス契約内訳番号
		outMap.setString(JBSbatKKIFM019.OP_SVC_KEI_NO, tranMap.getString(JBSbatKKIFM307.OP_SVC_KEI_NO));					//オプションサービス契約番号
		outMap.setString(JBSbatKKIFM019.SVC_STAYMD, tranMap.getString(JBSbatKKIFM307.SVC_STAYMD));							//サービス開始年月日
		outMap.setString(JBSbatKKIFM019.SVC_CHRG_STAYMD, tranMap.getString(JBSbatKKIFM307.SVC_CHRG_STAYMD));				//サービス課金開始年月日
		outMap.setString(JBSbatKKIFM019.PLAN_STAYMD, tranMap.getString(JBSbatKKIFM307.PLAN_CHRG_STAYMD));					//プラン課金開始年月日
		outMap.setString(JBSbatKKIFM019.PLAN_ENDYMD, tranMap.getString(JBSbatKKIFM307.PLAN_CHRG_ENDYMD));					//プラン課金終了年月日
		outMap.setString(JBSbatKKIFM019.SVC_DSL_YMD, tranMap.getString(JBSbatKKIFM307.SVC_DSL_YMD));						//サービス解約年月日
		outMap.setString(JBSbatKKIFM019.SVC_DLRE_CD, tranMap.getString(JBSbatKKIFM307.SVC_DLRE_CD));						//サービス解約理由コード
		outMap.setString(JBSbatKKIFM019.PNLTY_HASSEI_CD, tranMap.getString(JBSbatKKIFM307.PNLTY_HASSEI_CD));	 			//違約金発生コード
		outMap.setString(JBSbatKKIFM019.PLAN_END_SBT_CD, tranMap.getString(JBSbatKKIFM307.PLAN_END_SBT_CD));	 			//プラン終了種別コード
		outMap.setString(JBSbatKKIFM019.KAIHK_YMD, tranMap.getString(JBSbatKKIFM307.KAIHK_YMD));							//回復年月日
		outMap.setString(JBSbatKKIFM019.SVC_ENDYMD, tranMap.getString(JBSbatKKIFM307.SVC_ENDYMD));							//サービス終了年月日
		outMap.setString(JBSbatKKIFM019.SVC_CHRG_ENDYMD, tranMap.getString(JBSbatKKIFM307.SVC_CHRG_ENDYMD));				//サービス課金終了年月日
		outMap.setString(JBSbatKKIFM019.IDO_DIV, tranMap.getString(JBSbatKKIFM307.IDO_DIV));								//異動区分
		outMap.setBigDecimal(JBSbatKKIFM019.KEI_CNT, KEI_CNT);																	//契約数
		outMap.setString(JBSbatKKIFM019.UPD_UNYO_YMD, tranMap.getString(JBSbatKKIFM307.UPD_UNYO_YMD));						//更新運用年月日
		
		// 休止・中断情報(中断レコードの場合には設定不要)
		if(!JBSbatKKConst.PAUSE_STP_CD_STP.equals(tranMap.getString(JBSbatKKIFM307.PAUSE_STP_CD)))
		{
			outMap.setString(JBSbatKKIFM019.PAUSE_STP_CD, tranMap.getString(JBSbatKKIFM307.PAUSE_STP_CD));						//休止中断コード
			outMap.setString(JBSbatKKIFM019.SVC_PAUSE_YMD, tranMap.getString(JBSbatKKIFM307.SVC_PAUSE_YMD));					//サービス休止年月日
			outMap.setString(JBSbatKKIFM019.SVC_PAUSE_PRC_TSTAYMD, tranMap.getString(JBSbatKKIFM307.SVC_PAUSE_CHRG_STA_YMD));	//サービス休止課金開始年月日
			outMap.setString(JBSbatKKIFM019.SVC_PAUSE_RLS_YMD, tranMap.getString(JBSbatKKIFM307.SVC_PAUSE_RLS_YMD));			//サービス休止解除年月日
		}

		// オプションサービス逓増料金項目対応
		outMap = setTeizoKmk(outMap, tranMap);

		return outMap;
	}
	
	/**
	 * <dd>メソッド名	：逓増料金項目対応
	 * <dd>メソッド説明	：1.サブタイプから取得された逓増項目の契約数量を設定します。
	 *                    2.後続処理(サービス契約情報サービス集約)用に逓増項目ごとに項目区分を設定します。
	 * @param  inMap     データ取得情報Map
	 * @param  outMap    編集前出力Map
	 * @return outMap    編集後出力Map
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap setTeizoKmk(JBSbatServiceInterfaceMap outMap, JBSbatServiceInterfaceMap tranMap) throws Exception 
	{
		String mltiseSessionCnt = tranMap.getString(JBSbatKKIFM307.MLTISE_SESSION_CNT);
		String cableGuideMskmCnt = tranMap.getString(JBSbatKKIFM307.CABLE_GUIDE_MSKM_CNT);
		// マルチセッション数
		if(null != mltiseSessionCnt && !"".equals(mltiseSessionCnt))
		{
			outMap.setBigDecimal(JBSbatKKIFM019.CAPA, tranMap.getString(JBSbatKKIFM307.MLTISE_SESSION_CNT));		//容量
			outMap.setString(JBSbatKKIFM019.TEIZO_KMK_DIV, JBSbatKKConst.TZKMK_MLTISE_SESSION_CNT);							//逓増項目区分
		}
		// ケーブルガイド誌申込数
		else if(null != cableGuideMskmCnt && !"".equals(cableGuideMskmCnt))
		{
			outMap.setBigDecimal(JBSbatKKIFM019.CAPA, tranMap.getString(JBSbatKKIFM307.CABLE_GUIDE_MSKM_CNT));		//容量
			outMap.setString(JBSbatKKIFM019.TEIZO_KMK_DIV, JBSbatKKConst.TZKMK_CABLE_GUIDE_MSKM_CNT);						//逓増項目区分
		}
		
		return outMap;
	}
}
