/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKUKojiDelTggChkTrn
*	ソースファイル名	：JBSbatKUKojiDelTggChkTrn.java
*	作成者				：富士通　
*	作成日				：2012年09月19日
*＜機能概要＞
*　削除対象外チェック処理(工事)部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/09/19  FJ)旭		新規作成【UIZ-0877】
*	v10.00.00	2014/07/07  FJ)佐野		修正【ANK-1918-00-00】
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKUBatCommon;
import eo.business.util.table.JBSbatKK_T_KJNIFDEL_JDG_WK;
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.JBSbatBusinessException;
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 JBSbatKUKojiDelTggChkTrn extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(サービス契約＿工事案件)*/
	private static final String D_TBL_NAME_KU_T_SVKEI_KOJIAK = "KU_T_SVKEI_KOJIAK";

	/** テーブル(工事案件ＰＫ検索)*/
	private static final String D_TBL_NAME_KU_T_KOJIAK = "KU_T_KOJIAK";

	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";

	/** テーブル(法人サービス契約＿工事案件)*/
	private static final String D_TBL_NAME_KU_T_HOJINSVKEI_KJAK = "KU_T_HOJINSVKEI_KJAK";

	/** テーブル(個人情報削除判定ワーク)*/
	private static final String D_TBL_NAME_KK_T_KJNIFDEL_JDG_WK = "KK_T_KJNIFDEL_JDG_WK";

	/** SQL定義キー(KU_SELECT_018)*/
	private static final String KU_T_SVKEI_KOJIAK_KU_SELECT_018 = "KU_SELECT_018";

	/** SQL定義キー(KU_SELECT_019)*/
	private static final String KU_T_SVKEI_KOJIAK_KU_SELECT_019 = "KU_SELECT_019";

	/** SQL定義キー(KU_SELECT_020)*/
	private static final String KU_T_SVKEI_KOJIAK_KU_SELECT_020 = "KU_SELECT_020";

	/** SQL定義キー(KU_SELECT_006)*/
	private static final String KU_T_HOJINSVKEI_KJAK_KU_SELECT_006 = "KU_SELECT_006";

	/** SQL定義キー(KU_SELECT_002)*/
	private static final String KK_T_KJNIFDEL_JDG_WK_KU_SELECT_002 = "KU_SELECT_002";

	/** テーブルアクセスクラス(サービス契約＿工事案件)*/
	private JBSbatSQLAccess db_KU_T_SVKEI_KOJIAK = null;

	/** テーブルアクセスクラス(工事案件ＰＫ検索)*/
	private JBSbatSQLAccess db_KU_T_KOJIAK = null;

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;

	/** テーブルアクセスクラス(法人サービス契約＿工事案件)*/
	private JBSbatSQLAccess db_KU_T_HOJINSVKEI_KJAK = null;

	/** テーブルアクセスクラス(個人情報削除判定ワーク)*/
	private JBSbatSQLAccess db_KK_T_KJNIFDEL_JDG_WK = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**▼▼▼▼▼▼業務チームで作成した宣言です 開始▼▼▼▼▼▼*/
	
	/** 法人サービス契約＿工事案件からカウントを取得する文字列 */	
	private static final String GET_HJ_SVC_CNT = "CNT";
	
	/** 削除判定コード：削除可 */	
	private static final String DELETE_PSG = "00";
	
	/** 削除判定コード：削除不可 */	
	private static final String DELETE_FAIL = "05";
	
	/** 削除対象年算出時判定条件に使用する項目 */	
	private static final int DELETE_YEAR_JOKEN = 401;
	
	/** 削除対象年月日の年月設定値 */	
	private static final String DELETE_MONTH_DAY = "0331";
	
	/** 処理済みリスト */
	private ArrayList<String> checkCompList = null;
	
	/** 候補マップに設定されている工事案件リストキー  */
	private static final String GET_MAP_KOJIAKLIST = "kojiak";
	
	/** 候補マップに設定されているサービス契約＿工事案件リストキー */
	private static final String GET_MAP_SVCKEILIST = "svckei";
	
	/** 課金後期間 */
	private static String kuTKKJ_FIN_CHRG_PRD = "";
	
	/**▲▲▲▲▲▲業務チームで作成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_KJNIFDEL_JDG_WK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KJNIFDEL_JDG_WK);
		db_KU_T_SVKEI_KOJIAK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_SVKEI_KOJIAK);
		db_KU_T_KOJIAK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KOJIAK);
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
		db_KU_T_HOJINSVKEI_KJAK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_HOJINSVKEI_KJAK);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// 処理済みリスト
		checkCompList = new ArrayList<String>();
		
		// 課金後期間取得
		kuTKKJ_FIN_CHRG_PRD = new JKUBatCommon().getWorkParamKnri(commonItem, JKUStrConst.KU_TKKJ_FIN_CHRG_PRD);
		
		if (null == kuTKKJ_FIN_CHRG_PRD)
		{
			// 取得できなかった場合は、ログ出力し、処理終了
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKUB0070KE, new String[] {
					JKUStrConst.SCHEMANM_ZM0321, "業務パラメータID",
					JKUStrConst.KU_TKKJ_FIN_CHRG_PRD });
		}
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// 個人情報削除判定から取得したサービス契約番号
		String kjnSvcKeiNo = inMap.getString(JBSbatKK_T_KJNIFDEL_JDG_WK.SVC_KEI_NO);
		
		// 処理済のサービス契約番号かどうかチェックを行う
		// 既に処理済みであった場合次レコードへ
		if (-1 != checkCompList.indexOf(kjnSvcKeiNo))
		{
			// なにもしない
			return null;
		}
		
		
		// 対象外工事案件番号リスト取得
		HashMap<String, ArrayList<String>> getTgMap = this.getTggKojiakNo(kjnSvcKeiNo);
		
		
		// 取得できなかった場合
		if(null == getTgMap)
		{
			// なにもしない
			return null;
		}
		
		// マップから工事案件番号リストを取り出す
		ArrayList<String> kojiakNoList = getTgMap.get(GET_MAP_KOJIAKLIST);
		// マップからサービス契約番号リストを取り出す
		ArrayList<String> svcKeiNoList = getTgMap.get(GET_MAP_SVCKEILIST);
		
		// 工事案件番号レコードのリスト
		ArrayList<JBSbatCommonDBInterface> kojiakNoItemList = new ArrayList<JBSbatCommonDBInterface>();
		
		// 法人サービス契約＿工事案件の件数情報取得
		HashMap<String, String> hjSvcTgMap = new HashMap<String, String>();
		
		// チェック結果
		String checkResult = null;
		
		// リストが一件も取得できなかった場合
		if(null == kojiakNoList
				|| 0 == kojiakNoList.size())
		{
			// 何もしない
			return null;
		}
		
		// 工事案件番号をレコード単位で保持
		for (int i = 0 ; i < kojiakNoList.size() ; ++i)
		{
			
			// リストの時点で重複はカットしているのでそのまま詰める
			kojiakNoItemList.add(this.findKU_T_KOJIAK(kojiakNoList.get(i)));
		}
		
		// 一件も取れなかったら
		if(null == kojiakNoItemList
				|| 0 == kojiakNoItemList.size())
		{
			// 何もしない
			return null;
		}
		
		// 法人サービス契約＿工事案件の件数取得
		for (int i = 0 ; i < kojiakNoList.size() ; ++i)
		{
			// 工事案件番号をキーに法人サービス契約＿工事案件のレコード数を値に保存
			hjSvcTgMap.put(kojiakNoList.get(i), this.getHjSvcCnt(kojiakNoList.get(i)));
		}
		
		// 4.削除対象外チェック
		// 削除対象外工事案件リスト取得
		checkResult = this.checkDelTgg(kojiakNoItemList, svcKeiNoList, hjSvcTgMap);
		
		// 削除不可
		if(DELETE_FAIL.equals(checkResult))
		{
			
			// 更新
			for (int i = 0 ; i < svcKeiNoList.size() ; ++i)
			{
				// 個人情報削除判定ワークを検索
				JBSbatCommonDBInterface kk2611map = this.findKK_T_KJNIFDEL_JDG_WK(svcKeiNoList.get(i));
				
				// 
				while(null != kk2611map)
				{
					
					// 削除フラグが一件でも「削除可」でない場合
					if(true == DELETE_PSG.equals(kk2611map.getString(JBSbatKK_T_KJNIFDEL_JDG_WK.DEL_JDG_CD)))
					{
						// 「00：削除可」のみ更新する
						// 更新実行
						this.updateKK_T_KJNIFDEL_JDG_WK_PKUPDATE(kk2611map);
					}
					// 次レコード取得
					kk2611map = db_KK_T_KJNIFDEL_JDG_WK.selectNext();
					
				}
				
			}
			
		}
		
		// 更新処理済みリストに登録
		for (int i = 0 ; i < svcKeiNoList.size() ; ++i)
		{
			// リストの時点で重複はカットしているのでそのまま詰める
			checkCompList.add(svcKeiNoList.get(i));
		}
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_KJNIFDEL_JDG_WK.close();
		db_KU_T_SVKEI_KOJIAK.close();
		db_KU_T_KOJIAK.close();
		db_ZM_M_WORK_PARAM_KNRI.close();
		db_KU_T_HOJINSVKEI_KJAK.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(KU_SELECT_018)で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_SVKEI_KOJIAK_KU_SELECT_018(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KU_T_SVKEI_KOJIAK.selectBySqlDefine(paramList, KU_T_SVKEI_KOJIAK_KU_SELECT_018);
	}

	/**
	 * SQLKEY(KU_SELECT_019)で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_SVKEI_KOJIAK_KU_SELECT_019(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KU_T_SVKEI_KOJIAK.selectBySqlDefine(paramList, KU_T_SVKEI_KOJIAK_KU_SELECT_019);
	}

	/**
	 * SQLKEY(KU_SELECT_020)で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_SVKEI_KOJIAK_KU_SELECT_020(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KU_T_SVKEI_KOJIAK.selectBySqlDefine(paramList, KU_T_SVKEI_KOJIAK_KU_SELECT_020);
	}

	/**
	 * 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項目は以下に説明します。
	 *		 	WORK_PARAM_ID
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeZM_M_WORK_PARAM_KNRI_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("WORK_PARAM_ID", whereParam[0]);

		// DBアクセスを実行します
		return db_ZM_M_WORK_PARAM_KNRI.selectByPrimaryKeys(whereMap);
	}

	/**
	 * SQLKEY(KU_SELECT_006)で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_HOJINSVKEI_KJAK_KU_SELECT_006(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KU_T_HOJINSVKEI_KJAK.selectBySqlDefine(paramList, KU_T_HOJINSVKEI_KJAK_KU_SELECT_006);
	}

	/**
	 * 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_KJNIFDEL_JDG_WK_KU_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_KJNIFDEL_JDG_WK.selectBySqlDefine(paramList, KK_T_KJNIFDEL_JDG_WK_KU_SELECT_002);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	削除判定コード				DEL_JDG_CD
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SVC_KEI_NO
	 *		 	SEIKY_KEI_NO
	 *		 	SYSID
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KJNIFDEL_JDG_WK_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("DEL_JDG_CD", setParam[0]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SVC_KEI_NO", whereParam[0]);
		whereMap.setValue("SEIKY_KEI_NO", whereParam[1]);
		whereMap.setValue("SYSID", whereParam[2]);

		// DBアクセスを実行します
		db_KK_T_KJNIFDEL_JDG_WK.updateByPrimaryKeys(whereMap, setMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**▼▼▼▼▼▼業務チームで作成したメソッドです 開始▼▼▼▼▼▼*/
	
//	/**
//	 * サービス契約＿工事案件を検索します。
//	 * @param svckeiNo 個人情報削除判定から取得したサービス契約番号
//	 * @return サービス契約＿工事案件テーブル１レコード（取得できなかった場合はnull）
//	 * @throws Exception
//	 */
//	private JBSbatCommonDBInterface findKU_T_SVKEI_KOJIAK_KJN(String svckeiNo) throws Exception
//	{
//		// 検索処理に渡すパラメタを設定
//		Object[] whereParam = new Object[1];
//		
//		whereParam[0] = svckeiNo;
//		
//		// 検索処理実行
//		this.executeKU_T_SVKEI_KOJIAK_KU_SELECT_018(whereParam);
//		
//		return db_KU_T_SVKEI_KOJIAK.selectNext();
//	}
	
//	/**
//	 * サービス契約＿工事案件を検索します。
//	 * @param kojiakNo 工事案件番号
//	 * @return サービス契約＿工事案件テーブル１レコード（取得できなかった場合はnull）
//	 * @throws Exception
//	 */
//	private JBSbatCommonDBInterface findKU_T_SVKEI_KOJIAK_Use_kojiakNo(String kojiakNo) throws Exception
//	{
//		// 検索処理に渡すパラメタを設定
//		Object[] whereParam = new Object[1];
//		
//		whereParam[0] = kojiakNo;
//		
//		// 検索処理実行
//		this.executeKU_T_SVKEI_KOJIAK_KU_SELECT_019(whereParam);
//		
//		return db_KU_T_SVKEI_KOJIAK.selectNext();
//	}
	
	/**
	 * サービス契約＿工事案件を検索します。
	 * 検索のみ行い、nextによるレコード取得は行わない。
	 * @param kojiakNo 工事案件番号
	 * @return サービス契約＿工事案件テーブル１レコード（取得できなかった場合はnull）
	 * @throws Exception
	 */
	private void findKU_T_SVKEI_KOJIAK_Nnx_kojiakNo(String kojiakNo) throws Exception
	{
		// 検索処理に渡すパラメタを設定
		Object[] whereParam = new Object[1];
		
		whereParam[0] = kojiakNo;
		
		// 検索処理実行
		this.executeKU_T_SVKEI_KOJIAK_KU_SELECT_019(whereParam);
		
	}
	
//	/**
//	 * サービス契約＿工事案件を検索します。
//	 * @param svckeiNo サービス契約番号
//	 * @return サービス契約＿工事案件テーブル１レコード（取得できなかった場合はnull）
//	 * @throws Exception
//	 */
//	private JBSbatCommonDBInterface findKU_T_SVKEI_KOJIAK_Use_svckeiNo(String svckeiNo) throws Exception
//	{
//		// 検索処理に渡すパラメタを設定
//		Object[] whereParam = new Object[1];
//		
//		whereParam[0] = svckeiNo;
//		
//		// 検索処理実行
//		this.executeKU_T_SVKEI_KOJIAK_KU_SELECT_020(whereParam);
//		
//		return db_KU_T_SVKEI_KOJIAK.selectNext();
//	}
	
	/**
	 * サービス契約＿工事案件を検索します。
	 * 検索のみ行い、nextによるレコード取得は行わない。
	 * @param svckeiNo サービス契約番号
	 * @return サービス契約＿工事案件テーブル１レコード（取得できなかった場合はnull）
	 * @throws Exception
	 */
	private void findKU_T_SVKEI_KOJIAK_Nnx_svckeiNo(String svckeiNo) throws Exception
	{
		// 検索処理に渡すパラメタを設定
		Object[] whereParam = new Object[1];
		
		whereParam[0] = svckeiNo;
		
		// 検索処理実行
		this.executeKU_T_SVKEI_KOJIAK_KU_SELECT_020(whereParam);
		
	}
	
	/**
	 * 工事案件を検索します。
	 * @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 kojiakNo 工事案件番号
	 * @return 法人サービス契約＿工事案件テーブルレコード数（取得できなかった場合はnull）
	 * @throws Exception
	 */
	private JBSbatCommonDBInterface findKU_T_HOJINSVKEI_KJAK(String kojiakNo) throws Exception
	{
		// 検索処理に渡すパラメタを設定
		Object[] whereParam = new Object[1];
		
		whereParam[0] = kojiakNo;
		
		// 検索処理実行
		this.executeKU_T_HOJINSVKEI_KJAK_KU_SELECT_006(whereParam);
		
		return db_KU_T_HOJINSVKEI_KJAK.selectNext();

	}
	
	/**
	 * 個人情報削除判定ワークを検索します。
	 * @param svckeiNo サービス契約番号
	 * @return 個人情報削除判定ワークテーブル１レコード（取得できなかった場合はnull）
	 * @throws Exception
	 */
	private JBSbatCommonDBInterface findKK_T_KJNIFDEL_JDG_WK(String svckeiNo) throws Exception
	{
		// 検索処理に渡すパラメタを設定
		Object[] whereParam = new Object[1];
		
		whereParam[0] = svckeiNo;
		
		// 検索処理実行
		this.executeKK_T_KJNIFDEL_JDG_WK_KU_SELECT_002(whereParam);
		
		return db_KK_T_KJNIFDEL_JDG_WK.selectNext();

	}
	
	
	/**
	 * 個人情報削除判定ワークを更新します。
	 * @param kk2611map 更新対象個人情報削除判定ワーク
	 * @throws Exception
	 */
	private void updateKK_T_KJNIFDEL_JDG_WK_PKUPDATE(JBSbatCommonDBInterface kk2611map) throws Exception
	{
		
		// 更新処理に渡すパラメタを設定
		Object[] setParam = new Object[1];
		Object[] whereParam = new Object[3];
		
		// 削除判定フラグ
		setParam[0] = DELETE_FAIL;
		
		// サービス契約番号
		whereParam[0] = kk2611map.getString(JBSbatKK_T_KJNIFDEL_JDG_WK.SVC_KEI_NO);
		// 請求契約番号
		whereParam[1] = kk2611map.getString(JBSbatKK_T_KJNIFDEL_JDG_WK.SEIKY_KEI_NO);
		// ＳＹＳＩＤ
		whereParam[2] = kk2611map.getString(JBSbatKK_T_KJNIFDEL_JDG_WK.SYSID);
			
		this.executeKK_T_KJNIFDEL_JDG_WK_PKUPDATE(setParam, whereParam);
		
	}
	
	
	/**
	 * 工事として削除対象外となりうるデータを抽出する
	 * 工事案件番号とサービス契約番号の件数が同一数となるまで取得、比較を繰り返す
	 * @param kjnSvcKeiNo 個人情報削除から取得したサービス契約番号
	 * @return 対象工事案件番号 kojiakNo
	 * @throws Exception
	 */
	private HashMap<String, ArrayList<String>> getTggKojiakNo(String kjnSvcKeiNo) throws Exception
	{
		// 工事案件番号でサービス契約＿工事案件を検索した件数
		int useKojiakNoCnt = 0;
		// サービス契約番号でサービス契約＿工事案件を検索した件数
		int useSvcKeiNoCnt = 1;
		
		// 
		HashMap<String, ArrayList<String>> retMap = new HashMap<String, ArrayList<String>>();
		
		// 工事案件番号でサービス契約＿工事案件を検索した結果を取得したリスト
		ArrayList<String> loopKojiak = new ArrayList<String>();
		// サービス契約番号でサービス契約＿工事案件を検索した結果を取得したリスト
		ArrayList<String> loopSvcKei = new ArrayList<String>();
		
		// 
		ArrayList<String> retList = new ArrayList<String>();
		
		// 一件目
		loopSvcKei.add(kjnSvcKeiNo);
		
		// ループ
		while(true)
		{
			
			// サービス契約番号で検索、工事案件番号を取得
			for (int i = 0 ; i < loopSvcKei.size() ; ++i)
			{
				
				// サービス契約番号で検索(メソッド側でnextはしない検索)
				this.findKU_T_SVKEI_KOJIAK_Nnx_svckeiNo(loopSvcKei.get(i));
				
				// 検索結果から工事案件番号のリストを取得
				retList = this.getListLoopResult(JBSbatKU_T_SVKEI_KOJIAK.KOJIAK_NO);
				
				if(null == retList)
				{
					return null;
				}
				
				// 戻ってきたリストの中にある重複していないものを追加する
				for (int cn = 0; cn < retList.size(); ++cn)
				{
					// 重複しないなら
					if (-1 == loopKojiak.indexOf(retList.get(cn)))
					{
						// 追加
						loopKojiak.add(retList.get(cn));
					}
				}
				
			}
			
			// 該当する工事案件番号の項目数比較
			if(useKojiakNoCnt == loopKojiak.size())
			{
				// ループを抜ける
				break;
			}
			
			// 工事案件番号検索件数更新
			useKojiakNoCnt = loopKojiak.size();
			
			
			
			// 工事案件番号で検索、サービス契約番号を取得
			for (int i = 0 ; i < loopKojiak.size() ; ++i)
			{
				
				// 工事案件番号で検索(メソッド側でnextはしない検索)
				this.findKU_T_SVKEI_KOJIAK_Nnx_kojiakNo(loopKojiak.get(i));
				
				// 検索結果からサービス契約番号のリストを取得
				retList = this.getListLoopResult(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_NO);
				
				if(null == retList)
				{
					return null;
				}
				
				// 戻ってきたリストの中にある重複していないものを追加する
				for (int ca = 0; ca < retList.size(); ++ca)
				{
					// 重複しないなら
					if (-1 == loopSvcKei.indexOf(retList.get(ca)))
					{
						// 追加
						loopSvcKei.add(retList.get(ca));
					}
				}
				
			}
			
			// 該当するサービス契約番号の項目数比較
			if(useSvcKeiNoCnt == loopSvcKei.size())
			{
				// ループを抜ける
				break;
			}
			
			// サービス契約番号検索件数更新
			useSvcKeiNoCnt = loopSvcKei.size();
			
		}
		
		if(0 == loopSvcKei.size()
				|| 0 == loopKojiak.size())
		{
			return null;
		}
		
		// 工事案件番号リストを返却マップに設定
		retMap.put(GET_MAP_KOJIAKLIST, loopKojiak);
		// サービス契約番号リストを返却マップに設定
		retMap.put(GET_MAP_SVCKEILIST, loopSvcKei);
		// リストが詰まったマップを返す
		return retMap;
	}
	
	
	/**
	 * チェック対象工事案件番号リストの工事案件番号を削除不可チェックにかける
	 * @param tgList チェック対象工事案件番号リスト
	 * @param svcKeiNoList サービス契約番号リスト
	 * @param hjSvcTgMap 法人サービス契約＿工事案件カウントリスト
	 * @throws Exception 
	 * @return notDelList 削除不可工事案件番号リスト
	 */
	private String checkDelTgg(
			ArrayList<JBSbatCommonDBInterface> tgList,
			ArrayList<String> svcKeiNoList,
			HashMap<String, String> hjSvcTgMap) throws Exception
	{
		
		// 最新基本工事
		String rcntKojiakNo = null;
		
		// 工事案件種別コード
		String kojiakSbtCd = null;
		
		// 更新対象工事案件番号
		String updTrgtKojiakNo = null;
		
		// 撤去工事リスト
		ArrayList<JBSbatCommonDBInterface> tkkyoKojiList = new ArrayList<JBSbatCommonDBInterface>();
		
		// 削除対象年月日
		String delTgDate = null;
		
		// 工事案件実施年月日
		String kojiakJissi = null;
		
		// 最大工事案件実施年月日
		String kojiakJissiMax = null;
		
		// @仕掛中チェック
		for (int i = 0 ; i < tgList.size() ; ++i)
		{
			if(false == this.checkKojiakStat(tgList.get(i).getString(JBSbatKU_T_KOJIAK.KOJIAK_STAT))
					|| false == this.checkMansKojiakStatCd(tgList.get(i).getString(JBSbatKU_T_KOJIAK.MANS_KOJIAK_STAT_CD)))
			{
				// 仕掛中チェックに一件でも引っかかれば
				// リスト全て削除不可とする
				return DELETE_FAIL;
			}
		}
		
		// A-1基本工事チェック
		for (int i = 0 ; i < tgList.size() ; ++i)
		{
			// 最新基本工事取得
			if(JKUStrConst.CD00882_RCNT_KIHON_KOJI.equals(tgList.get(i).getString(JBSbatKU_T_KOJIAK.RCNT_KIHON_KOJI_FLG)))
			{
				// 最新基本工事なら
				
				// 最新基本工事案件番号格納
				rcntKojiakNo = tgList.get(i).getString(JBSbatKU_T_KOJIAK.KOJIAK_NO);
			}
		}
		
		// A-2撤去工事チェック
		// 基本工事あり
		if(null != rcntKojiakNo)
		{
			
			// 撤去工事確認
			for (int i = 0 ; i < tgList.size() ; ++i)
			{
				// 更新対象工事案件番号取得
				updTrgtKojiakNo = tgList.get(i).getString(JBSbatKU_T_KOJIAK.UPD_TRGT_KOJIAK_NO);
				
				// (ｱ)基本工事の工事案件番号と更新対象工事案件番号が合致している場合
				if(true == rcntKojiakNo.equals(updTrgtKojiakNo))
				{
					
					// 合致したレコードの工事案件種別コード取得
					kojiakSbtCd = tgList.get(i).getString(JBSbatKU_T_KOJIAK.KOJIAK_SBT_CD);
					
					// (ｲ)撤去もしくは強制解約である場合
					if(true == JKUStrConst.CD00577_KYOSEI_DSL.equals(kojiakSbtCd)
								|| true == JKUStrConst.CD00577_TEKKYO_DSL.equals(kojiakSbtCd))
					{
						// 撤去工事あり、撤去工事リストに詰める
						tkkyoKojiList.add(tgList.get(i));
					}
					
				}
				
				
			}
			
			// 全件まわして撤去工事が一件もなかった
			if(0 == tkkyoKojiList.size())
			{
				// 撤去工事なしのため削除対象外として扱う
				return DELETE_FAIL;
			}
			
			
			
			// A-3課金後経過チェック
			for (int i = 0 ; i < tkkyoKojiList.size() ; ++i)
			{
				
				// 課金後経過チェック
				
				// 工事案件実施年月日がnull = 工事が実施されていない
				if(null == tkkyoKojiList.get(i).getString(JBSbatKU_T_KOJIAK.KOJIAK_JSSI_YMD))
				{
					// 削除対象外として扱う
					return DELETE_FAIL;
				}
				
				// 工事案件実施年月日最大値取得
				
				// null(初回)の場合設定する
				if(null == kojiakJissiMax)
				{
					kojiakJissiMax = tkkyoKojiList.get(i).getString(JBSbatKU_T_KOJIAK.KOJIAK_JSSI_YMD);
				}
				
				// 比較用int工事案件実施年月日最大値
				int kojiakJissiMaxInt = 0;
				// 比較用int工事案件実施年月日
				int kojiakJissiInt = 0;
				
				// 工事案件実施年月日取得
				kojiakJissi = tkkyoKojiList.get(i).getString(JBSbatKU_T_KOJIAK.KOJIAK_JSSI_YMD);
				
				// 最大値比較用にIntキャスト
				kojiakJissiMaxInt = Integer.parseInt(kojiakJissiMax);
				kojiakJissiInt    = Integer.parseInt(kojiakJissi);
				
				// 最大値チェック 工事案件実施年月日最大値 -  工事案件実施年月日
				// 差がマイナス値 = 工事案件実施年月日最大値 < 工事案件実施年月日
				if(kojiakJissiMaxInt - kojiakJissiInt < 0)
				{
					// 最大値を更新
					kojiakJissiMax = kojiakJissi;
				}
				
				// (ｴ)撤去工事が複数件存在する場合
				if(1 < tkkyoKojiList.size())
				{
					// 工事案件実施年月日が直近(最大値)のものを使用する
					kojiakJissi = kojiakJissiMax;
				}
				
			}
			
			// 削除対象年月日取得
			delTgDate = this.getDeleteTgDate(kuTKKJ_FIN_CHRG_PRD, super.opeDate);
			
			
			// 工事案件実施年月日 - 削除対象年月日
			int diff = Integer.parseInt(kojiakJissi) - Integer.parseInt(delTgDate);
			
			// 差がプラス(工事案件実施年月日 > 削除対象年月日)
			if(diff > 0)
			{
				// 削除対象外として扱う
				return DELETE_FAIL;
				
			}
			// (ｳ)撤去工事の工事案件実施年月日が「削除対象年月日」より以下の場合
			// B法人関連有無チェックへ
			
			// 差がマイナスもしくは同値(工事案件実施年月日 <= 削除対象年月日)
			
		}
		
		// 基本工事なしはそのまま法人関連チェックへ
		
		// B法人関連チェック
		for (int i = 0 ; i < tgList.size() ; ++i)
		{
			// 法人サービス契約＿工事案件カウントマップからキーの工事案件番号に対応するカウント数取得
			// B法人サービス契約＿工事案件が０件でない場合
			if(false == "0".equals(hjSvcTgMap.get(tgList.get(i).getString(JBSbatKU_T_KOJIAK.KOJIAK_NO))))
			{
				// 削除対象外として扱う
				return DELETE_FAIL;
			}
			
		}
		
		
		// C対象の工事案件に紐付くサービス契約番号が個人情報削除ワークに存在するかチェック
		if(false == this.checkDelJdgWk(svcKeiNoList))
		{
			return DELETE_FAIL;
		}
		else
		{
			// 何もしない
		}
		
		// 削除可
		return DELETE_PSG;
		
	}
	
	
	/**
	 * 検索結果から引数の項目をリストに設定して返す(重複なし)
	 * @param getItem 取得項目
	 * @return 検索結果リスト
	 * @throws Exception
	 */
	private ArrayList<String> getListLoopResult(String getItem) throws Exception
	{
		
		// 返却リスト
		ArrayList<String> retList = new ArrayList<String>();
		// 検索結果
		JBSbatCommonDBInterface ku0081Map = db_KU_T_SVKEI_KOJIAK.selectNext();
		
		// 検索結果が無い場合
		if (null == ku0081Map)
		{
			// 空で返す
			return null;
		}
		
		// 検索件数分ループ
		while (null != ku0081Map)
		{
			// 引数の項目を取得する(現在は工事案件番号かサービス契約番号)
			String setItem = ku0081Map.getString(getItem);
			
			// 重複がなければ
			if (-1 == retList.indexOf(setItem))
			{
				// リストに追加
				retList.add(setItem);
			}
			
			// 次レコードへ
			ku0081Map = db_KU_T_SVKEI_KOJIAK.selectNext();
		}
		
		return retList;
		
	}
	
	
	
	/**
	 * 法人サービス契約＿工事案件から引数の工事案件番号に紐付くデータ件数を返す
	 * @param kojiakNo 工事案件番号
	 * @return 工事案件番号に紐付くデータの件数を返す
	 * @throws Exception
	 */
	private String getHjSvcCnt(String kojiakNo) throws Exception
	{
		
		// 
		String resultCnt = null;
		
		// 法人サービス契約＿工事案件検索
		JBSbatCommonDBInterface ku0071Map = this.findKU_T_HOJINSVKEI_KJAK(kojiakNo);
		
		// 存在しなかった場合
		if(null == ku0071Map)
		{
			// カウントは0扱いとする
			return "0";
		}
		
		// SQL側でカウントを行っている、取得は"CNT"を用いれば取得できるよう記述している
		resultCnt = ku0071Map.getString(GET_HJ_SVC_CNT);
		
		return resultCnt;
		
	}
	
	
	/**
	 * 工事案件ステータス仕掛中チェック
	 * @param kojiakStat 工事案件ステータス
	 * @return 仕掛中であればfalseを返す
	 */
	private boolean checkKojiakStat(String kojiakStat)
	{
		
		// 受付済
		if(JKUStrConst.CD00474_UK_ZM.equals(kojiakStat))
		{
			return false;
		}
		// 依頼済
		else if(JKUStrConst.CD00474_IRI_ZM.equals(kojiakStat))
		{
			return false;
		}
		// 宅内調査完了済
		else if(JKUStrConst.CD00474_TAKNI_CHOSA_FIN_ZM.equals(kojiakStat))
		{
			return false;
		}
		// 工事会社決定済
		else if(JKUStrConst.CD00474_KOCOMP_KETTEI_ZM.equals(kojiakStat))
		{
			return false;
		}
		// 宅内機器予定登録済
		else if(JKUStrConst.CD00474_TAKNI_CHOSA_RSV_ZM.equals(kojiakStat))
		{
			return false;
		}
		// 仮鍵開発行依頼済
		else if(JKUStrConst.CD00474_KR_KAGI_KAIHAT_IRI_ZM.equals(kojiakStat))
		{
			return false;
		}
		// 現場作業完了済
		else if(JKUStrConst.CD00474_GEMBA_SAGYO_FIN_ZM.equals(kojiakStat))
		{
			return false;
		}
		
		return true;
	}
	
	
	/**
	 * マンション工事案件状態コード仕掛中チェック
	 * @param mansKojiakStatCd マンション工事案件状態コード
	 * @return 仕掛中であればfalseを返す
	 */
	private boolean checkMansKojiakStatCd(String mansKojiakStatCd)
	{
		
		// 受付済
		if(JKUStrConst.MANS_KOJIAK_STAT_CD_UK_ZM.equals(mansKojiakStatCd))
		{
			return false;
		}
		// 依頼済
		else if(JKUStrConst.MANS_KOJIAK_STAT_CD_IRI_ZM.equals(mansKojiakStatCd))
		{
			return false;
		}
		// 工事会社決定済
		else if(JKUStrConst.MANS_KOJIAK_STAT_CD_KOCOMP_KETTEI_ZM.equals(mansKojiakStatCd))
		{
			return false;
		}
		
		return true;
	}
	
	
	/**
	 * 削除対象年月日を取得する
	 * @param kakinkikan 課金後期間
	 * @param getDate 運用日付
	 * @return 削除対象年月日
	 * @throws Exception
	 */
	private String getDeleteTgDate(String kakinkikan, String getDate) throws Exception
	{
		
		int resultYear = 0;
		// 運用日の月日を取得
		int monthDay = Integer.parseInt(getDate.substring(4, 8));
		// 運用年
		int opeDateYear = Integer.parseInt(getDate.substring(0, 4));
		
		// 削除対象年の取得
		
		// 運用日（月日）>='0401'である場合
		if(monthDay >= DELETE_YEAR_JOKEN)
		{
			resultYear = opeDateYear - Integer.parseInt(kakinkikan);
		}
		else if(monthDay < DELETE_YEAR_JOKEN)
		{
			resultYear = opeDateYear - (Integer.parseInt(kakinkikan) + 1);
		}
		
		// 削除対象年 + 削除対象月日 = yyyyMMdd
		return String.valueOf(resultYear) + DELETE_MONTH_DAY;
		
	}
	
	
	
	/**
	 * 工事案件単位削除対象チェックを行う
	 * @param svcKeiNoList サービス契約番号リスト
	 * @return 削除可ならばtrue、削除不可ならばfalse
	 * @throws Exception
	 */
	private boolean checkDelJdgWk(ArrayList<String> svcKeiNoList) throws Exception
	{
		
		// C対象の工事案件に紐付くサービス契約番号が個人情報削除ワークに存在するかチェック
		for (int i = 0 ; i < svcKeiNoList.size() ; ++i)
		{
			
			// サービス契約番号が個人情報削除判定ワークに存在するかチェック
			JBSbatCommonDBInterface kk2611map = this.findKK_T_KJNIFDEL_JDG_WK(svcKeiNoList.get(i));
			
			if(null == kk2611map)
			{
				// 一件でもなければ削除対象外として扱う
				return false;
			}
			
			// 削除フラグが一件でも「削除可」でない場合
			if(false == DELETE_PSG.equals(kk2611map.getString(JBSbatKK_T_KJNIFDEL_JDG_WK.DEL_JDG_CD)))
			{
				// 一件でもなければ削除対象外として扱う
				return false;
			}
			
		}
		
		// サービス契約番号が個人情報削除判定ワークに「全て」存在し、かつ「全て」「削除可」であれば
		// 更新しない
		return true;
		
	}
	
	/**▲▲▲▲▲▲業務チームで作成したメソッドです 終了▲▲▲▲▲▲*/
	
}
