/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKOrsjgsCancelInfoRcvAdd
*	ソースファイル名	：JBSbatKKOrsjgsCancelInfoRcvAdd.java
*	作成者				：富士通
*	作成日				：2018年04月09日
*＜機能概要＞
*卸先事業者キャンセル情報受信登録部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v37.00.00   2018/04/09  FJ)岡   【ANK-3366-00-00】eo光設備卸対応
*   v39.00.00   2018/08/09  FJ)岡   【ANK-3478-00-00】eo光設備卸対応(サービス開始対応)
*   v39.00.01   2018/11/09  FJ)中原 【ST-2018-0000042】ネットの回線で取得した場合に、電話とテレビを出力しないように対応
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.common.JKKBatOneTimeLogWriter;
import eo.business.util.file.JBSbatKKIFE377;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatKK_T_ORSJGS_KEI_IDT;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKU_T_KOJIAK;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JKKStringUtil;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatCheckUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 946228
*/
public class JBSbatKKOrsjgsCancelInfoRcvAdd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(サービス契約)*/
	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";

	/** テーブル(卸先事業者契約異動通知)*/
	private static final String D_TBL_NAME_KK_T_ORSJGS_KEI_IDT = "KK_T_ORSJGS_KEI_IDT";
	
	/** テーブル(工事案件)*/
	private static final String D_TBL_NAME_KU_T_KOJIAK = "KU_T_KOJIAK";

	/** SQL定義キー(KK_SELECT_358)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_358 = "KK_SELECT_358";

	/** SQL定義キー(KK_SELECT_038)*/
	private static final String KK_T_KAISEN_TG_SVKEI_KK_SELECT_038 = "KK_SELECT_038";
	
	// ANK-3478-00-00 2018/08/10 ADD START
	/** SQL定義キー(KK_SELECT_039)*/
	private static final String KK_T_KAISEN_TG_SVKEI_KK_SELECT_039 = "KK_SELECT_039";
	// ANK-3478-00-00 2018/08/10 ADD END
	
	/** SQL定義キー(KK_SELECT_044)*/
	private static final String KU_T_KOJIAK_KK_SELECT_044 = "KK_SELECT_044";

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(回線対象サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KAISEN_TG_SVKEI = null;

	/** テーブルアクセスクラス(卸先事業者契約異動通知)*/
	private JBSbatSQLAccess db_KK_T_ORSJGS_KEI_IDT = null;
	
	/** テーブルアクセスクラス(工事案件)*/
	private JBSbatSQLAccess db_KU_T_KOJIAK = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** インターフェースID */
	private static final String IF_ID = "KKIFE377";

	/** サービス種別ネット */
	private static final String SVC_SBT_NET = "1";

	/** サービス種別電話 */
	private static final String SVC_SBT_TEL = "2";

	/** サービス種別テレビ */
	private static final String SVC_SBT_TV = "3";
	
	/** 最新基本工事 */
	private static final String RCNT_KIHON_KOJI = "1";

	/** ログ */
	protected JKKBatOneTimeLogWriter logWriter = null;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// 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);
		db_KK_T_ORSJGS_KEI_IDT = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_ORSJGS_KEI_IDT);
		db_KU_T_KOJIAK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KOJIAK);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap 入力電文
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception 文字列を取り出す際の型キャスト例外時、ファイル、ＤＢへの入出力エラー発生時等にスローされる例外
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		// 卸先事業者コード取得
		String orsjgsCd = JKKStringUtil.nullToBlank(inMap.getString("ORSJGS_CD"));

		// 格納先のファイルの一覧を取得
		String[] freeParam = commonItem.getFreeItem().split(JKKBatConst.S_PARAM_DELIM);
		String recvDirPath = freeParam[0];
		File recvDir = new File(inspection(freeParam[0]));
		String[] fileList = recvDir.list();

		boolean isFound = false;
		if (fileList != null && fileList.length > 0)
		{
			// ファイル数分処理を行う
			for (int i = 0; i < fileList.length; i++)
			{
				String inputFileName = fileList[i];
				// 処理対象の卸先事業者のIFファイルであるかを判定
				if (inputFileName.matches("^" + IF_ID + "_" + orsjgsCd + "_.*.csv$"))
				{
					isFound = true;
					super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1630AI, new String[]{inputFileName + "の受信登録処理"});
					int okCount = 0;

					// IFファイルの内容を取得
					List<String> lines = new ArrayList<String>();
					String inputFilePath = rnktPath(recvDirPath, inputFileName);
					JBSbatInputFileUtil inputFileUtil = null;
					try
					{
						// ファイルユーティリティのインスタンスを取得
						inputFileUtil = new JBSbatInputFileUtil(inputFilePath);
						String defFilePath = rnktPath(JBSbatAplConst.getAplConstValue("IND"), IF_ID + ".def");
						JBSbatDefFileUtil defFileUtil = new JBSbatDefFileUtil(defFilePath, inputFileUtil);
						inputFileUtil.createReader();
						while (inputFileUtil.ready())
						{
							lines.add(inputFileUtil.readLine());
						}

						// ファイル全体に対してのフォーマットチェック（※ログはチェックメソッドで出力）
						if (!checkFileFormat(lines, inputFileName))
						{
							super.commonItem.setErrFlg(true);
							// 卸先事業者契約異動通知登録はしない
							continue;
						}

						// データ部（１行目と最終行以外）をループ処理
						for (int j = 1; j < lines.size() - 1; j++)
						{
							int row = j + 1;
							JBSbatServiceInterfaceMap recordMap = null;
							recordMap = defFileUtil.lineToObject(lines.get(j), inputFileUtil, row);
							// 行単位のフォーマットチェック（※ログはチェックメソッドで出力）
							if (!singleCheck(recordMap, row))
							{
								super.commonItem.setErrFlg(true);
								// 卸先事業者契約異動通知登録はしない
								continue;
							}

							// チェック結果依存のDB設定項目を格納するマップ
							Map<String, String> registMap = new HashMap<String, String>();
							// ANK-3478-00-00 2018/08/10 ADD START
							// DB登録対象のサービス契約を格納するリスト
							List<Map<String, String>> svcKeiList = new ArrayList<Map<String, String>>();
							// ANK-3478-00-00 2018/08/10 ADD END
							// DB登録対象のサービス契約を格納するマップ
							Map<String, String> svcKeiMap = new HashMap<String, String>();
							svcKeiMap.put(JKKBatConst.SVC_KEI_NO, recordMap.getString(JBSbatKKIFE377.COMMON_KEY));
							// ANK-3478-00-00 2018/08/10 ADD START
							svcKeiList.add(svcKeiMap);
							// ANK-3478-00-00 2018/08/10 ADD END

							// 関連チェック（※ログはチェックメソッドで出力）
							if (relationCheck(svcKeiMap, recordMap, row, registMap))
							{
								// ANK-3478-00-00 2018/08/09 ADD START
								if(JKKBatConst.SVC_CD_NET.equals(svcKeiMap.get(JKKBatConst.SVC_CD)))
								{
									// 処理対象がネットの場合
									// 同一回線の電話、テレビを取得
									getSameKaisenSvcKei(svcKeiList, recordMap);
								}
								// ANK-3478-00-00 2018/08/09 ADD END
								
								// 工事案件番号取得
								// ANK-3478-00-00 2018/08/10 MOD START
								// addKojiakNo(svcKeiMap, recordMap);
								addKojiakNo(svcKeiList, recordMap);
								// ANK-3478-00-00 2018/08/10 MOD END
								
								okCount++;
							}
							else
							{
								super.commonItem.setErrFlg(true);
							}

							// ANK-3478-00-00 2018/08/10 DEL START
//							try
//							{
//								// 卸先事業者契約異動通知登録
//								insertOrsjgsKeiIdt(recordMap, svcKeiMap, registMap);
							// ANK-3478-00-00 2018/08/10 DEL END
							
							// ANK-3478-00-00 2018/08/10 ADD START
							for (int k = 0; k < svcKeiList.size(); k++)
							{
								try
								{
									// 卸先事業者契約異動通知登録
									insertOrsjgsKeiIdt(recordMap, svcKeiList.get(k), registMap);
								}
								catch (Exception ex)
								{
									String msgParam = "行数=" + String.valueOf(row) + " 卸先事業者コード="
											+ recordMap.getString(JBSbatKKIFE377.REC_KBN)
											+ " 共通キー=" + recordMap.getString(JBSbatKKIFE377.COMMON_KEY);
									super.logPrint.printErrMsg(JPCBatchMessageConstant.EKKB0510CE, ex,
											new String[]{"卸先事業者契約異動通知", msgParam});
									throw ex;
								}
							}
							// ANK-3478-00-00 2018/08/10 ADD END
							// ANK-3478-00-00 2018/08/10 DEL START
//							}
//							catch (Exception ex)
//							{
//								String msgParam = "行数=" + String.valueOf(row) + " 卸先事業者コード="
//										+ recordMap.getString(JBSbatKKIFE377.REC_KBN)
//										+ " 共通キー=" + recordMap.getString(JBSbatKKIFE377.COMMON_KEY);
//								super.logPrint.printErrMsg(JPCBatchMessageConstant.EKKB0510CE, ex,
//										new String[]{"卸先事業者契約異動通知", msgParam});
//								throw ex;
//							}
							// ANK-3478-00-00 2018/08/10 DEL END
						}
						super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1650AI,
								new String[]{inputFileName, String.valueOf(okCount)});
						super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1660AI,
								new String[]{inputFileName, String.valueOf(lines.size() - 2 - okCount)});
					}
					catch (IOException ex)
					{
						super.logPrint.printErrMsg(JPCBatchMessageConstant.EKKB1610CE, ex, new String[]{inputFilePath});
						throw ex;
					}
					finally
					{
						if (inputFileUtil != null)
						{
							inputFileUtil.close();
						}
					}

					super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1640AI, new String[]{inputFileName + "の受信登録処理"});
				}
			}
		}

		if (!isFound)
		{
			// 処理対象の卸先事業者のIFファイルが見つからなかった場合
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1540KW, new String[]{orsjgsCd});
			throw new JBSbatBusinessError();
		}

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_KAISEN_TG_SVKEI.close();
		db_KK_T_SVC_KEI.close();
		db_KK_T_ORSJGS_KEI_IDT.close();
		db_KU_T_KOJIAK.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * SQLKEY(KK_SELECT_358)で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_KK_SELECT_358(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_358);
	}

	/**
	 * SQLKEY(KK_SELECT_038)で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_KK_SELECT_038(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_KK_T_KAISEN_TG_SVKEI.selectBySqlDefine(paramList, KK_T_KAISEN_TG_SVKEI_KK_SELECT_038);
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	卸先事業者契約異動通知番号					ORSJGS_KEI_IDT_NO
	 *		 	卸先事業者連携対象サービス契約番号			ORSJGS_RNK_TG_SVC_KEI_NO
	 *		 	卸先事業者コード							ORSJGS_CD
	 *		 	卸先事業者連携識別コード					ORSJGS_RNKI_SKCD
	 *		 	サービス契約番号							SVC_KEI_NO
	 *		 	サービス種別								SVC_SBT
	 *		 	認証IDパスワード変更区分					NINSHO_ID_PWD_CHG_DIV
	 *		 	認証ID										NINSHO_ID
	 *		 	認証IDパスワード							NINSHO_ID_PWD
	 *		 	サービス開始年月日							SVC_STAYMD
	 *		 	課金開始年月日								CHRG_STAYMD
	 *		 	課金終了年月日								CHRG_ENDYMD
	 *		 	卸先事業者キャンセル理由コード				ORSJGS_CNCL_RSN_CD
	 *		 	卸先事業者キャンセル理由詳細コード			ORSJGS_CNCL_RSN_DTL_CD
	 *		 	卸先事業者キャンセル理由					ORSJGS_CNCL_RSN
	 *		 	工事案件番号								KOJIAK_NO
	 *		 	工事予定年月日								KOJI_RSV_YMD
	 *		 	卸先事業者連携工事予定区分					ORSJGS_RNKI_KOJI_RSV_DIV
	 *		 	卸先事業者解約種別コード					ORSJGS_DSL_SBT_CD
	 *		 	電話解約フラグ								TEL_DSL_FLG
	 *		 	撤去方法種別コード							TK_WAY_SBT_CD
	 *		 	解約問合せ客名								DSL_PROSCST_NM
	 *		 	撤去工事連絡先電話番号						TK_KOJI_RRKS_TLN
	 *		 	工事アポ対応者名							KOJI_APO_TAIOSHA_NM
	 *		 	工事立会者名								KOJI_TACHIAISHA_NM
	 *		 	工事会社連携情報メモ						KOCOMP_RNKI_INF_MEMO
	 *		 	送付先郵便番号								SOHUS_PCD
	 *		 	送付先住所情報								SOHUS_AD_INF
	 *		 	卸先事業者契約異動通知状態コード			ORSJGS_KEI_IDT_STAT_CD
	 *		 	卸先事業者契約異動発生年月日				ORSJGS_KEI_IDO_HASSEI_YMD
	 *		 	卸先事業者契約異動予約年月日				ORSJGS_KEI_IDO_RSV_YMD
	 *		 	卸先事業者契約異動処理年月日				ORSJGS_KEI_IDO_TRN_YMD
	 *		 	卸先事業者契約異動通知年月日時分秒			ORSJGS_KEI_IDT_DTM
	 *		 	卸先事業者契約異動通知結果コード			ORSJGS_KEI_IDT_RSLT_CD
	 *		 	卸先事業者契約異動通知NG理由				ORSJGS_KEI_IDT_NG_RSN
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_ORSJGS_KEI_IDT_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("ORSJGS_KEI_IDT_NO", setParam[0]);
		setMap.setValue("ORSJGS_RNK_TG_SVC_KEI_NO", setParam[1]);
		setMap.setValue("ORSJGS_CD", setParam[2]);
		setMap.setValue("ORSJGS_RNKI_SKCD", setParam[3]);
		setMap.setValue("SVC_KEI_NO", setParam[4]);
		setMap.setValue("SVC_SBT", setParam[5]);
		setMap.setValue("NINSHO_ID_PWD_CHG_DIV", setParam[6]);
		setMap.setValue("NINSHO_ID", setParam[7]);
		setMap.setValue("NINSHO_ID_PWD", setParam[8]);
		setMap.setValue("SVC_STAYMD", setParam[9]);
		setMap.setValue("CHRG_STAYMD", setParam[10]);
		setMap.setValue("CHRG_ENDYMD", setParam[11]);
		setMap.setValue("ORSJGS_CNCL_RSN_CD", setParam[12]);
		setMap.setValue("ORSJGS_CNCL_RSN_DTL_CD", setParam[13]);
		setMap.setValue("ORSJGS_CNCL_RSN", setParam[14]);
		setMap.setValue("KOJIAK_NO", setParam[15]);
		setMap.setValue("KOJI_RSV_YMD", setParam[16]);
		setMap.setValue("ORSJGS_RNKI_KOJI_RSV_DIV", setParam[17]);
		setMap.setValue("ORSJGS_DSL_SBT_CD", setParam[18]);
		setMap.setValue("TEL_DSL_FLG", setParam[19]);
		setMap.setValue("TK_WAY_SBT_CD", setParam[20]);
		setMap.setValue("DSL_PROSCST_NM", setParam[21]);
		setMap.setValue("TK_KOJI_RRKS_TLN", setParam[22]);
		setMap.setValue("KOJI_APO_TAIOSHA_NM", setParam[23]);
		setMap.setValue("KOJI_TACHIAISHA_NM", setParam[24]);
		setMap.setValue("KOCOMP_RNKI_INF_MEMO", setParam[25]);
		setMap.setValue("SOHUS_PCD", setParam[26]);
		setMap.setValue("SOHUS_AD_INF", setParam[27]);
		setMap.setValue("ORSJGS_KEI_IDT_STAT_CD", setParam[28]);
		setMap.setValue("ORSJGS_KEI_IDO_HASSEI_YMD", setParam[29]);
		setMap.setValue("ORSJGS_KEI_IDO_RSV_YMD", setParam[30]);
		setMap.setValue("ORSJGS_KEI_IDO_TRN_YMD", setParam[31]);
		setMap.setValue("ORSJGS_KEI_IDT_DTM", setParam[32]);
		setMap.setValue("ORSJGS_KEI_IDT_RSLT_CD", setParam[33]);
		setMap.setValue("ORSJGS_KEI_IDT_NG_RSN", setParam[34]);
	
		// DBアクセスを実行します
		db_KK_T_ORSJGS_KEI_IDT.insertByPrimaryKeys(setMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * SQLKEY(KK_SELECT_044)で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_KOJIAK_KK_SELECT_044(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_KU_T_KOJIAK.selectBySqlDefine(paramList, KU_T_KOJIAK_KK_SELECT_044);
	}

	/**
	 * パス文字列を連結します。<br>
	 * <br>
	 * @param path1 パス文字列
	 * @param path2 パス文字列
	 * @return 連結したパス文字列
	 */
	private String rnktPath(String path1, String path2)
	{
		String pathDlmt = "/";
		if (path1.indexOf("\\") > -1 || path2.indexOf("\\") > -1)
		{
			pathDlmt = "\\";
		}
		if (!path1.endsWith(pathDlmt))
		{
			return path1 + pathDlmt + path2;
		}
		return path1 + path2;
	}	

	/**
	 * 環境変数ディレクトリ検査用メソッドです。（ファイルインジェクション対策）<br>
	 * 半角アルファベットと数字のみで構成されていることを検査します。<br>
	 * <br>
	 * @param argDirNm 検査する文字列
	 * @return String 検査した文字列
	 * @throws IllegalArgumentException 不正なパスが指定された際の例外
	 */
	private String inspection(String argDirNm) throws IllegalArgumentException
	{
		
		if (argDirNm.matches("\\p{InBasicLatin}+"))
		{
			return argDirNm;
		}
		throw new IllegalArgumentException(argDirNm); // 誤ったファイル名を指定
	}

	/**
	 * ファイル全体に対してのフォーマットチェックを行います。<br>
	 * <br>
	 * @param lines 各行の文字列を格納したリスト
	 * @param inputFileName 入力ファイル名
	 * @return チェック結果
	 */
	private boolean checkFileFormat(List<String> lines, String inputFileName)
	{
		boolean isValidHeader = false;
		boolean isValidTrailer = false;
		boolean isValidCount = false;
		boolean isValidAll = false;

		String readCount = "0";

		if (lines != null && lines.size() > 0)
		{
			if (lines.get(0) != null)
			{
				// ヘッダのフォーマットチェック
				isValidHeader = lines.get(0).matches("^\"00\"$");
			}
			if (lines.get(lines.size() - 1) != null)
			{
				// トレーラのフォーマットチェック
				isValidTrailer = lines.get(lines.size() - 1).matches("^\"99\",\"\\d{1,10}\"$");
			}
			if (isValidTrailer)
			{
				// ヘッダとトレーラのチェック結果が正常の場合、データ部の件数をチェック
				String trailer = JKKStringUtil.nullToBlank(lines.get(lines.size() - 1));
				String trailerCount = trailer.replaceFirst("^\"99\",\"(\\d{1,10})\"$", "$1");
				// 期待する件数
				int expectedCount = Integer.valueOf(trailerCount);
				// 実際に渡された件数（データ部の件数）
				int actualCount = 0;
				if (isValidHeader)
				{
					actualCount = lines.size() - 2;
				}
				else
				{
					actualCount = lines.size() - 1;
				}
				isValidCount = (actualCount == expectedCount);
				if (isValidCount)
				{
					readCount = trailerCount;
				}
			}
		}

		if (!isValidHeader)
		{
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1550KW, new String[]{inputFileName});
		}
		if (!isValidTrailer)
		{
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1560KW, new String[]{inputFileName});
		}
		if (isValidTrailer && !isValidCount)
		{
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0550AW, new String[]{inputFileName});
		}
		if (isValidTrailer && isValidCount)
		{
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0750AI, new String[]{inputFileName, readCount});
		}
		isValidAll = isValidHeader && isValidTrailer && isValidCount;
		if (!isValidAll)
		{
			if (isValidTrailer && isValidCount)
			{
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1650AI, new String[]{inputFileName, "0"});
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1660AI, new String[]{inputFileName, readCount});
			}
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1640AI, new String[]{inputFileName + "の受信登録処理"});
		}

		return isValidAll;
	}

	/**
	 * 単項目エラー時のメッセージパラメータを返却します。<br>
	 * <br>
	 * @param recordMap 入力データを格納されたMap
	 * @return メッセージパラメータ
	 * @throws Exception 文字列を取り出す際の型キャスト時の例外
	 */
	private String getMsgParam(JBSbatServiceInterfaceMap recordMap) throws Exception
	{
		String recKbn = recordMap.getString("REC_KBN");
		String commonKey = recordMap.getString("COMMON_KEY");

		StringBuffer sb = new StringBuffer();
		sb.append("卸先事業者コード=");
		sb.append(recKbn);
		sb.append("、");
		sb.append("共通キー=");
		sb.append(commonKey);

		return sb.toString();
	}
	
	/**
	 * 項目の基本的なチェックを行います。<br>
	 * <br>
	 * @param recordMap 入力データを格納されたMap
	 * @param itemKey 項目値を取得するためのキー
	 * @param checkNull 必須チェックの有無
	 * @param lengthSta 開始項目長
	 * @param lengthEnd 終了項目長
	 * @param type 項目の属性
	 * @param row 行数（エラーログの出力に使用）
	 * @return チェック結果
	 * @throws Exception 文字列を取り出す際の型キャスト時の例外
	 */
	private boolean singleCheckBase(JBSbatServiceInterfaceMap recordMap, String itemKey, boolean checkNull, int lengthSta, int lengthEnd, String type,
			int row) throws Exception
	{
		// 項目値の取得
		String strValue = recordMap.getString(itemKey);

		if (checkNull)
		{
			// 必須チェック
			if(JKKStringUtil.isNullBlank(strValue))
			{
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1570TW, new String[]{String.valueOf(row), getMsgParam(recordMap)});
				return false;
			}
		}
		//必須ではなく、空文字以外はチェックを行う
		if (!(!checkNull && JKKStringUtil.isNullBlank(strValue)))
		{
			// 桁数チェック
			if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", String.valueOf(lengthSta), String.valueOf(lengthEnd)}))
			{
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1580TW, new String[]{String.valueOf(row), getMsgParam(recordMap)});
				return false;
			}
		}

		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{type}))
		{
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1590TW, new String[]{String.valueOf(row), getMsgParam(recordMap)});
			return false;
		}

		return true;
	}

	/**
	 * 単項目チェックを行います。<br>
	 * <br>
	 * @param recordMap 入力データを格納されたMap
	 * @param row 行数（エラーログの出力に使用）
	 * @return チェック結果
	 * @throws Exception 文字列を取り出す際の型キャスト時の例外（下位メソッド）
	 */
	private boolean singleCheck(JBSbatServiceInterfaceMap recordMap, int row) throws Exception
	{
		// 卸先事業者コードの単項目チェック
		boolean isValidRecKbn = singleCheckBase(recordMap, "REC_KBN", true, 2, 2, "hannkakuesuuji1", row);
		// 共通キーの単項目チェック
		boolean isValidCommonKey = singleCheckBase(recordMap, "COMMON_KEY", true, 10, 10, "hannkakuesuuji1", row);
		// キャンセル受付日の単項目チェック
		boolean isValidCnclUkYmd = singleCheckBase(recordMap, "CNCL_UKYMD", true, 8, 8, "year_month_day1", row);
		// キャンセル理由コードの単項目チェック
		boolean isValidCnclRsnCd = singleCheckBase(recordMap, "CNCL_RSN_CD", false, 2, 2, "hannkakuesuuji1", row);
		// キャンセル理由詳細コードの単項目チェック
		boolean isValidCnclRsnDtlCd = singleCheckBase(recordMap, "CNCL_RSN_DTL_CD", false, 2, 3, "hannkakuesuuji1", row);
		// キャンセル理由の単項目チェック
		boolean isValidCnclRsn = singleCheckBase(recordMap, "CNCL_RSN", false, 1, 100, "zenkaku1", row);

		return isValidRecKbn && isValidCommonKey && isValidCnclUkYmd && isValidCnclRsnCd && isValidCnclRsnDtlCd && isValidCnclRsn;
	}

	/**
	 * 関連チェックを行います。<br>
	 * <br>
	 * @param svcKeiMap 登録対象のサービス契約を格納するマップ
	 * @param recordMap 入力データを格納されたMap
	 * @param row 行数（エラーログの出力に使用）
	 * @param registMap チェック結果に依存するDB登録項目を設定するマップ
	 * @return チェック結果
	 * @throws Exception 文字列を取り出す際の型キャスト時、DBアクセス時の例外
	 */
	private boolean relationCheck(Map<String, String> svcKeiMap, JBSbatServiceInterfaceMap recordMap,
			int row, Map<String, String> registMap) throws Exception
	{
		// 卸先事業者コード
		String recKbn = recordMap.getString("REC_KBN");
		// 共通キー
		String commonKey = recordMap.getString("COMMON_KEY");

		// SQLパラメータを設定
		Object[] param = new Object[]{
				super.opeDate,
				super.opeDate,
				commonKey,
		};

		executeKK_T_SVC_KEI_KK_SELECT_358(param);

		// 実行結果を取得
		JBSbatCommonDBInterface dbMap = db_KK_T_SVC_KEI.selectNext();

		// サービス契約情報存在チェック
		if (dbMap == null)
		{
			// サービス契約情報存在チェックエラーの場合
			// サービスコード
			svcKeiMap.put(JKKBatConst.SVC_CD, JKKBatConst.SVC_CD_NET);
			// 卸先事業者連携対象サービス契約番号
			svcKeiMap.put(JBSbatKK_T_ORSJGS_KEI_IDT.ORSJGS_RNK_TG_SVC_KEI_NO, recordMap.getString(JBSbatKKIFE377.COMMON_KEY));
			// 卸先事業者契約異動処理年月日
			registMap.put("ORSJGS_KEI_IDO_TRN_YMD", super.opeDate);
			// 卸先事業者契約異動通知結果コード
			registMap.put("ORSJGS_KEI_IDT_RSLT_CD", "2");
			// 卸先事業者契約異動通知NG理由
			registMap.put("ORSJGS_KEI_IDT_NG_RSN", "契約者情報が存在しませんでした。");
			String msgParam = "サービス契約に共通キー=" + commonKey;
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1600KW, new String[]{msgParam});

			return false;
		}
		else if(dbMap != null) 
		{
			// サービス契約情報存在チェックエラー以外の場合
			String dbMapSvcCd = dbMap.getString(JBSbatKK_T_SVC_KEI.SVC_CD);
			
			if (JKKBatConst.SVC_CD_NET.equals(dbMapSvcCd))
			{
				// サービスコードがネットの場合
				// サービスコード
				svcKeiMap.put(JKKBatConst.SVC_CD, dbMapSvcCd);
				// 卸先事業者連携対象サービス契約番号
				svcKeiMap.put(JBSbatKK_T_ORSJGS_KEI_IDT.ORSJGS_RNK_TG_SVC_KEI_NO, recordMap.getString(JBSbatKKIFE377.COMMON_KEY));
				
			}
			else if(JKKBatConst.SVC_CD_TEL.equals(dbMapSvcCd) || JKKBatConst.SVC_CD_TV.equals(dbMapSvcCd))
			{
				// サービスコードが電話またはテレビの場合
				// サービスコード
				svcKeiMap.put(JKKBatConst.SVC_CD, dbMapSvcCd);
				// 卸先事業者連携対象サービス契約番号
				addSvcKei(svcKeiMap, recordMap);
				if(svcKeiMap.get(JBSbatKK_T_ORSJGS_KEI_IDT.ORSJGS_RNK_TG_SVC_KEI_NO) == null)
				{
					// 同一回線内にネットが存在しない場合
					// 卸先事業者連携対象サービス契約番号
					svcKeiMap.put(JBSbatKK_T_ORSJGS_KEI_IDT.ORSJGS_RNK_TG_SVC_KEI_NO, recordMap.getString(JBSbatKKIFE377.COMMON_KEY));
					// 卸先事業者契約異動処理年月日
					registMap.put("ORSJGS_KEI_IDO_TRN_YMD", super.opeDate);
					// 卸先事業者契約異動通知結果コード
					registMap.put("ORSJGS_KEI_IDT_RSLT_CD", "2");
					// 卸先事業者契約異動通知NG理由
					registMap.put("ORSJGS_KEI_IDT_NG_RSN", "契約者情報が存在しませんでした。");
					String msgParam = "サービス契約に共通キー=" + commonKey;
					super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1600KW, new String[]{msgParam});

					return false;
				}
			}
			else
			{
				// サービスコードがネット・電話・テレビ以外の場合
				// サービスコード
				svcKeiMap.put(JKKBatConst.SVC_CD, JKKBatConst.SVC_CD_NET);
				// 卸先事業者連携対象サービス契約番号
				svcKeiMap.put(JBSbatKK_T_ORSJGS_KEI_IDT.ORSJGS_RNK_TG_SVC_KEI_NO, recordMap.getString(JBSbatKKIFE377.COMMON_KEY));
				// 卸先事業者契約異動処理年月日
				registMap.put("ORSJGS_KEI_IDO_TRN_YMD", super.opeDate);
				// 卸先事業者契約異動通知結果コード
				registMap.put("ORSJGS_KEI_IDT_RSLT_CD", "2");
				// 卸先事業者契約異動通知NG理由
				registMap.put("ORSJGS_KEI_IDT_NG_RSN", "契約者情報が存在しませんでした。");
				String msgParam = "サービス契約に共通キー=" + commonKey;
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1600KW, new String[]{msgParam});

				return false;
			}
			
			// 卸先事業者存在チェック
			if(!recKbn.equals(dbMap.getString(JBSbatCK_T_CUST.ORSJGS_CD)))
			{
				// 卸先事業者存在チェックエラーの場合
				// 卸先事業者契約異動処理年月日
				registMap.put("ORSJGS_KEI_IDO_TRN_YMD", super.opeDate);
				// 卸先事業者契約異動通知結果コード
				registMap.put("ORSJGS_KEI_IDT_RSLT_CD", "2");
				// 卸先事業者契約異動通知NG理由
				registMap.put("ORSJGS_KEI_IDT_NG_RSN", "契約者情報が存在しませんでした。");
				String msgParam = "サービス契約に共通キー=" + commonKey;
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1600KW, new String[]{msgParam});
			
				return false;
			}
			else
			{
				// 関連チェック正常の場合
				// 卸先事業者契約異動処理年月日
				registMap.put("ORSJGS_KEI_IDO_TRN_YMD", "");
				// 卸先事業者契約異動通知結果コード
				registMap.put("ORSJGS_KEI_IDT_RSLT_CD", "");
				// 卸先事業者契約異動通知NG理由
				registMap.put("ORSJGS_KEI_IDT_NG_RSN", "");
			}
		}

		return true;
	}

	/**
	 * 同一回線内のネットのサービス契約番号を抽出する。<br>
	 * <br>
	 * @param svcKeiMap 登録対象のサービス契約を格納するマップ
	 * @param recordMap 入力データを格納されたMap
	 * @throws Exception 文字列を取り出す際の型キャスト時、DBアクセス時の例外
	 */
	private void addSvcKei(Map<String, String> svcKeiMap, JBSbatServiceInterfaceMap recordMap) throws Exception
	{
		// SQLパラメータを設定
		Object[] param = new Object[]{
				recordMap.getString(JBSbatKKIFE377.COMMON_KEY), // 入力ファイル．共通キー
				super.opeDate,
				super.opeDate,
				super.opeDate,
		};
		executeKK_T_KAISEN_TG_SVKEI_KK_SELECT_038(param);

		// 実行結果を取得
		JBSbatCommonDBInterface dbMap = db_KK_T_KAISEN_TG_SVKEI.selectNext();
		
		if(dbMap != null)
		{
			svcKeiMap.put(JBSbatKK_T_ORSJGS_KEI_IDT.ORSJGS_RNK_TG_SVC_KEI_NO, dbMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));
		}

	}
	
	/**
	 * 工事案件スキーマからキャンセル情報連携(卸先事業者)ファイル.共通キーに紐づく、データを抽出する。<br>
	 * <br>
	 * @param svcKeiMap 登録対象の工事案件番号を格納するリスト
	 * @param recordMap 入力データを格納されたMap
	 * @throws Exception 文字列を取り出す際の型キャスト時、DBアクセス時の例外
	 */
	// ANK-3478-00-00 2018/08/10 MOD START
	// private void addKojiakNo(Map<String, String> svcKeiMap, JBSbatServiceInterfaceMap recordMap) throws Exception
	private void addKojiakNo(List<Map<String, String>> svcKeiList, JBSbatServiceInterfaceMap recordMap) throws Exception
	// ANK-3478-00-00 2018/08/10 MOD END
	{
		// ANK-3478-00-00 2018/08/10 ADD START
		for (int i = 0; i < svcKeiList.size(); i++)
		{
		// ANK-3478-00-00 2018/08/10 ADD END
			// SQLパラメータを設定
			Object[] param = new Object[]{
					super.opeDate,
					super.opeDate,
					super.opeDate,
					// ANK-3478-00-00 2018/08/10 MOD START
					// recordMap.getString(JBSbatKKIFE377.COMMON_KEY), // 入力ファイル．共通キー
					svcKeiList.get(i).get(JKKBatConst.SVC_KEI_NO), // サービス契約番号
					// ANK-3478-00-00 2018/08/10 MOD END
			};
			executeKU_T_KOJIAK_KK_SELECT_044(param);
	
			// 実行結果を取得
			JBSbatCommonDBInterface dbMap = db_KU_T_KOJIAK.selectNext();
			
			if(dbMap == null)
			{
				// 受付済の場合
				// ANK-3478-00-00 2018/08/10 MOD START
				// svcKeiMap.put(JBSbatKK_T_ORSJGS_KEI_IDT.KOJIAK_NO, "");
				svcKeiList.get(i).put(JBSbatKK_T_ORSJGS_KEI_IDT.KOJIAK_NO, "");
				// ANK-3478-00-00 2018/08/10 MOD END
			}
			else if(dbMap != null 
					&& (JBSbatKKConst.SVC_KEI_STAT_SHOSA_ZM.equals(dbMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT)) 
							|| JBSbatKKConst.SVC_KEI_STAT_CNC_ZM.equals(dbMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT))))
			{
				// 照査済または締結済の場合
				// ANK-3478-00-00 2018/08/10 MOD START
				// svcKeiMap.put(JBSbatKK_T_ORSJGS_KEI_IDT.KOJIAK_NO, dbMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO));
				svcKeiList.get(i).put(JBSbatKK_T_ORSJGS_KEI_IDT.KOJIAK_NO, dbMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO));
				// ANK-3478-00-00 2018/08/10 MOD END
			}
			else
			{
				// サービス提供中以上（解約済・キャンセル済含む）の場合
				// ANK-3478-00-00 2018/08/10 MOD START
				// svcKeiMap.put(JBSbatKK_T_ORSJGS_KEI_IDT.KOJIAK_NO, dbMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO));
				svcKeiList.get(i).put(JBSbatKK_T_ORSJGS_KEI_IDT.KOJIAK_NO, dbMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO));
				// ANK-3478-00-00 2018/08/10 MOD END
				// サービス提供中以上（解約済・キャンセル済含まず）の場合、最新基本工事を取得
				while(dbMap != null)
				{
					if(RCNT_KIHON_KOJI.equals(dbMap.getString(JBSbatKU_T_KOJIAK.RCNT_KIHON_KOJI_FLG)))
					{
						// 最新基本工事の場合、処理を抜ける
						// ANK-3478-00-00 2018/08/10 MOD START
						// svcKeiMap.put(JBSbatKK_T_ORSJGS_KEI_IDT.KOJIAK_NO, dbMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO));
						svcKeiList.get(i).put(JBSbatKK_T_ORSJGS_KEI_IDT.KOJIAK_NO, dbMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_NO));
						// ANK-3478-00-00 2018/08/10 MOD END
						break;
					}
					dbMap = db_KU_T_KOJIAK.selectNext();
				}
			}
		// ANK-3478-00-00 2018/08/10 ADD START
		}
		// ANK-3478-00-00 2018/08/10 ADD END

	}

	/**
	 * 卸先事業者契約異動通知に登録します。<br>
	 * <br>
	 * @param inMap 入力電文
	 * @param svcKeiMap サービス契約情報を格納したマップ
	 * @param registItemMap チェック結果に依存する項目を設定したマップ
	 * @throws Exception 文字列を取り出す際の型キャスト時、DBアクセス時の例外
	 */
	private void insertOrsjgsKeiIdt(JBSbatServiceInterfaceMap inMap, Map<String, String> svcKeiMap,
			Map<String, String> registItemMap) throws Exception
	{
		String svcCd = svcKeiMap.get(JKKBatConst.SVC_CD);
		String svcSbt = "";
		if (JKKBatConst.SVC_CD_NET.equals(svcCd))
		{
			svcSbt = SVC_SBT_NET;
		}
		else if (JKKBatConst.SVC_CD_TEL.equals(svcCd))
		{
			svcSbt = SVC_SBT_TEL;
		}
		else if (JKKBatConst.SVC_CD_TV.equals(svcCd))
		{
			svcSbt = SVC_SBT_TV;
		}
		
		// 登録項目
		String[] setParam = new String[]{
				JKKBatCommon.getFormatedNextSeq(commonItem, "SEQ_ORSJGS_KEI_IDT_NO", "", 15),		// 卸先事業者契約異動通知番号
				svcKeiMap.get(JBSbatKK_T_ORSJGS_KEI_IDT.ORSJGS_RNK_TG_SVC_KEI_NO),					// 卸先事業者連携対象サービス契約番号
				inMap.getString(JBSbatKKIFE377.REC_KBN),											// 卸先事業者コード
				"05",																				// 卸先事業者連携識別コード
				// ANK-3478-00-00 2018/08/10 MOD START
				// inMap.getString(JBSbatKKIFE377.COMMON_KEY),											// サービス契約番号
				svcKeiMap.get(JKKBatConst.SVC_KEI_NO),												// サービス契約番号
				// ANK-3478-00-00 2018/08/10 MOD END
				svcSbt,																				// サービス種別
				"",																					// 認証IDパスワード変更区分
				"",																					// 認証ID
				"",																					// 認証IDパスワード
				"",																					// サービス開始年月日
				"",																					// 課金開始年月日
				"",																					// 課金終了年月日
				inMap.getString(JBSbatKKIFE377.CNCL_RSN_CD),										// 卸先事業者キャンセル理由コード
				inMap.getString(JBSbatKKIFE377.CNCL_RSN_DTL_CD),									// 卸先事業者キャンセル理由詳細コード
				inMap.getString(JBSbatKKIFE377.CNCL_RSN),											// 卸先事業者キャンセル理由
				svcKeiMap.get(JBSbatKK_T_ORSJGS_KEI_IDT.KOJIAK_NO),									// 工事案件番号
				"",																					// 工事予定年月日
				"",																					// 卸先事業者連携工事予定区分
				"",																					// 卸先事業者解約種別コード
				"",																					// 電話解約フラグ
				"",																					// 撤去方法種別コード
				"",																					// 解約問合せ客名
				"",																					// 撤去工事連絡先電話番号
				"",																					// 工事アポ対応者名
				"",																					// 工事立会者名
				"",																					// 工事会社連携情報メモ
				"",																					// 送付先郵便番号
				"",																					// 送付先住所情報
				"0",																				// 卸先事業者契約異動通知状態コード
				inMap.getString(JBSbatKKIFE377.CNCL_UKYMD),											// 卸先事業者契約異動発生年月日
				"",																					// 卸先事業者契約異動予定年月日
				registItemMap.get("ORSJGS_KEI_IDO_TRN_YMD"),										// 卸先事業者契約異動処理年月日
				"",																					// 卸先事業者契約異動通知年月日時分秒
				registItemMap.get("ORSJGS_KEI_IDT_RSLT_CD"),										// 卸先事業者契約異動通知結果コード
				registItemMap.get("ORSJGS_KEI_IDT_NG_RSN"),											// 卸先事業者契約異動通知NG理由
		};
		executeKK_T_ORSJGS_KEI_IDT_PKINSERT(setParam);
	}
	
	// ANK-3478-00-00 2018/08/10 ADD START
	/**
	 * 同一回線の処理対象となるサービス契約を取得します。<br>
	 * <br>
	 * @param svcKeiList 登録対象のサービス契約（ネット）を格納したリスト
	 * @param recordMap 入力データを格納されたMap
	 * @throws Exception 文字列を取り出す際の型キャスト時、DBアクセス時の例外
	 */
	private void getSameKaisenSvcKei(List<Map<String, String>> svcKeiList, JBSbatServiceInterfaceMap recordMap) throws Exception
	{
		// 電話、テレビのサービス契約番号を取得
		// SQLパラメータを設定
		Object[] param = new Object[]{
				svcKeiList.get(0).get(JKKBatConst.SVC_KEI_NO), // IFファイルのサービス契約番号（ネット）
				super.opeDate,
				super.opeDate,
				super.opeDate,
				super.opeDate,
				super.opeDate,
		};
		executeKK_T_KAISEN_TG_SVKEI_KK_SELECT_039(param);

		// 実行結果を取得
		JBSbatCommonDBInterface dbMap = db_KK_T_KAISEN_TG_SVKEI.selectNext();

		while (dbMap != null)
		{
			
			// ST-2018-0000042 2018/08/10 ADD START
			// 入力パラメータの共通キーがネットの場合、回線内の電話とテレビが解約もしくはキャンセルでは出力しない
			if ( !(JBSbatKKConst.SVC_KEI_STAT_DLS_ZM.equals(dbMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT)) ||
					JBSbatKKConst.SVC_KEI_STAT_CNCL_ZM.equals(dbMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT)) ) )
			{
			// ST-2018-0000042 2018/08/10 ADD END
				Map<String, String> svcKeiMap = new HashMap<String, String>();
				// サービス契約番号
				svcKeiMap.put(JKKBatConst.SVC_KEI_NO, dbMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));
				// サービスコード
				svcKeiMap.put(JKKBatConst.SVC_CD, dbMap.getString(JBSbatKK_T_SVC_KEI.SVC_CD));
				// 卸先事業者連携対象サービス契約番号
				svcKeiMap.put(JBSbatKK_T_ORSJGS_KEI_IDT.ORSJGS_RNK_TG_SVC_KEI_NO, svcKeiList.get(0).get(JKKBatConst.SVC_KEI_NO));
				svcKeiList.add(svcKeiMap);
			// ST-2018-0000042 2018/08/10 ADD START
			}
			// ST-2018-0000042 2018/08/10 ADD END
				
			dbMap = db_KK_T_KAISEN_TG_SVKEI.selectNext();
		}
	}
	
	/**
	 * SQLKEY(KK_SELECT_039)で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_KK_SELECT_039(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());
		paramList.setValue(param[5].toString());

		// DBアクセスを実行します
		db_KK_T_KAISEN_TG_SVKEI.selectBySqlDefine(paramList, KK_T_KAISEN_TG_SVKEI_KK_SELECT_039);
	}
	// ANK-3478-00-00 2018/08/10 ADD END
}
