/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatZMUpdErrSpriSksi
*	ソースファイル名	：JBSbatZMUpdErrSpriSksi.java
*	作成者				：富士通　
*	作成日				：2011年11月30日
*＜機能概要＞
*　住所情報更新エラーリストＳＰＲｉ渡しファイル作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v2.00.00	2011/11/30   FJ)岩元	新規作成
*	v3.00.00	2012/02/29   FJ)岩元	【ST1-2012-0000020】日付項目にスラッシュ編集を追加
*	v54.00.00	2021/08/12   GDC)オーヴィー	【ANK-4069-00-00】EOL対応(バッチ・DBサーバリプレース対応)
*
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JZMBatCommon;
import eo.business.common.JZMBatConst;
import eo.business.util.file.JBSbatZMIFM022;
import eo.business.util.table.JBSbatZM_M_CD_NM_KANRI;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatBusinessFileUtil;

/**
* 住所情報更新エラーリストＳＰＲｉ渡しファイル送信クラスです。<p>
*<BR>
* @author 富士通
*/
public class JBSbatZMUpdErrSpriSend extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";

	/** SQL定義キー(ZM_SELECT_002)*/
	private static final String ZM_M_CD_NM_KANRI_ZM_SELECT_002 = "ZM_SELECT_002";

	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/


	/* ++++++++++ v1.0.0 追加開始 ++++++++++ */
	
	/** 件数 */
	private int cnt = 0;
	
	/** 項目件数 */
	private int kmkCnt = 1;
	
	/** 前のデータのエラー種別*/
	private String hozonErrKind = null;

	/** 住所マスタ反映結果コードMap */
	private HashMap<String, String> rsltCdNmMap = null;

	/** 住所修正コードMap */
	private HashMap<String, String> shuseiCdNmMap = null;
	
	/** ファイル出力クラス */
	private JBSbatBusinessFileUtil outputFileUtil = null;
	
	/** 基本出力ファイル名称　ZML00101_ */
	private static final String KIHON_FILE_NM = "ZML00101_";
	
	/** 出力ファイル名称 */
	private String fileFullPath = null;
	
	/** コード種別コード  住所マスタ反映結果コード */
	private static final String CD_SBT_CD_RSLT_CD = "CD00473";

	/** コード種別コード  住所修正コード */
	private static final String CD_SBT_CD_SHUSEI_CD = "CD00471";

	/* ++++++++++ v1.0.0 追加終了 ++++++++++ */
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
		

		/* ++++++++++ v1.0.0 追加開始 ++++++++++ */
		
		rsltCdNmMap = getRsltCdNmMap();
		shuseiCdNmMap = getShuseiCdNmMap();
		StringBuilder sb = new StringBuilder();
		fileFullPath = sb.append(JZMBatCommon.getGaibuSendDir(JZMBatConst.ZMIFE006_DIR))
				.append(KIHON_FILE_NM)
				.append(JZMBatCommon.getSysDateTime()).toString();
		outputFileUtil = JZMBatCommon.getBusinessFileUtil(fileFullPath);
	
		/* ++++++++++ v1.0.0 追加終了 ++++++++++ */
		
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{

		/* ++++++++++ v1.0.0 追加開始 ++++++++++ */

		
		String errKind = JZMBatCommon.getInMapData(inMap, JBSbatZMIFM022.ERR_KIND);
		
		if(!errKind.equals(hozonErrKind))
		{
			kmkCnt = 1;
		}
		hozonErrKind = errKind;
		
		ArrayList<String> outputList = new ArrayList<String>();
		
		outputList.add(JZMBatCommon.addDoubleQuot(getRsltCdMapValue(errKind)));
		outputList.add(JZMBatCommon.addDoubleQuot(String.valueOf(kmkCnt)));		
		outputList.add(getShuseiCdNm(inMap, JBSbatZMIFM022.SHUSEI_CD));
		outputList.add(getInMapData(inMap, JBSbatZMIFM022.AD_CD));
		outputList.add(getInMapData(inMap, JBSbatZMIFM022.NEW_AD_CD));
		outputList.add(getInMapData(inMap, JBSbatZMIFM022.PCD));
		outputList.add(getInMapDataYM(inMap, JBSbatZMIFM022.EXEC_YM));
		outputList.add(getInMapDataYM(inMap, JBSbatZMIFM022.HAISHI_YM));
		outputList.add(getInMapData(inMap, JBSbatZMIFM022.STATE_NM));
		outputList.add(getInMapData(inMap, JBSbatZMIFM022.CITY_NM));
		outputList.add(getInMapData(inMap, JBSbatZMIFM022.OAZTSU_NM));
		outputList.add(getInMapData(inMap, JBSbatZMIFM022.AZCHO_NM));

		outputFileUtil.print(outputList);
		
		cnt++;
		kmkCnt++;
		
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/

		/* ++++++++++ v1.0.0 追加終了 ++++++++++ */
		
	}


	/* ++++++++++ v1.0.0 追加開始 ++++++++++ */
	

	/**
	 * 住所マスタ反映結果コードハッシュマップの値を取得します。
	 * @param key キー
	 * @return 値
	 */
	private String getRsltCdMapValue(String key)
	{
		String rtn = rsltCdNmMap.get(key);
		return rtn == null ? JZMBatConst.BLANK : rtn;
	}

	/**
	 * 住所修正コードハッシュマップの値を取得します。
	 * @param key キー
	 * @return 値
	 */
	private String getShuseiCdMapValue(String key)
	{
		
		String rtn = shuseiCdNmMap.get(key);
		return rtn == null ? JZMBatConst.BLANK : rtn;
	}
	
	/**
	 * 修正コード名称を取得します。
	 * @param inMap 入力電文
	 * @param inMapKey 入力電文キー
	 * @return 修正コード名称
	 */
	private String getShuseiCdNm(JBSbatServiceInterfaceMap inMap, String inMapKey)
	{
		String key = JZMBatCommon.getInMapData(inMap, inMapKey);
		return JZMBatCommon.addDoubleQuot(getShuseiCdMapValue(key));
	}
	
	/**
	 * InMapの値を取得します。
	 * @param inMap 入力電文
	 * @param key キー
	 * @return 値
	 * @throws Exception 
	 */
	private String getInMapData(JBSbatServiceInterfaceMap inMap, String key)
	{
		return JZMBatCommon.addDoubleQuot(JZMBatCommon.getInMapData(inMap, key));
	}

	
	/**
	 * InMapの値を取得します。
	 * @param inMap 入力電文
	 * @param key キー
	 * @return 値
	 * @throws Exception 
	 */
	private String getInMapDataYM(JBSbatServiceInterfaceMap inMap, String key) throws Exception
	{
		return JZMBatCommon.addDoubleQuot(JZMBatCommon.addSlashYYYYMM(JZMBatCommon.getInMapData(inMap, key)));
	}

	
	/**
	 * InMapの値を取得します。
	 * @param inMap 入力電文
	 * @param key キー
	 * @return 値
	 * @throws Exception 
	 */
	private String getInMapDataYMD(JBSbatServiceInterfaceMap inMap, String key) throws Exception
	{
		return JZMBatCommon.addDoubleQuot(JZMBatCommon.addSlashYYYYMMDD(JZMBatCommon.getInMapData(inMap, key)));
	}

	/**
	 * 住所マスタ反映結果コードハッシュマップを取得します。
	 * @return コード名称管理ハッシュマップ
	 * @throws Exception
	 */
	private HashMap<String, String> getRsltCdNmMap() throws Exception
	{
		return executeSelectCdNmKanri(CD_SBT_CD_RSLT_CD);
	}

	/**
	 * 住所修正コードハッシュマップを取得します。
	 * @return コード名称管理ハッシュマップ
	 * @throws Exception
	 */
	private HashMap<String, String> getShuseiCdNmMap() throws Exception
	{
		return executeSelectCdNmKanri(CD_SBT_CD_SHUSEI_CD);
	}
	
	/**
	 * 引数と一致するコード名称ハッシュマップを取得します。
	 * @param cdSbtCd コード種別コード
	 * @return コード名称ハッシュマップ
	 * @throws Exception
	 */
	private HashMap<String, String> executeSelectCdNmKanri(String cdSbtCd) throws Exception
	{
		HashMap<String, String> map = new HashMap<String, String>();
		
		String opeDate = commonItem.getOpeDate();
		String[] param = {cdSbtCd, opeDate, opeDate};
		executeZM_M_CD_NM_KANRI_ZM_SELECT_002(param);
		
		JBSbatCommonDBInterface dbif = db_ZM_M_CD_NM_KANRI.selectNext();
		
		String cd = null;
		String nm = null;
		while(dbif != null)
		{
			
			cd = dbif.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV);
			nm = dbif.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM);
			map.put(cd, nm);
			dbif = db_ZM_M_CD_NM_KANRI.selectNext();
		}
		return map;
	}
	

	/* ++++++++++ v1.0.0 追加終了 ++++++++++ */
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{

		/* ++++++++++ v1.0.0 追加開始 ++++++++++ */
		
		outputFileUtil.close();
		
		String fileFullPathCnt = fileFullPath + JZMBatConst.CNT;
		
		// 件数ファイルの作成
		JZMBatCommon.printDoubleQuoteCntFile(fileFullPathCnt, cnt);

		String fileFullPathFlg = fileFullPath + JZMBatConst.FLG;
		
		// フラグファイルの作成
		JZMBatCommon.printDoubleQuoteFlgFile(fileFullPathFlg);
		// ANK-4069-00-00 DEL START
		//ArrayList<String> sendList = new ArrayList<String>();
		//sendList.add(fileFullPath);
		//sendList.add(fileFullPathCnt);
		//sendList.add(fileFullPathFlg);
		//JZMBatCommon.putFTPGaibu(commonItem, sendList, JZMBatConst.ZMIFE006);
		// ANK-4069-00-00 DEL END
		
		/* ++++++++++ v1.0.0 追加終了 ++++++++++ */
		
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_CD_NM_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(ZM_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	コード種別コード
	 *		 	コード適用開始年月日
	 *		 	コード適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_CD_NM_KANRI_ZM_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_ZM_SELECT_002);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
