/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKHapiePTaiSvcKeiIktDel
*	ソースファイル名	：JBSbatKKHapiePTaiSvcKeiIktDel.java
*	作成者				：富士通　
*	作成日				：2016年10月11日
*＜機能概要＞
*　はぴｅポイント対象サービス契約一括削除部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v28.00.00	2016/10/11   貝本		新規作成
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCCbatShoriIraiUtil;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.common.JKKBatOutputUtil;
import eo.business.util.file.JBSbatKKIFM722;
import eo.business.util.file.JBSbatKKIFM723;
import eo.business.util.table.JBSbatCC_T_DLYD_TRN_REQ;
import eo.business.util.table.JBSbatCC_T_EFILE_KANRI;
import eo.business.util.table.JBSbatKK_T_HAPIEK_TG_SVKEI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JCCFileUtil;
import eo.common.util.JTUStringUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatCheckUtil;
import eo.framework.util.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKHapiePTaiSvcKeiIktDel extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(はぴｅポイント契約対象サービス契約)*/
	private static final String D_TBL_NAME_KK_T_HAPIEK_TG_SVKEI = "KK_T_HAPIEK_TG_SVKEI";
	/** テーブル(電子ファイル管理)*/
	private static final String D_TBL_NAME_CC_T_EFILE_KANRI = "CC_T_EFILE_KANRI";
	/** テーブル(はぴｅポイント契約)*/
	private static final String D_TBL_NAME_KK_T_HAPIE_POINT_KEI = "KK_T_HAPIE_POINT_KEI";
	/** テーブル(システムパラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_SYS_PARAM_KNRI = "ZM_M_SYS_PARAM_KNRI";
	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";

	/** SQL定義キー(KK_UPDATE_003)削除補正*/
	private static final String KK_T_HAPIEK_TG_SVKEI_KK_UPDATE_003 = "KK_UPDATE_003";
	/** SQL定義キー(KK_SELECT_005)はぴe関連チェック*/
	private static final String KK_T_HAPIEK_TG_SVKEI_KK_SELECT_005 = "KK_SELECT_005";
	/** SQL定義キー(KK_SELECT_016)サービス契約番号関連チェック*/
	private static final String KK_T_HAPIE_POINT_KEI_KK_SELECT_016 = "KK_SELECT_016";
	/** SQL定義キー(KK_SELECT_001)*/
	private static final String CC_T_EFILE_KANRI_KK_SELECT_001 = "KK_SELECT_001";

	/** テーブルアクセスクラス(はぴｅポイント契約対象サービス契約)*/
	private JBSbatSQLAccess db_KK_T_HAPIEK_TG_SVKEI = null;
	/** テーブルアクセスクラス(電子ファイル管理)*/
	private JBSbatSQLAccess db_CC_T_EFILE_KANRI = null;
	/** テーブルアクセスクラス(はぴｅポイント契約)*/
	private JBSbatSQLAccess db_KK_T_HAPIE_POINT_KEI = null;
	/** テーブルアクセスクラス(システムパラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_SYS_PARAM_KNRI = null;
	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;

	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**エラー内容マップ*/
	private HashMap<String,String> errCodeMap = null;

	/**エラーコード はぴe番号単項目チェックエラーコード*/
	private final String E01 = "E01";
	/**エラーコード サービス契約番号単項目チェックエラーコード */
	private final String E02 = "E02";
	/**エラーコード 補正メモ単項目チェックエラーコード */
	private final String E03 = "E03";
	/**エラーコード はぴe番号関連チェックエラーコード */
	private final String E11 = "E11";
	/**エラーコード サービス契約番号関連チェックエラーコード */
	private final String E12 = "E12";

	/**審査結果コード「個別」 */
	private final String SNS_RSLCD_KOBETSU = "02"; 

	/**審査結果コード「審査NG」 */
	private final String SNS_RSLCD_NG = "01"; 

	/**はぴeポイント対象サービス契約一括削除ファイルID */
	private final String inFileId = "KKIFM722";

	/**バッチ運用年月日*/
	private String unyoYmd = null;

	/**チェックエラーリスト*/
	private ArrayList<JBSbatServiceInterfaceMap> errList = null;

	/**補正リスト*/
	private ArrayList<JBSbatServiceInterfaceMap> hoseiList = null;
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/

		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		super.logPrint.printDebugLog("initial start");


		// DBアクセスクラスを生成します
		db_KK_T_HAPIEK_TG_SVKEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_HAPIEK_TG_SVKEI);
		db_CC_T_EFILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CC_T_EFILE_KANRI);
		db_KK_T_HAPIE_POINT_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_HAPIE_POINT_KEI);
		db_ZM_M_SYS_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_SYS_PARAM_KNRI);
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		//バッチ運用年月日
		unyoYmd = super.opeDate;
		super.logPrint.printDebugLog("バッチ運用年月日：" + unyoYmd);

		//エラー内容を設定
		errCodeMap = new HashMap<String, String>();

		errCodeMap.put(E01, "はぴe番号の設定内容が不正です。");
		super.logPrint.printDebugLog("エラーメッセージE01：" + errCodeMap.get(E01));

		errCodeMap.put(E02, "サービス契約番号の設定内容が不正です。");
		super.logPrint.printDebugLog("エラーメッセージE02：" + errCodeMap.get(E02));

		errCodeMap.put(E03, "個別補正メモの設定内容が不正です。");
		super.logPrint.printDebugLog("エラーメッセージE03：" + errCodeMap.get(E03));

		errCodeMap.put(E11, "補正対象のはぴe番号は存在しません。");
		super.logPrint.printDebugLog("エラーメッセージE11：" + errCodeMap.get(E11));

		errCodeMap.put(E12, "補正対象のお客さまIDは存在しません。");
		super.logPrint.printDebugLog("エラーメッセージE12：" + errCodeMap.get(E12));

		super.logPrint.printDebugLog("initial end");
		/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * 
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		super.logPrint.printDebugLog("execute start");
		//チェックエラーリスト、補正リストを生成
		errList = new ArrayList<JBSbatServiceInterfaceMap>();
		hoseiList = new ArrayList<JBSbatServiceInterfaceMap>();

		//出力用ファイル名を取得
		String[] freeItems = super.freeItem.split(JACStrConst.SEMI_COLON);

		String errFileId = freeItems[0];
		super.logPrint.printDebugLog("ファイルＩＤ：" + errFileId);
		String errFilePath = freeItems[1] + JACStrConst.SLASH;
		super.logPrint.printDebugLog("ファイルパス：" + errFilePath);
		String errFileEngName = freeItems[2];
		super.logPrint.printDebugLog("ファイル英名：" + errFileEngName);
		String errFileWaName = freeItems[3];
		super.logPrint.printDebugLog("ファイル和名：" + errFileWaName);
		
		String errFileFullPath = errFilePath + errFileEngName;

		//ファイル読み込み準備
		JBSbatInputFileUtil inFileObj = null;
		JBSbatDefFileUtil   inFileDef = null;


		//ディレイド処理依頼情報をリストで取得
		ArrayList<HashMap<String,Object>> delayedMapList = JCCbatShoriIraiUtil.getShoriIraiInfo(commonItem, this.jobid);
		//データが取れなかった場合、処理を終了するためにnullを返す
		if(delayedMapList == null)
		{
			super.logPrint.printDebugLog("ディレイド処理依頼情報取得失敗");
			return null;
		}
		//リストを取得した場合、1件目を取得
		HashMap<String,Object> delayedMap = delayedMapList.get(0);

		//ディレイド処理依頼番号、入力電子ファイル管理番号を取得
		String delayedTrnNo = (String)delayedMap.get(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_REQ_NO);
		super.logPrint.printDebugLog("ﾃﾞｨﾚｲﾄﾞ処理依頼番号：" + delayedTrnNo);
 		String eFileKnrNo = (String)delayedMap.get(JBSbatCC_T_DLYD_TRN_REQ.INPUT_EFILE_KANRI_NO);
		super.logPrint.printDebugLog("電子ファイル管理番号：" + eFileKnrNo);

		//電子管理番号をキーに入力ファイルパスを取得する
		String filePath = JCCBatCommon.searchDenshiFile(commonItem, eFileKnrNo);
		super.logPrint.printDebugLog("電子ファイルパス：" + filePath);
		//ファイルパスを取得できなかった場合、
		//ディレイド処理ステータスを処理エラーに更新し、処理を終了する
		if(filePath == null)
		{
			super.logPrint.printDebugLog("電子ファイルパス取得失敗");
			JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, delayedTrnNo, "2", null);
			return null;
		}

		//一括削除ファイルのdefファイルのパスを設定
		String defFileObj = JBSbatAplConst.getAplConstValue("IND") + inFileId + ".def";

		//入力ファイル復元
		try
		{
			inFileObj = new JBSbatInputFileUtil(filePath);
			inFileDef = new JBSbatDefFileUtil(defFileObj, inFileObj);
			inFileObj.createReader();
		}
		//入力ファイルを読み込めなかった場合、
		//ディレイド処理ステータスを処理エラーに設定し、処理を終了する
		catch(Exception e)
		{
			super.logPrint.printDebugLog("ファイル復元失敗");
			JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, delayedTrnNo, "2", null);
			return null;
		}

		//１行ずつチェックを行い、リストに格納する
		while(inFileObj.ready())
		{
			String line = inFileObj.readLine();
			JBSbatServiceInterfaceMap rowMap = inFileDef.lineToObject(line, inFileObj, 0);

			//単項目チェックを実施
			//エラーが検出されなければ関連チェックも実施する
			//true:エラーあり、false:エラーなし
			if(!isSingleCheckKKIFM722(rowMap))
			{
				isKanrenCheck(rowMap);
			}
		}

		//エラーリスト件数を取得
		int errRcdCnt = errList.size();
		//エラーリストにデータが登録されている場合、ファイルを作成
		if(errRcdCnt >= 1)
		{
			JBSbatOutputItem outItem = new JBSbatOutputItem();

			for(JBSbatServiceInterfaceMap map :errList)
			{
				outItem.addOutMapList(map);
			}
			//エラーファイル作成
			JKKBatOutputUtil.editOutFile(commonItem, outItem, errFileId, errFilePath, errFileEngName);
		}

		//補正リストにデータが登録されている場合、更新する
		if(hoseiList.size() >= 1)
		{
			for(JBSbatServiceInterfaceMap map : hoseiList)
			{
				Object[] pkPrm = new Object[]
				{
					map.get(JBSbatKK_T_HAPIEK_TG_SVKEI.HAPIE_POINT_KEI_NO),			//はぴeポイント契約番号
					map.get(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TRGT_SVC_KEI_NO),		//積算対象サービス契約番号
				};

				Object[] updPrm = new Object[]
			    {
					map.get(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TRGT_SVKEI_SKEKKA_CD),	//審査結果コード
					map.get(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TRGT_SVKEI_HOSEI_YMD),	//積算対象サービス契約補正年月日(バッチ運用日)
					map.get(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TG_SVKEI_HOSEI_MEMO),	//補正メモ
				};
				executeKK_T_HAPIEK_TG_SVKEI_KK_UPDATE_003(pkPrm, updPrm);
			}
		}

		//ディレイド処理依頼更新処理
		if(errRcdCnt >= 1)
		{
			//ディレイド処理結果コードを業務エラーに更新し、エラーファイル情報を取得する
			HashMap<String, String> retMap = JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, delayedTrnNo, "2", errFileFullPath);

			//エラーファイルの電子ファイル管理番号取得
			String eFileKanriNo = retMap.get("EFILE_KAMRI_NO");

			//ダウンロードファイル管理テーブルに登録
			if(eFileKanriNo != null)
			{
				insertZM_T_DL_FILE_KANRI(eFileKanriNo, errFileWaName, errFileFullPath, errRcdCnt);
			}
		}
		else
		{	//ディレイド処理結果コードを完了に更新
			JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, delayedTrnNo, JKKBatConst.RESULT_FIX, null);
		}

		super.logPrint.printDebugLog("execute end");
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}


	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
		super.logPrint.printDebugLog("terminal start");

	/**▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_HAPIEK_TG_SVKEI.close();
		db_CC_T_EFILE_KANRI.close();
		db_KK_T_HAPIE_POINT_KEI.close();
		db_ZM_M_SYS_PARAM_KNRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
		super.logPrint.printDebugLog("terminal end");
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * SQLKEY(KK_UPDATE_003)でDBアクセスを行います。(削除補正)<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		pkParam:順にバイント変数の値をpkParam配列に入れます。バイント変数は以下に説明します。
	 *			HAPIE_POINT_KEI_NO はぴeポイント契約番号
	 *			SKSN_TRGT_SVC_KEI_NO 積算対象サービス契約番号
	 *		updParam:順にバイント変数の値をpkParam配列に入れます。バイント変数は以下に説明します
	 *			SKSN_TRGT_SVKEI_SKEKKA_CD 審査結果コード
	 *			SKSN_TRGT_SVKEI_HOSEI_YMD 積算対象サービス契約補正年月日
	 *			SKSN_TG_SVKEI_HOSEI_MEMO 積算対象サービス契約補正メモ
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_HAPIEK_TG_SVKEI_KK_UPDATE_003(Object[] pkParam, Object[] updParam) throws Exception
	{

		/** PK電文 */
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue(JBSbatKK_T_HAPIEK_TG_SVKEI.HAPIE_POINT_KEI_NO, pkParam[0]);
		whereMap.setValue(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TRGT_SVC_KEI_NO, pkParam[1]);


		/** 更新値用電文 */
		JBSbatCommonDBInterface valueMap = new JBSbatCommonDBInterface();
		if(SNS_RSLCD_KOBETSU.equals(updParam[0].toString()))
		{
			valueMap.setValue(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TRGT_SVKEI_SKEKKA_CD, SNS_RSLCD_NG);
		}
		else
		{
			valueMap.setValue(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TRGT_SVKEI_SKEKKA_CD, updParam[0]);
		}
		valueMap.setValue(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TRGT_SVKEI_HOSEI_CD, "2");
		valueMap.setValue(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TRGT_SVKEI_HOSEI_YMD, updParam[1]);
		valueMap.setValue(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TG_SVKEI_HOSEI_MEMO, updParam[2]);
		valueMap.setValue(JBSbatKK_T_HAPIEK_TG_SVKEI.UPD_DTM, JBSbatDateUtil.getSystemDateTimeStamp());
		valueMap.setValue(JBSbatKK_T_HAPIEK_TG_SVKEI.UPD_OPEACNT, super.batchUserId);

		// DBアクセスを実行します
		db_KK_T_HAPIEK_TG_SVKEI.updateByPrimaryKeys(whereMap, valueMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	

	/**
	 * SQLKEY(KK_SELECT_005)でDBアクセスを行います。(サービス契約番号関連チェック)<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	HAPIE_NO はぴe番号
	 *		 	SKSN_TRGT_SVC_KEI_NO 積算対象サービス契約番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_HAPIEK_TG_SVKEI_KK_SELECT_005(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_HAPIEK_TG_SVKEI.selectBySqlDefine(paramList, KK_T_HAPIEK_TG_SVKEI_KK_SELECT_005);
	}
	

	/**
	 * SQLKEY(KK_SELECT_016)でDBアクセスを行います。(はぴe番号関連チェック)<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	HAPIE_NO はぴe番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_HAPIE_POINT_KEI_KK_SELECT_016(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_HAPIE_POINT_KEI.selectBySqlDefine(paramList, KK_T_HAPIE_POINT_KEI_KK_SELECT_016);
	}
	/**
	 * 単項目チェックを実施し、結果を返します。
	 * チェックエラーの場合、項目単位にエラー情報をリストに追加します。
	 * 
	 * @param rowMa 行マップデータ
	 * @return チェック結果
	 */
	private boolean isSingleCheckKKIFM722(JBSbatServiceInterfaceMap rowMap)
	{
		//単項目チェックの結果
		boolean singleCheckResultFlg = false;
		//エラーリストの追加判定
		boolean errListAddFlg = false;

	/**-----------------------------------------------------
	 * はぴe番号単項目チェック
	 * -----------------------------------------------------
	 */
		super.logPrint.printDebugLog("--------------------------------------");
		super.logPrint.printDebugLog("[はぴe番号]単項目チェック");

		//はぴe番号の値を取得
		String hapieNo = (String)rowMap.get(JBSbatKKIFM722.HAPIE_NO);
		

		//必須チェック
		if(JTUStringUtil.isNull(hapieNo))
		{
			super.logPrint.printDebugLog("必須エラー：" + hapieNo);
			errListAddFlg = true;
		}
		//桁数チェック
		if(!JBSbatCheckUtil.invoke(hapieNo, new String[]{"ketasuu1","19"}))
		{
			super.logPrint.printDebugLog("桁数エラー：" + hapieNo);
			errListAddFlg = true;
		}
		//ドメインチェック
		if(!JBSbatCheckUtil.invoke(hapieNo, new String[]{"hannkakuesuuji2"}))
		{
			super.logPrint.printDebugLog("ドメインエラー：" + hapieNo);
			errListAddFlg = true;
		}

		//はぴe番号チェック　エラーあり時、
		//エラーリストに追加し、単項目結果をエラーありに設定する。
		//エラーリスト追加フラグは初期化
		if(errListAddFlg)
		{
			super.logPrint.printDebugLog("--------------------------------------");
			addErrList(rowMap,E01);
			singleCheckResultFlg = true;
			errListAddFlg = false;
		}

	/**-----------------------------------------------------
	 * サービス契約番号単項目チェック
	 * -----------------------------------------------------
	 */

		super.logPrint.printDebugLog("[積算対象サービス契約番号]単項目チェック");
		//サービス契約番号の値を取得
		String svcKeiNo = (String)rowMap.get(JBSbatKKIFM722.SKSN_TRGT_SVC_KEI_NO);

		//必須チェック
		if(JTUStringUtil.isNull(svcKeiNo))
		{
			super.logPrint.printDebugLog("必須エラー" + svcKeiNo);
			errListAddFlg = true;
		}
		//桁数チェック
		if(!JBSbatCheckUtil.invoke(svcKeiNo, new String[]{"ketasuu1","10"}))
		{
			super.logPrint.printDebugLog("桁数エラー" + svcKeiNo);
			errListAddFlg = true;
		}
		//ドメインチェック
		if(!JBSbatCheckUtil.invoke(svcKeiNo, new String[]{"hannkakuesuuji1"}))
		{
			super.logPrint.printDebugLog("ドメインエラー" + svcKeiNo);
			errListAddFlg = true;
		}

		//サービス契約番号　エラーあり時
		//エラーリストに追加し、単項目結果をエラーありに設定する。
		//エラーリスト追加フラグは初期化
		if(errListAddFlg)
		{
			addErrList(rowMap,E02);
			singleCheckResultFlg = true;
			errListAddFlg = false;
		}

	/**-----------------------------------------------------
	 * 個別補正メモ単項目チェック
	 * -----------------------------------------------------
	 */
		super.logPrint.printDebugLog("[個別補正メモ]単項目チェック");
		//個別補正メモの取得
		String memo = (String)rowMap.get(JBSbatKKIFM722.SKSN_TG_SVKEI_HOSEI_MEMO);

		//桁数チェック
		if(!JBSbatCheckUtil.invoke(memo, new String[]{"ketasuu2","0","180"}))
		{
			super.logPrint.printDebugLog("桁数エラー" + svcKeiNo);
			errListAddFlg = true;
		}
		//ドメインチェック
		if(!JBSbatCheckUtil.invoke(memo, new String[]{"mix1"}))
		{
			super.logPrint.printDebugLog("ドメインエラー" + svcKeiNo);
			errListAddFlg = true;
		}

		//個別補正メモ　エラーあり時
		//エラーリストに追加し、単項目結果をエラーありに設定する。
		if(errListAddFlg)
		{
			super.logPrint.printDebugLog("単項目チェック結果：NG");
			addErrList(rowMap,E03);
			singleCheckResultFlg = true;
		}

		return singleCheckResultFlg;
	}
	
	/**
	 * 関連チェックを実施し、結果を返します。
	 * 
	 * @param rowMap 行マップデータ
	 * @return チェック結果
	 */
	private void isKanrenCheck(JBSbatServiceInterfaceMap rowMap)throws Exception
	{
		/**----------------------------------------------------------------------------------------------------------
		 * はぴe番号関連チェック
		 * 入力された、はぴe番号からサービス契約番号を特定するために
		 * はぴeポイント契約テーブルに存在するかチェックする。
		 * ----------------------------------------------------------------------------------------------------------
		 */

		super.logPrint.printDebugLog("[はぴe番号]関連チェック");
		
		//SQL実行パラメータ
		Object[] prmHapieNo = new Object[] { rowMap.get(JBSbatKKIFM722.HAPIE_NO) };

		//SQL実行
		executeKK_T_HAPIE_POINT_KEI_KK_SELECT_016(prmHapieNo);

		//SQL実行結果取得
		JBSbatCommonDBInterface hapieRecord = db_KK_T_HAPIE_POINT_KEI.selectNext();

		//結果が取得できなかった場合、
		//エラーリストに追加し、関連チェックを終了する
		if(hapieRecord == null)
		{
			super.logPrint.printDebugLog("関連チェックエラー");
			super.logPrint.printDebugLog("--------------------------------------");
			addErrList(rowMap,E11);
			return ;
		}

		/**----------------------------------------------------------------------------------------------------------
		 * サービス契約関連チェック
		 * お客様のサービス契約を特定するために、はぴe番号とサービス契約番号をキーに
		 * はぴeポイント対象サービス契約テーブルを検索
		 * ----------------------------------------------------------------------------------------------------------
		 */

		super.logPrint.printDebugLog("[積算対象サービス契約番号]関連チェック");
		//SQLパラメータ
		Object[] prmSvcKeiNo = new Object[] 
		{
			rowMap.get(JBSbatKKIFM722.HAPIE_NO),
			rowMap.get(JBSbatKKIFM722.SKSN_TRGT_SVC_KEI_NO)
		};

		//SQL実行
		executeKK_T_HAPIEK_TG_SVKEI_KK_SELECT_005(prmSvcKeiNo);

		//SQL実行結果取得
		JBSbatCommonDBInterface svcRecord = db_KK_T_HAPIEK_TG_SVKEI.selectNext();

		//取得できなかった場合、エラーリストに追加する
		//取得できた場合、取得結果を全て補正リストに追加する
		if(svcRecord == null)
		{
			super.logPrint.printDebugLog("[積算対象サービス契約番号]関連チェックエラー");
			addErrList(rowMap,E12);
		}
		else
		{
			addHoseiList(svcRecord, (String)rowMap.get(JBSbatKKIFM722.SKSN_TG_SVKEI_HOSEI_MEMO));
		}
		super.logPrint.printDebugLog("[積算対象サービス契約番号]関連チェック結果：OK");
		super.logPrint.printDebugLog("--------------------------------------");
		return ;
	}

	/**
	 * エラーリストにデータを格納します。
	 * 
	 * @param rowMap 行マップデータ
	 * @param errCd エラーコード
	 */
	private void addErrList(JBSbatServiceInterfaceMap rowMap, String errCd)
	{

		JBSbatServiceInterfaceMap errMap = new JBSbatServiceInterfaceMap();

		//エラーコードと行データをリストに格納
		errMap.set(JBSbatKKIFM723.IKT_ADD_ERR_CD, 			errCd);
		errMap.set(JBSbatKKIFM723.ERR_NAIYO, 				errCodeMap.get(errCd));
		errMap.set(JBSbatKKIFM723.HAPIE_NO, 				rowMap.get(JBSbatKKIFM722.HAPIE_NO));
		errMap.set(JBSbatKKIFM723.SKSN_TRGT_SVC_KEI_NO, 	rowMap.get(JBSbatKKIFM722.SKSN_TRGT_SVC_KEI_NO));
		errMap.set(JBSbatKKIFM723.SKSN_TG_SVKEI_HOSEI_MEMO, rowMap.get(JBSbatKKIFM722.SKSN_TG_SVKEI_HOSEI_MEMO));
		errMap.setOutFlg(true);

		errList.add(errMap);
	}

	/**
	 * 削除補正を実施するデータをリストに格納。
	 * @param svcRecord SQL取得データ
	 * @param mem 個別補正メモ
	 */
	private void addHoseiList(JBSbatCommonDBInterface svcRecord, String memo)
	{

		JBSbatServiceInterfaceMap hoseiMap = new JBSbatServiceInterfaceMap();

		//削除補正対象の情報と個別補正メモをリストに格納
		hoseiMap.set(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TRGT_SVKEI_SKEKKA_CD, svcRecord.getValue(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TRGT_SVKEI_SKEKKA_CD));
		hoseiMap.set(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TRGT_SVKEI_HOSEI_YMD, unyoYmd);
		hoseiMap.set(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TG_SVKEI_HOSEI_MEMO, memo);
		hoseiMap.set(JBSbatKK_T_HAPIEK_TG_SVKEI.HAPIE_POINT_KEI_NO, svcRecord.getValue(JBSbatKK_T_HAPIEK_TG_SVKEI.HAPIE_POINT_KEI_NO));
		hoseiMap.set(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TRGT_SVC_KEI_NO, svcRecord.getValue(JBSbatKK_T_HAPIEK_TG_SVKEI.SKSN_TRGT_SVC_KEI_NO));

		hoseiList.add(hoseiMap);
	}


	/**
	 * ダウンロードファイル管理テーブルの登録を行います。
	 * <br>
	 * @param eFileKanriNo　電子ファイル管理番号
	 * @param fileName　ファイル名
	 * @param filePath　ファイルフルパス
	 * @throws Exception 
	 */
	private void insertZM_T_DL_FILE_KANRI(String eFileKanriNo, String fileName, String filePath, int errRecordCount) throws Exception
	{
		JBSbatCommonDBInterface eFileInfo = getEfileKanriInfo(eFileKanriNo);
		
		// パラメータ設定
		Object[] prm = new Object[15];
		prm[0] = JKKBatCommon.getFormatedNextSeq(commonItem, "SEQ_FILE_NO", "", 12);
		prm[1] = "000000000157";
		prm[2] = eFileKanriNo;
		prm[3] = fileName;
		prm[4] = JCCFileUtil.getFileSize(filePath);
		prm[5] = String.valueOf(errRecordCount);
		prm[6] = eFileInfo.getString(JBSbatCC_T_EFILE_KANRI.ADD_DTM);
		prm[7] = eFileInfo.getString(JBSbatCC_T_EFILE_KANRI.FILE_DEL_YMD);
		prm[8] = JBSbatDateUtil.getSystemDateTimeStamp();
		prm[9] = "SYSTEM";
		prm[10] = JBSbatDateUtil.getSystemDateTimeStamp();
		prm[11] = "SYSTEM";
		prm[12] = null;
		prm[13] = null;
		prm[14] = "0";

		executeZM_T_DL_FILE_KANRI_PKINSERT(prm);
	}
	
	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	ファイル番号				FILE_NO
	 *		 	処理管理番号				TRN_KANRI_NO
	 *		 	電子ファイル管理番号				EFILE_KANRI_NO
	 *		 	ファイル名				FILE_NM
	 *		 	ファイルサイズ				FILE_SIZE
	 *		 	データ件数				DATA_CNT
	 *		 	ファイル登録年月日時分秒				FILE_ADD_DTM
	 *		 	ファイル削除年月日				FILE_DEL_YMD
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_DL_FILE_KANRI_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("FILE_NO", setParam[0]);
		setMap.setValue("TRN_KANRI_NO", setParam[1]);
		setMap.setValue("EFILE_KANRI_NO", setParam[2]);
		setMap.setValue("FILE_NM", setParam[3]);
		setMap.setValue("FILE_SIZE", setParam[4]);
		setMap.setValue("DATA_CNT", setParam[5]);
		setMap.setValue("FILE_ADD_DTM", setParam[6]);
		setMap.setValue("FILE_DEL_YMD", setParam[7]);
		setMap.setValue("ADD_DTM", setParam[8]);
		setMap.setValue("ADD_OPEACNT", setParam[9]);
		setMap.setValue("UPD_DTM", setParam[10]);
		setMap.setValue("UPD_OPEACNT", setParam[11]);
		setMap.setValue("DEL_DTM", setParam[12]);
		setMap.setValue("DEL_OPEACNT", setParam[13]);
		setMap.setValue("MK_FLG", setParam[14]);
	
		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.insertByPrimaryKeys(setMap);
	}

	/**
	 * 電子ファイル管理スキーマより、電子ファイル管理の情報を取得します。
	 * 
	 * @param eFileNO 		電子ファイル管理番号
	 * @return dbMap		電子ファイル管理の情報
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private JBSbatCommonDBInterface getEfileKanriInfo(String eFileKanriNo) throws Exception
	{
		Object[] param = new Object[1];
		param[0] = eFileKanriNo;
		
		// SQL実行
		executeCC_T_EFILE_KANRI_KK_SELECT_001(param);
		
		// 結果取得
		JBSbatCommonDBInterface dbMap = db_CC_T_EFILE_KANRI.selectNext();
		
//		if (dbMap == null)
//		{
//			// DB未存在エラー
//			String[] msgParam = new String[]
//			{ JBSbatCC_T_EFILE_KANRI.TABLE_NAME };
//			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0720KW, msgParam);
//		}
		return dbMap;
	}
	
	/**
	 * SQLKEY(KK_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	電子ファイル管理番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCC_T_EFILE_KANRI_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CC_T_EFILE_KANRI.selectBySqlDefine(paramList, CC_T_EFILE_KANRI_KK_SELECT_001);
	}

}
