/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKPcSetupTrkmRsltSaksei
*	ソースファイル名	：JBSbatKKPcSetupTrkmRsltSaksei.java
*	作成者				：富士通　
*	作成日				：2011年10月06日
*＜機能概要＞
*　ＰＣセットアップ取込結果リスト作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/10/06	FAP）庭山	新規作成
*	v2.00.00	2012/04/04  FJ)倉上 	【ST2-2012-0000624】障害対応。
*	v2.01.00	2012/05/30  FJ)倉上 	【ST2-2012-0000990】障害対応。
*	v2.02.00	2012/06/02  FJ)倉上 	【ST1-2012-0000061】障害対応。
*	v3.00.00	2012/06/13  FJ)中作 	【ANK-2012-0000159】対応。
*	v3.01.00	2012/07/23	FJ)倉上		【ST2-2012-0001404】障害対応。
*	v3.02.00	2012/08/19  FJ)中作 	【ST2-2012-0001560】対応。
*	v3.03.00	2012/10/12  FJ)藤本 	【ST1-2012-0000650】障害対応。
*	v3.04.00	2012/10/19  FJ)藤本 	【ST1-2012-0000789】障害対応。
*	v4.00.00	2012/12/14  FJ)中作 	【SEP-0023-00-00】不足分一時金への対応。
*	v4.01.00	2013/03/20  FJ)神田 	【IT1-2013-0000498】障害対応。
*	v4.02.00	2013/03/25  FJ)柳	 	【ST4-2013-0000360】障害対応。
*	v5.00.00	2013/05/01  FJ)岡田	 	【IT1-2013-0001109】水平展開No.38対応。
*	v5.00.00	2013/09/03  FJ)団		【OM-2013-0001469】障害対応
*	v5.00.01	2013/10/07  FJ)団		【OM-2013-0002914】障害対応
*	v5.00.02	2013/11/07  FJ)団		【OM-2013-0004049】障害対応
**********************************************************************/
package eo.business.service;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatKKIFE019;
import eo.business.util.file.JBSbatKKIFE081;
import eo.business.util.file.JBSbatKKIFM128;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatKK_M_PRC_GRP;
import eo.business.util.table.JBSbatKK_M_VSCP_JSTG_PRGP;
import eo.business.util.table.JBSbatKK_M_VSIT_SPRT_COMP;
import eo.business.util.table.JBSbatKK_T_SUPPORT;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JPCFomatString;
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;
import eo.framework.util.JBSbatDateUtil;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKPcSetupTrkmRsltSaksei extends JBSbatBusinessService
{
	/**
	 * 契約ステータス（受付済）
	 */
	private static final String KEI_STAT_UK = "010";

	/**
	 * 契約ステータス（照査済）
	 */
	private static final String KEI_STAT_SHOSA = "020";

	/**
	 * 契約ステータス（締結済）
	 */
	private static final String KEI_STAT_CNC = "030";

	/**
	 * 契約ステータス（サービス提供中）
	 */
	private static final String KEI_STAT_TK = "100";

	/**
	 * 契約ステータス（サービス中断中）
	 */
	private static final String KEI_STAT_STP = "210";

	/**
	 * 契約ステータス（解約済）
	 */
	private static final String KEI_STAT_DSL = "910";

	/**
	 * サポートステータス（キャンセル）
	 */
	private static final String SUPPORT_STAT = "920";

	/**
	 * 処理結果コード（OK）
	 */
	private static final String TRN_RSLT_CD_OK = "0";

	/**
	 * 処理結果コード（NG）
	 */
	private static final String TRN_RSLT_CD_NG = "1";

	/**
	 * エラーコード（00）
	 */
	private static final String ERROR_CD_00 = "00";

	/**
	 * エラーコード（01）
	 */
	private static final String ERROR_CD_01 = "01";

	/**
	 * エラーコード（02）
	 */
	private static final String ERROR_CD_02 = "02";

	/**
	 * エラーコード（03）
	 */
	private static final String ERROR_CD_03 = "03";

	/**
	 * エラーコード（04）
	 */
	private static final String ERROR_CD_04 = "04";

	/**
	 * エラーコード（05）
	 */
	private static final String ERROR_CD_05 = "05";

	/**
	 * エラーコード（06）
	 */
	private static final String ERROR_CD_06 = "06";

	/**
	 * エラーコード（07）
	 */
	private static final String ERROR_CD_07 = "07";

	/**
	 * エラーコード（99）
	 */
	private static final String ERROR_CD_99 = "99";

	/**
	 * 取込結果（エラーコード【00】）
	 */
	private static final String TRKM_RSLT_00 = "訪問サポート会社エラー";

	/**
	 * 取込結果（エラーコード【01】）
	 */
	private static final String TRKM_RSLT_01 = "案件番号・お客様IDエラー";

	/**
	 * 取込結果（エラーコード【02】）
	 */
	private static final String TRKM_RSLT_02 = "案件番号取消済エラー";

	/**
	 * 取込結果（エラーコード【03】）
	 */
	private static final String TRKM_RSLT_03 = "案件番号重複エラー";
	
	/**
	 * 取込結果（エラーコード【04】）
	 */
	private static final String TRKM_RSLT_04 = "お客様ID契約状態エラー";

	/**
	 * 取込結果（エラーコード【05】）
	 */
	private static final String TRKM_RSLT_05 = "セットアップ実施日エラー";

	/**
	 * 取込結果（エラーコード【06】）
	 */
	private static final String TRKM_RSLT_06 = "処理結果エラー";

	/**
	 * 取込結果（エラーコード【07】）
	 */
	private static final String TRKM_RSLT_07 = "処理結果エラー（金額ＺＥＲＯ以外）";

	/**
	 * 取込結果（エラーコード【99】）
	 */
	private static final String TRKM_RSLT_99 = "結果取込完了";

	/**
	 * パラメタ管理検索キー
	 */
	private static final String KK_TORIKOMI_YUYO_PRD = "KK_TORIKOMI_YUYO_PRD";
	
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(訪問サポート会社)*/
	private static final String D_TBL_NAME_KK_M_VSIT_SPRT_COMP = "KK_M_VSIT_SPRT_COMP";

	/** テーブル(サポート)*/
	private static final String D_TBL_NAME_KK_T_SUPPORT = "KK_T_SUPPORT";

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";

	/** テーブル(料金グループ)*/
	private static final String D_TBL_NAME_KK_M_PRC_GRP = "KK_M_PRC_GRP";

	/** テーブル(訪問サポート会社実施対象料金グループ)*/
	private static final String D_TBL_NAME_KK_M_VSCP_JSTG_PRGP = "KK_M_VSCP_JSTG_PRGP";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_M_VSIT_SPRT_COMP_KK_SELECT_001 = "KK_SELECT_001";

	/** SQL定義キー(KK_SELECT_089)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_089 = "KK_SELECT_089";

	/** SQL定義キー(KK_SELECT_014)*/
	private static final String CK_T_CUST_KK_SELECT_014 = "KK_SELECT_014";

	/** SQL定義キー(KK_SELECT_003)*/
	private static final String KK_M_PRC_GRP_KK_SELECT_003 = "KK_SELECT_003";

	/** SQL定義キー(KK_SELECT_177)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_177 = "KK_SELECT_177";

	/** SQL定義キー(KK_SELECT_002)*/
	private static final String KK_M_VSIT_SPRT_COMP_KK_SELECT_002 = "KK_SELECT_002";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_M_VSCP_JSTG_PRGP_KK_SELECT_001 = "KK_SELECT_001";

	/** テーブルアクセスクラス(訪問サポート会社)*/
	private JBSbatSQLAccess db_KK_M_VSIT_SPRT_COMP = null;

	/** テーブルアクセスクラス(サポート)*/
	private JBSbatSQLAccess db_KK_T_SUPPORT = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;

	/** テーブルアクセスクラス(料金グループ)*/
	private JBSbatSQLAccess db_KK_M_PRC_GRP = null;

	/** テーブルアクセスクラス(訪問サポート会社実施対象料金グループ)*/
	private JBSbatSQLAccess db_KK_M_VSCP_JSTG_PRGP = null;

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;

	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";

	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 対象ファイル名リスト
	 */
	private String[] file_list = null;

	/**
	 * 猶予期間
	 */
	private int yuyoPrd = 0;

	/**
	 * 項番
	 */
	private int ko_no = 0;
	
	/**
	 * PCセットアップ取込結果リスト
	 * */
	private ArrayList<JBSbatServiceInterfaceMap> mapList =  new ArrayList<JBSbatServiceInterfaceMap>();
	
	/** 出力ファイルソートキー */
	private static final String[] SORT_KEYS_1  = {
		"err_cd",							// エラーコード
		"req_sk_cd",						// 依頼先コード
		JBSbatKKIFE081.SVC_KEI_NO,			// サービス契約番号
	};

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_M_VSIT_SPRT_COMP = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_VSIT_SPRT_COMP);
		db_KK_T_SUPPORT = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SUPPORT);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
		db_KK_M_PRC_GRP = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_PRC_GRP);
		db_KK_M_VSCP_JSTG_PRGP = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_VSCP_JSTG_PRGP);
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		// 共通領域のフリー項目から、【対象ファイル名リスト】を取得する
		String freeItem = commonItem.getFreeItem();

		if (freeItem.length() > 0)
		{
			file_list = freeItem.split(";");
		}
		else
		{
			file_list = new String[0];
		}
		
		// 取込猶予期間取得
		yuyoPrd = executeZM_M_WORK_PARAM_KNRI_PKSELECT(new Object[]{KK_TORIKOMI_YUYO_PRD});
		super.logPrint.printDebugLog("取込猶予期間取得---->" + yuyoPrd);
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");

		JBSbatOutputItem outItem = new JBSbatOutputItem();
		JBSbatServiceInterfaceMap inmap = null;
		JBSbatCommonDBInterface svcmap = null;
		JBSbatCommonDBInterface sprtmap = null;
		BufferedReader in_reader = null;

		String req_sk_cd = "";		// 依頼先訪問サポート会社識別コード
		String[] comp_inf = null;	// 訪問サポート会社情報
		String svc_kei_no = "";		// サービス契約番号
		String sprt_no = "";		// サポート番号
		String trn_rslt = "";		// 処理結果
		String seiky_amnt = "";		// 請求金額
		String in_file_nm = "";
		boolean err_flg = true;
		int file_nm_su = 0;
		HashMap<String, String> key_map = new HashMap<String, String>();

		try
		{
			// 【対象ファイル名リスト】数分、繰り返します
			for (int i = 0; i < file_list.length; i++)
			{
				// 変数【依頼先訪問サポート会社識別コード】に、ファイル名の依頼先会社コードを設定します
				in_file_nm = file_list[i];
				file_nm_su = in_file_nm.length();
				req_sk_cd = in_file_nm.substring(file_nm_su - 10, file_nm_su - 4);

				super.logPrint.printDebugLog("依頼先訪問サポート会社識別コード：" + req_sk_cd);

				// 訪問サポート会社へ検索を行います
				comp_inf = serchVsitSprtComp(req_sk_cd);

				// 検索結果なしの場合、変数【エラーコード】にfalseを設定します
				if (comp_inf == null)
				{
					err_flg = false;
				}

				// 入力ファイルクラスを生成します。
				in_reader = new BufferedReader(new InputStreamReader(new FileInputStream(in_file_nm)));

				// ファイルが終了するまで読込みを繰り返します
				while (in_reader.ready())
				{
					// 入力電文に転記します
					inmap = setInMap(in_reader.readLine());

					if (inmap == null)
					{
						// 入力ファイル内容異常
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0100AE, new String[]{in_file_nm});
					}

					svc_kei_no = JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.SVC_KEI_NO));
					sprt_no = JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.SUPPORT_NO));
					trn_rslt = JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.TRN_RSLT));
					seiky_amnt = JBSbatStringUtil.trim(inmap.get(JBSbatKKIFE019.SEIKY_AMNT).toString());
					
					// 変数【エラーコード】＝falseの場合、以下の処理を行います
					if (!err_flg)
					{
						// エラーコード【00】で「ファイル出力処理」をします
						outItem = executeOutFile(outItem, inmap, svcmap, "", ERROR_CD_00, svc_kei_no, "");
						continue;
					}
					
					// サービス契約の検索を行います
					svcmap = serchSvcKei(svc_kei_no);
					
					if(null == svcmap)
					{
						// エラーコード【01】で「ファイル出力処理」をします
						outItem = executeOutFile(outItem, inmap, svcmap, comp_inf[0], ERROR_CD_01, svc_kei_no, comp_inf[2]);
						continue;
					}

					super.logPrint.printDebugLog("サポート番号：" + sprt_no);

					// 「入力.サポート番号＝未設定」の場合、以下の処理を行います
					if (sprt_no == null || sprt_no.length() == 0)
					{
						// エラーコード【01】で「ファイル出力処理」をします
						outItem = executeOutFile(outItem, inmap, svcmap, comp_inf[0], ERROR_CD_01, svc_kei_no, comp_inf[2]);
						continue;
					}

					// サポートの検索を行います
					sprtmap = serchSupport(sprt_no);

					// サポートが存在しない場合はスキップ
					if (null != sprtmap)
					{
						super.logPrint.printDebugLog("サポートステータス：" + JBSbatStringUtil.trim(sprtmap.getString(JBSbatKK_T_SUPPORT.SUPPORT_STAT)));

						// 「サポート.サポートステータス＝【920：キャンセル】」の場合、以下の処理を行います
						if (SUPPORT_STAT.equals(JBSbatStringUtil.trim(sprtmap.getString(JBSbatKK_T_SUPPORT.SUPPORT_STAT))))
						{
							// エラーコード【02】で「ファイル出力処理」をします
							outItem = executeOutFile(outItem, inmap, svcmap, comp_inf[0], ERROR_CD_02, svc_kei_no, comp_inf[2]);
							continue;
						}
					}
					else
					{
						// エラーコード【01】で「ファイル出力処理」をします
						outItem = executeOutFile(outItem, inmap, svcmap, comp_inf[0], ERROR_CD_01, svc_kei_no, comp_inf[2]);
						continue;
					}
					// サポート番号が重複していた場合
					if(key_map.containsKey(sprt_no))
					{
						// エラーコード【03】で「ファイル出力処理」をします
						outItem = executeOutFile(outItem, inmap, svcmap, comp_inf[0], ERROR_CD_03, svc_kei_no, comp_inf[2]);
						continue;
					}
					else
					{
						key_map.put(sprt_no, svc_kei_no);
					}

					super.logPrint.printDebugLog("料金グループコード：" + JBSbatStringUtil.trim(svcmap.getString(JBSbatKK_T_SVC_KEI.PRC_GRP_CD)));

					super.logPrint.printDebugLog("サービス契約ステータス：" + JBSbatStringUtil.trim(svcmap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT)));

					// 「サービス契約.サービス契約ステータス」が【010：受付済】、【020：照査済】、【030：締結済】、
					// 【100：サービス提供中】、【210：サービス中断中】、【910：解約済】以外の場合、以下の処理を行います
					if (!isSvcStat(JBSbatStringUtil.trim(svcmap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT))))
					{
						// エラーコード【04】で「ファイル出力処理」をします
						outItem = executeOutFile(outItem, inmap, svcmap, comp_inf[0], ERROR_CD_04, svc_kei_no, comp_inf[2]);
						continue;
					}

					if (null != sprtmap)
					{
						super.logPrint.printDebugLog("セットアップ実施日：" + JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.SETUP_JSSI_YMD)));
						//super.logPrint.printDebugLog("第1希望年月日：" + JBSbatStringUtil.trim(sprtmap.getString(JBSbatKK_T_SUPPORT.VSIT_SUPPORT_KIBO_YMD_1)));
							
						// 「入力.セットアップ実施日＝未設定」、第1希望年月日のチェックはしない
						if ((JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.SETUP_JSSI_YMD))).length() ==0)
						{
							// エラーコード【05】で「ファイル出力処理」をします
							outItem = executeOutFile(outItem, inmap, svcmap, comp_inf[0], ERROR_CD_05, svc_kei_no, comp_inf[2]);
							continue;
						}
					}
					super.logPrint.printDebugLog("処理結果：" + trn_rslt);

					// 「入力.処理結果」が【'0'：OK】、【'1'：NG】以外の場合、以下の処理を行います
					if (!(TRN_RSLT_CD_OK.equals(trn_rslt) || TRN_RSLT_CD_NG.equals(trn_rslt)))
					{
						// エラーコード【06】で「ファイル出力処理」をします
						outItem = executeOutFile(outItem, inmap, svcmap, comp_inf[0], ERROR_CD_06, svc_kei_no, comp_inf[2]);
						continue;
					}

					super.logPrint.printDebugLog("請求金額：" + seiky_amnt);

					// 「入力.処理結果＝【1：NG】」の場合、以下の処理を行います
					if (TRN_RSLT_CD_NG.equals(trn_rslt))
					{
						// 「入力.請求金額≠0」の場合、以下の処理を行います
						if (hasSeikyAmnt(seiky_amnt) != 0)
						{
							// エラーコード【07】で「ファイル出力処理」をします
							outItem = executeOutFile(outItem, inmap, svcmap, comp_inf[0], ERROR_CD_07, svc_kei_no, comp_inf[2]);
							continue;
						}
					}
					// 「入力.処理結果＝【0：OK】」の場合、以下の処理を行います
					else if (TRN_RSLT_CD_OK.equals(trn_rslt))
					{
						// 「入力.請求金額＜0」の場合、以下の処理を行います
						if (hasSeikyAmnt(seiky_amnt) < 0)
						{
							// エラーコード【06】で「ファイル出力処理」をします
							outItem = executeOutFile(outItem, inmap, svcmap, comp_inf[0], ERROR_CD_06, svc_kei_no, comp_inf[2]);
							continue;
						}

						super.logPrint.printDebugLog("内訳コード：" + JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.UCWK_CD)));
						super.logPrint.printDebugLog("訪問サポート会社.内訳コード：" + comp_inf[1]);

						// 「入力.請求金額＞0」の場合、
						if (hasSeikyAmnt(seiky_amnt) > 0)
						{
							// 訪問サポート会社実施対象料金グループマスタに訪問会社コード,
							// 料金グループが設定されているかチェック
							if (!isVscpJstgPrgp(JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.UCWK_CD)), JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.SVC_KEI_NO))))
							{
								// エラーコード【00】で「ファイル出力処理」をします
								outItem = executeOutFile(outItem, inmap, svcmap, comp_inf[0], ERROR_CD_00, svc_kei_no, comp_inf[2]);
								continue;
							}
						}
					}

					// エラーコード【99】で「ファイル出力処理」をします
					outItem = executeOutFile(outItem, inmap, svcmap, comp_inf[0], ERROR_CD_99, svc_kei_no, comp_inf[2]);
				}

				in_reader.close();
				err_flg = true;

			}
		}
		catch(IOException ioe)
		{
			// ファイル未存在
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0020CE, new String[]{in_file_nm});
		}
		finally
		{
			if (in_reader != null)
			{
				in_reader.close();
			}
		}
		
		// ソート処理後の出力ファイル1をセット
		outItem = outFile1Sort(outItem);

		super.logPrint.printDebugLog("execute_END");

		return outItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_M_VSIT_SPRT_COMP.close();
		db_KK_T_SUPPORT.close();
		db_KK_T_SVC_KEI.close();
		db_CK_T_CUST.close();
		db_KK_M_PRC_GRP.close();
		db_KK_M_VSCP_JSTG_PRGP.close();
		db_ZM_M_WORK_PARAM_KNRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 訪問サポート会社コード、料金グループをチェックします。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.訪問サポート会社実施対象料金グループマスタに訪問サポート会社コード、料金グループが設定されていない場合、falseを返します。<br>
	 *
	 * 2.訪問サポート会社実施対象料金グループ適用開始年月日 < 運用日の場合、falseを返します。
	 *
	 * 3.訪問サポート会社実施対象料金グループ適用終了年月日 > 運用日の場合、falseを返します。
	 *
	 * 4.上記以外の合、trueを返します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param ucwkCd　入力電文の内訳コード。
	 * @param svcKeiNo　サービス契約番号。
	 * @return boolean　判定結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */	
	private boolean isVscpJstgPrgp(String ucwkCd, String svcKeiNo) throws Exception 
	{
		JBSbatCommonDBInterface dbmap = null;
		
		String[] param = new String[2];
		param[0] = svcKeiNo;
		param[1] = opeDate;
		
		super.logPrint.printDebugLog("サービス契約番号---->" + param[0]);
		
		// 料金グループコード検索
		String prcGrpCd = executeKK_T_SVC_KEI_KK_SELECT_177(param);
		
		super.logPrint.printDebugLog("料金グループコードprcGrpCd---->" + prcGrpCd);
		
		// 訪問サポート会社コード
		String vsitSupportCompCd = executeKK_M_VSIT_SPRT_COMP_KK_SELECT_002(new Object[]{ucwkCd, opeDate});
		if("".equals(vsitSupportCompCd))
		{
			return false;
		}
		
		super.logPrint.printDebugLog("訪問サポート会社コードvsitSupportCompCd---->" + vsitSupportCompCd);
		
		// 訪問サポート会社実施対象料金グループマスタ検索
		executeKK_M_VSCP_JSTG_PRGP_KK_SELECT_001(new Object[]{opeDate, vsitSupportCompCd, prcGrpCd});
		
		dbmap = db_KK_M_VSCP_JSTG_PRGP.selectNext();
		
		// 検索結果なし
		if(null == dbmap)
		{
			return false;
		}
		else
		{
			// 訪問サポート会社実施対象料金グループ適用開始年月日
			String startYMD = JBSbatStringUtil.trim(dbmap.getString(JBSbatKK_M_VSCP_JSTG_PRGP.VSCP_JSTG_PRGP_TSTAYMD));
			super.logPrint.printDebugLog("訪問サポート会社実施対象料金グループ適用開始年月日---->" + startYMD);
			
			// 訪問サポート会社実施対象料金グループ適用終了年月日
			String endYMD = JBSbatStringUtil.trim(dbmap.getString(JBSbatKK_M_VSCP_JSTG_PRGP.VSCP_JSTG_PRGP_TENDYMD));
			super.logPrint.printDebugLog("訪問サポート会社実施対象料金グループ適用終了年月日---->" + endYMD);
			
			// 猶予期間算出
			String yuyoYMD = JBSbatDateUtil.adjustMonth(endYMD, yuyoPrd);
			super.logPrint.printDebugLog("猶予期間算出---->" + yuyoYMD);
			
			super.logPrint.printDebugLog("運用日---->" + opeDate);
			
			// 適用開始年月日 > 運用日 
			if(startYMD.compareTo(opeDate) > 0)
			{
				return false;
			}
			
			// 適用終了日 < 運用日
			if(yuyoYMD.compareTo(opeDate) < 0)
			{
				return false;
			}
		}
		
		return true;
	}	

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_177)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @return String
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String executeKK_T_SVC_KEI_KK_SELECT_177(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		
		JBSbatCommonDBInterface dbmap = null;
		
		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_177);
		
		dbmap = db_KK_T_SVC_KEI.selectNext();
		
		return JBSbatStringUtil.trim(dbmap.getString(JBSbatKK_T_SVC_KEI.PRC_GRP_CD));
		
	}		

	/**
	 * SQLKEY(KK_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	訪問サポート内訳コード
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @return String
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String executeKK_M_VSIT_SPRT_COMP_KK_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		
		JBSbatCommonDBInterface dbmap = null;
		
		// DBアクセスを実行します
		db_KK_M_VSIT_SPRT_COMP.selectBySqlDefine(paramList, KK_M_VSIT_SPRT_COMP_KK_SELECT_002);
		
		dbmap = db_KK_M_VSIT_SPRT_COMP.selectNext();
		
		if(null != dbmap)
		{
			return JBSbatStringUtil.trim(dbmap.getString(JBSbatKK_M_VSIT_SPRT_COMP.VSIT_SUPPORT_COMP_CD));
		}
		else
		{
			return "";
		}
		
	}
	
	/**
	 * 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 int executeZM_M_WORK_PARAM_KNRI_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("WORK_PARAM_ID", whereParam[0]);
		
		JBSbatCommonDBInterface dbmap = null;
		
		// DBアクセスを実行します
		dbmap = db_ZM_M_WORK_PARAM_KNRI.selectByPrimaryKeys(whereMap);
		
		if (null == dbmap)
		{
			throw new JBSbatBusinessException(
							JPCBatchMessageConstant.EKKB0150JE, new String[] {"ZM_M_WORK_PARAM_KNRI(KEY:" + whereParam[0].toString() + ")"});
		}
		
		String workParamSetteValue = JBSbatStringUtil.trim(dbmap.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE));
		
		if(0 == workParamSetteValue.length() || !JCCBatCommon.isHannkakuSuuji1(workParamSetteValue)){
			// 半角数字の場合のみ数値に変換します。
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0090TE, new String[]{JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE});
		}
		
		return Integer.parseInt(workParamSetteValue);
	}		
	/**
	 * SQLKEY(KK_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	訪問サポート会社コード
	 *		 	料金グループコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @return JBSbatCommonDBInterface
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_VSCP_JSTG_PRGP_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_M_VSCP_JSTG_PRGP.selectBySqlDefine(paramList, KK_M_VSCP_JSTG_PRGP_KK_SELECT_001);
		
	}	
	/**
	 * SQLKEY(KK_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	訪問サポート会社コード
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_VSIT_SPRT_COMP_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_M_VSIT_SPRT_COMP.selectBySqlDefine(paramList, KK_M_VSIT_SPRT_COMP_KK_SELECT_001);
	}

	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SUPPORT_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKK_T_SUPPORT_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SUPPORT_NO", whereParam[0]);

		// DBアクセスを実行します
		return db_KK_T_SUPPORT.selectByPrimaryKeys(whereMap);
	}

	/**
	 * SQLKEY(KK_SELECT_089)で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_089(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_089);
	}

	/**
	 * SQLKEY(KK_SELECT_014)で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_KK_SELECT_014(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_KK_SELECT_014);
	}

	/**
	 * SQLKEY(KK_SELECT_003)で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_M_PRC_GRP_KK_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_M_PRC_GRP.selectBySqlDefine(paramList, KK_M_PRC_GRP_KK_SELECT_003);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 入力レコードを入力電文に転記します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.入力レコードの項目数がファイル定義と一致していない場合、nullを返却します。<br>
	 * 
	 * 2.入力電文に転記します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param value　入力レコード。
	 * @return JBSbatServiceInterfaceMap　入力電文。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap setInMap(String value) throws Exception
	{
		JBSbatServiceInterfaceMap map = new JBSbatServiceInterfaceMap();
		String[] data = value.split(",");
		
		// アルファ社は７項目ある場合があるが７項目目は使用しない。
		if (data.length < 6)
		{
			return null;
		}

		map.setString(JBSbatKKIFE019.SVC_KEI_NO, data[0].replace("\"", ""));		// サービス契約番号
		map.setString(JBSbatKKIFE019.SUPPORT_NO, data[1].replace("\"", ""));		// サポート番号
		map.setString(JBSbatKKIFE019.SETUP_JSSI_YMD, data[2].replace("\"", ""));	// セットアップ実施日
		map.setString(JBSbatKKIFE019.TRN_RSLT, data[3].replace("\"", ""));			// 処理結果
		map.setString(JBSbatKKIFE019.UCWK_CD, data[4].replace("\"", ""));			// 訪問サポート内訳コード
		map.set(JBSbatKKIFE019.SEIKY_AMNT, data[5].replace("\"", ""));				// 請求金額

		return map;
	}

	/**
	 * 訪問サポート会社へ検索を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.DBアクセスを実行します。<br>
	 *
	 * 2.検索結果なしの場合、nullを返却します。
	 * 
	 * 3.検索結果ありの場合、「訪問サポート会社名」、「訪問サポート内訳コード」を返却します。
	 * 
	 * </pre>
	 * <p>
	 * @param comp_cd　依頼先会社コード。
	 * @return String[]　訪問サポート会社情報。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String[] serchVsitSprtComp(String comp_cd) throws Exception
	{
		JBSbatCommonDBInterface dbmap = null;
		String[] param = new String[2];
		String[] value = null;

		// 検索条件の設定
		if ("124594".equals(comp_cd))
		{
			param[0] = "01";
		}
		else if ("125294".equals(comp_cd))
		{
			param[0] = "02";
		}
		else if ("127869".equals(comp_cd))
		{
			param[0] = "03";
		}
		else if ("502975".equals(comp_cd))
		{
			param[0] = "04";
		}
		else if ("503142".equals(comp_cd))
		{
			param[0] = "05";
		}
		else if ("129789".equals(comp_cd))
		{
			param[0] = "06";
		}
		else
		{
			param[0] = "99";
		}

		param[1] = super.opeDate;

		super.logPrint.printDebugLog("訪問サポート会社コード：" + param[0]);
		super.logPrint.printDebugLog("バッチ運用日：" + param[1]);
		
		// 検索実行
		executeKK_M_VSIT_SPRT_COMP_KK_SELECT_001(param);
		dbmap = db_KK_M_VSIT_SPRT_COMP.selectNext();

		// 検索結果判定
		if (dbmap != null)
		{
			value = new String[3];

			// 訪問サポート会社名を設定します。
			value[0] = JBSbatStringUtil.trim(dbmap.getString(JBSbatKK_M_VSIT_SPRT_COMP.VSIT_SUPPORT_COMP_NM));

			// 訪問サポート内訳コードを設定します。
			value[1] = JBSbatStringUtil.trim(dbmap.getString(JBSbatKK_M_VSIT_SPRT_COMP.VSIT_SPRT_UCWK_CD));
			
			// 訪問サポート会社コード
			value[2] = param[0];
		}

		return value;
	}

	/**
	 * サービス契約の検索を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.DBアクセスを実行します。<br>
	 *
	 * 2.検索結果なしの場合、エラーとし処理中断します。
	 * 
	 * </pre>
	 * <p>
	 * @param svc_kei_no　サービス契約番号。
	 * @return JBSbatCommonDBInterface　検索結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface serchSvcKei(String svc_kei_no) throws Exception
	{
		JBSbatCommonDBInterface dbmap = null;
		String[] param = new String[2];

		// 検索条件の設定
		param[0] = svc_kei_no;
		param[1] = super.opeDate;

		// 検索実行
		executeKK_T_SVC_KEI_KK_SELECT_089(param);
		dbmap = db_KK_T_SVC_KEI.selectNext();

		
		//// 検索結果判定
		//if (dbmap == null)
		//{
		//	///* ++++++++++ v2.01.00 修正開始 ++++++++++ */
		//	//// throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0210CE, new String[]{"KK_T_SVC_KEI", svc_kei_no});
		//	//super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0210CE, new String[]{"KK_T_SVC_KEI", svc_kei_no});
		//	//throw new JBSbatBusinessError();
		//	///* ++++++++++ v2.01.00 修正終了 ++++++++++ */
		//	super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0290AW, new String[]{"「KK_T_SVC_KEI」テーブルにサービス契約番号：" + svc_kei_no});
		//	super.commonItem.addErrorCount(1);
		//}

		return dbmap;
	}

	/**
	 * サポートの検索を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.DBアクセスを実行します。<br>
	 *
	 * 2.検索結果なしの場合、エラーとし処理中断します。
	 * 
	 * </pre>
	 * <p>
	 * @param sprt_no　サポート番号。
	 * @return JBSbatCommonDBInterface　検索結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface serchSupport(String sprt_no) throws Exception
	{
		JBSbatCommonDBInterface dbmap = null;
		String[] param = new String[1];

		// 検索条件の設定
		param[0] = sprt_no;

		// 検索実行
		dbmap = executeKK_T_SUPPORT_PKSELECT(param);
		// 
		//// 検索結果判定
		//if (dbmap == null)
		//{
		//	///* ++++++++++ v2.01.00 修正開始 ++++++++++ */
		//	//// super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0210CE, new String[]{"KK_T_SUPPORT", sprt_no});
		//	//// return null;
		//	//super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0210CE, new String[]{"KK_T_SUPPORT", sprt_no});
		//	//throw new JBSbatBusinessError();
		//	///* ++++++++++ v2.01.00 修正終了 ++++++++++ */
		//	super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0290AW, new String[]{"「KK_T_SUPPORT」テーブルにサポート番号：" + sprt_no});
		//	super.commonItem.addErrorCount(1);
		//}

		return dbmap;
	}

	/**
	 * サービス契約ステータスの判定をします。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.契約ステータス=【010：受付済】【020：照査済】【030：締結済】【100：サービス提供中】【210：サービス中断中】【910：解約済】か判定をします。<br>
	 *
	 * 2.条件を満たす場合true、満たさない場合falseを返します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param kei_stat　契約ステータス。
	 * @return boolean　判定結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean isSvcStat(String kei_stat) throws Exception
	{
		if (KEI_STAT_UK.equals(kei_stat) || KEI_STAT_SHOSA.equals(kei_stat) || KEI_STAT_CNC.equals(kei_stat))
		{
			return true;
		}

		if (KEI_STAT_TK.equals(kei_stat) || KEI_STAT_STP.equals(kei_stat) || KEI_STAT_DSL.equals(kei_stat))
		{
			return true;
		}

		return false;
	}

	/**
	 * 請求金額をゼロと比較をします。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.「入力.請求金額＝0」の場合、0を返します。<br>
	 *
	 * 2.「入力.請求金額＞0」の場合、1を返します。<br>
	 *
	 * 3.「入力.請求金額＜0」の場合、-1を返します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param seiky_amnt　請求金額。
	 * @return int　比較結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private int hasSeikyAmnt(String seiky_amnt) throws Exception
	{
		BigDecimal amnt = null;
		try{
			amnt = new BigDecimal(seiky_amnt);
			
		}catch(Exception e){
			// 入力ファイル内容異常
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0090TE, new String[]{"請求金額："+seiky_amnt});
		}
		return amnt.compareTo(BigDecimal.ZERO);
		
	}

	/**
	 * ファイル出力処理をします。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.お客様へ検索を行います。<br>
	 *
	 * 2.検索結果なしの場合、エラーとし処理中断します。<br>
	 *
	 * 3.検索結果ありの場合、出力情報へ転記します。<br>
	 *
	 * 4.料金グループへ検索を行います。<br>
	 *
	 * 5.検索結果なしの場合、エラーとし処理中断します。<br>
	 *
	 * 6.検索結果ありの場合、出力情報へ転記します。<br>
	 *
	 * 7.ＰＣセットアップ取込結果リスト送信ファイルへ出力を行います。<br>
	 *
	 * 8.エラーコード【99】の場合、ＰＣセットアップ完了登録中間ファイルへ出力を行います。<br>
	 *
	 * </pre>
	 * <p>
	 * @param outitem　出力情報。
	 * @param inmap　入力電文。
	 * @param dbmap　サービス契約検索結果。
	 * @param comp_nm　訪問サポート会社名。
	 * @param err_cd　エラーコード。
	 * @param svc_kei_no　サービス契約番号。
	 * @param req_sk_cd　訪問サポート会社コード。
	 * @return JBSbatOutputItem　出力情報。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatOutputItem executeOutFile(JBSbatOutputItem outitem,
											JBSbatServiceInterfaceMap inmap,
											JBSbatCommonDBInterface dbmap,
											String comp_nm,
											String err_cd,
											String svc_kei_no,
											String req_sk_cd) throws Exception
	{
		JBSbatCommonDBInterface custmap = null;
		JBSbatCommonDBInterface grpmap = null;
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
		if(null != dbmap)
		{
			String[] param = new String[2];
	
			String sysid = JBSbatStringUtil.trim(dbmap.getString(JBSbatKK_T_SVC_KEI.SYSID));
			String grpcd = JBSbatStringUtil.trim(dbmap.getString(JBSbatKK_T_SVC_KEI.PRC_GRP_CD));
	
			// お客様検索のバインド変数設定
			param[0] = sysid;
			param[1] = super.opeDate;
	
			// お客様検索
			executeCK_T_CUST_KK_SELECT_014(param);
			custmap = db_CK_T_CUST.selectNext();
	
			// 検索結果判定
			if (custmap == null)
			{
				///* ++++++++++ v2.01.00 修正開始 ++++++++++ */
				//// throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0210CE, new String[]{"CK_T_CUST", sysid});
				//super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0210CE, new String[]{"CK_T_CUST", sysid});
				////throw new JBSbatBusinessError();
				///* ++++++++++ v2.01.00 修正終了 ++++++++++ */
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0290AW, 
						new String[]{"「CK_T_CUST」テーブルにSYSID：" + sysid +"（サービス契約番号：" + svc_kei_no + "）"});
				super.commonItem.addErrorCount(1);
				return outitem;
	
			}
			
			// お客様名を取得、15桁より大きい場合はカットする。
			String cust_nm = JBSbatStringUtil.trim(custmap.getString(JBSbatCK_T_CUST.CUST_NM));
			if(15 < cust_nm.length())
			{
				cust_nm = cust_nm.substring(0, 15);
			}
			outmap.setString(JBSbatKKIFE081.KEISHA_NM, cust_nm);		// 契約者名
	
			// 料金グループ検索のバインド変数設定
			param[0] = grpcd;
			param[1] = super.opeDate;
	
			// 料金グループ検索
			executeKK_M_PRC_GRP_KK_SELECT_003(param);
			grpmap = db_KK_M_PRC_GRP.selectNext();
	
			// 検索結果判定
			if (grpmap == null)
			{
				///* ++++++++++ v2.01.00 修正開始 ++++++++++ */
				//// throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0210CE, new String[]{"KK_M_PRC_GRP", grpcd});
				//super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0210CE, new String[]{"KK_M_PRC_GRP", grpcd});
				/////throw new JBSbatBusinessError();
				///* ++++++++++ v2.01.00 修正終了 ++++++++++ */
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0290AW, 
						new String[]{"「KK_M_PRC_GRP」テーブルに料金グループコード：" +  grpcd + "（サービス契約番号：" + svc_kei_no +"）"});
				super.commonItem.addErrorCount(1);
				return outitem;
	
			}
			
			// 料金グル―プ名を取得、20桁より大きい場合はカットする。
			String prc_grp_nm = JBSbatStringUtil.trim(grpmap.getString(JBSbatKK_M_PRC_GRP.PRC_GRP_NM));
			if(20 < prc_grp_nm.length())
			{
				prc_grp_nm = prc_grp_nm.substring(0, 20);
			}
			outmap.setString(JBSbatKKIFE081.KEI_SVC, prc_grp_nm);	// 契約サービス
		}
		else
		{
			outmap.setString(JBSbatKKIFE081.KEISHA_NM, "　");		// 契約者名
			outmap.setString(JBSbatKKIFE081.KEI_SVC, "　");			// 契約サービス
		}

		// 送信ファイルへ出力
		outmap = executeSndFile(outmap, inmap, err_cd);
		
		// 依頼先が20桁より大きい場合はカットする。
		if(20 < comp_nm.length())
		{
			comp_nm = comp_nm.substring(0, 20);
		}
		outmap.setString(JBSbatKKIFE081.REQ_SK, comp_nm);		// 依頼先

		outmap.setString("err_cd", err_cd);				// エラーコード（ソート用）
		outmap.setString("req_sk_cd", req_sk_cd);		// 依頼先コード（ソート用）
//		outmap.setOutFlg(true);
//		outitem.addOutMapList(outmap);
		mapList.add(outmap);

		// 中間ファイルへ出力
		if (ERROR_CD_99.equals(err_cd))
		{
			return executeMidFile(outitem, inmap);
		}

		return outitem;
	}

	/**
	 * ＰＣセットアップ取込結果リスト送信ファイルへ出力します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.項番を加算します。<br>
	 *
	 * 2.出力情報へ転記します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param outmap　出力情報。
	 * @param inmap　入力電文。
	 * @param err_cd　エラーコード。
	 * @return JBSbatServiceInterfaceMap　出力情報。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap executeSndFile(JBSbatServiceInterfaceMap outmap,
														JBSbatServiceInterfaceMap inmap,
														String err_cd) throws Exception
	{
		ko_no++;
		
		// セットアップ実施日の編集
		String jssi_ymd = JBSbatStringUtil.trim(editDate(inmap.getString(JBSbatKKIFE019.SETUP_JSSI_YMD)));
		
		// 処理結果の編集
		String trn_rslt = getTrnRsltStr(err_cd, JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.TRN_RSLT)));
		
		// 取込結果の編集
		String trkm_rslt = getTrkmRsltStr(err_cd);
		
		outmap.setString(JBSbatKKIFE081.KO_NO, String.valueOf(ko_no));														// 項番
		outmap.setString(JBSbatKKIFE081.SUPPORT_NO, JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.SUPPORT_NO)));		// サポート番号
		outmap.setString(JBSbatKKIFE081.SVC_KEI_NO, JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.SVC_KEI_NO)));		// サービス契約番号
		outmap.setString(JBSbatKKIFE081.SETUP_JSSI_YMD, jssi_ymd);															// セットアップ実施日
		outmap.setString(JBSbatKKIFE081.TRN_RSLT, trn_rslt);																// 処理結果
		
		/* ++++++++++ v2.02.00 修正開始 ++++++++++ */
		// outmap.setString(JBSbatKKIFE081.SEIKY_AMNT, inmap.getString(JBSbatKKIFE019.SEIKY_AMNT));								// 請求金額
		outmap.setString(JBSbatKKIFE081.SEIKY_AMNT, JPCFomatString.formatNumber(JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.SEIKY_AMNT))));	// 請求金額
		/* ++++++++++ v2.02.00 修正終了 ++++++++++ */
		
		outmap.setString(JBSbatKKIFE081.TRKM_RSLT, trkm_rslt);																	// 取込結果
		
		return outmap;
	}

	/**
	 * 年月日（YYYYMMDD）を"YYYY/MM/DD"形式に編集します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.年月日を"YYYY/MM/DD"形式にします。<br>
	 *
	 * </pre>
	 * <p>
	 * @param data　編集する年月日。
	 * @return String　編集後年月日。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String editDate(String data) throws Exception
	{
		StringBuffer value = new StringBuffer();
		
		if (data == null || data.length() < 8)
		{
			return "";
		}
		
		value.append(data.subSequence(0, 4));
		value.append("/");
		value.append(data.subSequence(4, 6));
		value.append("/");
		value.append(data.subSequence(6, 8));
		
		return value.toString();
	}

	/**
	 * 処理結果に対応する文字列を返却します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.エラーコード【06】又は、処理結果＝【1：NG】の場合、"ＮＧ"を返します。<br>
	 *
	 * 2.処理結果＝【0：OK】の場合、"ＯＫ"を返します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param err_cd　エラーコード。
	 * @param trn_rslt　処理結果。
	 * @return String　対応する文字列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getTrnRsltStr(String err_cd, String trn_rslt) throws Exception
	{
		String value = "ＯＫ";
		
		if (ERROR_CD_06.equals(err_cd) || TRN_RSLT_CD_NG.equals(trn_rslt))
		{
			value = "ＮＧ";
		}
		
		return value;
	}

	/**
	 * エラーコードに対応する取込結果を返却します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.エラーコード【00】の場合、"訪問サポート会社エラー"を返します。<br>
	 *
	 * 2.エラーコード【01】の場合、"案件番号・お客様IDエラー"を返します。<br>
	 *
	 * 3.エラーコード【02】の場合、"案件番号取消済エラー"を返します。<br>
	 *
	 * 3.エラーコード【03】の場合、"案件番号重複エラー"を返します。<br>
	 * 
	 * 4.エラーコード【04】の場合、"お客様ID契約状態エラー"を返します。<br>
	 *
	 * 5.エラーコード【05】の場合、"セットアップ実施日エラー"を返します。<br>
	 *
	 * 6.エラーコード【06】の場合、"処理結果エラー"を返します。<br>
	 *
	 * 7.エラーコード【07】の場合、"処理結果エラー（金額ＺＥＲＯ以外）"を返します。<br>
	 *
	 * 8.エラーコード【08】の場合、"内訳コードエラー"を返します。<br>
	 *
	 * 9.エラーコード【99】の場合、"結果取込完了"を返します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param err_cd　エラーコード。
	 * @return String　対応する文字列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getTrkmRsltStr(String err_cd) throws Exception
	{
		String value = TRKM_RSLT_99;

		if (ERROR_CD_00.equals(err_cd))
		{
			value = TRKM_RSLT_00;
		}
		else if (ERROR_CD_01.equals(err_cd))
		{
			value = TRKM_RSLT_01;
		}
		else if (ERROR_CD_02.equals(err_cd))
		{
			value = TRKM_RSLT_02;
		}
		else if (ERROR_CD_03.equals(err_cd))
		{
			value = TRKM_RSLT_03;
		}
		else if (ERROR_CD_04.equals(err_cd))
		{
			value = TRKM_RSLT_04;
		}
		else if (ERROR_CD_05.equals(err_cd))
		{
			value = TRKM_RSLT_05;
		}
		else if (ERROR_CD_06.equals(err_cd))
		{
			value = TRKM_RSLT_06;
		}
		else if (ERROR_CD_07.equals(err_cd))
		{
			value = TRKM_RSLT_07;
		}
		
		return value;
	}

	/**
	 * ＰＣセットアップ完了登録中間ファイルへ出力します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.出力情報へ転記します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param outitem　出力情報。
	 * @param inmap　入力電文。
	 * @return JBSbatOutputItem　出力情報。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatOutputItem executeMidFile(JBSbatOutputItem outitem, JBSbatServiceInterfaceMap inmap) throws Exception
	{
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
		
		outmap.setString(JBSbatKKIFM128.SVC_KEI_NO, JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.SVC_KEI_NO)));			// サービス契約番号
		outmap.setString(JBSbatKKIFM128.SUPPORT_NO, JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.SUPPORT_NO)));			// サポート番号
		outmap.setString(JBSbatKKIFM128.SETUP_JSSI_YMD, JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.SETUP_JSSI_YMD)));	// セットアップ実施日
		outmap.setString(JBSbatKKIFM128.TRN_RSLT, JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.TRN_RSLT)));				// 処理結果
		outmap.setString(JBSbatKKIFM128.SEIKY_AMNT, JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.SEIKY_AMNT)));			// 請求金額
		outmap.setString(JBSbatKKIFM128.UCWK_CD, JBSbatStringUtil.trim(inmap.getString(JBSbatKKIFE019.UCWK_CD)));					// 内訳コード
		
		outmap.setOutFlg(true);
		outitem.addOutMapList_2(outmap);
		
		return outitem;
	}

	/**
	 * ソート処理後のデータファイルを出力します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.抽出データ読み込み処理。
	 * 2.データソート処理。
	 * 3.ソート後データ出力処理。
	 * </pre>
	 * <p>
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private JBSbatOutputItem outFile1Sort(JBSbatOutputItem out_bean) throws Exception
	{
		// ソート用データリスト
		ArrayList<HashMap<String, Comparable>> sortList = new ArrayList<HashMap<String, Comparable>>();
		
		// ソート対象データを設定
		for (int i = 0 ; i < mapList.size() ; i++)
		{
			HashMap<String, Comparable> dataMap = new HashMap<String, Comparable>();
			
			JBSbatServiceInterfaceMap map = (JBSbatServiceInterfaceMap)mapList.get(i);
			
			dataMap.put("err_cd", JBSbatStringUtil.Rtrim(map.getString("err_cd")));												// エラーコード(ソート用)
			dataMap.put("req_sk_cd", JBSbatStringUtil.Rtrim(map.getString("req_sk_cd")));										// 訪問会社コード(ソート用)
			dataMap.put(JBSbatKKIFE081.REQ_SK, JBSbatStringUtil.Rtrim(map.getString(JBSbatKKIFE081.REQ_SK)));					// 依頼先
			dataMap.put(JBSbatKKIFE081.SVC_KEI_NO, JBSbatStringUtil.Rtrim(map.getString(JBSbatKKIFE081.SVC_KEI_NO)));			// サービス契約番号
			dataMap.put(JBSbatKKIFE081.SUPPORT_NO, JBSbatStringUtil.Rtrim(map.getString(JBSbatKKIFE081.SUPPORT_NO)));			// サポート番号
			dataMap.put(JBSbatKKIFE081.KEISHA_NM, JBSbatStringUtil.Rtrim(map.getString(JBSbatKKIFE081.KEISHA_NM)));				// 契約者名
			dataMap.put(JBSbatKKIFE081.KEI_SVC, JBSbatStringUtil.Rtrim(map.getString(JBSbatKKIFE081.KEI_SVC)));					// 契約サービス
			dataMap.put(JBSbatKKIFE081.SETUP_JSSI_YMD, JBSbatStringUtil.Rtrim(map.getString(JBSbatKKIFE081.SETUP_JSSI_YMD)));	// セットアップ実施日
			dataMap.put(JBSbatKKIFE081.TRN_RSLT, JBSbatStringUtil.Rtrim(map.getString(JBSbatKKIFE081.TRN_RSLT)));				// 処理結果
			dataMap.put(JBSbatKKIFE081.SEIKY_AMNT, JBSbatStringUtil.Rtrim(map.getString(JBSbatKKIFE081.SEIKY_AMNT)));			// 請求金額
			dataMap.put(JBSbatKKIFE081.TRKM_RSLT, JBSbatStringUtil.Rtrim(map.getString(JBSbatKKIFE081.TRKM_RSLT)));				// 取込結果
			
			sortList.add(dataMap);
		}
		
		// ソート処理
		Collections.sort(sortList, new Comparator<Object>()
		{
			/**
			 * ソート処理
			 * @param arg0
			 * @param arg1
			 * @return int
			 */
			public int compare(Object arg0, Object arg1)
			{
				String[] sort_keys = {};
				sort_keys = SORT_KEYS_1;
				
				for (String key : sort_keys)
				{
					HashMap<String, Comparable> o1 = (HashMap<String, Comparable>)arg0;
					HashMap<String, Comparable> o2 = (HashMap<String, Comparable>)arg1;
					
					Comparable c1 = o1.get(key);
					Comparable c2 = o2.get(key);
					int check = c1.compareTo(c2);
					if (0 != check)
					{
						return check;
					}
				}
				return 0;
			}
		});
		
		// 出力ファイル用にデータを設定
		for (int i = 0 ; i < sortList.size() ; i++)
		{
			HashMap<String, Comparable> dataMap = sortList.get(i);
			//出力対象項目格納領域作成
			JBSbatServiceInterfaceMap out_map = new JBSbatServiceInterfaceMap();
			out_map.setString(JBSbatKKIFE081.KO_NO, String.valueOf(i + 1));							// 項番
			out_map.setString(JBSbatKKIFE081.SUPPORT_NO, dataMap.get(JBSbatKKIFE081.SUPPORT_NO));	// サポート番号
			out_map.setString(JBSbatKKIFE081.SVC_KEI_NO, dataMap.get(JBSbatKKIFE081.SVC_KEI_NO));	// サービス契約番号
			out_map.setString(JBSbatKKIFE081.KEISHA_NM, dataMap.get(JBSbatKKIFE081.KEISHA_NM));	// 契約者名
			out_map.setString(JBSbatKKIFE081.KEI_SVC, dataMap.get(JBSbatKKIFE081.KEI_SVC));	// 契約サービス
			out_map.setString(JBSbatKKIFE081.SETUP_JSSI_YMD, dataMap.get(JBSbatKKIFE081.SETUP_JSSI_YMD));	// セットアップ実施日
			out_map.setString(JBSbatKKIFE081.TRN_RSLT, dataMap.get(JBSbatKKIFE081.TRN_RSLT));	// 処理結果
			out_map.setString(JBSbatKKIFE081.SEIKY_AMNT, dataMap.get(JBSbatKKIFE081.SEIKY_AMNT));	// 請求金額
			out_map.setString(JBSbatKKIFE081.REQ_SK, dataMap.get(JBSbatKKIFE081.REQ_SK));	// 依頼先
			out_map.setString(JBSbatKKIFE081.TRKM_RSLT, dataMap.get(JBSbatKKIFE081.TRKM_RSLT));	// 取込結果
			
			out_map.setOutFlg(true);
			out_bean.addOutMapList(out_map);
		}
		return out_bean;
	}

}
