/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKKeiSvcNmFuka
*	ソースファイル名	：JBSbatKKKeiSvcNmFuka.java
*	作成者				：富士通　
*	作成日				：2011年07月19日
*＜機能概要＞
*　契約サービス名付加部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/19	FJ）庭山	新規作成
*	v2.00.00	2012/05/22  FJ)神吉		ST2-2012-0000891障害対応
*	v2.01.00	2012/06/02	FJ）倉上	【ST1-2012-0000064】障害対応
*	v3.00.00	2012/05/10	FJ）中作	【ANK-0050-00-00】対応
*	v3.01.00	2013/03/21  FJ）神田 	【IT1-2013-0000498】障害対応
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFE084;
import eo.business.util.file.JBSbatKKIFM056;
import eo.business.util.table.JBSbatKK_M_PPLAN;
import eo.business.util.table.JBSbatKK_M_PRC_GRP;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKKeiSvcNmFuka extends JBSbatBusinessService
{
	/**
	 * 囲み文字（"）
	 */
	private static final String MOJI_D = "\"";

	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(料金グループ)*/
	private static final String D_TBL_NAME_KK_M_PRC_GRP = "KK_M_PRC_GRP";
	
	/** テーブル(料金プラン)*/
	private static final String D_TBL_NAME_KK_M_PPLAN = "KK_M_PPLAN";
	
	/** SQL定義キー(KK_SELECT_002)*/
	private static final String KK_M_PRC_GRP_KK_SELECT_002 = "KK_SELECT_002";

	/** テーブルアクセスクラス(料金グループ)*/
	private JBSbatSQLAccess db_KK_M_PRC_GRP = null;
	
	/** テーブルアクセスクラス(料金プラン)*/
	private JBSbatSQLAccess db_KK_M_PPLAN = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/**
	 * 項番
	 */
	private int koban = 0;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_M_PRC_GRP = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_PRC_GRP);
		db_KK_M_PPLAN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_PPLAN);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");

		JBSbatOutputItem out_bean = new JBSbatOutputItem();
		JBSbatServiceInterfaceMap out_map = new JBSbatServiceInterfaceMap();
		JBSbatCommonDBInterface db_map = null;
		String[] param = new String[4];
		String value = "";

		// バインド変数を設定します
		param[0] = super.opeDate;
		param[1] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM056.PCRS_CD));
		param[2] = super.opeDate;
		param[3] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM056.PRC_GRP_CD));

		// 料金情報を検索します
		executeKK_M_PRC_GRP_KK_SELECT_002(param);
		db_map = db_KK_M_PRC_GRP.selectNext();
		
		if (db_map != null)
		{
			// 検索結果有りの場合、コース名を編集します
			value = JBSbatStringUtil.Rtrim(db_map.getString(JBSbatKK_M_PRC_GRP.PRC_GRP_NM));
			
			// 料金プランを検索し、料金プラン名を取得します
			String[] whereParam = new String[2];
			whereParam[0] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM056.PCRS_CD));
			whereParam[1] = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM056.PPLAN_CD));
			JBSbatCommonDBInterface db_map1 = executeKK_M_PPLAN_PKSELECT(whereParam);

			if (db_map1 != null)
			{
				value = value + "／" + JBSbatStringUtil.Rtrim(db_map1.getString(JBSbatKK_M_PPLAN.PPLAN_NM));
			}
			
			// 20桁より大きい場合はカットする。
			if(20 < value.length())
			{
				value = value.substring(0, 20);
			}
		}

		// 項番を編集します
		koban++;
		
		out_map.setString(JBSbatKKIFE084.KNO, editStringCSV(String.valueOf(koban)));
		out_map.setString(JBSbatKKIFE084.SVC_KEI_NO, editStringCSV(JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM056.SVC_KEI_NO))));
		out_map.setString(JBSbatKKIFE084.SEIKY_KEI_NO, editStringCSV(JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM056.SEIKY_KEI_NO))));
		
		// 契約者名を取得、20桁より大きい場合はカットする。
		String keisha_nm = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM056.KEISHA_NM));
		if(20 < keisha_nm.length())
		{
			keisha_nm = keisha_nm.substring(0, 20);
		}
		out_map.setString(JBSbatKKIFE084.KEISHA_NM, editStringCSV(keisha_nm));
		out_map.setString(JBSbatKKIFE084.KEI_SVC, editStringCSV(value));
		
		// 取扱区分を取得、20桁より大きい場合はカットする。
		String toriatsu_div = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM056.TORIATSU_DIV));
		if(20 < toriatsu_div.length())
		{
			toriatsu_div = toriatsu_div.substring(0, 20);
		}
		out_map.setString(JBSbatKKIFE084.TORIATSU_DIV, editStringCSV(toriatsu_div));
		out_map.setString(JBSbatKKIFE084.HOSEI_YMD, editStringCSV(JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM056.HOSEI_YMD))));
		
		/* ++++++++++ v2.01.00 修正開始 ++++++++++ */
		// out_map.setString(JBSbatKKIFE084.SVC_STA_YMD, editStringCSV(inMap.getString(JBSbatKKIFM056.SVC_STA_YMD)));
		out_map.setString(JBSbatKKIFE084.SVC_STA_YMD, editStringCSV(editDate(JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM056.SVC_STA_YMD)))));
		/* ++++++++++ v2.01.00 修正終了 ++++++++++ */
		
		out_map.setString(JBSbatKKIFE084.CHRG_STA_HOSEI_AF_YMD, editStringCSV(JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM056.CHRG_STA_HOSEI_AF_YMD))));
		out_map.setString(JBSbatKKIFE084.CHRG_STA_HOSEI_BF_YMD, editStringCSV(JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM056.CHRG_STA_HOSEI_BF_YMD))));
		out_map.setString(JBSbatKKIFE084.RRKS_TEL, editStringCSV(JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM056.RRKS_TEL))));

		// 出力フラグを設定します
		out_map.setOutFlg(true);
		out_bean.addOutMapList(out_map);

		super.logPrint.printDebugLog("execute_END");

		return out_bean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_M_PRC_GRP.close();
		db_KK_M_PPLAN.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	予約適用年月日
	 *		 	料金コースコード
	 *		 	予約適用年月日
	 *		 	料金グループコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_PRC_GRP_KK_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_KK_M_PRC_GRP.selectBySqlDefine(paramList, KK_M_PRC_GRP_KK_SELECT_002);
	}
	
	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	PCRS_CD
	 *		 	PPLAN_CD
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKK_M_PPLAN_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("PCRS_CD", whereParam[0]);
		whereMap.setValue("PPLAN_CD", whereParam[1]);

		// DBアクセスを実行します
		return db_KK_M_PPLAN.selectByPrimaryKeys(whereMap);
	}

	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 文字列に囲み文字を付加します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.文字列の前後に囲み文字を追加します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param data　編集する文字列。
	 * @return String　編集後文字列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String editStringCSV(String data) throws Exception
	{
		StringBuffer value = new StringBuffer();

		value.append(MOJI_D);
		value.append(data);
		value.append(MOJI_D);

		return value.toString();
	}
	
	/**
	 * 年月日（YYYYMMDD）を"YYYY.MM.DD"形式に編集します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.年月日を"YYYY.MM.DD"形式にします。<br>
	 *
	 * </pre>
	 * <p>
	 * @param data　編集する年月日。
	 * @return String　編集後年月日。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String editDate(String data) throws Exception
	{
		StringBuffer value = new StringBuffer();
		
		if (data == null || "".equals(data))
		{
			return "";
		}
		
		value.append(data.subSequence(2, 4));
		value.append(".");
		value.append(data.subSequence(4, 6));
		value.append(".");
		value.append(data.subSequence(6, 8));
		
		return value.toString();
	}
}
