/*********************************************************************
*  All Rights reserved,Copyright (c) Fujitsu ,2017					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKBbssRsDslReq
*	ソースファイル名	：JBSbatKKBbssRsDslReq.java
*	作成者				：FJ)二村　
*	作成日				：2017年04月07日
*＜機能概要＞
*　BBSSライセンス解約依頼処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v32.00.00	2017/04/07   FJ)二村	ANK-3149-00-00 新規作成
*********************************************************************/

package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatOutputUtil;
import eo.business.util.file.JBSbatKKIFM729;
import eo.business.util.table.JBSbatKK_T_TAJGS_KEI_IDT;
import eo.common.util.JKKStringUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.util.JBSbatAplConst;



/**
* BBSSライセンス解約依頼処理部品です。
*<BR>
* @author FJ
*/
public class JBSbatKKBbssRsDslReq extends JBSbatBusinessService
{
	/** テーブルアクセスクラス（他事業者契約異動通知）*/
	private JBSbatSQLAccess db_KK_T_TAJGS_KEI_IDT = null;
	
	/** レコード区分 */
	private static final String RECORD_DIV_01 =  "01";

	/** 他事業者契約異動種別コード （インターネットサギウォールライセンス解約依頼）*/
	private static final String TAJGS_KEI_IDO_SBT_CD_0202 = "0202";

	/** 他事業者契約異動種別コード （ノートンファミリープレミアライセンス解約依頼）*/
	private static final String TAJGS_KEI_IDO_SBT_CD_0212 = "0212";

	/** 商品ID （インターネットサギウォールライセンス解約依頼）*/
	private static final String PRODUCT_ID_0202 = "BSDCDK0016";

	/** 商品ID（ノートンファミリープレミアライセンス解約依頼）*/
	private static final String PRODUCT_ID_0212 = "dammy";//todo

	/** SQL定義キー（KK_UPDATE_002）*/
	private static final String KK_T_TAJGS_KEI_IDT_KK_UPDATE_002 = "KK_UPDATE_002";

	/** SQL定義キー（KK_SELECT_004）*/
	private static final String KK_T_TAJGS_KEI_IDT_KK_SELECT_004 = "KK_SELECT_004";
	
	/** ファイルID */
	private static final String FILE_ID = "KKIFM729";
	
	/** ファイル名 */
	private static final String FILE_NAME =  "KKIFM729.csv";

	/** キー（ファイル作成用） */
	private static final String FILE_KEY =  "FILE_KEY";

	/** キー（エラー返却用） */
	private static final String ERR_KEY =  "ERR_KEY";

	
	/**
	 * 初期処理
	 * @param  commonItem バッチ共通パラメータ電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// DBアクセスクラスを生成します
		db_KK_T_TAJGS_KEI_IDT = new JBSbatSQLAccess(commonItem, JBSbatKK_T_TAJGS_KEI_IDT.TABLE_NAME);
		
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public JBSbatOutputItem execute() throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		Map<String, ArrayList<JBSbatServiceInterfaceMap>> rtnMap = new HashMap<String, ArrayList<JBSbatServiceInterfaceMap>>();
		
		// ファイルの出力先パスを取得
		String filePath = commonItem.getFreeItem();
		
		//「ノートンファミリープレミアライセンス解約依頼」と「インターネットサギウォールライセンス解約依頼」の
		//「未通知」ステータスのデータを「通知処理中」ステータスに更新
		int updRecNum = this.updateKK3081_Mituti();
		super.commit();
		
		// 処理対象レコードが存在する場合、データ部のファイル出力処理を行う
		if (0 < updRecNum)
		{
			//「通知処理中」へ更新したデータとエラー情報を取得
			rtnMap  = getKK3081();

			// ファイル出力用のデータ
			ArrayList<JBSbatServiceInterfaceMap> fileList = rtnMap.get(FILE_KEY);

			// ファイル作成用処理
			for (JBSbatServiceInterfaceMap outMap : fileList)
			{
				outputBean.addOutMapList(outMap);
			}
		}
		//処理対象レコードが存在しない場合、空ファイルの出力処理を行う
		else
		{
			// 何もしない
		}

		// ファイルを出力
		JKKBatOutputUtil.editOutFile(super.commonItem, outputBean, FILE_ID, filePath, FILE_NAME);

		return null;
		/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		
		// DBアクセスクラスをクローズします
		db_KK_T_TAJGS_KEI_IDT.close();
		
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	
	/**
	 * SQLKEY(KK_UPDATE_002)でDBアクセスを行います。<br>
	 * @return 更新処理件数
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private int updateKK3081_Mituti() throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(TAJGS_KEI_IDO_SBT_CD_0202);
		paramList.setValue(TAJGS_KEI_IDO_SBT_CD_0212);
		paramList.setValue(commonItem.getOpeDate());
		
		// DBアクセスを実行します
		return db_KK_T_TAJGS_KEI_IDT.executeBySqlDefine(paramList, KK_T_TAJGS_KEI_IDT_KK_UPDATE_002);
	}
	
	
	/**
	 * 他事業者契約異動通知スキーマのBBSSライセンス解約の「通知処理中」ステータスのレコードを取得します
	 * @return 取得結果データ
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private HashMap<String, ArrayList<JBSbatServiceInterfaceMap>> getKK3081() throws Exception 
	{
		// 結果返却用Mapを定義
		HashMap<String, ArrayList<JBSbatServiceInterfaceMap>> rtnMap = new HashMap<String, ArrayList<JBSbatServiceInterfaceMap>>();

		// ファイル作成用リストを定義
		ArrayList<JBSbatServiceInterfaceMap> fileList = new ArrayList<JBSbatServiceInterfaceMap>();
		// エラー出力用リストを定義
		ArrayList<JBSbatServiceInterfaceMap> errList = new ArrayList<JBSbatServiceInterfaceMap>();

		// SQL実行結果取得用マップを定義（他事業者契約異動通知）
		JBSbatCommonDBInterface tajgsKeiIdtMap = new JBSbatCommonDBInterface(); 

		// ファイル抽出対象の他事業者契約異動通知情報を取得
		this.getKK3081_Syorityu();

		// 検索結果を取得し、各データを設定
		while((tajgsKeiIdtMap = db_KK_T_TAJGS_KEI_IDT.selectNext()) != null)
		{
			// ファイル作成用のマップを設定
			JBSbatServiceInterfaceMap fileMap = new JBSbatServiceInterfaceMap();
			// エラー出力用のマップを設定
			JBSbatServiceInterfaceMap errMap = new JBSbatServiceInterfaceMap();


			// ファイル作成用処理
			// ユーザーサブスクリプションＰＩＮかサブスクリプションＩＤがnullの場合、レコード出力しない
			if (JKKStringUtil.isNullBlank(tajgsKeiIdtMap.getString(JBSbatKK_T_TAJGS_KEI_IDT.USER_SBSCPT_PIN))
					||JKKStringUtil.isNullBlank(tajgsKeiIdtMap.getString(JBSbatKK_T_TAJGS_KEI_IDT.SBSCPT_ID)))
			{
				errMap.set(ERR_KEY, tajgsKeiIdtMap.getString(JBSbatKK_T_TAJGS_KEI_IDT.TAJGS_KEI_IDT_NO));
				
				// リストにMapを格納
				errList.add(errMap);
				
				StringBuilder msg = new StringBuilder();
				
				String errKeyTajgsKeiIdoNo = tajgsKeiIdtMap.getString(JBSbatKK_T_TAJGS_KEI_IDT.TAJGS_KEI_IDT_NO);
				msg.append("ユーザーサブスクリプションＰＩＮまたはサブスクリプションＩＤに値が設定されていません。")
					.append("他事業者契約異動通知番号[").append(errKeyTajgsKeiIdoNo).append("]")
					;
				
				commonItem.getLogPrint().printBusinessErrorLog("EKKB0090TE", new String[] {msg.toString()});
			}
			// レコード出力処理
			else
			{
				// レコード区分
				fileMap.set(JBSbatKKIFM729.REC_DIV, RECORD_DIV_01);
				// 会員ＩＤ
				fileMap.set(JBSbatKKIFM729.MEMBER_ID, tajgsKeiIdtMap.getString(JBSbatKK_T_TAJGS_KEI_IDT.BBSS_MEMBER_ID));
				// 商品ＩＤ
				if (TAJGS_KEI_IDO_SBT_CD_0202.equals(tajgsKeiIdtMap.getString(JBSbatKK_T_TAJGS_KEI_IDT.TAJGS_KEI_IDO_SBT_CD)))
				{
					fileMap.set(JBSbatKKIFM729.GOODS_ID, PRODUCT_ID_0202);		// サギウォール商品ＩＤ
				}
				else if (TAJGS_KEI_IDO_SBT_CD_0212.equals(tajgsKeiIdtMap.getString(JBSbatKK_T_TAJGS_KEI_IDT.TAJGS_KEI_IDO_SBT_CD)))
				{
					fileMap.set(JBSbatKKIFM729.GOODS_ID, PRODUCT_ID_0212);		// ノートン商品ＩＤ
				}
				// ユーザーサブスクリプションＰＩＮ
				fileMap.set(JBSbatKKIFM729.USER_SBSCPT_PIN, tajgsKeiIdtMap.getString(JBSbatKK_T_TAJGS_KEI_IDT.USER_SBSCPT_PIN));
				// サブスクリプションＩＤ
				fileMap.set(JBSbatKKIFM729.SBSCPT_ID, tajgsKeiIdtMap.getString(JBSbatKK_T_TAJGS_KEI_IDT.SBSCPT_ID));
				// 他事業者契約異動通知番号
				fileMap.set(JBSbatKKIFM729.TAJGS_KEI_IDT_NO, tajgsKeiIdtMap.getString(JBSbatKK_T_TAJGS_KEI_IDT.TAJGS_KEI_IDT_NO));

				// リストにMapを格納
				fileList.add(fileMap);
			}
		}
		// mapにリストを格納
		rtnMap.put(FILE_KEY, fileList);
		rtnMap.put(ERR_KEY, errList);

		return rtnMap;
	}
	
	
	/**
	 * SQLKEY(KK_SELECT_004)でDBアクセスを行います。<br>
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void getKK3081_Syorityu() throws Exception 
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();

		// DBアクセスを実行します
		db_KK_T_TAJGS_KEI_IDT.selectBySqlDefine(paramList, KK_T_TAJGS_KEI_IDT_KK_SELECT_004);
	}
}
