/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatZMShyakkWkErrCheck
*	ソースファイル名	：JBSbatZMShyakkWkErrCheck.java
*	作成者				：富士通　
*	作成日				：2011年12月07日
*＜機能概要＞
*　集約局ワークエラーチェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v2.00.00	2011/12/07  FJ) 遠藤	新規作成
*   v4.00.00	2012/11/14	FJ) 伊藤	【TAI-2012-0000140】品質強化対策
*	v4.01.00	2013/01/21  FJ）日野	【TAI-2012-0000143】バッチ異常終了時のメッセージについて【優先度B】
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JZMBatCommon;
import eo.business.common.JZMBatConst;
import eo.business.common.JZMBatConstZokuseiEnum;
import eo.business.util.table.JBSbatZM_T_SHYAKK_WK;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.application.JBSbatBusinessException;

/**
* 集約局ワークエラーチェッククラスです。<p>
*<BR>
* @author 富士通
*/
public class JBSbatZMShyakkWkErrCheck extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	
	/* ++++++++++ v1.0.0 追加開始 ++++++++++ */
	
	/** 集約局コード  */
	private static final String SHYAKK_CD = "集約局ワーク.集約局コード";

	/** 中心局コード  */
	private static final String CHUSKK_CD = "集約局ワーク.中心局コード";
	
	/** 集約局名  */
	private static final String SHYAKK_NM = "集約局ワーク.集約局名";
	
	/** 登録年月日時分秒  */
	private static final String ADD_DTM = "集約局ワーク.登録年月日時分秒";
	
	/** 登録オペレータアカウント  */
	private static final String ADD_OPEACNT = "集約局ワーク.登録オペレータアカウント";
	
	/** 更新年月日時分秒  */
	private static final String UPD_DTM = "集約局ワーク.更新年月日時分秒";
	
	/** 更新オペレータアカウント  */
	private static final String UPD_OPEACNT = "集約局ワーク.更新オペレータアカウント";
	
	/** 削除年月日時分秒  */
	private static final String DEL_DTM = "集約局ワーク.削除年月日時分秒";
	
	/** 削除オペレータアカウント  */
	private static final String DEL_OPEACNT = "集約局ワーク.削除オペレータアカウント";
	
	/** 無効フラグ  */
	private static final String MK_FLG = "集約局ワーク.無効フラグ";
	
	/** 無効フラグ名称 項目名 */
	private static final String KEY_MK_FLG_NM = "MK_FLG_NM";
	
	/** 登録運用年月日  */
	private static final String ADD_UNYO_YMD = "集約局ワーク.登録運用年月日";
	
	/** 登録処理ID  */
	private static final String ADD_TRN_ID = "集約局ワーク.登録処理ID";
	
	/** 更新運用年月日  */
	private static final String UPD_UNYO_YMD = "集約局ワーク.更新運用年月日";
	
	/** 更新処理ID  */
	private static final String UPD_TRN_ID = "集約局ワーク.更新処理ID";
	
	/** 削除運用年月日  */
	private static final String DEL_UNYO_YMD = "集約局ワーク.削除運用年月日";
	
	/** 削除処理ID  */
	private static final String DEL_TRN_ID = "集約局ワーク.削除処理ID";
	
	/** メッセージ埋め込み文字 */
	private static final String REP_CHAR_REF = "関連チェック";
	
	/** メッセージ埋め込み文字 */
	private static final String ZM_M_CD_NM_KANRI = "コード名称管理";
	
	/** メッセージ埋め込み文字 集約局コード */
	private static final String MSG_SHYAKK_CD = "集約局コード";
	
	/* ++++++++++ v1.0.0 追加終了 ++++++++++ */

	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		/* ++++++++++ v1.0.0 追加開始 ++++++++++ */
		
		/* メッセージ用キー情報 */
		String strKey = null;
		strKey = createErrMsg(JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.SHYAKK_CD));
		
		singleCheck(SHYAKK_CD, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.SHYAKK_CD), JZMBatConstZokuseiEnum.hannkakuesuuji1, 2, 2, strKey);
		singleCheck(CHUSKK_CD, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.CHUSKK_CD), JZMBatConstZokuseiEnum.hannkakuesuuji1, 6, 6, strKey);
		singleCheck(SHYAKK_NM, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.SHYAKK_NM), JZMBatConstZokuseiEnum.zenkaku , 1, 121, strKey);
		singleCheck(ADD_DTM, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.ADD_DTM), JZMBatConstZokuseiEnum.day_hour1 , 17, 17, strKey);
		singleCheck(ADD_OPEACNT, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.ADD_OPEACNT), JZMBatConstZokuseiEnum.hannkakuesuuji1 , 6, 10, strKey);
		singleCheck(UPD_DTM, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.UPD_DTM), JZMBatConstZokuseiEnum.day_hour1 , 17, 17, strKey);
		singleCheck(UPD_OPEACNT, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.UPD_OPEACNT), JZMBatConstZokuseiEnum.hannkakuesuuji1 , 6, 10, strKey);
		ketaZokuCheck(DEL_DTM, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.DEL_DTM), JZMBatConstZokuseiEnum.day_hour1 , 17, 17, strKey);
		ketaZokuCheck(DEL_OPEACNT, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.DEL_OPEACNT), JZMBatConstZokuseiEnum.hannkakuesuuji1 , 6, 10, strKey);
		singleCheck(MK_FLG, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.MK_FLG), JZMBatConstZokuseiEnum.hannkakuesuuji1 , 1, 1, strKey);
		nullBlankCheckRefMsg(JZMBatCommon.getInMapData(inMap, KEY_MK_FLG_NM), JPCBatchMessageConstant.EZMB0120KW, 
				new String[]{ZM_M_CD_NM_KANRI, MK_FLG, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.MK_FLG) + strKey});
		singleCheck(ADD_UNYO_YMD, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.ADD_UNYO_YMD), JZMBatConstZokuseiEnum.year_month_day1, 8, 8, strKey);
		singleCheck(ADD_TRN_ID, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.ADD_TRN_ID), JZMBatConstZokuseiEnum.hannkakuesuuji2, 1, 40, strKey);
		singleCheck(UPD_UNYO_YMD, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.UPD_UNYO_YMD), JZMBatConstZokuseiEnum.year_month_day1, 8, 8, strKey);
		singleCheck(UPD_TRN_ID, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.UPD_TRN_ID), JZMBatConstZokuseiEnum.hannkakuesuuji2, 1, 40, strKey);
		ketaZokuCheck(DEL_UNYO_YMD, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.DEL_UNYO_YMD), JZMBatConstZokuseiEnum.year_month_day1, 8, 8, strKey);
		ketaZokuCheck(DEL_TRN_ID, JZMBatCommon.getInMapData(inMap, JBSbatZM_T_SHYAKK_WK.DEL_TRN_ID), JZMBatConstZokuseiEnum.hannkakuesuuji2, 1, 40, strKey);
		
		/* ++++++++++ v1.0.0 追加終了 ++++++++++ */
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/* ++++++++++ v1.0.0 追加開始 ++++++++++ */
	
	/**
	 * 単項目チェックをします。
	 * @param kmkNm 項目名
	 * @param kmkVal 項目値
	 * @param zoku 属性
	 * @param min 桁数1（最小値）
	 * @param max 桁数2（最大値）
	 * @param strKey キー値
	 * @throws JBSbatBusinessException 業務サービス内で発生した例外全般。
	 */
	private void singleCheck(String kmkNm, String kmkVal, JZMBatConstZokuseiEnum zoku, int min, int max, String strKey)throws JBSbatBusinessException
	{
		JZMBatCommon.singleCheck(commonItem, kmkNm, kmkVal, zoku, min, max, strKey);
	}

	/**
	 * 桁数チェックと属性チェックをします。
	 * @param kmkNm 項目名
	 * @param kmkVal 項目値
	 * @param zoku 属性
	 * @param min 桁数1（最小値）
	 * @param max 桁数2（最大値）
	 * @param strKey キー値
	 * @throws JBSbatBusinessException 業務サービス内で発生した例外全般。
	 */
	private void ketaZokuCheck(String kmkNm, String kmkVal, JZMBatConstZokuseiEnum zoku, int min, int max, String strKey)throws JBSbatBusinessException
	{
		if(kmkVal != null && !JZMBatConst.BLANK.equals(kmkVal))
		{
			if(!JZMBatCommon.ketaCheck(commonItem, kmkNm, kmkVal, min, max, strKey) ||
			!JZMBatCommon.zokuCheck(commonItem, kmkNm, kmkVal, zoku, strKey))
			{
				// 単項目チェックでエラーが発生した場合、処理を終了する。
				throw new JBSbatBusinessException(JPCBatchMessageConstant.EZMB0060CW);
			}
		}
	}
	
	/**
	 * 必須チェックをします。関連エラーのログを表示します。
	 * @param kmkVal 項目値
	 * @param msg メッセージコード
	 * @param repChar 埋め込み文字
	 * @throws JBSbatBusinessException 業務サービス内で発生した例外全般。
	 */
	private void nullBlankCheckRefMsg(String kmkVal, String msg, String[] repChar)throws JBSbatBusinessException
	{
		if(kmkVal == null || JZMBatConst.BLANK.equals(kmkVal))
		{
			commonItem.getLogPrint().printBusinessErrorLog(msg, repChar);
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EZMB0130CW, new String[]{REP_CHAR_REF});
		}
	}
	

	/**
	 * エラーメッセージ作成処理です。
	 * @param strKey キー値
	 * @return string メッセージ置換文字列
	 */
	private String createErrMsg(String strKey)
	{
		StringBuffer sb = new StringBuffer();
		
		sb.append(JZMBatConst.KAKKO_LEFT);
		sb.append(JZMBatConst.KEY);
		sb.append(JZMBatConst.ZENKAKU_COLON);
		sb.append(MSG_SHYAKK_CD);
		sb.append(JZMBatConst.EQUAL);
		sb.append(strKey);
		sb.append(JZMBatConst.KAKKO_RIGHT);
		
		return sb.toString();
	}
	/* ++++++++++ v1.0.0 追加終了 ++++++++++ */
	
}
