/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKTvUcwkInfFileSks
*	ソースファイル名	：JBSbatKKTvUcwkInfFileSks.java
*	作成者				：富士通　
*	作成日				：2013年05月16日
*＜機能概要＞
*　テレビ主契約内訳番号ファイル作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/05/16   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFM020;
import eo.business.util.file.JBSbatKKIFM257;
import eo.business.util.file.JBSbatKKIFM468;
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;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKTvUcwkInfFileSks extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * ｅｏ光テレビ
	 */
	private static final String EO_TV = "11";

	/**
	 * ｅｏ光テレビ（ＫＣＮ）
	 */
	private static final String EO_TV_KCN = "12";

	/**
	 * ｅｏ光テレビ（再送信）
	 */
	private static final String EO_TV_RTY = "13";

	/**
	 * 料金コースコード（再送信）
	 */
	private static final String PCRS_TV_RTY = "A23";

	/**
	 * 料金コースコード（地デジ・ＢＳコース）
	 */
	private static final String PCRS_TV_CDG_BS = "A37";

	/**
	 * 料金コースコード（再送信（地デジ・ＢＳコース）　）
	 */
	private static final String PCRS_TV_RTY_CDG_BS = "A75";

	/**
	 * 前レコードサービス契約番号
	 */
	private String pre_svc_kei_no = "";

	/**
	 * 主契約判定値
	 */
	private String main_kei_no = "99";

	/**
	 * 出力判定
	 */
	private boolean out_flg = false;

	/**
	 * 主契約情報保持変数
	 */
	private String SVC_KEI_NO = "";
	private String SVC_KEI_UCWK_NO = "";
	private String PCRS_CD = "";
	private String PPLAN_CD = "";

	/**
	 * ファイルレコード件数
	 */
	private int recordMax = 0;

	/**
	 * ファイル読込件数カウント
	 */
	private int readCnt = 0;

	/**
	 * ファイル読込件数カウント
	 */
	private ArrayList<JBSbatServiceInterfaceMap> out_map_list = new ArrayList<JBSbatServiceInterfaceMap>();
	
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		//フリー項目を取得する。
		recordMax = Integer.parseInt(super.freeItem);
		super.logPrint.printDebugLog("ファイルレコード件数:" + recordMax);
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");
		
		//ファイル読み込み件数カウントアップ
		readCnt++;
		
		// 料金グループコードがＴＶかチェックする。
		if (inMap.getString(JBSbatKKIFM020.PRC_GRP_CD).equals(EO_TV) ||
			inMap.getString(JBSbatKKIFM020.PRC_GRP_CD).equals(EO_TV_KCN) ||
			inMap.getString(JBSbatKKIFM020.PRC_GRP_CD).equals(EO_TV_RTY))
		{
			// サービス契約番号をチェックし、同じ場合主契約判定を行う。
			if (pre_svc_kei_no.equals(inMap.getString(JBSbatKKIFM020.SVC_NO))) {
				
				// 主契約を判定するため、料金プランコード下1桁を比較する。
				if (main_kei_no.compareTo(inMap.getString(JBSbatKKIFM020.PRC_SVC_CD).trim().substring(5,6)) > 0) {
					
					main_kei_no = inMap.getString(JBSbatKKIFM020.PRC_SVC_CD).trim().substring(5,6);
					
					// 入出力インタフェースオブジェクトを生成
					JBSbatServiceInterfaceMap out_map = new JBSbatServiceInterfaceMap();
					// 出力項目を設定する
					// サービス契約番号
					out_map.setString(JBSbatKKIFM468.SVC_KEI_NO, inMap.getString(JBSbatKKIFM020.SVC_NO));
					// サービス契約内訳番号
					out_map.setString(JBSbatKKIFM468.SVC_KEI_UCWK_NO, inMap.getString(JBSbatKKIFM020.JUZOKU_SVC_NO));
					// 料金コースコード
					out_map.setString(JBSbatKKIFM468.PCRS_CD, inMap.getString(JBSbatKKIFM020.PCRS_CD));
					// 料金プランコード
					out_map.setString(JBSbatKKIFM468.PPLAN_CD, inMap.getString(JBSbatKKIFM020.PRC_SVC_CD).trim());
					//出力フラグを設定
					out_map.setOutFlg(true);
					out_map_list.remove(out_map_list.size() - 1);
					out_map_list.add(out_map);
				}
			}
			else
			{
				// 入出力インタフェースオブジェクトを生成
				JBSbatServiceInterfaceMap out_map = new JBSbatServiceInterfaceMap();
				// 出力項目を設定する
				// サービス契約番号
				out_map.setString(JBSbatKKIFM468.SVC_KEI_NO, inMap.getString(JBSbatKKIFM020.SVC_NO));
				// サービス契約内訳番号
				out_map.setString(JBSbatKKIFM468.SVC_KEI_UCWK_NO, inMap.getString(JBSbatKKIFM020.JUZOKU_SVC_NO));
				// 料金コースコード
				out_map.setString(JBSbatKKIFM468.PCRS_CD, inMap.getString(JBSbatKKIFM020.PCRS_CD));
				// 料金プランコード
				out_map.setString(JBSbatKKIFM468.PPLAN_CD, inMap.getString(JBSbatKKIFM020.PRC_SVC_CD).trim());
				//出力フラグを設定
				out_map.setOutFlg(true);
				out_map_list.add(out_map);
				// 前レコードサービス契約番号更新
				pre_svc_kei_no = inMap.getString(JBSbatKKIFM020.SVC_NO);
				main_kei_no = inMap.getString(JBSbatKKIFM020.PRC_SVC_CD).trim().substring(5,6);
			}
		}
		
		// 最終レコードの場合
		if(readCnt == recordMax)
		{
			// 出力共通電文を生成する
			JBSbatOutputItem out_item = new JBSbatOutputItem();
			for(int i = 0 ; i < out_map_list.size() ; i++)
			{
				String PCRS_CD = out_map_list.get(i).getString(JBSbatKKIFM020.PCRS_CD);
				// 料金コースコードが地デジBS/再送信の場合は出力しない
				if(!PCRS_CD.equals(PCRS_TV_RTY) 
						&& !PCRS_CD.equals(PCRS_TV_CDG_BS) 
						&& !PCRS_CD.equals(PCRS_TV_RTY_CDG_BS))
				{
					//出力共通電文に入出力インターフェースを設定する。
					out_item.addOutMapList(out_map_list.get(i));
				}
			}
			return out_item;
		}

		super.logPrint.printDebugLog("execute_END");
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
