/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom  					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JACBatCommon
*	ソースファイル名	：JACBatCommon.java
*	作成者				：富士通　
*	作成日				：2011年08月24日
*＜機能概要＞
*　料金管理チームバッチ共通アクセッサー部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/24  富士通		新規作成
*	v2.00		2012/12/15  FJ）斉藤諭	対応履歴Ｔ部品呼出メソッド追加
*********************************************************************/

package eo.business.common;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.log.JBSbatLogPrintControl;

/**
 * 料金管理チームバッチ共通アクセッサー部品です。<p>
 * ジョブで実装します。
 * <BR>
 * @author 富士通
 */
public class JACBatCommon
{
	/**
     * 小数点第一位による丸め処理を行います。<BR>
     * 負の数の場合は絶対値を丸めた数に-1を乗算します。
     * <BR>
     * @param roundWay 丸め方法 1:四捨五入、2:切り上げ、3:切捨て、左記以外:丸めなし
     * @param num 丸め処理前の数値
     * @param keta 小数点以下の桁数
     * @return double 丸め処理後の数値
     */
	public static BigDecimal round(String roundWay, BigDecimal num, int keta)
	{
		return JACbatRknBusinessUtil.round(roundWay, num, keta);
	}

	/**
	 * NULL判定を行います。
	 * <br>
	 * @param alg0 対象文字列
	 * @return true:NULL false:NULL以外
	 */
	public static boolean isNull(String alg0)
	{
		return JACbatRknBusinessUtil.isNull(alg0);
	}

	/**
	 * 料金サービスコードを0パディングでフル桁にします。
	 * 
	 * @param prcSvcCd 料金サービスコード
	 * @return 料金サービスコード（フル桁）
	 * @throws Exception 
	 */
	public static String fullPrcSvcCd(String prcSvcCd)throws Exception
	{              
		return JACbatRknBusinessUtil.fullPrcSvcCd(prcSvcCd);
	}
	
	/**
	 * ファイル名編集処理
	 * ファイル生成制御マスタより取得した値を基に動的にファイル名を編集する。
	 * @param fileNo		// ファイル連番
	 * @param dbMap			// ファイル生成制御マスタ情報
	 * @param fileKbnArray	// ファイル識別格納配列
	 * 							[0]：システムコード
	 * 							[1]：請求年月
	 * 							[2]：運用日
	 * 							[3]：システム日時
	 * 							[4]：（自由設定）
	 * 							[5]：多重番号
	 * @return	String[]	// ファイル名生成情報(20Byte右スペースパディング)
	 * 							[0]：ファイル識別１
	 * 							[1]：ファイル識別２
	 * 							[2]：ファイル識別３
	 * 							[3]：ファイル識別４
	 * 							[4]：ファイル識別５
	 * @throws Exception
	 */
	public static String[] editFileItemName(String fileNo, JBSbatCommonDBInterface dbMap, String[] fileKbnArray) throws Exception
	{
		return JACbatRknBusinessUtil.editFileItemName(fileNo, dbMap, fileKbnArray);
	}

	/**
	 * ログ内容をコンソールに出す
	 * 使い方は「assert JBSbatDebugLogUtil.sysout("ログ内容");」
	 * @param text ログ内容
	 * @return true
	 */
	public static boolean sysout(String text)
	{
		return JACbatDebugLogUtil.sysout(text);
	}

	/**
	 * ログ内容をログファイルに出す
	 * 使い方は「assert JBSbatDebugLogUtil.printDebugLog(super.logPrint, "ログ内容");」
	 * @param logPrint ログ出力制御オブジェクト
	 * @param text ログ内容
	 * @return true
	 */
	public static boolean printDebugLog(JBSbatLogPrintControl logPrint, String text)
	{
		return JACbatDebugLogUtil.printDebugLog(logPrint, text);
	}
	
	/**
	 * ファイルに出力する情報を、項目ごとに指定された文字列で囲みます。
	 * 
	 * @param trgtMap 出力ファイル情報（編集前）
	 * @param leftChar 左囲み文字
	 * @param rightChar 右囲み文字
	 * @return 出力ファイル情報（編集後）
	 */
	@SuppressWarnings("unchecked")
	public static HashMap quote(Map trgtMap, String leftChar, String rightChar)
	{
		return JACbatRknBusinessUtil.quote(trgtMap, leftChar, rightChar);
	}
	
	/**
	 * 年月日書式(yyyy年MM月dd日)の編集を行います。
	 * <br>
	 * @param arg0 年月日書式に編集する文字列(yyyyMMdd)
	 * @return String 年月日書式に編集された文字列(yyyy年MM月dd日)
	 */
	public static String formatDate(String arg0) 
	{
		return JACbatRknBusinessUtil.formatDate(arg0);
	}
	
	/**
	 * 改行コードを変換します。
	 * <br>
	 * @param kaigyo 変換前改行コード
	 * @return 変換後改行コード
	 */
	public static String chgKaigyo(String kaigyo)
	{
		return JACbatRknBusinessUtil.chgKaigyo(kaigyo);
	}
	
	/**
	 * 指定されたファイルIDを基にファイル生成制御マスタを検索し、取得した値を基にファイル名を編集・ファイルオープンします。
	 * <br>
	 * @param commonItem バッチ共通パラメータ
	 * @param fileId ファイルID
	 * @param fileBnktUm ファイル分割有無
	 * @param fileNo ファイル連番
	 * @param seikyYm 請求年月
	 * @param freeSet 自由設定
	 * @param tajuNo 多重番号
	 * @param mojiCd 文字コード
	 * @param rowCd 変換前改行コード
	 * @return ArrayList ファイル生成情報配列（[0]:ファイル名（フルパス）、[1]:区切り文字、[2]:ファイルインスタンス）
	 */
	public static ArrayList<Object> geneFile(JBSbatCommonItem commonItem, String fileId, String fileBnktUm, String fileNo,
									String seikyYm, String freeSet, String tajuNo, String mojiCd, String rowCd) throws Exception
	{
		return JACbatRknBusinessUtil.geneFile(commonItem, fileId, fileBnktUm, fileNo, seikyYm, freeSet, tajuNo, mojiCd, rowCd);
	}

	/**
	 * ユーザーIDからユーザー名を取得する。
	 * （注意：対応履歴Ｔの部品を呼び出しています。）
	 * @param commonItem バッチ共通パラメータ電文
	 * @param userId ユーザーID
	 * @return ユーザー名
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	public static String getUserNm(JBSbatCommonItem commonItem, String userId) throws Exception
	{
		return JCRBatCommon.getUserNm(commonItem, userId);
	}

	/**
	 * 業務個別設定組織コード(ワークグループ)取得
	 * @param commonItem バッチ共通パラメータ電文
	 * @param userId ユーザーID
	 * @return 業務個別設定組織コード
	 * @throws Exception 例外
	 */
	public static String getWorkGroupCd(JBSbatCommonItem commonItem, String userId) throws Exception
	{
		return getWorkGroupCd(commonItem, userId, null);
	}

	/**
	 * 業務個別設定組織コード(ワークグループ)取得
	 * （注意：対応履歴Ｔの部品を呼び出しています。）
	 * @param commonItem バッチ共通パラメータ電文
	 * @param userId ユーザーID
	 * @param queBoxNo キューBOX番号
	 * @return 業務個別設定組織コード
	 * @throws Exception 例外
	 */
	public static String getWorkGroupCd(JBSbatCommonItem commonItem, String userId, String queBoxNo) throws Exception
	{
		return JCRBatCommon.getWorkGroupCd(commonItem, userId, queBoxNo);
	}

	/**
	 * 業務個別設定組織コードから業務個別設定組織名を取得する。
	 * （注意：対応履歴Ｔの部品を呼び出しています。）
	 * @param commonItem バッチ共通パラメータ電文
	 * @param wkkbtOrgCd 業務個別設定組織コード
	 * @return 業務個別設定組織名
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	public static String getWkkbtOrgNm(JBSbatCommonItem commonItem, String wkkbtOrgCd) throws Exception
	{
		return JCRBatCommon.getWkkbtOrgNm(commonItem, wkkbtOrgCd);
	}

	/**
	 * 対応記録内訳登録
	 * （注意：対応履歴Ｔの部品を呼び出しています。）
	 * @param commonItem バッチ共通パラメータ電文
	 * @param taioKirkNo 対応記録番号
	 * @throws Exception 例外
	 */
	public static void entryTaiokirkUcwk(JBSbatCommonItem commonItem, String taioKirkNo) throws Exception
	{
		JCRBatCommon.entryTaiokirkUcwk(commonItem, taioKirkNo);
	}

	/**
	 * 対応記録内訳カテゴリー登録
	 * （注意：対応履歴Ｔの部品を呼び出しています。）
	 * @param commonItem バッチ共通パラメータ電文
	 * @param ctgrs カテゴリー配列
	 * @param taioKirkNo 対応記録番号
	 * @throws Exception 例外
	 */
	public static void entryTaiokirkUwCtgr(JBSbatCommonItem commonItem,
											String[] ctgrs,
											String taioKirkNo) throws Exception
	{
		JCRBatCommon.entryTaiokirkUwCtgr(commonItem, ctgrs, taioKirkNo);
	}

	/**
	 * 対応記録内訳抽出ワーク登録(新規登録時用)
	 * （注意：対応履歴Ｔの部品を呼び出しています。）
	 * @param commonItem バッチ共通パラメータ電文
	 * @param taioKirokNo 対応記録番号
	 * @throws Exception 例外
	 */
	public static void entryTiokrUwCstWkForNew(JBSbatCommonItem commonItem, String taioKirokNo) throws Exception
	{
		// 対応記録内訳抽出ワーク登録(新規登録時用)
		JCRBatCommon.entryTiokrUwCstWkForNew(commonItem, taioKirokNo);
	}

	/**
	 * 問合せモニターデータ登録
	 * （注意：対応履歴Ｔの部品を呼び出しています。）
	 * @param commonItem バッチ共通パラメータ電文
	 * @param shoriKubun 処理区分
	 * @param taioKirokNo 対応記録番号
	 * @param userId ユーザーID
	 * @param userNm ユーザー名
	 * @param wkKbtOrgCd 業務個別設定組織コード
	 * @throws Exception 例外
	 */
	public static void entryTiawsMonitorData(JBSbatCommonItem commonItem,
												String shoriKubun,
												String taioKirokNo,
												String userId,
												String userNm,
												String wkKbtOrgCd) throws Exception
	{
		// 問合せモニターデータ登録
		JCRBatCommon.entryTiawsMonitorData(commonItem, shoriKubun, taioKirokNo, userId, userNm, wkKbtOrgCd);
	}

	/**
	 * データアクセスオブジェクトをクローズする（対応履歴部品用）
	 * （注意：対応履歴Ｔの部品を呼び出しています。）
	 * @param commonItem バッチ共通パラメータ電文
	 */
	public static void closeDataAccessObj(JBSbatCommonItem commonItem)
	{
		JCRBatCommon.closeDataAccessObj(commonItem);
	}

	/**
	 * 左辺と右辺を加算します。
	 * 
	 * @param str1 計算値（左辺）
	 * @param str2 計算値（右辺）
	 * @param isNullToZero Nullを0に置き換えて計算するかを判断
	 * @return 計算結果
	 */
	public static String calcAdd(String str1, String str2, Boolean isNullToZero)
	{

		if (isNullToZero)
		{
			if (isNull(str1))
			{
				str1 = "0";
			}

			if (isNull(str2))
			{
				str2 = "0";
			}
		}
		else
		{
			if (isNull(str1) || isNull(str2))
			{
				return null;
			}
		}

		BigDecimal val1 = new BigDecimal(str1);
		BigDecimal val2 = new BigDecimal(str2);

		BigDecimal rtnValue = val1.add(val2);

		return rtnValue.toString();
	}

}
