/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKUFcdsUkInfoChsht
*	ソースファイル名	：JBSbatKUFcdsUkInfoChsht.java
*	作成者				：富士通　
*	作成日				：2011年07月13日
*＜機能概要＞
*　ＦＣＤＳ受付情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/13   富士通		新規作成
*	v3.00.00	2012/03/08   FJ)旭		【ANK-0151-00-00】法人ＩＰ−ＶＰＮブロードバンドアクセス処理追加
*	v7.00.00	2014/01/28   FJ)阪口	【OM-2014-0000315】抽出データの再検索
*	v9.00.00	2014/08/13   FJ)佐野	【ANK-2244-00-00】E-PON⇒GE-PON(収容替)、GE-PON⇒GE-PON(収容替)対応
*   v37.00.00   2018/02/05   FJ)岩本    【ANK-3366-00-00】eo光設備卸対応
*   v44.00.00   2019/06/07   FJ)上間    【ANK-3652-00-00】光コンセントフォロー対応
*   v60.00.00	2022/07/01	 FJ)アら	【ANK-4269-00-00】マンション卸回線(WI-FIスキーム)の不備対応　STEP2
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKUBatCommon;
import eo.business.util.file.JBSbatKUIFE014;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatKU_T_KJAK_EOH_NET;
import eo.business.util.table.JBSbatKU_T_KJAK_EOH_NTMANS;
import eo.business.util.table.JBSbatKU_T_KOJIAK;
import eo.business.util.table.JBSbatKU_T_SENKO_DSGN;
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.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* ＦＣＤＳ受付情報抽出部品です。 <p>
*<BR>
* @author 富士通
*/
public class JBSbatKUFcdsUkInfoChsht 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_NET = "KU_T_KJAK_EOH_NET";

	/** テーブル(工事案件＜ｅｏ光ネットマンション＞)*/
	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_SENKO_DSGN = "KU_T_SENKO_DSGN";

// ANK-3366-00-00 ADD START
	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";
	
	/** SQL定義キー(KU_SELECT_001)*/
	private static final String CK_T_CUST_KU_SELECT_001 = "KU_SELECT_001";
// ANK-3366-00-00 ADD END
	
	/** テーブルアクセスクラス(工事案件)*/
	private JBSbatSQLAccess db_KU_T_KOJIAK = null;

	/** テーブルアクセスクラス(工事案件＜ｅｏ光ネット＞)*/
	private JBSbatSQLAccess db_KU_T_KJAK_EOH_NET = null;

	/** テーブルアクセスクラス(工事案件＜ｅｏ光ネットマンション＞)*/
	private JBSbatSQLAccess db_KU_T_KJAK_EOH_NTMANS = null;

	/** テーブルアクセスクラス(先行設計)*/
	private JBSbatSQLAccess db_KU_T_SENKO_DSGN = null;
	
// ANK-3366-00-00 ADD START
	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;
// ANK-3366-00-00 ADD END
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/**
	 * 初期処理
	 * @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_NET = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KJAK_EOH_NET);
		db_KU_T_KJAK_EOH_NTMANS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KJAK_EOH_NTMANS);
		db_KU_T_SENKO_DSGN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_SENKO_DSGN);
// ANK-3366-00-00 ADD START
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
// ANK-3366-00-00 ADD END
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		try
		{
			// 入出力インターフェースオブジェクトを生成
			JBSbatServiceInterfaceMap outMap = null;
			
			// 工事案件番号
			String kojiakNo = inMap.getString(JBSbatKU_T_SENKO_DSGN.KOJIAK_NO);
			
			// 先行設計番号
			String snkskiNo = inMap.getString(JBSbatKU_T_SENKO_DSGN.SNKSKI_NO);
			
			// 検索結果
			JBSbatCommonDBInterface ku0011Map = this.findKU_T_KOJIAK(kojiakNo);
			
			if(null == ku0011Map)
			{
				// ログ出力し、次レコードへ
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKUB0070KE, new String[]{
						JKUStrConst.SCHEMANM_KU0011,
						"工事案件番号",
						kojiakNo});
				
				throw new JBSbatBusinessError();
			}
			
			// 取得する条件を設定
			Object[] whereParam = new Object[1];
			
			// 先行設計番号を設定
			whereParam[0] = snkskiNo;
			
			// 抽出した先行設計の先行設計番号で先行設計を抽出する
			JBSbatCommonDBInterface senkoDsgnSelect = executeKU_T_SENKO_DSGN_PKSELECT(whereParam);
			
			// 先行設計に存在しない場合
			if (null == senkoDsgnSelect)
			{
				// 次レコードへ
				super.commit();
				return null;
			}
			
			// 先行設計変更有無チェック
			if(senkoDsgnChanged(senkoDsgnSelect))
			{
				// 次レコードへ
				super.commit();
				return null;
			}
// ANK-3652-00-00 MOD START
//			/// 工事案件ステータスが「依頼済」以降
//			if (!JKUStrConst.CD00474_NASHI.equals(ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT)) &&
//				!JKUStrConst.CD00474_TOROKU_ZM.equals(ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT)) &&
//				!JKUStrConst.CD00474_UK_ZM.equals(ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT)) &&
//				!JKUStrConst.CD00474_CHUSHI.equals(ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT)))
			// 工事案件ステータスが「依頼済」以降
			if ((!JKUStrConst.CD00474_NASHI.equals(ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT)) &&
				!JKUStrConst.CD00474_TOROKU_ZM.equals(ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT)) &&
				!JKUStrConst.CD00474_UK_ZM.equals(ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT)) &&
				!JKUStrConst.CD00474_CHUSHI.equals(ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT)))
				|| 
			// 工事案件ステータスが「登録済」  かつ  マンション工事案件状態コードが「依頼済」以降
				(JKUStrConst.CD00474_TOROKU_ZM.equals(ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT)) &&
				null != ku0011Map.getString(JBSbatKU_T_KOJIAK.MANS_KOJIAK_STAT_CD) &&
				!JKUStrConst.CD00474_NASHI.equals(ku0011Map.getString(JBSbatKU_T_KOJIAK.MANS_KOJIAK_STAT_CD)) &&
				!JKUStrConst.CD00474_TOROKU_ZM.equals(ku0011Map.getString(JBSbatKU_T_KOJIAK.MANS_KOJIAK_STAT_CD)) &&
				!JKUStrConst.CD00474_UK_ZM.equals(ku0011Map.getString(JBSbatKU_T_KOJIAK.MANS_KOJIAK_STAT_CD)) &&
				!JKUStrConst.CD00474_CHUSHI.equals(ku0011Map.getString(JBSbatKU_T_KOJIAK.MANS_KOJIAK_STAT_CD)))
				)
// ANK-3652-00-00 MOD END
			{
				// 出力ファイルを編集
				outMap = this.setOutMap(inMap, ku0011Map);
				
				if (null != outMap)
				{
					// 工事案件を更新
					this.updateKU_T_KOJIAK(inMap);
					
					// 先行設計を更新
					this.updateKU_T_SENKO_DSGN(snkskiNo);
					
					// 出力共通電文に入出力インターフェースを設定する。
					outputBean.addOutMapList(outMap);
				}
			}
		
		}
		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_NET.close();
		db_KU_T_KJAK_EOH_NTMANS.close();
		db_KU_T_SENKO_DSGN.close();
// ANK-3366-00-00 ADD START
		db_CK_T_CUST.close();
// ANK-3366-00-00 ADD END
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
//	/**
//	 * 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_NET_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("KOJIAK_NO", whereParam[0]);

		// DBアクセスを実行します
		return db_KU_T_KJAK_EOH_NET.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.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	ＦＣＤＳ連携種別コード				FCDS_RNKI_SBT_CD
	 *		 	ＦＣＤＳ連携種別変更年月日時分秒				FCDS_RNKI_SBT_CHGE_DTM
	 *		 	ＦＣＤＳ前回連携サービス契約番号				FCDS_ZNKI_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("FCDS_RNKI_SBT_CD", setParam[0]);
		setMap.setValue("FCDS_RNKI_SBT_CHGE_DTM", setParam[1]);
		setMap.setValue("FCDS_ZNKI_RNKI_SVC_KEI_NO", setParam[2]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("KOJIAK_NO", whereParam[0]);

		// DBアクセスを実行します
		db_KU_T_KOJIAK.updateByPrimaryKeys(whereMap, setMap);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	先行設計ステータス				SNKSKI_STAT
	 *		 	設計依頼年月日				DSGN_REQYMD
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SNKSKI_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKU_T_SENKO_DSGN_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("SNKSKI_STAT", setParam[0]);
		setMap.setValue("DSGN_REQYMD", setParam[1]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SNKSKI_NO", whereParam[0]);

		// DBアクセスを実行します
		db_KU_T_SENKO_DSGN.updateByPrimaryKeys(whereMap, setMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**▼▼▼▼▼▼業務チームで作成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * 出力共通電文を設定します。
	 * @param inMap 入力電文
	 * @param ku0011Map 工事案件情報
	 * @return 出力共通電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setOutMap(JBSbatServiceInterfaceMap inMap, JBSbatCommonDBInterface ku0011Map) throws Exception
	{
// ANK-3366-00-00 ADD START
		// 工事案件のSYSID
		String sysidParam  = ku0011Map.getString(JBSbatKU_T_KOJIAK.SYSID);
		
		// お客様取得処理を呼び出し、卸先事業者コードを取得する
		String orsjgsCd = findOrsjgsCd(sysidParam);
// ANK-3366-00-00 ADD END
		
		// 出力電文
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 設計依頼年月日
		outMap.setString(JBSbatKUIFE014.DSGN_REQYMD, super.opeDate);
		// 工事案件番号
		outMap.setString(JBSbatKUIFE014.KOJIAK_NO, inMap.getString(JBSbatKU_T_SENKO_DSGN.KOJIAK_NO));
		// Ｐ−ＩＤ
		outMap.setString(JBSbatKUIFE014.PID, inMap.getString(JBSbatKU_T_SENKO_DSGN.PID));
		// 設置場所住所補記・建物名
		String[] setPlaceAdrttm = JKUBatCommon.splitString(inMap.getString(JBSbatKU_T_SENKO_DSGN.SETPLACE_ADRTTM), 60, true);
		outMap.setString(JBSbatKUIFE014.SETPLACE_ADRTTM, setPlaceAdrttm[0]);
		// 予備１
		outMap.setString(JBSbatKUIFE014.YOBI_1, null);
		// お客様名１
		outMap.setString(JBSbatKUIFE014.CUST_NM_1, JKUBatCommon.getCustName1Mask(inMap.getString(JBSbatKU_T_SENKO_DSGN.CUST_NM), 30));
		// お客様名２
		String[] custName2 = JKUBatCommon.splitString(JKUBatCommon.getCustName2Mask(inMap.getString(JBSbatKU_T_SENKO_DSGN.CUST_NM), 30), 60, true);
		outMap.setString(JBSbatKUIFE014.CUST_NM_2, custName2[0]);
// ANK-3366-00-00 MOD START
//		// 予備２
//		outMap.setString(JBSbatKUIFE014.YOBI_2, null);
		//卸先事業者コード 
		outMap.setString(JBSbatKUIFE014.ORSJGS_CD, orsjgsCd);
// ANK-3366-00-00 MOD END
		// 予備３
		outMap.setString(JBSbatKUIFE014.YOBI_3, null);
		// 予備４
		outMap.setString(JBSbatKUIFE014.YOBI_4, null);
		// 設置場所住所コード
		outMap.setString(JBSbatKUIFE014.SETPLACE_AD_CD, JKUBatCommon.getPlaceAdCd5keta(inMap.getString(JBSbatKU_T_SENKO_DSGN.SETPLACE_AD_CD)));
		// 予備５
		outMap.setString(JBSbatKUIFE014.YOBI_5, null);
		// 予備６
		outMap.setString(JBSbatKUIFE014.YOBI_6, null);
		// 最寄ＣＳ番号
		outMap.setString(JBSbatKUIFE014.RCNT_CS_NO, null);
		// 予備７
		outMap.setString(JBSbatKUIFE014.YOBI_7, null);
		// 予備８
		outMap.setString(JBSbatKUIFE014.YOBI_8, null);
		// 予備９
		outMap.setString(JBSbatKUIFE014.YOBI_9, null);
		// 予備１０
		outMap.setString(JBSbatKUIFE014.YOBI_10, null);
		// 予備１１
		outMap.setString(JBSbatKUIFE014.YOBI_11, null);
		// 予備１２
		outMap.setString(JBSbatKUIFE014.YOBI_12, null);
		// 予備１３
		outMap.setString(JBSbatKUIFE014.YOBI_13, null);
		// 予備１４
		outMap.setString(JBSbatKUIFE014.YOBI_14, null);
		// 予備１５
		outMap.setString(JBSbatKUIFE014.YOBI_15, null);
		// 予備１６
		outMap.setString(JBSbatKUIFE014.YOBI_16, null);
		// 予備１７
		outMap.setString(JBSbatKUIFE014.YOBI_17, null);
		// 予備１８
		outMap.setString(JBSbatKUIFE014.YOBI_18, null);
		// 予備１９
		outMap.setString(JBSbatKUIFE014.YOBI_19, null);
		// 予備２０
		outMap.setString(JBSbatKUIFE014.YOBI_20, null);
		// 予備２１
		outMap.setString(JBSbatKUIFE014.YOBI_21, null);
		// サービス契約番号
		outMap.setString(JBSbatKUIFE014.SVC_KEI_NO, inMap.getString(JBSbatKU_T_SENKO_DSGN.SVC_KEI_NO));
		// 予備２２
		outMap.setString(JBSbatKUIFE014.YOBI_22, null);
		// 予備２３
		outMap.setString(JBSbatKUIFE014.YOBI_23, null);
		// 予備２４
		outMap.setString(JBSbatKUIFE014.YOBI_24, null);
		// 予備２５
		outMap.setString(JBSbatKUIFE014.YOBI_25, null);
		// 予備２６
		outMap.setString(JBSbatKUIFE014.YOBI_26, null);
		// 予備２７
		outMap.setString(JBSbatKUIFE014.YOBI_27, null);
		// 予備２８
		outMap.setString(JBSbatKUIFE014.YOBI_28, null);
		// 予備２９
		outMap.setString(JBSbatKUIFE014.YOBI_29, null);
		// 予備３０
		outMap.setString(JBSbatKUIFE014.YOBI_30, null);
		// 予備３１
		outMap.setString(JBSbatKUIFE014.YOBI_31, null);
		// 予備３２
		outMap.setString(JBSbatKUIFE014.YOBI_32, null);
		
		// 設備向けコード変換（分類コード、新料金プラン）
		HashMap<String, String> newPplanCdMap = getNewPplanCd(inMap, ku0011Map);
		
		// 分類コード
		outMap.setString(JBSbatKUIFE014.KEI_SVC, newPplanCdMap.get(JKUStrConst.RNKI_SYS_KKEI_SVC_CD));
		
		// 新料金プラン
		outMap.setString(JBSbatKUIFE014.NEW_PPLAN, newPplanCdMap.get(JKUStrConst.RNKI_SYS_PPLAN_CD));
		
		// 設備向けコード変換（旧料金プラン）
		HashMap<String, String> oldPplanCdMap = getOldPplanCd(inMap, ku0011Map);
		
		if(JKUStrConst.CD00576_EPON_GEPON_EQUIP_SWITCH.equals(ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJI_UK_OPTNTY_IDO_DIV)))
		{
			// 工事受付契機異動区分が「00067：E-PON→GE-PON設備切替」の場合
			
			// 旧料金プランに新料金プランと同値を設定
			outMap.setString(JBSbatKUIFE014.OLD_PPLAN, newPplanCdMap.get(JKUStrConst.RNKI_SYS_PPLAN_CD));
		}
		else
		{
			// 工事受付契機異動区分が「00067：E-PON→GE-PON設備切替」以外の場合
			
			// 旧料金プランを設定
			outMap.setString(JBSbatKUIFE014.OLD_PPLAN, oldPplanCdMap.get(JKUStrConst.RNKI_SYS_PPLAN_CD));
		}
		
		// TK番号
		outMap.setString(JBSbatKUIFE014.TKNO, inMap.getString(JBSbatKU_T_SENKO_DSGN.TKNO));
		
		// 出力フラグを設定
		outMap.setOutFlg(true);
		
		return outMap;
	}
	
	/**
	 * 工事案件を検索します。
	 * @param kojiakNo 工事案件番号
	 * @return 工事案件テーブル１レコード（取得できなかった場合はnull）
	 * @throws Exception
	 */
	private JBSbatCommonDBInterface findKU_T_KOJIAK(String kojiakNo) throws Exception
	{
		// 検索処理に渡すパラメタを設定
		Object[] whereParam = new Object[1];
		
		whereParam[0] = kojiakNo;
		
		// 検索処理実行
		return this.executeKU_T_KOJIAK_PKSELECT(whereParam);

	}

	/**
	 * 工事案件を更新します。
	 * @param inMap 入力電文
	 * @throws Exception
	 */
	private void updateKU_T_KOJIAK(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 更新処理に渡すパラメタを設定
		Object[] setParam = new Object[3];
		Object[] whereParam = new Object[1];
		
		// ＦＣＤＳ連携種別コード「連携済」
		setParam[0] = JKUStrConst.CD00699_RENKEIZM;
		// ＦＣＤＳ連携種別変更年月日時分秒
		setParam[1] = JKUBatCommon.getSysDateTime();
		// ＦＣＤＳ前回連携サービス契約番号
		setParam[2] = inMap.getString(JBSbatKU_T_SENKO_DSGN.SVC_KEI_NO);
		
		// 工事案件番号
		whereParam[0] = inMap.getString(JBSbatKU_T_SENKO_DSGN.KOJIAK_NO);
			
		this.executeKU_T_KOJIAK_PKUPDATE(setParam, whereParam);
	}

	/**
	 * 先行設計を更新します。
	 * @param snkskiNo 先行設計番号
	 * @throws Exception
	 */
	private void updateKU_T_SENKO_DSGN(String snkskiNo) throws Exception
	{
		// 更新処理に渡すパラメタを設定
		Object[] setParam = new Object[2];
		Object[] whereParam = new Object[1];
		
		// 先行設計ステータス「依頼済」
		setParam[0] = JKUStrConst.SNKSKI_STAT_IRI_ZM;
		// 設計依頼年月日
		setParam[1] = commonItem.getOpeDate();
		
		// 先行設計番号
		whereParam[0] = snkskiNo;

		this.executeKU_T_SENKO_DSGN_PKUPDATE(setParam, whereParam);
	}
	
	/**
	 * 新料金プランコード設定のためのMapを取得します。
	 * @param inMap 入力電文(先行設計)
	 * @param ku0011Map 工事案件情報
	 * @return 新料金プランコードマップ
	 * @throws Exception
	 */
	private HashMap<String, String> getNewPplanCd(JBSbatServiceInterfaceMap inMap, JBSbatCommonDBInterface ku0011Map) throws Exception
	{
		// 設備向けコード変換（分類コード、新料金プラン）
		HashMap<String, String> paramMap = new HashMap<String, String>();
		HashMap<String, String> rsltMap = new HashMap<String, String>();

		// インターネットオフィスの判定
		if (null == ku0011Map.getString(JBSbatKU_T_KOJIAK.HOJIN_PRC_GRP_CD))
		{
			// インターネットオフィス以外の場合
			paramMap.put(JKUStrConst.RNKI_SYS_PRC_GRP_CD, ku0011Map.getString(JBSbatKU_T_KOJIAK.PRC_GRP_CD));
			paramMap.put(JKUStrConst.RNKI_SYS_PCRS_CD, ku0011Map.getString(JBSbatKU_T_KOJIAK.PCRS_CD));
			paramMap.put(JKUStrConst.RNKI_SYS_PPLAN_CD, ku0011Map.getString(JBSbatKU_T_KOJIAK.PPLAN_CD));
			paramMap.put(JKUStrConst.RNKI_SYS_WRIB_TYPE_CD, ku0011Map.getString(JBSbatKU_T_KOJIAK.WRIB_TYPE_CD));
			paramMap.put(JKUStrConst.RNKI_SYS_MANS_BUKKEN_CD, ku0011Map.getString(JBSbatKU_T_KOJIAK.MANSION_BUKKEN_CD));
			paramMap.put(JKUStrConst.RNKI_SYS_SYSTEM, JKUStrConst.RNKI_SYSTEM_FCDS);
		}
		else
		{
			// インターネットオフィスの場合
			paramMap.put(JKUStrConst.RNKI_SYS_PRC_GRP_CD, ku0011Map.getString(JBSbatKU_T_KOJIAK.HOJIN_PRC_GRP_CD));
			paramMap.put(JKUStrConst.RNKI_SYS_PCRS_CD, ku0011Map.getString(JBSbatKU_T_KOJIAK.HOJIN_PCRS_CD));
			paramMap.put(JKUStrConst.RNKI_SYS_PPLAN_CD, ku0011Map.getString(JBSbatKU_T_KOJIAK.HOJIN_PPLAN_CD));
			paramMap.put(JKUStrConst.RNKI_SYS_WRIB_TYPE_CD, null);
			paramMap.put(JKUStrConst.RNKI_SYS_MANS_BUKKEN_CD, null);
			paramMap.put(JKUStrConst.RNKI_SYS_SYSTEM, JKUStrConst.RNKI_SYSTEM_FCDS);
		}
		
		rsltMap = JKUBatCommon.getSetsubiCodeMap(commonItem, inMap.getString(JBSbatKU_T_SENKO_DSGN.KOJIAK_NO), paramMap, db_KU_T_KJAK_EOH_NTMANS);
		
		if (null == rsltMap)
		{
			// ログ出力、次レコードへ
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKUB0430KE, new String[]{
					inMap.getString(JBSbatKU_T_SENKO_DSGN.KOJIAK_NO),
					JKUBatCommon.convMapToString(paramMap)});
			
			throw new JBSbatBusinessError();
		}
		
		return rsltMap;
	}

	/**
	 * 旧料金プランコード設定のためのMapを取得します。
	 * @param inMap 入力電文(先行設計)
	 * @param ku0011Map 工事案件情報
	 * @return 旧料金プランコードマップ
	 * @throws Exception
	 */
	private HashMap<String, String> getOldPplanCd(JBSbatServiceInterfaceMap inMap, JBSbatCommonDBInterface ku0011Map) throws Exception
	{
		// 設備向けコード変換（旧料金プラン）
		HashMap<String, String> paramMap = null;
		HashMap<String, String> rsltMap = null;
		
		// プラン変更(収容替え)かつインターネットオフィス以外の場合
		if (JKUStrConst.CD00577_PLAN_CHG_SHUYO.equals(ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD)) 
				&& null == ku0011Map.getString(JBSbatKU_T_KOJIAK.HOJIN_PRC_GRP_CD))
		{
			
			paramMap = new HashMap<String, String>();
			
			// 旧料金プランを取得する
			paramMap = getOldPlanCd(ku0011Map, paramMap);
			paramMap.put(JKUStrConst.RNKI_SYS_MANS_BUKKEN_CD, ku0011Map.getString(JBSbatKU_T_KOJIAK.MANSION_BUKKEN_CD));
			paramMap.put(JKUStrConst.RNKI_SYS_SYSTEM, JKUStrConst.RNKI_SYSTEM_FCDS);
			
			rsltMap = JKUBatCommon.getSetsubiCodeMap(commonItem, inMap.getString(JBSbatKU_T_SENKO_DSGN.KOJIAK_NO), paramMap, db_KU_T_KJAK_EOH_NTMANS);
			
			if (null == rsltMap)
			{
				// ログ出力、次レコードへ
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKUB0430KE, new String[]{
						inMap.getString(JBSbatKU_T_SENKO_DSGN.KOJIAK_NO),
						JKUBatCommon.convMapToString(paramMap)});
				
				throw new JBSbatBusinessError();
			}
			
			return rsltMap;
			
		}
		else
		{
			// 条件を満たせない場合は旧料金プランコードは取得しない。
			return new HashMap<String, String>();
		}
		
		
	}
	
	/**
	 * 工事案件サブスキーマから旧料金プランを取得します
	 * @param ku0011Map 工事案件情報
	 * @param paramMap 設備向けコード変換Map
	 * @return	設備向けコード変換Map
	 * @throws Exception
	 */
	private HashMap<String, String> getOldPlanCd(JBSbatCommonDBInterface ku0011Map, HashMap<String, String> paramMap) throws Exception
	{
		// ---工事案件サブスキーマの検索を実行する
		
		String kojiakNo = ku0011Map.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO);
		String[] whereParam = {kojiakNo};
		
		// 工事案件＜eo光ネット＞
		JBSbatCommonDBInterface ku0021DBI = executeKU_T_KJAK_EOH_NET_PKSELECT(whereParam);
		// 工事案件＜eo光ネットマンション＞
		JBSbatCommonDBInterface ku0061DBI = executeKU_T_KJAK_EOH_NTMANS_PKSELECT(whereParam);
		
		int resultCount = 0;
		
		if (null != ku0021DBI)
		{
			++resultCount;
			paramMap.put(JKUStrConst.RNKI_SYS_PRC_GRP_CD, ku0011Map.getString(JBSbatKU_T_KOJIAK.PRC_GRP_CD));
			paramMap.put(JKUStrConst.RNKI_SYS_PCRS_CD, ku0021DBI.getString(JBSbatKU_T_KJAK_EOH_NET.OLD_PCRS_CD));
			paramMap.put(JKUStrConst.RNKI_SYS_PPLAN_CD, ku0021DBI.getString(JBSbatKU_T_KJAK_EOH_NET.OLD_PPLAN_CD));
			paramMap.put(JKUStrConst.RNKI_SYS_WRIB_TYPE_CD, ku0021DBI.getString(JBSbatKU_T_KJAK_EOH_NET.OLD_WRIB_TYPE_CD));
		}
		
		if (null != ku0061DBI)
		{
			++resultCount;
			paramMap.put(JKUStrConst.RNKI_SYS_PRC_GRP_CD, ku0011Map.getString(JBSbatKU_T_KOJIAK.PRC_GRP_CD));
			paramMap.put(JKUStrConst.RNKI_SYS_PCRS_CD, ku0061DBI.getString(JBSbatKU_T_KJAK_EOH_NTMANS.OLD_PCRS_CD));
			paramMap.put(JKUStrConst.RNKI_SYS_PPLAN_CD, ku0061DBI.getString(JBSbatKU_T_KJAK_EOH_NTMANS.OLD_PPLAN_CD));
			paramMap.put(JKUStrConst.RNKI_SYS_WRIB_TYPE_CD, ku0061DBI.getString(JBSbatKU_T_KJAK_EOH_NTMANS.OLD_WRIB_TYPE_CD));
		}
		
		// ---サブスキーマに不整合がある場合のエラー処理
		
		// 存在しない場合
		if (0 == resultCount)
		{
			// ログ出力し、次レコードへ
			// %1%に該当の%2%が存在しません。（%3%）
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKUB0070KE, new String[]{
															"工事案件サブスキーマ",
															"工事案件番号",
															kojiakNo});
			throw new JBSbatBusinessError();
		}
		
		// 複数存在する場合
		if (1 < resultCount)
		{
			// ログ出力し、次レコードへ
			// 一意のはずの%1%が%2%に複数あります。(%3%)
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKUB0440KE, new String[]{
															"工事案件番号",
															"工事案件サブスキーマ",
															kojiakNo});
			throw new JBSbatBusinessError();
		}

		return paramMap;
	}
	
	/**
	 * 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]);

		// 排他制御のためselectByPrimaryKeysからselectByPrimaryKeysForUpdateWaitへ手修正
		return db_KU_T_KOJIAK.selectByPrimaryKeysForUpdateWait(whereMap);
	}

	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SNKSKI_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKU_T_SENKO_DSGN_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SNKSKI_NO", whereParam[0]);

		// DBアクセスを実行します
		return db_KU_T_SENKO_DSGN.selectByPrimaryKeys(whereMap);
	}

	/**
	 * 先行設計変更有無チェック
	 * @param senkoDsgnSelect 抽出先行設計
	 * @return boolean 変更有無
	 * @throws Exception
	 */
	private boolean senkoDsgnChanged(JBSbatCommonDBInterface senkoDsgnSelect) throws Exception
	{
		String snkskiStat = senkoDsgnSelect.getString(JBSbatKU_T_SENKO_DSGN.SNKSKI_STAT);
		String snkskiSbtCd = senkoDsgnSelect.getString(JBSbatKU_T_SENKO_DSGN.SNKSKI_SBT_CD);
		
		if(JKUStrConst.CD00477_UK_ZM.equals(snkskiStat) && JKUStrConst.CD00578_KYOKU_EQUIP_SNKSKI.equals(snkskiSbtCd))
		{
			// 先行設計ステータスが「受付済」かつ 先行設計種別コードが「局設備先行設計」の場合
			return false;
		}
		else
		{
			// 上記に当てはまらない場合は変更されている
			return true;
		}
	}	
	
// ANK-3366-00-00 ADD START
	/**
	 * お客様から卸先事業者コードを検索します。
	 * @param sysidParam 工事案件SYSID
	 * @return String 卸先事業者コード
	 * @throws Exception
	 */
	private String findOrsjgsCd(String sysidParam) throws Exception
	{
		/** DBアクセス結果を取得するためのMap */
		JBSbatCommonDBInterface custMap = new JBSbatCommonDBInterface();

		// 卸先事業者コード
		String orsjgsCd =null;
		
		// 検索処理に渡すパラメタを設定
		Object[] whereParam = new Object[2];
		whereParam[0] = sysidParam;
		whereParam[1] = super.opeDate;
		
		// 検索処理実行
		this.executeCK_T_CUST_KU_SELECT_001(whereParam);
		
		// 検索結果の１件を取得する
		custMap = db_CK_T_CUST.selectNext();
		
		// お客様がある場合は、卸先事業者コードを戻す
		if(custMap != null)
		{
// ANK-4269-00-00 MOD START
//			orsjgsCd = custMap.getString(JBSbatCK_T_CUST.ORSJGS_CD);
			if(custMap.getString(JBSbatCK_T_CUST.SCM_JGS_CD) != null){
				orsjgsCd = custMap.getString(JBSbatCK_T_CUST.SCM_JGS_CD);
			}
			else
			{
				orsjgsCd = custMap.getString(JBSbatCK_T_CUST.ORSJGS_CD);
			}
// ANK-4269-00-00 MOD END
		}
		
		return orsjgsCd;
	}

	/**
	 * SQLKEY(KU_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SYSID
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_CUST_KU_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CK_T_CUST.selectBySqlDefine(paramList, CK_T_CUST_KU_SELECT_001);
	}
// ANK-3366-00-00 ADD END
	/**▲▲▲▲▲▲業務チームで作成したメソッドです 終了▲▲▲▲▲▲*/
}

