/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKBatEponSwchKjCaseFileSksi
*	ソースファイル名：JKKBatEponSwchKjCaseFileSksi.java
*	作成者			：富士通
*	日付			：2014年03月19日
*＜機能概要＞
*	設備切替工事依頼結果CASEファイル作成
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v8.00.00    2014/03/19  FJ）江藤    新規作成(【ANK-1813-00-00】EPON→GEPON交換工事本格実施に伴うシステム改修)
*   v10.00.00   2014/10/14  FJ) 阮      ANK-2278-00-00
*   v25.00.00   2016/04/06  FJ) 阮     【ANK-2768-00-00】Ｅ→Ｇ巻き取り時の多機能ＲＴorＶＡ出荷（富士通旧ＶＡ対応）
*
**********************************************************************/

package eo.business.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import eo.framework.item.JBSbatCommonItem;
import eo.framework.util.JBSbatBusinessFileUtil;

/**
 * 設備切替工事依頼結果CASEファイル作成を行います。
 * <br>
 * @author 富士通
 */
public class JKKBatEponSwchKjCaseFileSksi
{
	/** サービス契約番号 */
	public static final String SVC_KEI_NO = "SVC_KEI_NO";

	/** ファイル連携先ディレクトリ定義キー */
	private static final String CR_FILE_DIR_KEY = "CR_TWS_RK_FILE_DIR";

	/** ダブルクォーテーション*/
	private static final String S_DUBLLEQ = "\"";

	/** 改行コード */
	private static final String RETURN_CODE = "\r\n";

	/** 顧客タイプ */
	private static final String KOKYAKU_TYPE = "加入者";

	/** 状態 */
	private static final String JYOUTAI = "クローズ";

	/** ステータス */
	private static final String STATUS = "処理中";

	/** 受付者 */
	private static final String UKETSUKE = "OTHER_SYST";

	/** 担当者 */
	private static final String TANTOU = "OTHER_SYST";

	/** 受付種別 */
	private static final String UKETSUKE_SBT = "他システム";

	/** 業務パラメータ(タイトル) */
	private static final String TITLE_PARAM = "KK_SWCHKJ_CASE_TITLE";

// ANK-2278-00-00 GE-PON⇒GE-PON対応 2014/10/14 ADD START
	/** 業務パラメータ(タイトル_GEPON) */
	private static final String TITLE_PARAM_GG = "KK_GGSWKJ_CASE_TITLE";
// ANK-2278-00-00 GE-PON⇒GE-PON対応 2014/10/14 ADD END

	/** ファイル名(共通部) */
	private static final String FILE_NAME = "CASE_EQUIPSWCH_";
	
// ANK-2278-00-00 GE-PON⇒GE-PON対応 2014/10/14 ADD START
	/** PON種別コード */
	public static final String PON_SBT_CD = "PON_SBT_CD";
// ANK-2278-00-00 GE-PON⇒GE-PON対応 2014/10/14 ADD END

// ANK-2768-00-00 ADD START
	/** 不具合VA交換発生有無 */
	public static final String BUG_VA_CHANGE_UMU = "BUG_VA_CHANGE_UMU";
// ANK-2768-00-00 ADD END
	
	/**
	 * CASEファイル作成です。
	 * 
	 * @param cmnItem 業務共通電文
	 * @param arrayList 出力パラメータ情報
	 * @throws Exception 例外が発生した場合
	 */
	public static void sksiCaseFile(JBSbatCommonItem cmnItem, ArrayList<HashMap<String, Object>> arrayList) throws Exception
	{
		// ======= ▼▼▼ 整形した情報をCASEファイルへ出力する。 ▼▼▼ =======
		// ジョブＩＤ
		String strJobid = cmnItem.getJobid();
		// バッチ更新者ＩＤ
		String strBatchUserId = cmnItem.getBatchUserId();
		// ログにバッチ更新者ＩＤ設定
		cmnItem.getLogPrint().printDebugLog(strJobid + ":" + strBatchUserId);

		// 格納先ディレクトリ情報を取得する
		String sFileDir = JKKBatCommon.getApplicationConst(CR_FILE_DIR_KEY) + "/";
		// ファイル名に使用する日時情報(yyyymmddhhmmss)を取得する
		String sSysData = JKKBatCommon.getSysDateTime().substring(0, 14);
		// CASECSVファイル
		String caseCvsFile = sFileDir + FILE_NAME + sSysData + ".CSV";
		// CASE件数
		String caseCntFile = sFileDir + FILE_NAME + sSysData + "_CNT.TXT";
		// CASEフラグファイル
		String caseFlgFile = sFileDir + FILE_NAME + sSysData + "_FTP.FLG";

		// CASECSVファイル
		JBSbatBusinessFileUtil caseCvsFileObj = null;
		// CASE件数
		JBSbatBusinessFileUtil caseCntFileObj = null;
		// CASEフラグファイル
		JBSbatBusinessFileUtil caseFlgFileObj = null;

		// タイトルに設定する外部定義する項目を取得する
		String title = JKKBatCommon.getWorkParamSetteValue(cmnItem, TITLE_PARAM);
		
// ANK-2278-00-00 GE-PON⇒GE-PON対応 2014/10/14 ADD START
		String titleGepon = JKKBatCommon.getWorkParamSetteValue(cmnItem, TITLE_PARAM_GG);
// ANK-2278-00-00 GE-PON⇒GE-PON対応 2014/10/14 ADD END

		try
		{
			// 作成するデータがない場合はファイルを作成せずに終了する
			if (arrayList == null || arrayList.size() <= 0) {
				return;
			}

			// CASECSVファイルを生成する。
			caseCvsFileObj = JCCBatCommon.createBusinessFileUtil(caseCvsFile, JKKBatConst.SJIS, RETURN_CODE, JKKBatConst.CONMA);
			cmnItem.getLogPrint().printDebugLog(strJobid + ":CASECSVファイル名:" + caseCvsFile);

			for (int i = 0; i < arrayList.size(); i++)
			{
				HashMap<String, Object> outMap = arrayList.get(i);

				// サービス契約番号
				String svcKeiNo = (String) outMap.get(SVC_KEI_NO);
				
// ANK-2278-00-00 GE-PON⇒GE-PON対応 2014/10/14 ADD START
				// PON種別コードの取得を行う
				String ponSbtCd = (String) outMap.get(PON_SBT_CD);
// ANK-2278-00-00 GE-PON⇒GE-PON対応 2014/10/14 ADD END
// ANK-2768-00-00 ADD START
				// 不具合VA交換発生有無
				String vaChangeTgDate = (String) outMap.get(BUG_VA_CHANGE_UMU);
// ANK-2768-00-00 ADD END

				// CASEファイル出力リスト
				ArrayList<String> smlnMkjTsCjkDataList = new ArrayList<String>();
				outputVal(KOKYAKU_TYPE, smlnMkjTsCjkDataList); // 顧客タイプ
				outputVal(svcKeiNo, smlnMkjTsCjkDataList); // お客様ID
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // 顧客氏名
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // 顧客氏名（カナ）
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // 電話番号
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // 電話番号2
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // 郵便番号
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // 住所1
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // 住所2
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // 住所3
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // 性別
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // 生年月日
				outputVal(JYOUTAI, smlnMkjTsCjkDataList); // 状態
				outputVal(STATUS, smlnMkjTsCjkDataList); // ステータス
				outputVal(JKKBatCommon.formatDatetimeSS(JKKBatCommon.getSysDateTime()), smlnMkjTsCjkDataList); // 作成日時
				outputVal(UKETSUKE, smlnMkjTsCjkDataList); // 受付者
				outputVal(TANTOU, smlnMkjTsCjkDataList); // 担当者
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // キュー名
				outputVal(UKETSUKE_SBT, smlnMkjTsCjkDataList);// 受付種別
// ANK-2278-00-00 GE-PON⇒GE-PON対応 2014/10/14 ADD START
				// GEPON→GEPONの場合
				if ("2".equals(ponSbtCd)){
					outputVal(titleGepon, smlnMkjTsCjkDataList); // タイトル
				}
				// EPON→GEPONの場合
				else if ("1".equals(ponSbtCd)) {
// ANK-2768-00-00 MOD START
//					outputVal(title, smlnMkjTsCjkDataList); // タイトル
					if (vaChangeTgDate != null && !"".equals(vaChangeTgDate))
					{
						outputVal((title+vaChangeTgDate), smlnMkjTsCjkDataList); // タイトル
					}
					else
					{
						outputVal(title, smlnMkjTsCjkDataList); // タイトル
					}
// ANK-2768-00-00 MOD END
				}
// ANK-2278-00-00 GE-PON⇒GE-PON対応 2014/10/14 ADD END
// ANK-2278-00-00 GE-PON⇒GE-PON対応 2014/10/14 DEL START
//				outputVal(title, smlnMkjTsCjkDataList); // タイトル
// ANK-2278-00-00 GE-PON⇒GE-PON対応 2014/10/14 DEL END
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // カテゴリ１
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // カテゴリ２
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // カテゴリ３
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // カテゴリ４
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // カテゴリ５
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // カテゴリ６
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // カテゴリ７
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // カテゴリ８
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // カテゴリ９
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // カテゴリ１０
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // カテゴリ１１
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // 問い合わせ履歴
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // 問合せ客ID
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // eoID
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // 受付番号
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // エスカレーション日時
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // コールバック時間指定タイプ
				outputVal(JKKBatConst.SPACE, smlnMkjTsCjkDataList); // 業務個別組織コード

				// CASECSVファイルへ出力する。
				JCCBatCommon.printBusinessFileUtil(caseCvsFileObj, smlnMkjTsCjkDataList);
			}

			// CASE件数ファイルを生成する。
			caseCntFileObj = JCCBatCommon.createBusinessFileUtil(caseCntFile, JKKBatConst.SJIS, RETURN_CODE, JKKBatConst.SPACE);
			cmnItem.getLogPrint().printDebugLog(strJobid + ":CASE件数ファイル名:" + caseCntFile);

			// CASE件数ファイルへ出力する。
			JCCBatCommon.printBusinessFileUtil(caseCntFileObj, String.valueOf(arrayList.size()));

			// CASEフラグファイルを生成する。
			caseFlgFileObj = JCCBatCommon.createBusinessFileUtil(caseFlgFile, JKKBatConst.SJIS, JKKBatConst.SPACE, JKKBatConst.SPACE);
			cmnItem.getLogPrint().printDebugLog(strJobid + ":CASEフラグファイル名:" + caseFlgFile);
		}
		catch (Exception e)
		{

			cmnItem.getLogPrint().printDebugLog(strJobid + ":例外発生の為、生成ファイルのクローズ処理を行う。");

			// 生成ファイルのクローズ処理
			if (null != caseCvsFileObj)
			{
				JKKBatCommon.closeBusinessFileUtil(caseCvsFileObj);
			}
			if (null != caseCntFileObj)
			{
				JKKBatCommon.closeBusinessFileUtil(caseCntFileObj);
			}
			if (null != caseFlgFileObj)
			{
				JKKBatCommon.closeBusinessFileUtil(caseFlgFileObj);
			}

			throw e;
		}
		if (null != caseCvsFileObj)
		{
			JKKBatCommon.closeBusinessFileUtil(caseCvsFileObj);
		}
		if (null != caseCntFileObj)
		{
			JKKBatCommon.closeBusinessFileUtil(caseCntFileObj);
		}
		if (null != caseFlgFileObj)
		{
			JKKBatCommon.closeBusinessFileUtil(caseFlgFileObj);
		}
	}

	/**
	 * 出力用文字列の作成処理です。
	 *
	 * @param value 対象文字列
	 * @param list 出力対象リスト
	 * @return 対象文字列の結合情報
	 */
	private static List<String> outputVal(String value, List<String> list)
	{
		list.add(S_DUBLLEQ + value + S_DUBLLEQ);
		return list;
	}
}
