/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACTobilaSystemsJsSsnInfoMake
*	ソースファイル名	：JBSbatACTobilaSystemsJsSsnInfoMake.java
*	作成者				：富士通　
*	作成日				：2020年07月14日
*＜機能概要＞
*　BBSS社事業者間精算情報作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v50.00.00	2020/07/14	FJ)麻生		【ANK-3754-00-00】トビラフォン対応
**	v50.00.01	2020/08/24	FJ)西窪		【ANK-3754-14-00】トビラフォン対応
*   v52.00.00	2021/02/10	FJ)西窪	 	【ANK-3975-00-00】【eo】照査前画面への転送電話項目追加
*********************************************************************/
package eo.business.service;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatInterface;
import eo.business.util.file.JBSbatACIFM346;
import eo.business.util.file.JBSbatACIFM347;
import eo.business.util.table.JBSbatKK_T_OPSVKEI_TEL;
import eo.business.util.table.JBSbatKK_T_OP_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI_UCWK;
import eo.common.constant.JACStrConst;
import eo.common.constant.JKKStrConst;
import eo.common.util.JCCToolTextDateFormat;
import eo.common.util.JCHStringUtil;
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;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACTobilaSystemsJsSsnInfoMake extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	// ANK-3975-00-00 DEL START
//	/** テーブル(オプションサービス契約<電話>)*/
//	private static final String D_TBL_NAME_KK_T_OPSVKEI_TEL = "KK_T_OPSVKEI_TEL";
//
//	/** SQL定義キー(AC_SELECT_004)*/
//	private static final String KK_T_OPSVKEI_TEL_AC_SELECT_004 = "AC_SELECT_004";
//
//	/** テーブルアクセスクラス(オプションサービス契約<電話>)*/
//	private JBSbatSQLAccess db_KK_T_OPSVKEI_TEL = null;
	// ANK-3975-00-00 DEL END
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 一時リストインデックス＿退避情報 */
	private final int IDX_TMPLIST_CURDATA = 0;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		// ANK-3975-00-00 DEL START
		//db_KK_T_OPSVKEI_TEL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_OPSVKEI_TEL);
		// ANK-3975-00-00 DEL END
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @param outputInItem 入力情報
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]") : true;
		
		// 1件目（退避リストが空のとき）
		if (!outputInItem.isOutMapList())
		{
			outputInItem.addOutMapList(new JBSbatServiceInterfaceMap());
			// 1件目を退避
			outputInItem.addTmpList(createOutMap(inMap));
			return outputInItem;
		}
		
		// 入力なし（＝最終処理）の場合
		if(inMap == null)
		{
			// 退避情報を出力に追加
			addOutput(outputInItem);
			return outputInItem;
		}
		
		// 退避情報を取得
		JBSbatServiceInterfaceMap currentMap = (JBSbatServiceInterfaceMap)outputInItem.getTmpList().get(IDX_TMPLIST_CURDATA);
		// 退避トビラフォンＩＤを取得
		String prevTobilaphId = currentMap.getString(JBSbatACIFM346.TOBILAPH_ID);
		// トビラフォンＩＤを取得
		String tobilaphId = inMap.getString(JBSbatACIFM346.TOBILAPH_ID);
		// トビラフォンＩＤ ≠ 退避トビラフォンＩＤの場合
		if(!tobilaphId.equals(prevTobilaphId))
		{
			// 退避情報を出力に追加
			addOutput(outputInItem);
			// 新しい退避情報を設定
			currentMap = createOutMap(inMap);
			outputInItem.getTmpList().set(IDX_TMPLIST_CURDATA, currentMap);
		}
		
		// 前月末時点累計契約者数を設定
		setCount(inMap, currentMap, JBSbatACIFM346.ZEN_END_RK_KEISHA_CNT);
		// 新規申込数を設定
		setCount(inMap, currentMap, JBSbatACIFM346.NEW_MSKM_CNT);
		// 当月解約数を設定
		setCount(inMap, currentMap, JBSbatACIFM346.TOGTU_DSL_CNT);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		// ANK-3975-00-00 DEL START
		// db_KK_T_OPSVKEI_TEL.close();
		// ANK-3975-00-00 DEL END
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	// ANK-3975-00-00 DEL START
//	/**
//	 * SQLKEY(AC_SELECT_004)でDBアクセスを行います。<br>
//	 * <p>
//	 * <b>処理フロー</b><br>
//	 * <pre>
//	 * 1.引数でバイント変数を設定します。<br>
//	 *
//	 * 2.DBアクセスを実行します。<br>
//	 * 
//	 * 3.メソッドの呼び出し方です。<br>
//	 *		引数:
//	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
//	 *		 	予約適用日
//	 *		 	サービス契約内訳番号
//	 *		 	オプションサービスコード
//	 *		 	予約適用日
//	 *		 	世代登録年月日時分秒
//	 * </pre>
//	 * <p>
//	 * @param param バイント変数の値配列。
//	 * @throws Exception 業務サービス内で発生した例外全般。
//	 */
//	private void executeKK_T_OPSVKEI_TEL_AC_SELECT_004(Object[] param) throws Exception
//	{
//		// バイント変数のリストを生成します
//		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
//		paramList.setValue(param[0].toString());
//		paramList.setValue(param[1].toString());
//		paramList.setValue(param[2].toString());
//		paramList.setValue(param[3].toString());
//
//		// DBアクセスを実行します
//		db_KK_T_OPSVKEI_TEL.selectBySqlDefine(paramList, KK_T_OPSVKEI_TEL_AC_SELECT_004);
//	}
	// ANK-3975-00-00 DEL END
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 入力電文から出力電文を作成します
	 * @param inMap 入力
	 * @return JBSbatServiceInterfaceMap
	 * @throws Exception 
	 */
	private JBSbatServiceInterfaceMap createOutMap(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// ANK-3975-00-00 DEL START
//		// ＳＹＳＩＤの設定
//		outMap.setString(JBSbatACIFM347.SYSID, inMap.getString(JBSbatACIFM346.SYSID));
		// ANK-3975-00-00 DEL END
		// トビラフォンＩＤの設定
		outMap.setString(JBSbatACIFM347.TOBILAPH_ID, inMap.getString(JBSbatACIFM346.TOBILAPH_ID));
		// 開始日の設定
		JCCToolTextDateFormat df = new JCCToolTextDateFormat("yyyy/MM/dd", "yyyyMMdd");
		outMap.setString(JBSbatACIFM347.STAYMD, df.formattedPrint(inMap.getString(JBSbatACIFM346.SVC_STAYMD)));
		// 終了日の設定
		// ANK-3975-00-00 DEL START
//		if (JACStrConst.MAX_DATE.equals(inMap.getString(JBSbatACIFM346.SVC_ENDYMD)))
//		{
//			outMap.setString(JBSbatACIFM347.ENDYMD, "");
//		}
//		else
//		{
		// ANK-3975-00-00 DEL END
		outMap.setString(JBSbatACIFM347.ENDYMD, df.formattedPrint(inMap.getString(JBSbatACIFM346.SVC_ENDYMD)));
		// ANK-3975-00-00 DEL START
//		}
//		// 継続元サービス契約内訳番号の設定
//		outMap.setString(JBSbatACIFM346.KEIZK_MT_SVC_KEI_UCWK_NO, inMap.getString(JBSbatACIFM346.KEIZK_MT_SVC_KEI_UCWK_NO));
//		// 異動区分の設定
//		outMap.setString(JBSbatACIFM346.IDO_DIV, inMap.getString(JBSbatACIFM346.IDO_DIV));
		// ANK-3975-00-00 DEL END
		// 前月末時点累計契約者数の設定
		outMap.setString(JBSbatACIFM347.ZEN_END_RK_KEISHA_CNT, inMap.getString(JBSbatACIFM346.ZEN_END_RK_KEISHA_CNT));
		// 新規申込数の設定
		outMap.setString(JBSbatACIFM347.NEW_MSKM_CNT, inMap.getString(JBSbatACIFM346.NEW_MSKM_CNT));
		// 当月解約数の設定
		outMap.setString(JBSbatACIFM347.TOGTU_DSL_CNT, inMap.getString(JBSbatACIFM346.TOGTU_DSL_CNT));
		// 合計件数の設定
		outMap.setString(JBSbatACIFM347.GK_CNT, "");
		// 出力フラグの設定
		outMap.setOutFlg(false);
		
		return outMap;
	}

	// ANK-3975-00-00 DEL START
//	/**
//	 * 継続元情報を作成します
//	 * @param outputInItem 出力共通電文
//	 * @return JBSbatServiceInterfaceMap
//	 * @throws Exception 
//	 */
//	private JBSbatServiceInterfaceMap createKeizkMt(JBSbatCommonDBInterface dbInfOpsvkeiTel) throws Exception
//	{
//		// 継続元を作成
//		JBSbatServiceInterfaceMap keizkMtMap = new JBSbatServiceInterfaceMap();
//		// SYSID(SQL実行結果を設定)
//		keizkMtMap.setString(JBSbatACIFM347.SYSID, dbInfOpsvkeiTel.getString(JBSbatKK_T_OP_SVC_KEI.SYSID));
//		// トビラフォンID(SQL実行結果を設定)
//		keizkMtMap.setString(JBSbatACIFM347.TOBILAPH_ID, dbInfOpsvkeiTel.getString(JBSbatKK_T_OPSVKEI_TEL.TOBILAPH_ID));
//		// 開始日(SQL実行結果を設定)
//		JCCToolTextDateFormat df = new JCCToolTextDateFormat("yyyy/MM/dd", "yyyyMMdd");
//		keizkMtMap.setString(JBSbatACIFM347.STAYMD, df.formattedPrint(dbInfOpsvkeiTel.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_STA_YMD)));
//		// 終了日(SQL実行結果を設定)
//		if (JACStrConst.MAX_DATE.equals(dbInfOpsvkeiTel.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_ENDYMD)))
//		{
//			keizkMtMap.setString(JBSbatACIFM347.ENDYMD, "");
//		}
//		else
//		{
//			keizkMtMap.setString(JBSbatACIFM347.ENDYMD, df.formattedPrint(dbInfOpsvkeiTel.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_ENDYMD)));
//		}
//		// 前月末時点累計契約者数(SQL実行結果.サービス開始年月日<=運用日の前月の場合にのみ"1"を設定)
//		String zenEndRkKeishaCnt = "";
//		// ANK-3754-14-00 MOD START
//		//String nowMonthOneday = super.opeDate.substring(0, 6) + "01";
//		String opeDateMonthOneday = super.opeDate.substring(0, 6) + "01";
//		// ANK-3754-14-00 MOD END
//		// ANK-3754-14-00 ADD START
//		String nowMonthOneday = JBSbatInterface.adjustMonth(opeDateMonthOneday, -1);
//		// ANK-3754-14-00 ADD END
//		if (!JCHStringUtil.isNullBlank(dbInfOpsvkeiTel.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_STA_YMD)))
//		{
//			if (dbInfOpsvkeiTel.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_STA_YMD).compareTo(nowMonthOneday) < 0)
//			{
//				zenEndRkKeishaCnt = "1";
//			}
//		}
//		keizkMtMap.setString(JBSbatACIFM347.ZEN_END_RK_KEISHA_CNT, zenEndRkKeishaCnt);
//		String newMskmCnt = "";
//		// 新規申込数(SQL実行結果.サービス開始年月日>=運用日の月の場合にのみ"1"を設定)
//		if (!JCHStringUtil.isNullBlank(dbInfOpsvkeiTel.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_STA_YMD)))
//		{
//			if (dbInfOpsvkeiTel.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_STA_YMD).compareTo(nowMonthOneday) >= 0)
//			{
//				newMskmCnt = "1";
//			}
//		}
//		keizkMtMap.setString(JBSbatACIFM347.NEW_MSKM_CNT, newMskmCnt);
//		// 当月解約数("1"を設定)
//		keizkMtMap.setString(JBSbatACIFM347.TOGTU_DSL_CNT, "1");
//		// 合計件数(前月末時点累計契約者数+新規申込数を設定)
//		String gkCnt;
//		if ("1".equals(zenEndRkKeishaCnt) || "1".equals(newMskmCnt))
//		{
//			gkCnt = "1";
//		}
//		else
//		{
//			gkCnt = "0";
//		}
//		keizkMtMap.setString(JBSbatACIFM347.GK_CNT, gkCnt);
//		// 出力フラグを設定
//		keizkMtMap.setOutFlg(true);
//		
//		return keizkMtMap;
//	}
	// ANK-3975-00-00 DEL END

	/**
	 * 出力電文を追加します
	 * @param outputInItem 出力共通電文
	 * @throws Exception 
	 */
	private void addOutput(JBSbatOutputItem outputInItem) throws Exception
	{
		// ANK-3975-00-00 DEL START
//		boolean isJuhen = false;
//		JBSbatCommonDBInterface dbInfOpsvkeiTel = null;
		// ANK-3975-00-00 DEL END
		
		// 退避情報を取得
		JBSbatServiceInterfaceMap currentMap = (JBSbatServiceInterfaceMap)outputInItem.getTmpList().get(IDX_TMPLIST_CURDATA);
		// ANK-3975-00-00 DEL START
//		// 継続元サービス契約内訳番号が≠NULLの場合
//		if (!JCHStringUtil.isNullBlank(currentMap.getString(JBSbatACIFM346.KEIZK_MT_SVC_KEI_UCWK_NO)))
//		{
//			// 異動区分＝「00020：住所変更・確定」の場合
//			if (JKKStrConst.CD00576_ADCHG_FIX.equals(currentMap.getString(JBSbatACIFM346.IDO_DIV)))
//			{
//				/**------------------------------------------------------------------------------------------------  
//				 * バインド変数設定
//				 *-------------------------------------------------------------------------------------------------*/
//				//バインド変数の設定を行う
//				Object[] params = new Object[]
//				{
//					super.opeDate, // 予約適用日
//					super.opeDate, // 予約適用日
//					currentMap.getString(JBSbatACIFM346.KEIZK_MT_SVC_KEI_UCWK_NO), // サービス契約内訳番号
//					JKKStrConst.OP_SVC_CD_ANSN_HCS_SVC // オプションサービスコード
//				};
//				
//				/**------------------------------------------------------------------------------------------------  
//				 * SQL実行
//				 *-------------------------------------------------------------------------------------------------*/
//				//オプションサービス契約<電話>スキーマ検索実行
//				this.executeKK_T_OPSVKEI_TEL_AC_SELECT_004(params);
//				
//				/**------------------------------------------------------------------------------------------------  
//				 * SQL実行結果取得
//				 *-------------------------------------------------------------------------------------------------*/
//				//検索結果の取得
//				dbInfOpsvkeiTel = db_KK_T_OPSVKEI_TEL.selectNext();
//				
//				if (dbInfOpsvkeiTel != null)
//				{
//					// サービス契約内訳ステータスが「100：サービス提供中」「910：解約済」
//					if ("100".equals(dbInfOpsvkeiTel.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT))
//							|| "910".equals(dbInfOpsvkeiTel.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_STAT)))
//					{
//						// 当月1日
//						// ANK-3754-14-00 MOD START
//						//String nowMonthOneday = super.opeDate.substring(0, 6) + "01";
//						String opeDateMonthOneday = super.opeDate.substring(0, 6) + "01";
//						// ANK-3754-14-00 MOD END
//						// ANK-3754-14-00 ADD START
//						String nowMonthOneday = JBSbatInterface.adjustMonth(opeDateMonthOneday, -1);
//						// ANK-3754-14-00 ADD END
//						// サービス解約年月日が未設定、または、当月以降
//						if (JCHStringUtil.isNullBlank(dbInfOpsvkeiTel.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_DSL_YMD))
//								|| nowMonthOneday.compareTo(dbInfOpsvkeiTel.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_DSL_YMD)) <= 0)
//						{
//							isJuhen = true;
//						}
//					}
//				}
//			}
//		}
//		
//		// 住変による番号変更の場合
//		if (isJuhen)
//		{
//			// 継続先を変更
//			// 開始日(SQL実行結果.サービス終了年月日を設定)
//			JCCToolTextDateFormat df = new JCCToolTextDateFormat("yyyy/MM/dd", "yyyyMMdd");
//			currentMap.setString(JBSbatACIFM347.STAYMD, df.formattedPrint(dbInfOpsvkeiTel.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_ENDYMD)));
//			// 前月末時点累計契約者数(""を設定)
//			currentMap.setString(JBSbatACIFM347.ZEN_END_RK_KEISHA_CNT, "");
//			// 新規申込数("1"を設定)
//			currentMap.setString(JBSbatACIFM347.NEW_MSKM_CNT, "1");
//			
//			// 継続元を出力に追加
//			outputInItem.addOutMapList(createKeizkMt(dbInfOpsvkeiTel));
//		}
		// ANK-3975-00-00 DEL END
		// 合計件数(前月末時点累計契約者数+新規申込数を設定)
		String gkCnt;
		if ("1".equals(currentMap.getString(JBSbatACIFM347.ZEN_END_RK_KEISHA_CNT)) || "1".equals(currentMap.getString(JBSbatACIFM347.NEW_MSKM_CNT)))
		{
			gkCnt = "1";
		}
		else
		{
			gkCnt = "0";
		}
		currentMap.setString(JBSbatACIFM347.GK_CNT, gkCnt);
		
		// ANK-3975-00-00 DEL START
//		// 継続元サービス契約内訳番号を削除
//		currentMap.getMap().remove(JBSbatACIFM346.KEIZK_MT_SVC_KEI_UCWK_NO);
//		// 異動区分を削除
//		currentMap.getMap().remove(JBSbatACIFM346.IDO_DIV);
		// ANK-3975-00-00 DEL END
		// 出力フラグを設定
		currentMap.setOutFlg(true);
		
		// 退避データを出力に追加
		outputInItem.addOutMapList(currentMap);
	}

	/**
	 * 件数を設定します
	 * @param inMap 入力電文
	 * @param outMap 出力電文
	 * @param key 出力電文設定用のキー
	 * @throws Exception 
	 */
	private void setCount(JBSbatServiceInterfaceMap inMap, JBSbatServiceInterfaceMap outMap, String key) throws Exception
	{
		// 入力電文の件数が設定されている場合
		if (!JCHStringUtil.isNullBlank(inMap.getString(key)))
		{
			// 出力電文の件数が未設定の場合
			if (JCHStringUtil.isNullBlank(outMap.getString(key)))
			{
				// 出力電文の件数に入力電文の件数を設定
				outMap.setString(key, inMap.getString(key));
			}
		}
	}
}