/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：プロジェクト共通
*   モジュール名    ：JPCBatCommon
*   ソースファイル名：JPCBatCommon.java
*   作成者          ：富士通
*   日付            ：2011年03月24日
*＜機能概要＞
*   バッチ部品のアクセッサークラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/03/24   FJ) 富士通  新規作成
*   v4.00.00    2012/10/05   FJ) 中作    進捗.異動年月日取得部品追加
*   v4.00.01    2012/12/29   FJ) 中作    【ST4-2012-0000301】障害対応
*   v5.00.00    2014/02/28   FJ) 小野    【OM-2014-0000685】障害対応 異動予約を取り消す処理呼び出し追加
*
**********************************************************************/
package eo.business.common;

import java.util.ArrayList;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;

import eo.framework.application.JCCbatFrameworkException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatCheckUtil;

/**
 * バッチ部品のアクセッサークラスです。<p>
 * <br>
 * @author 富士通
 */
public class JKKBatCommon extends JCCBatCommon
{
	/**
	 * 業務パラメータ取得処理です。
	 * ｢業務パラメータID｣と一致する業務パラメータ設定値を取得します。
	 * 
	 * @param cmnItem 業務共通電文
	 * @param paramId 業務パラメータID
	 * @return 業務パラメータ設定値
	 * @throws Exception 業務パラメータ取得処理に失敗した場合
	 */
	public static String getWorkParamSetteValue(JBSbatCommonItem cmnItem,String paramId) throws Exception
	{
		return JKKBatWorkParamKanriUtil.getWorkParamSetteValue(cmnItem, paramId);
	}

	/**
	 * ファイル出力処理を行います。
	 * 
	 * @param cmnItem 業務共通電文
	 * @param outputBean　編集対象情報
	 * @param fileId ファイルID
	 * @param directory 出力ディレクトリ
	 * @param fileName 出力ファイル名
	 * @return true：ファイル出力成功 false:ファイル出力失敗
	 */
	public static boolean outFile(JBSbatCommonItem cmnItem, JBSbatOutputItem outputBean, String fileId, String directory, String fileName) throws Exception{
		return JKKBatOutputUtil.editOutFile(cmnItem, outputBean, fileId, directory, fileName);
	}

	/**
	 * コード区分名取得を行います。
	 * 
	 * @param cmnItem 業務共通電文
	 * @param cdSbtCd コード種別コード
	 * @param cdDiv コード区分
	 * @return コード区分名
	 */
	public static String getCdDivName(JBSbatCommonItem cmnItem, String cdSbtCd, String cdDiv) throws Exception{
		return JKKBatNameStkuUtil.getCdDivName(cmnItem, cdSbtCd, cdDiv);
	}

	/**
	 * コード区分略称取得を行います。
	 * 
	 * @param cmnItem 業務共通電文
	 * @param cdSbtCd コード種別コード
	 * @param cdDiv コード区分
	 * @return コード区分略称
	 */
	public static String getCdDivAliName(JBSbatCommonItem cmnItem, String cdSbtCd, String cdDiv) throws Exception{
		return JKKBatNameStkuUtil.getCdDivAliName(cmnItem, cdSbtCd, cdDiv);
	}

	/**
	 * サービス契約名取得を行います。
	 * 
	 * @param cmnItem 業務共通電文
	 * @param prcGrpCd 料金グループコード
	 * @param pcrsCd 料金コースコード
	 * @return サービス契約名
	 */
	public static String getSvcName(JBSbatCommonItem cmnItem, String prcGrpCd, String pcrsCd) throws Exception{
		return JKKBatNameStkuUtil.getSvcName(cmnItem, prcGrpCd, pcrsCd);
	}
	
	/**
	 * 文字列前後付与処理を行います。
	 * 
	 * @param trgtChr 対象文字列
	 * @param fuyoChr 付与文字列
	 * @return 付与後対象文字列
	 */
	public static String getChrZengoFuyo(String trgtChr, String fuyoChr){
		return JKKBatStringUtil.getChrZengoFuyo(trgtChr, fuyoChr);
	}
	
	/**
	 * ダブルクォート前後付与処理を行います。
	 * 対象文字列の前後にダブルクォートを付与します。
	 * 
	 * @param trgtChr 対象文字列
	 * @return 付与後対象文字列
	 */
	public static String getDblquoteZengoFuyo(String trgtChr){
		return JKKBatStringUtil.getChrZengoFuyo(trgtChr, "\"");
	}
	
	/**
	 * 日付変換処理を行います。
	 * 
	 * @param trgtDateChr 対象日付文字列
	 * @param fuyoChr 付与文字列
	 * @return 付与後対象日付文字列
	 */
	public static String getDateChg(String trgtDateChr, String fuyoChr){
		return JKKBatStringUtil.getDateChg(trgtDateChr, fuyoChr);
	}
	
	/**
	 * 出力データ前後付与処理を行います。
	 * 
	 * @param outputDateMap 出力データマップ
	 * @param fuyoChr 付与文字列
	 * @return 編集結果フラグ
	 */
	public static boolean setOutputDateZengoChr(JBSbatServiceInterfaceMap outputDateMap, String fuyoChr){
		return JKKBatOutputEditUtil.setOutputDateZengoChr(outputDateMap, fuyoChr);
	}
	
	/**
	 * 出力電文前後付与処理を行います。
	 * 
	 * @param outputItem 出力電文
	 * @param fuyoChr 付与文字列
	 * @return 編集結果フラグ
	 */
	public static boolean setOutputItemZengoChr(JBSbatOutputItem outputItem, String fuyoChr){
		return JKKBatOutputEditUtil.setOutputItemZengoChr(outputItem, fuyoChr);
	}
	
	/**
	 * ダブルクォート出力データ前後付与処理を行います。
	 * 出力データマップに設定されている文字列の前後にダブルクォートを付与します。
	 * 
	 * @param outputDateMap 出力データマップ
	 * @return 編集結果フラグ
	 */
	public static boolean setDblquoteOutputDateZengoChr(JBSbatServiceInterfaceMap outputDateMap){
		return JKKBatOutputEditUtil.setOutputDateZengoChr(outputDateMap, "\"");
	}
	
	/**
	 * ダブルクォート出力電文前後付与処理を行います。
	 * 出力電文に設定されている文字列の前後にダブルクォートを付与します。
	 * 
	 * @param outputItem 出力電文
	 * @return 編集結果フラグ
	 */
	public static boolean setDblquoteOutputItemZengoChr(JBSbatOutputItem outputItem){
		return JKKBatOutputEditUtil.setOutputItemZengoChr(outputItem, "\"");
	}

	/**
	 * 対象文字列から指定桁数分の文字列を切出し取得します。
	 * 
	 * @param  value 対象文字列
	 * @param  length 桁数
	 * @return value 指定桁数の文字列
	 */
	public static String getLCutString(String value, int length)
	{
		return JKKBatStringUtil.getLCutString(value, length);
	}

	/**
	 * SPRiに対してファイル連携を行います。
	 * 
	 * @param commonItem 業務共通電文
	 * @param ifId       FTP転送依頼するインターフェイスID
	 * @param esbSbt     ESB種別。1:ISI(定数JCCModelCommon.ISI) 2:III(定数JCCModelCommon.III)
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	public static void putSPRi(JBSbatCommonItem commonItem, String ifId, int esbSbt) throws Exception
	{
		JKKBatFTPUtil.putSPRi(commonItem, ifId, esbSbt);
	}

	/**
	 * SPRi以外のファイル連携を行います。
	 * 
	 * @param commonItem 業務共通電文
	 * @param ifId       FTP転送依頼するインターフェイスID
	 * @param esbSbt     ESB種別。1:ISI(定数JCCModelCommon.ISI) 2:III(定数JCCModelCommon.III)
	 * @param fileNameList 連携するファイル名を設定（フルパス指定）
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	public static void putFile(JBSbatCommonItem commonItem, String ifId, int esbSbt, ArrayList<String> fileNameList) throws Exception
	{
		JKKBatFTPUtil.putFile(commonItem, ifId, esbSbt, fileNameList);
	}

	/**
	 * システムで定義された年月日の最大値を取得します。
	 * 
	 * @return value 最大年月日（yyyymmdd形式）
	 */
	public static String getMaxDate()
	{
		return JKKBatConst.S_MAX_DATE;
	}

	/**
	 * バッチ運用日時の取得を行います。
	 * 
	 * @param commonItem 業務共通電文
	 * @return String YYYYMMDDhhmmssSSS形式のバッチ運用日時
	 */
	public static String getOpeDateTimeStamp(JBSbatCommonItem commonItem)
	{
		String opeDate = commonItem.getOpeDate();
		if (null == opeDate)
		{
			return null;
		}
		String opeTime = JCCBatCommon.getSysDateTimeStamp();
		return opeDate + opeTime.substring(8, 17);
	}

	/**
	 * 年月日1のチェックを行います。<br>
	 * 「yyyyMMdd」、「yyyy/MM/dd」の場合のみ真を返却します。<br>
	 * (ただし、1868/01/01以降であること)<br>
	 * ※null／空文字の場合もtrueを返却する。<br>
	 * @param moji チェックする文字列データ
	 * @return boolean チェック結果（OK：true／NG：false） 
	 */
	public static boolean isYearMonthDay1(String moji)
	{
		return JCCBatCommon.isYearMonthDay1(moji);
	}
	
	/**
	 * サービス契約のサブタイプの登録を行います。
	 * 
	 * @param commonItem バッチ共通電文
	 * @param pSvckeiNo サービス契約番号
	 * @param pGeneAddDtm1 世代登録年月日時分秒（検索用）
	 * @param pGeneAddDtm2 世代登録年月日時分秒（登録用）
	 * @throws Exception
	 */
	public static void createSubTypeKK0081(JBSbatCommonItem commonItem, String pSvckeiNo, String pGeneAddDtm1, String pGeneAddDtm2) throws Exception
	{
		JKKBatKK0081SubTypeCreate subTypeCreate = new JKKBatKK0081SubTypeCreate();
		subTypeCreate.createSubTypeKK0081(commonItem, pSvckeiNo, pGeneAddDtm1, pGeneAddDtm2);
	}
	
	/**
	 * サービス契約内訳のサブタイプの登録を行います。
	 * 
	 * @param commonItem バッチ共通電文
	 * @param pSvckeiucwkNo サービス契約内訳番号
	 * @param pGeneAddDtm1 世代登録年月日時分秒（検索用）
	 * @param pGeneAddDtm2 世代登録年月日時分秒（登録用）
	 * @throws Exception
	 */
	public static void createSubTypeKK0161(JBSbatCommonItem commonItem, String pSvckeiucwkNo, String pGeneAddDtm1, String pGeneAddDtm2) throws Exception
	{
		JKKBatKK0161SubTypeCreate subTypeCreate = new JKKBatKK0161SubTypeCreate();
		subTypeCreate.createSubTypeKK0161(commonItem, pSvckeiucwkNo, pGeneAddDtm1, pGeneAddDtm2);
	}
	
	/**
	 * オプションサービス契約のサブタイプの登録を行います。
	 * 
	 * @param commonItem バッチ共通電文
	 * @param pOpsvckeiNo オプションサービス契約番号
	 * @param pGeneAddDtm1 世代登録年月日時分秒（検索用）
	 * @param pGeneAddDtm2 世代登録年月日時分秒（登録用）
	 * @throws Exception
	 */
	public static void createSubTypeKK0351(JBSbatCommonItem commonItem, String pOpsvckeiNo, String pGeneAddDtm1, String pGeneAddDtm2) throws Exception
	{
		JKKBatKK0351SubTypeCreate subTypeCreate = new JKKBatKK0351SubTypeCreate();
		subTypeCreate.createSubTypeKK0351(commonItem, pOpsvckeiNo, pGeneAddDtm1, pGeneAddDtm2);
	}
	
	/**
	 * サブオプションサービス契約のサブタイプの登録を行います。
	 * 
	 * @param commonItem バッチ共通電文
	 * @param pOpsvckeiNo オプションサービス契約番号
	 * @param pSbopsvckeiNo サブオプションサービス契約番号
	 * @param pGeneAddDtm1 世代登録年月日時分秒（検索用）
	 * @param pGeneAddDtm2 世代登録年月日時分秒（登録用）
	 * @throws Exception
	 */
	public static void createSubTypeKK0401(JBSbatCommonItem commonItem, String pOpsvckeiNo, String pSbopsvckeiNo, String pGeneAddDtm1, String pGeneAddDtm2) throws Exception
	{
		JKKBatKK0401SubTypeCreate subTypeCreate = new JKKBatKK0401SubTypeCreate();
		subTypeCreate.createSubTypeKK0401(commonItem, pOpsvckeiNo, pSbopsvckeiNo, pGeneAddDtm1, pGeneAddDtm2);
	}
	
	/**
	 * 割引サービス契約のサブタイプの登録を行います。
	 * 
	 * @param commonItem    バッチ共通電文
	 * @param pWribSvcKeiNo 割引サービス契約番号
	 * @param pGeneAddDtm1  世代登録年月日時分秒（検索用）
	 * @param pGeneAddDtm2  世代登録年月日時分秒（登録用）
	 * @throws Exception
	 */
	public static void createSubTypeKK0451(JBSbatCommonItem commonItem, String pWribSvcKeiNo, String pGeneAddDtm1, String pGeneAddDtm2) throws Exception
	{
		JKKBatKK0451SubTypeCreate subTypeCreate = new JKKBatKK0451SubTypeCreate();
		subTypeCreate.createSubTypeKK0451(commonItem, pWribSvcKeiNo, pGeneAddDtm1, pGeneAddDtm2);
	}
	
	/**
	 * 当処理における「createSubTypeKK0081」「createSubTypeKK0161」「createSubTypeKK0351」「createSubTypeKK0401」「createSubTypeKK0451」
	 * いずれかを実行した場合に生成される各DBアクセスコネクションのクローズ処理。
	 * 
	 * @throws Exception
	 */
	public static void closeSubTypeConnection() throws Exception
	{
		JKKBatKK0081SubTypeCreate.close();
		JKKBatKK0161SubTypeCreate.close();
		JKKBatKK0351SubTypeCreate.close();
		JKKBatKK0401SubTypeCreate.close();
		JKKBatKK0451SubTypeCreate.close();
	}
	
	/**
	 * 進捗.異動年月日時分秒取得処理です。
	 * ｢サービス契約番号,異動区分｣と一致する異動年月日時分秒を取得します。
	 * 「登録年月日時分秒」が最大のもの
	 * 検索結果無の場合は、システム日付時分秒を返却します。
	 * @param cmnItem 業務共通電文
	 * @param svcKeiNo サービス契約番号
	 * @param idoDiv   異動区分
	 * @param stmt     テーブルアクセスクラス
	 * @return 異動年月日時分秒
	 * @throws Exception 異動年月日時分秒取得処理に失敗した場合
	 */
	public static String getIdoDtmMax(JBSbatCommonItem cmnItem, String svcKeiNo, String idoDiv, JBSbatSQLAccess stmt) throws Exception
	{
		return JKKBatPrgUtil.getIdoDtmMax(cmnItem, svcKeiNo, idoDiv, stmt);
	}
	
	/**
	 * 桁数チェック処理
	 * <br>
	 * @param value チェックする文字列
	 * @param valueMinSize 指定サイズ(最小)
	 * @param valueMaxSize 指定サイズ(最大)
	 * @param mojiCd 文字コード（ＯＳ準拠の場合は""（空）を指定）
	 * @param mojiSbt 文字種別（1：文字数でチェック、2：バイト数でチェック）
	 * @return 処理結果を格納したMap
	 * 			KDDI_CHK_RSLT_BOOL		チェック結果コード（正常：true　異常：false）
	 * 			KDDI_CHK_RSLT_VAL		チェック結果の値
	 * @throws UnsupportedEncodingException 文字列サイズ調整処理にて、例外が発生した場合
	 */
	public static HashMap<String, Object> checkDigitno(String value,
														int valueMinSize,
														int valueMaxSize,
														String mojiCd,
														String mojiSbt) throws UnsupportedEncodingException
	{
		return JKKBatKDDICheckUtil.checkDigitno(value, valueMinSize, valueMaxSize, mojiCd, mojiSbt);
	}
	
	/**
	 * ファイル登録処理<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.ファイル登録処理を呼び出す。<br>
	 * </pre>
	 * <p>
	 * @param commonItem    バッチ共通パラメータ電文
	 * @param trnKanriNo    処理管理番号
	 * @param dataCnt    データ件数
	 * @param fileCd    ファイルコード
	 * @param fileDir    ファイルディレクトリ
	 * @param fileName    ファイル名
	 * @param fileDelYmd    ファイル削除年月日
	 * @param dbDlFileKanri    テーブルアクセスクラス
	 * @param isCompress    圧縮実行フラグ
	 * @throws JCCbatFrameworkException, Exception      業務サービス内で発生した例外全般。
	 */
	public static void createFile(JBSbatCommonItem commonItem, String trnKanriNo, Long dataCnt,
									String fileCd, String fileDir, String fileName, String fileDelYmd,
									JBSbatSQLAccess dbDlFileKanri, boolean isCompress) throws JCCbatFrameworkException, Exception
	{
		JKKBatKDDIFileUtil fileUtil = new JKKBatKDDIFileUtil();
		fileUtil.createFile(commonItem, trnKanriNo, dataCnt, fileCd, fileDir, fileName, fileDelYmd, dbDlFileKanri, isCompress);
	}
	
	/**
	 * 業務パラメータ設定値取得部品
	 * <br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.ファイル登録処理を呼び出す。<br>
	 * </pre>
	 * <p>
	 * @param commonItem バッチ共通パラメータ電文
	 * @param workParamSetteValue 業務パラメータID
	 * @param dbWorkParamKnri テーブルアクセスクラス
	 * @return 業務パラメータ設定値
	 * @throws Exception      業務サービス内で発生した例外全般。
	 */
	public static String getWorkParamSetteValue(JBSbatCommonItem commonItem, 
												String workParamSetteValue, 
												JBSbatSQLAccess dbWorkParamKnri) throws Exception 
	{
		
		JKKBatKDDIGetValueUtil getValueUtil = new JKKBatKDDIGetValueUtil();
		return getValueUtil.getWorkParamSetteValue(commonItem, workParamSetteValue, dbWorkParamKnri);
	}
	
	// ====== OM-2014-0000685対応 Start ======
	/**
	 * 撤去した機器に関連するデータの異動予約を取り消す処理を行います。
	 * 
	 * @param commonItem    バッチ共通電文
	 * @param pKktkSvcKeiNo 機器提供サービス契約番号
	 * @throws Exception
	 */
	public static void updateIdoRsvCancel(JBSbatCommonItem commonItem, String pKktkSvcKeiNo) throws Exception
	{
		JKKBatTekkyoKanrenIdoRsvCl tekkyoKanrenIdoRsvCl = new JKKBatTekkyoKanrenIdoRsvCl();
		tekkyoKanrenIdoRsvCl.updateKK1681(commonItem, pKktkSvcKeiNo);
	}
	
	/**
	 * 当処理における「updateIdoRsvCancel」を実行した場合に生成される各DBアクセスコネクションのクローズ処理。
	 * 
	 * @throws Exception
	 */
	public static void closeIdoRsvCancelConnection() throws Exception
	{
		JKKBatTekkyoKanrenIdoRsvCl.close();
	}
	// ====== OM-2014-0000685対応 End =======
}
