/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKUMansCustChgInfoCst
*	ソースファイル名	：JBSbatKUMansCustChgInfoCst.java
*	作成者				：富士通　
*	作成日				：2012年06月13日
*＜機能概要＞
*　マンション顧客変更情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/06/13   富士通		新規作成
*	v7.00.00	2014/01/27   FJ)高橋	【OM-2014-0000315】
*	v10.00.00	2014/07/19   FJ)黒田	【ANK-1918-00-00】ＵＳ管理Ｓ向けｅｏ顧客ＳのＩ／Ｆ改修*
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKUBatCommon;
import eo.business.util.file.JBSbatKUIFE069;
import eo.business.util.table.JBSbatKU_T_KJAK_EOH_NTMANS;
import eo.business.util.table.JBSbatKU_T_KJAK_EOH_TV;
import eo.business.util.table.JBSbatKU_T_KOJIAK;
import eo.common.constant.JKUStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.db.JBSbatSQLAccess;

/**
* マンション顧客変更情報抽出<p>
*<BR>
* @author 富士通
*/
public class JBSbatKUMansCustChgInfoCst extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(工事案件)*/
	private static final String D_TBL_NAME_KU_T_KOJIAK = "KU_T_KOJIAK";

	/** テーブル(工事案件＜ｅｏ光ネットマンション＞)*/
	private static final String D_TBL_NAME_KU_T_KJAK_EOH_NTMANS = "KU_T_KJAK_EOH_NTMANS";

	/** テーブル(工事案件＜ｅｏ光テレビ＞)*/
	private static final String D_TBL_NAME_KU_T_KJAK_EOH_TV = "KU_T_KJAK_EOH_TV";

	/** テーブル(工事案件対象宅内機器)*/
	private static final String D_TBL_NAME_KU_T_KJAK_TG_TKKIKI = "KU_T_KJAK_TG_TKKIKI";

	/** SQL定義キー(KU_SELECT_015)*/
	private static final String KU_T_KJAK_TG_TKKIKI_KU_SELECT_015 = "KU_SELECT_015";

	/** テーブルアクセスクラス(工事案件)*/
	private JBSbatSQLAccess db_KU_T_KOJIAK = null;

	/** テーブルアクセスクラス(工事案件＜ｅｏ光ネットマンション＞)*/
	private JBSbatSQLAccess db_KU_T_KJAK_EOH_NTMANS = null;

	/** テーブルアクセスクラス(工事案件＜ｅｏ光テレビ＞)*/
	private JBSbatSQLAccess db_KU_T_KJAK_EOH_TV = null;

	/** テーブルアクセスクラス(工事案件対象宅内機器)*/
	private JBSbatSQLAccess db_KU_T_KJAK_TG_TKKIKI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/**▼▼▼▼▼▼業務が作成した宣言です 開始▼▼▼▼▼▼*/
	
	/** ログ出力用項目名設定Map */
	private HashMap<String, String> messageMap = null;
	
	/**
	 * データ区分
	 */
	/** マンション顧客情報 */
	private static final String MANS_KOKYAKU_INFO = "2";
	
	/**
	 * 処理区分
	 */
	/** お客様情報変更 */
	private static final String CUST_INFO_CHG = "5";
	/**▲▲▲▲▲▲業務が作成した宣言です 終了▲▲▲▲▲▲*/


	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KU_T_KOJIAK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KOJIAK);
		db_KU_T_KJAK_EOH_NTMANS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KJAK_EOH_NTMANS);
		db_KU_T_KJAK_EOH_TV = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KJAK_EOH_TV);
		db_KU_T_KJAK_TG_TKKIKI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KJAK_TG_TKKIKI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		// ログ出力用項目名設定Mapを作成
		messageMap = createMessageMap();
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		try
		{
			// 入出力インターフェースオブジェクトを生成
			JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
			
			// 工事案件番号を取得
			String kojiakNo = inMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO);
			
			// 条件を設定
			Object[] whereParam = new Object[1];
			// 工事案件番号を設定
			whereParam[0] = kojiakNo;
			
			// 工事案件番号で工事案件を抽出
			JBSbatCommonDBInterface kojiakSelect = this.executeKU_T_KOJIAK_PKSELECT(whereParam);
			
			// 工事案件に存在しない場合
			if (null == kojiakSelect)
			{
				// %1%に該当の%2%が存在しません。（%3%）
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKUB0650KW, new String[]{
																JKUStrConst.SCHEMANM_KU0011,
																messageMap.get("KOJIAK_NO"),
																kojiakNo});
				
				// 次レコードへ
				throw new JBSbatBusinessError();
			}
			
			if(kojiakChanged(kojiakSelect))
			{
				// 次レコードへ
				super.commit();
				return null;
			}
			
			// 料金グループコードを取得
			String prcGrpCd = kojiakSelect.getString(JBSbatKU_T_KOJIAK.PRC_GRP_CD);
			
			// 工事案件サブスキーマ
			JBSbatCommonDBInterface subSelect = null;
			
			// eo光テレビ(K-CAT) 、eo光テレビ(再送信) の場合
			if (JKUStrConst.CD00133_EOH_TV_K_CAT.equals(prcGrpCd) ||
					JKUStrConst.CD00133_EOH_TV_SAISOSHIN.equals(prcGrpCd))
			{
				// 工事案件番号で工事案件<eo光テレビ>を抽出
				subSelect = this.executeKU_T_KJAK_EOH_TV_PKSELECT(whereParam);
				
				// 工事案件<eo光テレビ>に存在しない場合
				if (null == subSelect)
				{
					// %1%に該当の%2%が存在しません。（%3%）
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKUB0650KW, new String[]{
																	JKUStrConst.SCHEMANM_KU0031,
																	messageMap.get("KOJIAK_NO"),
																	kojiakNo});
					// 次レコードへ
					throw new JBSbatBusinessError();
				}
				
			}
			// 以外の場合
			else
			{
				// 工事案件番号で工事案件<eo光ネットマンション>を抽出
				subSelect = this.executeKU_T_KJAK_EOH_NTMANS_PKSELECT(whereParam);
				
				// 工事案件<eo光ネットマンション>に存在しない場合
				if (null == subSelect)
				{
					// %1%に該当の%2%が存在しません。（%3%）
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKUB0650KW, new String[]{
																	JKUStrConst.SCHEMANM_KU0061,
																	messageMap.get("KOJIAK_NO"),
																	kojiakNo});
					// 次レコードへ
					throw new JBSbatBusinessError();
				}
				
			}
			
			// マンション顧客情報送信データファイルを編集する
			outMap = this.setOutMap(kojiakSelect, subSelect);
			
			// 出力共通電文に入出力インターフェースを設定する。
			outputBean.addOutMapList(outMap);
			
			// 工事案件を更新する
			updateKU_T_KOJIAK(kojiakSelect);
			
		}
		catch (JBSbatBusinessError eBusiness)
		{
			// ロールバック
			commonItem.getConnection().rollback();
			throw eBusiness;
		}

		// コミット
		super.commit();
		
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KU_T_KOJIAK.close();
		db_KU_T_KJAK_EOH_NTMANS.close();
		db_KU_T_KJAK_EOH_TV.close();
		db_KU_T_KJAK_TG_TKKIKI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
//	/**
//	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
//	 * <p>
//	 * <b>処理フロー</b><br>
//	 * <pre>
//	 * 1.引数で条件マップを作ります。<br>
//	 *
//	 * 2.DBアクセスを実行します。<br>
//	 * 
//	 * 3.メソッドの呼び出し方です。<br>
//	 *		引数:
//	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
//	 *		 	KOJIAK_NO
//	 * </pre>
//	 * <p>
//	 * @param whereParam 条件項目の値。
//	 * @return JBSbatCommonDBInterface 検索の結果。
//	 * @throws Exception 業務サービス内で発生した例外全般。
//	 */
//	private JBSbatCommonDBInterface executeKU_T_KOJIAK_PKSELECT(Object[] whereParam) throws Exception
//	{
//		// 条件のマップを作成します
//		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
//		whereMap.setValue("KOJIAK_NO", whereParam[0]);
//
//		// DBアクセスを実行します
//		return db_KU_T_KOJIAK.selectByPrimaryKeys(whereMap);
//	}

	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	KOJIAK_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKU_T_KJAK_EOH_NTMANS_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("KOJIAK_NO", whereParam[0]);

		// DBアクセスを実行します
		return db_KU_T_KJAK_EOH_NTMANS.selectByPrimaryKeys(whereMap);
	}

	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	KOJIAK_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKU_T_KJAK_EOH_TV_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("KOJIAK_NO", whereParam[0]);

		// DBアクセスを実行します
		return db_KU_T_KJAK_EOH_TV.selectByPrimaryKeys(whereMap);
	}

	/**
	 * SQLKEY(KU_SELECT_015)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	工事案件番号
	 *		 	宅内機器種別コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKU_T_KJAK_TG_TKKIKI_KU_SELECT_015(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KU_T_KJAK_TG_TKKIKI.selectBySqlDefine(paramList, KU_T_KJAK_TG_TKKIKI_KU_SELECT_015);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	ＵＳ管理連携サービス契約番号				US_KANRI_RNKI_SVC_KEI_NO
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	KOJIAK_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKU_T_KOJIAK_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("US_KANRI_RNKI_SVC_KEI_NO", setParam[0]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("KOJIAK_NO", whereParam[0]);

		// DBアクセスを実行します
		db_KU_T_KOJIAK.updateByPrimaryKeys(whereMap, setMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**▼▼▼▼▼▼業務チームで作成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * 項目チェックで使用するmessageMapを生成します。
	 * HashMap<String, String> 項目名が格納されたHashMap
	 * @return messageMap 埋め込み文字の値
	 */
	private HashMap<String, String> createMessageMap()
	{
		HashMap<String, String>retMap = new HashMap<String, String>();
		
		retMap.put("KOJIAK_NO", "工事案件番号");
		retMap.put("KOJIAK_SBT_CD", "工事案件種別コード");
		retMap.put("PRC_GRP_CD", "料金グループコード");
		retMap.put("IP_HRADSI_CD", "IP払出");
		retMap.put("MANS_TUSHIN_EQUIP_CD", "マンション通信設備コード");
		retMap.put("RNKI_SVC_STAYMD", "連携サービス開始年月日");
		retMap.put("RNKS_RENKEI_SBT_CD", "連携先連携種別");
		retMap.put("SETTE_KOJI_STAT", "設定工事ステータス");
		retMap.put("MANSION_BUKKEN_CD", "マンション物件コード");
		
		return retMap;
	}
	
	/**
	 * 出力共通電文を設定します。
	 * @param kojiakSelect  工事案件抽出結果
	 * @param subSelect 工事案件サブタイプ抽出結果
	 * @param setKojiSelect 設定工抽出結果
	 * @return 出力共通電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setOutMap(JBSbatCommonDBInterface kojiakSelect, JBSbatCommonDBInterface subSelect) throws Exception
	{
		// 出力電文
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		// 設備コードマップ
		HashMap<String, String> setubiCdMap = new HashMap<String, String>();
		// 契約サービス取得処理
		setubiCdMap = this.getSetubiCd(kojiakSelect);
		
		// マンション物件コード
		String mansBukkenCd = kojiakSelect.getString(JBSbatKU_T_KOJIAK.MANSION_BUKKEN_CD);
		// マンションID
		String mansId = null;
		
		// 料金グループコード
		String prcGrpCd = kojiakSelect.getString(JBSbatKU_T_KOJIAK.PRC_GRP_CD);
		
		// eo光テレビ(K-CAT) 、eo光テレビ(再送信) の場合
		if (JKUStrConst.CD00133_EOH_TV_K_CAT.equals(prcGrpCd) ||
				JKUStrConst.CD00133_EOH_TV_SAISOSHIN.equals(prcGrpCd))
		{
			// 工事案件＜eo光テレビ＞のCAT-IDを設定
			mansId = subSelect.getString(JBSbatKU_T_KJAK_EOH_TV.CATID);
		}
		else
		{
			// マンション物件コードが「メゾン」の場合
			if (JKUStrConst.MANS_BUKKEN_CD_MZN.equals(mansBukkenCd))
			{
				// 工事案件のＰ−ＩＤを設定
				mansId = kojiakSelect.getString(JBSbatKU_T_KOJIAK.PID);
			}
			// マンション物件コードが「マンション」の場合
			else if (JKUStrConst.MANS_BUKKEN_CD_MANS.equals(mansBukkenCd))
			{
				// 工事案件<ネットマンション>のマンションＩＤを設定
				mansId = subSelect.getString(JBSbatKU_T_KJAK_EOH_NTMANS.MANSION_ID);
			}
			// マンション物件コードが未設定の場合
			else
			{
				// %1%が未設定です。
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKUB0200TE, new String[]{
																			messageMap.get("MANSION_BUKKEN_CD")});
				
				// 次レコードへ
				throw new JBSbatBusinessError();
			}
		}
		
		/** 出力項目を設定 */
		
		// データコード
		outMap.set(JBSbatKUIFE069.DATA_CD, MANS_KOKYAKU_INFO);
		// 処理コード
		outMap.set(JBSbatKUIFE069.TRN_CD, CUST_INFO_CHG);
		// サービス契約番号
		outMap.set(JBSbatKUIFE069.SVC_KEI_NO, kojiakSelect.getString(JBSbatKU_T_KOJIAK.US_KANRI_RNKI_SVC_KEI_NO));
		// マンションID
		outMap.set(JBSbatKUIFE069.MANSION_ID, mansId);
		// マンション名
		// 工事案件の転宅先住所補記・建物名を設定
		String mansNm = kojiakSelect.getString(JBSbatKU_T_KOJIAK.TENTAKU_SAKI_ADRTTM);
		outMap.set(JBSbatKUIFE069.MANSION_NM, JKUBatCommon.splitString(mansNm, 60, true)[0]);
		// 通信機器コード
		outMap.set(JBSbatKUIFE069.TUSHIN_KIKI_CD, subSelect.getString(JBSbatKU_T_KJAK_EOH_NTMANS.MANS_RM_TUSHIN_KIKI_SBT_CD));
		// 契約サービス
		outMap.set(JBSbatKUIFE069.KEI_SVC, setubiCdMap.get(JKUStrConst.RNKI_SYS_KKEI_SVC_CD));
		// 契約者名
		String keishaNm = kojiakSelect.getString(JBSbatKU_T_KOJIAK.CUST_NM);
		outMap.set(JBSbatKUIFE069.KEISHA_NM, JKUBatCommon.splitString(keishaNm, 94, true)[0]);
		// 部屋番号
		// 工事案件の転宅先住所補記・部屋番号を設定
		String rmNo = kojiakSelect.getString(JBSbatKU_T_KOJIAK.TENTAKU_SAKI_ADRRM);
		outMap.set(JBSbatKUIFE069.RMNO, JKUBatCommon.splitString(rmNo, 30, true)[0]);
		// 電話番号
		outMap.set(JBSbatKUIFE069.TELNO, kojiakSelect.getString(JBSbatKU_T_KOJIAK.CUST_HOME_TELNO));
		// 携帯番号
		outMap.set(JBSbatKUIFE069.KTAINO, kojiakSelect.getString(JBSbatKU_T_KOJIAK.CUST_KTAI_TELNO));
		// 申込年月日
		outMap.set(JBSbatKUIFE069.MSKM_YMD, kojiakSelect.getString(JBSbatKU_T_KOJIAK.MSKM_UK_YMD));
		// サービス開始日
		String svcStaymd = kojiakSelect.getString(JBSbatKU_T_KOJIAK.RNKI_SVC_STAYMD);
		if (JKUStrConst.CD00577_AD_CHG_NEWESTA.equals(kojiakSelect.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD)))
		{
			// 「住所変更(新設)」の場合、ALL9を設定
			svcStaymd = JKUStrConst.INIT_YMD;
		}
		outMap.set(JBSbatKUIFE069.SVC_STAYMD, svcStaymd);
		// 連絡条件コード
		outMap.set(JBSbatKUIFE069.RRK_JOKEN_CD, kojiakSelect.getString(JBSbatKU_T_KOJIAK.RRK_WAY_CD));
		// 連絡情報
		outMap.set(JBSbatKUIFE069.RRK_INFO, kojiakSelect.getString(JBSbatKU_T_KOJIAK.RRK_WAY_HOKI));
		// ｅｏ光電話有無
		outMap.set(JBSbatKUIFE069.EOH_TEL_UM, null);
		// 番ポ有無
		outMap.set(JBSbatKUIFE069.BMP_UM, null);
		// 記事欄
		outMap.set(JBSbatKUIFE069.KIJIRAN, this.returnKijiran(kojiakSelect, subSelect));
		// 工事案件番号
		outMap.set(JBSbatKUIFE069.KOJIAK_NO, returnAnkenNo(kojiakSelect, subSelect));
		// 解約希望日
		outMap.set(JBSbatKUIFE069.DSL_KIBO_YMD, JKUBatCommon.changeNullValue(subSelect.getString("DSL_KIBO_YMD"),JKUStrConst.INIT_YMD));
		// 変更後サービス契約番号
		outMap.set(JBSbatKUIFE069.CHG_AF_SVC_KEI_NO, kojiakSelect.getString(JBSbatKU_T_KOJIAK.RNKI_SVC_KEI_NO));
		
		// 出力フラグを設定
		outMap.setOutFlg(true);
		
		return outMap;
	}
	
	/**
	 * 設備コード設定のためのMapを取得します。
	 * @param kojiakSelect 抽出工事案件
	 * @return 料金プランコードマップ
	 * @throws Exception
	 */
	private HashMap<String, String> getSetubiCd(JBSbatCommonDBInterface kojiakSelect) throws Exception
	{
		// 設備向けコード変換（分類コード、料金プラン）
		HashMap<String, String> paramMap = new HashMap<String, String>();
		HashMap<String, String> rsltMap = new HashMap<String, String>();

		// 料金グループコードで変換する
		paramMap.put(JKUStrConst.RNKI_SYS_PRC_GRP_CD, kojiakSelect.getString(JBSbatKU_T_KOJIAK.PRC_GRP_CD));
		paramMap.put(JKUStrConst.RNKI_SYS_PCRS_CD, kojiakSelect.getString(JBSbatKU_T_KOJIAK.PCRS_CD));
		paramMap.put(JKUStrConst.RNKI_SYS_PPLAN_CD, kojiakSelect.getString(JBSbatKU_T_KOJIAK.PPLAN_CD));
		paramMap.put(JKUStrConst.RNKI_SYS_WRIB_TYPE_CD, kojiakSelect.getString(JBSbatKU_T_KOJIAK.WRIB_TYPE_CD));
		paramMap.put(JKUStrConst.RNKI_SYS_MANS_BUKKEN_CD, kojiakSelect.getString(JBSbatKU_T_KOJIAK.MANSION_BUKKEN_CD));
		paramMap.put(JKUStrConst.RNKI_SYS_SYSTEM, JKUStrConst.RNKI_SYSTEM_FCDS);
		
		rsltMap = JKUBatCommon.getSetsubiCodeMap(commonItem, kojiakSelect.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO), paramMap, db_KU_T_KJAK_EOH_NTMANS);
		
		if (null == rsltMap)
		{
			// ログ出力
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKUB0720KW, new String[]{
					kojiakSelect.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO),
					JKUBatCommon.convMapToString(paramMap)});
			
			throw new JBSbatBusinessError();
		}
		
		return rsltMap;
	}
	
	/**
	 * 記事欄に設定する値を編集し返却
	 * @param kojiakSelect  工事案件抽出結果
	 * @param subSelect 工事案件サブタイプ抽出結果
	 * @return 編集済記事欄
	 * @throws Exception
	 */
	private String returnKijiran(JBSbatCommonDBInterface kojiakSelect, JBSbatCommonDBInterface subSelect) throws Exception
	{
		// 工事案件の住所変更新設工事案件番号
		String adchgNewKjakNo = kojiakSelect.getString(JBSbatKU_T_KOJIAK.AD_CHG_NEWESTA_KJAK_NO);
		// 工事案件の住所変更撤去工事案件番号
		String adchgTkyKjakNo = kojiakSelect.getString(JBSbatKU_T_KOJIAK.AD_CHG_TEKKYO_KJAK_NO);
		// 工事案件種別コード 
		String kojiakSbt = kojiakSelect.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD);
		// 料金グループコードを取得
		String prcGrpCd = kojiakSelect.getString(JBSbatKU_T_KOJIAK.PRC_GRP_CD);
		
		// マンション設備システム連携用記事欄(180バイト未満に分割)
		String[] splitRnkiKijiran = JKUBatCommon.splitString(subSelect.getString("MANSSBSYS_RNKI_KIJIRAN"), 180, true);
		String rnkiKijiran = splitRnkiKijiran[0];
		
		// 編集後のマンション設備システム連携用記事欄
		String editRnkiKijiran = rnkiKijiran;
		
		// 住所変更の場合
		if (JKUBatCommon.isNotNull(adchgNewKjakNo) || JKUBatCommon.isNotNull(adchgTkyKjakNo))
		{
			if(!JKUBatCommon.isNotNull(rnkiKijiran))
			{
				// マンション設備システム連携用記事欄が設定されていない場合、
				// 「引越」を設定
				editRnkiKijiran = JKUStrConst.AD_CHGE_HIKKOSHI;
			}
			else
			{
				// マンション設備システム連携用記事欄が設定されている場合、
				// 「　引越」を追記
				editRnkiKijiran = rnkiKijiran + JKUStrConst.ZENKAKU_SPACE + JKUStrConst.AD_CHGE_HIKKOSHI;
			}
		}
		
		// 料金グループがeo光テレビ(K-CAT) 又は、eo光テレビ(再送信) 且つ
		// 工事案件種別が「新設」の場合
		if (JKUStrConst.CD00577_NEWESTA.equals(kojiakSbt) && (JKUStrConst.CD00133_EOH_TV_K_CAT.equals(prcGrpCd) ||
				JKUStrConst.CD00133_EOH_TV_SAISOSHIN.equals(prcGrpCd)))
		{
			// 工事案件対象宅内機器よりVONUレコードを取得
			JBSbatCommonDBInterface kjakTkkkMap = selectKjakTgTkkk(subSelect);
			
			// 工事案件対象宅内機器が取得できない場合
			if (JKUBatCommon.isNotNull(kjakTkkkMap))
			{
				// VONUBSPT可否を取得
				String bsptKh = kjakTkkkMap.getString("VONU_BSPT_KH");
				
				if (JKUStrConst.KH_PSG.equals(bsptKh))
				{
					if(!JKUBatCommon.isNotNull(editRnkiKijiran))
					{
						// マンション設備システム連携用記事欄が設定されていない場合、
						// 「ＢＳＰＴ有り」を設定
						editRnkiKijiran = JKUStrConst.BSPT_ARI;
					}
					else
					{
						// マンション設備システム連携用記事欄が設定されている場合、
						// 「　ＢＳＰＴ有り」を追記
						editRnkiKijiran = editRnkiKijiran + JKUStrConst.ZENKAKU_SPACE + JKUStrConst.BSPT_ARI;
					}
				}
			}
		}
		// // 編集後のマンション設備システム連携用記事欄を返却
		return editRnkiKijiran;
	}
	
	/**
	 * 工事案件対象宅内機器を取得
	 * @param kojiakSelect  工事案件
	 * @return JBSbatCommonDBInterface 工事案件対象宅内機器検索結果
	 * @throws Exception
	 */
	private JBSbatCommonDBInterface selectKjakTgTkkk(JBSbatCommonDBInterface kojiakSelect) throws Exception
	{
		// 検索処理に渡すパラメタを設定
		Object[] whereParam = new Object[2];
		
		whereParam[0] = kojiakSelect.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO);
		whereParam[1] = JKUStrConst.TKNKKSBT_V_ONU;
		
		// 検索処理実行
		this.executeKU_T_KJAK_TG_TKKIKI_KU_SELECT_015(whereParam);
		
		// 検索結果を１件取得
		return db_KU_T_KJAK_TG_TKKIKI.selectNext();
		
	}
	
	/**
	 * 案件番号の設定判定を行い、値を返却
	 * @param kojiakSelect  工事案件抽出結果
	 * @param subSelect 工事案件サブタイプ抽出結果
	 * @return 案件番号
	 * @throws Exception
	 */
	private String returnAnkenNo(JBSbatCommonDBInterface kojiakSelect, JBSbatCommonDBInterface subSelect) throws Exception
	{
		// 工事案件返却フラグ
		boolean retFlg = false;
		// 工事案件番号を取得
		String ankenNo = kojiakSelect.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO);
		// マンション物件コード
		String mansBukkenCd = kojiakSelect.getString(JBSbatKU_T_KOJIAK.MANSION_BUKKEN_CD);
		// 工事案件種別コード
		String kojiakSbtCd = kojiakSelect.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD);
		// 更新対象工事案件番号
		String updTrgtKojiakNo = kojiakSelect.getString(JBSbatKU_T_KOJIAK.UPD_TRGT_KOJIAK_NO);
		
		// メゾンは返却
		if (JKUStrConst.MANS_BUKKEN_CD_MZN.equals(mansBukkenCd))
		{
			retFlg = true;
		}
		else
		{
			// マンション通信設備コードを取得
			String mansTsnStbCd = subSelect.getString(JBSbatKU_T_KJAK_EOH_NTMANS.MANS_TUSHIN_EQUIP_CD);
			
			// 「光配線」の場合
			if (JKUStrConst.MANS_TUSHIN_EQ_CD_HIKARI.equals(mansTsnStbCd))
			{
				// 工事案件番号を返却
				retFlg = true;
			}
		}
		
		// 工事案件番号を返却する場合
		if(retFlg)
		{
			// 工事案件種別コードが強制解約"000"または撤去(解約)"002"または住所変更(撤去)"004"の場合
			if(JKUStrConst.CD00577_KYOSEI_DSL.equals(kojiakSbtCd) || JKUStrConst.CD00577_TEKKYO_DSL.equals(kojiakSbtCd) || 
					JKUStrConst.CD00577_AD_CHG_TEKKYO.equals(kojiakSbtCd))
			{
				// 更新対象工事案件番号を返却する
				return updTrgtKojiakNo;
			}
			else
			{
				// 工事案件番号を返却する
				return ankenNo;
			}
		}
		else
		{
			// nullを返却する
			return null;
		}
	}

	
	/**
	 * 工事案件を更新します。
	 * @param kojiakSelect  工事案件抽出結果
	 * @throws Exception
	 */
	private void updateKU_T_KOJIAK(JBSbatCommonDBInterface kojiakSelect) throws Exception
	{
		// 更新処理に渡すパラメタを設定
		Object[] setParam = new Object[1];
		Object[] whereParam = new Object[1];
		
		// 工事案件番号を設定
		whereParam[0] = kojiakSelect.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO);
		
		// US管理連携サービス契約番号を連携サービス契約番号で更新
		setParam[0] = kojiakSelect.getString(JBSbatKU_T_KOJIAK.RNKI_SVC_KEI_NO);
		
		// 工事案件を更新
		this.executeKU_T_KOJIAK_PKUPDATE(setParam, whereParam);
		
	}
	
	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	KOJIAK_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKU_T_KOJIAK_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("KOJIAK_NO", whereParam[0]);

		// DBアクセスを実行します
		// 排他制御のためselectByPrimaryKeysからselectByPrimaryKeysForUpdateWaitへ手修正
		return db_KU_T_KOJIAK.selectByPrimaryKeysForUpdateWait(whereMap);
	}

	/**
	 * 工事案件変更有無チェック
	 * @param kojiakSelect 抽出工事案件
	 * @return boolean 変更有無
	 * @throws Exception
	 */
	private boolean kojiakChanged(JBSbatCommonDBInterface kojiakSelect) throws Exception
	{
		String usKanriRnkiSvcKeiNo = kojiakSelect.getString(JBSbatKU_T_KOJIAK.US_KANRI_RNKI_SVC_KEI_NO);
		String rnkiSvcKeiNo = kojiakSelect.getString(JBSbatKU_T_KOJIAK.RNKI_SVC_KEI_NO);
		
		// どちらかnullの場合は変更あり扱い
		if(!JKUBatCommon.isNotNull(usKanriRnkiSvcKeiNo) || !JKUBatCommon.isNotNull(rnkiSvcKeiNo))
		{
			return true;
		}
		
		if(!rnkiSvcKeiNo.equals(usKanriRnkiSvcKeiNo))
		{
			// ＵＳ管理連携サービス契約番号が連携サービス契約番号と等しくない
			return false;
		}
		else
		{
			// 上記に当てはまらない場合は変更されている
			return true;
		}
	}
	/**▲▲▲▲▲▲業務チームで作成したメソッドです 終了▲▲▲▲▲▲*/

}
