/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKRseKenhyRegMngnAdd
*	ソースファイル名	：JBSbatKKRseKenhyRegMngnAdd.java
*	作成者				：富士通　
*	作成日				：2019年07月10日
*＜機能概要＞
*　再送信権利付与地域文言登録部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v45.00.00   2019/07/12  FJ)謝       【ANK-3607-00-00】料金収納手数料課金抑止の残課題対応について 新規作成
*   v53.00.00   2021/06/03  FJ)星野     【ANK-4028-00-00】発行手数料の課金判定見直し対応 積み残し対応
*********************************************************************/
package eo.business.service;

import java.io.IOException;
import java.util.HashSet;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFM880;
import eo.business.util.file.JBSbatKKIFM881;
import eo.business.util.file.JBSbatKKIFM882;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JKKStringUtil;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
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;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKRseKenhyRegMngnAdd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";

	/** テーブル(お客様)*/
	private static final String D_TBL_NAME_CK_T_CUST = "CK_T_CUST";

	/** SQL定義キー(KK_SELECT_025)*/
	private static final String ZM_M_WORK_PARAM_KNRI_KK_SELECT_025 = "KK_SELECT_025";

	/** SQL定義キー(KK_SELECT_074)*/
	private static final String CK_T_CUST_KK_SELECT_074 = "KK_SELECT_074";

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;

	/** テーブルアクセスクラス(お客様)*/
	private JBSbatSQLAccess db_CK_T_CUST = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 変換用マップキー：○○○ */
	private static final String MAP_KEY_1 = "○○○";
	
	/** お客様確認備考文言（テレビ） */
	private static final String CUST_CFM_BIKO_MNGN_TV = "再送信権利付与顧客。「タイトル：【○○○再送信】権利付与顧客」を参照。";
	
// ANK-4028-00-00対応 20210603 DEL START
//	/** お客様確認備考文言（電話） */
//	private static final String CUST_CFM_BIKO_MNGN_TEL = "請求書無償の可能性あり顧客。";
// ANK-4028-00-00対応 20210603 DEL END
	
	/** 再送信権利付与顧客CASEファイル編集用 顧客タイプ */
	private static final String CASE_FILE_KOKYAKU_TYPE = "加入者";
	
	/** 再送信権利付与顧客CASEファイル編集用 状態 */
	private static final String CASE_FILE_JYOUTAI = "エスカレーション";
	
	/** 再送信権利付与顧客CASEファイル編集用 ステータス */
	private static final String CASE_FILE_STATUS = "処理中";
	
	/** 再送信権利付与顧客CASEファイル編集用 キュー名 */
	private static final String CASE_FILE_QUE_NM = "○○○再送信権利付与者見守り";
	
	/** 再送信権利付与顧客CASEファイル編集用 受付種別 */
	private static final String CASE_FILE_UKETSUKE_SBT = "他システム";
	
	/** 再送信権利付与顧客CASEファイル編集用 タイトル */
	private static final String CASE_FILE_TITLE = "【○○○再送信】権利付与顧客";
	
	/** 再送信権利付与顧客CASEファイル配置先パス */
	private static final String CASE_FAILE_PATH = "CR_TWS_RK_FILE_DIR";
	
	/** 再送信権利付与顧客CASEファイル */
	private static final String CASE_FILE_NM = "CASE_TVRESEND_yyyyMMddhhmmss.CSV";
	
	/** 再送信権利付与顧客CASE件数ファイル */
	private static final String CASE_CNT_FILE_NM = "CASE_TVRESEND_yyyyMMddhhmmss_CNT.TXT";
	
	/** 再送信権利付与顧客CASEフラグファイル */
	private static final String CASE_FLG_FILE_NM = "CASE_TVRESEND_yyyyMMddhhmmss_FTP.FLG";
	
	/** 再送信権利付与顧客CASEファイル定義 */
	private static final String CASE_FILE_DEF_NM = "KKIFM881.def";
	
	/** 再送信権利付与顧客CASE件数ファイル定義 */
	private static final String CASE_CNT_FILE_DEF_NM = "KKIFM882.def";
	
	/** 業務パラメータ(契約用対応履歴登録ユーザ) */
	private static final String KK_TAIORRK_ADD_USER = "KK_TAIORRK_ADD_USER";
	
	/** お客様確認備考のバイト数 */
	private static final int DB_CUST_CFM_BIKO_BYTE_CNT = 2048;
	
	/** CASEファイル内重複チェック用 サービス契約番号リスト */
	private HashSet<String> chkSvcKeiNoList = null;
	
	/** マイナーエラー重複チェック用 SYSIDリスト */
	private HashSet<String> chkSysidList = null;
	
	/** 再送信権利付与地域リスト */
	private HashSet<String> rseKenhyRegList = null;
	
	/** 業務パラメータ.受付者、担当者 */
	private String taioRrkAddUser = null;
	
	/** 再送信権利付与顧客CASEファイル編集用 問合せ履歴本文 */
	private String caseFileTawsRkText = null;
	
	/** 出力ファイル名用のタイムスタンプ */
	private String fileTimeStamp = null;
	
	/** CASEファイルオブジェクト*/
	private JBSbatOutputFileUtil caseFileObj = null;
	
	/** CASE件数ファイルオブジェクト*/
	private JBSbatOutputFileUtil caseCntFileObj = null;
	
	/** CASEフラグファイルオブジェクト*/
	private JBSbatOutputFileUtil caseFlgFileObj = null;
	
	/** CASEファイル定義オブジェクト*/
	private JBSbatDefFileUtil caseFileDef = null;
	
	/** CASE件数ファイル定義オブジェクト*/
	private JBSbatDefFileUtil caseCntFileDef = null;
	
	/** 再送信権利付与顧客CASEファイル出力件数 */
	private long caseFileCount = 0;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
		db_CK_T_CUST = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_CUST);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		chkSvcKeiNoList = new HashSet<String>();
		chkSysidList = new HashSet<String>();
		rseKenhyRegList = new HashSet<String>();
		
		// システム日時を取得する
		fileTimeStamp = JCCBatCommon.getSysDateTime();
		
		// 受付者、担当者用の文字列を取得する
		taioRrkAddUser = JKKBatCommon.getWorkParamSetteValue(super.commonItem, KK_TAIORRK_ADD_USER);
		
		// 問合せ履歴本文を取得する
		StringBuilder caseFileTawsRkTextSb = new StringBuilder();
		caseFileTawsRkTextSb.append("該当のお客様においては、再送信権利が付与されております。");
		caseFileTawsRkTextSb.append(JKKStrConst.LINE_SEPARATOR);
		caseFileTawsRkTextSb.append("お客様より再送信（○○○限定コース）へ変更希望のお申し出時は再送信ブースへ対応依頼。");
		caseFileTawsRkTextSb.append(JKKStrConst.LINE_SEPARATOR);
		caseFileTawsRkTextSb.append("解約申し出等あれば、以下の案内が必要となります。");
		caseFileTawsRkTextSb.append(JKKStrConst.LINE_SEPARATOR);
		caseFileTawsRkTextSb.append("・通常解約→再送信の権利がなくなります。");
		caseFileTawsRkTextSb.append(JKKStrConst.LINE_SEPARATOR);
		caseFileTawsRkTextSb.append("・住所変更→○○○内での住変であれば、権利付与有りの状態で住変可能。");
		caseFileTawsRkTextSb.append(JKKStrConst.LINE_SEPARATOR);
		caseFileTawsRkTextSb.append("　　　　　　○○○外への住変であれば、再送信権利はなくなります。");
		caseFileTawsRkTextSb.append(JKKStrConst.LINE_SEPARATOR);
		caseFileTawsRkTextSb.append("※内容については、再送信ブースへ確認ください。");
		caseFileTawsRkText = caseFileTawsRkTextSb.toString();
		
		// 再送信権利付与地域を取得する
		executeZM_M_WORK_PARAM_KNRI_KK_SELECT_025(new Object[] {super.opeDate, super.opeDate});
		JBSbatCommonDBInterface workParamKnriMap = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		while (workParamKnriMap != null)
		{
			rseKenhyRegList.add(workParamKnriMap.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE));
			
			// 次のデータを読む
			workParamKnriMap = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		}
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// SYSID
		String sysid = inMap.getString(JBSbatKKIFM880.SYSID);
		
		// 料金グループコード
		String prcGrpCd = inMap.getString(JBSbatKKIFM880.PRC_GRP_CD);
		
		// サービス契約番号
		String svcKeiNo = inMap.getString(JBSbatKKIFM880.SVC_KEI_NO);
		
		// 回線場所市区町村名
		String kaisenPlaceCityNm = inMap.getString(JBSbatKKIFM880.KAISEN_PLACE_CITY_NM);
		
		// 再送信権利付与地域
		String rseKenhyRegTrgt = "";
		for (String rseKenhyReg : rseKenhyRegList)
		{
			if (kaisenPlaceCityNm.contains(rseKenhyReg))
			{
				rseKenhyRegTrgt = rseKenhyReg;
				break;
			}
		}
		
		// 回線場所市区町村名に再送信権利付与地域が含まれている場合
		if (!JKKStringUtil.isNullBlank(rseKenhyRegTrgt))
		{
			// お客様確認備考を取得する
			executeCK_T_CUST_KK_SELECT_074(new Object[] {sysid, super.opeDate, super.opeDate});
			
			// 料金グループコードが"11"(eo光テレビ)または"12"(eo光テレビ(KCN))または"13"(eo光テレビ(再送信))の場合
			if (JKKStrConst.CD00133_11.equals(prcGrpCd)
					|| JKKStrConst.CD00133_12.equals(prcGrpCd)
					|| JKKStrConst.CD00133_13.equals(prcGrpCd))
			{
				// お客様確認備考文言（テレビ）
				String custCfmBikoMngnTv = CUST_CFM_BIKO_MNGN_TV.replaceAll(MAP_KEY_1, rseKenhyRegTrgt);
				
				JBSbatCommonDBInterface custMap = db_CK_T_CUST.selectNext();
				while (custMap != null)
				{
					// 世代登録年月日時分秒
					String geneAddDtm = custMap.getString(JBSbatCK_T_CUST.GENE_ADD_DTM);
					
					// お客様確認備考(更新前)
					String custCfmBikoBf = custMap.getString(JBSbatCK_T_CUST.CUST_CFM_BIKO);
					
					// お客様確認備考の更新を行う
					updateCustCfmBiko(sysid, geneAddDtm, custCfmBikoBf, custCfmBikoMngnTv);
					
					// 次のデータを読む
					custMap = db_CK_T_CUST.selectNext();
				}
				
				if (caseFileObj == null)
				{
					// 再送信権利付与顧客CASEファイルを作成する
					createCaseFile();
				}
				
				if (!chkSvcKeiNoList.contains(svcKeiNo))
				{
					// 再送信権利付与顧客CASEファイル情報を作成する
					JBSbatServiceInterfaceMap caseMap = createCaseMap(svcKeiNo, rseKenhyRegTrgt);
					
					// 再送信権利付与顧客CASEファイル情報をCASEファイルに出力する
					caseFileObj.print(caseMap, caseFileDef);
					
					// CASEファイル登録用データカウント
					caseFileCount++;
					
					// 出力済サービス契約番号を退避する
					chkSvcKeiNoList.add(svcKeiNo);
				}
			}
// ANK-4028-00-00対応 20210603 DEL START
//			// 料金グループコードが"10"(eo光電話)の場合
//			else if (JKKStrConst.CD00133_10.equals(prcGrpCd))
//			{
//				// お客様確認備考文言（電話）
//				String custCfmBikoMngnTel = CUST_CFM_BIKO_MNGN_TEL.replaceAll(MAP_KEY_1, rseKenhyRegTrgt);
//				
//				JBSbatCommonDBInterface custMap = db_CK_T_CUST.selectNext();
//				while (custMap != null)
//				{
//					// 世代登録年月日時分秒
//					String geneAddDtm = custMap.getString(JBSbatCK_T_CUST.GENE_ADD_DTM);
//					
//					// お客様確認備考(更新前)
//					String custCfmBikoBf = custMap.getString(JBSbatCK_T_CUST.CUST_CFM_BIKO);
//					
//					// お客様確認備考の更新を行う
//					updateCustCfmBiko(sysid, geneAddDtm, custCfmBikoBf, custCfmBikoMngnTel);
//					
//					// 次のデータを読む
//					custMap = db_CK_T_CUST.selectNext();
//				}
//			}
// ANK-4028-00-00対応 20210603 DEL END
		}
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_WORK_PARAM_KNRI.close();
		db_CK_T_CUST.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		// 再送信権利付与顧客CASEファイルが存在する場合
		if (caseFileObj != null)
		{
			// 再送信権利付与顧客CASE件数ファイルを作成する
			createCaseCntFile();
			
			// 再送信権利付与顧客CASEフラグファイルを作成する
			createCaseFlgFile();
		}
		
		// ファイルを閉じる
		closeFileObj();
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_025)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	業務パラメータ適用開始年月日
	 *		 	業務パラメータ適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_WORK_PARAM_KNRI_KK_SELECT_025(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_ZM_M_WORK_PARAM_KNRI.selectBySqlDefine(paramList, ZM_M_WORK_PARAM_KNRI_KK_SELECT_025);
	}

	/**
	 * SQLKEY(KK_SELECT_074)で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_074(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_CK_T_CUST.selectBySqlDefine(paramList, CK_T_CUST_KK_SELECT_074);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	お客様確認備考				CUST_CFM_BIKO
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SYSID
	 *		 	GENE_ADD_DTM
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_CUST_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("CUST_CFM_BIKO", setParam[0]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SYSID", whereParam[0]);
		whereMap.setValue("GENE_ADD_DTM", whereParam[1]);

		// DBアクセスを実行します
		db_CK_T_CUST.updateByPrimaryKeys(whereMap, setMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * お客様確認備考を更新する
	 * @param sysid SYSID
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param custCfmBikoBf お客様確認備考(更新前)
	 * @param custCfmBikoMngn お客様確認備考文言
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void updateCustCfmBiko(String sysid, String geneAddDtm, String custCfmBikoBf, String custCfmBikoMngn) throws Exception
	{
		// お客様確認備考(更新前)が設定されていない場合
		if (JKKStringUtil.isNullBlank(custCfmBikoBf))
		{
			// 更新値を設定する
			Object[] custSetParam = new Object[]{custCfmBikoMngn};
			
			// 条件を設定する
			Object[] custWhereParam = new Object[]{sysid, geneAddDtm};
			
			// お客様確認備考の更新を行う
			executeCK_T_CUST_PKUPDATE(custSetParam, custWhereParam);
		}
		// お客様確認備考(更新前)が設定されている場合
		else
		{
			// お客様確認備考(更新前)にお客様確認備考文言が含まれていない場合
			if (!custCfmBikoBf.contains(custCfmBikoMngn))
			{
				// お客様確認備考(更新後)
				StringBuilder custCfmBikoAfSb = new StringBuilder();
				custCfmBikoAfSb.append(custCfmBikoMngn);
				custCfmBikoAfSb.append(JKKStrConst.LINE_SEPARATOR);
				custCfmBikoAfSb.append(custCfmBikoBf);
				String custCfmBikoAf = custCfmBikoAfSb.toString();
				
				// お客様確認備考の最大バイト数を超える場合、マイナーエラーを出力する
				if (custCfmBikoAf.getBytes(JKKBatConst.SJIS).length > DB_CUST_CFM_BIKO_BYTE_CNT)
				{
					if (!chkSysidList.contains(sysid))
					{
						// メッセージ内容 お客様確認備考の最大桁数を超過したため、文言追記対象外としました。(SYSID：%1%)
						super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB1950AW, new String[]{sysid});
						super.commonItem.setErrFlg(true);
						chkSysidList.add(sysid);
					}
				}
				else
				{
					// 更新値を設定する
					Object[] custSetParam = new Object[]{custCfmBikoAf};
					
					// 条件を設定する
					Object[] custWhereParam = new Object[]{sysid, geneAddDtm};
					
					// お客様確認備考の更新を行う
					executeCK_T_CUST_PKUPDATE(custSetParam, custWhereParam);
				}
			}
		}
	}
	
	/**
	 * 再送信権利付与顧客CASEファイル情報を作成する
	 * @param svcKeiNo サービス契約番号
	 * @param rseKenhyRegTrgt 再送信権利付与地域
	 * @return outMap CASEファイル登録情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private JBSbatServiceInterfaceMap createCaseMap(String svcKeiNo, String rseKenhyRegTrgt) throws Exception
	{
		// 出力データ作成
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 顧客タイプ
		outMap.setString(JBSbatKKIFM881.KOKYAKU_TYPE, CASE_FILE_KOKYAKU_TYPE);
		// お客様ID
		outMap.setString(JBSbatKKIFM881.CUST_ID, svcKeiNo);
		// 顧客氏名
		outMap.setString(JBSbatKKIFM881.KOKYAKU_NM, null);
		// 顧客氏名（カナ）
		outMap.setString(JBSbatKKIFM881.KOKYAKU_NM_KANA, null);
		// 電話番号
		outMap.setString(JBSbatKKIFM881.TEL_NO, null);
		// 電話番号2
		outMap.setString(JBSbatKKIFM881.TEL_NO_2, null);
		// 郵便番号
		outMap.setString(JBSbatKKIFM881.YUBIN_NO, null);
		// 住所1
		outMap.setString(JBSbatKKIFM881.JUSHO_1, null);
		// 住所2
		outMap.setString(JBSbatKKIFM881.JUSHO_2, null);
		// 住所3
		outMap.setString(JBSbatKKIFM881.JUSHO_3, null);
		// 性別
		outMap.setString(JBSbatKKIFM881.SEIBETSU, null);
		// 生年月日
		outMap.setString(JBSbatKKIFM881.SEINEN_GAPPI, null);
		// 状態
		outMap.setString(JBSbatKKIFM881.JYOUTAI, CASE_FILE_JYOUTAI);
		// ステータス
		outMap.setString(JBSbatKKIFM881.STATUS, CASE_FILE_STATUS);
		// 作成日時
		outMap.setString(JBSbatKKIFM881.SAKUSEI_DATE, JKKBatCommon.formatDatetimeSS(JKKBatCommon.getSysDateTime()));
		// 受付者
		outMap.setString(JBSbatKKIFM881.UKETSUKE, taioRrkAddUser);
		// 担当者
		outMap.setString(JBSbatKKIFM881.TANTOU, taioRrkAddUser);
		// キュー名
		outMap.setString(JBSbatKKIFM881.QUE_NM, CASE_FILE_QUE_NM.replaceAll(MAP_KEY_1, rseKenhyRegTrgt));
		// 受付種別
		outMap.setString(JBSbatKKIFM881.UKETSUKE_SBT, CASE_FILE_UKETSUKE_SBT);
		// タイトル
		outMap.setString(JBSbatKKIFM881.TITLE, CASE_FILE_TITLE.replaceAll(MAP_KEY_1, rseKenhyRegTrgt));
		// カテゴリ１
		outMap.setString(JBSbatKKIFM881.CTGR_1, null);
		// カテゴリ２
		outMap.setString(JBSbatKKIFM881.CTGR_2, null);
		// カテゴリ３
		outMap.setString(JBSbatKKIFM881.CTGR_3, null);
		// カテゴリ４
		outMap.setString(JBSbatKKIFM881.CTGR_4, null);
		// カテゴリ５
		outMap.setString(JBSbatKKIFM881.CTGR_5, null);
		// カテゴリ６
		outMap.setString(JBSbatKKIFM881.CTGR_6, null);
		// カテゴリ７
		outMap.setString(JBSbatKKIFM881.CTGR_7, null);
		// カテゴリ８
		outMap.setString(JBSbatKKIFM881.CTGR_8, null);
		// カテゴリ９
		outMap.setString(JBSbatKKIFM881.CTGR_9, null);
		// カテゴリ１０
		outMap.setString(JBSbatKKIFM881.CTGR_10, null);
		// カテゴリ１１
		outMap.setString(JBSbatKKIFM881.CTGR_11, null);
		// 問合せ履歴
		outMap.setString(JBSbatKKIFM881.TOIAWASE_RIREKI, caseFileTawsRkText.replaceAll(MAP_KEY_1, rseKenhyRegTrgt));
		// 問合せ客ID
		outMap.setString(JBSbatKKIFM881.TOIAWASE_KYAKU_ID, null);
		// eoID
		outMap.setString(JBSbatKKIFM881.EO_ID, null);
		// 申込書番号
		outMap.setString(JBSbatKKIFM881.MSKMSHO_NO, null);
		// エスカレーション日時
		outMap.setString(JBSbatKKIFM881.ESCLA_DATE, null);
		// コールバック時間指定タイプ
		outMap.setString(JBSbatKKIFM881.CALLBK_SHITEI_TYPE_CD, null);
		// 業務個別設定組織コード
		outMap.setString(JBSbatKKIFM881.WKKBT_ORG_CD, null);
		
		return outMap;
	}
	
	/**
	 * 再送信権利付与顧客CASEファイルを作成する
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void createCaseFile() throws Exception
	{
		// ファイルパス + ファイル名を作成する
		String caseFileName = JBSbatAplConst.getAplConstValue(CASE_FAILE_PATH) + JKKBatConst.S_HALF_SLASH
								+ CASE_FILE_NM.replaceAll(JKKStrConst.FILE_TIMESTAMP_FORMAT, fileTimeStamp);
		
		try
		{
			// ファイルオブジェクトを作成する
			caseFileObj = new JBSbatOutputFileUtil(caseFileName);
			caseFileObj.setJobID(commonItem.getJobid());
			caseFileObj.setEncode(JKKStrConst.ENCODE_SJIS);
			caseFileObj.setLine(JKKBatConst.LINE_CRLF);
			
			// 定義ファイル名を取得する
			String caseDefFileNm = JBSbatAplConst.getAplConstValue(JKKStrConst.KK_DIR_IND) + CASE_FILE_DEF_NM;
			
			// 定義ファイルオブジェクトを作成する
			caseFileDef = new JBSbatDefFileUtil(caseDefFileNm, caseFileObj);
			
			// Writerオブジェクトを作成する
			caseFileObj.createWriter();
		}
		catch (IOException e)
		{
			// ファイルを閉じる
			closeFileObj();
			
			// メッセージ内容 ファイルの作成に失敗しました。%1%
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0500CE, new String[] {caseFileName});
		}
	}
	
	/**
	 * 再送信権利付与顧客CASE件数ファイルを作成する
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void createCaseCntFile() throws Exception
	{
		// ファイルパス + ファイル名を作成する
		String caseCntFileName = JBSbatAplConst.getAplConstValue(CASE_FAILE_PATH) + JKKBatConst.S_HALF_SLASH
								+ CASE_CNT_FILE_NM.replaceAll(JKKStrConst.FILE_TIMESTAMP_FORMAT, fileTimeStamp);
		
		try
		{
			// ファイルオブジェクトを作成する
			caseCntFileObj = new JBSbatOutputFileUtil(caseCntFileName);
			caseCntFileObj.setJobID(commonItem.getJobid());
			caseCntFileObj.setEncode(JKKStrConst.ENCODE_SJIS);
			caseCntFileObj.setLine(JKKBatConst.LINE_CRLF);
			
			// 定義ファイル名を取得する
			String caseDefFileNm = JBSbatAplConst.getAplConstValue(JKKStrConst.KK_DIR_IND) + CASE_CNT_FILE_DEF_NM;
			
			// 定義ファイルオブジェクトを作成する
			caseCntFileDef = new JBSbatDefFileUtil(caseDefFileNm, caseCntFileObj);
			
			// Writerオブジェクトを作成する
			caseCntFileObj.createWriter();
			
			// データ部を作成する
			JBSbatServiceInterfaceMap outDataMap = new JBSbatServiceInterfaceMap();
			outDataMap.set(JBSbatKKIFM882.CNT, caseFileCount);
			caseCntFileObj.print(outDataMap, caseCntFileDef);
		}
		catch (IOException e)
		{
			// ファイルを閉じる
			closeFileObj();
			
			// メッセージ内容 ファイルの作成に失敗しました。%1%
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0500CE, new String[] {caseCntFileName});
		}
	}
	
	/**
	 * 再送信権利付与顧客CASEフラグファイルを作成する
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void createCaseFlgFile() throws Exception
	{
		// ファイルパス + ファイル名を作成する
		String caseFlgFileName = JBSbatAplConst.getAplConstValue(CASE_FAILE_PATH) + JKKBatConst.S_HALF_SLASH
								+ CASE_FLG_FILE_NM.replaceAll(JKKStrConst.FILE_TIMESTAMP_FORMAT, fileTimeStamp);
		
		try
		{
			// ファイルオブジェクトを作成する
			caseFlgFileObj = new JBSbatOutputFileUtil(caseFlgFileName);
			caseFlgFileObj.setJobID(commonItem.getJobid());
			caseFlgFileObj.setEncode(JKKStrConst.ENCODE_SJIS);
			caseFlgFileObj.setLine(JKKBatConst.LINE_CRLF);
			
			// Writerオブジェクトを作成する
			caseFlgFileObj.createWriter();
		}
		catch (IOException e)
		{
			// ファイルを閉じる
			closeFileObj();
			
			// メッセージ内容 ファイルの作成に失敗しました。%1%
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0500CE, new String[] {caseFlgFileName});
		}
	}
	
	/**
	 * ファイルを閉じる
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void closeFileObj() throws Exception
	{
		// 再送信権利付与顧客CASEファイルが存在する場合
		if (caseFileObj != null)
		{
			// ファイルを閉じる
			caseFileObj.close();
		}
		
		// 再送信権利付与顧客CASE件数ファイルが存在する場合
		if (caseCntFileObj != null)
		{
			// ファイルを閉じる
			caseCntFileObj.close();
		}
		
		// 再送信権利付与顧客CASEフラグファイルが存在する場合
		if (caseFlgFileObj != null)
		{
			// ファイルを閉じる
			caseFlgFileObj.close();
		}
	}
}
