/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKTvUcwkInfFileHuka
*	ソースファイル名	：JBSbatKKTvUcwkInfFileHuka.java
*	作成者				：富士通　
*	作成日				：2013年05月16日
*＜機能概要＞
*　テレビ主契約内訳番号不可部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/05/16   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
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;
import eo.framework.util.JBSbatCheckUtil;
import eo.business.common.JBSbatMatchServiceInterface;
import eo.business.util.file.JBSbatKKIFM019;
import eo.business.util.file.JBSbatKKIFM020;
import eo.business.util.file.JBSbatKKIFM247;
import eo.business.util.file.JBSbatKKIFM468;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKTvUcwkInfFileHuka extends JBSbatBusinessService implements JBSbatMatchServiceInterface
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** キーマッチ処理フラグ*/
	private boolean matchProcFlg;

	/** マスタファイル処理フラグ*/
	private boolean mastProcFlg;

	/** トランファイル処理フラグ*/
	private boolean tranProcFlg;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param mastMap　入力電文
	 * @param tranMap　入力電文
	 * @param outputInItem  入力情報
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
        super.logPrint.printDebugLog("execute:start");
        
	    if (mastMap == null && tranMap != null) {
	        // 入力Ｍのみnullの場合
	        this.setTranProcFlg(true);
	    } else if (mastMap != null && tranMap == null) {
	        // 入力Ｔのみnullの場合
	        this.setMastProcFlg(true);
	        // 入力Ｍをファイル出力
	        JBSbatServiceInterfaceMap outMap = setOutMap(mastMap, mastMap.getString(JBSbatKKIFM020.JUZOKU_SVC_NO));
        	outMap.setOutFlg(true);
        	outputInItem.addOutMapList(outMap);
	    } else {
	        // 入力Ｔ、入力Ｍが共にnullでない場合
	        // キー情報取得
	        String mastSvcKeiNo = mastMap.getString(JBSbatKKIFM020.SVC_NO);
	        String mastPcrsCd = mastMap.getString(JBSbatKKIFM020.PCRS_CD);
	        String tranSvcKeiNo = tranMap.getString(JBSbatKKIFM468.SVC_KEI_NO);
	        String tranPcrsCd = tranMap.getString(JBSbatKKIFM468.PCRS_CD);

	        // マッチングキー（マスタ）を作成
	        super.logPrint.printDebugLog("mastSvcKeiNo:" + mastSvcKeiNo);
	        super.logPrint.printDebugLog("mastPcrsCd:" + mastPcrsCd);
	        super.logPrint.printDebugLog("tranSvcKeiNo:" + tranSvcKeiNo);
	        super.logPrint.printDebugLog("tranPcrsCd:" + tranPcrsCd);
	        if (mastSvcKeiNo.toString().compareTo(tranSvcKeiNo.toString()) == 0) {
	            // 入力Ｍ = 入力Ｔ
	            this.setMastProcFlg(true);
	            
	            String strJUZOKU_SVC_NO = mastMap.getString(JBSbatKKIFM020.JUZOKU_SVC_NO);
		        super.logPrint.printDebugLog("strJUZOKU_SVC_NO:" + strJUZOKU_SVC_NO);
	            // 従属番号・料金コースチェック
	            if(strJUZOKU_SVC_NO.equals("") && mastPcrsCd.toString().compareTo(tranPcrsCd.toString()) == 0)
	            {
	            	// 従属番号未設定・料金コースコード一致の場合、入力Ｔより従属番号（サービス契約内訳番号）取得
	            	strJUZOKU_SVC_NO = tranMap.getString(JBSbatKKIFM468.SVC_KEI_UCWK_NO);
			        super.logPrint.printDebugLog("strJUZOKU_SVC_NO:" + strJUZOKU_SVC_NO);
	            }
	            // 出力情報生成
		        JBSbatServiceInterfaceMap outMap = setOutMap(mastMap, strJUZOKU_SVC_NO);
	        	outMap.setOutFlg(true);
	        	outputInItem.addOutMapList(outMap);
	            
	        } else if (mastSvcKeiNo.toString().compareTo(tranSvcKeiNo.toString()) < 0) {
	            // 入力Ｍ < 入力Ｔ
	            this.setMastProcFlg(true);
		        // 入力Ｍをファイル出力
		        JBSbatServiceInterfaceMap outMap = setOutMap(mastMap, mastMap.getString(JBSbatKKIFM020.JUZOKU_SVC_NO));
	        	outMap.setOutFlg(true);
	        	outputInItem.addOutMapList(outMap);
	        } else {
	            // 入力Ｍ > 入力Ｔ
	            this.setTranProcFlg(true);
	        }
	    	
	    }
        super.logPrint.printDebugLog("execute:end");
	    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;
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 出力情報設定
	 * @param mastMap　入力電文
	 * @param strJUZOKU_SVC_NO　従属サービス番号
	 * @return JBSbatServiceInterfaceMap 出力情報
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setOutMap(JBSbatServiceInterfaceMap mastMap, String strJUZOKU_SVC_NO) throws Exception
	{
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 料金グループコード
		outMap.set(JBSbatKKIFM020.PRC_GRP_CD, mastMap.getString(JBSbatKKIFM020.PRC_GRP_CD));
		// 料金コースコード
		outMap.set(JBSbatKKIFM020.PCRS_CD, mastMap.getString(JBSbatKKIFM020.PCRS_CD));
		// 料金サービスコード
		outMap.set(JBSbatKKIFM020.PRC_SVC_CD, mastMap.getString(JBSbatKKIFM020.PRC_SVC_CD));
		// 整理番号
		outMap.set(JBSbatKKIFM020.SEIRI_NO, mastMap.getString(JBSbatKKIFM020.SEIRI_NO));
		// サービス番号
		outMap.set(JBSbatKKIFM020.SVC_NO, mastMap.getString(JBSbatKKIFM020.SVC_NO));
		// 従属サービス番号
		outMap.set(JBSbatKKIFM020.JUZOKU_SVC_NO, strJUZOKU_SVC_NO);
		// 請求契約番号
		outMap.set(JBSbatKKIFM020.SEIKY_KEI_NO, mastMap.getString(JBSbatKKIFM020.SEIKY_KEI_NO));
		// 割引サービス契約番号
		outMap.set(JBSbatKKIFM020.WRIB_SVC_KEI_NO, mastMap.getString(JBSbatKKIFM020.WRIB_SVC_KEI_NO));
		// サービス開始日
		outMap.set(JBSbatKKIFM020.SVC_STAYMD, mastMap.getString(JBSbatKKIFM020.SVC_STAYMD));
		// サービス解約日
		outMap.set(JBSbatKKIFM020.SVC_DSL_YMD, mastMap.getString(JBSbatKKIFM020.SVC_DSL_YMD));
		// サービス解約理由
		outMap.set(JBSbatKKIFM020.SVC_DLRE_CD, mastMap.getString(JBSbatKKIFM020.SVC_DLRE_CD));
		// サービス回復日
		outMap.set(JBSbatKKIFM020.KAIHK_YMD, mastMap.getString(JBSbatKKIFM020.KAIHK_YMD));
		// サービスキャンセル日
		outMap.set(JBSbatKKIFM020.SVC_CANCEL_YMD, mastMap.getString(JBSbatKKIFM020.SVC_CANCEL_YMD));
		// サービス休止日
		outMap.set(JBSbatKKIFM020.SVC_PAUSE_YMD, mastMap.getString(JBSbatKKIFM020.SVC_PAUSE_YMD));
		// サービス休止解除日
		outMap.set(JBSbatKKIFM020.SVC_PAUSE_RLS_YMD, mastMap.getString(JBSbatKKIFM020.SVC_PAUSE_RLS_YMD));
		// サービス利用不可開始日
		outMap.set(JBSbatKKIFM020.USE_FAIL_STAYMD, mastMap.getString(JBSbatKKIFM020.USE_FAIL_STAYMD));
		// サービス利用不可終了日
		outMap.set(JBSbatKKIFM020.USE_FAIL_ENDYMD, mastMap.getString(JBSbatKKIFM020.USE_FAIL_ENDYMD));
		// 課金開始日
		outMap.set(JBSbatKKIFM020.CHRG_STAYMD, mastMap.getString(JBSbatKKIFM020.CHRG_STAYMD));
		// 初回課金開始日
		outMap.set(JBSbatKKIFM020.FIRST_CHRG_STAYMD, mastMap.getString(JBSbatKKIFM020.FIRST_CHRG_STAYMD));
		// 課金終了日
		outMap.set(JBSbatKKIFM020.CHRG_ENDYMD, mastMap.getString(JBSbatKKIFM020.CHRG_ENDYMD));
		// サービス継続月数
		outMap.set(JBSbatKKIFM020.SVC_KZK_MON_CNT, mastMap.get(JBSbatKKIFM020.SVC_KZK_MON_CNT));
		// サービス継続日数
		outMap.set(JBSbatKKIFM020.SVC_KZK_DAY_CNT, mastMap.get(JBSbatKKIFM020.SVC_KZK_DAY_CNT));
		// 課金継続月数
		outMap.set(JBSbatKKIFM020.CHRG_KZK_MON_CNT, mastMap.get(JBSbatKKIFM020.CHRG_KZK_MON_CNT));
		// 課金継続日数
		outMap.set(JBSbatKKIFM020.CHRG_KZK_DAY_CNT, mastMap.get(JBSbatKKIFM020.CHRG_KZK_DAY_CNT));
		// 契約数
		outMap.set(JBSbatKKIFM020.KEI_CNT, mastMap.get(JBSbatKKIFM020.KEI_CNT));
		// 月中最大契約数
		outMap.set(JBSbatKKIFM020.MON_MAX_KEI_CNT, mastMap.get(JBSbatKKIFM020.MON_MAX_KEI_CNT));
		// 相対区分
		outMap.set(JBSbatKKIFM020.AITAI_DIV, mastMap.getString(JBSbatKKIFM020.AITAI_DIV));
		// 締め日
		outMap.set(JBSbatKKIFM020.SIME_DAY, mastMap.getString(JBSbatKKIFM020.SIME_DAY));
		// マンションＩＤ
		outMap.set(JBSbatKKIFM020.MANSION_ID, mastMap.getString(JBSbatKKIFM020.MANSION_ID));
		// 提供方式契約番号
		outMap.set(JBSbatKKIFM020.TK_HOSHIKI_KEI_NO, mastMap.getString(JBSbatKKIFM020.TK_HOSHIKI_KEI_NO));
		// 加入者契約支払方式コード
		outMap.set(JBSbatKKIFM020.KANYU_KEI_PAY_HOSHIKI_CD, mastMap.getString(JBSbatKKIFM020.KANYU_KEI_PAY_HOSHIKI_CD));
		// 総戸数
		outMap.set(JBSbatKKIFM020.TTL_KOSU, mastMap.getString(JBSbatKKIFM020.TTL_KOSU));
		
		return outMap;
	}
}
