/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKUBatCommon
*   ソースファイル名：JKUBatCommon.java
*   作成者          ：富士通
*   日付            ：2011年05月10日
*＜機能概要＞
*   バッチ部品のアクセッサークラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*	v1.00.00	2011/05/10	FJ)中西		  新規作成
*	v5.00.00	2013/09/14	FJ)高橋		【OM-2013-0002082】
*	v7.00.00	2014/01/23	FJ)黒田		【OM-2014-0000260】
*	v10.00.00	2016/06/26	FJ)高橋		【ANK-2138-00-00】
*	v41.00.00	2019/01/25	FJ)周藤		【ANK-3387-00-00】
*
**********************************************************************/
package eo.business.common;

import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

import eo.common.util.JKUCheckSTBCount;
import eo.common.util.JKUCommonUtil;
import eo.common.util.JKUSetsubiCodeCnvUtil;
import eo.common.util.JZMCommonUtil;
import eo.framework.application.JCCbatFrameworkException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
 * 工事受付システム用バッチ共通アクセッサー部品です。<p>
 * ジョブで実装します。
 * <BR>
 * @author 富士通
 */
public class JKUBatCommon extends JCCBatCommon
{

	/**
	 * 指定されたHashMapの値からダブルクォーテーション囲みを削除します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数のHashMapの件数分ダブルクォーテーション囲みを削除します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param map      入力ファイルの１レコードが格納されているHashMap
	 * @return HashMap 括り文字を削除した値が格納されているHashMap
	 */
	public static HashMap deleteDblQuote(HashMap map)
	{
		return JKUBatHashMapUtil.deleteDblQuote(map);
	}
	
	/**
	 * 指定されたHashMapの値にダブルクォーテーション囲みを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数のHashMapの件数分ダブルクォーテーション囲みを行います。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param map      入力ファイルの１レコードが格納されているHashMap
	 * @return HashMap 括り文字を付与した値が格納されているHashMap
	 */
	public static HashMap addDblQuote(HashMap map)
	{
		return JKUBatHashMapUtil.addDblQuote(map);
	}
	
	/**
	 * カンマ編集を行います。
	 * @param infoMap　入力電文
	 * @param indexMap　項目名Map
	 * @return resultString　出力文字列
	 * @throws Exception
	 */	
	public static StringBuilder editComma(JBSbatServiceInterfaceMap infoMap, HashMap<Object, String> indexMap) throws Exception
	{
		return JKUBatStringUtil.editComma(infoMap, indexMap);
	}
	
	/**
	 * 予定機器情報、変更機器情報の返却を行います。<br>
	 * 
	 * @param  rsvKikiInfo 予定機器情報
	 * @param  chgeKikiInfo 変更機器情報
	 * @return 予定又は、変更の機器情報
	 * @throws Exception
	 */	
	public static String returnRsvChgeKjakTgTkkiki(String rsvKikiInfo, String chgeKikiInfo) throws Exception
	{
		return JKUBatCheckUtil.returnRsvChgeKjakTgTkkiki(rsvKikiInfo, chgeKikiInfo);
	}
	
	/**
	 * チェック対象値がコード名称管理マスタに存在することをチェックします。
	 * <br>
	 * @param db_ZM_M_CD_NM_KANRI テーブルアクセスクラス(コード名称管理)
	 * @param commonItem バッチ共通パラメータ電文
	 * @param value チェック対象の値
	 * @param groupCode コード種別
	 * @return チェックOKの場合true, チェックNGの場合false
	 * @throws Exception
	 */
	public static boolean isCodeMaster(JBSbatSQLAccess db_ZM_M_CD_NM_KANRI, JBSbatCommonItem commonItem, String value, String groupCode) throws Exception 
	{
		JKUBatCheckUtil checkUtil = new JKUBatCheckUtil();
		return checkUtil.isCodeMaster(db_ZM_M_CD_NM_KANRI, commonItem, value, groupCode);
	}
	
	/**
	 * 工事案件種別と連携コードの相関チェックを実行します。
	 * <br>
	 * @param rsMap		工事関連受信情報
	 * @param mansFlg	（eo光テレビ用) true = マンション, false = 戸建
	 * @param tkHoshikiPatternCd	提供方式パターンコード
	 * @return	チェックOKの場合true, チェックNGの場合false
	 */
// ANK-3387-00-00 MOD START
//	public static boolean checkKjakSbtRnkiCdSokan(Map<String, Object> rsMap, boolean mansFlg)
	public static boolean checkKjakSbtRnkiCdSokan(Map<String, Object> rsMap, boolean mansFlg, String tkHoshikiPatternCd)
// ANK-3387-00-00 MOD END
	{
		JKUBatCheckUtil checkUtil = new JKUBatCheckUtil();
// ANK-3387-00-00 MOD START
//		return checkUtil.checkKjakSbtRnkiCdSokan(rsMap, mansFlg);
		return checkUtil.checkKjakSbtRnkiCdSokan(rsMap, mansFlg, tkHoshikiPatternCd);
// ANK-3387-00-00 MOD END
	}
	
	
	/**
	 * FTPクライアントのPUT処理です。<br>
	 * FTPクライアントのPUTを行います。<br>
	 * 
	 * @param arg0 業務共通電文
	 * @throws Exception
	 */
	public static void putFTP(JBSbatCommonItem arg0) throws Exception
	{
		JKUBatFtpUtil.putFTP(arg0);
	}
	
	/**
	 * お客様名１を取得します。
	 * @param arg0 お客様名
	 * @return  引数のお客様名の１文字目はそのまま、２〜１５文字までの有効文字を「＊」に変換した文字列
	 */
	public static String getCustName1Mask(String arg0)
	{
		return JKUBatStringUtil.getCustName1(arg0, true);
	}
	
	/**
	 * お客様名２を取得します。
	 * @param arg0 お客様名
	 * @return  引数のお客様名の１６文字以降の有効文字を「＊」に変換した文字列
	 */
	public static String getCustName2Mask(String arg0)
	{
		return JKUBatStringUtil.getCustName2(arg0, true);
	}
	
	
	/**
	 * お客様名１を取得します。
	 * @param arg0 お客様名
	 * @param isMask true:２〜endStrCnt文字までの有効文字を「＊」に変換する。false:変換しない。
	 * @param endStrCnt 終了文字数 1文字目からここで指定された終了文字数までをお客様名１として処理を行う
	 * @return  引数のお客様名の１文字目はそのまま、２〜endStrCnt文字までの有効文字は引数で変換制御した文字列
	 */
	public static String getCustName1Mask(String arg0, int endStrCnt)
	{
		return JKUBatStringUtil.getCustName1(arg0, true, endStrCnt);
	}
	
	/**
	 * お客様名２を取得します。
	 * @param arg0 お客様名
	 * @param isMask true:(nm1EndStrCnt + 1)文字以降の有効文字を「＊」に変換する。false:変換しない。
	 * @param nm1EndStrCnt 除外文字数 1文字目からここで指定された除外文字数までをお客様名１として処理から除外し、以降の文字をお客様名２として処理を行う
	 * @return  引数のお客様名の(nm1EndStrCnt + 1)文字以降の有効文字を引数で変換制御した文字列
	 */
	public static String getCustName2Mask(String arg0, int nm1EndStrCnt)
	{
		return JKUBatStringUtil.getCustName2(arg0, true, nm1EndStrCnt);
	}
	
	
	/**
	 * お客様名１を取得します。
	 * @param arg0 お客様名
	 * @return  引数のお客様名の１〜１５文字までの有効文字を返却
	 */
	public static String getCustName1(String arg0)
	{
		return JKUBatStringUtil.getCustName1(arg0, false);
	}
	
	/**
	 * お客様名２を取得します。
	 * @param arg0 お客様名
	 * @return  引数のお客様名の１６文字以降の有効文字を返却
	 */
	public static String getCustName2(String arg0)
	{
		return JKUBatStringUtil.getCustName2(arg0, false);
	}
	
	/**
	 * 住所コードの上５桁を取得します。
	 * @param arg0 住所コード
	 * @return 住所コードの上５桁、引数が５桁未満、またはnullの場合はそのままの値
	 */
	public static String getPlaceAdCd5keta(String arg0)
	{
		return JKUBatStringUtil.getPlaceAdCd5keta(arg0);
	}
	
	/**
	 * 未来日時チェック
	 * 引数の値が現在日時より未来かどうか秒単位までチェックします。
	 * @param dateTime yyyyMMddHHmmssまたはyyyyMMddHHmmssSSS
	 * @return true：引数の値が現在日時より未来の場合、false：引数の値が現在日時より未来でない場合
	 */
	public static boolean isFutureDateTime(String dateTime) 
	{
		return JKUBatCheckUtil.isFutureDateTime(dateTime);
	}

	/**
	 * 電話番号を市外局番、市内局番、加入者番号に分割する。
	 * 
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @param tln 電話番号。数字だけで構成された9桁以上の文字列。
	 * @param db_ZM_M_KYOKU_NO	テーブルアクセスクラス(局番)
	 * @return 分割した番号を格納した配列。引数の電話番号がnullの場合はnullを返す。
	 * @throws Exception
	 */
	public String[] splitTln(JBSbatCommonItem commonItem, String tln, JBSbatSQLAccess db_ZM_M_KYOKU_NO) throws Exception 
	{
		JKUBatStringUtil stringUtil = new JKUBatStringUtil();
		return stringUtil.splitTln(commonItem, tln, db_ZM_M_KYOKU_NO);
	}
	
	/**
	 * 住所項目を３分割する。
	 * 
	 * @param address 住所７項目を格納した配列。
	 * @return ３分割した住所を格納した配列。
	 * @throws Exception
	 */
	public static String[] splitAd(String[] address) throws Exception 
	{
		return JZMCommonUtil.getPtn13(address[0], address[1], address[2], address[3], address[4], address[5], address[6]);
	}
	
	/**
	 * 業務パラメータ管理テーブルに対してＰＫ条件でレコードを一件検索し設定値を取得します。
	 * 検索結果が0件の場合はnullを返却します。
	 * @param commonItem
	 * @param workParamId 業務パラメータＩＤ
	 * @return 業務パラメータ設定値
	 * @throws Exception
	 */
	public String getWorkParamKnri(JBSbatCommonItem commonItem, String workParamId) throws Exception 
	{
		JKUBatCheckUtil checkUtil = new JKUBatCheckUtil();
		return checkUtil.getWorkParamKnri(commonItem, workParamId);
	}

	/**
	 * 値がNullの場合、指定した値を設定する。
	 * <br>
	 * @param checkValue 調整する文字列
	 * @param setValue 設定する値
	 * @return String 空白充填後の文字列
	 */
	public static String changeNullValue(Object checkValue, String setValue) 
	{
		return JKUBatStringUtil.changeNullValue(checkValue, setValue);
	}

	/**
	 * 設備コードマップを変換、取得します。
	 * @param commonItem バッチ共通パラメータ電文
	 * @param kojiakNo	工事案件番号
	 * @param eoKokyakuMap eo顧客システムコードマップ
	 * @param dKuTKjakEohNtMans	テーブルアクセスクラス(工事案件＜光ネットマンション＞)
	 * @return 連携システムコードマップ
	 * @throws Exception
	 */
	public static HashMap<String, String> getSetsubiCodeMap(JBSbatCommonItem commonItem, 
			String kojiakNo, HashMap<String, String> eoKokyakuMap, JBSbatSQLAccess dKuTKjakEohNtMans) throws Exception
	{
		return JKUBatSetsubiCodeCnvUtil.getSetsubiCodeMap(commonItem, kojiakNo, eoKokyakuMap, dKuTKjakEohNtMans);
	}
	
	/**
	 * 工事契約サービスコード取得
	 * @param commonItem バッチ共通パラメータ電文
	 * @param kojiakNo 工事案件番号
	 * @param eoKokyakuMap eo顧客システムコードマップ
	 * @param dKuTKjakEohNtMans	テーブルアクセスクラス(工事案件＜光ネットマンション＞)
	 * @return	工事契約サービスコード
	 * @throws Exception
	 */
	public static String getKjKeiSvcCd(JBSbatCommonItem commonItem, String kojiakNo, HashMap<String, String> eoKokyakuMap,
			JBSbatSQLAccess dKuTKjakEohNtMans) throws Exception
	{
		return JKUBatSetsubiCodeCnvUtil.getKjKeiSvcCd(commonItem, kojiakNo, eoKokyakuMap, dKuTKjakEohNtMans);
	}
	
	/**
	 * 郵便番号をハイフン編集する。
	 * 
	 * @param arg0 郵便番号。数字だけで構成された7桁の文字列。
	 * @return 郵便番号を編集した値。
	 * @throws Exception
	 */
	public static String editPcd(String arg0) throws Exception 
	{
		JKUBatStringUtil stringUtil = new JKUBatStringUtil();
		return stringUtil.editPcd(arg0);
	}
	
	/**
	 * 工事案件番号を取得します。
	 * 
	 * @param db_KU_T_KOJIAK DBアクセスクラス 工事案件
	 * @param db_KK_T_MAJOR_KMK_DLJSK DBアクセスクラス 主要項目削除実績
	 * @param kojiakNo 元となる工事案件番号
	 * @return 採番された工事案件番号
	 * @throws Exception
	 */
	public static String getKojiakNo(JBSbatSQLAccess db_KU_T_KOJIAK, JBSbatSQLAccess db_KK_T_MAJOR_KMK_DLJSK, String kojiakNo) throws Exception
	{
		return JKUBatNumberParts.getKojiakNo(db_KU_T_KOJIAK, db_KK_T_MAJOR_KMK_DLJSK, kojiakNo);
	}
	
	/**
	 * STB台数をカウントします。
	 * @param commonItem バッチ共通パラメータ電文
	 * @param kojiakNo 工事案件番号
	 * @param kojiakSbtCd 工事案件種別
	 * @param db_KU_T_KJAK_TG_TKKIKI テーブルアクセスクラス(工事案件対象宅内機器)
	 * @return STB台数を格納したオブジェクト(JKUCheckSTBCount)
	 * @throws Exception 
	 */
	public static JKUCheckSTBCount checkSTBCount(JBSbatCommonItem commonItem, String kojiakNo, String kojiakSbtCd, JBSbatSQLAccess db_KU_T_KJAK_TG_TKKIKI) throws Exception
	{
		return JKUBatCheckUtil.checkSTBCount(commonItem, kojiakNo, kojiakSbtCd, db_KU_T_KJAK_TG_TKKIKI);
	}
	
	/**
	 * 連携コードの順序性チェックを行います。<br>
	 * @param  rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param  kojiakMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param tkHoshikiPatternCd	提供方式パターンコード
	 * @return チェックOKの場合true, チェックNGの場合false
	 */	
// ANK-3387-00-00 MOD START
//	public static boolean checkRenkCd(HashMap<String, Object> rsMap, HashMap<String, Object> kojiakMap)
	public static boolean checkRenkCd(HashMap<String, Object> rsMap, HashMap<String, Object> kojiakMap, String tkHoshikiPatternCd)
// ANK-3387-00-00 MOD END
	{
// ANK-3387-00-00 MOD START
//		return JKUBatCheckUtil.checkRenkCd(rsMap, kojiakMap);
		return JKUBatCheckUtil.checkRenkCd(rsMap, kojiakMap, tkHoshikiPatternCd);
// ANK-3387-00-00 MOD END
	}
	
	
	/**
	 *  <dd>メソッド名：経緯度の5系と6系の公共座標への変換
	 *  <dd>メソッド説明：経緯度を5系と6系の公共座標に変換する。
	 *  <dd>備考：
	 * @param colKdo 経度
	 * @param colIdo 緯度
	 * @return zahyo 公共座標(5系、6系)
	 */
	public static LinkedHashMap<String, BigDecimal> allZahyoBX(String colKdo, String colIdo)
	{
		return JKUCommonUtil.allZahyoBX(colKdo, colIdo);
	}
	
	/**
	 * 文字列の分割を行います。<br>
	 * @param inString　入力文字列
	 * @param splitLen　入力分割文字数(入力分割バイト数)
	 * @param isByteSplit　バイト分割フラグ
	 * @return resultString　出力文字列
	 * @throws UnsupportedEncodingException 
	 */
	public static String[] splitString(String inString, int splitLen, boolean isByteSplit) throws UnsupportedEncodingException
	{
		return JKUBatStringUtil.splitString(inString, splitLen, isByteSplit);
	}
	
	/**
	 * 電波障害案件種別コードの
	 * 難視聴地域・同時工事案件値設定可否を判定・返却値の選別・返却を実行する
	 * 
	 * @param dojiDaihyo 同時代表工事案件番号
	 * @param dmpsankSbtCd 電場障害案件種別コード
	 * @return 電波障害案件種別コード設定値
	 * @throws Exception
	 */
	public static String checkDoujiDmpsankSbtCd(String dojiDaihyo, String dmpsankSbtCd) throws Exception
	{
		return JKUBatCheckUtil.checkDoujiDmpsankSbtCd(dojiDaihyo, dmpsankSbtCd);
	}
	
	/**
	 * 番ポ同時希望有無を取得する
	 * @param dojiBmpKiboUm 同時番ポ希望有無
	 * @param kojiakStat 工事案件ステータス
	 * @param bmpUm 番ポ有無
	 * @param dobanItenUm 同番移転有無
	 * @param bmpKojiYh 番ポ工事要否
	 * @return (OPMS)番ポ有無
	 * @throws Exception
	 */
	public static String getBmpDojiKiboUm(
			String dojiBmpKiboUm,
			String kojiakStat,
			String bmpUm,
			String dobanItenUm,
			String bmpKojiYh
			) throws Exception
	{
		return JKUSetsubiCodeCnvUtil.getBmpDojiKiboUm(dojiBmpKiboUm, kojiakStat, bmpUm, dobanItenUm, bmpKojiYh);
	}
	

	/**
	 * 番ポ有無の結果によって番ポ元事業者に設定する値を返却する
	 * @param itemNo 取得番ポ有無番号
	 * @param bmpUmOpms (OPMS)番ポ有無
	 * @param kjakEohNtMap ネットマップ
	 * @return 番ポ元事業者設定値
	 * @throws Exception
	 */
	public static String getBmpMotoJgsCd(
			String itemNo,
			String bmpUmOpms,
			HashMap<Object, Object> kjakEohNtMap
			) throws Exception
	{
		return JKUSetsubiCodeCnvUtil.getBmpMotoJgsCd(itemNo, bmpUmOpms, kjakEohNtMap);
	}
	
	/**
	 * 全角記号と全角特殊文字を半角に変換した結果を
	 * 「変換された文字列」として、返却します。
	 * <br>
	 * @param convStr 変換する文字列
	 * @return String 変換された文字列
	 * @throws UnsupportedEncodingException 
	 */
	public static String convertHalfSign(String convStr) throws Exception
	{
		return JKUBatStringUtil.convertHalfSign(convStr);
	}
	
	/**
	 * 契約サービスと工事費項目コードの相関表より
	 * 工事費金額が格納された工事完了情報(工事関連受信情報)の項目名を
	 * 返却する
	 * <br>
	 * @param  rnkiCdHi			OPMS連携コードの上2桁
	 * @param  kojihiKmkCd		工事費項目コード
	 * @return 工事完了情報(工事関連受信情報)の項目名
	 */	
	public static String checkKojihiKey(String rnkiCdHi, String kojihiKmkCd)
	{
		return JKUBatCheckUtil.checkKojihiKey(rnkiCdHi, kojihiKmkCd);
	}
	
	/**
	 * OLT設定変更番号採番
	 * @param commonItem	バッチ共通パラメータ電文
	 * @param oltSeteChgObj	テーブルアクセスクラス(OLT設定変更)
	 * @return	採番されたOLT設定変更番号
	 * @throws Exception
	 */
	public static String getOltSeteChgNo(JBSbatCommonItem commonItem, JBSbatSQLAccess oltSeteChgObj) throws Exception
	{
		return JKUbatSeqNoGenerator.getOltSeteChgNo(commonItem, oltSeteChgObj);
	}
	
	/**
	 * イーサネット帯域変更番号採番
	 * @param commonItem	バッチ共通パラメータ電文
	 * @param enetTikChgObj	テーブルアクセスクラス(イーサネット帯域変更)
	 * @return	採番されたイーサネット帯域変更番号
	 * @throws Exception
	 */
	public static String getEnetTikChgNo(JBSbatCommonItem commonItem, JBSbatSQLAccess enetTikChgObj) throws Exception
	{
		return JKUbatSeqNoGenerator.getEnetTikChgNo(commonItem, enetTikChgObj);
	}
	
	/**
	 * ファイル登録処理<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    圧縮実行フラグ
	 * @param delFileFlg    ファイル削除フラグ
	 * @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, boolean delFileFlg) throws JCCbatFrameworkException, Exception
	{
		JKUBatFileUtil fileUtil = new JKUBatFileUtil();
		fileUtil.createFile(commonItem, trnKanriNo, dataCnt, fileCd, fileDir, fileName, fileDelYmd, dbDlFileKanri, isCompress, delFileFlg);
	}
}
