/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKUZokuChgHanyoInfoCst
*	ソースファイル名	：JBSbatKUZokuChgHanyoInfoCst.java
*	作成者				：富士通　
*	作成日				：2011年09月21日
*＜機能概要＞
*　属性変更汎用情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/09/21   富士通		新規作成
*	v3.00.00	2012/03/07   FJ)田中	【ANK-0151-00-00】追加情報(ＩＯ／新設) TK番号追加
*	v3.00.00	2012/03/19   FJ)田中	【ANK-0375-00-00】基本情報 設置場所番号追加
*	v3.00.00	2012/03/22   FJ)高橋	【ANK-0363-00-00】ＦＴＴＨ従量制プラン_STEP2
*	v3.00.00	2012/04/02   FJ)田中	【ANK-0374-00-00】追加情報連携項目追加
*	v3.00.00	2012/04/02   FJ)田中	【ANK-0487-00-00】追加情報連携項目追加
*	v5.00.00	2012/12/26   FJ)高橋	【ANK-1387-00-00】OPMS情報連携方式見直し
*	v10.00.00	2014/07/23   FJ)坂本	【ANK-1918-00-00】ＵＳ管理Ｓ向けｅｏ顧客ＳのＩ／Ｆ改修
*	v48.00.00	2019/11/25   FJ)謝		【ANK-3736-00-00】【eo】宅内機器管理機能の適正化に伴うOPMS／MUSe連携データのレイアウト変更
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKUBatCommon;
import eo.business.common.JKUBatCheckUtil;
import eo.business.util.file.JBSbatKKIFI033;
import eo.business.util.file.JBSbatKUIFM009;
import eo.business.util.table.JBSbatKK_T_KAISEN_TG_SVKEI;
import eo.business.util.table.JBSbatKK_T_PRG;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKU_T_KOJIAK;
import eo.business.util.table.JBSbatKU_T_SVKEI_KOJIAK;
import eo.common.constant.JKUStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JBSbatCheckUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKUZokuChgHanyoInfoCst extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
// ANK-3736-00-00 ADD START
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(回線対象サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KAISEN_TG_SVKEI = "KK_T_KAISEN_TG_SVKEI";

	/** SQL定義キー(KU_SELECT_002)*/
	private static final String KK_T_SVC_KEI_KU_SELECT_002 = "KU_SELECT_002";

	/** SQL定義キー(KU_SELECT_001)*/
	private static final String KK_T_KAISEN_TG_SVKEI_KU_SELECT_001 = "KU_SELECT_001";

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(回線対象サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KAISEN_TG_SVKEI = null;
// ANK-3736-00-00 ADD END
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** ▼▼▼▼▼▼業務チームで作成した宣言です 開始▼▼▼▼▼▼ */
	
	/** 工事案件番号 */
	private String kojiakNo = "";

	/** ▲▲▲▲▲▲業務チームで作成した宣言です 終了▲▲▲▲▲▲ */

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
// ANK-3736-00-00 ADD START
		// DBアクセスクラスを生成します
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_KK_T_KAISEN_TG_SVKEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAISEN_TG_SVKEI);
// ANK-3736-00-00 ADD END
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// 入出力インターフェースオブジェクトを初期化
		JBSbatServiceInterfaceMap outMap1 = new JBSbatServiceInterfaceMap();
		JBSbatServiceInterfaceMap outMap2 = new JBSbatServiceInterfaceMap();
		
		// 単項目チェック
		if (false == this.isSingleCheck(inMap))
		{
			// エラーログは単項目チェックで出力済、次レコードへ
			throw new JBSbatBusinessError();
		}
		
		// 前回の工事案件番号と今回の工事案件番号が異なる場合のみ出力
		if(!kojiakNo.equals(inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO)))
		{
			// 出力電文作成
			outMap1 = this.setOutMapZoku(inMap);
			
			// 出力フラグを設定
			outMap1.setOutFlg(true);
			
			// 出力共通電文に入出力インターフェースを設定する。
			outputBean.addOutMapList(outMap1);
		}
		
		// 機器契約抽出対象工事情報の出力判定
		if(JKUBatCheckUtil.judgeOutData(inMap.getString(JBSbatKU_T_KOJIAK.HOJIN_PRC_GRP_CD), inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD), inMap.getString(JBSbatKU_T_KOJIAK.MANS_KOJIAK_STAT_CD)))
		{
			// 出力電文作成
			outMap2 = this.setOutMapKiki(inMap);
			
			// 出力フラグを設定
			outMap2.setOutFlg(true);
			
			// 出力共通電文に入出力インターフェースを設定する。
			outputBean.addOutMapList_2(outMap2);
// ANK-3736-00-00 ADD START
			// 移設の場合
			if (JKUStrConst.CD00577_ISETSU.equals(inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD)))
			{
				// サービス契約よりサービスコードを取得する
				Object[] whereParam1 = new Object[2];
				whereParam1[0] = inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_NO);
				whereParam1[1] = super.opeDate;
				
				// 検索処理実行
				executeKK_T_SVC_KEI_KU_SELECT_002(whereParam1);
				JBSbatCommonDBInterface svcKeiMap = db_KK_T_SVC_KEI.selectNext();
				if (svcKeiMap != null)
				{
					// サービスコード
					String svcCd = svcKeiMap.getString(JBSbatKK_T_SVC_KEI.SVC_CD);
					
					// ネットの場合
					if (JKUStrConst.CD00130_NET.equals(svcCd))
					{
						// 同一回線内の電話のサービス契約番号を取得する
						Object[] whereParam2 = new Object[5];
						whereParam2[0] = super.opeDate;
						whereParam2[1] = inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_KAISEN_UCWK_NO);
						whereParam2[2] = super.opeDate;
						whereParam2[3] = super.opeDate;
						whereParam2[4] = JKUStrConst.CD00130_TEL;
						
						// 検索処理実行
						executeKK_T_KAISEN_TG_SVKEI_KU_SELECT_001(whereParam2);
						JBSbatCommonDBInterface kaisenTgSvkeiMap = db_KK_T_KAISEN_TG_SVKEI.selectNext();
						if (kaisenTgSvkeiMap != null)
						{
							// 出力電文作成
							JBSbatServiceInterfaceMap outMapTel = this.setOutMapKikiIsetsu(inMap, kaisenTgSvkeiMap.getString(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_NO));
							
							// 出力フラグを設定
							outMapTel.setOutFlg(true);
							
							// 出力共通電文に入出力インターフェースを設定する。
							outputBean.addOutMapList_2(outMapTel);
						}
					}
					// 電話の場合
					else if (JKUStrConst.CD00130_TEL.equals(svcCd))
					{
						// 同一回線内のネットのサービス契約番号を取得する
						Object[] whereParam2 = new Object[5];
						whereParam2[0] = super.opeDate;
						whereParam2[1] = inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_KAISEN_UCWK_NO);
						whereParam2[2] = super.opeDate;
						whereParam2[3] = super.opeDate;
						whereParam2[4] = JKUStrConst.CD00130_NET;
						
						// 検索処理実行
						executeKK_T_KAISEN_TG_SVKEI_KU_SELECT_001(whereParam2);
						JBSbatCommonDBInterface kaisenTgSvkeiMap = db_KK_T_KAISEN_TG_SVKEI.selectNext();
						if (kaisenTgSvkeiMap != null)
						{
							// 出力電文作成
							JBSbatServiceInterfaceMap outMapNet = this.setOutMapKikiIsetsu(inMap, kaisenTgSvkeiMap.getString(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_NO));
							
							// 出力フラグを設定
							outMapNet.setOutFlg(true);
							
							// 出力共通電文に入出力インターフェースを設定する。
							outputBean.addOutMapList_2(outMapNet);
						}
					}
				}
			}
// ANK-3736-00-00 ADD END
		}
		
		// 今回の工事案件番号を保持
		kojiakNo = inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO);
		
		// 出力共通電文を返却する
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
// ANK-3736-00-00 ADD START
		// DBアクセスクラスをクローズします
		db_KK_T_SVC_KEI.close();
		db_KK_T_KAISEN_TG_SVKEI.close();
// ANK-3736-00-00 ADD END
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
// ANK-3736-00-00 ADD START
	/**
	 * SQLKEY(KU_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 executeKK_T_SVC_KEI_KU_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KU_SELECT_002);
	}

	/**
	 * SQLKEY(KU_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 executeKK_T_KAISEN_TG_SVKEI_KU_SELECT_001(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());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_KK_T_KAISEN_TG_SVKEI.selectBySqlDefine(paramList, KK_T_KAISEN_TG_SVKEI_KU_SELECT_001);
	}
// ANK-3736-00-00 ADD END
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/** ▼▼▼▼▼▼業務チームで作成したメソッドです 開始▼▼▼▼▼▼ */
	
	/**
	 * 属性変更汎用対象工事情報の出力共通電文を設定します。
	 * @param inMap 入力電文
	 * @return 出力共通電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setOutMapZoku(JBSbatServiceInterfaceMap inMap) throws Exception 
	{
		// 出力電文
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		// 工事案件番号
		outMap.setString(JBSbatKUIFM009.KOJIAK_NO, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO));
		// サービス契約番号
		outMap.setString(JBSbatKUIFM009.SVC_KEI_NO, inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_NO));
		// サービス契約回線内訳番号
		outMap.setString(JBSbatKUIFM009.SVC_KEI_KAISEN_UCWK_NO, inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_KAISEN_UCWK_NO));
		// 工事案件ステータス
		outMap.setString(JBSbatKUIFM009.KOJIAK_STAT, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT));
		// 工事案件種別コード
		outMap.setString(JBSbatKUIFM009.KOJIAK_SBT_CD, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD));
		// 料金グループコード
		outMap.setString(JBSbatKUIFM009.PRC_GRP_CD, inMap.getString(JBSbatKU_T_KOJIAK.PRC_GRP_CD));
		// 法人料金グループコード
		outMap.setString(JBSbatKUIFM009.HOJIN_PRC_GRP_CD, inMap.getString(JBSbatKU_T_KOJIAK.HOJIN_PRC_GRP_CD));
		// 連携サービス契約番号
		outMap.setString(JBSbatKUIFM009.RNKI_SVC_KEI_NO, inMap.getString(JBSbatKU_T_KOJIAK.RNKI_SVC_KEI_NO));
		// マンション物件コード
		outMap.setString(JBSbatKUIFM009.MANSION_BUKKEN_CD, inMap.getString(JBSbatKU_T_KOJIAK.MANSION_BUKKEN_CD));
		// 属性変更処理済み年月日時分秒
		outMap.setString(JBSbatKUIFM009.ZOKU_CHG_SYRZM_DTM, inMap.getString(JBSbatKK_T_PRG.PRG_DTM));
		
		return outMap;
	}
	
	/**
	 * 機器契約抽出対象工事情報の出力共通電文を設定します。
	 * @param inMap 入力電文
	 * @return 出力共通電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setOutMapKiki(JBSbatServiceInterfaceMap inMap) throws Exception 
	{
		// 出力電文
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		// サービス契約番号
		outMap.setString(JBSbatKKIFI033.SVC_KEI_NO, inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_NO));
		// サービス契約回線内訳番号
		outMap.setString(JBSbatKKIFI033.SVC_KEI_KAISEN_UCWK_NO, inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_KAISEN_UCWK_NO));
		// 工事案件番号
		outMap.setString(JBSbatKKIFI033.KOJIAK_NO, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO));
		// 工事案件ステータス
		outMap.setString(JBSbatKKIFI033.KOJIAK_STAT, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT));
		// 工事案件種別コード
		outMap.setString(JBSbatKKIFI033.KOJIAK_SBT_CD, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD));
		
		return outMap;
	}
// ANK-3736-00-00 ADD START
	/**
	 * 機器契約抽出対象工事情報の出力共通電文を設定します。（移設の場合）
	 * @param inMap 入力電文
	 * @param svcKeiNo サービス契約番号
	 * @return 出力共通電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setOutMapKikiIsetsu(JBSbatServiceInterfaceMap inMap, String svcKeiNo) throws Exception 
	{
		// 出力電文
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		// サービス契約番号
		outMap.setString(JBSbatKKIFI033.SVC_KEI_NO, svcKeiNo);
		// サービス契約回線内訳番号
		outMap.setString(JBSbatKKIFI033.SVC_KEI_KAISEN_UCWK_NO, inMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_KAISEN_UCWK_NO));
		// 工事案件番号
		outMap.setString(JBSbatKKIFI033.KOJIAK_NO, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO));
		// 工事案件ステータス
		outMap.setString(JBSbatKKIFI033.KOJIAK_STAT, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT));
		// 工事案件種別コード
		outMap.setString(JBSbatKKIFI033.KOJIAK_SBT_CD, inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD));
		
		return outMap;
	}
// ANK-3736-00-00 ADD END
	
	/**
	 * 入力情報の単項目チェックを行います。
	 * @param inMap 処理中マップ
	 * @return boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 * @throws Exception 
	 */
	private boolean isSingleCheck(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 単項目チェックを行います
		String strValue = null;
		
		// 進捗年月日時分秒項目チェック
		strValue = inMap.getString(JBSbatKK_T_PRG.PRG_DTM);
		
		if(JKUBatCommon.isNotNull(strValue))
		{
			strValue = strValue.trim();
		}
		
		// 桁数チェック
		if(JKUBatCommon.isNotNull(strValue) && !JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "17", "17"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKUB0050TE, new String[]{
															"進捗年月日時分秒",
															strValue});
			return false;
		}
		// 属性チェック
		if(JKUBatCommon.isNotNull(strValue) && !JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKUB0160TE, new String[]{
															"進捗年月日時分秒",
															strValue});
			return false;
		}
		
		return true;
	}
	
	/** ▲▲▲▲▲▲業務チームで作成したメソッドです 終了▲▲▲▲▲▲ */
}
